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