This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
9d2a2bf448753145bd8825b4e4d1f330f59cf96e
[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; 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         if $test -f $uname; then
1972                 set X $myuname
1973                 shift
1974
1975                 case "$5" in
1976                 fps*) osname=fps ;;
1977                 mips*)
1978                         case "$4" in
1979                         umips) osname=umips ;;
1980                         *) osname=mips ;;
1981                         esac;;
1982                 [23]100) osname=mips ;;
1983                 next*) osname=next ;;
1984                 i386*)
1985                         if $test -f /etc/kconfig; then
1986                                 osname=isc
1987                                 if test "$lns" = "ln -s"; then
1988                                         osvers=4
1989                                 elif $contains _SYSV3 /usr/include/stdio.h > /dev/null 2>&1 ; then
1990                                         osvers=3
1991                                 elif $contains _POSIX_SOURCE /usr/include/stdio.h > /dev/null 2>&1 ; then
1992                                         osvers=2
1993                                 fi
1994                         fi
1995                         ;;
1996                 pc*)
1997                         if test -n "$DJGPP"; then
1998                                 osname=dos
1999                                 osvers=djgpp
2000                         fi
2001                         ;;
2002                 esac
2003
2004                 case "$1" in
2005                 aix) osname=aix
2006                         tmp=`( (oslevel) 2>/dev/null || echo "not found") 2>&1`
2007                         case "$tmp" in
2008                         'not found') osvers="$4"."$3" ;;
2009                         '<3240'|'<>3240') osvers=3.2.0 ;;
2010                         '=3240'|'>3240'|'<3250'|'<>3250') osvers=3.2.4 ;;
2011                         '=3250'|'>3250') osvers=3.2.5 ;;
2012                         *) osvers=$tmp;;
2013                         esac
2014                         ;;
2015                 *dc.osx) osname=dcosx
2016                         osvers="$3"
2017                         ;;
2018                 dnix) osname=dnix
2019                         osvers="$3"
2020                         ;;
2021                 domainos) osname=apollo
2022                         osvers="$3"
2023                         ;;
2024                 dgux) osname=dgux 
2025                         osvers="$3"
2026                         ;;
2027                 dynixptx*) osname=dynixptx
2028                         osvers="$3"
2029                         ;;
2030                 freebsd) osname=freebsd 
2031                         osvers="$3" ;;
2032                 genix) osname=genix ;;
2033                 hp*) osname=hpux 
2034                         osvers=`echo "$3" | $sed 's,.*\.\([0-9]*\.[0-9]*\),\1,'`
2035                         ;;
2036                 irix*) osname=irix
2037                         case "$3" in
2038                         4*) osvers=4 ;;
2039                         5*) osvers=5 ;;
2040                         *)      osvers="$3" ;;
2041                         esac
2042                         ;;
2043                 linux) osname=linux
2044                         case "$3" in
2045                         *)      osvers="$3" ;;
2046                         esac
2047                         ;;
2048                 MiNT) osname=mint
2049                         ;;
2050                 netbsd*) osname=netbsd
2051                         osvers="$3"
2052                         ;;
2053                 news-os) osvers="$3"
2054                         case "$3" in
2055                         4*) osname=newsos4 ;;
2056                         *) osname=newsos ;;
2057                         esac
2058                         ;;
2059                 bsd386) osname=bsd386
2060                         osvers=`$uname -r`
2061                         ;;
2062                 powerux | power_ux | powermax_os | powermaxos | \
2063                 powerunix | power_unix) osname=powerux
2064                         osvers="$3"
2065                         ;;
2066                 next*) osname=next ;;
2067                 solaris) osname=solaris
2068                         case "$3" in
2069                         5*) osvers=`echo $3 | $sed 's/^5/2/g'` ;;
2070                         *)      osvers="$3" ;;
2071                         esac
2072                         ;;
2073                 sunos) osname=sunos
2074                         case "$3" in
2075                         5*) osname=solaris
2076                                 osvers=`echo $3 | $sed 's/^5/2/g'` ;;
2077                         *)      osvers="$3" ;;
2078                         esac
2079                         ;;
2080                 titanos) osname=titanos
2081                         case "$3" in
2082                         1*) osvers=1 ;;
2083                         2*) osvers=2 ;;
2084                         3*) osvers=3 ;;
2085                         4*) osvers=4 ;;
2086                         *)      osvers="$3" ;;
2087                         esac
2088                         ;;
2089                 ultrix) osname=ultrix
2090                         osvers="$3"
2091                         ;;
2092                 osf1|mls+)      case "$5" in
2093                                 alpha)
2094                                         osname=dec_osf
2095                                         osvers=`echo "$3" | sed 's/^[xvt]//'`
2096                                         ;;
2097                         hp*)    osname=hp_osf1  ;;
2098                         mips)   osname=mips_osf1 ;;
2099                         esac
2100                         ;;
2101                 uts) osname=uts 
2102                         osvers="$3"
2103                         ;;
2104                 qnx) osname=qnx
2105                         osvers="$4"
2106                         ;;
2107                 $2) case "$osname" in
2108                         *isc*) ;;
2109                         *freebsd*) ;;
2110                         svr*)
2111                                 : svr4.x or possibly later
2112                                 case "svr$3" in 
2113                                 ${osname}*)
2114                                         osname=svr$3
2115                                         osvers=$4
2116                                         ;;
2117                                 esac
2118                                 case "$osname" in
2119                                 svr4.0)
2120                                         : Check for ESIX
2121                                         if test -f /stand/boot ; then
2122                                                 eval `grep '^INITPROG=[a-z/0-9]*$' /stand/boot`
2123                                                 if test -n "$INITPROG" -a -f "$INITPROG"; then
2124                         isesix=`strings -a $INITPROG|grep 'ESIX SYSTEM V/386 Release 4.0'`
2125                                                         if test -n "$isesix"; then
2126                                                                 osname=esix4
2127                                                         fi
2128                                                 fi
2129                                         fi
2130                                         ;;
2131                                 esac
2132                                 ;;
2133                         *)      if test -f /etc/systemid; then
2134                                         osname=sco
2135                                         set `echo $3 | $sed 's/\./ /g'` $4
2136                                         if $test -f $src/hints/sco_$1_$2_$3.sh; then
2137                                                 osvers=$1.$2.$3
2138                                         elif $test -f $src/hints/sco_$1_$2.sh; then
2139                                                 osvers=$1.$2
2140                                         elif $test -f $src/hints/sco_$1.sh; then
2141                                                 osvers=$1
2142                                         fi
2143                                 else
2144                                         case "$osname" in
2145                                         '') : Still unknown.  Probably a generic Sys V.
2146                                                 osname="sysv"
2147                                                 osvers="$3"
2148                                                 ;;
2149                                         esac
2150                                 fi
2151                                 ;;
2152                         esac
2153                         ;;
2154                 *)      case "$osname" in
2155                         '') : Still unknown.  Probably a generic BSD.
2156                                 osname="$1"
2157                                 osvers="$3"
2158                                 ;;
2159                         esac
2160                         ;;
2161                 esac
2162         else
2163                 if test -f /vmunix -a -f $src/hints/news_os.sh; then
2164                         (what /vmunix | UU/tr '[A-Z]' '[a-z]') > UU/kernel.what 2>&1
2165                         if $contains news-os UU/kernel.what >/dev/null 2>&1; then
2166                                 osname=news_os
2167                         fi
2168                         $rm -f UU/kernel.what
2169                 elif test -d c:/.; then
2170                         set X $myuname
2171                         osname=os2
2172                         osvers="$5"
2173                 fi
2174         fi
2175         
2176         : Now look for a hint file osname_osvers, unless one has been
2177         : specified already.
2178         case "$hintfile" in
2179         ''|' ')
2180                 file=`echo "${osname}_${osvers}" | $sed -e 's@\.@_@g' -e 's@_$@@'`
2181                 : Also try without trailing minor version numbers.
2182                 xfile=`echo $file | $sed -e 's@_[^_]*$@@'`
2183                 xxfile=`echo $xfile | $sed -e 's@_[^_]*$@@'`
2184                 xxxfile=`echo $xxfile | $sed -e 's@_[^_]*$@@'`
2185                 xxxxfile=`echo $xxxfile | $sed -e 's@_[^_]*$@@'`
2186                 case "$file" in
2187                 '') dflt=none ;;
2188                 *)  case "$osvers" in
2189                         '') dflt=$file
2190                                 ;;
2191                         *)  if $test -f $src/hints/$file.sh ; then
2192                                         dflt=$file
2193                                 elif $test -f $src/hints/$xfile.sh ; then
2194                                         dflt=$xfile
2195                                 elif $test -f $src/hints/$xxfile.sh ; then
2196                                         dflt=$xxfile
2197                                 elif $test -f $src/hints/$xxxfile.sh ; then
2198                                         dflt=$xxxfile
2199                                 elif $test -f $src/hints/$xxxxfile.sh ; then
2200                                         dflt=$xxxxfile
2201                                 elif $test -f "$src/hints/${osname}.sh" ; then
2202                                         dflt="${osname}"
2203                                 else
2204                                         dflt=none
2205                                 fi
2206                                 ;;
2207                         esac
2208                         ;;
2209                 esac
2210                 if $test -f Policy.sh ; then
2211                         case "$dflt" in
2212                         *Policy*) ;;
2213                         none) dflt="Policy" ;;
2214                         *) dflt="Policy $dflt" ;;
2215                         esac
2216                 fi
2217                 ;;
2218         *)
2219                 dflt=`echo $hintfile | $sed 's/\.sh$//'`
2220                 ;;
2221         esac
2222
2223         if $test -f Policy.sh ; then
2224                 $cat <<EOM
2225
2226 There's also a Policy hint file available, which should make the
2227 site-specific (policy) questions easier to answer.
2228 EOM
2229
2230         fi
2231
2232         $cat <<EOM
2233
2234 You may give one or more space-separated answers, or "none" if appropriate.
2235 A well-behaved OS will have no hints, so answering "none" or just "Policy"
2236 is a good thing.  DO NOT give a wrong version.
2237
2238 EOM
2239
2240         rp="Which of these apply, if any?"
2241         . UU/myread
2242         tans=$ans
2243         for file in $tans; do
2244                 if $test X$file = XPolicy -a -f Policy.sh; then
2245                         . Policy.sh
2246                         $cat Policy.sh >> UU/config.sh
2247                 elif $test -f $src/hints/$file.sh; then
2248                         . $src/hints/$file.sh
2249                         $cat $src/hints/$file.sh >> UU/config.sh
2250                 elif $test X$tans = X -o X$tans = Xnone ; then
2251                         : nothing
2252                 else
2253                         : Give one chance to correct a possible typo.
2254                         echo "$file.sh does not exist"
2255                         dflt=$file
2256                         rp="hint to use instead?"
2257                         . UU/myread
2258                         for file in $ans; do
2259                                 if $test -f "$src/hints/$file.sh"; then
2260                                         . $src/hints/$file.sh
2261                                         $cat $src/hints/$file.sh >> UU/config.sh
2262                                 elif $test X$ans = X -o X$ans = Xnone ; then
2263                                         : nothing
2264                                 else
2265                                         echo "$file.sh does not exist -- ignored."
2266                                 fi
2267                         done
2268                 fi
2269         done
2270
2271         hint=recommended
2272         : Remember our hint file for later.
2273         if $test -f "$src/hints/$file.sh" ; then
2274                 hintfile="$file"
2275         else
2276                 hintfile=''
2277         fi
2278 fi
2279 cd UU
2280 ;;
2281 *)
2282         echo " "
2283         echo "Fetching default answers from $config_sh..." >&4
2284         tmp_n="$n"
2285         tmp_c="$c"
2286         cd ..
2287         cp $config_sh config.sh 2>/dev/null
2288         chmod +w config.sh
2289         . ./config.sh
2290         cd UU
2291         cp ../config.sh .
2292         n="$tmp_n"
2293         c="$tmp_c"
2294         hint=previous
2295         ;;
2296 esac
2297 test "$override" && . ./optdef.sh
2298 myuname="$newmyuname"
2299
2300 : Restore computed paths
2301 for file in $loclist $trylist; do
2302         eval $file="\$_$file"
2303 done
2304
2305 cat << EOM
2306
2307 Configure uses the operating system name and version to set some defaults.
2308 The default value is probably right if the name rings a bell. Otherwise,
2309 since spelling matters for me, either accept the default or answer "none"
2310 to leave it blank.
2311
2312 EOM
2313 case "$osname" in
2314         ''|' ')
2315                 case "$hintfile" in
2316                 ''|' '|none) dflt=none ;;
2317                 *)  dflt=`echo $hintfile | $sed -e 's/\.sh$//' -e 's/_.*$//'` ;;
2318                 esac
2319                 ;;
2320         *) dflt="$osname" ;;
2321 esac
2322 rp="Operating system name?"
2323 . ./myread
2324 case "$ans" in
2325 none)  osname='' ;;
2326 *) osname=`echo "$ans" | $sed -e 's/[   ][      ]*/_/g' | ./tr '[A-Z]' '[a-z]'`;;
2327 esac
2328 echo " "
2329 case "$osvers" in
2330         ''|' ')
2331                 case "$hintfile" in
2332                 ''|' '|none) dflt=none ;;
2333                 *)      dflt=`echo $hintfile | $sed -e 's/\.sh$//' -e 's/^[^_]*//'`
2334                         dflt=`echo $dflt | $sed -e 's/^_//' -e 's/_/./g'`
2335                         case "$dflt" in
2336                         ''|' ') dflt=none ;;
2337                         esac
2338                         ;;
2339                 esac
2340                 ;;
2341         *) dflt="$osvers" ;;
2342 esac
2343 rp="Operating system version?"
2344 . ./myread
2345 case "$ans" in
2346 none)  osvers='' ;;
2347 *) osvers="$ans" ;;
2348 esac
2349
2350 : who configured the system
2351 cf_time=`LC_ALL=C; export LC_ALL; $date 2>&1`
2352 cf_by=`(logname) 2>/dev/null`
2353 case "$cf_by" in
2354 "")
2355         cf_by=`(whoami) 2>/dev/null`
2356         case "$cf_by" in
2357         "") cf_by=unknown ;;
2358         esac ;;
2359 esac
2360
2361 : set up the script used to warn in case of inconsistency
2362 cat <<EOS >whoa
2363 $startsh
2364 EOS
2365 cat <<'EOSC' >>whoa
2366 dflt=y
2367 echo " "
2368 echo "*** WHOA THERE!!! ***" >&4
2369 echo "    The $hint value for \$$var on this machine was \"$was\"!" >&4
2370 rp="    Keep the $hint value?"
2371 . ./myread
2372 case "$ans" in
2373 y) td=$was; tu=$was;;
2374 esac
2375 EOSC
2376
2377 : function used to set $1 to $val
2378 setvar='var=$1; eval "was=\$$1"; td=$define; tu=$undef;
2379 case "$val$was" in
2380 $define$undef) . ./whoa; eval "$var=\$td";;
2381 $undef$define) . ./whoa; eval "$var=\$tu";;
2382 *) eval "$var=$val";;
2383 esac'
2384
2385 cat <<EOM
2386
2387 Perl can be built to take advantage of threads, on some systems.
2388 To do so, Configure must be run with -Dusethreads.
2389 (See README.threads for details.)
2390 EOM
2391 case "$usethreads" in
2392 $define|true|[yY]*)     dflt='y';;
2393 *) dflt='n';;
2394 esac
2395 rp='Build a threading Perl?'
2396 . ./myread
2397 case "$ans" in
2398 y|Y)    val="$define" ;;     
2399 *)      val="$undef" ;;
2400 esac
2401 set usethreads
2402 eval $setvar 
2403 : Look for a hint-file generated 'call-back-unit'.  Now that the
2404 : user has specified if a threading perl is to be built, we may need 
2405 : to set or change some other defaults.
2406 if $test -f usethreads.cbu; then
2407     . ./usethreads.cbu
2408 fi
2409 case "$d_oldpthreads" in
2410 '')     : Configure tests would be welcome here.  For now, assume undef.
2411         val="$undef" ;;
2412 *)      val="$d_oldpthreads" ;;
2413 esac
2414 set d_oldpthreads
2415 eval $setvar
2416
2417 : determine the architecture name
2418 echo " "
2419 if xxx=`./loc arch blurfl $pth`; $test -f "$xxx"; then
2420         tarch=`arch`"-$osname"
2421 elif xxx=`./loc uname blurfl $pth`; $test -f "$xxx" ; then
2422         if uname -m > tmparch 2>&1 ; then
2423                 tarch=`$sed -e 's/ *$//' -e 's/ /_/g' \
2424                         -e 's/$/'"-$osname/" tmparch`
2425         else
2426                 tarch="$osname"
2427         fi
2428         $rm -f tmparch
2429 else
2430         tarch="$osname"
2431 fi
2432 case "$myarchname" in
2433 ''|"$tarch") ;;
2434 *)
2435         echo "(Your architecture name used to be $myarchname.)"
2436         archname=''
2437         ;;
2438 esac
2439 case "$archname" in
2440 '') dflt="$tarch";;
2441 *) dflt="$archname";;
2442 esac
2443 rp='What is your architecture name'
2444 . ./myread
2445 case "$usethreads" in
2446 $define)  echo "Threads selected." >&4
2447           case "$ans" in
2448           *-thread) echo "...and architecture name already ends in -thread." >&4
2449                     archname="$ans"
2450                     ;;
2451           *)        archname="$ans-thread"
2452                     echo "...setting architecture name to $archname." >&4
2453                     ;;
2454           esac
2455           ;;
2456 *)        archname="$ans" ;;
2457 esac
2458 myarchname="$tarch"
2459 : is AFS running?
2460 echo " "
2461 case "$afs" in
2462 $define|true)   afs=true ;;
2463 $undef|false)   afs=false ;;
2464 *)      if test -d /afs; then
2465                 afs=true
2466         else
2467                 afs=false
2468         fi
2469         ;;
2470 esac
2471 if $afs; then
2472         echo "AFS may be running... I'll be extra cautious then..." >&4
2473 else
2474         echo "AFS does not seem to be running..." >&4
2475 fi
2476
2477 : decide how portable to be.  Allow command line overrides.
2478 case "$d_portable" in
2479 "$undef") ;;
2480 *)      d_portable="$define" ;;
2481 esac
2482
2483 : set up shell script to do ~ expansion
2484 cat >filexp <<EOSS
2485 $startsh
2486 : expand filename
2487 case "\$1" in
2488  ~/*|~)
2489         echo \$1 | $sed "s|~|\${HOME-\$LOGDIR}|"
2490         ;;
2491  ~*)
2492         if $test -f /bin/csh; then
2493                 /bin/csh -f -c "glob \$1"
2494                 failed=\$?
2495                 echo ""
2496                 exit \$failed
2497         else
2498                 name=\`$expr x\$1 : '..\([^/]*\)'\`
2499                 dir=\`$sed -n -e "/^\${name}:/{s/^[^:]*:[^:]*:[^:]*:[^:]*:[^:]*:\([^:]*\).*"'\$'"/\1/" -e p -e q -e '}' </etc/passwd\`
2500                 if $test ! -d "\$dir"; then
2501                         me=\`basename \$0\`
2502                         echo "\$me: can't locate home directory for: \$name" >&2
2503                         exit 1
2504                 fi
2505                 case "\$1" in
2506                 */*)
2507                         echo \$dir/\`$expr x\$1 : '..[^/]*/\(.*\)'\`
2508                         ;;
2509                 *)
2510                         echo \$dir
2511                         ;;
2512                 esac
2513         fi
2514         ;;
2515 *)
2516         echo \$1
2517         ;;
2518 esac
2519 EOSS
2520 chmod +x filexp
2521 $eunicefix filexp
2522
2523 : now set up to get a file name
2524 cat <<EOS >getfile
2525 $startsh
2526 EOS
2527 cat <<'EOSC' >>getfile
2528 tilde=''
2529 fullpath=''
2530 already=''
2531 skip=''
2532 none_ok=''
2533 exp_file=''
2534 nopath_ok=''
2535 orig_rp="$rp"
2536 orig_dflt="$dflt"
2537
2538 case "$fn" in
2539 *\(*)
2540         expr $fn : '.*(\(.*\)).*' | tr ',' $trnl >getfile.ok
2541         fn=`echo $fn | sed 's/(.*)//'`
2542         ;;
2543 esac
2544
2545 case "$fn" in
2546 *:*)
2547         loc_file=`expr $fn : '.*:\(.*\)'`
2548         fn=`expr $fn : '\(.*\):.*'`
2549         ;;
2550 esac
2551
2552 case "$fn" in
2553 *~*) tilde=true;;
2554 esac
2555 case "$fn" in
2556 */*) fullpath=true;;
2557 esac
2558 case "$fn" in
2559 *+*) skip=true;;
2560 esac
2561 case "$fn" in
2562 *n*) none_ok=true;;
2563 esac
2564 case "$fn" in
2565 *e*) exp_file=true;;
2566 esac
2567 case "$fn" in
2568 *p*) nopath_ok=true;;
2569 esac
2570
2571 case "$fn" in
2572 *f*) type='File';;
2573 *d*) type='Directory';;
2574 *l*) type='Locate';;
2575 esac
2576
2577 what="$type"
2578 case "$what" in
2579 Locate) what='File';;
2580 esac
2581
2582 case "$exp_file" in
2583 '')
2584         case "$d_portable" in
2585         "$define") ;;
2586         *) exp_file=true;;
2587         esac
2588         ;;
2589 esac
2590
2591 cd ..
2592 while test "$type"; do
2593         redo=''
2594         rp="$orig_rp"
2595         dflt="$orig_dflt"
2596         case "$tilde" in
2597         true) rp="$rp (~name ok)";;
2598         esac
2599         . UU/myread
2600         if test -f UU/getfile.ok && \
2601                 $contains "^$ans\$" UU/getfile.ok >/dev/null 2>&1
2602         then
2603                 value="$ans"
2604                 ansexp="$ans"
2605                 break
2606         fi
2607         case "$ans" in
2608         none)
2609                 value=''
2610                 ansexp=''
2611                 case "$none_ok" in
2612                 true) type='';;
2613                 esac
2614                 ;;
2615         *)
2616                 case "$tilde" in
2617                 '') value="$ans"
2618                         ansexp="$ans";;
2619                 *)
2620                         value=`UU/filexp $ans`
2621                         case $? in
2622                         0)
2623                                 if test "$ans" != "$value"; then
2624                                         echo "(That expands to $value on this system.)"
2625                                 fi
2626                                 ;;
2627                         *) value="$ans";;
2628                         esac
2629                         ansexp="$value"
2630                         case "$exp_file" in
2631                         '') value="$ans";;
2632                         esac
2633                         ;;
2634                 esac
2635                 case "$fullpath" in
2636                 true)
2637                         case "$ansexp" in
2638                         /*) value="$ansexp" ;;
2639                         *)
2640                                 redo=true
2641                                 case "$already" in
2642                                 true)
2643                                 echo "I shall only accept a full path name, as in /bin/ls." >&4
2644                                 echo "Use a ! shell escape if you wish to check pathnames." >&4
2645                                         ;;
2646                                 *)
2647                                 echo "Please give a full path name, starting with slash." >&4
2648                                         case "$tilde" in
2649                                         true)
2650                                 echo "Note that using ~name is ok provided it expands well." >&4
2651                                                 already=true
2652                                                 ;;
2653                                         esac
2654                                 esac
2655                                 ;;
2656                         esac
2657                         ;;
2658                 esac
2659                 case "$redo" in
2660                 '')
2661                         case "$type" in
2662                         File)
2663                                 if test -f "$ansexp"; then
2664                                         type=''
2665                                 elif test -r "$ansexp" || (test -h "$ansexp") >/dev/null 2>&1
2666                                 then
2667                                         echo "($value is not a plain file, but that's ok.)"
2668                                         type=''
2669                                 fi
2670                                 ;;
2671                         Directory)
2672                                 if test -d "$ansexp"; then
2673                                         type=''
2674                                 fi
2675                                 ;;
2676                         Locate)
2677                                 if test -d "$ansexp"; then
2678                                         echo "(Looking for $loc_file in directory $value.)"
2679                                         value="$value/$loc_file"
2680                                         ansexp="$ansexp/$loc_file"
2681                                 fi
2682                                 if test -f "$ansexp"; then
2683                                         type=''
2684                                 fi
2685                                 case "$nopath_ok" in
2686                                 true)   case "$value" in
2687                                         */*) ;;
2688                                         *)      echo "Assuming $value will be in people's path."
2689                                                 type=''
2690                                                 ;;
2691                                         esac
2692                                         ;;
2693                                 esac
2694                                 ;;
2695                         esac
2696
2697                         case "$skip" in
2698                         true) type='';
2699                         esac
2700
2701                         case "$type" in
2702                         '') ;;
2703                         *)
2704                                 if test "$fastread" = yes; then
2705                                         dflt=y
2706                                 else
2707                                         dflt=n
2708                                 fi
2709                                 rp="$what $value doesn't exist.  Use that name anyway?"
2710                                 . UU/myread
2711                                 dflt=''
2712                                 case "$ans" in
2713                                 y*) type='';;
2714                                 *) echo " ";;
2715                                 esac
2716                                 ;;
2717                         esac
2718                         ;;
2719                 esac
2720                 ;;
2721         esac
2722 done
2723 cd UU
2724 ans="$value"
2725 rp="$orig_rp"
2726 dflt="$orig_dflt"
2727 rm -f getfile.ok
2728 EOSC
2729
2730 : determine root of directory hierarchy where package will be installed.
2731 case "$prefix" in
2732 '')
2733         dflt=`./loc . /usr/local /usr/local /local /opt /usr`
2734         ;;
2735 *)
2736         dflt="$prefix"
2737         ;;
2738 esac
2739 $cat <<EOM
2740
2741 By default, $package will be installed in $dflt/bin, manual
2742 pages under $dflt/man, etc..., i.e. with $dflt as prefix for
2743 all installation directories. Typically set to /usr/local, but you
2744 may choose /usr if you wish to install $package among your system
2745 binaries. If you wish to have binaries under /bin but manual pages
2746 under /usr/local/man, that's ok: you will be prompted separately
2747 for each of the installation directories, the prefix being only used
2748 to set the defaults.
2749
2750 EOM
2751 fn=d~
2752 rp='Installation prefix to use?'
2753 . ./getfile
2754 oldprefix=''
2755 case "$prefix" in
2756 '') ;;
2757 *)
2758         case "$ans" in
2759         "$prefix") ;;
2760         *) oldprefix="$prefix";;
2761         esac
2762         ;;
2763 esac
2764 prefix="$ans"
2765 prefixexp="$ansexp"
2766
2767 : set the prefixit variable, to compute a suitable default value
2768 prefixit='case "$3" in
2769 ""|none)
2770         case "$oldprefix" in
2771         "") eval "$1=\"\$$2\"";;
2772         *)
2773                 case "$3" in
2774                 "") eval "$1=";;
2775                 none)
2776                         eval "tp=\"\$$2\"";
2777                         case "$tp" in
2778                         ""|" ") eval "$1=\"\$$2\"";;
2779                         *) eval "$1=";;
2780                         esac;;
2781                 esac;;
2782         esac;;
2783 *)
2784         eval "tp=\"$oldprefix-\$$2-\""; eval "tp=\"$tp\"";
2785         case "$tp" in
2786         --|/*--|\~*--) eval "$1=\"$prefix/$3\"";;
2787         /*-$oldprefix/*|\~*-$oldprefix/*)
2788                 eval "$1=\`echo \$$2 | sed \"s,^$oldprefix,$prefix,\"\`";;
2789         *) eval "$1=\"\$$2\"";;
2790         esac;;
2791 esac'
2792
2793 : set the base revision
2794 baserev=5.0
2795
2796 : get the patchlevel
2797 echo " "
2798 echo "Getting the current patchlevel..." >&4
2799 if $test -r $rsrc/patchlevel.h;then
2800         patchlevel=`awk '/define[       ]+PATCHLEVEL/ {print $3}' $rsrc/patchlevel.h`
2801         subversion=`awk '/define[       ]+SUBVERSION/ {print $3}' $rsrc/patchlevel.h`
2802 else
2803         patchlevel=0
2804         subversion=0
2805 fi
2806 $echo $n "(You have $package" $c
2807 case "$package" in
2808 "*$baserev")    ;;
2809 *)              $echo $n " $baserev" $c ;;
2810 esac
2811 $echo $n " patchlevel $patchlevel" $c
2812 test 0 -eq "$subversion" || $echo $n " subversion $subversion" $c
2813 echo ".)"
2814
2815 if test 0 -eq "$subversion"; then
2816         version=`LC_ALL=C; export LC_ALL; \
2817                  echo $baserev $patchlevel | \
2818                  $awk '{ printf "%.3f\n", $1 + $2/1000.0 }'`
2819 else
2820         version=`LC_ALL=C; export LC_ALL; \
2821                  echo $baserev $patchlevel $subversion | \
2822                  $awk '{ printf "%.5f\n", $1 + $2/1000.0 + $3/100000.0 }'`
2823 fi
2824 : Figure out perl API version.  Perhaps this should be in patchlevel.h
2825 if test "$subversion" -lt 50; then
2826         apiversion=`LC_ALL=C; export LC_ALL; \
2827                  echo $baserev $patchlevel | \
2828                  $awk '{ printf "%.3f\n", $1 + $2/1000.0 }'`
2829 else
2830         apiversion="$version"
2831 fi
2832
2833 : determine where private library files go
2834 : Usual default is /usr/local/lib/perl5/$version.
2835 : Also allow things like /opt/perl/lib/$version, since 
2836 : /opt/perl/lib/perl5... would be redundant.
2837 case "$prefix" in
2838 *perl*) set dflt privlib lib/$version ;;
2839 *)       set dflt privlib lib/$package/$version ;;
2840 esac
2841 eval $prefixit
2842 $cat <<EOM
2843
2844 There are some auxiliary files for $package that need to be put into a
2845 private library directory that is accessible by everyone.
2846
2847 EOM
2848 fn=d~+
2849 rp='Pathname where the private library files will reside?'
2850 . ./getfile
2851 if $test "X$privlibexp" != "X$ansexp"; then
2852         installprivlib=''
2853 fi
2854 privlib="$ans"
2855 privlibexp="$ansexp"
2856 if $afs; then
2857         $cat <<EOM
2858
2859 Since you are running AFS, I need to distinguish the directory in which
2860 private files reside from the directory in which they are installed (and from
2861 which they are presumably copied to the former directory by occult means).
2862
2863 EOM
2864         case "$installprivlib" in
2865         '') dflt=`echo $privlibexp | sed 's#^/afs/#/afs/.#'`;;
2866         *) dflt="$installprivlib";;
2867         esac
2868         fn=de~
2869         rp='Where will private files be installed?'
2870         . ./getfile
2871         installprivlib="$ans"
2872 else
2873         installprivlib="$privlibexp"
2874 fi
2875
2876 : set the prefixup variable, to restore leading tilda escape
2877 prefixup='case "$prefixexp" in
2878 "$prefix") ;;
2879 *) eval "$1=\`echo \$$1 | sed \"s,^$prefixexp,$prefix,\"\`";;
2880 esac'
2881
2882 : determine where public architecture dependent libraries go
2883 set archlib archlib
2884 eval $prefixit
2885 : privlib default is /usr/local/lib/$package/$version
2886 : archlib default is /usr/local/lib/$package/$version/$archname
2887 : privlib may have an optional trailing /share.
2888 tdflt=`echo $privlib | $sed 's,/share$,,'`
2889 tdflt=$tdflt/$archname
2890 case "$archlib" in
2891 '')     dflt=$tdflt
2892         ;;
2893 *)      dflt="$archlib"
2894     ;;
2895 esac
2896 cat <<EOM
2897
2898 $spackage contains architecture-dependent library files.  If you are
2899 sharing libraries in a heterogeneous environment, you might store
2900 these files in a separate location.  Otherwise, you can just include
2901 them with the rest of the public library files.
2902
2903 EOM
2904 fn=d+~
2905 rp='Where do you want to put the public architecture-dependent libraries?'
2906 . ./getfile
2907 archlib="$ans"
2908 archlibexp="$ansexp"
2909
2910 if $afs; then
2911         $cat <<EOM
2912
2913 Since you are running AFS, I need to distinguish the directory in
2914 which architecture-dependent library files reside from the directory
2915 in which they are installed (and from which they are presumably copied
2916 to the former directory by occult means).
2917
2918 EOM
2919         case "$installarchlib" in
2920         '') dflt=`echo $archlibexp | sed 's#^/afs/#/afs/.#'`;;
2921         *) dflt="$installarchlib";;
2922         esac
2923         fn=de~
2924         rp='Where will architecture-dependent library files be installed?'
2925         . ./getfile
2926         installarchlib="$ans"
2927 else
2928         installarchlib="$archlibexp"
2929 fi
2930 if $test X"$archlib" = X"$privlib"; then
2931         d_archlib="$undef"
2932 else
2933         d_archlib="$define"
2934 fi
2935
2936 : make some quick guesses about what we are up against
2937 echo " "
2938 $echo $n "Hmm...  $c"
2939 echo exit 1 >bsd
2940 echo exit 1 >usg
2941 echo exit 1 >v7
2942 echo exit 1 >osf1
2943 echo exit 1 >eunice
2944 echo exit 1 >xenix
2945 echo exit 1 >venix
2946 echo exit 1 >os2
2947 d_bsd="$undef"
2948 $cat /usr/include/signal.h /usr/include/sys/signal.h >foo 2>/dev/null
2949 if test -f /osf_boot || $contains 'OSF/1' /usr/include/ctype.h >/dev/null 2>&1
2950 then
2951         echo "Looks kind of like an OSF/1 system, but we'll see..."
2952         echo exit 0 >osf1
2953 elif test `echo abc | tr a-z A-Z` = Abc ; then
2954         xxx=`./loc addbib blurfl $pth`
2955         if $test -f $xxx; then
2956         echo "Looks kind of like a USG system with BSD features, but we'll see..."
2957                 echo exit 0 >bsd
2958                 echo exit 0 >usg
2959         else
2960                 if $contains SIGTSTP foo >/dev/null 2>&1 ; then
2961                         echo "Looks kind of like an extended USG system, but we'll see..."
2962                 else
2963                         echo "Looks kind of like a USG system, but we'll see..."
2964                 fi
2965                 echo exit 0 >usg
2966         fi
2967 elif $contains SIGTSTP foo >/dev/null 2>&1 ; then
2968         echo "Looks kind of like a BSD system, but we'll see..."
2969         d_bsd="$define"
2970         echo exit 0 >bsd
2971 else
2972         echo "Looks kind of like a Version 7 system, but we'll see..."
2973         echo exit 0 >v7
2974 fi
2975 case "$eunicefix" in
2976 *unixtovms*)
2977         $cat <<'EOI'
2978 There is, however, a strange, musty smell in the air that reminds me of
2979 something...hmm...yes...I've got it...there's a VMS nearby, or I'm a Blit.
2980 EOI
2981         echo exit 0 >eunice
2982         d_eunice="$define"
2983 : it so happens the Eunice I know will not run shell scripts in Unix format
2984         ;;
2985 *)
2986         echo " "
2987         echo "Congratulations.  You aren't running Eunice."
2988         d_eunice="$undef"
2989         ;;
2990 esac
2991 : Detect OS2.  The p_ variable is set above in the Head.U unit.
2992 case "$p_" in
2993 :) ;;
2994 *)
2995         $cat <<'EOI'
2996 I have the feeling something is not exactly right, however...don't tell me...
2997 lemme think...does HAL ring a bell?...no, of course, you're only running OS/2!
2998 EOI
2999         echo exit 0 >os2
3000         ;;
3001 esac
3002 if test -f /xenix; then
3003         echo "Actually, this looks more like a XENIX system..."
3004         echo exit 0 >xenix
3005         d_xenix="$define"
3006 else
3007         echo " "
3008         echo "It's not Xenix..."
3009         d_xenix="$undef"
3010 fi
3011 chmod +x xenix
3012 $eunicefix xenix
3013 if test -f /venix; then
3014         echo "Actually, this looks more like a VENIX system..."
3015         echo exit 0 >venix
3016 else
3017         echo " "
3018         if ./xenix; then
3019                 : null
3020         else
3021                 echo "Nor is it Venix..."
3022         fi
3023 fi
3024 chmod +x bsd usg v7 osf1 eunice xenix venix os2
3025 $eunicefix bsd usg v7 osf1 eunice xenix venix os2
3026 $rm -f foo
3027
3028 : see if setuid scripts can be secure
3029 $cat <<EOM
3030
3031 Some kernels have a bug that prevents setuid #! scripts from being
3032 secure.  Some sites have disabled setuid #! scripts because of this.
3033
3034 First let's decide if your kernel supports secure setuid #! scripts.
3035 (If setuid #! scripts would be secure but have been disabled anyway,
3036 don't say that they are secure if asked.)
3037
3038 EOM
3039
3040 val="$undef"
3041 if $test -d /dev/fd; then
3042         echo "#!$ls" >reflect
3043         chmod +x,u+s reflect
3044         ./reflect >flect 2>&1
3045         if $contains "/dev/fd" flect >/dev/null; then
3046                 echo "Congratulations, your kernel has secure setuid scripts!" >&4
3047                 val="$define"
3048         else
3049                 $cat <<EOM
3050 If you are not sure if they are secure, I can check but I'll need a
3051 username and password different from the one you are using right now.
3052 If you don't have such a username or don't want me to test, simply
3053 enter 'none'.
3054
3055 EOM
3056                 rp='Other username to test security of setuid scripts with?'
3057                 dflt='none'
3058                 . ./myread
3059                 case "$ans" in
3060                 n|none)
3061                         case "$d_suidsafe" in
3062                         '')     echo "I'll assume setuid scripts are *not* secure." >&4
3063                                 dflt=n;;
3064                         "$undef")
3065                                 echo "Well, the $hint value is *not* secure." >&4
3066                                 dflt=n;;
3067                         *)      echo "Well, the $hint value *is* secure." >&4
3068                                 dflt=y;;
3069                         esac
3070                         ;;
3071                 *)
3072                         $rm -f reflect flect
3073                         echo "#!$ls" >reflect
3074                         chmod +x,u+s reflect
3075                         echo >flect
3076                         chmod a+w flect
3077                         echo '"su" will (probably) prompt you for '"$ans's password."
3078                         su $ans -c './reflect >flect'
3079                         if $contains "/dev/fd" flect >/dev/null; then
3080                                 echo "Okay, it looks like setuid scripts are secure." >&4
3081                                 dflt=y
3082                         else
3083                                 echo "I don't think setuid scripts are secure." >&4
3084                                 dflt=n
3085                         fi
3086                         ;;
3087                 esac
3088                 rp='Does your kernel have *secure* setuid scripts?'
3089                 . ./myread
3090                 case "$ans" in
3091                 [yY]*)  val="$define";;
3092                 *)      val="$undef";;
3093                 esac
3094         fi
3095 else
3096         echo "I don't think setuid scripts are secure (no /dev/fd directory)." >&4
3097         echo "(That's for file descriptors, not floppy disks.)"
3098         val="$undef"
3099 fi
3100 set d_suidsafe
3101 eval $setvar
3102
3103 $rm -f reflect flect
3104
3105 : now see if they want to do setuid emulation
3106 echo " "
3107 val="$undef"
3108 case "$d_suidsafe" in
3109 "$define")
3110         val="$undef"
3111         echo "No need to emulate SUID scripts since they are secure here." >& 4
3112         ;;
3113 *)
3114         $cat <<EOM
3115 Some systems have disabled setuid scripts, especially systems where
3116 setuid scripts cannot be secure.  On systems where setuid scripts have
3117 been disabled, the setuid/setgid bits on scripts are currently
3118 useless.  It is possible for $package to detect those bits and emulate
3119 setuid/setgid in a secure fashion.  This emulation will only work if
3120 setuid scripts have been disabled in your kernel.
3121
3122 EOM
3123         case "$d_dosuid" in
3124         "$define") dflt=y ;;
3125         *) dflt=n ;;
3126         esac
3127         rp="Do you want to do setuid/setgid emulation?"
3128         . ./myread
3129         case "$ans" in
3130         [yY]*)  val="$define";;
3131         *)      val="$undef";;
3132         esac
3133         ;;
3134 esac
3135 set d_dosuid
3136 eval $setvar
3137
3138 : determine where manual pages are on this system
3139 echo " "
3140 case "$sysman" in
3141 '') 
3142         syspath='/usr/man/man1 /usr/man/mann /usr/man/manl /usr/man/local/man1'
3143         syspath="$syspath /usr/man/u_man/man1 /usr/share/man/man1"
3144         syspath="$syspath /usr/catman/u_man/man1 /usr/man/l_man/man1"
3145         syspath="$syspath /usr/local/man/u_man/man1 /usr/local/man/l_man/man1"
3146         syspath="$syspath /usr/man/man.L /local/man/man1 /usr/local/man/man1"
3147         sysman=`./loc . /usr/man/man1 $syspath`
3148         ;;
3149 esac
3150 if $test -d "$sysman"; then
3151         echo "System manual is in $sysman." >&4
3152 else
3153         echo "Could not find manual pages in source form." >&4
3154 fi
3155
3156 : see what memory models we can support
3157 case "$models" in
3158 '')
3159         $cat >pdp11.c <<'EOP'
3160 main() {
3161 #ifdef pdp11
3162         exit(0);
3163 #else
3164         exit(1);
3165 #endif
3166 }
3167 EOP
3168         ( cc -o pdp11 pdp11.c ) >/dev/null 2>&1
3169         if $test -f pdp11 && ./pdp11 2>/dev/null; then
3170                 dflt='unsplit split'
3171         else
3172                 tans=`./loc . X /lib/small /lib/large /usr/lib/small /usr/lib/large /lib/medium /usr/lib/medium /lib/huge`
3173                 case "$tans" in
3174                 X) dflt='none';;
3175                 *) if $test -d /lib/small || $test -d /usr/lib/small; then
3176                                 dflt='small'
3177                         else
3178                                 dflt=''
3179                         fi
3180                         if $test -d /lib/medium || $test -d /usr/lib/medium; then
3181                                 dflt="$dflt medium"
3182                         fi
3183                         if $test -d /lib/large || $test -d /usr/lib/large; then
3184                                 dflt="$dflt large"
3185                         fi
3186                         if $test -d /lib/huge || $test -d /usr/lib/huge; then
3187                                 dflt="$dflt huge"
3188                         fi
3189                 esac
3190         fi;;
3191 *) dflt="$models";;
3192 esac
3193 $cat <<EOM
3194  
3195 Some systems have different model sizes.  On most systems they are called
3196 small, medium, large, and huge.  On the PDP11 they are called unsplit and
3197 split.  If your system doesn't support different memory models, say "none".
3198 If you wish to force everything to one memory model, say "none" here and
3199 put the appropriate flags later when it asks you for other cc and ld flags.
3200 Venix systems may wish to put "none" and let the compiler figure things out.
3201 (In the following question multiple model names should be space separated.)
3202
3203 The default for most systems is "none".
3204
3205 EOM
3206 rp="Which memory models are supported?"
3207 . ./myread
3208 models="$ans"
3209
3210 case "$models" in
3211 none)
3212         small=''
3213         medium=''
3214         large=''
3215         huge=''
3216         unsplit=''
3217         split=''
3218         ;;
3219 *split)
3220         case "$split" in
3221         '') if $contains '\-i' $sysman/ld.1 >/dev/null 2>&1 || \
3222                          $contains '\-i' $sysman/cc.1 >/dev/null 2>&1; then
3223                         dflt='-i'
3224                 else
3225                         dflt='none'
3226                 fi;;
3227         *) dflt="$split";;
3228         esac
3229         rp="What flag indicates separate I and D space?"
3230         . ./myread
3231         tans="$ans"
3232         case "$tans" in
3233         none) tans='';;
3234         esac
3235         split="$tans"
3236         unsplit='';;
3237 *large*|*small*|*medium*|*huge*)
3238         case "$models" in
3239         *large*)
3240                 case "$large" in
3241                 '') dflt='-Ml';;
3242                 *) dflt="$large";;
3243                 esac
3244         rp="What flag indicates large model?"
3245         . ./myread
3246         tans="$ans"
3247         case "$tans" in
3248         none) tans='';
3249         esac
3250         large="$tans";;
3251         *) large='';;
3252         esac
3253         case "$models" in
3254         *huge*) case "$huge" in
3255                 '') dflt='-Mh';;
3256                 *) dflt="$huge";;
3257                 esac
3258                 rp="What flag indicates huge model?"
3259                 . ./myread
3260                 tans="$ans"
3261                 case "$tans" in
3262                 none) tans='';
3263                 esac
3264                 huge="$tans";;
3265         *) huge="$large";;
3266         esac
3267         case "$models" in
3268         *medium*) case "$medium" in
3269                 '') dflt='-Mm';;
3270                 *) dflt="$medium";;
3271                 esac
3272                 rp="What flag indicates medium model?"
3273                 . ./myread
3274                 tans="$ans"
3275                 case "$tans" in
3276                 none) tans='';
3277                 esac
3278                 medium="$tans";;
3279         *) medium="$large";;
3280         esac
3281         case "$models" in
3282         *small*) case "$small" in
3283                 '') dflt='none';;
3284                 *) dflt="$small";;
3285                 esac
3286                 rp="What flag indicates small model?"
3287                 . ./myread
3288                 tans="$ans"
3289                 case "$tans" in
3290                 none) tans='';
3291                 esac
3292                 small="$tans";;
3293         *) small='';;
3294         esac
3295         ;;
3296 *)
3297         echo "Unrecognized memory models--you may have to edit Makefile.SH" >&4
3298         ;;
3299 esac
3300 $rm -f pdp11.* pdp11
3301
3302 : see if we need a special compiler
3303 echo " "
3304 if ./usg; then
3305         case "$cc" in
3306         '') case "$Mcc" in
3307                 /*) dflt='Mcc';;
3308                 *) case "$large" in
3309                         -M*) dflt='cc';;
3310                         *)      if $contains '\-M' $sysman/cc.1 >/dev/null 2>&1 ; then
3311                                         if $contains '\-M' $sysman/cpp.1 >/dev/null 2>&1; then
3312                                                 dflt='cc'
3313                                         else
3314                                                 dflt='cc -M'
3315                                         fi
3316                                 else
3317                                         dflt='cc'
3318                                 fi;;
3319                         esac;;
3320                 esac;;
3321         *)  dflt="$cc";;
3322         esac
3323         case "$dflt" in
3324         *M*)    $cat <<'EOM'
3325 On some older systems the default C compiler will not resolve multiple global
3326 references that happen to have the same name.  On some such systems the "Mcc"
3327 command may be used to force these to be resolved.  On other systems a "cc -M"
3328 command is required.  (Note that the -M flag on other systems indicates a
3329 memory model to use!) If you have the Gnu C compiler, you might wish to use
3330 that instead.
3331
3332 EOM
3333         ;;
3334         esac
3335         rp="Use which C compiler?"
3336         . ./myread
3337         cc="$ans"
3338 else
3339         case "$cc" in
3340         '') dflt=cc;;
3341         *) dflt="$cc";;
3342         esac
3343         rp="Use which C compiler?"
3344         . ./myread
3345         cc="$ans"
3346 fi
3347 : Look for a hint-file generated 'call-back-unit'.  Now that the
3348 : user has specified the compiler, we may need to set or change some
3349 : other defaults.
3350 if $test -f cc.cbu; then
3351     . ./cc.cbu
3352 fi
3353 echo " "
3354 echo "Checking for GNU cc in disguise and/or its version number..." >&4
3355 $cat >gccvers.c <<EOM
3356 #include <stdio.h>
3357 int main() {
3358 #ifdef __GNUC__
3359 #ifdef __VERSION__
3360         printf("%s\n", __VERSION__);
3361 #else
3362         printf("%s\n", "1");
3363 #endif
3364 #endif
3365         exit(0);
3366 }
3367 EOM
3368 if $cc -o gccvers gccvers.c >/dev/null 2>&1; then
3369         gccversion=`./gccvers`
3370         case "$gccversion" in
3371         '') echo "You are not using GNU cc." ;;
3372         *)  echo "You are using GNU cc $gccversion." ;;
3373         esac
3374 else
3375         echo " "
3376         echo "*** WHOA THERE!!! ***" >&4
3377         echo "    Your C compiler \"$cc\" doesn't seem to be working!" >&4
3378         case "$knowitall" in
3379         '')
3380         echo "    You'd better start hunting for one and let me know about it." >&4
3381                 exit 1
3382                 ;;
3383         esac
3384 fi
3385 $rm -f gccvers*
3386 case "$gccversion" in
3387 1*) cpp=`./loc gcc-cpp $cpp $pth` ;;
3388 esac
3389
3390 : What should the include directory be ?
3391 echo " "
3392 $echo $n "Hmm...  $c"
3393 dflt='/usr/include'
3394 incpath=''
3395 mips_type=''
3396 if $test -f /bin/mips && /bin/mips; then
3397         echo "Looks like a MIPS system..."
3398         $cat >usr.c <<'EOCP'
3399 #ifdef SYSTYPE_BSD43
3400 /bsd43
3401 #endif
3402 EOCP
3403         if $cc -E usr.c > usr.out && $contains / usr.out >/dev/null 2>&1; then
3404                 dflt='/bsd43/usr/include'
3405                 incpath='/bsd43'
3406                 mips_type='BSD 4.3'
3407         else
3408                 mips_type='System V'
3409         fi
3410         $rm -f usr.c usr.out
3411         echo "and you're compiling with the $mips_type compiler and libraries."
3412         xxx_prompt=y
3413         echo "exit 0" >mips
3414 else
3415         echo "Doesn't look like a MIPS system."
3416         xxx_prompt=n
3417         echo "exit 1" >mips
3418 fi
3419 chmod +x mips
3420 $eunicefix mips
3421 case "$usrinc" in
3422 '') ;;
3423 *) dflt="$usrinc";;
3424 esac
3425 case "$xxx_prompt" in
3426 y)      fn=d/
3427         echo " "
3428         rp='Where are the include files you want to use?'
3429         . ./getfile
3430         usrinc="$ans"
3431         ;;
3432 *)      usrinc="$dflt"
3433         ;;
3434 esac
3435
3436 : see how we invoke the C preprocessor
3437 echo " "
3438 echo "Now, how can we feed standard input to your C preprocessor..." >&4
3439 cat <<'EOT' >testcpp.c
3440 #define ABC abc
3441 #define XYZ xyz
3442 ABC.XYZ
3443 EOT
3444 cd ..
3445 echo 'cat >.$$.c; '"$cc"' -E ${1+"$@"} .$$.c; rm .$$.c' >cppstdin
3446 chmod 755 cppstdin
3447 wrapper=`pwd`/cppstdin
3448 ok='false'
3449 cd UU
3450
3451 if $test "X$cppstdin" != "X" && \
3452         $cppstdin $cppminus <testcpp.c >testcpp.out 2>&1 && \
3453         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1
3454 then
3455         echo "You used to use $cppstdin $cppminus so we'll use that again."
3456         case "$cpprun" in
3457         '') echo "But let's see if we can live without a wrapper..." ;;
3458         *)
3459                 if $cpprun $cpplast <testcpp.c >testcpp.out 2>&1 && \
3460                         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1
3461                 then
3462                         echo "(And we'll use $cpprun $cpplast to preprocess directly.)"
3463                         ok='true'
3464                 else
3465                         echo "(However, $cpprun $cpplast does not work, let's see...)"
3466                 fi
3467                 ;;
3468         esac
3469 else
3470         case "$cppstdin" in
3471         '') ;;
3472         *)
3473                 echo "Good old $cppstdin $cppminus does not seem to be of any help..."
3474                 ;;
3475         esac
3476 fi
3477
3478 if $ok; then
3479         : nothing
3480 elif echo 'Maybe "'"$cc"' -E" will work...'; \
3481         $cc -E <testcpp.c >testcpp.out 2>&1; \
3482         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3483         echo "Yup, it does."
3484         x_cpp="$cc -E"
3485         x_minus='';
3486 elif echo 'Nope...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"' -P" will work...'; \
3493         $cc -P <testcpp.c >testcpp.out 2>&1; \
3494         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3495         echo "Yipee, that works!"
3496         x_cpp="$cc -P"
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 "At long last!"
3502         x_cpp="$cc -P"
3503         x_minus='-';
3504 elif echo 'No such luck, maybe "'$cpp'" will work...'; \
3505         $cpp <testcpp.c >testcpp.out 2>&1; \
3506         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3507         echo "It works!"
3508         x_cpp="$cpp"
3509         x_minus='';
3510 elif echo 'Nixed again...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 "Hooray, it works!  I was beginning to wonder."
3514         x_cpp="$cpp"
3515         x_minus='-';
3516 elif echo 'Uh-uh.  Time to get fancy.  Trying a wrapper...'; \
3517         $wrapper <testcpp.c >testcpp.out 2>&1; \
3518         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3519         x_cpp="$wrapper"
3520         x_minus=''
3521         echo "Eureka!"
3522 else
3523         dflt=''
3524         rp="No dice.  I can't find a C preprocessor.  Name one:"
3525         . ./myread
3526         x_cpp="$ans"
3527         x_minus=''
3528         $x_cpp <testcpp.c >testcpp.out 2>&1
3529         if $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3530                 echo "OK, that will do." >&4
3531         else
3532 echo "Sorry, I can't get that to work.  Go find one and rerun Configure." >&4
3533                 exit 1
3534         fi
3535 fi
3536
3537 case "$ok" in
3538 false)
3539         cppstdin="$x_cpp"
3540         cppminus="$x_minus"
3541         cpprun="$x_cpp"
3542         cpplast="$x_minus"
3543         set X $x_cpp
3544         shift
3545         case "$1" in
3546         "$cpp")
3547                 echo "Perhaps can we force $cc -E using a wrapper..."
3548                 if $wrapper <testcpp.c >testcpp.out 2>&1; \
3549                         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1
3550                 then
3551                         echo "Yup, we can."
3552                         cppstdin="$wrapper"
3553                         cppminus='';
3554                 else
3555                         echo "Nope, we'll have to live without it..."
3556                 fi
3557                 ;;
3558         esac
3559         case "$cpprun" in
3560         "$wrapper")
3561                 cpprun=''
3562                 cpplast=''
3563                 ;;
3564         esac
3565         ;;
3566 esac
3567
3568 case "$cppstdin" in
3569 "$wrapper") ;;
3570 *) $rm -f $wrapper;;
3571 esac
3572 $rm -f testcpp.c testcpp.out
3573
3574 : Set private lib path
3575 case "$plibpth" in
3576 '') if ./mips; then
3577                 plibpth="$incpath/usr/lib /usr/local/lib /usr/ccs/lib"
3578         fi;;
3579 esac
3580 case "$libpth" in
3581 ' ') dlist='';;
3582 '') dlist="$loclibpth $plibpth $glibpth";;
3583 *) dlist="$libpth";;
3584 esac
3585
3586 : Now check and see which directories actually exist, avoiding duplicates
3587 libpth=''
3588 for xxx in $dlist
3589 do
3590     if $test -d $xxx; then
3591                 case " $libpth " in
3592                 *" $xxx "*) ;;
3593                 *) libpth="$libpth $xxx";;
3594                 esac
3595     fi
3596 done
3597 $cat <<'EOM'
3598
3599 Some systems have incompatible or broken versions of libraries.  Among
3600 the directories listed in the question below, please remove any you
3601 know not to be holding relevant libraries, and add any that are needed.
3602 Say "none" for none.
3603
3604 EOM
3605 case "$libpth" in
3606 '') dflt='none';;
3607 *)
3608         set X $libpth
3609         shift
3610         dflt=${1+"$@"}
3611         ;;
3612 esac
3613 rp="Directories to use for library searches?"
3614 . ./myread
3615 case "$ans" in
3616 none) libpth=' ';;
3617 *) libpth="$ans";;
3618 esac
3619
3620 : compute shared library extension
3621 case "$so" in
3622 '')
3623         if xxx=`./loc libc.sl X $libpth`; $test -f "$xxx"; then
3624                 dflt='sl'
3625         else
3626                 dflt='so'
3627         fi
3628         ;;
3629 *) dflt="$so";;
3630 esac
3631 $cat <<EOM
3632
3633 On some systems, shared libraries may be available.  Answer 'none' if
3634 you want to suppress searching of shared libraries for the remaining
3635 of this configuration.
3636
3637 EOM
3638 rp='What is the file extension used for shared libraries?'
3639 . ./myread
3640 so="$ans"
3641
3642 : Define several unixisms.
3643 : Hints files or command line option can be used to override them.
3644 : The convoluted testing is in case hints files set either the old
3645 : or the new name.
3646 case "$_exe" in
3647 '')     case "$exe_ext" in
3648     '') ;;
3649         *)      _exe="$exe_ext" ;;
3650         esac
3651         ;;
3652 esac
3653 case "$_a" in
3654 '')     case "$lib_ext" in
3655     '') _a='.a';;
3656         *)      _a="$lib_ext" ;;
3657         esac
3658         ;;
3659 esac
3660 case "$_o" in
3661 '') case "$obj_ext" in
3662         '')     _o='.o';;
3663         *)      _o="$obj_ext";;
3664         esac
3665         ;;
3666 esac
3667 case "$p_" in
3668 '') case "$path_sep" in
3669         '')     p_=':';;
3670         *)      p_="$path_sep";;
3671         esac
3672         ;;
3673 esac
3674 exe_ext=$_exe
3675 lib_ext=$_a
3676 obj_ext=$_o
3677 path_sep=$p_
3678
3679 : Which makefile gets called first.  This is used by make depend.
3680 case "$firstmakefile" in
3681 '') firstmakefile='makefile';;
3682 esac
3683
3684 : Looking for optional libraries
3685 echo " "
3686 echo "Checking for optional libraries..." >&4
3687 case "$libs" in
3688 ' '|'') dflt='';;
3689 *) dflt="$libs";;
3690 esac
3691 case "$libswanted" in
3692 '') libswanted='c_s';;
3693 esac
3694 for thislib in $libswanted; do
3695         
3696         if xxx=`./loc lib$thislib.$so.[0-9]'*' X $libpth`; $test -f "$xxx"; then
3697                 echo "Found -l$thislib (shared)."
3698                 case " $dflt " in
3699                 *"-l$thislib "*);;
3700                 *) dflt="$dflt -l$thislib";;
3701                 esac
3702         elif xxx=`./loc lib$thislib.$so 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$_a X $libpth`; $test -f "$xxx"; then
3709                 echo "Found -l$thislib."
3710                 case " $dflt " in
3711                 *"-l$thislib "*);;
3712                 *) dflt="$dflt -l$thislib";;
3713                 esac
3714         elif xxx=`./loc $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 lib${thislib}_s$_a X $libpth`; $test -f "$xxx"; then
3721                 echo "Found -l${thislib}_s."
3722                 case " $dflt " in
3723                 *"-l$thislib "*);;
3724                 *) dflt="$dflt -l${thislib}_s";;
3725                 esac
3726         elif xxx=`./loc Slib$thislib$_a X $xlibpth`; $test -f "$xxx"; then
3727                 echo "Found -l$thislib."
3728                 case " $dflt " in
3729                 *"-l$thislib "*);;
3730                 *) dflt="$dflt -l$thislib";;
3731                 esac
3732         else
3733                 echo "No -l$thislib."
3734         fi
3735 done
3736 set X $dflt
3737 shift
3738 dflt="$*"
3739 case "$libs" in
3740 '') dflt="$dflt";;
3741 *) dflt="$libs";;
3742 esac
3743 case "$dflt" in
3744 ' '|'') dflt='none';;
3745 esac
3746
3747 $cat <<EOM
3748  
3749 Some versions of Unix support shared libraries, which make executables smaller
3750 but make load time slightly longer.
3751
3752 On some systems, mostly System V Release 3's, the shared library is included
3753 by putting the option "-lc_s" as the last thing on the cc command line when
3754 linking.  Other systems use shared libraries by default.  There may be other
3755 libraries needed to compile $package on your machine as well.  If your system
3756 needs the "-lc_s" option, include it here.  Include any other special libraries
3757 here as well.  Say "none" for none.
3758 EOM
3759
3760 echo " "
3761 rp="Any additional libraries?"
3762 . ./myread
3763 case "$ans" in
3764 none) libs=' ';;
3765 *) libs="$ans";;
3766 esac
3767
3768 : determine optimize, if desired, or use for debug flag also
3769 case "$optimize" in
3770 ' '|$undef) dflt='none';;
3771 '') dflt='-O';;
3772 *) dflt="$optimize";;
3773 esac
3774 $cat <<EOH
3775
3776 Some C compilers have problems with their optimizers.  By default, $package
3777 compiles with the -O flag to use the optimizer.  Alternately, you might want
3778 to use the symbolic debugger, which uses the -g flag (on traditional Unix
3779 systems).  Either flag can be specified here.  To use neither flag, specify
3780 the word "none".
3781
3782 EOH
3783 rp="What optimizer/debugger flag should be used?"
3784 . ./myread
3785 optimize="$ans"
3786 case "$optimize" in
3787 'none') optimize=" ";;
3788 esac
3789
3790 dflt=''
3791 : We will not override a previous value, but we might want to
3792 : augment a hint file
3793 case "$hint" in
3794 none|recommended)
3795         case "$gccversion" in
3796         1*) dflt='-fpcc-struct-return' ;;
3797         esac
3798         case "$optimize" in
3799         *-g*) dflt="$dflt -DDEBUGGING";;
3800         esac
3801         case "$gccversion" in
3802         2*) if test -d /etc/conf/kconfig.d &&
3803                         $contains _POSIX_VERSION $usrinc/sys/unistd.h >/dev/null 2>&1
3804                 then
3805                         dflt="$dflt -posix"
3806                 fi
3807                 ;;
3808         esac
3809         ;;
3810 esac
3811
3812 case "$mips_type" in
3813 *BSD*|'') inclwanted="$locincpth $usrinc";;
3814 *) inclwanted="$locincpth $inclwanted $usrinc/bsd";;
3815 esac
3816 for thisincl in $inclwanted; do
3817         if $test -d $thisincl; then
3818                 if $test x$thisincl != x$usrinc; then
3819                         case "$dflt" in
3820                         *$thisincl*);;
3821                         *) dflt="$dflt -I$thisincl";;
3822                         esac
3823                 fi
3824         fi
3825 done
3826
3827 inctest='if $contains $2 $usrinc/$1 >/dev/null 2>&1; then
3828         xxx=true;
3829 elif $contains $2 $usrinc/sys/$1 >/dev/null 2>&1; then
3830         xxx=true;
3831 else
3832         xxx=false;
3833 fi;
3834 if $xxx; then
3835         case "$dflt" in
3836         *$2*);;
3837         *) dflt="$dflt -D$2";;
3838         esac;
3839 fi'
3840
3841 if ./osf1; then
3842         set signal.h __LANGUAGE_C__; eval $inctest
3843 else
3844         set signal.h LANGUAGE_C; eval $inctest
3845 fi
3846
3847 case "$hint" in
3848 none|recommended) dflt="$ccflags $dflt" ;;
3849 *) dflt="$ccflags";;
3850 esac
3851
3852 case "$dflt" in
3853 ''|' ') dflt=none;;
3854 esac
3855 $cat <<EOH
3856
3857 Your C compiler may want other flags.  For this question you should include
3858 -I/whatever and -DWHATEVER flags and any other flags used by the C compiler,
3859 but you should NOT include libraries or ld flags like -lwhatever.  If you
3860 want $package to honor its debug switch, you should include -DDEBUGGING here.
3861 Your C compiler might also need additional flags, such as -D_POSIX_SOURCE.
3862
3863 To use no flags, specify the word "none".
3864
3865 EOH
3866 set X $dflt
3867 shift
3868 dflt=${1+"$@"}
3869 rp="Any additional cc flags?"
3870 . ./myread
3871 case "$ans" in
3872 none) ccflags='';;
3873 *) ccflags="$ans";;
3874 esac
3875
3876 : the following weeds options from ccflags that are of no interest to cpp
3877 cppflags="$ccflags"
3878 case "$gccversion" in
3879 1*) cppflags="$cppflags -D__GNUC__"
3880 esac
3881 case "$mips_type" in
3882 '');;
3883 *BSD*) cppflags="$cppflags -DSYSTYPE_BSD43";;
3884 esac
3885 case "$cppflags" in
3886 '');;
3887 *)
3888         echo " "
3889         echo "Let me guess what the preprocessor flags are..." >&4
3890         set X $cppflags
3891         shift
3892         cppflags=''
3893         $cat >cpp.c <<'EOM'
3894 #define BLURFL foo
3895
3896 BLURFL xx LFRULB
3897 EOM
3898         previous=''
3899         for flag in $*
3900         do
3901                 case "$flag" in
3902                 -*) ftry="$flag";;
3903                 *) ftry="$previous $flag";;
3904                 esac
3905                 if $cppstdin -DLFRULB=bar $cppflags $ftry $cppminus <cpp.c \
3906                         >cpp1.out 2>/dev/null && \
3907                         $cpprun -DLFRULB=bar $cppflags $ftry $cpplast <cpp.c \
3908                         >cpp2.out 2>/dev/null && \
3909                         $contains 'foo.*xx.*bar' cpp1.out >/dev/null 2>&1 && \
3910                         $contains 'foo.*xx.*bar' cpp2.out >/dev/null 2>&1
3911                 then
3912                         cppflags="$cppflags $ftry"
3913                         previous=''
3914                 else
3915                         previous="$flag"
3916                 fi
3917         done
3918         set X $cppflags
3919         shift
3920         cppflags=${1+"$@"}
3921         case "$cppflags" in
3922         *-*)  echo "They appear to be: $cppflags";;
3923         esac
3924         $rm -f cpp.c cpp?.out
3925         ;;
3926 esac
3927
3928 : flags used in final linking phase
3929 case "$ldflags" in
3930 '') if ./venix; then
3931                 dflt='-i -z'
3932         else
3933                 dflt=''
3934         fi
3935         case "$ccflags" in
3936         *-posix*) dflt="$dflt -posix" ;;
3937         esac
3938         ;;
3939 *) dflt="$ldflags";;
3940 esac
3941
3942 : Try to guess additional flags to pick up local libraries.
3943 for thislibdir in $libpth; do
3944         case " $loclibpth " in
3945         *" $thislibdir "*)
3946                 case "$dflt " in 
3947                 *"-L$thislibdir "*) ;;
3948                 *)  dflt="$dflt -L$thislibdir" ;;
3949                 esac
3950                 ;;
3951         esac
3952 done
3953
3954 case "$dflt" in
3955 '') dflt='none' ;;
3956 esac
3957
3958 $cat <<EOH
3959
3960 Your C linker may need flags.  For this question you should
3961 include -L/whatever and any other flags used by the C linker, but you
3962 should NOT include libraries like -lwhatever.
3963
3964 Make sure you include the appropriate -L/path flags if your C linker
3965 does not normally search all of the directories you specified above,
3966 namely
3967         $libpth
3968 To use no flags, specify the word "none".
3969
3970 EOH
3971
3972 rp="Any additional ld flags (NOT including libraries)?"
3973 . ./myread
3974 case "$ans" in
3975 none) ldflags='';;
3976 *) ldflags="$ans";;
3977 esac
3978 rmlist="$rmlist pdp11"
3979
3980 : coherency check
3981 echo " "
3982 echo "Checking your choice of C compiler and flags for coherency..." >&4
3983 set X $cc $optimize $ccflags -o try $ldflags try.c $libs
3984 shift
3985 $cat >try.msg <<EOM
3986 I've tried to compile and run a simple program with:
3987
3988         $*
3989         ./try
3990
3991 and I got the following output:
3992
3993 EOM
3994 $cat > try.c <<'EOF'
3995 #include <stdio.h>
3996 main() { printf("Ok\n"); exit(0); }
3997 EOF
3998 dflt=y
3999 if sh -c "$cc $optimize $ccflags -o try $ldflags try.c $libs" >>try.msg 2>&1; then
4000         if sh -c './try' >>try.msg 2>&1; then
4001                 xxx=`./try`
4002                 case "$xxx" in
4003                 "Ok") dflt=n ;;
4004                 *)      echo 'The program compiled OK, but produced no output.' >> try.msg
4005                         case " $libs " in
4006                         *" -lsfio "*)
4007                                 cat >> try.msg <<'EOQS'
4008 If $libs contains -lsfio, and sfio is mis-configured, then it
4009 sometimes (apparently) runs and exits with a 0 status, but with no
4010 output!  It may have to do with sfio's use of _exit vs. exit.
4011
4012 EOQS
4013                                 rp="You have a big problem.  Shall I abort Configure"
4014                                 dflt=y
4015                                 ;;
4016                         esac
4017                         ;;
4018                 esac
4019         else
4020                 echo "The program compiled OK, but exited with status $?." >>try.msg
4021                 rp="You have a problem.  Shall I abort Configure"
4022                 dflt=y
4023         fi
4024 else
4025         echo "I can't compile the test program." >>try.msg
4026         rp="You have a BIG problem.  Shall I abort Configure"
4027         dflt=y
4028 fi
4029 case "$dflt" in
4030 y)
4031         $cat try.msg >&4
4032         case "$knowitall" in
4033         '')
4034                 echo "(The supplied flags might be incorrect with this C compiler.)"
4035                 ;;
4036         *) dflt=n;;
4037         esac
4038         echo " "
4039         . ./myread
4040         case "$ans" in
4041         n*|N*) ;;
4042         *)      echo "Ok.  Stopping Configure." >&4
4043                 exit 1
4044                 ;;
4045         esac
4046         ;;
4047 n) echo "OK, that should do.";;
4048 esac
4049 $rm -f try try.* core
4050
4051 : determine filename position in cpp output
4052 echo " "
4053 echo "Computing filename position in cpp output for #include directives..." >&4
4054 echo '#include <stdio.h>' > foo.c
4055 $cat >fieldn <<EOF
4056 $startsh
4057 $cppstdin $cppflags $cppminus <foo.c 2>/dev/null | \
4058 $grep '^[       ]*#.*stdio\.h' | \
4059 while read cline; do
4060         pos=1
4061         set \$cline
4062         while $test \$# -gt 0; do
4063                 if $test -r \`echo \$1 | $tr -d '"'\`; then
4064                         echo "\$pos"
4065                         exit 0
4066                 fi
4067                 shift
4068                 pos=\`expr \$pos + 1\`
4069         done
4070 done
4071 EOF
4072 chmod +x fieldn
4073 fieldn=`./fieldn`
4074 $rm -f foo.c fieldn
4075 case $fieldn in
4076 '') pos='???';;
4077 1) pos=first;;
4078 2) pos=second;;
4079 3) pos=third;;
4080 *) pos="${fieldn}th";;
4081 esac
4082 echo "Your cpp writes the filename in the $pos field of the line."
4083
4084 : locate header file
4085 $cat >findhdr <<EOF
4086 $startsh
4087 wanted=\$1
4088 name=''
4089 if test -f $usrinc/\$wanted; then
4090         echo "$usrinc/\$wanted"
4091         exit 0
4092 fi
4093 awkprg='{ print \$$fieldn }'
4094 echo "#include <\$wanted>" > foo\$\$.c
4095 $cppstdin $cppminus $cppflags < foo\$\$.c 2>/dev/null | \
4096 $grep "^[       ]*#.*\$wanted" | \
4097 while read cline; do
4098         name=\`echo \$cline | $awk "\$awkprg" | $tr -d '"'\`
4099         case "\$name" in
4100         */\$wanted) echo "\$name"; exit 0;;
4101         *) name='';;
4102         esac;
4103 done;
4104 $rm -f foo\$\$.c;
4105 case "\$name" in
4106 '') exit 1;;
4107 esac
4108 EOF
4109 chmod +x findhdr
4110
4111 : define an alternate in-header-list? function
4112 inhdr='echo " "; td=$define; tu=$undef; yyy=$@;
4113 cont=true; xxf="echo \"<\$1> found.\" >&4";
4114 case $# in 2) xxnf="echo \"<\$1> NOT found.\" >&4";;
4115 *) xxnf="echo \"<\$1> NOT found, ...\" >&4";;
4116 esac;
4117 case $# in 4) instead=instead;; *) instead="at last";; esac;
4118 while $test "$cont"; do
4119         xxx=`./findhdr $1`
4120         var=$2; eval "was=\$$2";
4121         if $test "$xxx" && $test -r "$xxx";
4122         then eval $xxf;
4123         eval "case \"\$$var\" in $undef) . ./whoa; esac"; eval "$var=\$td";
4124                 cont="";
4125         else eval $xxnf;
4126         eval "case \"\$$var\" in $define) . ./whoa; esac"; eval "$var=\$tu"; fi;
4127         set $yyy; shift; shift; yyy=$@;
4128         case $# in 0) cont="";;
4129         2) xxf="echo \"but I found <\$1> $instead.\" >&4";
4130                 xxnf="echo \"and I did not find <\$1> either.\" >&4";;
4131         *) xxf="echo \"but I found <\$1\> instead.\" >&4";
4132                 xxnf="echo \"there is no <\$1>, ...\" >&4";;
4133         esac;
4134 done;
4135 while $test "$yyy";
4136 do set $yyy; var=$2; eval "was=\$$2";
4137         eval "case \"\$$var\" in $define) . ./whoa; esac"; eval "$var=\$tu";
4138         set $yyy; shift; shift; yyy=$@;
4139 done'
4140
4141 : see if this is a malloc.h system
4142 set malloc.h i_malloc
4143 eval $inhdr
4144
4145 : see if stdlib is available
4146 set stdlib.h i_stdlib
4147 eval $inhdr
4148
4149 : determine which malloc to compile in
4150 echo " "
4151 case "$usemymalloc" in
4152 ''|y*|true)     dflt='y' ;;
4153 n*|false)       dflt='n' ;;
4154 *)      dflt="$usemymalloc" ;;
4155 esac
4156 rp="Do you wish to attempt to use the malloc that comes with $package?"
4157 . ./myread
4158 usemymalloc="$ans"
4159 case "$ans" in
4160 y*|true)
4161         usemymalloc='y'
4162         mallocsrc='malloc.c'
4163         mallocobj="malloc$_o"
4164         d_mymalloc="$define"
4165         case "$libs" in
4166         *-lmalloc*)
4167                 : Remove malloc from list of libraries to use
4168                 echo "Removing unneeded -lmalloc from library list" >&4
4169                 set `echo X $libs | $sed -e 's/-lmalloc / /' -e 's/-lmalloc$//'`
4170                 shift
4171                 libs="$*"
4172                 echo "libs = $libs" >&4
4173                 ;;
4174         esac
4175         ;;
4176 *)
4177         usemymalloc='n'
4178         mallocsrc=''
4179         mallocobj=''
4180         d_mymalloc="$undef"
4181         ;;
4182 esac
4183
4184 : compute the return types of malloc and free
4185 echo " "
4186 $cat >malloc.c <<END
4187 #$i_malloc I_MALLOC
4188 #$i_stdlib I_STDLIB
4189 #include <stdio.h>
4190 #include <sys/types.h>
4191 #ifdef I_MALLOC
4192 #include <malloc.h>
4193 #endif
4194 #ifdef I_STDLIB
4195 #include <stdlib.h>
4196 #endif
4197 #ifdef TRY_MALLOC
4198 void *malloc();
4199 #endif
4200 #ifdef TRY_FREE
4201 void free();
4202 #endif
4203 END
4204 case "$malloctype" in
4205 '')
4206         if $cc $ccflags -c -DTRY_MALLOC malloc.c >/dev/null 2>&1; then
4207                 malloctype='void *'
4208         else
4209                 malloctype='char *'
4210         fi
4211         ;;
4212 esac
4213 echo "Your system wants malloc to return '$malloctype', it would seem." >&4
4214
4215 case "$freetype" in
4216 '')
4217         if $cc $ccflags -c -DTRY_FREE malloc.c >/dev/null 2>&1; then
4218                 freetype='void'
4219         else
4220                 freetype='int'
4221         fi
4222         ;;
4223 esac
4224 echo "Your system uses $freetype free(), it would seem." >&4
4225 $rm -f malloc.[co]
4226 : Cruising for prototypes
4227 echo " "
4228 echo "Checking out function prototypes..." >&4
4229 $cat >prototype.c <<'EOCP'
4230 main(int argc, char *argv[]) {
4231         exit(0);}
4232 EOCP
4233 if $cc $ccflags -c prototype.c >prototype.out 2>&1 ; then
4234         echo "Your C compiler appears to support function prototypes."
4235         val="$define"
4236 else
4237         echo "Your C compiler doesn't seem to understand function prototypes."
4238         val="$undef"
4239 fi
4240 set prototype
4241 eval $setvar
4242 $rm -f prototype*
4243
4244 case "$prototype" in
4245 "$define") ;;
4246 *)      ansi2knr='ansi2knr'
4247         echo " "
4248         cat <<EOM >&4
4249
4250 $me:  FATAL ERROR:
4251 This version of $package can only be compiled by a compiler that 
4252 understands function prototypes.  Unfortunately, your C compiler 
4253         $cc $ccflags
4254 doesn't seem to understand them.  Sorry about that.
4255
4256 If GNU cc is avaiable for your system, perhaps you could try that instead.  
4257
4258 Eventually, we hope to support building Perl with pre-ANSI compilers.
4259 If you would like to help in that effort, please contact <perlbug@perl.org>.
4260
4261 Aborting Configure now.
4262 EOM
4263         exit 2
4264         ;;
4265 esac
4266
4267 : determine where public executables go
4268 echo " "
4269 set dflt bin bin
4270 eval $prefixit
4271 fn=d~
4272 rp='Pathname where the public executables will reside?'
4273 . ./getfile
4274 if $test "X$ansexp" != "X$binexp"; then
4275         installbin=''
4276 fi
4277 bin="$ans"
4278 binexp="$ansexp"
4279 if $afs; then
4280         $cat <<EOM
4281
4282 Since you are running AFS, I need to distinguish the directory in which
4283 executables reside from the directory in which they are installed (and from
4284 which they are presumably copied to the former directory by occult means).
4285
4286 EOM
4287         case "$installbin" in
4288         '') dflt=`echo $binexp | sed 's#^/afs/#/afs/.#'`;;
4289         *) dflt="$installbin";;
4290         esac
4291         fn=de~
4292         rp='Where will public executables be installed?'
4293         . ./getfile
4294         installbin="$ans"
4295 else
4296         installbin="$binexp"
4297 fi
4298
4299 : define a shorthand compile call
4300 compile='
4301 mc_file=$1;
4302 shift;
4303 $cc $optimize $ccflags $ldflags -o ${mc_file} $* ${mc_file}.c $libs > /dev/null 2>&1;'
4304 : define a shorthand compile call for compilations that should be ok.
4305 compile_ok='
4306 mc_file=$1;
4307 shift;
4308 $cc $optimize $ccflags $ldflags -o ${mc_file} $* ${mc_file}.c $libs;'
4309
4310 echo " "
4311 echo "Determining whether or not we are on an EBCDIC system..." >&4
4312 cat >tebcdic.c <<EOM
4313 int main()
4314 {
4315   if ('M'==0xd4) return 0;
4316   return 1;
4317 }
4318 EOM
4319 val=$undef
4320 set tebcdic
4321 if eval $compile_ok; then
4322         if ./tebcdic; then
4323                 echo "You have EBCDIC." >&4
4324                 val="$define"
4325         else
4326                 echo "Nope, no EBCDIC.  Assuming ASCII or some ISO Latin." >&4
4327         fi
4328 else
4329         echo "I'm unable to compile the test program." >&4
4330         echo "I'll asuume ASCII or some ISO Latin." >&4
4331 fi
4332 $rm -f tebcdic.c tebcdic
4333 set ebcdic
4334 eval $setvar
4335
4336 echo " "
4337 echo "Checking for GNU C Library..." >&4
4338 cat >gnulibc.c <<EOM
4339 #include <stdio.h>
4340 int
4341 main()
4342 {
4343 #ifdef __GLIBC__
4344     exit(0);
4345 #else
4346     exit(1);
4347 #endif
4348 }
4349 EOM
4350 set gnulibc
4351 if eval $compile_ok && ./gnulibc; then
4352         val="$define"
4353         echo "You are using the GNU C Library"
4354 else
4355         val="$undef"
4356         echo "You are not using the GNU C Library"
4357 fi
4358 $rm -f gnulibc*
4359 set d_gnulibc
4360 eval $setvar
4361
4362 : see if nm is to be used to determine whether a symbol is defined or not
4363 case "$usenm" in
4364 '')
4365         dflt=''
4366         case "$d_gnulibc" in
4367         "$define")
4368                 echo " "
4369                 echo "nm probably won't work on the GNU C Library." >&4
4370                 dflt=n
4371                 ;;
4372         esac
4373         case "$dflt" in
4374         '') 
4375                 if $test "$osname" = aix -a ! -f /lib/syscalls.exp; then
4376                         echo " "
4377                         echo "Whoops!  This is an AIX system without /lib/syscalls.exp!" >&4
4378                         echo "'nm' won't be sufficient on this sytem." >&4
4379                         dflt=n
4380                 fi
4381                 ;;
4382         esac
4383         case "$dflt" in
4384         '') dflt=`$egrep 'inlibc|csym' $rsrc/Configure | wc -l 2>/dev/null`
4385                 if $test $dflt -gt 20; then
4386                         dflt=y
4387                 else
4388                         dflt=n
4389                 fi
4390                 ;;
4391         esac
4392         ;;
4393 *)
4394         case "$usenm" in
4395         true|$define) dflt=y;;
4396         *) dflt=n;;
4397         esac
4398         ;;
4399 esac
4400 $cat <<EOM
4401
4402 I can use $nm to extract the symbols from your C libraries. This
4403 is a time consuming task which may generate huge output on the disk (up
4404 to 3 megabytes) but that should make the symbols extraction faster. The
4405 alternative is to skip the 'nm' extraction part and to compile a small
4406 test program instead to determine whether each symbol is present. If
4407 you have a fast C compiler and/or if your 'nm' output cannot be parsed,
4408 this may be the best solution.
4409
4410 You probably shouldn't let me use 'nm' if you are using the GNU C Library.
4411
4412 EOM
4413 rp="Shall I use $nm to extract C symbols from the libraries?"
4414 . ./myread
4415 case "$ans" in
4416 [Nn]*) usenm=false;;
4417 *) usenm=true;;
4418 esac
4419
4420 runnm=$usenm
4421 case "$reuseval" in
4422 true) runnm=false;;
4423 esac
4424
4425 : nm options which may be necessary
4426 case "$nm_opt" in
4427 '') if $test -f /mach_boot; then
4428                 nm_opt=''       # Mach
4429         elif $test -d /usr/ccs/lib; then
4430                 nm_opt='-p'     # Solaris (and SunOS?)
4431         elif $test -f /dgux; then
4432                 nm_opt='-p'     # DG-UX
4433         elif $test -f /lib64/rld; then
4434                 nm_opt='-p'     # 64-bit Irix
4435         else
4436                 nm_opt=''
4437         fi;;
4438 esac
4439
4440 : nm options which may be necessary for shared libraries but illegal
4441 : for archive libraries.  Thank you, Linux.
4442 case "$nm_so_opt" in
4443 '')     case "$myuname" in
4444         *linux*)
4445                 if $nm --help | $grep 'dynamic' > /dev/null 2>&1; then
4446                         nm_so_opt='--dynamic'
4447                 fi
4448                 ;;
4449         esac
4450         ;;
4451 esac
4452
4453 case "$runnm" in
4454 true)
4455 : get list of predefined functions in a handy place
4456 echo " "
4457 case "$libc" in
4458 '') libc=unknown
4459         case "$libs" in
4460         *-lc_s*) libc=`./loc libc_s$_a $libc $libpth`
4461         esac
4462         ;;
4463 esac
4464 libnames='';
4465 case "$libs" in
4466 '') ;;
4467 *)  for thislib in $libs; do
4468         case "$thislib" in
4469         -lc|-lc_s)
4470                 : Handle C library specially below.
4471                 ;;
4472         -l*)
4473                 thislib=`echo $thislib | $sed -e 's/^-l//'`
4474                 if try=`./loc lib$thislib.$so.'*' X $libpth`; $test -f "$try"; then
4475                         :
4476                 elif try=`./loc lib$thislib.$so X $libpth`; $test -f "$try"; then
4477                         :
4478                 elif try=`./loc lib$thislib$_a X $libpth`; $test -f "$try"; then
4479                         :
4480                 elif try=`./loc $thislib$_a X $libpth`; $test -f "$try"; then
4481                         :
4482                 elif try=`./loc lib$thislib X $libpth`; $test -f "$try"; then
4483                         :
4484                 elif try=`./loc $thislib X $libpth`; $test -f "$try"; then
4485                         :
4486                 elif try=`./loc Slib$thislib$_a X $xlibpth`; $test -f "$try"; then
4487                         :
4488                 else
4489                         try=''
4490                 fi
4491                 libnames="$libnames $try"
4492                 ;;
4493         *) libnames="$libnames $thislib" ;;
4494         esac
4495         done
4496         ;;
4497 esac
4498 xxx=normal
4499 case "$libc" in
4500 unknown)
4501         set /lib/libc.$so
4502         for xxx in $libpth; do
4503                 $test -r $1 || set $xxx/libc.$so
4504                 : The messy sed command sorts on library version numbers.
4505                 $test -r $1 || \
4506                         set `echo blurfl; echo $xxx/libc.$so.[0-9]* | \
4507                         tr ' ' $trnl | egrep -v '\.[A-Za-z]*$' | $sed -e '
4508                                 h
4509                                 s/[0-9][0-9]*/0000&/g
4510                                 s/0*\([0-9][0-9][0-9][0-9][0-9]\)/\1/g
4511                                 G
4512                                 s/\n/ /' | \
4513                          sort | $sed -e 's/^.* //'`
4514                 eval set \$$#
4515         done
4516         $test -r $1 || set /usr/ccs/lib/libc.$so
4517         $test -r $1 || set /lib/libsys_s$_a
4518         ;;
4519 *)
4520         set blurfl
4521         ;;
4522 esac
4523 if $test -r "$1"; then
4524         echo "Your (shared) C library seems to be in $1."
4525         libc="$1"
4526 elif $test -r /lib/libc && $test -r /lib/clib; then
4527         echo "Your C library seems to be in both /lib/clib and /lib/libc."
4528         xxx=apollo
4529         libc='/lib/clib /lib/libc'
4530         if $test -r /lib/syslib; then
4531                 echo "(Your math library is in /lib/syslib.)"
4532                 libc="$libc /lib/syslib"
4533         fi
4534 elif $test -r "$libc" || (test -h "$libc") >/dev/null 2>&1; then
4535         echo "Your C library seems to be in $libc, as you said before."
4536 elif $test -r $incpath/usr/lib/libc$_a; then
4537         libc=$incpath/usr/lib/libc$_a;
4538         echo "Your C library seems to be in $libc.  That's fine."
4539 elif $test -r /lib/libc$_a; then
4540         libc=/lib/libc$_a;
4541         echo "Your C library seems to be in $libc.  You're normal."
4542 else
4543         if tans=`./loc libc$_a blurfl/dyick $libpth`; $test -r "$tans"; then
4544                 :
4545         elif tans=`./loc libc blurfl/dyick $libpth`; $test -r "$tans"; then
4546                 libnames="$libnames "`./loc clib blurfl/dyick $libpth`
4547         elif tans=`./loc clib blurfl/dyick $libpth`; $test -r "$tans"; then
4548                 :
4549         elif tans=`./loc Slibc$_a blurfl/dyick $xlibpth`; $test -r "$tans"; then
4550                 :
4551         elif tans=`./loc Mlibc$_a blurfl/dyick $xlibpth`; $test -r "$tans"; then
4552                 :
4553         else
4554                 tans=`./loc Llibc$_a blurfl/dyick $xlibpth`
4555         fi
4556         if $test -r "$tans"; then
4557                 echo "Your C library seems to be in $tans, of all places."
4558                 libc=$tans
4559         else
4560                 libc='blurfl'
4561         fi
4562 fi
4563 if $test $xxx = apollo -o -r "$libc" || (test -h "$libc") >/dev/null 2>&1; then
4564         dflt="$libc"
4565         cat <<EOM
4566
4567 If the guess above is wrong (which it might be if you're using a strange
4568 compiler, or your machine supports multiple models), you can override it here.
4569
4570 EOM
4571 else
4572         dflt=''
4573         echo $libpth | tr ' ' $trnl | sort | uniq > libpath
4574         cat >&4 <<EOM
4575 I can't seem to find your C library.  I've looked in the following places:
4576
4577 EOM
4578         $sed 's/^/      /' libpath
4579         cat <<EOM
4580
4581 None of these seems to contain your C library. I need to get its name...
4582
4583 EOM
4584 fi
4585 fn=f
4586 rp='Where is your C library?'
4587 . ./getfile
4588 libc="$ans"
4589
4590 echo " "
4591 echo $libc $libnames | tr ' ' $trnl | sort | uniq > libnames
4592 set X `cat libnames`
4593 shift
4594 xxx=files
4595 case $# in 1) xxx=file; esac
4596 echo "Extracting names from the following $xxx for later perusal:" >&4
4597 echo " "
4598 $sed 's/^/      /' libnames >&4
4599 echo " "
4600 $echo $n "This may take a while...$c" >&4
4601
4602 for file in $*; do
4603         case $file in
4604         *$so*) $nm $nm_so_opt $nm_opt $file 2>/dev/null;;
4605         *) $nm $nm_opt $file 2>/dev/null;;
4606         esac
4607 done >libc.tmp
4608
4609 $echo $n ".$c"
4610 $grep fprintf libc.tmp > libc.ptf
4611 xscan='eval "<libc.ptf $com >libc.list"; $echo $n ".$c" >&4'
4612 xrun='eval "<libc.tmp $com >libc.list"; echo "done" >&4'
4613 xxx='[ADTSIW]'
4614 if com="$sed -n -e 's/__IO//' -e 's/^.* $xxx  *_[_.]*//p' -e 's/^.* $xxx  *//p'";\
4615         eval $xscan;\
4616         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4617                 eval $xrun
4618 elif com="$sed -n -e 's/^__*//' -e 's/^\([a-zA-Z_0-9$]*\).*xtern.*/\1/p'";\
4619         eval $xscan;\
4620         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4621                 eval $xrun
4622 elif com="$sed -n -e '/|UNDEF/d' -e '/FUNC..GL/s/^.*|__*//p'";\
4623         eval $xscan;\
4624         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4625                 eval $xrun
4626 elif com="$sed -n -e 's/^.* D __*//p' -e 's/^.* D //p'";\
4627         eval $xscan;\
4628         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4629                 eval $xrun
4630 elif com="$sed -n -e 's/^_//' -e 's/^\([a-zA-Z_0-9]*\).*xtern.*text.*/\1/p'";\
4631         eval $xscan;\
4632         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4633                 eval $xrun
4634 elif com="$sed -n -e 's/^.*|FUNC |GLOB .*|//p'";\
4635         eval $xscan;\
4636         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4637                 eval $xrun
4638 elif com="$grep '|' | $sed -n -e '/|COMMON/d' -e '/|DATA/d' \
4639                                 -e '/ file/d' -e 's/^\([^       ]*\).*/\1/p'";\
4640         eval $xscan;\
4641         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4642                 eval $xrun
4643 elif com="$sed -n -e 's/^.*|FUNC |GLOB .*|//p' -e 's/^.*|FUNC |WEAK .*|//p'";\
4644         eval $xscan;\
4645         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4646                 eval $xrun
4647 elif com="$sed -n -e 's/^__//' -e '/|Undef/d' -e '/|Proc/s/ .*//p'";\
4648         eval $xscan;\
4649         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4650                 eval $xrun
4651 elif com="$sed -n -e 's/^.*|Proc .*|Text *| *//p'";\
4652         eval $xscan;\
4653         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4654                 eval $xrun
4655 elif com="$sed -n -e '/Def. Text/s/.* \([^ ]*\)\$/\1/p'";\
4656         eval $xscan;\
4657         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4658                 eval $xrun
4659 elif com="$sed -n -e 's/^[-0-9a-f ]*_\(.*\)=.*/\1/p'";\
4660         eval $xscan;\
4661         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4662                 eval $xrun
4663 elif com="$sed -n -e 's/.*\.text n\ \ \ \.//p'";\
4664         eval $xscan;\
4665         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4666                 eval $xrun
4667 else
4668         $nm -p $* 2>/dev/null >libc.tmp
4669         $grep fprintf libc.tmp > libc.ptf
4670         if com="$sed -n -e 's/^.* [ADTSIW]  *_[_.]*//p' -e 's/^.* [ADTSIW] //p'";\
4671                 eval $xscan; $contains '^fprintf$' libc.list >/dev/null 2>&1
4672         then
4673                 nm_opt='-p'
4674                 eval $xrun
4675         else
4676                 echo " "
4677                 echo "$nm didn't seem to work right. Trying $ar instead..." >&4
4678                 com=''
4679                 if $ar t $libc > libc.tmp && $contains '^fprintf$' libc.tmp >/dev/null 2>&1; then
4680                         for thisname in $libnames $libc; do
4681                                 $ar t $thisname >>libc.tmp
4682                         done
4683                         $sed -e "s/\\$_o\$//" < libc.tmp > libc.list
4684                         echo "Ok." >&4
4685                 elif test "X$osname" = "Xos2" && $ar tv $libc > libc.tmp; then
4686                         # Repeat libc to extract forwarders to DLL entries too
4687                         for thisname in $libnames $libc; do
4688                                 $ar tv $thisname >>libc.tmp
4689                                 # Revision 50 of EMX has bug in $ar.
4690                                 # it will not extract forwarders to DLL entries
4691                                 # Use emximp which will extract exactly them.
4692                                 emximp -o tmp.imp $thisname \
4693                                     2>/dev/null && \
4694                                     $sed -e 's/^\([_a-zA-Z0-9]*\) .*$/\1/p' \
4695                                     < tmp.imp >>libc.tmp
4696                                 $rm tmp.imp
4697                         done
4698                         $sed -e "s/\\$_o\$//" -e 's/^ \+//' < libc.tmp > libc.list
4699                         echo "Ok." >&4
4700                 else
4701                         echo "$ar didn't seem to work right." >&4
4702                         echo "Maybe this is a Cray...trying bld instead..." >&4
4703                         if bld t $libc | $sed -e 's/.*\///' -e "s/\\$_o:.*\$//" > libc.list
4704                         then
4705                                 for thisname in $libnames; do
4706                                         bld t $libnames | \
4707                                         $sed -e 's/.*\///' -e "s/\\$_o:.*\$//" >>libc.list
4708                                         $ar t $thisname >>libc.tmp
4709                                 done
4710                                 echo "Ok." >&4
4711                         else
4712                                 echo "That didn't work either.  Giving up." >&4
4713                                 exit 1
4714                         fi
4715                 fi
4716         fi
4717 fi
4718 nm_extract="$com"
4719 if $test -f /lib/syscalls.exp; then
4720         echo " "
4721         echo "Also extracting names from /lib/syscalls.exp for good ole AIX..." >&4
4722         $sed -n 's/^\([^        ]*\)[   ]*syscall$/\1/p' /lib/syscalls.exp >>libc.list
4723 fi
4724 ;;