perl5.000 patch.0k: MakeMaker 4.06 and to fix minor portability and build problems...
[p5sagit/p5-mst-13.2.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 so you may fetch it yourself from your nearest
18 # archive site. Check with Archie if you don't know where that can be.)
19 #
20
21 # $Id: Head.U,v 3.0.1.6 1994/10/29 15:54:19 ram Exp $
22 #
23 # Generated on Sat Feb 11 11:56:23 EST 1995 [metaconfig 3.0 PL50]
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
59 : Proper PATH setting
60 paths='/bin /usr/bin /usr/local/bin /usr/ucb /usr/local /usr/lbin'
61 paths=$paths:'/usr/5bin /etc /usr/gnu/bin /usr/new /usr/new/bin /usr/nbin'
62 paths=$paths:'/sys5.3/bin /sys5.3/usr/bin /bsd4.3/bin /bsd4.3/usr/ucb'
63 paths=$paths:'/bsd4.3/usr/bin /usr/bsd /bsd43/bin /usr/ccs/bin'
64 paths=$paths:'/etc /usr/lib /usr/ucblib /lib /usr/ccs/lib'
65 paths=$paths:'/sbin /usr/sbin /usr/libexec'
66
67 for p in $paths
68 do
69         case ":$PATH:" in
70         *:$p:*) ;;
71         *) test -d $p && PATH=$PATH:$p ;;
72         esac
73 done
74
75 PATH=.:$PATH
76 export PATH
77
78 : Sanity checks
79 if test ! -t 0; then
80         echo "Say 'sh $me', not 'sh <$me'"
81         exit 1
82 fi
83
84 : On HP-UX, large Configure scripts may exercise a bug in /bin/sh
85 if test -f /hp-ux -a -f /bin/ksh; then
86         if (PATH=.; alias -x) >/dev/null 2>&1; then
87                 : already under /bin/ksh
88         else
89                 cat <<'EOM'
90 (Feeding myself to ksh to avoid nasty sh bug in "here document" expansion.)
91 EOM
92                 unset ENV
93                 exec /bin/ksh $0 "$@"
94         fi
95 else
96         : Warn them if they use ksh on other systems
97         (PATH=.; alias -x) >/dev/null 2>&1 && \
98                 cat <<EOM
99 (I see you are using the Korn shell.  Some ksh's blow up on $me,
100 especially on exotic machines.  If yours does, try the Bourne shell instead.)
101 EOM
102 fi
103
104 : Configure runs within the UU subdirectory
105 test -d UU || mkdir UU
106 cd UU && rm -f *
107
108 dynamic_ext=''
109 extensions=''
110 known_extensions=''
111 static_ext=''
112 useposix=''
113 d_bsd=''
114 d_eunice=''
115 d_xenix=''
116 eunicefix=''
117 Mcc=''
118 awk=''
119 bash=''
120 bison=''
121 byacc=''
122 cat=''
123 chgrp=''
124 chmod=''
125 chown=''
126 comm=''
127 compress=''
128 cp=''
129 cpio=''
130 cpp=''
131 csh=''
132 date=''
133 echo=''
134 egrep=''
135 emacs=''
136 expr=''
137 find=''
138 flex=''
139 gcc=''
140 grep=''
141 inews=''
142 ksh=''
143 less=''
144 line=''
145 lint=''
146 ln=''
147 lp=''
148 lpr=''
149 ls=''
150 mail=''
151 mailx=''
152 make=''
153 mkdir=''
154 more=''
155 mv=''
156 nroff=''
157 perl=''
158 pg=''
159 pmake=''
160 pr=''
161 rm=''
162 rmail=''
163 sed=''
164 sendmail=''
165 sh=''
166 shar=''
167 sleep=''
168 smail=''
169 sort=''
170 submit=''
171 tail=''
172 tar=''
173 tbl=''
174 test=''
175 touch=''
176 tr=''
177 troff=''
178 uname=''
179 uniq=''
180 uuname=''
181 vi=''
182 zcat=''
183 full_sed=''
184 libswanted=''
185 hint=''
186 myuname=''
187 osname=''
188 osvers=''
189 Author=''
190 Date=''
191 Header=''
192 Id=''
193 Locker=''
194 Log=''
195 RCSfile=''
196 Revision=''
197 Source=''
198 State=''
199 afs=''
200 alignbytes=''
201 archlib=''
202 archlibexp=''
203 archname=''
204 d_archlib=''
205 installarchlib=''
206 baserev=''
207 bin=''
208 binexp=''
209 installbin=''
210 byteorder=''
211 cc=''
212 gccversion=''
213 ccflags=''
214 cppflags=''
215 ldflags=''
216 lkflags=''
217 optimize=''
218 cf_by=''
219 cf_time=''
220 contains=''
221 cpp_stuff=''
222 cpplast=''
223 cppminus=''
224 cpprun=''
225 cppstdin=''
226 d_access=''
227 d_alarm=''
228 d_attribut=''
229 d_bcmp=''
230 d_bcopy=''
231 d_byacc=''
232 d_bzero=''
233 d_casti32=''
234 castflags=''
235 d_castneg=''
236 d_chown=''
237 d_chroot=''
238 d_chsize=''
239 d_closedir=''
240 d_void_closedir=''
241 d_const=''
242 cryptlib=''
243 d_crypt=''
244 d_csh=''
245 full_csh=''
246 d_cuserid=''
247 d_dbl_dig=''
248 d_difftime=''
249 d_dlerror=''
250 d_dlopen=''
251 d_dlsymun=''
252 d_dosuid=''
253 d_suidsafe=''
254 d_drem=''
255 d_dup2=''
256 d_fchmod=''
257 d_fchown=''
258 d_fcntl=''
259 d_fd_macros=''
260 d_fd_set=''
261 d_fds_bits=''
262 d_fgetpos=''
263 d_flexfnam=''
264 d_flock=''
265 d_fmod=''
266 d_fork=''
267 d_fsetpos=''
268 d_Gconvert=''
269 d_getgrps=''
270 d_gethent=''
271 aphostname=''
272 d_gethname=''
273 d_phostname=''
274 d_uname=''
275 d_getlogin=''
276 d_getpgrp2=''
277 d_getpgrp=''
278 d_getppid=''
279 d_getprior=''
280 d_htonl=''
281 d_isascii=''
282 d_killpg=''
283 d_link=''
284 d_linuxstd=''
285 d_locconv=''
286 d_lockf=''
287 d_lstat=''
288 d_mblen=''
289 d_mbstowcs=''
290 d_mbtowc=''
291 d_memcmp=''
292 d_memcpy=''
293 d_memmove=''
294 d_memset=''
295 d_mkdir=''
296 d_mkfifo=''
297 d_mktime=''
298 d_msg=''
299 d_msgctl=''
300 d_msgget=''
301 d_msgrcv=''
302 d_msgsnd=''
303 d_nice=''
304 d_open3=''
305 d_fpathconf=''
306 d_pathconf=''
307 d_pause=''
308 d_pipe=''
309 d_portable=''
310 d_readdir=''
311 d_rewinddir=''
312 d_seekdir=''
313 d_telldir=''
314 d_readlink=''
315 d_rename=''
316 d_rmdir=''
317 d_safebcpy=''
318 d_safemcpy=''
319 d_select=''
320 d_sem=''
321 d_semctl=''
322 d_semget=''
323 d_semop=''
324 d_setegid=''
325 d_seteuid=''
326 d_setlinebuf=''
327 d_setlocale=''
328 d_setpgid=''
329 d_setpgrp2=''
330 d_bsdpgrp=''
331 d_setpgrp=''
332 d_setprior=''
333 d_setregid=''
334 d_setresgid=''
335 d_setresuid=''
336 d_setreuid=''
337 d_setrgid=''
338 d_setruid=''
339 d_setsid=''
340 d_shm=''
341 d_shmat=''
342 d_shmatprototype=''
343 shmattype=''
344 d_shmctl=''
345 d_shmdt=''
346 d_shmget=''
347 d_oldsock=''
348 d_socket=''
349 d_sockpair=''
350 sockethdr=''
351 socketlib=''
352 d_statblks=''
353 d_stdstdio=''
354 d_index=''
355 d_strchr=''
356 d_strcoll=''
357 d_strctcpy=''
358 d_strerrm=''
359 d_strerror=''
360 d_sysernlst=''
361 d_syserrlst=''
362 d_strxfrm=''
363 d_symlink=''
364 d_syscall=''
365 d_sysconf=''
366 d_system=''
367 d_tcgetpgrp=''
368 d_tcsetpgrp=''
369 d_time=''
370 timetype=''
371 clocktype=''
372 d_times=''
373 d_truncate=''
374 d_tzname=''
375 d_umask=''
376 d_vfork=''
377 usevfork=''
378 d_voidsig=''
379 signal_t=''
380 d_volatile=''
381 d_charvspr=''
382 d_vprintf=''
383 d_wait4=''
384 d_waitpid=''
385 d_wcstombs=''
386 d_wctomb=''
387 dlext=''
388 cccdlflags=''
389 ccdlflags=''
390 d_shrplib=''
391 dlsrc=''
392 lddlflags=''
393 shrpdir=''
394 usedl=''
395 fpostype=''
396 gidtype=''
397 groupstype=''
398 h_fcntl=''
399 h_sysfile=''
400 db_hashtype=''
401 db_prefixtype=''
402 i_db=''
403 i_dbm=''
404 d_dirnamlen=''
405 direntrytype=''
406 i_dirent=''
407 i_dld=''
408 i_dlfcn=''
409 i_fcntl=''
410 i_float=''
411 i_gdbm=''
412 i_grp=''
413 i_limits=''
414 i_malloc=''
415 i_math=''
416 i_memory=''
417 i_ndbm=''
418 i_neterrno=''
419 i_niin=''
420 i_sysin=''
421 d_pwage=''
422 d_pwchange=''
423 d_pwclass=''
424 d_pwcomment=''
425 d_pwexpire=''
426 d_pwquota=''
427 i_pwd=''
428 i_stddef=''
429 i_stdlib=''
430 i_string=''
431 strings=''
432 i_sysdir=''
433 i_sysfile=''
434 d_voidtty=''
435 i_bsdioctl=''
436 i_sysfilio=''
437 i_sysioctl=''
438 i_syssockio=''
439 i_sysndir=''
440 i_sysparam=''
441 i_sysselct=''
442 i_sysstat=''
443 i_systimes=''
444 i_systypes=''
445 i_sgtty=''
446 i_termio=''
447 i_termios=''
448 i_systime=''
449 i_systimek=''
450 i_time=''
451 timeincl=''
452 i_unistd=''
453 i_utime=''
454 i_stdarg=''
455 i_varargs=''
456 i_varhdr=''
457 i_vfork=''
458 intsize=''
459 libc=''
460 glibpth=''
461 libpth=''
462 plibpth=''
463 xlibpth=''
464 libs=''
465 lns=''
466 lseektype=''
467 d_mymalloc=''
468 mallocobj=''
469 mallocsrc=''
470 malloctype=''
471 usemymalloc=''
472 installmansrc=''
473 manext=''
474 mansrc=''
475 mansrcexp=''
476 huge=''
477 large=''
478 medium=''
479 models=''
480 small=''
481 split=''
482 modetype=''
483 mydomain=''
484 myhostname=''
485 phostname=''
486 c=''
487 n=''
488 groupcat=''
489 hostcat=''
490 passcat=''
491 orderlib=''
492 ranlib=''
493 package=''
494 spackage=''
495 patchlevel=''
496 prefix=''
497 prefixexp=''
498 installprivlib=''
499 privlib=''
500 privlibexp=''
501 prototype=''
502 randbits=''
503 installscript=''
504 scriptdir=''
505 scriptdirexp=''
506 selecttype=''
507 sig_name=''
508 sizetype=''
509 so=''
510 sharpbang=''
511 shsharp=''
512 spitshell=''
513 ssizetype=''
514 startsh=''
515 stdchar=''
516 sysman=''
517 uidtype=''
518 nm_opt=''
519 runnm=''
520 usenm=''
521 incpath=''
522 mips=''
523 mips_type=''
524 usrinc=''
525 defvoidused=''
526 voidflags=''
527 CONFIG=''
528
529 define='define'
530 undef='undef'
531 smallmach='pdp11 i8086 z8000 i80286 iAPX286'
532 rmlist=''
533
534 : We must find out about Eunice early
535 eunicefix=':'
536 if test -f /etc/unixtovms; then
537         eunicefix=/etc/unixtovms
538 fi
539 if test -f /etc/unixtovms.exe; then
540         eunicefix=/etc/unixtovms.exe
541 fi
542
543 : list of known cpp symbols, sorted alphabetically
544 al="AMIX BIT_MSF BSD BSD4_3 BSD_NET2 CMU CRAY DGUX DOLPHIN DPX2"
545 al="$al GO32 GOULD_PN HP700 I386 I80960 I960 Lynx M68000 M68K MACH"
546 al="$al MIPSEB MIPSEL MSDOS MTXINU MULTIMAX MVS"
547 al="$al M_COFF M_I186 M_I286 M_I386 M_I8086 M_I86 M_I86SM"
548 al="$al M_SYS3 M_SYS5 M_SYSIII M_SYSV M_UNIX M_XENIX"
549 al="$al NeXT OCS88 OSF1 PARISC PC532 PORTAR POSIX"
550 al="$al PWB R3000 RES RISC6000 RT Sun386i SVR3 SVR4"
551 al="$al SYSTYPE_BSD SYSTYPE_SVR4 SYSTYPE_SYSV Tek4132 Tek4300"
552 al="$al UMAXV USGr4 USGr4_2 UTEK UTS UTek UnicomPBB UnicomPBD Utek"
553 al="$al VMS Xenix286"
554 al="$al _AIX _AIX32 _AIX370 _AM29000 _COFF _CRAY _CX_UX _EPI"
555 al="$al _IBMESA _IBMR2 _M88K _M88KBCS_TARGET"
556 al="$al _MIPSEB _MIPSEL _M_COFF _M_I86 _M_I86SM _M_SYS3"
557 al="$al _M_SYS5 _M_SYSIII _M_SYSV _M_UNIX _M_XENIX _NLS _PGC_ _R3000"
558 al="$al _SYSTYPE_BSD _SYSTYPE_BSD43 _SYSTYPE_SVR4"
559 al="$al _SYSTYPE_SYSV _SYSV3 _U370 _UNICOS"
560 al="$al __386BSD__ __BIG_ENDIAN __BIG_ENDIAN__ __BSD_4_4__"
561 al="$al __DGUX__ __DPX2__ __H3050R __H3050RX"
562 al="$al __LITTLE_ENDIAN __LITTLE_ENDIAN__ __MACH__"
563 al="$al __MIPSEB __MIPSEB__ __MIPSEL __MIPSEL__"
564 al="$al __Next__ __OSF1__ __PARAGON__ __PGC__ __PWB __STDC__"
565 al="$al __SVR4_2__ __UMAXV__"
566 al="$al ____386BSD____ __alpha __alpha__ __amiga"
567 al="$al __bsd4_2 __bsd4_2__ __bsdi__ __convex__"
568 al="$al __host_mips__"
569 al="$al __hp9000s200 __hp9000s300 __hp9000s400 __hp9000s500"
570 al="$al __hp9000s500 __hp9000s700 __hp9000s800"
571 al="$al __hppa __hpux __hp_osf __i286 __i286__ __i386 __i386__"
572 al="$al __i486 __i486__ __i860 __i860__ __ibmesa __ksr1__ __linux__"
573 al="$al __m68k __m68k__ __m88100__ __m88k __m88k__"
574 al="$al __mc68000 __mc68000__ __mc68020 __mc68020__"
575 al="$al __mc68030 __mc68030__ __mc68040 __mc68040__"
576 al="$al __mc88100 __mc88100__ __mips __mips__"
577 al="$al __motorola__ __osf__ __pa_risc __sparc__ __stdc__"
578 al="$al __sun __sun__ __svr3__ __svr4__ __ultrix __ultrix__"
579 al="$al __unix __unix__ __uxpm__ __uxps__ __vax __vax__"
580 al="$al _host_mips _mips _unix"
581 al="$al a29k aegis aix aixpc alliant alpha am29000 amiga ansi ardent"
582 al="$al apollo ardent att386 att3b"
583 al="$al bsd bsd43 bsd4_2 bsd4_3 bsd4_4 bsdi bull"
584 al="$al cadmus clipper concurrent convex cray ctix"
585 al="$al dmert encore gcos gcx gimpel gould"
586 al="$al hbullx20 hcx host_mips hp200 hp300 hp700 hp800"
587 al="$al hp9000 hp9000s300 hp9000s400 hp9000s500"
588 al="$al hp9000s700 hp9000s800 hp9k8 hppa hpux"
589 al="$al i186 i286 i386 i486 i8086"
590 al="$al i80960 i860 iAPX286 ibm ibm032 ibmrt interdata is68k"
591 al="$al ksr1 linux luna luna88k m68k m88100 m88k"
592 al="$al mc300 mc500 mc68000 mc68010 mc68020 mc68030"
593 al="$al mc68040 mc68060 mc68k mc68k32 mc700"
594 al="$al mc88000 mc88100 merlin mert mips mvs n16"
595 al="$al ncl_el ncl_mr"
596 al="$al news1500 news1700 news1800 news1900 news3700"
597 al="$al news700 news800 news900 ns16000 ns32000"
598 al="$al ns32016 ns32332 ns32k nsc32000 os osf"
599 al="$al parisc pc532 pdp11 plexus posix pyr"
600 al="$al riscix riscos scs sequent sgi sinix sony sony_news"
601 al="$al sonyrisc sparc sparclite spectrum stardent stratos"
602 al="$al sun sun3 sun386 svr4 sysV68 sysV88"
603 al="$al titan tower tower32 tower32_200 tower32_600 tower32_700"
604 al="$al tower32_800 tower32_850 tss u370 u3b u3b2 u3b20 u3b200"
605 al="$al u3b20d u3b5 ultrix unix unixpc unos vax venix vms"
606 al="$al xenix z8000"
607
608 gccversion=''
609 groupstype=''
610 i_whoami=''
611 : change the next line if compiling for Xenix/286 on Xenix/386
612 xlibpth='/usr/lib/386 /lib/386'
613
614 : general looking path for locating libraries
615 glibpth="/lib/pa1.1 /usr/lib/large /lib /usr/lib $xlibpth"
616 glibpth="$glibpth /lib/large /usr/lib/small /lib/small"
617 glibpth="$glibpth /usr/ccs/lib /usr/ucblib /usr/local/lib /usr/shlib"
618
619 : Private path used by Configure to find libraries.  Its value
620 : is prepended to libpth. This variable takes care of special
621 : machines, like the mips.  Usually, it should be empty.
622 plibpth=''
623
624 : default library list
625 libswanted=''
626 : full support for void wanted by default
627 defvoidused=15
628
629 : set useposix=false in your hint file to disable the POSIX extension.
630 useposix=true
631 : no include file wanted by default
632 inclwanted=''
633
634 : List of libraries we want.
635 libswanted='net socket inet nsl nm ndbm gdbm dbm db malloc dl'
636 libswanted="$libswanted dld ld sun m c cposix posix ndir dir crypt"
637 libswanted="$libswanted ucb bsd BSD PW x"
638 : We probably want to search /usr/shlib before most other libraries.
639 : This is only used by ext/util/extliblist
640 glibpth=`echo " $glibpth " | sed -e 's! /usr/shlib ! !'`
641 glibpth="/usr/shlib $glibpth"
642 : Do not use vfork unless overridden by a hint file.
643 usevfork=false
644 : We might as well always be portable.  It makes no difference for
645 : perl5, and makes people happy.
646 d_portable=define
647
648 : script used to extract .SH files with variable substitutions
649 cat >extract <<'EOS'
650 CONFIG=true
651 echo "Doing variable substitutions on .SH files..."
652 if test -f MANIFEST; then
653         shlist=`awk '{print $1}' <MANIFEST | grep '\.SH'`
654         : Pick up possible extension manifests.
655         for dir in ext/* ; do
656                 if test -f $dir/MANIFEST; then
657                         xxx=`awk '{print $1}' < $dir/MANIFEST | 
658                                 sed -n "/\.SH$/ s@^@$dir/@p"`
659                         shlist="$shlist $xxx"
660                 fi
661         done
662         set x $shlist
663 else
664         echo "(Looking for .SH files under the current directory.)"
665         set x `find . -name "*.SH" -print`
666 fi
667 shift
668 case $# in
669 0) set x *.SH; shift;;
670 esac
671 if test ! -f $1; then
672         shift
673 fi
674 for file in $*; do
675         case "$file" in
676         */*)
677                 dir=`expr X$file : 'X\(.*\)/'`
678                 file=`expr X$file : 'X.*/\(.*\)'`
679                 (cd $dir && . ./$file)
680                 ;;
681         *)
682                 . ./$file
683                 ;;
684         esac
685 done
686 if test -f config_h.SH; then
687         if test ! -f config.h; then
688         : oops, they left it out of MANIFEST, probably, so do it anyway.
689         . ./config_h.SH
690         fi
691 fi
692 EOS
693
694 : produce awk script to parse command line options
695 cat >options.awk <<'EOF'
696 BEGIN {
697         optstr = "dD:eEf:hOrsSU:V";     # getopt-style specification
698
699         len = length(optstr);
700         for (i = 1; i <= len; i++) {
701                 c = substr(optstr, i, 1);
702                 if (i < len) a = substr(optstr, i + 1, 1); else a = "";
703                 if (a == ":") {
704                         arg[c] = 1;
705                         i++;
706                 }
707                 opt[c] = 1;
708         }
709 }
710 {
711         expect = 0;
712         str = $0;
713         if (substr(str, 1, 1) != "-") {
714                 printf("'%s'\n", str);
715                 next;
716         }
717         len = length($0);
718         for (i = 2; i <= len; i++) {
719                 c = substr(str, i, 1);
720                 if (!opt[c]) {
721                         printf("-%s\n", substr(str, i));
722                         next;
723                 }
724                 printf("-%s\n", c);
725                 if (arg[c]) {
726                         if (i < len)
727                                 printf("'%s'\n", substr(str, i + 1));
728                         else
729                                 expect = 1;
730                         next;
731                 }
732         }
733 }
734 END {
735         if (expect)
736                 print "?";
737 }
738 EOF
739
740 : process the command line options
741 set X `for arg in "$@"; do echo $arg; done | awk -f options.awk`
742 eval "set $*"
743 shift
744 rm -f options.awk
745
746 : set up default values
747 fastread=''
748 reuseval=false
749 config_sh=''
750 alldone=''
751 error=''
752 silent=''
753 extractsh=''
754 override=''
755 rm -f optdef.sh
756
757 : option parsing
758 while test $# -gt 0; do
759         case "$1" in
760         -d) shift; fastread=yes;;
761         -e) shift; alldone=cont;;
762         -f)
763                 shift
764                 cd ..
765                 if test -r "$1"; then
766                         config_sh="$1"
767                 else
768                         echo "$me: cannot read config file $1." >&2
769                         error=true
770                 fi
771                 cd UU
772                 shift;;
773         -h) shift; error=true;;
774         -r) shift; reuseval=true;;
775         -s) shift; silent=true;;
776         -E) shift; alldone=exit;;
777         -O) shift; override=true;;
778         -S) shift; extractsh=true;;
779         -D)
780                 shift
781                 case "$1" in
782                 *=)
783                         echo "$me: use '-U symbol=', not '-D symbol='." >&2
784                         echo "$me: ignoring -D $1" >&2
785                         ;;
786                 *=*) echo "$1" | \
787                                 sed -e "s/'/'\"'\"'/g" -e "s/=\(.*\)/='\1'/" >> optdef.sh;;
788                 *) echo "$1='define'" >> optdef.sh;;
789                 esac
790                 shift
791                 ;;
792         -U)
793                 shift
794                 case "$1" in
795                 *=) echo "$1" >> optdef.sh;;
796                 *=*)
797                         echo "$me: use '-D symbol=val', not '-U symbol=val'." >&2
798                         echo "$me: ignoring -U $1" >&2
799                         ;;
800                 *) echo "$1='undef'" >> optdef.sh;;
801                 esac
802                 shift
803                 ;;
804         -V) echo "$me generated by metaconfig 3.0 PL50." >&2
805                 exit 0;;
806         --) break;;
807         -*) echo "$me: unknown option $1" >&2; shift; error=true;;
808         *) break;;
809         esac
810 done
811
812 case "$error" in
813 true)
814         cat >&2 <<EOM
815 Usage: $me [-dehrEOSV] [-f config.sh] [-D symbol] [-D symbol=value]
816                  [-U symbol] [-U symbol=]
817   -d : use defaults for all answers.
818   -e : go on without questioning past the production of config.sh.
819   -f : specify an alternate default configuration file.
820   -h : print this help message and exit (with an error status).
821   -r : reuse C symbols value if possible (skips costly nm extraction).
822   -s : silent mode, only echoes questions and essential information.
823   -D : define symbol to have some value:
824          -D symbol         symbol gets the value 'define'
825          -D symbol=value   symbol gets the value 'value'
826   -E : stop at the end of questions, after having produced config.sh.
827   -O : let -D and -U override definitions from loaded configuration file.
828   -S : perform variable substitutions on all .SH files (can mix with -f)
829   -U : undefine symbol:
830          -U symbol    symbol gets the value 'undef'
831          -U symbol=   symbol gets completely empty
832   -V : print version number and exit (with a zero status).
833 EOM
834         exit 1
835         ;;
836 esac
837
838 exec 4>&1
839 case "$silent" in
840 true) exec 1>/dev/null;;
841 esac
842
843 : run the defines and the undefines, if any, but leave the file out there...
844 touch optdef.sh
845 . ./optdef.sh
846
847 case "$extractsh" in
848 true)
849         case "$config_sh" in
850         '') config_sh='config.sh'; config='./config.sh';;
851         /*) config="$config_sh";;
852         *) config="./$config_sh";;
853         esac
854         echo " "
855         echo "Fetching answers from $config_sh..."
856         cd ..
857         . $config
858         test "$override" && . ./optdef.sh
859         echo " "
860         . ./UU/extract
861         rm -rf UU
862         echo "Done."
863         exit 0
864         ;;
865 esac
866
867 : set package name
868 package=perl5
869 first=`echo $package | sed -e 's/^\(.\).*/\1/'`
870 last=`echo $package | sed -e 's/^.\(.*\)/\1/'`
871 case "`echo AbyZ | tr '[:lower:]' '[:upper:]' 2>/dev/null`" in
872 ABYZ) spackage=`echo $first | tr '[:lower:]' '[:upper:]'`$last;;
873 *) spackage=`echo $first | tr '[a-z]' '[A-Z]'`$last;;
874 esac
875
876 : Eunice requires " " instead of "", can you believe it
877 echo " "
878 : Here we go...
879 echo "Beginning of configuration questions for $package."
880
881 trap 'echo " "; test -d ../UU && rm -rf X $rmlist; exit 1' 1 2 3 15
882
883 : Some greps do not return status, grrr.
884 echo "grimblepritz" >grimble
885 if grep blurfldyick grimble >/dev/null 2>&1 ; then
886         contains=contains
887 elif grep grimblepritz grimble >/dev/null 2>&1 ; then
888         contains=grep
889 else
890         contains=contains
891 fi
892 rm -f grimble
893 : the following should work in any shell
894 case "$contains" in
895 contains*)
896         echo " "
897         echo "AGH!  Grep doesn't return a status.  Attempting remedial action."
898         cat >contains <<'EOSS'
899 grep "$1" "$2" >.greptmp && cat .greptmp && test -s .greptmp
900 EOSS
901 chmod +x contains
902 esac
903
904 : first determine how to suppress newline on echo command
905 echo " "
906 echo "Checking echo to see how to suppress newlines..."
907 (echo "hi there\c" ; echo " ") >.echotmp
908 if $contains c .echotmp >/dev/null 2>&1 ; then
909         echo "...using -n."
910         n='-n'
911         c=''
912 else
913         cat <<'EOM'
914 ...using \c
915 EOM
916         n=''
917         c='\c'
918 fi
919 echo $n "The star should be here-->$c"
920 echo '*'
921 rm -f .echotmp
922
923 : Now test for existence of everything in MANIFEST
924 echo " "
925 if test -f ../MANIFEST; then
926         echo "First let's make sure your kit is complete.  Checking..." >&4
927         awk '$1 !~ /PACK[A-Z]+/ {print $1}' ../MANIFEST | split -50
928         rm -f missing
929         for filelist in x??; do
930                 (cd ..; ls `cat UU/$filelist` >/dev/null 2>>UU/missing)
931         done
932         if test -s missing; then
933                 cat missing >&4
934                 cat >&4 <<'EOM'
935
936 THIS PACKAGE SEEMS TO BE INCOMPLETE.
937
938 You have the option of continuing the configuration process, despite the
939 distinct possibility that your kit is damaged, by typing 'y'es.  If you
940 do, don't blame me if something goes wrong.  I advise you to type 'n'o
941 and contact the author (lwall@netlabs.com).
942
943 EOM
944                 echo $n "Continue? [n] $c" >&4
945                 read ans
946                 case "$ans" in
947                 y*)
948                         echo "Continuing..." >&4
949                         rm -f missing
950                         ;;
951                 *)
952                         echo "ABORTING..." >&4
953                         kill $$
954                         ;;
955                 esac
956         else
957                 echo "Looks good..." >&4
958         fi
959 else
960         echo "There is no MANIFEST file.  I hope your kit is complete !"
961 fi
962 rm -f missing x??
963
964 : compute the number of columns on the terminal for proper question formatting
965 case "$COLUMNS" in
966 '') COLUMNS='80';;
967 esac
968
969 : set up the echo used in my read
970 myecho="case \"\$xxxm\" in
971 '') echo $n \"\$rp $c\" >&4;;
972 *) case \"\$rp\" in
973         '') echo $n \"[\$xxxm] $c\";;
974         *)
975                 if test \`echo \"\$rp [\$xxxm]  \" | wc -c\` -ge $COLUMNS; then
976                         echo \"\$rp\" >&4
977                         echo $n \"[\$xxxm] $c\" >&4
978                 else
979                         echo $n \"\$rp [\$xxxm] $c\" >&4
980                 fi
981                 ;;
982         esac;;
983 esac"
984
985 : now set up to do reads with possible shell escape and default assignment
986 cat <<EOSC >myread
987 xxxm=\$dflt
988 $myecho
989 ans='!'
990 case "\$fastread" in
991 yes) case "\$dflt" in
992         '') ;;
993         *) ans='';
994                 case "\$silent-\$rp" in
995                 true-) ;;
996                 *) echo " " >&4;;
997                 esac;;
998         esac;;
999 *) case "\$silent" in
1000         true) case "\$rp" in
1001                 '') ans='';;
1002                 esac;;
1003         esac;;
1004 esac
1005 while expr "X\$ans" : "X!" >/dev/null; do
1006         read answ
1007         set x \$xxxm
1008         shift
1009         aok=''; eval "ans=\"\$answ\"" && aok=y
1010         case  "\$answ" in
1011         "\$ans")
1012                 case "\$ans" in
1013                 \\&*)
1014                         set x \`expr "X\$ans" : "X&\(.*\)\$"\`
1015                         shift
1016                         case "\$1" in
1017                         -d)
1018                                 fastread=yes
1019                                 echo "(OK, I'll run with -d after this question.)"
1020                                 ;;
1021                         -*)
1022                                 echo "*** Sorry, \$1 not supported yet."
1023                                 ;;
1024                         esac
1025                         $myecho
1026                         ans=!
1027                         ;;
1028                 "!")
1029                         sh 1>&4
1030                         echo " "
1031                         $myecho
1032                         ;;
1033                 !*)
1034                         set x \`expr "X\$ans" : "X!\(.*\)\$"\`
1035                         shift
1036                         sh 1>&4 -c "\$*"
1037                         echo " "
1038                         $myecho
1039                         ;;
1040                 esac;;
1041         *)
1042                 case "\$aok" in
1043                 y)
1044                         echo "*** Substitution done -- please confirm."
1045                         xxxm="\$ans"
1046                         ans=\`echo $n "\$ans$c" | tr '\012' ' '\`
1047                         xxxm="\$ans"
1048                         ans=!
1049                         ;;
1050                 *)
1051                         echo "*** Error -- try again."
1052                         ans=!
1053                         ;;
1054                 esac
1055                 $myecho
1056                 ;;
1057         esac
1058         case "\$ans\$xxxm\$nostick" in
1059         '')
1060                 ans=!
1061                 $myecho
1062                 ;;
1063         esac
1064 done
1065 case "\$ans" in
1066 '') ans="\$xxxm";;
1067 esac
1068 EOSC
1069
1070 : create .config dir to save info across Configure sessions
1071 test -d ../.config || mkdir ../.config
1072 cat >../.config/README <<EOF
1073 This directory created by Configure to save information that should
1074 persist across sessions.
1075
1076 You may safely delete it if you wish.
1077 EOF
1078
1079 : general instructions
1080 needman=true
1081 firsttime=true
1082 user=`( (logname) 2>/dev/null || whoami) 2>&1`
1083 if $contains "^$user\$" ../.config/instruct >/dev/null 2>&1; then
1084         firsttime=false
1085         echo " "
1086         rp='Would you like to see the instructions?'
1087         dflt=n
1088         . ./myread
1089         case "$ans" in
1090         [yY]*) ;;
1091         *) needman=false;;
1092         esac
1093 fi
1094 if $needman; then
1095         cat <<EOH
1096  
1097 This installation shell script will examine your system and ask you questions
1098 to determine how the perl5 package should be installed. If you get
1099 stuck on a question, you may use a ! shell escape to start a subshell or
1100 execute a command.  Many of the questions will have default answers in square
1101 brackets; typing carriage return will give you the default.
1102
1103 On some of the questions which ask for file or directory names you are allowed
1104 to use the ~name construct to specify the login directory belonging to "name",
1105 even if you don't have a shell which knows about that.  Questions where this is
1106 allowed will be marked "(~name ok)".
1107
1108 EOH
1109         rp=''
1110         dflt='Type carriage return to continue'
1111         . ./myread
1112         cat <<'EOH'
1113
1114 The prompter used in this script allows you to use shell variables and
1115 backticks in your answers.  You may use $1, $2, etc...  to refer to the words
1116 in the default answer, as if the default line was a set of arguments given to a
1117 script shell.  This means you may also use $* to repeat the whole default line,
1118 so you do not have to re-type everything to add something to the default.
1119
1120 Everytime there is a substitution, you will have to confirm.  If there is an
1121 error (e.g. an unmatched backtick), the default answer will remain unchanged
1122 and you will be prompted again.
1123
1124 If you are in a hurry, you may run 'Configure -d'.  This will bypass nearly all
1125 the questions and use the computed defaults (or the previous answers if there
1126 was already a config.sh file). Type 'Configure -h' for a list of options.
1127 You may also start interactively and then answer '& -d' at any prompt to turn
1128 on the non-interactive behaviour for the remaining of the execution.
1129
1130 EOH
1131         . ./myread
1132         cat <<EOH
1133
1134 Much effort has been expended to ensure that this shell script will run on any
1135 Unix system.  If despite that it blows up on yours, your best bet is to edit
1136 Configure and run it again.  Also, let me (lwall@netlabs.com)
1137 know how I blew it.  If you can't run Configure for some reason, you'll have to
1138 generate a config.sh file by hand.
1139
1140 This installation script affects things in two ways:
1141
1142 1) it may do direct variable substitutions on some of the files included
1143    in this kit.
1144 2) it builds a config.h file for inclusion in C programs.  You may edit
1145    any of these files as the need arises after running this script.
1146
1147 If you make a mistake on a question, there is no easy way to back up to it
1148 currently.  The easiest thing to do is to edit config.sh and rerun all the SH
1149 files.  Configure will offer to let you do this before it runs the SH files.
1150
1151 EOH
1152         dflt='Type carriage return to continue'
1153         . ./myread
1154         case "$firsttime" in
1155         true) echo $user >>../.config/instruct;;
1156         esac
1157 fi
1158
1159 : see if sh knows # comments
1160 echo " "
1161 echo "Checking your sh to see if it knows about # comments..." >&4
1162 if `sh -c '#' >/dev/null 2>&1`; then
1163         echo "Your sh handles # comments correctly."
1164         shsharp=true
1165         spitshell=cat
1166         echo " "
1167         echo "Okay, let's see if #! works on this system..."
1168         xcat=/bin/cat
1169         test -f $xcat || xcat=/usr/bin/cat
1170         echo "#!$xcat" >try
1171         $eunicefix try
1172         chmod +x try
1173         ./try > today
1174         if test -s today; then
1175                 echo "It does."
1176                 sharpbang='#!'
1177         else
1178                 echo "#! $xcat" > try
1179                 $eunicefix try
1180                 chmod +x try
1181                 ./try > today
1182                 if test -s today; then
1183                         echo "It does."
1184                         sharpbang='#! '
1185                 else
1186                         echo "It's just a comment."
1187                         sharpbang=': use '
1188                 fi
1189         fi
1190 else
1191         echo "Your sh doesn't grok # comments--I will strip them later on."
1192         shsharp=false
1193         cd ..
1194         echo "exec grep -v '^[  ]*#'" >spitshell
1195         chmod +x spitshell
1196         $eunicefix spitshell
1197         spitshell=`pwd`/spitshell
1198         cd UU
1199         echo "I presume that if # doesn't work, #! won't work either!"
1200         sharpbang=': use '
1201 fi
1202 rm -f try today
1203
1204 : figure out how to guarantee sh startup
1205 echo " "
1206 echo "Checking out how to guarantee sh startup..." >&4
1207 case "$SYSTYPE" in
1208 *bsd*|sys5*) startsh=$sharpbang"/$SYSTYPE/bin/sh";;
1209 *) startsh=$sharpbang'/bin/sh';;
1210 esac
1211 echo "Let's see if '$startsh' works..."
1212 cat >try <<EOSS
1213 $startsh
1214 set abc
1215 test "$?abc" != 1
1216 EOSS
1217
1218 chmod +x try
1219 $eunicefix try
1220 if ./try; then
1221         echo "Yup, it does."
1222 else
1223 echo "Nope.  You may have to fix up the shell scripts to make sure sh runs them."
1224 fi
1225 rm -f try
1226
1227 : find out where common programs are
1228 echo " "
1229 echo "Locating common programs..." >&4
1230 cat <<EOSC >loc
1231 $startsh
1232 case \$# in
1233 0) exit 1;;
1234 esac
1235 thing=\$1
1236 shift
1237 dflt=\$1
1238 shift
1239 for dir in \$*; do
1240         case "\$thing" in
1241         .)
1242         if test -d \$dir/\$thing; then
1243                 echo \$dir
1244                 exit 0
1245         fi
1246         ;;
1247         *)
1248         for thisthing in \$dir/\$thing; do
1249                 : just loop through to pick last item
1250         done
1251         if test -f \$thisthing; then
1252                 echo \$thisthing
1253                 exit 0
1254         elif test -f \$dir/\$thing.exe; then
1255                 : on Eunice apparently
1256                 echo \$dir/\$thing
1257                 exit 0
1258         fi
1259         ;;
1260         esac
1261 done
1262 echo \$dflt
1263 exit 1
1264 EOSC
1265 chmod +x loc
1266 $eunicefix loc
1267 loclist="
1268 awk
1269 cat
1270 comm
1271 cp
1272 echo
1273 expr
1274 find
1275 grep
1276 ln
1277 ls
1278 mkdir
1279 rm
1280 sed
1281 sort
1282 touch
1283 tr
1284 uniq
1285 "
1286 trylist="
1287 Mcc
1288 byacc
1289 cpp
1290 csh
1291 date
1292 egrep
1293 line
1294 nroff
1295 perl
1296 test
1297 uname
1298 "
1299 pth=`echo $PATH | sed -e 's/:/ /g'`
1300 pth="$pth /lib /usr/lib"
1301 for file in $loclist; do
1302         xxx=`./loc $file $file $pth`
1303         eval $file=$xxx
1304         eval _$file=$xxx
1305         case "$xxx" in
1306         /*)
1307                 echo $file is in $xxx.
1308                 ;;
1309         *)
1310                 echo "I don't know where $file is.  I hope it's in everyone's PATH."
1311                 ;;
1312         esac
1313 done
1314 echo " "
1315 echo "Don't worry if any of the following aren't found..."
1316 say=offhand
1317 for file in $trylist; do
1318         xxx=`./loc $file $file $pth`
1319         eval $file=$xxx
1320         eval _$file=$xxx
1321         case "$xxx" in
1322         /*)
1323                 echo $file is in $xxx.
1324                 ;;
1325         *)
1326                 echo "I don't see $file out there, $say."
1327                 say=either
1328                 ;;
1329         esac
1330 done
1331 case "$egrep" in
1332 egrep)
1333         echo "Substituting grep for egrep."
1334         egrep=$grep
1335         ;;
1336 esac
1337 case "$test" in
1338 test)
1339         echo "Hopefully test is built into your sh."
1340         ;;
1341 *)
1342         if `sh -c "PATH= test true" >/dev/null 2>&1`; then
1343                 echo "Using the test built into your sh."
1344                 test=test
1345                 _test=test
1346         fi
1347         ;;
1348 esac
1349 case "$echo" in
1350 echo)
1351         echo "Hopefully echo is built into your sh."
1352         ;;
1353 '') ;;
1354 *)
1355         echo " "
1356 echo "Checking compatibility between $echo and builtin echo (if any)..." >&4
1357         $echo $n "hi there$c" >foo1
1358         echo $n "hi there$c" >foo2
1359         if cmp foo1 foo2 >/dev/null 2>&1; then
1360                 echo "They are compatible.  In fact, they may be identical."
1361         else
1362                 case "$n" in
1363                 '-n') n='' c='\c';;
1364                 *) n='-n' c='';;
1365                 esac
1366                 cat <<FOO
1367 They are not compatible!  You are probably running ksh on a non-USG system.
1368 I'll have to use $echo instead of the builtin, since Bourne shell doesn't
1369 have echo built in and we may have to run some Bourne shell scripts.  That
1370 means I'll have to use '$n$c' to suppress newlines now.  Life is ridiculous.
1371
1372 FOO
1373                 $echo $n "The star should be here-->$c"
1374                 $echo "*"
1375         fi
1376         $rm -f foo1 foo2
1377         ;;
1378 esac
1379
1380 : determine whether symbolic links are supported
1381 echo " "
1382 $touch blurfl
1383 if $ln -s blurfl sym > /dev/null 2>&1 ; then
1384         echo "Symbolic links are supported." >&4
1385         lns="$ln -s"
1386 else
1387         echo "Symbolic links are NOT supported." >&4
1388         lns="$ln"
1389 fi
1390 $rm -f blurfl sym
1391
1392 : see whether [:lower:] and [:upper:] are supported character classes
1393 echo " "
1394 up='[A-Z]'
1395 low='[a-z]'
1396 case "`echo AbyZ | $tr '[:lower:]' '[:upper:]' 2>/dev/null`" in
1397 ABYZ)
1398         echo "Good, your tr supports [:lower:] and [:upper:] to convert case." >&4
1399         up='[:upper:]'
1400         low='[:lower:]'
1401         ;;
1402 *)
1403         echo "Your tr only supports [a-z] and [A-Z] to convert case." >&4
1404         ;;
1405 esac
1406 : set up the translation script tr, must be called with ./tr of course
1407 cat >tr <<EOSC
1408 $startsh
1409 case "\$1\$2" in
1410 '[A-Z][a-z]') exec $tr '$up' '$low';;
1411 '[a-z][A-Z]') exec $tr '$low' '$up';;
1412 esac
1413 exec $tr "\$@"
1414 EOSC
1415 chmod +x tr
1416 $eunicefix tr
1417
1418 : Try to determine whether config.sh was made on this system
1419 case "$config_sh" in
1420 '')
1421 myuname=`( ($uname -a) 2>/dev/null || hostname) 2>&1`
1422 myuname=`echo $myuname | $sed -e 's/^[^=]*=//' -e 's/\///g' | \
1423         ./tr '[A-Z]' '[a-z]' | tr '\012' ' '`
1424 newmyuname="$myuname"
1425 dflt=n
1426 if test "$fastread" = yes; then
1427         dflt=y
1428 elif test -f ../config.sh; then
1429         if $contains myuname= ../config.sh >/dev/null 2>&1; then
1430                 eval "`grep myuname= ../config.sh`"
1431         fi
1432         if test "X$myuname" = "X$newmyuname"; then
1433                 dflt=y
1434         fi
1435 fi
1436
1437 : Get old answers from old config file if Configure was run on the
1438 : same system, otherwise use the hints.
1439 hint=default
1440 cd ..
1441 if test -f config.sh; then
1442         echo " "
1443         rp="I see a config.sh file.  Shall I use it to set the defaults?"
1444         . UU/myread
1445         case "$ans" in
1446         n*|N*) echo "OK, I'll ignore it."; mv config.sh config.sh.old;;
1447         *)  echo "Fetching default answers from your old config.sh file..." >&4
1448                 tmp_n="$n"
1449                 tmp_c="$c"
1450                 . ./config.sh
1451                 cp config.sh UU
1452                 n="$tmp_n"
1453                 c="$tmp_c"
1454                 hint=previous
1455                 ;;
1456         esac
1457 fi
1458 if test ! -f config.sh; then
1459         $cat <<EOM
1460
1461 First time through, eh?  I have some defaults handy for the following systems:
1462
1463 EOM
1464         cd hints; ls -C *.sh | $sed 's/\.sh/   /g' >&4
1465         dflt=''
1466         : Half the following guesses are probably wrong... If you have better
1467         : tests or hints, please send them to lwall@netlabs.com
1468         : The metaconfig authors would also appreciate a copy...
1469         $test -f /irix && osname=irix
1470         $test -f /xenix && osname=sco_xenix
1471         $test -f /dynix && osname=dynix
1472         $test -f /dnix && osname=dnix
1473         $test -f /unicos && osname=unicos && osvers=`$uname -r`
1474         $test -f /bin/mips && /bin/mips && osname=mips
1475         $test -d /NextApps && set X `hostinfo | grep 'NeXT Mach.*:' | \
1476                 $sed -e 's/://' -e 's/\./_/'` && osname=next && osvers=$4
1477         $test -d /usr/apollo/bin && osname=apollo
1478         $test -f /etc/saf/_sactab && osname=svr4
1479         $test -d /usr/include/minix && osname=minix
1480         if $test -f $uname; then
1481                 set X $myuname
1482                 shift
1483
1484                 case "$5" in
1485                 fps*) osname=fps ;;
1486                 mips*)
1487                         case "$4" in
1488                         umips) osname=umips ;;
1489                         *) osname=mips ;;
1490                         esac;;
1491                 [23]100) osname=mips ;;
1492                 next*) osname=next ;;
1493                 news*) osname=news ;;
1494                 i386*)
1495                         if $test -f /etc/kconfig; then
1496                                 osname=isc
1497                                 if test "$lns" = "ln -s"; then
1498                                         osvers=4
1499                                 elif $contains _SYSV3 /usr/include/stdio.h > /dev/null 2>&1 ; then
1500                                         osvers=3
1501                                 elif $contains _POSIX_SOURCE /usr/include/stdio.h > /dev/null 2>&1 ; then
1502                                         osvers=2
1503                                 fi
1504                         fi
1505                         ;;
1506                 esac
1507
1508                 case "$1" in
1509                 aix) osname=aix
1510                         tmp=`( (oslevel) 2>/dev/null || echo "not found") 2>&1`
1511                         case "$tmp" in
1512                         'not found') osvers="$4"."$3" ;;
1513                         '<3240'|'<>3240') osvers=3.2.0 ;;
1514                         '=3240'|'>3240'|'<3250'|'<>3250') osvers=3.2.4 ;;
1515                         '=3250'|'>3250') osvers=3.2.5 ;;
1516                         *) osvers=$tmp;;
1517                         esac
1518                         ;;
1519                 dnix) osname=dnix
1520                         osvers="$3"
1521                         ;;
1522                 domainos) osname=apollo
1523                         osvers="$3"
1524                         ;;
1525                 dgux) osname=dgux 
1526                         osvers="$3"
1527                         ;;
1528                 freebsd) osname=freebsd 
1529                         osvers="$3" ;;
1530                 genix) osname=genix ;;
1531                 hp*) osname=hpux 
1532                         case "$3" in
1533                         *.08.*) osvers=9 ;;
1534                         *.09.*) osvers=9 ;;
1535                         *.10.*) osvers=10 ;;
1536                         *)      osvers="$3" ;;
1537                         esac
1538                         ;;
1539                 irix) osname=irix
1540                         case "$3" in
1541                         4*) osvers=4 ;;
1542                         5*) osvers=5 ;;
1543                         *)      osvers="$3" ;;
1544                         esac
1545                         ;;
1546                 linux) osname=linux
1547                         case "$3" in
1548                         1*) osvers=1 ;;
1549                         *)      osvers="$3" ;;
1550                         esac
1551                         ;;
1552                 netbsd*) osname=netbsd 
1553                         osvers="$3"
1554                         ;;
1555                 bsd386) osname=bsd386
1556                         osvers=`$uname -r`
1557                         ;;
1558                 next*) osname=next ;;
1559                 solaris) osname=solaris
1560                         case "$3" in
1561                         5*) osvers=`echo $3 | $sed 's/^5/2/g'` ;;
1562                         *)      osvers="$3" ;;
1563                         esac
1564                         ;;
1565                 sunos) osname=sunos
1566                         case "$3" in
1567                         5*) osname=solaris
1568                                 osvers=`echo $3 | $sed 's/^5/2/g'` ;;
1569                         *)      osvers="$3" ;;
1570                         esac
1571                         ;;
1572                 titanos) osname=titanos
1573                         case "$3" in
1574                         1*) osvers=1 ;;
1575                         2*) osvers=2 ;;
1576                         3*) osvers=3 ;;
1577                         4*) osvers=4 ;;
1578                         *)      osvers="$3" ;;
1579                         esac
1580                         ;;
1581                 ultrix) osname=ultrix
1582                         osvers="$3"
1583                         ;;
1584                 osf1)   case "$5" in
1585                                 alpha)
1586                                         osname=dec_osf
1587                                         osvers=`echo "$3" | sed 's/^[vt]//'`
1588                                         ;;
1589                         hp*)    osname=hp_osf1  ;;
1590                         mips)   osname=mips_osf1 ;;
1591                         esac
1592                         ;;
1593                 uts) osname=uts 
1594                         osvers="$3"
1595                         ;;
1596                 $2) case "$osname" in
1597                         *isc*) ;;
1598                         *freebsd*) ;;
1599                         svr*)
1600                                 : svr4.x or possibly later
1601                                 case "svr$3" in 
1602                                 ${osname}*)
1603                                         osname=svr$3
1604                                         osvers=$4
1605                                         ;;
1606                                 esac
1607                                 case "$osname" in
1608                                 svr4.0)
1609                                         : Check for ESIX
1610                                         if test -f /stand/boot ; then
1611                                                 eval `grep '^INITPROG=[a-z/0-9]*$' /stand/boot`
1612                                                 if test -n "$INITPROG" -a -f "$INITPROG"; then
1613                         isesix=`strings -a $INITPROG|grep 'ESIX SYSTEM V/386 Release 4.0'`
1614                                                         if test -n "$isesix"; then
1615                                                                 osname=esix4
1616                                                         fi
1617                                                 fi
1618                                         fi
1619                                         ;;
1620                                 esac
1621                                 ;;
1622                         *)      if test -f /etc/systemid; then
1623                                         osname=sco
1624                                         set `echo $3 | $sed 's/\./ /g'` $4
1625                                         if $test -f sco_$1_$2_$3.sh; then
1626                                                 osvers=$1.$2.$3
1627                                         elif $test -f sco_$1_$2.sh; then
1628                                                 osvers=$1.$2
1629                                         elif $test -f sco_$1.sh; then
1630                                                 osvers=$1
1631                                         fi
1632                                 else
1633                                         case "$osname" in
1634                                         '') : Still unknown.  Probably a generic Sys V.
1635                                                 osname="sysv"
1636                                                 osvers="$3"
1637                                                 ;;
1638                                         esac
1639                                 fi
1640                                 ;;
1641                         esac
1642                         ;;
1643                 *)      case "$osname" in
1644                         '') : Still unknown.  Probably a generic BSD.
1645                                 osname="$1"
1646                                 osvers="$3"
1647                                 ;;
1648                         esac
1649                         ;;
1650                 esac
1651         else
1652                 if test -f /vmunix -a -f news_os.sh; then
1653                         (what /vmunix | ../UU/tr '[A-Z]' '[a-z]') > ../UU/kernel.what 2>&1
1654                         if $contains news-os ../UU/kernel.what >/dev/null 2>&1; then
1655                                 osname=news_os
1656                         fi
1657                         $rm -f ../UU/kernel.what
1658                 fi
1659         fi
1660         
1661         : Now look for a hint file osname_osvers, unless one has been
1662         : specified already.
1663         case "$hintfile" in
1664         ''|' ')
1665                 file=`echo "${osname}_${osvers}" | $sed -e 's@\.@_@g' -e 's@_$@@'`
1666                 : Also try without trailing minor version numbers.
1667                 xfile=`echo $file | $sed -e 's@_[^_]*$@@'`
1668                 xxfile=`echo $xfile | $sed -e 's@_[^_]*$@@'`
1669                 xxxfile=`echo $xxfile | $sed -e 's@_[^_]*$@@'`
1670                 xxxxfile=`echo $xxxfile | $sed -e 's@_[^_]*$@@'`
1671                 case "$file" in
1672                 '') dflt=none ;;
1673                 *)  case "$osvers" in
1674                         '') dflt=$file
1675                                 ;;
1676                         *)  if $test -f $file.sh ; then
1677                                         dflt=$file
1678                                 elif $test -f $xfile.sh ; then
1679                                         dflt=$xfile
1680                                 elif $test -f $xxfile.sh ; then
1681                                         dflt=$xxfile
1682                                 elif $test -f $xxxfile.sh ; then
1683                                         dflt=$xxxfile
1684                                 elif $test -f $xxxxfile.sh ; then
1685                                         dflt=$xxxxfile
1686                                 elif $test -f "${osname}.sh" ; then
1687                                         dflt="${osname}"
1688                                 else
1689                                         dflt=none
1690                                 fi
1691                                 ;;
1692                         esac
1693                         ;;
1694                 esac
1695                 ;;
1696         *)
1697                 dflt=`echo $hintfile | $sed 's/\.sh$//'`
1698                 ;;
1699         esac
1700
1701         $cat <<EOM
1702
1703 You may give one or more space-separated answers, or "none" if appropriate.
1704 If your OS version has no hints, DO NOT give a wrong version -- say "none".
1705
1706 EOM
1707         rp="Which of these apply, if any?"
1708         . ../UU/myread
1709         tans=$ans
1710         for file in $tans; do
1711                 if $test -f $file.sh; then
1712                         . ./$file.sh
1713                         $cat $file.sh >> ../UU/config.sh
1714                 elif $test X$tans = X -o X$tans = Xnone ; then
1715                         : nothing
1716                 else
1717                         : Give one chance to correct a possible typo.
1718                         echo "$file.sh does not exist"
1719                         dflt=$file
1720                         rp="hint to use instead?"
1721                         . ../UU/myread
1722                         for file in $ans; do
1723                                 if $test -f "$file.sh"; then
1724                                         . ./$file.sh
1725                                         $cat $file.sh >> ../UU/config.sh
1726                                 elif $test X$ans = X -o X$ans = Xnone ; then
1727                                         : nothing
1728                                 else
1729                                         echo "$file.sh does not exist -- ignored."
1730                                 fi
1731                         done
1732                 fi
1733         done
1734
1735         hint=recommended
1736         : Remember our hint file for later.
1737         if $test -f "$file.sh" ; then
1738                 hintfile="$file"
1739         else
1740                 hintfile=''
1741         fi
1742
1743         cd ..
1744 fi
1745 cd UU
1746 ;;
1747 *)
1748         echo " "
1749         echo "Fetching default answers from $config_sh..." >&4
1750         tmp_n="$n"
1751         tmp_c="$c"
1752         cd ..
1753         cp $config_sh config.sh 2>/dev/null
1754         . ./config.sh
1755         cd UU
1756         cp ../config.sh .
1757         n="$tmp_n"
1758         c="$tmp_c"
1759         hint=previous
1760         ;;
1761 esac
1762 test "$override" && . ./optdef.sh
1763 myuname="$newmyuname"
1764
1765 : Restore computed paths
1766 for file in $loclist $trylist; do
1767         eval $file="\$_$file"
1768 done
1769
1770 cat << EOM
1771
1772 Configure uses the operating system name and version to set some defaults.
1773 The default value is probably right if the name rings a bell. Otherwise,
1774 since spelling matters for me, either accept the default or answer "none"
1775 to leave it blank.
1776
1777 EOM
1778 case "$osname" in
1779         ''|' ')
1780                 case "$hintfile" in
1781                 ''|' '|none) dflt=none ;;
1782                 *)  dflt=`echo $hintfile | $sed -e 's/\.sh$//' -e 's/_.*$//'` ;;
1783                 esac
1784                 ;;
1785         *) dflt="$osname" ;;
1786 esac
1787 rp="Operating system name?"
1788 . ./myread
1789 case "$ans" in
1790 none)  osname='' ;;
1791 *) osname=`echo "$ans" | $sed -e 's/[   ][      ]*/_/g' | ./tr '[A-Z]' '[a-z]'`;;
1792 esac
1793 : who configured the system
1794 cf_time=`$date 2>&1`
1795 (logname > .temp) >/dev/null 2>&1
1796 $test -s .temp || (whoami > .temp) >/dev/null 2>&1
1797 $test -s .temp || echo unknown > .temp
1798 cf_by=`$cat .temp`
1799 $rm -f .temp
1800
1801 : determine where manual pages are on this system
1802 echo " "
1803 case "$sysman" in
1804 '') 
1805         syspath='/usr/man/man1 /usr/man/mann /usr/man/manl /usr/man/local/man1'
1806         syspath="$syspath /usr/man/u_man/man1 /usr/share/man/man1"
1807         syspath="$syspath /usr/catman/u_man/man1 /usr/man/l_man/man1"
1808         syspath="$syspath /usr/local/man/u_man/man1 /usr/local/man/l_man/man1"
1809         syspath="$syspath /usr/man/man.L /local/man/man1 /usr/local/man/man1"
1810         sysman=`./loc . /usr/man/man1 $syspath`
1811         ;;
1812 esac
1813 if $test -d "$sysman"; then
1814         echo "System manual is in $sysman." >&4
1815 else
1816         echo "Could not find manual pages in source form." >&4
1817 fi
1818
1819 : see what memory models we can support
1820 case "$models" in
1821 '')
1822         $cat >pdp11.c <<'EOP'
1823 main() {
1824 #ifdef pdp11
1825         exit(0);
1826 #else
1827         exit(1);
1828 #endif
1829 }
1830 EOP
1831         cc -o pdp11 pdp11.c >/dev/null 2>&1
1832         if ./pdp11 2>/dev/null; then
1833                 dflt='unsplit split'
1834         else
1835                 tans=`./loc . X /lib/small /lib/large /usr/lib/small /usr/lib/large /lib/medium /usr/lib/medium /lib/huge`
1836                 case "$tans" in
1837                 X) dflt='none';;
1838                 *) if $test -d /lib/small || $test -d /usr/lib/small; then
1839                                 dflt='small'
1840                         else
1841                                 dflt=''
1842                         fi
1843                         if $test -d /lib/medium || $test -d /usr/lib/medium; then
1844                                 dflt="$dflt medium"
1845                         fi
1846                         if $test -d /lib/large || $test -d /usr/lib/large; then
1847                                 dflt="$dflt large"
1848                         fi
1849                         if $test -d /lib/huge || $test -d /usr/lib/huge; then
1850                                 dflt="$dflt huge"
1851                         fi
1852                 esac
1853         fi;;
1854 *) dflt="$models";;
1855 esac
1856 $cat <<EOM
1857  
1858 Some systems have different model sizes.  On most systems they are called
1859 small, medium, large, and huge.  On the PDP11 they are called unsplit and
1860 split.  If your system doesn't support different memory models, say "none".
1861 If you wish to force everything to one memory model, say "none" here and
1862 put the appropriate flags later when it asks you for other cc and ld flags.
1863 Venix systems may wish to put "none" and let the compiler figure things out.
1864 (In the following question multiple model names should be space separated.)
1865
1866 EOM
1867 rp="Which memory models are supported?"
1868 . ./myread
1869 models="$ans"
1870
1871 case "$models" in
1872 none)
1873         small=''
1874         medium=''
1875         large=''
1876         huge=''
1877         unsplit=''
1878         split=''
1879         ;;
1880 *split)
1881         case "$split" in
1882         '') if $contains '\-i' $sysman/ld.1 >/dev/null 2>&1 || \
1883                          $contains '\-i' $sysman/cc.1 >/dev/null 2>&1; then
1884                         dflt='-i'
1885                 else
1886                         dflt='none'
1887                 fi;;
1888         *) dflt="$split";;
1889         esac
1890         rp="What flag indicates separate I and D space?"
1891         . ./myread
1892         tans="$ans"
1893         case "$tans" in
1894         none) tans='';;
1895         esac
1896         split="$tans"
1897         unsplit='';;
1898 *large*|*small*|*medium*|*huge*)
1899         case "$models" in
1900         *large*)
1901                 case "$large" in
1902                 '') dflt='-Ml';;
1903                 *) dflt="$large";;
1904                 esac
1905         rp="What flag indicates large model?"
1906         . ./myread
1907         tans="$ans"
1908         case "$tans" in
1909         none) tans='';
1910         esac
1911         large="$tans";;
1912         *) large='';;
1913         esac
1914         case "$models" in
1915         *huge*) case "$huge" in
1916                 '') dflt='-Mh';;
1917                 *) dflt="$huge";;
1918                 esac
1919                 rp="What flag indicates huge model?"
1920                 . ./myread
1921                 tans="$ans"
1922                 case "$tans" in
1923                 none) tans='';
1924                 esac
1925                 huge="$tans";;
1926         *) huge="$large";;
1927         esac
1928         case "$models" in
1929         *medium*) case "$medium" in
1930                 '') dflt='-Mm';;
1931                 *) dflt="$medium";;
1932                 esac
1933                 rp="What flag indicates medium model?"
1934                 . ./myread
1935                 tans="$ans"
1936                 case "$tans" in
1937                 none) tans='';
1938                 esac
1939                 medium="$tans";;
1940         *) medium="$large";;
1941         esac
1942         case "$models" in
1943         *small*) case "$small" in
1944                 '') dflt='none';;
1945                 *) dflt="$small";;
1946                 esac
1947                 rp="What flag indicates small model?"
1948                 . ./myread
1949                 tans="$ans"
1950                 case "$tans" in
1951                 none) tans='';
1952                 esac
1953                 small="$tans";;
1954         *) small='';;
1955         esac
1956         ;;
1957 *)
1958         echo "Unrecognized memory models--you may have to edit Makefile.SH" >&4
1959         ;;
1960 esac
1961
1962 : make some quick guesses about what we are up against
1963 echo " "
1964 $echo $n "Hmm...  $c"
1965 echo exit 1 >bsd
1966 echo exit 1 >usg
1967 echo exit 1 >v7
1968 echo exit 1 >osf1
1969 echo exit 1 >eunice
1970 echo exit 1 >xenix
1971 echo exit 1 >venix
1972 d_bsd="$undef"
1973 $cat /usr/include/signal.h /usr/include/sys/signal.h >foo 2>/dev/null
1974 if test -f /osf_boot || $contains 'OSF/1' /usr/include/ctype.h >/dev/null 2>&1
1975 then
1976         echo "Looks kind of like an OSF/1 system, but we'll see..."
1977         echo exit 0 >osf1
1978 elif test `echo abc | tr a-z A-Z` = Abc ; then
1979         xxx=`./loc addbib blurfl $pth`
1980         if $test -f $xxx; then
1981         echo "Looks kind of like a USG system with BSD features, but we'll see..."
1982                 echo exit 0 >bsd
1983                 echo exit 0 >usg
1984         else
1985                 if $contains SIGTSTP foo >/dev/null 2>&1 ; then
1986                         echo "Looks kind of like an extended USG system, but we'll see..."
1987                 else
1988                         echo "Looks kind of like a USG system, but we'll see..."
1989                 fi
1990                 echo exit 0 >usg
1991         fi
1992 elif $contains SIGTSTP foo >/dev/null 2>&1 ; then
1993         echo "Looks kind of like a BSD system, but we'll see..."
1994         d_bsd="$define"
1995         echo exit 0 >bsd
1996 else
1997         echo "Looks kind of like a Version 7 system, but we'll see..."
1998         echo exit 0 >v7
1999 fi
2000 case "$eunicefix" in
2001 *unixtovms*)
2002         $cat <<'EOI'
2003 There is, however, a strange, musty smell in the air that reminds me of
2004 something...hmm...yes...I've got it...there's a VMS nearby, or I'm a Blit.
2005 EOI
2006         echo exit 0 >eunice
2007         d_eunice="$define"
2008 : it so happens the Eunice I know will not run shell scripts in Unix format
2009         ;;
2010 *)
2011         echo " "
2012         echo "Congratulations.  You aren't running Eunice."
2013         d_eunice="$undef"
2014         ;;
2015 esac
2016 if test -f /xenix; then
2017         echo "Actually, this looks more like a XENIX system..."
2018         echo exit 0 >xenix
2019         d_xenix="$define"
2020 else
2021         echo " "
2022         echo "It's not Xenix..."
2023         d_xenix="$undef"
2024 fi
2025 chmod +x xenix
2026 $eunicefix xenix
2027 if test -f /venix; then
2028         echo "Actually, this looks more like a VENIX system..."
2029         echo exit 0 >venix
2030 else
2031         echo " "
2032         if ./xenix; then
2033                 : null
2034         else
2035                 echo "Nor is it Venix..."
2036         fi
2037 fi
2038 chmod +x bsd usg v7 osf1 eunice xenix venix
2039 $eunicefix bsd usg v7 osf1 eunice xenix venix
2040 $rm -f foo
2041
2042 : see if we need a special compiler
2043 echo " "
2044 if ./usg; then
2045         case "$cc" in
2046         '') case "$Mcc" in
2047                 /*) dflt='Mcc';;
2048                 *) case "$large" in
2049                         -M*) dflt='cc';;
2050                         *)      if $contains '\-M' $sysman/cc.1 >/dev/null 2>&1 ; then
2051                                         if $contains '\-M' $sysman/cpp.1 >/dev/null 2>&1; then
2052                                                 dflt='cc'
2053                                         else
2054                                                 dflt='cc -M'
2055                                         fi
2056                                 else
2057                                         dflt='cc'
2058                                 fi;;
2059                         esac;;
2060                 esac;;
2061         *)  dflt="$cc";;
2062         esac
2063         $cat <<'EOM'
2064 On some systems the default C compiler will not resolve multiple global
2065 references that happen to have the same name.  On some such systems the "Mcc"
2066 command may be used to force these to be resolved.  On other systems a "cc -M"
2067 command is required.  (Note that the -M flag on other systems indicates a
2068 memory model to use!) If you have the Gnu C compiler, you might wish to use
2069 that instead.
2070
2071 EOM
2072         rp="What command will force resolution on this system?"
2073         . ./myread
2074         cc="$ans"
2075 else
2076         case "$cc" in
2077         '') dflt=cc;;
2078         *) dflt="$cc";;
2079         esac
2080         rp="Use which C compiler?"
2081         . ./myread
2082         cc="$ans"
2083 fi
2084 echo " "
2085 echo "Checking for GNU cc in disguise and/or its version number..." >&4
2086 $cat >gccvers.c <<EOM
2087 #include <stdio.h>
2088 int main() {
2089 #ifdef __GNUC__
2090 #ifdef __VERSION__
2091         printf("%s\n", __VERSION__);
2092 #else
2093         printf("%s\n", "1");
2094 #endif
2095 #endif
2096         exit(0);
2097 }
2098 EOM
2099 if $cc -o gccvers gccvers.c >/dev/null 2>&1; then
2100         gccversion=`./gccvers`
2101         case "$gccversion" in
2102         '') echo "You are not using GNU cc." ;;
2103         *)  echo "You are using GNU cc $gccversion." ;;
2104         esac
2105 else
2106         echo "I can't compile the test program -- Assuming it isn't GNU cc."
2107 fi
2108 $rm -f gccvers*
2109 case "$gccversion" in
2110 1*) cpp=`./loc gcc-cpp $cpp $pth` ;;
2111 esac
2112
2113 : decide how portable to be
2114 case "$d_portable" in
2115 "$define") dflt=y;;
2116 *)      dflt=n;;
2117 esac
2118 $cat <<'EOH'
2119  
2120 I can set things up so that your shell scripts and binaries are more portable,
2121 at what may be a noticable cost in performance.  In particular, if you
2122 ask to be portable, the following happens:
2123
2124      1) Shell scripts will rely on the PATH variable rather than using
2125         the paths derived above.
2126      2) ~username interpretations will be done at run time rather than
2127         by Configure.
2128
2129 EOH
2130 rp="Do you expect to run these scripts and binaries on multiple machines?"
2131 . ./myread
2132 case "$ans" in
2133         y*) d_portable="$define"
2134         ;;
2135         *)  d_portable="$undef" ;;
2136 esac
2137
2138 : set up shell script to do ~ expansion
2139 cat >filexp <<EOSS
2140 $startsh
2141 : expand filename
2142 case "\$1" in
2143  ~/*|~)
2144         echo \$1 | $sed "s|~|\${HOME-\$LOGDIR}|"
2145         ;;
2146  ~*)
2147         if $test -f /bin/csh; then
2148                 /bin/csh -f -c "glob \$1"
2149                 failed=\$?
2150                 echo ""
2151                 exit \$failed
2152         else
2153                 name=\`$expr x\$1 : '..\([^/]*\)'\`
2154                 dir=\`$sed -n -e "/^\${name}:/{s/^[^:]*:[^:]*:[^:]*:[^:]*:[^:]*:\([^:]*\).*"'\$'"/\1/" -e p -e q -e '}' </etc/passwd\`
2155                 if $test ! -d "\$dir"; then
2156                         me=\`basename \$0\`
2157                         echo "\$me: can't locate home directory for: \$name" >&2
2158                         exit 1
2159                 fi
2160                 case "\$1" in
2161                 */*)
2162                         echo \$dir/\`$expr x\$1 : '..[^/]*/\(.*\)'\`
2163                         ;;
2164                 *)
2165                         echo \$dir
2166                         ;;
2167                 esac
2168         fi
2169         ;;
2170 *)
2171         echo \$1
2172         ;;
2173 esac
2174 EOSS
2175 chmod +x filexp
2176 $eunicefix filexp
2177
2178 : now set up to get a file name
2179 cat <<'EOSC' >getfile
2180 tilde=''
2181 fullpath=''
2182 already=''
2183 skip=''
2184 none_ok=''
2185 exp_file=''
2186 nopath_ok=''
2187 orig_rp="$rp"
2188 orig_dflt="$dflt"
2189
2190 case "$fn" in
2191 *\(*)
2192         expr $fn : '.*(\(.*\)).*' | tr ',' '\012' >getfile.ok
2193         fn=`echo $fn | sed 's/(.*)//'`
2194         ;;
2195 esac
2196
2197 case "$fn" in
2198 *:*)
2199         loc_file=`expr $fn : '.*:\(.*\)'`
2200         fn=`expr $fn : '\(.*\):.*'`
2201         ;;
2202 esac
2203
2204 case "$fn" in
2205 *~*) tilde=true;;
2206 esac
2207 case "$fn" in
2208 */*) fullpath=true;;
2209 esac
2210 case "$fn" in
2211 *+*) skip=true;;
2212 esac
2213 case "$fn" in
2214 *n*) none_ok=true;;
2215 esac
2216 case "$fn" in
2217 *e*) exp_file=true;;
2218 esac
2219 case "$fn" in
2220 *p*) nopath_ok=true;;
2221 esac
2222
2223 case "$fn" in
2224 *f*) type='File';;
2225 *d*) type='Directory';;
2226 *l*) type='Locate';;
2227 esac
2228
2229 what="$type"
2230 case "$what" in
2231 Locate) what='File';;
2232 esac
2233
2234 case "$exp_file" in
2235 '')
2236         case "$d_portable" in
2237         "$define") ;;
2238         *) exp_file=true;;
2239         esac
2240         ;;
2241 esac
2242
2243 cd ..
2244 while test "$type"; do
2245         redo=''
2246         rp="$orig_rp"
2247         dflt="$orig_dflt"
2248         case "$tilde" in
2249         true) rp="$rp (~name ok)";;
2250         esac
2251         . UU/myread
2252         if test -f UU/getfile.ok && \
2253                 $contains "^$ans\$" UU/getfile.ok >/dev/null 2>&1
2254         then
2255                 value="$ans"
2256                 ansexp="$ans"
2257                 break
2258         fi
2259         case "$ans" in
2260         none)
2261                 value=''
2262                 ansexp=''
2263                 case "$none_ok" in
2264                 true) type='';;
2265                 esac
2266                 ;;
2267         *)
2268                 case "$tilde" in
2269                 '') value="$ans"
2270                         ansexp="$ans";;
2271                 *)
2272                         value=`UU/filexp $ans`
2273                         case $? in
2274                         0)
2275                                 if test "$ans" != "$value"; then
2276                                         echo "(That expands to $value on this system.)"
2277                                 fi
2278                                 ;;
2279                         *) value="$ans";;
2280                         esac
2281                         ansexp="$value"
2282                         case "$exp_file" in
2283                         '') value="$ans";;
2284                         esac
2285                         ;;
2286                 esac
2287                 case "$fullpath" in
2288                 true)
2289                         case "$ansexp" in
2290                         /*) value="$ansexp" ;;
2291                         *)
2292                                 redo=true
2293                                 case "$already" in
2294                                 true)
2295                                 echo "I shall only accept a full path name, as in /bin/ls." >&4
2296                                 echo "Use a ! shell escape if you wish to check pathnames." >&4
2297                                         ;;
2298                                 *)
2299                                 echo "Please give a full path name, starting with slash." >&4
2300                                         case "$tilde" in
2301                                         true)
2302                                 echo "Note that using ~name is ok provided it expands well." >&4
2303                                                 already=true
2304                                                 ;;
2305                                         esac
2306                                 esac
2307                                 ;;
2308                         esac
2309                         ;;
2310                 esac
2311                 case "$redo" in
2312                 '')
2313                         case "$type" in
2314                         File)
2315                                 if test -f "$ansexp"; then
2316                                         type=''
2317                                 elif test -r "$ansexp" || (test -h "$ansexp") >/dev/null 2>&1
2318                                 then
2319                                         echo "($value is not a plain file, but that's ok.)"
2320                                         type=''
2321                                 fi
2322                                 ;;
2323                         Directory)
2324                                 if test -d "$ansexp"; then
2325                                         type=''
2326                                 fi
2327                                 ;;
2328                         Locate)
2329                                 if test -d "$value"; then
2330                                         echo "(Looking for $loc_file in directory $value.)"
2331                                         value="$value/$loc_file"
2332                                 fi
2333                                 if test -f "$value"; then
2334                                         type=''
2335                                 fi
2336                                 case "$nopath_ok" in
2337                                 true)   case "$value" in
2338                                         */*) ;;
2339                                         *)      echo "Assuming $value will be in people's path."
2340                                                 type=''
2341                                                 ;;
2342                                         esac
2343                                         ;;
2344                                 esac
2345                                 ;;
2346                         esac
2347
2348                         case "$skip" in
2349                         true) type='';
2350                         esac
2351
2352                         case "$type" in
2353                         '') ;;
2354                         *)
2355                                 if test "$fastread" = yes; then
2356                                         dflt=y
2357                                 else
2358                                         dflt=n
2359                                 fi
2360                                 rp="$what $value doesn't exist.  Use that name anyway?"
2361                                 . UU/myread
2362                                 dflt=''
2363                                 case "$ans" in
2364                                 y*) type='';;
2365                                 *) echo " ";;
2366                                 esac
2367                                 ;;
2368                         esac
2369                         ;;
2370                 esac
2371                 ;;
2372         esac
2373 done
2374 cd UU
2375 ans="$value"
2376 rp="$orig_rp"
2377 dflt="$orig_dflt"
2378 rm -f getfile.ok
2379 EOSC
2380
2381 : What should the include directory be ?
2382 echo " "
2383 $echo $n "Hmm...  $c"
2384 dflt='/usr/include'
2385 incpath=''
2386 mips_type=''
2387 if $test -f /bin/mips && /bin/mips; then
2388         echo "Looks like a MIPS system..."
2389         $cat >usr.c <<'EOCP'
2390 #ifdef SYSTYPE_BSD43
2391 /bsd43
2392 #endif
2393 EOCP
2394         if $cc -E usr.c > usr.out && $contains / usr.out >/dev/null 2>&1; then
2395                 dflt='/bsd43/usr/include'
2396                 incpath='/bsd43'
2397                 mips_type='BSD 4.3'
2398         else
2399                 mips_type='System V'
2400         fi
2401         $rm -f usr.c usr.out
2402         echo "and you're compiling with the $mips_type compiler and libraries."
2403 else
2404         echo "Doesn't look like a MIPS system."
2405         echo "exit 1" >mips
2406         chmod +x mips
2407         $eunicefix mips
2408 fi
2409 echo " "
2410 case "$usrinc" in
2411 '') ;;
2412 *) dflt="$usrinc";;
2413 esac
2414 fn=d/
2415 rp='Where are the include files you want to use?'
2416 . ./getfile
2417 usrinc="$ans"
2418
2419 : see how we invoke the C preprocessor
2420 echo " "
2421 echo "Now, how can we feed standard input to your C preprocessor..." >&4
2422 cat <<'EOT' >testcpp.c
2423 #define ABC abc
2424 #define XYZ xyz
2425 ABC.XYZ
2426 EOT
2427 cd ..
2428 echo 'cat >.$$.c; '"$cc"' -E ${1+"$@"} .$$.c; rm .$$.c' >cppstdin
2429 chmod 755 cppstdin
2430 wrapper=`pwd`/cppstdin
2431 ok='false'
2432 cd UU
2433
2434 if $test "X$cppstdin" != "X" && \
2435         $cppstdin $cppminus <testcpp.c >testcpp.out 2>&1 && \
2436         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1
2437 then
2438         echo "You used to use $cppstdin $cppminus so we'll use that again."
2439         case "$cpprun" in
2440         '') echo "But let's see if we can live without a wrapper..." ;;
2441         *)
2442                 if $cpprun $cpplast <testcpp.c >testcpp.out 2>&1 && \
2443                         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1
2444                 then
2445                         echo "(And we'll use $cpprun $cpplast to preprocess directly.)"
2446                         ok='true'
2447                 else
2448                         echo "(However, $cpprun $cpplast does not work, let's see...)"
2449                 fi
2450                 ;;
2451         esac
2452 else
2453         case "$cppstdin" in
2454         '') ;;
2455         *)
2456                 echo "Good old $cppstdin $cppminus does not seem to be of any help..."
2457                 ;;
2458         esac
2459 fi
2460
2461 if $ok; then
2462         : nothing
2463 elif echo 'Maybe "'"$cc"' -E" will work...'; \
2464         $cc -E <testcpp.c >testcpp.out 2>&1; \
2465         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
2466         echo "Yup, it does."
2467         x_cpp="$cc -E"
2468         x_minus='';
2469 elif echo 'Nope...maybe "'"$cc"' -E -" will work...'; \
2470         $cc -E - <testcpp.c >testcpp.out 2>&1; \
2471         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
2472         echo "Yup, it does."
2473         x_cpp="$cc -E"
2474         x_minus='-';
2475 elif echo 'Nope...maybe "'"$cc"' -P" will work...'; \
2476         $cc -P <testcpp.c >testcpp.out 2>&1; \
2477         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
2478         echo "Yipee, that works!"
2479         x_cpp="$cc -P"
2480         x_minus='';
2481 elif echo 'Nope...maybe "'"$cc"' -P -" will work...'; \
2482         $cc -P - <testcpp.c >testcpp.out 2>&1; \
2483         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
2484         echo "At long last!"
2485         x_cpp="$cc -P"
2486         x_minus='-';
2487 elif echo 'No such luck, maybe "'$cpp'" will work...'; \
2488         $cpp <testcpp.c >testcpp.out 2>&1; \
2489         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
2490         echo "It works!"
2491         x_cpp="$cpp"
2492         x_minus='';
2493 elif echo 'Nixed again...maybe "'$cpp' -" will work...'; \
2494         $cpp - <testcpp.c >testcpp.out 2>&1; \
2495         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
2496         echo "Hooray, it works!  I was beginning to wonder."
2497         x_cpp="$cpp"
2498         x_minus='-';
2499 elif echo 'Uh-uh.  Time to get fancy.  Trying a wrapper...'; \
2500         $wrapper <testcpp.c >testcpp.out 2>&1; \
2501         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
2502         x_cpp="$wrapper"
2503         x_minus=''
2504         echo "Eureka!"
2505 else
2506         dflt=''
2507         rp="No dice.  I can't find a C preprocessor.  Name one:"
2508         . ./myread
2509         x_cpp="$ans"
2510         x_minus=''
2511         $x_cpp <testcpp.c >testcpp.out 2>&1
2512         if $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
2513                 echo "OK, that will do." >&4
2514         else
2515 echo "Sorry, I can't get that to work.  Go find one and rerun Configure." >&4
2516                 exit 1
2517         fi
2518 fi
2519
2520 case "$ok" in
2521 false)
2522         cppstdin="$x_cpp"
2523         cppminus="$x_minus"
2524         cpprun="$x_cpp"
2525         cpplast="$x_minus"
2526         set X $x_cpp
2527         shift
2528         case "$1" in
2529         "$cpp")
2530                 echo "Perhaps can we force $cc -E using a wrapper..."
2531                 if $wrapper <testcpp.c >testcpp.out 2>&1; \
2532                         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1
2533                 then
2534                         echo "Yup, we can."
2535                         cppstdin="$wrapper"
2536                         cppminus='';
2537                 else
2538                         echo "Nope, we'll have to live without it..."
2539                 fi
2540                 ;;
2541         esac
2542         case "$cpprun" in
2543         "$wrapper")
2544                 cpprun=''
2545                 cpplast=''
2546                 ;;
2547         esac
2548         ;;
2549 esac
2550
2551 case "$cppstdin" in
2552 "$wrapper") ;;
2553 *) $rm -f $wrapper;;
2554 esac
2555 $rm -f testcpp.c testcpp.out
2556
2557 : determine optimize, if desired, or use for debug flag also
2558 case "$optimize" in
2559 ' ') dflt='none';;
2560 '') dflt='-O';;
2561 *) dflt="$optimize";;
2562 esac
2563 $cat <<EOH
2564
2565 Some C compilers have problems with their optimizers, by default, $package
2566 compiles with the -O flag to use the optimizer.  Alternately, you might want
2567 to use the symbolic debugger, which uses the -g flag (on traditional Unix
2568 systems).  Either flag can be specified here.  To use neither flag, specify
2569 the word "none".
2570
2571 EOH
2572 rp="What optimizer/debugger flag should be used?"
2573 . ./myread
2574 optimize="$ans"
2575 case "$optimize" in
2576 'none') optimize=" ";;
2577 esac
2578
2579 dflt=''
2580 case "$ccflags" in
2581 '')     
2582         case "$gccversion" in
2583         1*) dflt='-fpcc-struct-return' ;;
2584         esac
2585         case "$optimize" in
2586         *-g*) dflt="$dflt -DDEBUGGING";;
2587         esac
2588         case "$gccversion" in
2589         2*) if test -d /etc/conf/kconfig.d &&
2590                         $contains _POSIX_VERSION $usrinc/sys/unistd.h >/dev/null 2>&1
2591                 then
2592                         dflt="$dflt -posix"
2593                 fi
2594                 ;;
2595         esac
2596         ;;
2597 esac
2598
2599 case "$mips_type" in
2600 *BSD*) ;;
2601 '') ;;
2602 *) inclwanted="$inclwanted $usrinc/bsd";;
2603 esac
2604 for thisincl in $inclwanted; do
2605         if $test -d $thisincl; then
2606                 if $test x$thisincl != x$usrinc; then
2607                         case "$dflt" in
2608                         *$thisincl*);;
2609                         *) dflt="$dflt -I$thisincl";;
2610                         esac
2611                 fi
2612         fi
2613 done
2614
2615 inctest='if $contains $2 $usrinc/$1 >/dev/null 2>&1; then
2616         xxx=true;
2617 elif $contains $2 $usrinc/sys/$1 >/dev/null 2>&1; then
2618         xxx=true;
2619 else
2620         xxx=false;
2621 fi;
2622 if $xxx; then
2623         case "$dflt" in
2624         *$2*);;
2625         *) dflt="$dflt -D$2";;
2626         esac;
2627 fi'
2628
2629 if ./osf1; then
2630         set signal.h __LANGUAGE_C__; eval $inctest
2631 else
2632         set signal.h LANGUAGE_C; eval $inctest
2633 fi
2634 set signal.h NO_PROTOTYPE; eval $inctest
2635 set signal.h _NO_PROTO; eval $inctest
2636
2637 case "$dflt" in
2638 '') dflt=none;;
2639 esac
2640 case "$ccflags" in
2641 '') ;;
2642 *) dflt="$ccflags";;
2643 esac
2644 $cat <<EOH
2645
2646 Your C compiler may want other flags.  For this question you should include
2647 -I/whatever and -DWHATEVER flags and any other flags used by the C compiler,
2648 but you should NOT include libraries or ld flags like -lwhatever.  If you
2649 want $package to honor its debug switch, you should include -DDEBUGGING here.
2650 Your C compiler might also need additional flags, such as -D_POSIX_SOURCE,
2651 -DHIDEMYMALLOC or -DCRIPPLED_CC.
2652
2653 To use no flags, specify the word "none".
2654
2655 EOH
2656 set X $dflt
2657 shift
2658 dflt=${1+"$@"}
2659 rp="Any additional cc flags?"
2660 . ./myread
2661 case "$ans" in
2662 none) ccflags='';;
2663 *) ccflags="$ans";;
2664 esac
2665
2666 : the following weeds options from ccflags that are of no interest to cpp
2667 cppflags="$ccflags"
2668 case "$gccversion" in
2669 1*) cppflags="$cppflags -D__GNUC__"
2670 esac
2671 case "$mips_type" in
2672 '');;
2673 *BSD*) cppflags="$cppflags -DSYSTYPE_BSD43";;
2674 esac
2675 case "$cppflags" in
2676 '');;
2677 *)
2678         echo " "
2679         echo "Let me guess what the preprocessor flags are..." >&4
2680         set X $cppflags
2681         shift
2682         cppflags=''
2683         $cat >cpp.c <<'EOM'
2684 #define BLURFL foo
2685
2686 BLURFL xx LFRULB
2687 EOM
2688         previous=''
2689         for flag in $*
2690         do
2691                 case "$flag" in
2692                 -*) ftry="$flag";;
2693                 *) ftry="$previous $flag";;
2694                 esac
2695                 if $cppstdin -DLFRULB=bar $ftry $cppminus <cpp.c \
2696                         >cpp1.out 2>/dev/null && \
2697                         $cpprun -DLFRULB=bar $ftry $cpplast <cpp.c \
2698                         >cpp2.out 2>/dev/null && \
2699                         $contains 'foo.*xx.*bar' cpp1.out >/dev/null 2>&1 && \
2700                         $contains 'foo.*xx.*bar' cpp2.out >/dev/null 2>&1
2701                 then
2702                         cppflags="$cppflags $ftry"
2703                         previous=''
2704                 else
2705                         previous="$flag"
2706                 fi
2707         done
2708         set X $cppflags
2709         shift
2710         cppflags=${1+"$@"}
2711         case "$cppflags" in
2712         *-*)  echo "They appear to be: $cppflags";;
2713         esac
2714         $rm -f cpp.c cpp?.out
2715         ;;
2716 esac
2717
2718 : flags used in final linking phase
2719 case "$ldflags" in
2720 '') if ./venix; then
2721                 dflt='-i -z'
2722         else
2723                 dflt=''
2724         fi
2725         case "$ccflags" in
2726         *-posix*) dflt="$dflt -posix" ;;
2727         esac
2728         case "$dflt" in
2729         '') dflt='none' ;;
2730         esac
2731         ;;
2732 *) dflt="$ldflags";;
2733 esac
2734 echo " "
2735 rp="Any additional ld flags (NOT including libraries)?"
2736 . ./myread
2737 case "$ans" in
2738 none) ldflags='';;
2739 *) ldflags="$ans";;
2740 esac
2741 rmlist="$rmlist pdp11"
2742
2743 : Set private lib path
2744 case "$plibpth" in
2745 '') if ./mips; then
2746                 plibpth="$incpath/usr/lib /usr/local/lib /usr/ccs/lib"
2747         fi;;
2748 esac
2749 case "$libpth" in
2750 ' ') dlist='';;
2751 '') dlist="$plibpth $glibpth";;
2752 *) dlist="$libpth";;
2753 esac
2754
2755 : Now check and see which directories actually exist, avoiding duplicates
2756 libpth=''
2757 for xxx in $dlist
2758 do
2759     if $test -d $xxx; then
2760                 case " $libpth " in
2761                 *" $xxx "*) ;;
2762                 *) libpth="$libpth $xxx";;
2763                 esac
2764     fi
2765 done
2766 $cat <<'EOM'
2767
2768 Some systems have incompatible or broken versions of libraries.  Among
2769 the directories listed in the question below, please remove any you
2770 know not to be holding relevant libraries, and add any that are needed.
2771 Say "none" for none.
2772
2773 EOM
2774 case "$libpth" in
2775 '') dflt='none';;
2776 *)
2777         set X $libpth
2778         shift
2779         dflt=${1+"$@"}
2780         ;;
2781 esac
2782 rp="Directories to use for library searches?"
2783 . ./myread
2784 case "$ans" in
2785 none) libpth=' ';;
2786 *) libpth="$ans";;
2787 esac
2788
2789 : compute shared library extension
2790 case "$so" in
2791 '')
2792         if xxx=`./loc libc.sl X $libpth`; $test -f "$xxx"; then
2793                 dflt='sl'
2794         else
2795                 dflt='so'
2796         fi
2797         ;;
2798 *) dflt="$so";;
2799 esac
2800 $cat <<EOM
2801
2802 On some systems, shared libraries may be available.  Answer 'none' if
2803 you want to suppress searching of shared libraries for the remaining
2804 of this configuration.
2805
2806 EOM
2807 rp='What is the file extension used for shared libraries?'
2808 . ./myread
2809 so="$ans"
2810
2811 : Looking for optional libraries
2812 echo " "
2813 echo "Checking for optional libraries..." >&4
2814 case "$libs" in
2815 ' '|'') dflt='';;
2816 *) dflt="$libs";;
2817 esac
2818 case "$libswanted" in
2819 '') libswanted='c_s';;
2820 esac
2821 for thislib in $libswanted; do
2822         
2823         if xxx=`./loc lib$thislib.$so.[0-9]'*' X $libpth`; $test -f "$xxx"; then
2824                 echo "Found -l$thislib (shared)."
2825                 case " $dflt " in
2826                 *"-l$thislib "*);;
2827                 *) dflt="$dflt -l$thislib";;
2828                 esac
2829         elif xxx=`./loc lib$thislib.$so X $libpth` ; $test -f "$xxx"; then
2830                 echo "Found -l$thislib (shared)."
2831                 case " $dflt " in
2832                 *"-l$thislib "*);;
2833                 *) dflt="$dflt -l$thislib";;
2834                 esac
2835         elif xxx=`./loc lib$thislib.a X $libpth`; $test -f "$xxx"; then
2836                 echo "Found -l$thislib."
2837                 case " $dflt " in
2838                 *"-l$thislib "*);;
2839                 *) dflt="$dflt -l$thislib";;
2840                 esac
2841         elif xxx=`./loc lib${thislib}_s.a X $libpth`; $test -f "$xxx"; then
2842                 echo "Found -l${thislib}_s."
2843                 case " $dflt " in
2844                 *"-l$thislib "*);;
2845                 *) dflt="$dflt -l${thislib}_s";;
2846                 esac
2847         elif xxx=`./loc Slib$thislib.a X $xlibpth`; $test -f "$xxx"; then
2848                 echo "Found -l$thislib."
2849                 case " $dflt " in
2850                 *"-l$thislib "*);;
2851                 *) dflt="$dflt -l$thislib";;
2852                 esac
2853         else
2854                 echo "No -l$thislib."
2855         fi
2856 done
2857 set X $dflt
2858 shift
2859 dflt="$*"
2860 case "$libs" in
2861 '') dflt="$dflt";;
2862 *) dflt="$libs";;
2863 esac
2864 case "$dflt" in
2865 ' '|'') dflt='none';;
2866 esac
2867
2868 $cat <<EOM
2869  
2870 Some versions of Unix support shared libraries, which make executables smaller
2871 but make load time slightly longer.
2872
2873 On some systems, mostly newer Unix System V's, the shared library is included
2874 by putting the option "-lc_s" as the last thing on the cc command line when
2875 linking.  Other systems use shared libraries by default.  There may be other
2876 libraries needed to compile $package on your machine as well.  If your system
2877 needs the "-lc_s" option, include it here.  Include any other special libraries
2878 here as well.  Say "none" for none.
2879 EOM
2880
2881 echo " "
2882 rp="Any additional libraries?"
2883 . ./myread
2884 case "$ans" in
2885 none) libs=' ';;
2886 *) libs="$ans";;
2887 esac
2888
2889 : see if nm is to be used to determine whether a symbol is defined or not
2890 case "$usenm" in
2891 '')
2892         dflt=`egrep 'inlibc|csym' ../Configure | wc -l 2>/dev/null`
2893         if $test $dflt -gt 20; then
2894                 dflt=y
2895         else
2896                 dflt=n
2897         fi
2898         ;;
2899 *)
2900         case "$usenm" in
2901         true) dflt=y;;
2902         *) dflt=n;;
2903         esac
2904         ;;
2905 esac
2906 $cat <<EOM
2907
2908 I can use 'nm' to extract the symbols from your C libraries. This is a time
2909 consuming task which may generate huge output on the disk (up to 3 megabytes)
2910 but that should make the symbols extraction faster. The alternative is to skip
2911 the 'nm' extraction part and to compile a small test program instead to
2912 determine whether each symbol is present. If you have a fast C compiler and/or
2913 if your 'nm' output cannot be parsed, this may be the best solution.
2914
2915 EOM
2916 rp='Shall I use nm to extract C symbols from the libraries?'
2917 . ./myread
2918 case "$ans" in
2919 n|N) usenm=false;;
2920 *) usenm=true;;
2921 esac
2922
2923 runnm=$usenm
2924 case "$reuseval" in
2925 true) runnm=false;;
2926 esac
2927
2928 : nm options which may be necessary
2929 case "$nm_opt" in
2930 '') if $test -f /mach_boot; then
2931                 nm_opt=''
2932         elif $test -d /usr/ccs/lib; then
2933                 nm_opt='-p'
2934         elif $test -f /dgux; then
2935                 nm_opt='-p'
2936         else
2937                 nm_opt=''
2938         fi;;
2939 esac
2940
2941 case "$runnm" in
2942 true)
2943 : get list of predefined functions in a handy place
2944 echo " "
2945 case "$libc" in
2946 '') libc=unknown
2947         case "$libs" in
2948         *-lc_s*) libc=`./loc libc_s.a $libc $libpth`
2949         esac
2950         ;;
2951 esac
2952 libnames='';
2953 case "$libs" in
2954 '') ;;
2955 *)  for thislib in $libs; do
2956         case "$thislib" in
2957         -lc|-lc_s)
2958                 : Handle C library specially below.
2959                 ;;
2960         -l*)
2961                 thislib=`echo $thislib | $sed -e 's/^-l//'`
2962                 if try=`./loc lib$thislib.$so.'*' X $libpth`; $test -f "$try"; then
2963                         :
2964                 elif try=`./loc lib$thislib.$so X $libpth`; $test -f "$try"; then
2965                         :
2966                 elif try=`./loc lib$thislib.a X $libpth`; $test -f "$try"; then
2967                         :
2968                 elif try=`./loc lib$thislib X $libpth`; $test -f "$try"; then
2969                         :
2970                 elif try=`./loc $thislib X $libpth`; $test -f "$try"; then
2971                         :
2972                 elif try=`./loc Slib$thislib.a X $xlibpth`; $test -f "$try"; then
2973                         :
2974                 else
2975                         try=''
2976                 fi
2977                 libnames="$libnames $try"
2978                 ;;
2979         *) libnames="$libnames $thislib" ;;
2980         esac
2981         done
2982         ;;
2983 esac
2984 xxx=normal
2985 case "$libc" in
2986 unknown)
2987         set /usr/ccs/lib/libc.$so
2988         $test -r $1 || set /usr/lib/libc.$so
2989         $test -r $1 || set /usr/shlib/libc.$so
2990         $test -r $1 || set /usr/lib/libc.$so.[0-9]*
2991         $test -r $1 || set /lib/libc.$so
2992         $test -r $1 || set /lib/libsys_s.a
2993         eval set \$$#
2994         ;;
2995 *)
2996         set blurfl
2997         ;;
2998 esac
2999 if $test -r "$1"; then
3000         echo "Your (shared) C library seems to be in $1."
3001         libc="$1"
3002 elif $test -r /lib/libc && $test -r /lib/clib; then
3003         echo "Your C library seems to be in both /lib/clib and /lib/libc."
3004         xxx=apollo
3005         libc='/lib/clib /lib/libc'
3006         if $test -r /lib/syslib; then
3007                 echo "(Your math library is in /lib/syslib.)"
3008                 libc="$libc /lib/syslib"
3009         fi
3010 elif $test -r "$libc" || (test -h "$libc") >/dev/null 2>&1; then
3011         echo "Your C library seems to be in $libc, as you said before."
3012 elif $test -r $incpath/usr/lib/libc.a; then
3013         libc=$incpath/usr/lib/libc.a;
3014         echo "Your C library seems to be in $libc.  That's fine."
3015 elif $test -r /lib/libc.a; then
3016         libc=/lib/libc.a;
3017         echo "Your C library seems to be in $libc.  You're normal."
3018 else
3019         if tans=`./loc libc.a blurfl/dyick $libpth`; $test -r "$tans"; then
3020                 :
3021         elif tans=`./loc libc blurfl/dyick $libpth`; $test -r "$tans"; then
3022                 libnames="$libnames "`./loc clib blurfl/dyick $libpth`
3023         elif tans=`./loc clib blurfl/dyick $libpth`; $test -r "$tans"; then
3024                 :
3025         elif tans=`./loc Slibc.a blurfl/dyick $xlibpth`; $test -r "$tans"; then
3026                 :
3027         elif tans=`./loc Mlibc.a blurfl/dyick $xlibpth`; $test -r "$tans"; then
3028                 :
3029         else
3030                 tans=`./loc Llibc.a blurfl/dyick $xlibpth`
3031         fi
3032         if $test -r "$tans"; then
3033                 echo "Your C library seems to be in $tans, of all places."
3034                 libc=$tans
3035         else
3036                 libc='blurfl'
3037         fi
3038 fi
3039 if $test $xxx = apollo -o -r "$libc" || (test -h "$libc") >/dev/null 2>&1; then
3040         dflt="$libc"
3041         cat <<EOM
3042
3043 If the guess above is wrong (which it might be if you're using a strange
3044 compiler, or your machine supports multiple models), you can override it here.
3045
3046 EOM
3047 else
3048         dflt=''
3049         echo $libpth | tr ' ' '\012' | sort | uniq > libpath
3050         cat >&4 <<EOM
3051 I can't seem to find your C library.  I've looked in the following places:
3052
3053 EOM
3054         $sed 's/^/      /' libpath
3055         cat <<EOM
3056
3057 None of these seems to contain your C library. I need to get its name...
3058
3059 EOM
3060 fi
3061 fn=f
3062 rp='Where is your C library?'
3063 . ./getfile
3064 libc="$ans"
3065
3066 echo " "
3067 echo $libc $libnames | tr ' ' '\012' | sort | uniq > libnames
3068 set X `cat libnames`
3069 shift
3070 xxx=files
3071 case $# in 1) xxx=file; esac
3072 echo "Extracting names from the following $xxx for later perusal:" >&4
3073 echo " "
3074 $sed 's/^/      /' libnames >&4
3075 echo " "
3076 $echo $n "This may take a while...$c" >&4
3077
3078 nm $nm_opt $* 2>/dev/null >libc.tmp
3079 $echo $n ".$c"
3080 $grep fprintf libc.tmp > libc.ptf
3081 xscan='eval "<libc.ptf $com >libc.list"; $echo $n ".$c" >&4'
3082 xrun='eval "<libc.tmp $com >libc.list"; echo "done" >&4'
3083 if com="$sed -n -e 's/^.* [ADTSI]  *_[_.]*//p' -e 's/^.* [ADTSI] //p'";\
3084         eval $xscan;\
3085         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
3086                 eval $xrun
3087 elif com="$sed -n -e 's/^__*//' -e 's/^\([a-zA-Z_0-9$]*\).*xtern.*/\1/p'";\
3088         eval $xscan;\
3089         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
3090                 eval $xrun
3091 elif com="$sed -n -e '/|UNDEF/d' -e '/FUNC..GL/s/^.*|__*//p'";\
3092         eval $xscan;\
3093         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
3094                 eval $xrun
3095 elif com="$sed -n -e 's/^.* D __*//p' -e 's/^.* D //p'";\
3096         eval $xscan;\
3097         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
3098                 eval $xrun
3099 elif com="$sed -n -e 's/^_//' -e 's/^\([a-zA-Z_0-9]*\).*xtern.*text.*/\1/p'";\
3100         eval $xscan;\
3101         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
3102                 eval $xrun
3103 elif com="$sed -n -e 's/^.*|FUNC |GLOB .*|//p'";\
3104         eval $xscan;\
3105         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
3106                 eval $xrun
3107 elif com="$grep '|' | $sed -n -e '/|COMMON/d' -e '/|DATA/d' \
3108                                 -e '/ file/d' -e 's/^\([^       ]*\).*/\1/p'";\
3109         eval $xscan;\
3110         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
3111                 eval $xrun
3112 elif com="$sed -n -e 's/^.*|FUNC |GLOB .*|//p' -e 's/^.*|FUNC |WEAK .*|//p'";\
3113         eval $xscan;\
3114         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
3115                 eval $xrun
3116 elif com="$sed -n -e 's/^__//' -e '/|Undef/d' -e '/|Proc/s/ .*//p'";\
3117         eval $xscan;\
3118         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
3119                 eval $xrun
3120 elif com="$sed -n -e '/Def. Text/s/.* \([^ ]*\)\$/\1/p'";\
3121         eval $xscan;\
3122         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
3123                 eval $xrun
3124 else
3125         nm -p $* 2>/dev/null >libc.tmp
3126         com="$sed -n -e 's/^.* [ADTS]  *_[_.]*//p' -e 's/^.* [ADTS] //p'";\
3127         eval "<libc.tmp $com >libc.list"
3128         if $contains '^fprintf$' libc.list >/dev/null 2>&1; then
3129                 nm_opt='-p'
3130                 echo "done" >&4
3131         else
3132                 echo " "
3133                 echo "nm didn't seem to work right. Trying ar instead..." >&4
3134                 com=''
3135                 if ar t $libc > libc.tmp; then
3136                         for thisname in $libnames; do
3137                                 ar t $thisname >>libc.tmp
3138                         done
3139                         $sed -e 's/\.o$//' < libc.tmp > libc.list
3140                         echo "Ok." >&4
3141                 else
3142                         echo "ar didn't seem to work right." >&4
3143                         echo "Maybe this is a Cray...trying bld instead..." >&4
3144                         if bld t $libc | $sed -e 's/.*\///' -e 's/\.o:.*$//' > libc.list; then
3145                                 for thisname in $libnames; do
3146                                         bld t $libnames | \
3147                                         $sed -e 's/.*\///' -e 's/\.o:.*$//' >>libc.list
3148                                         ar t $thisname >>libc.tmp
3149                                 done
3150                                 echo "Ok." >&4
3151                         else
3152                                 echo "That didn't work either.  Giving up." >&4
3153                                 exit 1
3154                         fi
3155                 fi
3156         fi
3157 fi
3158 nm_extract="$com"
3159 if $test -f /lib/syscalls.exp; then
3160         echo " "
3161         echo "Also extracting names from /lib/syscalls.exp for good ole AIX..." >&4
3162         $sed -n 's/^\([^        ]*\)[   ]*syscall$/\1/p' /lib/syscalls.exp >>libc.list
3163 fi
3164 ;;
3165 esac
3166 $rm -f libnames libpath
3167
3168 : is a C symbol defined?
3169 csym='tlook=$1;
3170 case "$3" in
3171 -v) tf=libc.tmp; tc=""; tdc="";;
3172 -a) tf=libc.tmp; tc="[0]"; tdc=[];;
3173 *) tlook="^$1\$"; tf=libc.list; tc="()"; tdc="()";;
3174 esac;
3175 tx=yes;
3176 case "$reuseval-$4" in
3177 true-) ;;
3178 true-*) tx=no; eval "tval=\$$4"; case "$tval" in "") tx=yes;; esac;;
3179 esac;
3180 case "$tx" in
3181 yes)
3182         case "$runnm" in
3183         true)
3184                 if $contains $tlook $tf >/dev/null 2>&1;
3185                 then tval=true;
3186                 else tval=false;
3187                 fi;;
3188         *)
3189                 echo "main() { extern int $1$tdc; printf(\"%d\", $1$tc); }" > t.c;
3190                 if $cc $ccflags -o t t.c $ldflags $libs >/dev/null 2>&1;
3191                 then tval=true;
3192                 else tval=false;
3193                 fi;
3194                 $rm -f t t.c;;
3195         esac;;
3196 *)
3197         case "$tval" in
3198         $define) tval=true;;
3199         *) tval=false;;
3200         esac;;
3201 esac;
3202 eval "$2=$tval"'
3203
3204 : set up the script used to warn in case of inconsistency
3205 cat <<'EOSC' >whoa
3206 dflt=y
3207 echo " "
3208 echo "*** WHOA THERE!!! ***" >&4
3209 echo "    The $hint value for \$$var on this machine was \"$was\"!" >&4
3210 rp="    Keep the $hint value?"
3211 . ./myread
3212 case "$ans" in
3213 y) td=$was; tu=$was;;
3214 esac
3215 EOSC
3216
3217 : define an is-in-libc? function
3218 inlibc='echo " "; td=$define; tu=$undef;
3219 sym=$1; var=$2; eval "was=\$$2";
3220 tx=yes;
3221 case "$reuseval$was" in
3222 true) ;;
3223 true*) tx=no;;
3224 esac;
3225 case "$tx" in
3226 yes)
3227         set $sym tres -f;
3228         eval $csym;
3229         case "$tres" in
3230         true)
3231                 echo "$sym() found." >&4;
3232                 case "$was" in $undef) . ./whoa; esac; eval "$var=\$td";;
3233         *)
3234                 echo "$sym() NOT found." >&4;
3235                 case "$was" in $define) . ./whoa; esac; eval "$var=\$tu";;
3236         esac;;
3237 *)
3238         case "$was" in
3239         $define) echo "$sym() found." >&4;;
3240         *) echo "$sym() NOT found." >&4;;
3241         esac;;
3242 esac'
3243
3244 : see if gconvert exists
3245 set gconvert d_gconvert
3246 eval $inlibc
3247
3248 case "$d_gconvert" in
3249 $define)
3250         echo "We'll use it to convert floats into a string then." >&4
3251         d_Gconvert="gconvert((x),(n),(t),(b))"
3252         ;;
3253 *)
3254         : Maybe we can emulate it with gcvt.
3255         set gcvt d_gcvt
3256         eval $inlibc
3257
3258         case "$d_gcvt" in
3259         $define) 
3260                 : Test whether gcvt drops a trailing decimal point
3261                 $cat >try.c <<'EOP'
3262 main() { 
3263         char buf[64]; 
3264         gcvt(1.0, 8, buf); 
3265         if (buf[0] != '1' || buf[1] != '\0')
3266                 exit(1);
3267         gcvt(0.0, 8, buf); 
3268         if (buf[0] != '0' || buf[1] != '\0')
3269                 exit(1);
3270         gcvt(-1.0, 8, buf); 
3271         if (buf[0] != '-' || buf[1] != '1' || buf[2] != '\0')
3272                 exit(1);
3273         exit(0);
3274 }
3275 EOP
3276                 if $cc $ccflags $ldflags -o try try.c $libs > /dev/null 2>&1; then
3277                         if ./try; then
3278                                 echo "Good, your gcvt() drops a trailing decimal point."
3279                                 echo "We'll use it to convert floats into a string." >&4
3280                                 d_Gconvert="gcvt((x),(n),(b))"
3281                         else
3282                                 echo "But your gcvt() keeps a trailing decimal point".
3283                                 d_Gconvert=''
3284                         fi
3285                 else
3286                         echo "Hmm.  I can't compile the gcvt test program."
3287                         d_Gconvert=''
3288                 fi
3289                 $rm -f try.c try
3290                 ;;
3291         esac
3292         case "$d_Gconvert" in
3293         '')
3294                 echo "I'll use sprintf instead to convert floats into a string." >&4
3295                 d_Gconvert='sprintf((b),"%.*g",(n),(x))'
3296                 ;;
3297         esac
3298 esac
3299
3300 : Initialize h_fcntl
3301 h_fcntl=false
3302
3303 : Initialize h_sysfile
3304 h_sysfile=false
3305
3306 : determine filename position in cpp output
3307 echo " "
3308 echo "Computing filename position in cpp output for #include directives..." >&4
3309 echo '#include <stdio.h>' > foo.c
3310 $cat >fieldn <<EOF
3311 $startsh
3312 $cppstdin $cppflags $cppminus <foo.c 2>/dev/null | \
3313 $grep '^[       ]*#.*stdio\.h' | \
3314 while read cline; do
3315         pos=1
3316         set \$cline
3317         while $test \$# -gt 0; do
3318                 if $test -r \`echo \$1 | $tr -d '"'\`; then
3319                         echo "\$pos"
3320                         exit 0
3321                 fi
3322                 shift
3323                 pos=\`expr \$pos + 1\`
3324         done
3325 done
3326 EOF
3327 chmod +x fieldn
3328 fieldn=`./fieldn`
3329 $rm -f foo.c fieldn
3330 case $fieldn in
3331 '') pos='???';;
3332 1) pos=first;;
3333 2) pos=second;;
3334 3) pos=third;;
3335 *) pos="${fieldn}th";;
3336 esac
3337 echo "Your cpp writes the filename in the $pos field of the line."
3338
3339 : locate header file
3340 $cat >findhdr <<EOF
3341 $startsh
3342 wanted=\$1
3343 name=''
3344 if test -f $usrinc/\$wanted; then
3345         echo "$usrinc/\$wanted"
3346         exit 0
3347 fi
3348 awkprg='{ print \$$fieldn }'
3349 echo "#include <\$wanted>" > foo\$\$.c
3350 $cppstdin $cppminus $cppflags < foo\$\$.c 2>/dev/null | \
3351 $grep "^[       ]*#.*\$wanted" | \
3352 while read cline; do
3353         name=\`echo \$cline | $awk "\$awkprg" | $tr -d '"'\`
3354         case "\$name" in
3355         */\$wanted) echo "\$name"; exit 0;;
3356         *) name='';;
3357         esac;
3358 done;
3359 $rm -f foo\$\$.c;
3360 case "\$name" in
3361 '') exit 1;;
3362 esac
3363 EOF
3364 chmod +x findhdr
3365
3366 : access call always available on UNIX
3367 set access d_access
3368 eval $inlibc
3369
3370 : locate the flags for 'access()'
3371 case "$d_access" in
3372 "$define")
3373         echo " "
3374         $cat >access.c <<'EOCP'
3375 #include <sys/types.h>
3376 #ifdef I_FCNTL
3377 #include <fcntl.h>
3378 #endif
3379 #ifdef I_SYS_FILE
3380 #include <sys/file.h>
3381 #endif
3382 #ifdef I_UNISTD
3383 #include <unistd.h>
3384 #endif
3385 main() {
3386         exit(R_OK);
3387 }
3388 EOCP
3389         : check sys/file.h first, no particular reason here
3390         if $test `./findhdr sys/file.h` && \
3391                 $cc $cppflags -DI_SYS_FILE access.c -o access >/dev/null 2>&1 ; then
3392                 h_sysfile=true;
3393                 echo "<sys/file.h> defines the *_OK access constants." >&4
3394         elif $test `./findhdr fcntl.h` && \
3395                 $cc $cppflags -DI_FCNTL access.c -o access >/dev/null 2>&1 ; then
3396                 h_fcntl=true;
3397                 echo "<fcntl.h> defines the *_OK access constants." >&4
3398         elif $test `./findhdr unistd.h` && \
3399                 $cc $cppflags -DI_UNISTD access.c -o access >/dev/null 2>&1 ; then
3400                 echo "<unistd.h> defines the *_OK access constants." >&4
3401         else
3402                 echo "I can't find the four *_OK access constants--I'll use mine." >&4
3403         fi
3404         ;;
3405 esac
3406 $rm -f access*
3407
3408 : see if alarm exists
3409 set alarm d_alarm
3410 eval $inlibc
3411
3412 : is AFS running?
3413 echo " "
3414 if test -d /afs; then
3415         echo "AFS may be running... I'll be extra cautious then..." >&4
3416         afs=true
3417 else
3418         echo "AFS does not seem to be running..." >&4
3419         afs=false
3420 fi
3421
3422 : determine root of directory hierarchy where package will be installed.
3423 case "$prefix" in
3424 '')
3425         dflt=`./loc . /usr/local /usr/local /local /opt /usr`
3426         ;;
3427 *)
3428         dflt="$prefix"
3429         ;;
3430 esac
3431 $cat <<EOM
3432
3433 By default, $package will be installed in $dflt/bin, manual
3434 pages under $dflt/man, etc..., i.e. with $dflt as prefix for
3435 all installation directories. Typically set to /usr/local, but you
3436 may choose /usr if you wish to install $package among your system
3437 binaries. If you wish to have binaries under /bin but manual pages
3438 under /usr/local/man, that's ok: you will be prompted separately
3439 for each of the installation directories, the prefix being only used
3440 to set the defaults.
3441
3442 EOM
3443 fn=d~
3444 rp='Installation prefix to use?'
3445 . ./getfile
3446 oldprefix=''
3447 case "$prefix" in
3448 '') ;;
3449 *)
3450         case "$ans" in
3451         "$prefix") ;;
3452         *) oldprefix="$prefix";;
3453         esac
3454         ;;
3455 esac
3456 prefix="$ans"
3457 prefixexp="$ansexp"
3458
3459 : set the prefixit variable, to compute a suitable default value
3460 prefixit='case "$3" in
3461 ""|none)
3462         case "$oldprefix" in
3463         "") eval "$1=\"\$$2\"";;
3464         *)
3465                 case "$3" in
3466                 "") eval "$1=";;
3467                 none)
3468                         eval "tp=\"\$$2\"";
3469                         case "$tp" in
3470                         ""|" ") eval "$1=\"\$$2\"";;
3471                         *) eval "$1=";;
3472                         esac;;
3473                 esac;;
3474         esac;;
3475 *)
3476         eval "tp=\"$oldprefix-\$$2-\""; eval "tp=\"$tp\"";
3477         case "$tp" in
3478         --|/*--|\~*--) eval "$1=\"$prefix/$3\"";;
3479         /*-$oldprefix/*|\~*-$oldprefix/*)
3480                 eval "$1=\`echo \$$2 | sed \"s,^$oldprefix,$prefix,\"\`";;
3481         *) eval "$1=\"\$$2\"";;
3482         esac;;
3483 esac'
3484
3485 : determine where private executables go
3486 set dflt privlib lib/$package
3487 eval $prefixit
3488 $cat <<EOM
3489
3490 There are some auxiliary files for $package that need to be put into a
3491 private library directory that is accessible by everyone.
3492
3493 EOM
3494 fn=d~+
3495 rp='Pathname where the private library files will reside?'
3496 . ./getfile
3497 if $test "X$privlibexp" != "X$ansexp"; then
3498         installprivlib=''
3499 fi
3500 privlib="$ans"
3501 privlibexp="$ansexp"
3502 if $afs; then
3503         $cat <<EOM
3504
3505 Since you are running AFS, I need to distinguish the directory in which
3506 private files reside from the directory in which they are installed (and from
3507 which they are presumably copied to the former directory by occult means).
3508
3509 EOM
3510         case "$installprivlib" in
3511         '') dflt=`echo $privlibexp | sed 's#^/afs/#/afs/.#'`;;
3512         *) dflt="$installprivlib";;
3513         esac
3514         fn=de~
3515         rp='Where will private files be installed?'
3516         . ./getfile
3517         installprivlib="$ans"
3518 else
3519         installprivlib="$privlibexp"
3520 fi
3521
3522 : set the prefixup variable, to restore leading tilda escape
3523 prefixup='case "$prefixexp" in
3524 "$prefix") ;;
3525 *) eval "$1=\`echo \$$1 | sed \"s,^$prefixexp,$prefix,\"\`";;
3526 esac'
3527
3528 : determine where public architecture dependent libraries go
3529 case "$archname" in
3530 '')
3531     if xxx=`./loc arch blurfl $pth`; test -f "$xxx"; then
3532                 tarchname=`arch`
3533                 archname="${tarchname}-$osname"
3534         elif xxx=`./loc uname blurfl $pth`; test -f "$xxx" ; then
3535                 if uname -m > tmparch 2>&1 ; then
3536                         tarchname=`cat tmparch`
3537                         archname="${tarchname}-$osname"
3538                 fi
3539                 $rm -f tmparch
3540         else
3541                 archname="$osname"
3542         fi
3543     ;;
3544 esac
3545 set archlib archlib
3546 eval $prefixit
3547 case "$archlib" in
3548 '')
3549         case "$privlib" in
3550         '')
3551                 dflt=`./loc . "." $prefixexp/lib /usr/local/lib /usr/lib /lib`
3552                 set dflt
3553                 eval $prefixup
3554                 ;;
3555         *)  dflt="$privlib/$archname";;
3556         esac
3557         ;;
3558 *) dflt="$archlib";;
3559 esac
3560 cat <<EOM
3561
3562 $spackage contains architecture-dependent library files.  If you are
3563 sharing libraries in a heterogeneous environment, you might store
3564 these files in a separate location.  Otherwise, you can just include
3565 them with the rest of the public library files.
3566
3567 EOM
3568 fn=d~
3569 rp='Where do you want to put the public architecture-dependent libraries?'
3570 . ./getfile
3571 archlib="$ans"
3572 archlibexp="$ansexp"
3573
3574 if $afs; then
3575         $cat <<EOM
3576
3577 Since you are running AFS, I need to distinguish the directory in which
3578 private files reside from the directory in which they are installed (and from
3579 which they are presumably copied to the former directory by occult means).
3580
3581 EOM
3582         case "$installarchlib" in
3583         '') dflt=`echo $archlibexp | sed 's#^/afs/#/afs/.#'`;;
3584         *) dflt="$installarchlib";;
3585         esac
3586         fn=de~
3587         rp='Where will architecture-dependent library files be installed?'
3588         . ./getfile
3589         installarchlib="$ans"
3590 else
3591         installarchlib="$archlibexp"
3592 fi
3593 if $test X"$archlib" = X"$privlib"; then
3594         d_archlib="$undef"
3595 else
3596         d_archlib="$define"
3597 fi
3598
3599 : function used to set $1 to $val
3600 setvar='var=$1; eval "was=\$$1"; td=$define; tu=$undef;
3601 case "$val$was" in
3602 $define$undef) . ./whoa; eval "$var=\$td";;
3603 $undef$define) . ./whoa; eval "$var=\$tu";;
3604 *) eval "$var=$val";;
3605 esac'
3606
3607 : Look for GNU-cc style attribute checking
3608 echo " "
3609 echo "Checking whether your compiler can handle __attribute__ ..." >&4
3610 $cat >attrib.c <<'EOCP'
3611 #include <stdio.h>
3612 void croak (char* pat,...) __attribute__((format(printf,1,2),noreturn));
3613 EOCP
3614 if $cc $ccflags -c attrib.c >attrib.out 2>&1 ; then
3615         if $contains 'warning' attrib.out >/dev/null 2>&1; then
3616                 echo "Your C compiler doesn't fully support __attribute__."
3617                 val="$undef"
3618         else
3619                 echo "Your C compiler supports __attribute__."
3620                 val="$define"
3621         fi
3622 else
3623         echo "Your C compiler doesn't seem to understand __attribute__ at all."
3624         val="$undef"
3625 fi
3626 set d_attribut
3627 eval $setvar
3628 $rm -f attrib*
3629
3630 : see if bcmp exists
3631 set bcmp d_bcmp
3632 eval $inlibc
3633
3634 : see if bcopy exists
3635 set bcopy d_bcopy
3636 eval $inlibc
3637
3638 : see if setpgrp exists
3639 set setpgrp d_setpgrp
3640 eval $inlibc
3641
3642 : see which flavor of setpgrp is in use
3643 case "$d_setpgrp" in
3644 "$define")
3645         echo " "
3646         $cat >set.c <<EOP
3647 main()
3648 {
3649         if (getuid() == 0) {
3650                 printf("(I see you are running Configure as super-user...)\n");
3651                 setuid(1);
3652         }
3653         if (-1 == setpgrp(1, 1))
3654                 exit(1);
3655         exit(0);
3656 }
3657 EOP
3658         if $cc $ccflags -o set set.c $ldflags $libs >/dev/null 2>&1; then
3659                 ./set 2>/dev/null
3660                 case $? in
3661                 0) echo "You have to use setpgrp() instead of setpgrp(pid, pgrp)." >&4
3662                         val="$undef";;
3663                 *) echo "You have to use setpgrp(pid, pgrp) instead of setpgrp()." >&4
3664                         val="$define";;
3665                 esac
3666         else
3667                 if ./usg; then
3668                         xxx="USG one, i.e. you use setpgrp()."
3669                         val="$undef"
3670                 else
3671                         xxx="BSD one, i.e. you use setpgrp(pid, pgrp)."
3672                         val="$define"
3673                 fi
3674                 echo "Assuming your setpgrp is a $xxx" >&4
3675         fi
3676         ;;
3677 *) val="$undef";;
3678 esac
3679 set d_bsdpgrp
3680 eval $setvar
3681 $rm -f set set.c
3682
3683 : Check if we really have byacc
3684 case "$byacc" in
3685 ''|'byacc') val="$undef" ;;
3686 *) val="$define" ;;
3687 esac
3688 set d_byacc
3689 eval $setvar
3690
3691 : see if bzero exists
3692 set bzero d_bzero
3693 eval $inlibc
3694
3695 : check for length of integer
3696 echo " "
3697 case "$intsize" in
3698 '')
3699         echo "Checking to see how big your integers are..." >&4
3700         $cat >try.c <<'EOCP'
3701 #include <stdio.h>
3702 main()
3703 {
3704         printf("%d\n", sizeof(int));
3705 }
3706 EOCP
3707         if $cc $ccflags try.c -o try >/dev/null 2>&1 ; then
3708                 dflt=`./try`
3709         else
3710                 dflt='4'
3711                 echo "(I can't seem to compile the test program.  Guessing...)"
3712         fi
3713         ;;
3714 *)
3715         dflt="$intsize"
3716         ;;
3717 esac
3718 rp="What is the size of an integer (in bytes)?"
3719 . ./myread
3720 intsize="$ans"
3721 $rm -f try.c try
3722
3723 : see if signal is declared as pointer to function returning int or void
3724 echo " "
3725 xxx=`./findhdr signal.h`
3726 $test "$xxx" && $cppstdin $cppminus $cppflags < $xxx >$$.tmp 2>/dev/null
3727 if $contains 'int.*\*[  ]*signal' $$.tmp >/dev/null 2>&1 ; then
3728         echo "You have int (*signal())() instead of void." >&4
3729         val="$undef"
3730 elif $contains 'void.*\*[       ]*signal' $$.tmp >/dev/null 2>&1 ; then
3731         echo "You have void (*signal())() instead of int." >&4
3732         val="$define"
3733 elif $contains 'extern[         ]*[(\*]*signal' $$.tmp >/dev/null 2>&1 ; then
3734         echo "You have int (*signal())() instead of void." >&4
3735         val="$undef"
3736 else
3737         case "$d_voidsig" in
3738         '')
3739         echo "I can't determine whether signal handler returns void or int..." >&4
3740                 dflt=void
3741                 rp="What type does your signal handler return?"
3742                 . ./myread
3743                 case "$ans" in
3744                 v*) val="$define";;
3745                 *) val="$undef";;
3746                 esac;;
3747         "$define")
3748                 echo "As you already told me, signal handler returns void." >&4;;
3749         *)
3750                 echo "As you already told me, signal handler returns int." >&4;;
3751         esac
3752 fi
3753 set d_voidsig
3754 eval $setvar
3755 case "$d_voidsig" in
3756 "$define") signal_t="void";;
3757 *) signal_t="int";;
3758 esac
3759 $rm -f $$.tmp
3760
3761 : check for ability to cast large floats to 32-bit ints.
3762 echo " "
3763 echo 'Checking whether your C compiler can cast large floats to int32.' >&4
3764 if $test "$intsize" -eq 4; then
3765         xxx=int
3766 else
3767         xxx=long
3768 fi
3769 $cat >try.c <<EOCP
3770 #include <sys/types.h>
3771 #include <signal.h>
3772 $signal_t blech() { exit(3); }
3773 main()
3774 {
3775         $xxx i32;
3776         double f;
3777         int result = 0;
3778         signal(SIGFPE, blech);
3779
3780         f = (double) 0x7fffffff;
3781         f = 10 * f;
3782         i32  = ($xxx) f;
3783
3784         if (i32 != ($xxx) f)
3785                 result |= 1;
3786         exit(result);
3787 }
3788 EOCP
3789 if $cc -o try $ccflags try.c >/dev/null 2>&1; then
3790         ./try
3791         yyy=$?
3792 else
3793         echo "(I can't seem to compile the test program--assuming it can't)"
3794         yyy=1
3795 fi
3796 case "$yyy" in
3797 0)      val="$define"
3798         echo "Yup, it can."
3799         ;;
3800 *)      val="$undef"
3801         echo "Nope, it can't."
3802         ;;
3803 esac
3804 set d_casti32
3805 eval $setvar
3806 $rm -f try try.*
3807
3808 : check for ability to cast negative floats to unsigned
3809 echo " "
3810 echo 'Checking whether your C compiler can cast negative float to unsigned.' >&4
3811 $cat >try.c <<EOCP
3812 #include <sys/types.h>
3813 #include <signal.h>
3814 $signal_t blech() { exit(3); }
3815 main()
3816 {
3817         double f = -123;
3818         unsigned long along;
3819         unsigned int aint;
3820         unsigned short ashort;
3821         int result = 0;
3822
3823         signal(SIGFPE, blech);
3824         along = (unsigned long)f;
3825         aint = (unsigned int)f;
3826         ashort = (unsigned short)f;
3827         if (along != (unsigned long)-123)
3828                 result |= 1;
3829         if (aint != (unsigned int)-123)
3830                 result |= 1;
3831         if (ashort != (unsigned short)-123)
3832                 result |= 1;
3833         f = (double)0x40000000;
3834         f = f + f;
3835         along = 0;
3836         along = (unsigned long)f;
3837         if (along != 0x80000000)
3838                 result |= 2;
3839         f -= 1.;
3840         along = 0;
3841         along = (unsigned long)f;
3842         if (along != 0x7fffffff)
3843                 result |= 1;
3844         f += 2.;
3845         along = 0;
3846         along = (unsigned long)f;
3847         if (along != 0x80000001)
3848                 result |= 2;
3849         exit(result);
3850
3851 }
3852 EOCP
3853 if $cc -o try $ccflags try.c >/dev/null 2>&1; then
3854         ./try
3855         castflags=$?
3856 else
3857         echo "(I can't seem to compile the test program--assuming it can't)"
3858         castflags=3
3859 fi
3860 case "$castflags" in
3861 0)      val="$define"
3862         echo "Yup, it can."
3863         ;;
3864 *)      val="$undef"
3865         echo "Nope, it can't."
3866         ;;
3867 esac
3868 set d_castneg
3869 eval $setvar
3870 $rm -f try.*
3871
3872 : see if vprintf exists
3873 echo " "
3874 if set vprintf val -f d_vprintf; eval $csym; $val; then
3875         echo 'vprintf() found.' >&4
3876         val="$define"
3877         $cat >vprintf.c <<'EOF'
3878 #include <varargs.h>
3879
3880 main() { xxx("foo"); }
3881
3882 xxx(va_alist)
3883 va_dcl
3884 {
3885         va_list args;
3886         char buf[10];
3887
3888         va_start(args);
3889         exit((unsigned long)vsprintf(buf,"%s",args) > 10L);
3890 }
3891 EOF
3892         if $cc $ccflags vprintf.c -o vprintf >/dev/null 2>&1 && ./vprintf; then
3893                 echo "Your vsprintf() returns (int)." >&4
3894                 val2="$undef"
3895         else
3896                 echo "Your vsprintf() returns (char*)." >&4
3897                 val2="$define"
3898         fi
3899 else
3900         echo 'vprintf() NOT found.' >&4
3901                 val="$undef"
3902                 val2="$undef"
3903 fi
3904 set d_vprintf
3905 eval $setvar
3906 val=$val2
3907 set d_charvspr
3908 eval $setvar
3909
3910 : see if chown exists
3911 set chown d_chown
3912 eval $inlibc
3913
3914 : see if chroot exists
3915 set chroot d_chroot
3916 eval $inlibc
3917
3918 : see if chsize exists
3919 set chsize d_chsize
3920 eval $inlibc
3921
3922 : check for const keyword
3923 echo " "
3924 echo 'Checking to see if your C compiler knows about "const"...' >&4
3925 $cat >const.c <<'EOCP'
3926 typedef struct spug { int drokk; } spug;
3927 main()
3928 {
3929         const char *foo;
3930         const spug y;
3931 }
3932 EOCP
3933 if $cc -c $ccflags const.c >/dev/null 2>&1 ; then
3934         val="$define"
3935         echo "Yup, it does."
3936 else
3937         val="$undef"
3938         echo "Nope, it doesn't."
3939 fi
3940 set d_const
3941 eval $setvar
3942
3943 : see if crypt exists
3944 echo " "
3945 if set crypt val -f d_crypt; eval $csym; $val; then
3946         echo 'crypt() found.' >&4
3947         val="$define"
3948         cryptlib=''
3949 else
3950         cryptlib=`./loc Slibcrypt.a "" $xlibpth`
3951         if $test -z "$cryptlib"; then
3952                 cryptlib=`./loc Mlibcrypt.a "" $xlibpth`
3953         else
3954                 cryptlib=-lcrypt
3955         fi
3956         if $test -z "$cryptlib"; then
3957                 cryptlib=`./loc Llibcrypt.a "" $xlibpth`
3958         else
3959                 cryptlib=-lcrypt
3960         fi
3961         if $test -z "$cryptlib"; then
3962                 cryptlib=`./loc libcrypt.a "" $libpth`
3963         else
3964                 cryptlib=-lcrypt
3965         fi
3966         if $test -z "$cryptlib"; then
3967                 echo 'crypt() NOT found.' >&4
3968                 val="$undef"
3969         else
3970                 val="$define"
3971         fi
3972 fi
3973 set d_crypt
3974 eval $setvar
3975
3976 : get csh whereabouts
3977 case "$csh" in
3978 'csh') val="$undef" ;;
3979 *) val="$define" ;;
3980 esac
3981 set d_csh
3982 eval $setvar
3983 full_csh=$csh
3984
3985 : see if cuserid exists
3986 set cuserid d_cuserid
3987 eval $inlibc
3988
3989 : define an alternate in-header-list? function
3990 inhdr='echo " "; td=$define; tu=$undef; yyy=$@;
3991 cont=true; xxf="echo \"<\$1> found.\" >&4";
3992 case $# in 2) xxnf="echo \"<\$1> NOT found.\" >&4";;
3993 *) xxnf="echo \"<\$1> NOT found, ...\" >&4";;
3994 esac;
3995 case $# in 4) instead=instead;; *) instead="at last";; esac;
3996 while $test "$cont"; do
3997         xxx=`./findhdr $1`
3998         var=$2; eval "was=\$$2";
3999         if $test "$xxx" && $test -r "$xxx";
4000         then eval $xxf;
4001                 eval "case \"\$$var\" in $undef) . ./whoa; esac"; eval "$var=\$td";
4002                 cont="";
4003         else eval $xxnf;
4004                 eval "case \"\$$var\" in $define) . ./whoa; esac"; eval "$var=\$tu"; fi;
4005         set $yyy; shift; shift; yyy=$@;
4006         case $# in 0) cont="";;
4007         2) xxf="echo \"but I found <\$1> $instead.\" >&4";
4008                 xxnf="echo \"and I did not find <\$1> either.\" >&4";;
4009         *) xxf="echo \"but I found <\$1\> instead.\" >&4";
4010                 xxnf="echo \"there is no <\$1>, ...\" >&4";;
4011         esac;
4012 done;
4013 while $test "$yyy";
4014 do set $yyy; var=$2; eval "was=\$$2";
4015         eval "case \"\$$var\" in $define) . ./whoa; esac"; eval "$var=\$tu";
4016         set $yyy; shift; shift; yyy=$@;
4017 done'
4018
4019 : see if this is a limits.h system
4020 set limits.h i_limits
4021 eval $inhdr
4022
4023 : see if this is a float.h system
4024 set float.h i_float
4025 eval $inhdr
4026
4027 : See if number of significant digits in a double precision number is known
4028 echo " "
4029 $cat >dbl_dig.c <<EOM
4030 #$i_limits I_LIMITS
4031 #$i_float I_FLOAT
4032 #ifdef I_LIMITS
4033 #include <limits.h>
4034 #endif
4035 #ifdef I_FLOAT
4036 #include <float.h>
4037 #endif
4038 #ifdef DBL_DIG
4039 printf("Contains DBL_DIG");
4040 #endif
4041 EOM
4042 $cppstdin $cppflags $cppminus < dbl_dig.c >dbl_dig.E 2>/dev/null
4043 if $contains 'DBL_DIG' dbl_dig.E >/dev/null 2>&1; then
4044         echo "DBL_DIG found." >&4
4045         val="$define"
4046 else
4047         echo "DBL_DIG NOT found." >&4
4048         val="$undef"
4049 fi
4050 $rm -f dbl_dig.?
4051 set d_dbl_dig
4052 eval $setvar
4053
4054 : see if difftime exists
4055 set difftime d_difftime
4056 eval $inlibc
4057
4058 : see if this is a dirent system
4059 echo " "
4060 if xinc=`./findhdr dirent.h`; $test "$xinc"; then
4061         val="$define"
4062         echo "<dirent.h> found." >&4
4063 else
4064         val="$undef"
4065         if xinc=`./findhdr sys/dir.h`; $test "$xinc"; then
4066                 echo "<sys/dir.h> found." >&4
4067                 echo " "
4068         else
4069                 xinc=`./findhdr sys/ndir.h`
4070         fi
4071         echo "<dirent.h> NOT found." >&4
4072 fi
4073 set i_dirent
4074 eval $setvar
4075
4076 : Look for type of directory structure.
4077 echo " "
4078 $cppstdin $cppflags $cppminus < "$xinc" > try.c
4079
4080 case "$direntrytype" in
4081 ''|' ')
4082         case "$i_dirent" in
4083         $define) guess1='struct dirent' ;;
4084         *) guess1='struct direct'  ;;
4085         esac
4086         ;;
4087 *)      guess1="$direntrytype"
4088         ;;
4089 esac
4090
4091 case "$guess1" in
4092 'struct dirent') guess2='struct direct' ;;
4093 *) guess2='struct dirent' ;;
4094 esac
4095                 
4096 if $contains "$guess1" try.c >/dev/null 2>&1; then
4097         direntrytype="$guess1"
4098         echo "Your directory entries are $direntrytype." >&4
4099 elif $contains "$guess2" try.c >/dev/null 2>&1; then
4100         direntrytype="$guess2"
4101         echo "Your directory entries seem to be $direntrytype." >&4
4102 else
4103         echo "I don't recognize your system's directory entries." >&4
4104         rp="What type is used for directory entries on this system?"
4105         dflt="$guess1"
4106         . ./myread
4107         direntrytype="$ans"
4108 fi
4109 $rm -f try.c
4110
4111
4112 : see if the directory entry stores field length
4113 echo " "
4114 $cppstdin $cppflags $cppminus < "$xinc" > try.c
4115 if $contains 'd_namlen' try.c >/dev/null 2>&1; then
4116         echo "Good, your directory entry keeps length information in d_namlen." >&4
4117         val="$define"
4118 else
4119         echo "Your directory entry does not know about the d_namlen field." >&4
4120         val="$undef"
4121 fi
4122 set d_dirnamlen
4123 eval $setvar
4124 $rm -f try.c
4125
4126 : see if dlerror exists
4127 set dlerror d_dlerror
4128 eval $inlibc
4129
4130 : see if dld is available
4131 set dld.h i_dld
4132 eval $inhdr
4133
4134 : see if dlopen exists
4135 set dlopen d_dlopen
4136 eval $inlibc
4137
4138 : determine which dynamic loading, if any, to compile in
4139 echo " "
4140 dldir="ext/DynaLoader"
4141 case "$usedl" in
4142 $define|y|true)
4143         dflt='y'
4144         usedl="$define"
4145         ;;
4146 $undef|n|false)
4147         dflt='n'
4148         usedl="$undef"
4149         ;;
4150 *) 
4151         dflt='n'
4152         case "$d_dlopen" in
4153             $define) dflt='y' ;;
4154         esac
4155         case "$i_dld" in
4156             $define) dflt='y' ;;
4157         esac
4158         : Does a dl_xxx.xs file exist for this operating system
4159         $test -f ../$dldir/dl_${osname}.xs && dflt='y'
4160         ;;
4161 esac
4162 rp="Do you wish to use dynamic loading?"
4163 . ./myread
4164 usedl="$ans"
4165 case "$ans" in
4166 y*) usedl="$define"
4167         case "$dlsrc" in
4168         '')
4169                 if $test -f ../$dldir/dl_${osname}.xs ; then
4170                         dflt="$dldir/dl_${osname}.xs"
4171                 elif $test "$d_dlopen" = "$define" ; then
4172                         dflt="$dldir/dl_dlopen.xs"
4173                 elif $test "$i_dld" = "$define" ; then
4174                         dflt="$dldir/dl_dld.xs"
4175                 else
4176                         dflt=''
4177                 fi
4178                 ;;
4179         *)      dflt="$dldir/$dlsrc"
4180                 ;;
4181         esac
4182     echo "The following dynamic loading files are available:"
4183         : Can not go over to $dldir because getfile has path hard-coded in.
4184     cd ..; ls -C $dldir/dl*.xs; cd UU
4185     rp="Source file to use for dynamic loading"
4186     fn="fne"
4187     . ./getfile
4188         usedl="$define"
4189         : emulate basename
4190         dlsrc=`echo $ans | $sed -e 's@.*/\([^/]*\)$@\1@'`
4191     $cat << EOM
4192
4193 Some systems may require passing special flags to $cc -c to
4194 compile modules that will be used to create a shared library.
4195 To use no flags, say "none".
4196
4197 EOM
4198     case "$cccdlflags" in
4199     ''|' ') case "$cc" in
4200                 *gcc*)  dflt='-fpic' ;;
4201                 *)  case "$osname" in
4202                         hpux)   dflt='+z' ;;
4203                         next)   dflt='none' ;;
4204                         solaris) dflt='-K pic' ;;
4205                         sunos)  dflt='-pic' ;;
4206                         svr4*|esix*) dflt='-Kpic' ;;
4207                         *)      dflt='none' ;;
4208                     esac ;;
4209             esac ;;
4210     *) dflt="$cccdlflags" ;;
4211     esac
4212     rp="Any special flags to pass to $cc -c to compile shared library modules?"
4213     . ./myread
4214     case "$ans" in
4215     none) cccdlflags='' ;;
4216     *) cccdlflags="$ans" ;;
4217     esac
4218
4219     cat << 'EOM'
4220
4221 Some systems may require passing special flags to ld to create a
4222 library that can be dynamically loaded.  If your ld flags include
4223 -L/other/path options to locate libraries outside your loader's normal
4224 search path, you may need to specify those -L options here as well.  To
4225 use no flags, say "none".
4226
4227 EOM
4228     case "$lddlflags" in
4229     ''|' ') case "$osname" in
4230                         hpux)  dflt='-b' ;;
4231                         next)  dflt='none' ;;
4232                         solaris) dflt='-G' ;;
4233                         sunos) dflt='-assert nodefinitions' ;;
4234                         svr4*|esix*) dflt="-G $ldflags" ;;
4235                 *)     dflt='none' ;;
4236                         esac
4237                         ;;
4238     *) dflt="$lddlflags" ;;
4239     esac
4240     rp="Any special flags to pass to ld to create a dynamically loaded library?"
4241     . ./myread
4242     case "$ans" in
4243     none) lddlflags='' ;;
4244     *) lddlflags="$ans" ;;
4245     esac
4246
4247         cat <<EOM
4248
4249 Some systems may require passing special flags to $cc to indicate that
4250 the resulting executable will use dynamic linking.  To use no flags,
4251 say "none".
4252
4253 EOM
4254     case "$ccdlflags" in
4255     ''|' ') case "$osname" in
4256                 hpux)   dflt='none' ;;
4257                 next)   dflt='none' ;;
4258                 sunos)  dflt='none' ;;
4259                 *)      dflt='none' ;;
4260             esac ;;
4261     *)  dflt="$ccdlflags" ;;
4262     esac
4263     rp="Any special flags to pass to $cc to use dynamic loading?"
4264     . ./myread
4265     case "$ans" in
4266     none) ccdlflags='' ;;
4267     *) ccdlflags="$ans" ;;
4268     esac
4269     ;;
4270 *)  usedl="$undef"
4271     dlsrc='dl_none.xs'
4272     lddlflags=''
4273     ccdlflags=''
4274     ;;
4275 esac
4276
4277 val="$undef"
4278 case "$osname" in
4279 esix*|svr4*)
4280     case "$usedl" in
4281     $define)
4282         $cat <<EOM
4283
4284 System V Release 4 systems can support dynamic loading
4285 only if libperl is created as a shared library.
4286
4287 EOM
4288         val="$define"
4289         ;;
4290     esac ;;
4291 esac
4292 set d_shrplib; eval $setvar
4293 case "$d_shrplib" in
4294 $define)
4295     cat <<EOM >&4
4296
4297 Be sure to add the perl source directory to the LD_LIBRARY_PATH
4298 environment variable before running make:
4299     LD_LIBRARY_PATH=`cd ..;pwd`; export LD_LIBRARY_PATH
4300 or
4301     setenv LD_LIBRARY_PATH `cd ..;pwd`
4302
4303 EOM
4304 ;;
4305 esac
4306 case "$d_shrplib" in
4307 $define)
4308         case "$shrpdir" in
4309         "")     dflt="$archlib/CORE";;
4310         *)      dflt="$shrpdir";;
4311         esac
4312         rp="What directory should we install the shared libperl into?"
4313         fn="d~"
4314         . ./getfile
4315         shrpdir="$ans"
4316         ;;
4317 *)      shrpdir='none'
4318         ;;
4319 esac
4320
4321 : see if dlfcn is available
4322 set dlfcn.h i_dlfcn
4323 eval $inhdr
4324
4325 case "$usedl" in
4326 $define|y|true)
4327         $cat << EOM
4328
4329 On a few systems, the dynamically loaded modules that perl generates and uses
4330 will need a different extension then shared libs. The default will probably
4331 be appropriate.
4332
4333 EOM
4334         case "$dlext" in
4335         '')     dflt="$so" ;;
4336         *)      dflt="$dlext" ;;
4337         esac
4338         rp='What is the extension of dynamically loaded modules'
4339         . ./myread
4340         dlext="$ans"
4341         ;;
4342 *)
4343         dlext="none"
4344         ;;
4345 esac
4346
4347 : Check if dlsym need a leading underscore
4348 echo " "
4349 val="$undef"
4350
4351 case "$dlsrc" in
4352 dl_dlopen.xs)
4353         echo "Checking whether your dlsym() needs a leading underscore ..." >&4
4354         $cat >dyna.c <<'EOM'
4355 fred () { }
4356 EOM
4357
4358 $cat >fred.c<<EOM
4359
4360 #include <stdio.h>
4361 #$i_dlfcn I_DLFCN
4362 #ifdef I_DLFCN
4363 #include <dlfcn.h>      /* the dynamic linker include file for Sunos/Solaris */
4364 #else
4365 #include <sys/types.h>
4366 #include <nlist.h>
4367 #include <link.h>
4368 #endif
4369
4370 extern int fred() ;
4371
4372 main()
4373 {
4374     void * handle ;
4375     void * symbol ;
4376 #ifndef RTLD_LAZY
4377     int mode = 1 ;
4378 #else
4379     int mode = RTLD_LAZY ;
4380 #endif
4381     handle = dlopen("./dyna.$dlext", mode) ;
4382     if (handle == NULL) {
4383         printf ("1\n") ;
4384             exit(0);
4385     }
4386     symbol = dlsym(handle, "fred") ;
4387     if (symbol == NULL) {
4388                 /* try putting a leading underscore */
4389         symbol = dlsym(handle, "_fred") ;
4390         if (symbol == NULL) {
4391             printf ("2\n") ;
4392                 exit(0);
4393                 }
4394         printf ("3\n") ;
4395     }
4396     else
4397         printf ("4\n") ;
4398         exit(0);
4399 }
4400 EOM
4401         if $cc $ccflags $cccdlflags -c dyna.c > /dev/null 2>&1 && 
4402                 ld $lddlflags -o dyna.$dlext dyna.o > /dev/null 2>&1 && 
4403                 $cc $ccflags $ldflags $cccdlflags $ccdlflags fred.c -o fred $libs > /dev/null 2>&1; then
4404                 xxx=`./fred`
4405                 case $xxx in
4406                 1)      echo "Test program failed using dlopen." >&4
4407                         echo "Perhaps you should not use dynamic loading." >&4;;
4408                 2)      echo "Test program failed using dlsym." >&4
4409                         echo "Perhaps you should not use dynamic loading." >&4;;
4410                 3)      echo "dlsym needs a leading underscore" >&4
4411                         val="$define" ;;
4412                 4)      echo "dlsym doesn't need a leading underscore." >&4;;
4413                 esac
4414         else
4415                 echo "I can't compile and run the test program." >&4
4416         fi
4417         ;;
4418 esac
4419                 
4420 $rm -f fred fred.? dyna.$dlext dyna.?
4421
4422 set d_dlsymun
4423 eval $setvar
4424
4425 : see if setuid scripts can be secure
4426 $cat <<EOM
4427
4428 Some kernels have a bug that prevents setuid #! scripts from being
4429 secure.  Some sites have disabled setuid #! scripts because of this.
4430
4431 First let's decide if your kernel supports secure setuid #! scripts.
4432 (If setuid #! scripts would be secure but have been disabled anyway,
4433 don't say that they are secure if asked.)
4434
4435 EOM
4436
4437 val="$undef"
4438 if $test -d /dev/fd; then
4439         echo "#!$ls" >reflect
4440         chmod +x,u+s reflect
4441         ./reflect >flect 2>&1
4442         if $contains "/dev/fd" flect >/dev/null; then
4443                 echo "Congratulations, your kernel has secure setuid scripts!" >&4
4444                 val="$define"
4445         else
4446                 $cat <<EOM
4447 If you are not sure if they are secure, I can check but I'll need a
4448 username and password different from the one you are using right now.
4449 If you don't have such a username or don't want me to test, simply
4450 enter 'none'.
4451
4452 EOM
4453                 rp='Other username to test security of setuid scripts with?'
4454                 dflt='none'
4455                 . ./myread
4456                 case "$ans" in
4457                 n|none)
4458                         case "$d_suidsafe" in
4459                         '')     echo "I'll assume setuid scripts are *not* secure." >&4
4460                                 dflt=n;;
4461                         "$undef")
4462                                 echo "Well, the $hint value is *not* secure." >&4
4463                                 dflt=n;;
4464                         *)      echo "Well, the $hint value *is* secure." >&4
4465                                 dflt=y;;
4466                         esac
4467                         ;;
4468                 *)
4469                         $rm -f reflect flect
4470                         echo "#!$ls" >reflect
4471                         chmod +x,u+s reflect
4472                         echo >flect
4473                         chmod a+w flect
4474                         echo '"su" will (probably) prompt you for '"$ans's password."
4475                         su $ans -c './reflect >flect'
4476                         if $contains "/dev/fd" flect >/dev/null; then
4477                                 echo "Okay, it looks like setuid scripts are secure." >&4
4478                                 dflt=y
4479                         else
4480                                 echo "I don't think setuid scripts are secure." >&4
4481                                 dflt=n
4482                         fi
4483                         ;;
4484                 esac
4485                 rp='Does your kernel have *secure* setuid scripts?'
4486                 . ./myread
4487                 case "$ans" in
4488                 [yY]*)  val="$define";;
4489                 *)      val="$undef";;
4490                 esac
4491         fi
4492 else
4493         echo "I don't think setuid scripts are secure (no /dev/fd directory)." >&4
4494         val="$undef"
4495 fi
4496 set d_suidsafe
4497 eval $setvar
4498
4499 $rm -f reflect flect
4500
4501 : now see if they want to do setuid emulation
4502 echo " "
4503 val="$undef"
4504 case "$d_suidsafe" in
4505 "$define")
4506         val="$undef"
4507         echo "No need to emulate SUID scripts since they are secure here." >& 4
4508         ;;
4509 *)
4510         $cat <<EOM
4511 Some systems have disabled setuid scripts, especially systems where
4512 setuid scripts cannot be secure.  On systems where setuid scripts have
4513 been disabled, the setuid/setgid bits on scripts are currently
4514 useless.  It is possible for $package to detect those bits and emulate
4515 setuid/setgid in a secure fashion.  This emulation will only work if
4516 setuid scripts have been disabled in your kernel.
4517
4518 EOM
4519         case "$d_dosuid" in
4520         "$define") dflt=y ;;
4521         *) dflt=n ;;
4522         esac
4523         rp="Do you want to do setuid/setgid emulation?"
4524         . ./myread
4525         case "$ans" in
4526         [yY]*)  val="$define";;
4527         *)      val="$undef";;
4528         esac
4529         ;;
4530 esac
4531 set d_dosuid
4532 eval $setvar
4533
4534 : see if drem exists
4535 set drem d_drem
4536 eval $inlibc
4537
4538 : see if dup2 exists
4539 set dup2 d_dup2
4540 eval $inlibc
4541
4542 : see if fchmod exists
4543 set fchmod d_fchmod
4544 eval $inlibc
4545
4546 : see if fchown exists
4547 set fchown d_fchown
4548 eval $inlibc
4549
4550 : see if this is an fcntl system
4551 set fcntl d_fcntl
4552 eval $inlibc
4553
4554 : see if fgetpos exists
4555 set fgetpos d_fgetpos
4556 eval $inlibc
4557
4558 : see if we can have long filenames
4559 echo " "
4560 rmlist="$rmlist /tmp/cf$$"
4561 $test -d /tmp/cf$$ || mkdir /tmp/cf$$
4562 first=123456789abcdef
4563 second=/tmp/cf$$/$first
4564 $rm -f $first $second
4565 if (echo hi >$first) 2>/dev/null; then
4566         if $test -f 123456789abcde; then
4567                 echo 'You cannot have filenames longer than 14 characters.  Sigh.' >&4
4568                 val="$undef"
4569         else
4570                 if (echo hi >$second) 2>/dev/null; then
4571                         if $test -f /tmp/cf$$/123456789abcde; then
4572                                 $cat <<'EOM'
4573 That's peculiar... You can have filenames longer than 14 characters, but only
4574 on some of the filesystems.  Maybe you are using NFS.  Anyway, to avoid problems
4575 I shall consider your system cannot support long filenames at all.
4576 EOM
4577                                 val="$undef"
4578                         else
4579                                 echo 'You can have filenames longer than 14 characters.' >&4
4580                                 val="$define"
4581                         fi
4582                 else
4583                         $cat <<'EOM'
4584 How confusing! Some of your filesystems are sane enough to allow filenames
4585 longer than 14 characters but some others like /tmp can't even think about them.
4586 So, for now on, I shall assume your kernel does not allow them at all.
4587 EOM
4588                         val="$undef"
4589                 fi
4590         fi
4591 else
4592         $cat <<'EOM'
4593 You can't have filenames longer than 14 chars.  You can't even think about them!
4594 EOM
4595         val="$undef"
4596 fi 
4597 set d_flexfnam
4598 eval $setvar
4599 $rm -rf /tmp/cf$$ 123456789abcde*
4600
4601 : see if flock exists
4602 set flock d_flock
4603 eval $inlibc
4604
4605 : see if fmod exists
4606 set fmod d_fmod
4607 eval $inlibc
4608
4609 : see if fork exists
4610 set fork d_fork
4611 eval $inlibc
4612
4613 : see if pathconf exists
4614 set pathconf d_pathconf
4615 eval $inlibc
4616
4617 : see if fpathconf exists
4618 set fpathconf d_fpathconf
4619 eval $inlibc
4620
4621 : see if fsetpos exists
4622 set fsetpos d_fsetpos
4623 eval $inlibc
4624
4625 : see if gethostent exists
4626 set gethostent d_gethent
4627 eval $inlibc
4628
4629 : see if getlogin exists
4630 set getlogin d_getlogin
4631 eval $inlibc
4632
4633 : see if getpgrp exists
4634 set getpgrp d_getpgrp
4635 eval $inlibc
4636
4637 : see if getpgrp2 exists
4638 set getpgrp2 d_getpgrp2
4639 eval $inlibc
4640
4641 : see if getppid exists
4642 set getppid d_getppid
4643 eval $inlibc
4644
4645 : see if getpriority exists
4646 set getpriority d_getprior
4647 eval $inlibc
4648
4649 : see if this is a netinet/in.h or sys/in.h system
4650 set netinet/in.h i_niin sys/in.h i_sysin
4651 eval $inhdr
4652
4653 : see if htonl --and friends-- exists
4654 val=''
4655 set htonl val
4656 eval $inlibc
4657
4658 : Maybe they are macros.
4659 case "$val" in
4660 $undef)
4661         $cat >htonl.c <<EOM
4662 #include <stdio.h>
4663 #include <sys/types.h>
4664 #$i_niin I_NETINET_IN
4665 #$i_sysin I_SYS_IN
4666 #ifdef I_NETINET_IN
4667 #include <netinet/in.h>
4668 #endif
4669 #ifdef I_SYS_IN
4670 #include <sys/in.h>
4671 #endif
4672 #ifdef htonl
4673 printf("Defined as a macro.");
4674 #endif
4675 EOM
4676         $cppstdin $cppflags $cppminus < htonl.c >htonl.E 2>/dev/null
4677         if $contains 'Defined as a macro' htonl.E >/dev/null 2>&1; then
4678                 val="$define"
4679                 echo "But it seems to be defined as a macro." >&4
4680         fi
4681         $rm -f htonl.?
4682         ;;
4683 esac
4684 set d_htonl
4685 eval $setvar
4686
4687 : see which of string.h or strings.h is needed
4688 echo " "
4689 strings=`./findhdr string.h`
4690 if $test "$strings" && $test -r "$strings"; then
4691         echo "Using <string.h> instead of <strings.h>." >&4
4692         val="$define"
4693 else
4694         val="$undef"
4695         strings=`./findhdr strings.h`
4696         if $test "$strings" && $test -r "$strings"; then
4697                 echo "Using <strings.h> instead of <string.h>." >&4
4698         else
4699                 echo "No string header found -- You'll surely have problems." >&4
4700         fi
4701 fi
4702 set i_string
4703 eval $setvar
4704 case "$i_string" in
4705 "$undef") strings=`./findhdr strings.h`;;
4706 *)        strings=`./findhdr string.h`;;
4707 esac
4708
4709 : index or strchr
4710 echo " "
4711 if set index val -f; eval $csym; $val; then
4712         if set strchr val -f d_strchr; eval $csym; $val; then
4713                 if $contains strchr "$strings" >/dev/null 2>&1 ; then
4714                         val="$define"
4715                         vali="$undef"
4716                         echo "strchr() found." >&4
4717                 else
4718                         val="$undef"
4719                         vali="$define"
4720                         echo "index() found." >&4
4721                 fi
4722         else
4723                 val="$undef"
4724                 vali="$define"
4725                 echo "index() found." >&4
4726         fi
4727 else
4728         if set strchr val -f d_strchr; eval $csym; $val; then
4729                 val="$define"
4730                 vali="$undef"
4731                 echo "strchr() found." >&4
4732         else
4733                 echo "No index() or strchr() found!" >&4
4734                 val="$undef"
4735                 vali="$undef"
4736         fi
4737 fi
4738 set d_strchr; eval $setvar
4739 val="$vali"
4740 set d_index; eval $setvar
4741
4742 : Look for isascii
4743 echo " "
4744 $cat >isascii.c <<'EOCP'
4745 #include <stdio.h>
4746 #include <ctype.h>
4747 main() {
4748         int c = 'A';
4749         if (isascii(c))
4750                 exit(0);
4751         else
4752                 exit(1);
4753 }
4754 EOCP
4755 if $cc $ccflags $ldflags -o isascii isascii.c $libs >/dev/null 2>&1 ; then
4756         echo "isascii() found." >&4
4757         val="$define"
4758 else
4759         echo "isascii() NOT found." >&4
4760         val="$undef"
4761 fi
4762 set d_isascii
4763 eval $setvar
4764 $rm -f isascii*
4765
4766 : see if killpg exists
4767 set killpg d_killpg
4768 eval $inlibc
4769
4770 : see if link exists
4771 set link d_link
4772 eval $inlibc
4773
4774 : see if stdio is really std
4775 echo " "
4776 xxx=`./findhdr stdio.h`
4777 if $contains 'char.*_ptr;' "$xxx" >/dev/null 2>&1 ; then
4778         if $contains '_cnt;' "$xxx" >/dev/null 2>&1 ; then
4779                 echo "Your stdio is pretty std." >&4
4780                 val="$define"
4781         else
4782                 echo "Your stdio isn't very std." >&4
4783                 val="$undef"
4784         fi
4785 else
4786         echo "Your stdio isn't very std." >&4
4787         val="$undef"
4788 fi
4789 set d_stdstdio
4790 eval $setvar
4791
4792 : see if stdio is like that in linux
4793 case "$d_stdstdio" in
4794 "$undef")
4795         echo " "
4796         xxx=`./findhdr stdio.h`
4797         $cppstdin $cppflags $cppminus < "$xxx" > stdio.E
4798         if $contains 'char.*_IO_read_base' stdio.E >/dev/null 2>&1 && \
4799                 $contains '_IO_read_ptr' stdio.E >/dev/null 2>&1 && \
4800                 $contains '_IO_read_end' stdio.E >/dev/null 2>&1 ; then
4801                         echo "Your stdio looks like linux." >&4
4802                         val="$define"
4803         else
4804                 echo "You don't have linux stdio, either." >&4
4805                 val="$undef"
4806         fi
4807         $rm -f stdio.E
4808         ;;
4809 *)      val="$undef" ;;
4810 esac
4811
4812 set d_linuxstd
4813 eval $setvar
4814
4815 : see if localeconv exists
4816 set localeconv d_locconv
4817 eval $inlibc
4818
4819 : see if lockf exists
4820 set lockf d_lockf
4821 eval $inlibc
4822
4823 : see if lstat exists
4824 set lstat d_lstat
4825 eval $inlibc
4826
4827 : see if mblen exists
4828 set mblen d_mblen
4829 eval $inlibc
4830
4831 : see if mbstowcs exists
4832 set mbstowcs d_mbstowcs
4833 eval $inlibc
4834
4835 : see if mbtowc exists
4836 set mbtowc d_mbtowc
4837 eval $inlibc
4838
4839 : see if memcmp exists
4840 set memcmp d_memcmp
4841 eval $inlibc
4842
4843 : see if memcpy exists
4844 set memcpy d_memcpy
4845 eval $inlibc
4846
4847 : see if memmove exists
4848 set memmove d_memmove
4849 eval $inlibc
4850
4851 : see if memset exists
4852 set memset d_memset
4853 eval $inlibc
4854
4855 : see if mkdir exists
4856 set mkdir d_mkdir
4857 eval $inlibc
4858
4859 : see if mkfifo exists
4860 set mkfifo d_mkfifo
4861 eval $inlibc
4862
4863 : see if mktime exists
4864 set mktime d_mktime
4865 eval $inlibc
4866
4867 : see if msgctl exists
4868 set msgctl d_msgctl
4869 eval $inlibc
4870
4871 : see if msgget exists
4872 set msgget d_msgget
4873 eval $inlibc
4874
4875 : see if msgsnd exists
4876 set msgsnd d_msgsnd
4877 eval $inlibc
4878
4879 : see if msgrcv exists
4880 set msgrcv d_msgrcv
4881 eval $inlibc
4882
4883 : see how much of the 'msg*(2)' library is present.
4884 h_msg=true
4885 echo " "
4886 case "$d_msgctl$d_msgget$d_msgsnd$d_msgrcv" in
4887 *"$undef"*) h_msg=false;;
4888 esac
4889 : we could also check for sys/ipc.h ...
4890 if $h_msg && $test `./findhdr sys/msg.h`; then
4891         echo "You have the full msg*(2) library." >&4
4892         val="$define"
4893 else
4894         echo "You don't have the full msg*(2) library." >&4
4895         val="$undef"
4896 fi
4897 set d_msg
4898 eval $setvar
4899
4900 : see if this is a malloc.h system
4901 set malloc.h i_malloc
4902 eval $inhdr
4903
4904 : determine which malloc to compile in
4905 echo " "
4906 case "$usemymalloc" in
4907 ''|y*|true)     dflt='y' ;;
4908 n*|false)       dflt='n' ;;
4909 *)      dflt="$usemymalloc" ;;
4910 esac
4911 rp="Do you wish to attempt to use the malloc that comes with $package?"
4912 . ./myread
4913 usemymalloc="$ans"
4914 case "$ans" in
4915 y*|true)
4916         usemymalloc='y'
4917         mallocsrc='malloc.c'
4918         mallocobj='malloc.o'
4919         d_mymalloc="$define"
4920         case "$libs" in
4921         *-lmalloc*)
4922                 : Remove malloc from list of libraries to use
4923                 echo "Removing unneeded -lmalloc from library list" >&4
4924                 set `echo X $libs | $sed -e 's/-lmalloc / /' -e 's/-lmalloc$//'`
4925                 shift
4926                 libs="$*"
4927                 echo "libs = $libs" >&4
4928                 ;;
4929         esac
4930         ;;
4931 *)
4932         usemymalloc='n'
4933         mallocsrc=''
4934         mallocobj=''
4935         d_mymalloc="$undef"
4936         ;;
4937 esac
4938
4939 : compute the type returned by malloc
4940 echo " "
4941 case "$malloctype" in
4942 '')
4943         $cat >malloc.c <<END
4944 #$i_malloc I_MALLOC
4945 #include <stdio.h>
4946 #include <sys/types.h>
4947 #ifdef I_MALLOC
4948 #include <malloc.h>
4949 #endif
4950 void *malloc();
4951 END
4952         if $cc $ccflags -c malloc.c >/dev/null 2>&1; then
4953                 malloctype='void *'
4954         else
4955                 malloctype='char *'
4956         fi
4957         $rm -f malloc.[co]
4958         ;;
4959 esac
4960 echo "Your system wants malloc to return '$malloctype', it would seem." >&4
4961
4962 : see if nice exists
4963 set nice d_nice
4964 eval $inlibc
4965
4966 : Locate the flags for 'open()'
4967 echo " "
4968 $cat >open3.c <<'EOCP'
4969 #include <sys/types.h>
4970 #ifdef I_FCNTL
4971 #include <fcntl.h>
4972 #endif
4973 #ifdef I_SYS_FILE
4974 #include <sys/file.h>
4975 #endif
4976 main() {
4977         if(O_RDONLY);
4978 #ifdef O_TRUNC
4979         exit(0);
4980 #else
4981         exit(1);
4982 #endif
4983 }
4984 EOCP
4985 : check sys/file.h first to get FREAD on Sun
4986 if $test `./findhdr sys/file.h` && \
4987                 $cc $cppflags "-DI_SYS_FILE" open3.c -o open3 >/dev/null 2>&1 ; then
4988         h_sysfile=true;
4989         echo "<sys/file.h> defines the O_* constants..." >&4
4990         if ./open3; then
4991                 echo "and you have the 3 argument form of open()." >&4
4992                 val="$define"
4993         else
4994                 echo "but not the 3 argument form of open().  Oh, well." >&4
4995                 val="$undef"
4996         fi
4997 elif $test `./findhdr fcntl.h` && \
4998                 $cc "-DI_FCNTL" open3.c -o open3 >/dev/null 2>&1 ; then
4999         h_fcntl=true;
5000         echo "<fcntl.h> defines the O_* constants..." >&4
5001         if ./open3; then
5002                 echo "and you have the 3 argument form of open()." >&4
5003                 val="$define"
5004         else
5005                 echo "but not the 3 argument form of open().  Oh, well." >&4
5006                 val="$undef"
5007         fi
5008 else
5009         val="$undef"
5010         echo "I can't find the O_* constant definitions!  You got problems." >&4
5011 fi
5012 set d_open3
5013 eval $setvar
5014 $rm -f open3*
5015
5016 : see if pause exists
5017 set pause d_pause
5018 eval $inlibc
5019
5020 : see if pipe exists
5021 set pipe d_pipe
5022 eval $inlibc
5023
5024 : see if this is a pwd system
5025 echo " "
5026 xxx=`./findhdr pwd.h`
5027 if $test "$xxx"; then
5028         i_pwd="$define"
5029         echo "<pwd.h> found." >&4
5030         $cppstdin $cppflags $cppminus < $xxx >$$.h
5031         if $contains 'pw_quota' $$.h >/dev/null 2>&1; then
5032                 d_pwquota="$define"
5033         else
5034                 d_pwquota="$undef"
5035         fi
5036         if $contains 'pw_age' $$.h >/dev/null 2>&1; then
5037                 d_pwage="$define"
5038         else
5039                 d_pwage="$undef"
5040         fi
5041         if $contains 'pw_change' $$.h >/dev/null 2>&1; then
5042                 d_pwchange="$define"
5043         else
5044                 d_pwchange="$undef"
5045         fi
5046         if $contains 'pw_class' $$.h >/dev/null 2>&1; then
5047                 d_pwclass="$define"
5048         else
5049                 d_pwclass="$undef"
5050         fi
5051         if $contains 'pw_expire' $$.h >/dev/null 2>&1; then
5052                 d_pwexpire="$define"
5053         else
5054                 d_pwexpire="$undef"
5055         fi
5056         if $contains 'pw_comment' $$.h >/dev/null 2>&1; then
5057                 d_pwcomment="$define"
5058         else
5059                 d_pwcomment="$undef"
5060         fi
5061         $rm -f $$.h
5062 else
5063         i_pwd="$undef"
5064         d_pwquota="$undef"
5065         d_pwage="$undef"
5066         d_pwchange="$undef"
5067         d_pwclass="$undef"
5068         d_pwexpire="$undef"
5069         d_pwcomment="$undef"
5070         echo "<pwd.h> NOT found." >&4
5071 fi
5072
5073 : see if readdir and friends exist
5074 set readdir d_readdir
5075 eval $inlibc
5076 set seekdir d_seekdir
5077 eval $inlibc
5078 set telldir d_telldir
5079 eval $inlibc
5080 set rewinddir d_rewinddir
5081 eval $inlibc
5082
5083 : see if readlink exists
5084 set readlink d_readlink
5085 eval $inlibc
5086
5087 : see if rename exists
5088 set rename d_rename
5089 eval $inlibc
5090
5091 : see if rmdir exists
5092 set rmdir d_rmdir
5093 eval $inlibc
5094
5095 : can bcopy handle overlapping blocks?
5096 val="$undef"
5097 case "$d_bcopy" in
5098 "$define")
5099         echo " "
5100         echo "Checking to see if your bcopy() can do overlapping copies..." >&4
5101         $cat >foo.c <<'EOCP'
5102 main()
5103 {
5104 char buf[128], abc[128];
5105 char *b;
5106 int len;
5107 int off;
5108 int align;
5109
5110 bcopy("abcdefghijklmnopqrstuvwxyz0123456789", abc, 36);
5111
5112 for (align = 7; align >= 0; align--) {
5113         for (len = 36; len; len--) {
5114                 b = buf+align;
5115                 bcopy(abc, b, len);
5116                 for (off = 1; off <= len; off++) {
5117                         bcopy(b, b+off, len);
5118                         bcopy(b+off, b, len);
5119                         if (bcmp(b, abc, len))
5120                                 exit(1);
5121                 }
5122         }
5123 }
5124 exit(0);
5125 }
5126 EOCP
5127         if $cc foo.c -o safebcpy $ccflags $ldflags $libs >/dev/null 2>&1 ; then
5128                 if ./safebcpy 2>/dev/null; then
5129                         echo "Yes, it can."
5130                         val="$define"
5131                 else
5132                         echo "It can't, sorry."
5133                 fi
5134         else
5135                 echo "(I can't compile the test program, so we'll assume not...)"
5136         fi
5137         ;;
5138 esac
5139 $rm -f foo.* safebcpy core
5140 set d_safebcpy
5141 eval $setvar
5142
5143 : can memcpy handle overlapping blocks?
5144 val="$undef"
5145 case "$d_memcpy" in
5146 "$define")
5147         echo " "
5148         echo "Checking to see if your memcpy() can do overlapping copies..." >&4
5149         $cat >foo.c <<'EOCP'
5150 main()
5151 {
5152 char buf[128], abc[128];
5153 char *b;
5154 int len;
5155 int off;
5156 int align;
5157
5158 memcpy(abc, "abcdefghijklmnopqrstuvwxyz0123456789", 36);
5159
5160 for (align = 7; align >= 0; align--) {
5161         for (len = 36; len; len--) {
5162                 b = buf+align;
5163                 memcpy(abc, b, len);
5164                 for (off = 1; off <= len; off++) {
5165                         memcpy(b, b+off, len);
5166                         memcpy(b+off, b, len);
5167                         if (memcmp(b, abc, len))
5168                                 exit(1);
5169                 }
5170         }
5171 }
5172 exit(0);
5173 }
5174 EOCP
5175         if $cc foo.c -o safemcpy $ccflags $ldflags $libs >/dev/null 2>&1 ; then
5176                 if ./safemcpy 2>/dev/null; then
5177                         echo "Yes, it can."
5178                         val="$define"
5179                 else
5180                         echo "It can't, sorry."
5181                 fi
5182         else
5183                 echo "(I can't compile the test program, so we'll assume not...)"
5184         fi
5185         ;;
5186 esac
5187 $rm -f foo.* safemcpy core
5188 set d_safemcpy
5189 eval $setvar
5190
5191 : see if select exists
5192 set select d_select
5193 eval $inlibc
5194
5195 : see if semctl exists
5196 set semctl d_semctl
5197 eval $inlibc
5198
5199 : see if semget exists
5200 set semget d_semget
5201 eval $inlibc
5202
5203 : see if semop exists
5204 set semop d_semop
5205 eval $inlibc
5206
5207 : see how much of the 'sem*(2)' library is present.
5208 h_sem=true
5209 echo " "
5210 case "$d_semctl$d_semget$d_semop" in
5211 *"$undef"*) h_sem=false;;
5212 esac
5213 : we could also check for sys/ipc.h ...
5214 if $h_sem && $test `./findhdr sys/sem.h`; then
5215         echo "You have the full sem*(2) library." >&4
5216         val="$define"
5217 else
5218         echo "You don't have the full sem*(2) library." >&4
5219         val="$undef"
5220 fi
5221 set d_sem
5222 eval $setvar
5223
5224 : see if setegid exists
5225 set setegid d_setegid
5226 eval $inlibc
5227
5228 : see if seteuid exists
5229 set seteuid d_seteuid
5230 eval $inlibc
5231
5232 : see if setlinebuf exists
5233 set setlinebuf d_setlinebuf
5234 eval $inlibc
5235
5236 : see if setlocale exists
5237 set setlocale d_setlocale
5238 eval $inlibc
5239
5240 : see if setpgid exists
5241 set setpgid d_setpgid
5242 eval $inlibc
5243
5244 : see if setpgrp2 exists
5245 set setpgrp2 d_setpgrp2
5246 eval $inlibc
5247
5248 : see if setpriority exists
5249 set setpriority d_setprior
5250 eval $inlibc
5251
5252 : see if setregid exists
5253 set setregid d_setregid
5254 eval $inlibc
5255 set setresgid d_setresgid
5256 eval $inlibc
5257
5258 : see if setreuid exists
5259 set setreuid d_setreuid
5260 eval $inlibc
5261 set setresuid d_setresuid
5262 eval $inlibc
5263
5264 : see if setrgid exists
5265 set setrgid d_setrgid
5266 eval $inlibc
5267
5268 : see if setruid exists
5269 set setruid d_setruid
5270 eval $inlibc
5271
5272 : see if setsid exists
5273 set setsid d_setsid
5274 eval $inlibc
5275
5276 : see if shmctl exists
5277 set shmctl d_shmctl
5278 eval $inlibc
5279
5280 : see if shmget exists
5281 set shmget d_shmget
5282 eval $inlibc
5283
5284 : see if shmat exists
5285 set shmat d_shmat
5286 eval $inlibc
5287 : see what shmat returns
5288 case "$d_shmat" in
5289 "$define")
5290         $cat >shmat.c <<'END'
5291 #include <sys/shm.h>
5292 void *shmat();
5293 END
5294         if $cc $ccflags -c shmat.c >/dev/null 2>&1; then
5295                 shmattype='void *'
5296         else
5297                 shmattype='char *'
5298         fi
5299         echo "and it returns ($shmattype)." >&4
5300         : see if a prototype for shmat is available
5301         $cppstdin $cppflags $cppminus < $usrinc/sys/shm.h > shmat.c 2>/dev/null
5302         if $contains 'shmat.*(' shmat.c >/dev/null 2>&1; then
5303                 val="$define"
5304         else
5305                 val="$undef"
5306         fi
5307         $rm -f shmat.[co]
5308         ;;
5309 *)
5310         val="$undef"
5311         ;;
5312 esac
5313 set d_shmatprototype
5314 eval $setvar
5315
5316 : see if shmdt exists
5317 set shmdt d_shmdt
5318 eval $inlibc
5319
5320 : see how much of the 'shm*(2)' library is present.
5321 h_shm=true
5322 echo " "
5323 case "$d_shmctl$d_shmget$d_shmat$d_shmdt" in
5324 *"$undef"*) h_shm=false;;
5325 esac
5326 : we could also check for sys/ipc.h ...
5327 if $h_shm && $test `./findhdr sys/shm.h`; then
5328         echo "You have the full shm*(2) library." >&4
5329         val="$define"
5330 else
5331         echo "You don't have the full shm*(2) library." >&4
5332         val="$undef"
5333 fi
5334 set d_shm
5335 eval $setvar
5336
5337 socketlib=''
5338 sockethdr=''
5339 : see whether socket exists
5340 echo " "
5341 $echo $n "Hmm... $c" >&4
5342 if set socket val -f d_socket; eval $csym; $val; then
5343         echo "Looks like you have Berkeley networking support." >&4
5344         d_socket="$define"
5345         if set setsockopt val -f; eval $csym; $val; then
5346                 d_oldsock="$undef"
5347         else
5348                 echo "...but it uses the old 4.1c interface, rather than 4.2" >&4
5349                 d_oldsock="$define"
5350         fi
5351 else
5352         if $contains socklib libc.list >/dev/null 2>&1; then
5353                 echo "Looks like you have Berkeley networking support." >&4
5354                 d_socket="$define"
5355                 : we will have to assume that it supports the 4.2 BSD interface
5356                 d_oldsock="$undef"
5357         else
5358                 echo "You don't have Berkeley networking in libc.a..." >&4
5359                 if test -f /usr/lib/libnet.a; then
5360                         ( (nm $nm_opt /usr/lib/libnet.a | eval $nm_extract) ||  \
5361                         ar t /usr/lib/libnet.a) 2>/dev/null >> libc.list
5362                         if $contains socket libc.list >/dev/null 2>&1; then
5363                         echo "...but the Wollongong group seems to have hacked it in." >&4
5364                                 socketlib="-lnet"
5365                                 sockethdr="-I/usr/netinclude"
5366                                 d_socket="$define"
5367                                 if $contains setsockopt libc.list >/dev/null 2>&1; then
5368                                         d_oldsock="$undef"
5369                                 else
5370                                         echo "...using the old 4.1c interface, rather than 4.2" >&4
5371                                         d_oldsock="$define"
5372                                 fi
5373                         else
5374                                 echo "or even in libnet.a, which is peculiar." >&4
5375                                 d_socket="$undef"
5376                                 d_oldsock="$undef"
5377                         fi
5378                 else
5379                         echo "or anywhere else I see." >&4
5380                         d_socket="$undef"
5381                         d_oldsock="$undef"
5382                 fi
5383         fi
5384 fi
5385
5386 : see if socketpair exists
5387 set socketpair d_sockpair
5388 eval $inlibc
5389
5390 : see if stat knows about block sizes
5391 echo " "
5392 xxx=`./findhdr sys/stat.h`
5393 if $contains 'st_blocks;' "$xxx" >/dev/null 2>&1 ; then
5394         if $contains 'st_blksize;' "$xxx" >/dev/null 2>&1 ; then
5395                 echo "Your stat() knows about block sizes." >&4
5396                 val="$define"
5397         else
5398                 echo "Your stat() doesn't know about block sizes." >&4
5399                 val="$undef"
5400         fi
5401 else
5402         echo "Your stat() doesn't know about block sizes." >&4
5403         val="$undef"
5404 fi
5405 set d_statblks
5406 eval $setvar
5407
5408 : see if strcoll exists
5409 set strcoll d_strcoll
5410 eval $inlibc
5411
5412 : check for structure copying
5413 echo " "
5414 echo "Checking to see if your C compiler can copy structs..." >&4
5415 $cat >try.c <<'EOCP'
5416 main()
5417 {
5418         struct blurfl {
5419                 int dyick;
5420         } foo, bar;
5421
5422         foo = bar;
5423 }
5424 EOCP
5425 if $cc -c try.c >/dev/null 2>&1 ; then
5426         val="$define"
5427         echo "Yup, it can."
5428 else
5429         val="$undef"
5430         echo "Nope, it can't."
5431 fi
5432 set d_strctcpy
5433 eval $setvar
5434 $rm -f try.*
5435
5436 : see if strerror and/or sys_errlist[] exist
5437 echo " "
5438 if set strerror val -f d_strerror; eval $csym; $val; then
5439         echo 'strerror() found.' >&4
5440         d_strerror="$define"
5441         d_strerrm='strerror(e)'
5442         if set sys_errlist val -a d_syserrlst; eval $csym; $val; then   
5443                 echo "(You also have sys_errlist[], so we could roll our own strerror.)" 
5444                 d_syserrlst="$define"
5445         else
5446         echo "(Since you don't have sys_errlist[], sterror() is welcome.)"
5447                 d_syserrlst="$undef"
5448         fi
5449 elif xxx=`./findhdr string.h`; test "$xxx" || xxx=`./findhdr strings.h`; \
5450         $contains '#[   ]*define.*strerror' "$xxx" >/dev/null 2>&1; then
5451         echo 'strerror() found in string header.' >&4
5452         d_strerror="$define"
5453         d_strerrm='strerror(e)'
5454         if set sys_errlist val -a d_syserrlst; eval $csym; $val; then   
5455                 echo "(Most probably, strerror() uses sys_errlist[] for descriptions.)"
5456                 d_syserrlst="$define"
5457         else
5458                 echo "(You don't appear to have any sys_errlist[], how can this be?)"
5459                 d_syserrlst="$undef"
5460         fi
5461 elif set sys_errlist val -a d_syserrlst; eval $csym; $val; then
5462 echo "strerror() not found, but you have sys_errlist[] so we'll use that." >&4
5463         d_strerror="$undef"
5464         d_syserrlst="$define"
5465         d_strerrm='((e)<0||(e)>=sys_nerr?"unknown":sys_errlist[e])'
5466 else
5467         echo 'strerror() and sys_errlist[] NOT found.' >&4
5468         d_strerror="$undef"
5469         d_syserrlst="$undef"
5470         d_strerrm='"unknown"'
5471 fi
5472
5473 : see if strxfrm exists
5474 set strxfrm d_strxfrm
5475 eval $inlibc
5476
5477 : see if symlink exists
5478 set symlink d_symlink
5479 eval $inlibc
5480
5481 : see if syscall exists
5482 set syscall d_syscall
5483 eval $inlibc
5484
5485 : see if sysconf exists
5486 set sysconf d_sysconf
5487 eval $inlibc
5488
5489 : see if system exists
5490 set system d_system
5491 eval $inlibc
5492
5493 : see if tcgetpgrp exists
5494 set tcgetpgrp d_tcgetpgrp
5495 eval $inlibc
5496
5497 : see if tcsetpgrp exists
5498 set tcsetpgrp d_tcsetpgrp
5499 eval $inlibc
5500
5501 : define an is-a-typedef? function
5502 typedef='type=$1; var=$2; def=$3; shift; shift; shift; inclist=$@;
5503 case "$inclist" in
5504 "") inclist="sys/types.h";;
5505 esac;
5506 eval "varval=\$$var";
5507 case "$varval" in
5508 "")
5509         $rm -f temp.c;
5510         for inc in $inclist; do
5511                 echo "#include <$inc>" >>temp.c;
5512         done;
5513         $cppstdin $cppflags $cppminus < temp.c >temp.E 2>/dev/null;
5514         if $contains $type temp.E >/dev/null 2>&1; then
5515                 eval "$var=$type";
5516         else
5517                 eval "$var=$def";
5518         fi;
5519         $rm -f temp.?;;
5520 *) eval "$var=$varval";;
5521 esac'
5522
5523 : see if this is a sys/times.h system
5524 set sys/times.h i_systimes
5525 eval $inhdr
5526
5527 : see if times exists
5528 echo " "
5529 if set times val -f d_times; eval $csym; $val; then
5530         echo 'times() found.' >&4
5531         d_times="$define"
5532         inc=''
5533         case "$i_systimes" in
5534         "$define") inc='sys/times.h';;
5535         esac
5536         set clock_t clocktype long stdio.h sys/types.h $inc
5537         eval $typedef
5538         dflt="$clocktype"
5539         echo " "
5540         rp="What type is returned by times() on this sytem?"
5541         . ./myread
5542         clocktype="$ans"
5543 else
5544         echo 'times() NOT found, hope that will do.' >&4
5545         d_times="$undef"
5546         clocktype='int'
5547 fi
5548
5549 : see if truncate exists
5550 set truncate d_truncate
5551 eval $inlibc
5552
5553 : see if tzname[] exists
5554 echo " "
5555 if set tzname val -a d_tzname; eval $csym; $val; then
5556         val="$define"
5557         echo 'tzname[] found.' >&4
5558 else
5559         val="$undef"
5560         echo 'tzname[] NOT found.' >&4
5561 fi
5562 set d_tzname
5563 eval $setvar
5564
5565 : see if umask exists
5566 set umask d_umask
5567 eval $inlibc
5568
5569 : see if we have to deal with yellow pages, now NIS.
5570 if $test -d /usr/etc/yp || $test -d /etc/yp; then
5571         if $test -f /usr/etc/nibindd; then
5572                 echo " "
5573                 echo "I'm fairly confident you're on a NeXT."
5574                 echo " "
5575                 rp='Do you get the hosts file via NetInfo?'
5576                 dflt=y
5577                 case "$hostcat" in
5578                 nidump*) ;;
5579                 '') ;;
5580                 *) dflt=n;;
5581                 esac
5582                 . ./myread
5583                 case "$ans" in
5584                 y*) hostcat='nidump hosts .';;
5585                 *) hostcat='cat /etc/hosts';;
5586                 esac
5587         fi
5588         case "$hostcat" in
5589         nidump*) ;;
5590         *)
5591                 case "$hostcat" in
5592                 *ypcat*) dflt=y;;
5593                 '') if $contains '^\+' /etc/passwd >/dev/null 2>&1; then
5594                                 dflt=y
5595                         else
5596                                 dflt=n
5597                         fi;;
5598                 *) dflt=n;;
5599                 esac
5600                 echo " "
5601                 rp='Are you getting the hosts file via yellow pages?'
5602                 . ./myread
5603                 case "$ans" in
5604                 y*) hostcat='ypcat hosts';;
5605                 *) hostcat='cat /etc/hosts';;
5606                 esac
5607                 ;;
5608         esac
5609 fi
5610
5611 : now get the host name
5612 echo " "
5613 echo "Figuring out host name..." >&4
5614 case "$myhostname" in
5615 '') cont=true
5616         echo 'Maybe "hostname" will work...'
5617         if tans=`sh -c hostname 2>&1` ; then
5618                 myhostname=$tans
5619                 phostname=hostname
5620                 cont=''
5621         fi
5622         ;;
5623 *) cont='';;
5624 esac
5625 if $test "$cont"; then
5626         if ./xenix; then
5627                 echo 'Oh, dear.  Maybe "/etc/systemid" is the key...'
5628                 if tans=`cat /etc/systemid 2>&1` ; then
5629                         myhostname=$tans
5630                         phostname='cat /etc/systemid'
5631                         echo "Whadyaknow.  Xenix always was a bit strange..."
5632                         cont=''
5633                 fi
5634         elif $test -r /etc/systemid; then
5635                 echo "(What is a non-Xenix system doing with /etc/systemid?)"
5636         fi
5637 fi
5638 if $test "$cont"; then
5639         echo 'No, maybe "uuname -l" will work...'
5640         if tans=`sh -c 'uuname -l' 2>&1` ; then
5641                 myhostname=$tans
5642                 phostname='uuname -l'
5643         else
5644                 echo 'Strange.  Maybe "uname -n" will work...'
5645                 if tans=`sh -c 'uname -n' 2>&1` ; then
5646                         myhostname=$tans
5647                         phostname='uname -n'
5648                 else
5649                         echo 'Oh well, maybe I can mine it out of whoami.h...'
5650                         if tans=`sh -c $contains' sysname $usrinc/whoami.h' 2>&1` ; then
5651                                 myhostname=`echo "$tans" | $sed 's/^.*"\(.*\)"/\1/'`
5652                                 phostname="sed -n -e '"'/sysname/s/^.*\"\\(.*\\)\"/\1/{'"' -e p -e q -e '}' <$usrinc/whoami.h"
5653                         else
5654                                 case "$myhostname" in
5655                                 '') echo "Does this machine have an identity crisis or something?"
5656                                         phostname='';;
5657                                 *)
5658                                         echo "Well, you said $myhostname before..."
5659                                         phostname='echo $myhostname';;
5660                                 esac
5661                         fi
5662                 fi
5663         fi
5664 fi
5665 : you do not want to know about this
5666 set $myhostname
5667 myhostname=$1
5668
5669 : verify guess
5670 if $test "$myhostname" ; then
5671         dflt=y
5672         rp='Your host name appears to be "'$myhostname'".'" Right?"
5673         . ./myread
5674         case "$ans" in
5675         y*) ;;
5676         *) myhostname='';;
5677         esac
5678 fi
5679
5680 : bad guess or no guess
5681 while $test "X$myhostname" = X ; do
5682         dflt=''
5683         rp="Please type the (one word) name of your host:"
5684         . ./myread
5685         myhostname="$ans"
5686 done
5687
5688 : translate upper to lower if necessary
5689 case "$myhostname" in
5690 *[A-Z]*)
5691         echo "(Normalizing case in your host name)"
5692         myhostname=`echo $myhostname | ./tr '[A-Z]' '[a-z]'`
5693         ;;
5694 esac
5695
5696 : a little sanity check here
5697 case "$phostname" in
5698 '') ;;
5699 *)
5700         case `$phostname | ./tr '[A-Z]' '[a-z]'` in
5701         $myhostname$mydomain|$myhostname) ;;
5702         *)
5703                 case "$phostname" in
5704                 sed*)
5705                         echo "(That doesn't agree with your whoami.h file, by the way.)"
5706                         ;;
5707                 *)
5708                         echo "(That doesn't agree with your $phostname command, by the way.)"
5709                         ;;
5710                 esac
5711         ;;
5712         esac
5713         ;;
5714 esac
5715
5716 : see how we will look up host name
5717 echo " "
5718 if false; then
5719         : dummy stub to allow use of elif
5720 elif set uname val -f d_uname; eval $csym; $val; then
5721         if ./xenix; then
5722                 $cat <<'EOM'
5723 uname() was found, but you're running xenix, and older versions of xenix
5724 have a broken uname(). If you don't really know whether your xenix is old
5725 enough to have a broken system call, use the default answer.
5726
5727 EOM
5728                 dflt=y
5729                 case "$d_uname" in
5730                 "$define") dflt=n;;
5731                 esac
5732                 rp='Is your uname() broken?'
5733                 . ./myread
5734                 case "$ans" in
5735                 n*) d_uname="$define"; call=uname;;
5736                 esac
5737         else
5738                 echo 'uname() found.' >&4
5739                 d_uname="$define"
5740                 call=uname
5741         fi
5742 fi
5743 case "$d_gethname" in
5744 '') d_gethname="$undef";;
5745 esac
5746 case "$d_uname" in
5747 '') d_uname="$undef";;
5748 esac
5749 case "$d_phostname" in
5750 '') d_phostname="$undef";;
5751 esac
5752
5753 : backward compatibility for d_hvfork
5754 if test X$d_hvfork != X; then
5755         d_vfork="$d_hvfork"
5756         d_hvfork=''
5757 fi
5758 : see if there is a vfork
5759 val=''
5760 set vfork val
5761 eval $inlibc
5762
5763 : Ok, but do we want to use it. vfork is reportedly unreliable in 
5764 : perl on Solaris 2.x, and probably elsewhere.
5765 case "$val" in
5766 $define)
5767         echo " "
5768         case "$usevfork" in
5769         false) dflt='n';;
5770         *) dflt='y';;
5771         esac
5772         rp="Some systems have problems with vfork().  Do you want to use it?"
5773         . ./myread
5774         case "$ans" in
5775         y|Y) ;;
5776         *)
5777                 echo "Ok, we won't use vfork()."
5778                 val="$undef"
5779                 ;;
5780         esac
5781         ;;
5782 esac
5783 set d_vfork
5784 eval $setvar
5785 case "$d_vfork" in
5786 $define) usevfork='true';;
5787 *) usevfork='false';;
5788 esac
5789
5790 : see if this is an sysdir system
5791 set sys/dir.h i_sysdir
5792 eval $inhdr
5793
5794 : see if this is an sysndir system
5795 set sys/ndir.h i_sysndir
5796 eval $inhdr
5797
5798 : see if closedir exists
5799 set closedir d_closedir
5800 eval $inlibc
5801
5802 case "$d_closedir" in
5803 "$define")
5804         echo " "
5805         echo "Checking whether closedir() returns a status..." >&4
5806         cat > closedir.c <<EOM
5807 #$i_dirent I_DIRENT             /**/
5808 #$i_sysdir I_SYS_DIR            /**/
5809 #$i_sysndir I_SYS_NDIR          /**/
5810
5811 #if defined(I_DIRENT)
5812 #include <dirent.h>
5813 #if defined(NeXT) && defined(I_SYS_DIR) /* NeXT needs dirent + sys/dir.h */
5814 #include <sys/dir.h>
5815 #endif
5816 #else
5817 #ifdef I_SYS_NDIR
5818 #include <sys/ndir.h>
5819 #else
5820 #ifdef I_SYS_DIR
5821 #ifdef hp9000s500
5822 #include <ndir.h>       /* may be wrong in the future */
5823 #else
5824 #include <sys/dir.h>
5825 #endif
5826 #endif
5827 #endif
5828 #endif 
5829 int main() { return closedir(opendir(".")); }
5830 EOM
5831         if $cc $ccflags $ldflags -o closedir closedir.c $libs > /dev/null 2>&1; then
5832                 if ./closedir > /dev/null 2>&1 ; then
5833                         echo "Yes, it does."
5834                         val="$undef"
5835                 else
5836                         echo "No, it doesn't."
5837                         val="$define"
5838                 fi
5839         else
5840                 echo "(I can't seem to compile the test program--assuming it doesn't)"
5841                 val="$define"
5842         fi
5843         ;;
5844 *)
5845         val="$undef";
5846         ;;
5847 esac
5848 set d_void_closedir
5849 eval $setvar
5850 $rm -f closedir*
5851 : check for volatile keyword
5852 echo " "
5853 echo 'Checking to see if your C compiler knows about "volatile"...' >&4
5854 $cat >try.c <<'EOCP'
5855 main()
5856 {
5857         typedef struct _goo_struct goo_struct;
5858         goo_struct * volatile goo = ((goo_struct *)0);
5859         struct _goo_struct {
5860                 long long_int;
5861                 int reg_int;
5862                 char char_var;
5863         };
5864         typedef unsigned short foo_t;
5865         char *volatile foo;
5866         volatile int bar;
5867         volatile foo_t blech;
5868         foo = foo;
5869 }
5870 EOCP
5871 if $cc -c $ccflags try.c >/dev/null 2>&1 ; then
5872         val="$define"
5873         echo "Yup, it does."
5874 else
5875         val="$undef"
5876         echo "Nope, it doesn't."
5877 fi
5878 set d_volatile
5879 eval $setvar
5880 $rm -f try.*
5881
5882 : see if there is a wait4
5883 set wait4 d_wait4
5884 eval $inlibc
5885
5886 : see if waitpid exists
5887 set waitpid d_waitpid
5888 eval $inlibc
5889
5890 : see if wcstombs exists
5891 set wcstombs d_wcstombs
5892 eval $inlibc
5893
5894 : see if wctomb exists
5895 set wctomb d_wctomb
5896 eval $inlibc
5897
5898 : preserve RCS keywords in files with variable substitution, grrr
5899 Date='$Date'
5900 Id='$Id'
5901 Log='$Log'
5902 RCSfile='$RCSfile'
5903 Revision='$Revision'
5904
5905 : check for alignment requirements
5906 echo " "
5907 case "$alignbytes" in
5908 '') echo "Checking alignment constraints..." >&4
5909         $cat >try.c <<'EOCP'
5910 struct foobar {
5911         char foo;
5912         double bar;
5913 } try;
5914 main()
5915 {
5916         printf("%d\n", (char *)&try.bar - (char *)&try.foo);
5917 }
5918 EOCP
5919         if $cc $ccflags try.c -o try >/dev/null 2>&1; then
5920                 dflt=`./try`
5921         else
5922                 dflt='8'
5923                 echo"(I can't seem to compile the test program...)"
5924         fi
5925         ;;
5926 *) dflt="$alignbytes"
5927         ;;
5928 esac
5929 rp="Doubles must be aligned on a how-many-byte boundary?"
5930 . ./myread
5931 alignbytes="$ans"
5932 $rm -f try.c try
5933
5934 : determine where public executables go
5935 echo " "
5936 set dflt bin bin
5937 eval $prefixit
5938 fn=d~
5939 rp='Pathname where the public executables will reside?'
5940 . ./getfile
5941 if $test "X$ansexp" != "X$binexp"; then
5942         installbin=''
5943 fi
5944 bin="$ans"
5945 binexp="$ansexp"
5946 if $afs; then
5947         $cat <<EOM
5948
5949 Since you are running AFS, I need to distinguish the directory in which
5950 executables reside from the directory in which they are installed (and from
5951 which they are presumably copied to the former directory by occult means).
5952
5953 EOM
5954         case "$installbin" in
5955         '') dflt=`echo $binexp | sed 's#^/afs/#/afs/.#'`;;
5956         *) dflt="$installbin";;
5957         esac
5958         fn=de~
5959         rp='Where will public executables be installed?'
5960         . ./getfile
5961         installbin="$ans"
5962 else
5963         installbin="$binexp"
5964 fi
5965
5966 : check for ordering of bytes in a long
5967 case "$byteorder" in
5968 '')
5969         $cat <<'EOM'
5970   
5971 In the following, larger digits indicate more significance.  A big-endian
5972 machine like a Pyramid or a Motorola 680?0 chip will come out to 4321. A
5973 little-endian machine like a Vax or an Intel 80?86 chip would be 1234. Other
5974 machines may have weird orders like 3412.  A Cray will report 87654321. If
5975 the test program works the default is probably right.
5976 I'm now running the test program...
5977 EOM
5978         $cat >try.c <<'EOCP'
5979 #include <stdio.h>
5980 main()
5981 {
5982         int i;
5983         union {
5984                 unsigned long l;
5985                 char c[sizeof(long)];
5986         } u;
5987
5988         if (sizeof(long) > 4)
5989                 u.l = (0x08070605L << 32) | 0x04030201L;
5990         else
5991                 u.l = 0x04030201L;
5992         for (i = 0; i < sizeof(long); i++)
5993                 printf("%c", u.c[i]+'0');
5994         printf("\n");
5995 }
5996 EOCP
5997         if $cc $ccflags try.c -o try >/dev/null 2>&1 ; then
5998                 dflt=`./try`
5999                 case "$dflt" in
6000                 ????|????????) echo "(The test program ran ok.)";;
6001                 *) echo "(The test program didn't run right for some reason.)";;
6002                 esac
6003         else
6004                 dflt='4321'
6005                 cat <<'EOM'
6006 (I can't seem to compile the test program.  Guessing big-endian...)
6007 EOM
6008         fi
6009         ;;
6010 *)
6011         echo " "
6012         dflt="$byteorder"
6013         ;;
6014 esac
6015 rp="What is the order of bytes in a long?"
6016 . ./myread
6017 byteorder="$ans"
6018 $rm -f try.c try
6019
6020 : how do we catenate cpp tokens here?
6021 echo " "
6022 echo "Checking to see how your cpp does stuff like catenate tokens..." >&4
6023 $cat >cpp_stuff.c <<'EOCP'
6024 #define RCAT(a,b)a/**/b
6025 #define ACAT(a,b)a ## b
6026 RCAT(Rei,ser)
6027 ACAT(Cir,cus)
6028 EOCP
6029 $cppstdin $cppflags $cppminus <cpp_stuff.c >cpp_stuff.out 2>&1
6030 if $contains 'Circus' cpp_stuff.out >/dev/null 2>&1; then
6031         echo "Oh!  Smells like ANSI's been here."
6032         echo "We can catify or stringify, separately or together!"
6033         cpp_stuff=42
6034 elif $contains 'Reiser' cpp_stuff.out >/dev/null 2>&1; then
6035         echo "Ah, yes!  The good old days!"
6036         echo "However, in the good old days we don't know how to stringify and"
6037         echo "catify at the same time."
6038         cpp_stuff=1
6039 else
6040         $cat >&4 <<EOM
6041 Hmm, I don't seem to be able to catenate tokens with your cpp.  You're going
6042 to have to edit the values of CAT[2-5] in config.h...
6043 EOM
6044         cpp_stuff="/* Help! How do we handle cpp_stuff? */*/"
6045 fi
6046 $rm -f cpp_stuff.*
6047
6048 : see if this is a db.h system
6049 set db.h i_db
6050 eval $inhdr
6051
6052 case "$i_db" in
6053 define)
6054         : Check the return type needed for hash 
6055         echo "Checking return type needed for hash for Berkeley DB ..." >&4
6056         cat >try.c <<'EOCP'
6057 #include <sys/types.h>
6058 #include <db.h>
6059 u_int32_t 
6060 hash_cb (ptr, size)
6061 const void * ptr ;
6062 size_t size ;
6063 {
6064 }
6065 HASHINFO info ;
6066 main()
6067 {
6068     info.hash = hash_cb ;
6069 }
6070 EOCP
6071         if $cc $ccflags -c try.c >try.out 2>&1 ; then
6072                 if $contains warning try.out >>/dev/null 2>&1 ; then
6073                         db_hashtype='int'
6074                 else
6075                         db_hashtype='u_int32_t'
6076                 fi
6077         else
6078                 echo "I can't seem to compile the test program." >&4
6079                 db_hashtype=int
6080         fi
6081         $rm -f try.[co]
6082         echo "Your version of Berkeley DB uses $db_hashtype for hash."
6083         ;;
6084 *)      db_hashtype=int
6085         ;;
6086 esac
6087
6088 case "$i_db" in
6089 define)
6090         : Check the return type needed for prefix 
6091         echo "Checking return type needed for prefix for Berkeley DB ..." >&4
6092         cat >try.c <<'EOCP'
6093 #include <sys/types.h>
6094 #include <db.h>
6095 size_t 
6096 prefix_cb (key1, key2)
6097 const DBT * key1 ;
6098 const DBT * key2 ;
6099 {
6100 }
6101 BTREEINFO info ;
6102 main()
6103 {
6104     info.prefix = prefix_cb ;
6105 }
6106 EOCP
6107         if $cc $ccflags -c try.c  >try.out 2>&1 ; then
6108                 if $contains warning try.out >>/dev/null 2>&1 ; then
6109                         db_prefixtype='int'
6110                 else
6111                         db_prefixtype='size_t'
6112                 fi
6113         else
6114                 echo "I can't seem to compile the test program." >&4
6115                 db_prefixtype='int'
6116         fi
6117         $rm -f try.[co]
6118         echo "Your version of Berkeley DB uses $db_prefixtype for prefix."
6119         ;;
6120 *)      db_prefixtype='int'
6121         ;;
6122 esac
6123
6124 : check for void type
6125 echo " "
6126 echo "Checking to see how well your C compiler groks the void type..." >&4
6127 echo " "
6128 $cat >&4 <<EOM
6129   Support flag bits are:
6130     1: basic void declarations.
6131     2: arrays of pointers to functions returning void.
6132     4: operations between pointers to and addresses of void functions.
6133     8: generic void pointers.
6134 EOM
6135 echo " "
6136 case "$voidflags" in
6137 '')
6138         $cat >try.c <<'EOCP'
6139 #if TRY & 1
6140 void main() {
6141 #else
6142 main() {
6143 #endif
6144         extern void moo();      /* function returning void */
6145         void (*goo)();          /* ptr to func returning void */
6146 #if TRY & 8
6147         void *hue;              /* generic ptr */
6148 #endif
6149 #if TRY & 2
6150         void (*foo[10])();
6151 #endif
6152
6153 #if TRY & 4
6154         if(goo == moo) {
6155                 exit(0);
6156         }
6157 #endif
6158         exit(0);
6159 }
6160 EOCP
6161         if $cc -c -DTRY=$defvoidused try.c >.out 2>&1 ; then
6162                 voidflags=$defvoidused
6163         echo "It appears to support void to the level $package wants ($defvoidused)."
6164                 if $contains warning .out >/dev/null 2>&1; then
6165                         echo "However, you might get some warnings that look like this:"
6166                         $cat .out
6167                 fi
6168         else
6169 echo "Hmm, your compiler has some difficulty with void. Checking further..." >&4
6170                 if $cc -c -DTRY=1 try.c >/dev/null 2>&1 ; then
6171                         echo "It supports 1..."
6172                         if $cc -c -DTRY=3 try.c >/dev/null 2>&1 ; then
6173                                 echo "It also supports 2..."
6174                                 if $cc -c -DTRY=7 try.c >/dev/null 2>&1 ; then
6175                                         voidflags=7
6176                                         echo "And it supports 4 but not 8 definitely."
6177                                 else
6178                                         echo "It doesn't support 4..."
6179                                         if $cc -c -DTRY=11 try.c >/dev/null 2>&1 ; then
6180                                                 voidflags=11
6181                                                 echo "But it supports 8."
6182                                         else
6183                                                 voidflags=3
6184                                                 echo "Neither does it support 8."
6185                                         fi
6186                                 fi
6187                         else
6188                                 echo "It does not support 2..."
6189                                 if $cc -c -DTRY=13 try.c >/dev/null 2>&1 ; then
6190                                         voidflags=13
6191                                         echo "But it supports 4 and 8."
6192                                 else
6193                                         if $cc -c -DTRY=5 try.c >/dev/null 2>&1 ; then
6194                                                 voidflags=5
6195                                                 echo "And it supports 4 but has not heard about 8."
6196                                         else
6197                                                 echo "However it supports 8 but not 4."
6198                                         fi
6199                                 fi
6200                         fi
6201                 else
6202                         echo "There is no support at all for void."
6203                         voidflags=0
6204                 fi
6205         fi
6206 esac
6207 dflt="$voidflags";
6208 rp="Your void support flags add up to what?"
6209 . ./myread
6210 voidflags="$ans"
6211 $rm -f try.* .out
6212
6213 : see if dbm.h is available
6214 set dbm.h t_dbm
6215 eval $inhdr
6216 case "$t_dbm" in
6217 $define)
6218         : see if dbmclose exists
6219         set dbmclose d_dbmclose
6220         eval $inlibc
6221         case "$d_dbmclose" in
6222         $undef)
6223                 t_dbm="$undef"
6224                 echo "We won't be including <dbm.h>"
6225                 ;;
6226         esac
6227         ;;
6228 esac
6229 val="$t_dbm"
6230 set i_dbm
6231 eval $setvar
6232
6233 : see if ndbm.h is available
6234 set ndbm.h t_ndbm
6235 eval $inhdr
6236 case "$t_ndbm" in
6237 $define)
6238         : see if dbm_open exists
6239         set dbm_open d_dbm_open
6240         eval $inlibc
6241         case "$d_dbm_open" in
6242         $undef)
6243                 t_ndbm="$undef"
6244                 echo "We won't be including <ndbm.h>"
6245                 ;;
6246         esac
6247         ;;
6248 esac
6249 val="$t_ndbm"
6250 set i_ndbm
6251 eval $setvar
6252
6253 : see if gdbm.h is available
6254 set gdbm.h t_gdbm
6255 eval $inhdr
6256 case "$t_gdbm" in
6257 $define)
6258         : see if gdbm_open exists
6259         set gdbm_open d_gdbm_open
6260         eval $inlibc
6261         case "$d_gdbm_open" in
6262         $undef)
6263                 t_gdbm="$undef"
6264                 echo "We won't be including <gdbm.h>"
6265                 ;;
6266         esac
6267         ;;
6268 esac
6269 val="$t_gdbm"
6270 set i_gdbm
6271 eval $setvar
6272
6273 echo " "
6274 echo "Looking for extensions..." >&4
6275 cd ../ext
6276 known_extensions=''
6277 for xxx in * ; do
6278         if $test -f $xxx/$xxx.xs; then
6279                 known_extensions="$known_extensions $xxx"
6280         fi
6281 done
6282 set X $known_extensions
6283 shift
6284 known_extensions="$*"
6285 cd ../UU
6286
6287 : Now see which are supported on this system.
6288 avail_ext=''
6289 for xxx in $known_extensions ; do
6290     case "$xxx" in
6291     DB_File) case "$i_db" in 
6292             $define) avail_ext="$avail_ext $xxx" ;;
6293             esac
6294             ;;
6295     GDBM_File) case "$i_gdbm" in 
6296             $define) avail_ext="$avail_ext $xxx" ;;
6297             esac
6298             ;;
6299     NDBM_File) case "$i_ndbm" in 
6300             $define) avail_ext="$avail_ext $xxx" ;;
6301             esac
6302             ;;
6303     ODBM_File) case "$i_dbm" in 
6304             $define) avail_ext="$avail_ext $xxx" ;;
6305             esac
6306             ;;
6307     POSIX) case "$useposix" in 
6308             true|define|y) avail_ext="$avail_ext $xxx" ;;
6309             esac
6310             ;;
6311     Socket) case "$d_socket" in 
6312             $define) avail_ext="$avail_ext $xxx" ;;
6313             esac
6314             ;;
6315     *)      avail_ext="$avail_ext $xxx"
6316             ;;
6317     esac
6318 done
6319
6320 set X $avail_ext
6321 shift
6322 avail_ext="$*"
6323
6324 case $usedl in
6325 $define)
6326         $cat <<EOM
6327 A number of extensions are supplied with $package.  You may choose to
6328 compile these extensions for dynamic loading (the default), compile
6329 them into the $package executable (static loading), or not include
6330 them at all.  Answer "none" to include no extensions.
6331
6332 EOM
6333         case "$dynamic_ext" in
6334         ''|' ') dflt="$avail_ext" ;;
6335         *)      dflt="$dynamic_ext" ;;
6336         esac
6337         case "$dflt" in
6338         '')     dflt=none;;
6339         esac
6340         rp="What extensions do you wish to load dynamically?"
6341         . ./myread
6342         case "$ans" in
6343         none) dynamic_ext='' ;;
6344         *) dynamic_ext="$ans" ;;
6345         esac
6346
6347         case "$static_ext" in
6348         ''|' ')
6349                 : Exclude those already listed in dynamic linking
6350                 dflt=''
6351                 for xxx in $avail_ext; do
6352                         case " $dynamic_ext " in
6353                         *" $xxx "*) ;;
6354                         *) dflt="$dflt $xxx" ;;
6355                         esac
6356                 done
6357                 set X $dflt
6358                 shift
6359                 dflt="$*"
6360                 ;;
6361         *)  dflt="$static_ext" 
6362                 ;;
6363         esac
6364
6365         case "$dflt" in
6366         '')     dflt=none;;
6367         esac
6368         rp="What extensions do you wish to load statically?"
6369         . ./myread
6370         case "$ans" in
6371         none) static_ext='' ;;
6372         *) static_ext="$ans" ;;
6373         esac
6374         ;;
6375 *)
6376         $cat <<EOM
6377 A number of extensions are supplied with $package.  Answer "none" 
6378 to include no extensions. 
6379
6380 EOM
6381         case "$static_ext" in
6382         ''|' ') dflt="$avail_ext" ;;
6383         *)      dflt="$static_ext" ;;
6384         esac
6385
6386         case "$dflt" in
6387         '')     dflt=none;;
6388         esac
6389         rp="What extensions do you wish to include?"
6390         . ./myread
6391         case "$ans" in
6392         none) static_ext='' ;;
6393         *) static_ext="$ans" ;;
6394         esac
6395         ;;
6396 esac
6397
6398 set X $dynamic_ext $static_ext
6399 shift
6400 extensions="$*"
6401
6402 : see what type file positions are declared as in the library
6403 set fpos_t fpostype long stdio.h sys/types.h
6404 eval $typedef
6405 echo " "
6406 dflt="$fpostype"
6407 rp="What is the type for file position used by fsetpos()?"
6408 . ./myread
6409 fpostype="$ans"
6410
6411 : Store the full pathname to the sed program for use in the C program
6412 full_sed=$sed
6413
6414 : see what type gids are declared as in the kernel
6415 set gid_t gidtype xxx stdio.h sys/types.h
6416 eval $typedef
6417 case "$gidtype" in
6418 xxx)
6419         xxx=`./findhdr sys/user.h`
6420         set `grep 'groups\[NGROUPS\];' "$xxx" 2>/dev/null` unsigned short
6421         case $1 in
6422         unsigned) dflt="$1 $2" ;;
6423         *) dflt="$1" ;;
6424         esac
6425         ;;
6426 *) dflt="$gidtype";;
6427 esac
6428 echo " "
6429 rp="What is the type for group ids returned by getgid()?"
6430 . ./myread
6431 gidtype="$ans"
6432
6433 : see if getgroups exists
6434 set getgroups d_getgrps
6435 eval $inlibc
6436
6437 : Find type of 2nd arg to getgroups
6438 echo " "
6439 case "$d_getgrps" in
6440 'define')
6441         case "$groupstype" in
6442         '') dflt="$gidtype" ;;
6443         *)  dflt="$groupstype" ;;
6444         esac
6445         $cat <<EOM
6446 What is the type of the second argument to getgroups()?  Usually this
6447 is the same as group ids, $gidtype, but not always.
6448
6449 EOM
6450         rp='What type is the second argument to getgroups()?'
6451         . ./myread
6452         groupstype="$ans"
6453         ;;
6454 *)  groupstype="$gidtype";;
6455 esac
6456
6457 : see what type lseek is declared as in the kernel
6458 set off_t lseektype long stdio.h sys/types.h
6459 eval $typedef
6460 echo " "
6461 dflt="$lseektype"
6462 rp="What type is lseek's offset on this system declared as?"
6463 . ./myread
6464 lseektype="$ans"
6465
6466 : determine where manual pages go
6467 set mansrc mansrc none
6468 eval $prefixit
6469 $cat <<EOM
6470
6471 $spackage has manual pages available in source form.
6472 EOM
6473 case "$nroff" in
6474 nroff)
6475         echo "However, you don't have nroff, so they're probably useless to you."
6476         case "$mansrc" in
6477         '') mansrc="none";;
6478         esac;;
6479 esac
6480 echo "If you don't want the manual sources installed, answer 'none'."
6481 case "$mansrc" in
6482 '')
6483         lookpath="$prefixexp/man/man1 $prefixexp/man/u_man/man1"
6484         lookpath="$lookpath $prefixexp/man/l_man/man1"
6485         lookpath="$lookpath /usr/local/man/man1 /opt/man/man1 /usr/man/manl"
6486         lookpath="$lookpath /usr/man/local/man1 /usr/man/l_man/man1"
6487         lookpath="$lookpath /usr/local/man/u_man/man1 /usr/local/man/l_man/man1"
6488         lookpath="$lookpath /usr/man/man.L"
6489         mansrc=`./loc . $prefixexp/man/man1 $lookpath`
6490         if $test -d "$mansrc"; then
6491                 dflt="$mansrc"
6492         else
6493                 dflt="$sysman"
6494         fi
6495         set dflt
6496         eval $prefixup
6497         ;;
6498 ' ') dflt=none;;
6499 *)  dflt="$mansrc"
6500         ;;
6501 esac
6502 echo " "
6503 fn=dn~
6504 rp='Where do the manual pages (source) go?'
6505 . ./getfile
6506 if test "X$mansrcexp" != "X$ansexp"; then
6507         installmansrc=''
6508 fi
6509 mansrc="$ans"
6510 mansrcexp="$ansexp"
6511 case "$mansrc" in
6512 '') mansrc=' '
6513         installmansrc='';;
6514 esac
6515 if $afs; then
6516         $cat <<EOM
6517
6518 Since you are running AFS, I need to distinguish the directory in which
6519 manual pages reside from the directory in which they are installed (and from
6520 which they are presumably copied to the former directory by occult means).
6521
6522 EOM
6523         case "$installmansrc" in
6524         '') dflt=`echo $mansrcexp | sed 's#^/afs/#/afs/.#'`;;
6525         *) dflt="$installmansrc";;
6526         esac
6527         fn=de~
6528         rp='Where will man pages be installed?'
6529         . ./getfile
6530         installmansrc="$ans"
6531 else
6532         installmansrc="$mansrcexp"
6533 fi
6534
6535 case "$mansrc" in
6536 ' ') manext='0';;
6537 *l) manext=l;;
6538 *n) manext=n;;
6539 *o) manext=l;;
6540 *p) manext=n;;
6541 *C) manext=C;;
6542 *L) manext=L;;
6543 *L1) manext=L1;;
6544 *) manext=1;;
6545 esac
6546
6547 : see what type is used for mode_t
6548 set mode_t modetype int stdio.h sys/types.h
6549 eval $typedef
6550 dflt="$modetype"
6551 echo " "
6552 rp="What type is used for file modes?"
6553 . ./myread
6554 modetype="$ans"
6555
6556 : set the base revision
6557 baserev=5.0
6558
6559 : get the patchlevel
6560 echo " "
6561 echo "Getting the current patchlevel..." >&4
6562 if $test -r ../patchlevel.h;then
6563         patchlevel=`awk '/PATCHLEVEL/ {print $3}' < ../patchlevel.h`
6564 else
6565         patchlevel=0
6566 fi
6567 echo "(You have $package $baserev PL$patchlevel.)"
6568
6569 : Cruising for prototypes
6570 echo " "
6571 echo "Checking out function prototypes..." >&4
6572 $cat >prototype.c <<'EOCP'
6573 main(int argc, char *argv[]) {
6574         exit(0);}
6575 EOCP
6576 if $cc $ccflags -c prototype.c >prototype.out 2>&1 ; then
6577         echo "Your C compiler appears to support function prototypes."
6578         val="$define"
6579 else
6580         echo "Your C compiler doesn't seem to understand function prototypes."
6581         val="$undef"
6582 fi
6583 set prototype
6584 eval $setvar
6585 $rm -f prototype*
6586
6587 : check for size of random number generator
6588 echo " "
6589 case "$randbits" in
6590 '')
6591         echo "Checking to see how many bits your rand function produces..." >&4
6592         $cat >try.c <<'EOCP'
6593 #include <stdio.h>
6594 main()
6595 {
6596         register int i;
6597         register unsigned long tmp;
6598         register unsigned long max = 0L;
6599
6600         for (i = 1000; i; i--) {
6601                 tmp = (unsigned long)rand();
6602                 if (tmp > max) max = tmp;
6603         }
6604         for (i = 0; max; i++)
6605                 max /= 2;
6606         printf("%d\n",i);
6607 }
6608 EOCP
6609         if $cc try.c -o try >/dev/null 2>&1 ; then
6610                 dflt=`try`
6611         else
6612                 dflt='?'
6613                 echo "(I can't seem to compile the test program...)"
6614         fi
6615         ;;
6616 *)
6617         dflt="$randbits"
6618         ;;
6619 esac
6620 rp='How many bits does your rand() function produce?'
6621 . ./myread
6622 randbits="$ans"
6623 $rm -f try.c try
6624
6625 : see if ar generates random libraries by itself
6626 echo " "
6627 echo "Checking how to generate random libraries on your machine..." >&4
6628 echo 'int bar1() { return bar2(); }' > bar1.c
6629 echo 'int bar2() { return 2; }' > bar2.c
6630 $cat > foo.c <<'EOP'
6631 main() { printf("%d\n", bar1()); exit(0); }
6632 EOP
6633 $cc $ccflags -c bar1.c >/dev/null 2>&1
6634 $cc $ccflags -c bar2.c >/dev/null 2>&1
6635 $cc $ccflags -c foo.c >/dev/null 2>&1
6636 ar rc bar.a bar2.o bar1.o >/dev/null 2>&1
6637 if $cc $ccflags $ldflags -o foobar foo.o bar.a $libs > /dev/null 2>&1 &&
6638         ./foobar >/dev/null 2>&1; then
6639         echo "ar appears to generate random libraries itself."
6640         orderlib=false
6641         ranlib=":"
6642 elif ar ts bar.a >/dev/null 2>&1 &&
6643         $cc $ccflags $ldflags -o foobar foo.o bar.a $libs > /dev/null 2>&1 &&
6644         ./foobar >/dev/null 2>&1; then
6645                 echo "a table of contents needs to be added with 'ar ts'."
6646                 orderlib=false
6647                 ranlib="ar ts"
6648 else
6649         case "$ranlib" in
6650         :) ranlib='';;
6651         '')
6652                 ranlib=`./loc ranlib X /usr/bin /bin /usr/local/bin`
6653                 $test -f $ranlib || ranlib=''
6654                 ;;
6655         esac
6656         if $test -n "$ranlib"; then
6657                 echo "your system has '$ranlib'; we'll use that."
6658                 orderlib=false
6659         else
6660                 echo "your system doesn't seem to support random libraries"
6661                 echo "so we'll use lorder and tsort to order the libraries."
6662                 orderlib=true
6663                 ranlib=":"
6664         fi
6665 fi
6666 $rm -f foo* bar* 
6667
6668 : determine where public executable scripts go
6669 set scriptdir scriptdir
6670 eval $prefixit
6671 case "$scriptdir" in
6672 '')
6673         dflt="$bin"
6674         : guess some guesses
6675         $test -d /usr/share/scripts && dflt=/usr/share/scripts
6676         $test -d /usr/share/bin && dflt=/usr/share/bin
6677         $test -d /usr/local/script && dflt=/usr/local/script
6678         $test -d $prefixexp/script && dflt=$prefixexp/script
6679         set dflt
6680         eval $prefixup
6681         ;;
6682 *)  dflt="$scriptdir"
6683         ;;
6684 esac
6685 $cat <<EOM
6686  
6687 Some installations have a separate directory just for executable scripts so
6688 that they can mount it across multiple architectures but keep the scripts in
6689 one spot.  You might, for example, have a subdirectory of /usr/share for this.
6690 Or you might just lump your scripts in with all your other executables.
6691  
6692 EOM
6693 fn=d~
6694 rp='Where do you keep publicly executable scripts?'
6695 . ./getfile
6696 if $test "X$ansexp" != "X$scriptdirexp"; then
6697         installscript=''
6698 fi
6699 scriptdir="$ans"
6700 scriptdirexp="$ansexp"
6701 if $afs; then
6702         $cat <<EOM
6703
6704 Since you are running AFS, I need to distinguish the directory in which
6705 scripts reside from the directory in which they are installed (and from
6706 which they are presumably copied to the former directory by occult means).
6707
6708 EOM
6709         case "$installscript" in
6710         '') dflt=`echo $scriptdirexp | sed 's#^/afs/#/afs/.#'`;;
6711         *) dflt="$installscript";;
6712         esac
6713         fn=de~
6714         rp='Where will public scripts be installed?'
6715         . ./getfile
6716         installscript="$ans"
6717 else
6718         installscript="$scriptdirexp"
6719 fi
6720
6721 : see if sys/select.h has to be included
6722 set sys/select.h i_sysselct
6723 eval $inhdr
6724
6725 : see if we should include time.h, sys/time.h, or both
6726 echo " "
6727 echo "Testing to see if we should include <time.h>, <sys/time.h> or both." >&4
6728 $echo $n "I'm now running the test program...$c"
6729 $cat >try.c <<'EOCP'
6730 #include <sys/types.h>
6731 #ifdef I_TIME
6732 #include <time.h>
6733 #endif
6734 #ifdef I_SYSTIME
6735 #ifdef SYSTIMEKERNEL
6736 #define KERNEL
6737 #endif
6738 #include <sys/time.h>
6739 #endif
6740 #ifdef I_SYSSELECT
6741 #include <sys/select.h>
6742 #endif
6743 main()
6744 {
6745         struct tm foo;
6746 #ifdef S_TIMEVAL
6747         struct timeval bar;
6748 #endif
6749 #ifdef S_TIMEZONE
6750         struct timezone tzp;
6751 #endif
6752         if (foo.tm_sec == foo.tm_sec)
6753                 exit(0);
6754 #ifdef S_TIMEVAL
6755         if (bar.tv_sec == bar.tv_sec)
6756                 exit(0);
6757 #endif
6758         exit(1);
6759 }
6760 EOCP
6761 flags=''
6762 s_timezone=''
6763 sysselect=''
6764 for s_timeval in '-DS_TIMEVAL' ''; do
6765 for i_systimek in '' '-DSYSTIMEKERNEL'; do
6766 for i_time in '' '-DI_TIME'; do
6767 for i_systime in '-DI_SYSTIME' ''; do
6768         case "$flags" in
6769         '') $echo $n ".$c"
6770                 if $cc $ccflags \
6771                 $i_time $i_systime $i_systimek $sysselect $s_timeval $s_timezone \
6772                 try.c -o try >/dev/null 2>&1 ; then
6773                         set X $i_time $i_systime $i_systimek $sysselect $s_timeval
6774                         shift
6775                         flags="$*"
6776                         echo " "
6777                         $echo $n "Succeeded with $flags$c"
6778                 fi
6779                 ;;
6780         esac
6781 done
6782 done
6783 done
6784 done
6785 timeincl=''
6786 echo " "
6787 case "$flags" in
6788 *SYSTIMEKERNEL*) i_systimek="$define"
6789         timeincl=`./findhdr sys/time.h`
6790         echo "We'll include <sys/time.h> with KERNEL defined." >&4;;
6791 *) i_systimek="$undef";;
6792 esac
6793 case "$flags" in
6794 *I_TIME*) i_time="$define"
6795         timeincl=`./findhdr time.h`" $timeincl"
6796         echo "We'll include <time.h>." >&4;;
6797 *) i_time="$undef";;
6798 esac
6799 case "$flags" in
6800 *I_SYSTIME*) i_systime="$define"
6801         timeincl=`./findhdr sys/time.h`" $timeincl"
6802         echo "We'll include <sys/time.h>." >&4;;
6803 *) i_systime="$undef";;
6804 esac
6805 $rm -f try.c try
6806
6807 : check for fd_set items
6808 $cat <<EOM
6809
6810 Checking to see how well your C compiler handles fd_set and friends ...
6811 EOM
6812 $cat >fd_set.c <<EOCP
6813 #$i_systime I_SYS_TIME
6814 #$i_sysselct I_SYS_SELECT
6815 #$d_socket HAS_SOCKET
6816 #include <sys/types.h>
6817 #ifdef HAS_SOCKET
6818 #include <sys/socket.h> /* Might include <sys/bsdtypes.h> */
6819 #endif
6820 #ifdef I_SYS_TIME
6821 #include <sys/time.h>
6822 #else
6823 #ifdef I_SYS_SELECT
6824 #include <sys/select.h>
6825 #endif
6826 #endif
6827 main() {
6828         fd_set fds;
6829
6830 #ifdef TRYBITS
6831         if(fds.fds_bits);
6832 #endif
6833
6834 #if defined(FD_SET) && defined(FD_CLR) && defined(FD_ISSET) && defined(FD_ZERO)
6835         exit(0);
6836 #else
6837         exit(1);
6838 #endif
6839 }
6840 EOCP
6841 if $cc $ccflags -DTRYBITS fd_set.c -o fd_set >fd_set.out 2>&1 ; then
6842         d_fds_bits="$define"
6843         d_fd_set="$define"
6844         echo "Well, your system knows about the normal fd_set typedef..." >&4
6845         if ./fd_set; then
6846                 echo "and you have the normal fd_set macros (just as I'd expect)." >&4
6847                 d_fd_macros="$define"
6848         else
6849                 $cat >&4 <<'EOM'
6850 but not the normal fd_set macros!  Gaaack!  I'll have to cover for you.
6851 EOM
6852                 d_fd_macros="$undef"
6853         fi
6854 else
6855         $cat <<'EOM'
6856 Hmm, your compiler has some difficulty with fd_set.  Checking further...
6857 EOM
6858         if $cc $ccflags fd_set.c -o fd_set >fd_set.out 2>&1 ; then
6859                 d_fds_bits="$undef"
6860                 d_fd_set="$define"
6861                 echo "Well, your system has some sort of fd_set available..." >&4
6862                 if ./fd_set; then
6863                         echo "and you have the normal fd_set macros." >&4
6864                         d_fd_macros="$define"
6865                 else
6866                         $cat <<'EOM'
6867 but not the normal fd_set macros!  Gross!  More work for me...
6868 EOM
6869                         d_fd_macros="$undef"
6870                 fi
6871         else
6872         echo "Well, you got zip.  That's OK, I can roll my own fd_set stuff." >&4
6873                 d_fd_set="$undef"
6874                 d_fds_bits="$undef"
6875                 d_fd_macros="$undef"
6876         fi
6877 fi
6878 $rm -f fd_set*
6879
6880
6881 : check for type of arguments to select.  This will only really
6882 : work if the system supports prototypes and provides one for
6883 : select.
6884 case "$d_select" in
6885 $define)
6886         : Make initial guess
6887         case "$selecttype" in
6888         ''|' ')
6889                 case "$d_fd_set" in
6890                 $define) xxx='fd_set *' ;;
6891                 *) xxx='int *' ;;
6892                 esac
6893                 ;;
6894         *)      xxx="$selecttype" 
6895                 ;;
6896         esac
6897         : backup guess
6898         case "$xxx" in
6899         'fd_set *') yyy='int *' ;;
6900         'int *') yyy='fd_set *' ;;
6901         esac
6902
6903         $cat <<EOM
6904
6905 Checking to see what type of arguments are expected by select().
6906 EOM
6907         $cat >try.c <<EOCP
6908 #$i_systime I_SYS_TIME
6909 #$i_sysselct I_SYS_SELECT
6910 #$d_socket HAS_SOCKET
6911 #include <sys/types.h>
6912 #ifdef HAS_SOCKET
6913 #include <sys/socket.h> /* Might include <sys/bsdtypes.h> */
6914 #endif
6915 #ifdef I_SYS_TIME
6916 #include <sys/time.h>
6917 #else
6918 #ifdef I_SYS_SELECT
6919 #include <sys/select.h>
6920 #endif
6921 #endif
6922 main()
6923 {
6924         int width;
6925         Select_fd_set_t readfds;
6926         Select_fd_set_t writefds;
6927         Select_fd_set_t exceptfds;
6928         struct timeval timeout;
6929         select(width, readfds, writefds, exceptfds, &timeout);
6930         exit(0);
6931 }
6932 EOCP
6933         if $cc $ccflags -c -DSelect_fd_set_t="$xxx" try.c >/dev/null 2>&1 ; then
6934                 selecttype="$xxx"
6935                 echo "Your system uses $xxx for the arguments to select." >&4
6936         elif $cc $ccflags -c -DSelect_fd_set_t="$yyy" try.c >/dev/null 2>&1 ; then
6937                 selecttype="$yyy"
6938                 echo "Your system uses $yyy for the arguments to select." >&4
6939         else
6940                 rp='What is the type for the 2nd, 3rd, and 4th arguments to select?'
6941                 dflt="$xxx"
6942                 . ./myread
6943                 selecttype="$ans"
6944         fi
6945         $rm -f try.[co]
6946         ;;
6947 *)      selecttype = 'int *' 
6948         ;;
6949 esac
6950
6951 : generate list of signal names
6952 echo " "
6953 case "$sig_name" in
6954 '')
6955         echo "Generating a list of signal names..." >&4
6956         xxx=`./findhdr signal.h`" "`./findhdr sys/signal.h`
6957         set X `cat $xxx 2>&1 | $awk '
6958 $1 ~ /^#define$/ && $2 ~ /^SIG[A-Z0-9]*$/ && $3 ~ /^[1-9][0-9]*$/ {
6959         sig[$3] = substr($2,4,20)
6960         if (max < $3 && $3 < 60) {
6961                 max = $3
6962         }
6963 }
6964
6965 END {
6966         for (i = 1; i <= max; i++) {
6967                 if (sig[i] == "")
6968                         printf "%d", i
6969                 else
6970                         printf "%s", sig[i]
6971                 if (i < max)
6972                         printf " "
6973         }
6974         printf "\n"
6975 }
6976 '`
6977         shift
6978         case $# in
6979         0)
6980                 echo 'kill -l' >/tmp/foo$$
6981                 set X `csh -f </tmp/foo$$`
6982                 $rm -f /tmp/foo$$
6983                 shift
6984                 case $# in
6985                 0)set HUP INT QUIT ILL TRAP IOT EMT FPE KILL BUS SEGV SYS PIPE ALRM TERM
6986                 ;;
6987                 esac
6988                 ;;
6989         esac
6990         sig_name="ZERO $*"
6991         ;;
6992 esac
6993 echo "The following signals are available:"
6994 echo " "
6995 echo $sig_name | $awk \
6996 'BEGIN { linelen = 0 }
6997 {
6998         for (i = 1; i < NF; i++) {
6999                 name = "SIG" $i " "
7000                 linelen = linelen + length(name)
7001                 if (linelen > 70) {
7002                         printf "\n"
7003                         linelen = length(name)
7004                 }
7005                 printf "%s", name
7006         }
7007 }'
7008 echo " "
7009
7010 : see what type is used for size_t
7011 set size_t sizetype 'unsigned int' stdio.h sys/types.h
7012 eval $typedef
7013 dflt="$sizetype"
7014 echo " "
7015 rp="What type is used for the length parameter for string functions?"
7016 . ./myread
7017 sizetype="$ans"
7018
7019 : see what type is used for signed size_t
7020 set ssize_t ssizetype int stdio.h sys/types.h
7021 eval $typedef
7022 dflt="$ssizetype"
7023 $cat > ssize.c <<EOM
7024 #include <stdio.h>
7025 #include <sys/types.h>
7026 #define Size_t $sizetype
7027 #define SSize_t $dflt
7028 main()
7029 {
7030         if (sizeof(Size_t) == sizeof(SSize_t))
7031                 printf("$dflt\n");
7032         else if (sizeof(Size_t) == sizeof(int))
7033                 printf("int\n");
7034         else 
7035                 printf("long\n");
7036 }
7037 EOM
7038 echo " "
7039 if $cc $ccflags $ldflags -o ssize ssize.c $libs > /dev/null 2>&1 ; then
7040         ssizetype=`./ssize`
7041         echo "I'll be using $ssizetype for functions returning a byte count." >&4
7042 else
7043         echo "(I can't compile the test program--please enlighten me!)"
7044         $cat <<EOM
7045
7046 I need a type that is the same size as $sizetype, but is guaranteed to
7047 be signed.  Common values are int and long.
7048
7049 EOM
7050         rp="What signed type is the same size as $sizetype?"
7051         . ./myread
7052         ssizetype="$ans"
7053 fi
7054 $rm -f ssize ssize.[co]
7055
7056 : see what type of char stdio uses.
7057 echo " "
7058 if $contains 'unsigned.*char.*_ptr;' `./findhdr stdio.h` >/dev/null 2>&1 ; then
7059         echo "Your stdio uses unsigned chars." >&4
7060         stdchar="unsigned char"
7061 else
7062         echo "Your stdio uses signed chars." >&4
7063         stdchar="char"
7064 fi
7065
7066 : see if time exists
7067 echo " "
7068 if set time val -f d_time; eval $csym; $val; then
7069         echo 'time() found.' >&4
7070         val="$define"
7071         set time_t timetype long stdio.h sys/types.h
7072         eval $typedef
7073         dflt="$timetype"
7074         echo " "
7075         rp="What type is returned by time() on this sytem?"
7076         . ./myread
7077         timetype="$ans"
7078 else
7079         echo 'time() not found, hope that will do.' >&4
7080         val="$undef"
7081         timetype='int';
7082 fi
7083 set d_time
7084 eval $setvar
7085
7086 : see what type uids are declared as in the kernel
7087 set uid_t uidtype xxx stdio.h sys/types.h
7088 eval $typedef
7089 case "$uidtype" in
7090 xxx)
7091         xxx=`./findhdr sys/user.h`
7092         set `grep '_ruid;' "$xxx" 2>/dev/null` unsigned short
7093         case $1 in
7094         unsigned) dflt="$1 $2" ;;
7095         *) dflt="$1" ;;
7096         esac
7097         ;;
7098 *) dflt="$uidtype";;
7099 esac
7100 echo " "
7101 rp="What is the type for user ids returned by getuid()?"
7102 . ./myread
7103 uidtype="$ans"
7104
7105 : see if this is a sys/file.h system
7106 val=''
7107 set sys/file.h val
7108 eval $inhdr
7109
7110 : do we need to #include <sys/file.h> ?
7111 case "$val" in
7112 "$define")
7113         echo " "
7114         if $h_sysfile; then
7115                 val="$define"
7116                 echo "We'll be including <sys/file.h>." >&4
7117         else
7118                 val="$undef"
7119                 echo "We won't be including <sys/file.h>." >&4
7120         fi
7121         ;;
7122 *)
7123         h_sysfile=false
7124         ;;
7125 esac
7126 set i_sysfile
7127 eval $setvar
7128
7129 : see if fcntl.h is there
7130 val=''
7131 set fcntl.h val
7132 eval $inhdr
7133
7134 : see if we can include fcntl.h
7135 case "$val" in
7136 "$define")
7137         echo " "
7138         if $h_fcntl; then
7139                 val="$define"
7140                 echo "We'll be including <fcntl.h>." >&4
7141         else
7142                 val="$undef"
7143                 if $h_sysfile; then
7144         echo "We don't need to include <fcntl.h> if we include <sys/file.h>." >&4
7145                 else
7146                         echo "We won't be including <fcntl.h>." >&4
7147                 fi
7148         fi
7149         ;;
7150 *)
7151         h_fcntl=false
7152         val="$undef"
7153         ;;
7154 esac
7155 set i_fcntl
7156 eval $setvar
7157
7158 : see if this is an grp system
7159 set grp.h i_grp
7160 eval $inhdr
7161
7162 : see if this is a math.h system
7163 set math.h i_math
7164 eval $inhdr
7165
7166 : see if memory.h is available.
7167 val=''
7168 set memory.h val
7169 eval $inhdr
7170
7171 : See if it conflicts with string.h
7172 case "$val" in
7173 $define)
7174         case "$strings" in
7175         '') ;;
7176         *)
7177                 $cppstdin $cppflags $cppminus < $strings > mem.h
7178                 if $contains 'memcpy' mem.h >/dev/null 2>&1; then
7179                         echo " "
7180                         echo "We won't be including <memory.h>."
7181                         val="$undef"
7182                 fi
7183                 $rm -f mem.h
7184                 ;;
7185         esac
7186 esac
7187 set i_memory
7188 eval $setvar
7189
7190 : see if net/errno.h is available
7191 val=''
7192 set net/errno.h val
7193 eval $inhdr
7194
7195 : Unfortunately, it causes problems on some systems.  Arrgh.
7196 case "$val" in
7197 $define)
7198         cat > try.c <<'EOM'
7199 #include <stdio.h>
7200 #include <errno.h>
7201 #include <net/errno.h>
7202 int func()
7203 {
7204         return ENOTSOCK;
7205 }
7206 EOM
7207         if $cc $ccflags -c try.c >/dev/null 2>&1; then
7208                 echo "We'll be including <net/errno.h>." >&4
7209         else
7210                 echo "We won't be including <net/errno.h>." >&4
7211                 val="$undef"
7212         fi
7213         $rm -f try.* try
7214         ;;
7215 esac
7216 set i_neterrno
7217 eval $setvar
7218
7219 : get C preprocessor symbols handy
7220 echo " "
7221 $echo $n "Hmm... $c"
7222 echo $al | $tr ' ' '\012' >Cppsym.know
7223 $cat <<EOSS >Cppsym
7224 $startsh
7225 case "\$1" in
7226 -l) list=true
7227         shift
7228         ;;
7229 esac
7230 unknown=''
7231 case "\$list\$#" in
7232 1|2)
7233         for sym do
7234                 if $contains "^\$1$" Cppsym.true >/dev/null 2>&1; then
7235                         exit 0
7236                 elif $contains "^\$1$" Cppsym.know >/dev/null 2>&1; then
7237                         :
7238                 else
7239                         unknown="\$unknown \$sym"
7240                 fi
7241         done
7242         set X \$unknown
7243         shift
7244         ;;
7245 esac
7246 case \$# in
7247 0) exit 1;;
7248 esac
7249 echo \$* | $tr ' ' '\012' | $sed -e 's/\(.*\)/\\
7250 #ifdef \1\\
7251 exit 0; _ _ _ _\1\\      \1\\
7252 #endif\\
7253 /' >Cppsym\$\$
7254 echo "exit 1; _ _ _" >>Cppsym\$\$
7255 $cppstdin $cppminus <Cppsym\$\$ | $grep '^exit [01]; _ _'  >Cppsym2\$\$
7256 case "\$list" in
7257 true) $awk 'NF > 5 {print substr(\$6,2,100)}' <Cppsym2\$\$ ;;
7258 *)
7259         sh Cppsym2\$\$
7260         status=\$?
7261         ;;
7262 esac
7263 $rm -f Cppsym\$\$ Cppsym2\$\$
7264 exit \$status
7265 EOSS
7266 chmod +x Cppsym
7267 $eunicefix Cppsym
7268 ./Cppsym -l $al | $sort | $grep -v '^$' >Cppsym.true
7269
7270 : now check the C compiler for additional symbols
7271 $cat >ccsym <<EOS
7272 $startsh
7273 $cat >tmp.c <<EOF
7274 extern int foo;
7275 EOF
7276 for i in \`$cc -v -c tmp.c 2>&1\`
7277 do
7278         case "\$i" in
7279         -D*) echo "\$i" | $sed 's/^-D//';;
7280         -A*) $test "$gccversion" && echo "\$i" | $sed 's/^-A\(.*\)(\(.*\))/\1=\2/';;
7281         esac
7282 done
7283 $rm -f try.c
7284 EOS
7285 chmod +x ccsym
7286 $eunicefix ccsym
7287 ./ccsym | $sort | $uniq >ccsym.raw
7288 $awk '/\=/ { print $0; next } { print $0"=1" }' ccsym.raw >ccsym.list
7289 $awk '{ print $0"=1" }' Cppsym.true >ccsym.true
7290 $comm -13 ccsym.true ccsym.list >ccsym.own
7291 $comm -12 ccsym.true ccsym.list >ccsym.com
7292 $comm -23 ccsym.true ccsym.list >ccsym.cpp
7293 also=''
7294 symbols='symbols'
7295 if $test -z ccsym.raw; then
7296         echo "Your C compiler doesn't seem to define any symbol!" >&4
7297         echo " "
7298         echo "However, your C preprocessor defines the following ones:"
7299         $cat Cppsym.true
7300 else
7301         if $test -s ccsym.com; then
7302                 echo "Your C compiler and pre-processor define these symbols:"
7303                 $sed -e 's/\(.*\)=.*/\1/' ccsym.com
7304                 also='also '
7305                 symbols='ones'
7306                 $test "$silent" || sleep 1
7307         fi
7308         if $test -s ccsym.cpp; then
7309                 $test "$also" && echo " "
7310                 echo "Your C pre-processor ${also}defines the following $symbols:"
7311                 $sed -e 's/\(.*\)=.*/\1/' ccsym.cpp
7312                 also='further '
7313                 $test "$silent" || sleep 1
7314         fi
7315         if $test -s ccsym.own; then
7316                 $test "$also" && echo " "
7317                 echo "Your C compiler ${also}defines the following cpp variables:"
7318                 $sed -e 's/\(.*\)=1/\1/' ccsym.own
7319                 $sed -e 's/\(.*\)=.*/\1/' ccsym.own | $uniq >>Cppsym.true
7320                 $test "$silent" || sleep 1
7321         fi
7322 fi
7323 $rm -f ccsym*
7324
7325 : see if this is a termio system
7326 val="$undef"
7327 val2="$undef"
7328 val3="$undef"
7329 if $test `./findhdr termios.h`; then
7330         set tcsetattr i_termios
7331         eval $inlibc
7332         val3="$i_termios"
7333 fi
7334 echo " "
7335 case "$val3" in
7336 "$define") echo "You have POSIX termios.h... good!" >&4;;
7337 *) if ./Cppsym pyr; then
7338                 case "`/bin/universe`" in
7339                 ucb) if $test `./findhdr sgtty.h`; then
7340                                 val2="$define"
7341                                 echo "<sgtty.h> found." >&4
7342                         else
7343                                 echo "System is pyramid with BSD universe."
7344                                 echo "<sgtty.h> not found--you could have problems." >&4
7345                         fi;;
7346                 *) if $test `./findhdr termio.h`; then
7347                                 val="$define"
7348                                 echo "<termio.h> found." >&4
7349                         else
7350                                 echo "System is pyramid with USG universe."
7351                                 echo "<termio.h> not found--you could have problems." >&4
7352                         fi;;
7353                 esac
7354         elif ./usg; then
7355                 if $test `./findhdr termio.h`; then
7356                         echo "<termio.h> found." >&4
7357                         val="$define"
7358                 elif $test `./findhdr sgtty.h`; then
7359                         echo "<sgtty.h> found." >&4
7360                         val2="$define"
7361                 else
7362 echo "Neither <termio.h> nor <sgtty.h> found--you could have problems." >&4
7363                 fi
7364         else
7365                 if $test `./findhdr sgtty.h`; then
7366                         echo "<sgtty.h> found." >&4
7367                         val2="$define"
7368                 elif $test `./findhdr termio.h`; then
7369                         echo "<termio.h> found." >&4
7370                         val="$define"
7371                 else
7372 echo "Neither <sgtty.h> nor <termio.h> found--you could have problems." >&4
7373                 fi
7374         fi;;
7375 esac
7376 set i_termio; eval $setvar
7377 val=$val2; set i_sgtty; eval $setvar
7378 val=$val3; set i_termios; eval $setvar
7379
7380 : see if stdarg is available
7381 echo " "
7382 if $test `./findhdr stdarg.h`; then
7383         echo "<stdarg.h> found." >&4
7384         valstd="$define"
7385 else
7386         echo "<stdarg.h> NOT found." >&4
7387         valstd="$undef"
7388 fi
7389
7390 : see if varags is available
7391 echo " "
7392 if $test `./findhdr varargs.h`; then
7393         echo "<varargs.h> found." >&4
7394 else
7395         echo "<varargs.h> NOT found, but that's ok (I hope)." >&4
7396 fi
7397
7398 : set up the varargs testing programs
7399 $cat > varargs.c <<EOP
7400 #ifdef I_STDARG
7401 #include <stdarg.h>
7402 #endif
7403 #ifdef I_VARARGS
7404 #include <varargs.h>
7405 #endif
7406
7407 #ifdef I_STDARG
7408 int f(char *p, ...)
7409 #else
7410 int f(va_alist)
7411 va_dcl
7412 #endif
7413 {
7414         va_list ap;
7415 #ifndef I_STDARG
7416         char *p;
7417 #endif
7418 #ifdef I_STDARG
7419         va_start(ap,p);
7420 #else
7421         va_start(ap);
7422         p = va_arg(ap, char *);
7423 #endif
7424         va_end(ap);
7425 }
7426 EOP
7427 $cat > varargs <<EOP
7428 if $cc -c $ccflags -D\$1 varargs.c >/dev/null 2>&1; then
7429         echo "true"
7430 else
7431         echo "false"
7432 fi
7433 $rm -f varargs.o
7434 EOP
7435 chmod +x varargs
7436
7437 : now check which varargs header should be included
7438 echo " "
7439 i_varhdr=''
7440 case "$valstd" in
7441 "$define")
7442         if `./varargs I_STDARG`; then
7443                 val='stdarg.h'
7444         elif `./varargs I_VARARGS`; then
7445                 val='varargs.h'
7446         fi
7447         ;;
7448 *)
7449         if `./varargs I_VARARGS`; then
7450                 val='varargs.h'
7451         fi
7452         ;;
7453 esac
7454 case "$val" in
7455 '')
7456 echo "I could not find the definition for va_dcl... You have problems..." >&4
7457         val="$undef"; set i_stdarg; eval $setvar
7458         val="$undef"; set i_varargs; eval $setvar
7459         ;;
7460 *) 
7461         set i_varhdr
7462         eval $setvar
7463         case "$i_varhdr" in
7464         stdarg.h)
7465                 val="$define"; set i_stdarg; eval $setvar
7466                 val="$undef"; set i_varargs; eval $setvar
7467                 ;;
7468         varargs.h)
7469                 val="$undef"; set i_stdarg; eval $setvar
7470                 val="$define"; set i_varargs; eval $setvar
7471                 ;;
7472         esac
7473         echo "We'll include <$i_varhdr> to get va_dcl definition." >&4;;
7474 esac
7475 $rm -f varargs*
7476
7477 : see if stddef is available
7478 set stddef.h i_stddef
7479 eval $inhdr
7480
7481 : see if stdlib is available
7482 set stdlib.h i_stdlib
7483 eval $inhdr
7484
7485 : see if ioctl defs are in sgtty, termio, sys/filio or sys/ioctl
7486 set sys/filio.h i_sysfilio
7487 eval $inhdr
7488 echo " "
7489 if $test `./findhdr sys/ioctl.h`; then
7490         val="$define"
7491         echo '<sys/ioctl.h> found.' >&4
7492 else
7493         val="$undef"
7494         if $test $i_sysfilio = "$define"; then
7495             echo '<sys/ioctl.h> NOT found.' >&4
7496         else
7497                 $test $i_sgtty = "$define" && xxx="sgtty.h"
7498                 $test $i_termio = "$define" && xxx="termio.h"
7499                 $test $i_termios = "$define" && xxx="termios.h"
7500 echo "No <sys/ioctl.h> found, assuming ioctl args are defined in <$xxx>." >&4
7501         fi
7502 fi
7503 set i_sysioctl
7504 eval $setvar
7505
7506 : see if this is a sys/param system
7507 set sys/param.h i_sysparam
7508 eval $inhdr
7509
7510 : see if sys/stat.h is available
7511 set sys/stat.h i_sysstat
7512 eval $inhdr
7513
7514 : see if sys/types.h has to be included
7515 set sys/types.h i_systypes
7516 eval $inhdr
7517
7518 : see if this is a unistd.h system
7519 set unistd.h i_unistd
7520 eval $inhdr
7521
7522 : see if this is an utime system
7523 set utime.h i_utime
7524 eval $inhdr
7525
7526 : see if this is a vfork system
7527 case "$d_vfork" in
7528 "$define")
7529         set vfork.h i_vfork
7530         eval $inhdr
7531         ;;
7532 *)
7533         i_vfork="$undef"
7534         ;;
7535 esac
7536
7537 : end of configuration questions
7538 echo " "
7539 echo "End of configuration questions."
7540 echo " "
7541
7542 : back to where it started
7543 if test -d ../UU; then
7544         cd ..
7545 fi
7546
7547 : configuration may be patched via a 'config.over' file
7548 if $test -f config.over; then
7549         echo " "
7550         dflt=y
7551         rp='I see a config.over file.  Do you wish to load it?'
7552         . UU/myread
7553         case "$ans" in
7554         n*) echo "OK, I'll ignore it.";;
7555         *)      . ./config.over
7556                 echo "Configuration override changes have been loaded."
7557                 ;;
7558         esac
7559 fi
7560
7561 : in case they want portability, strip down executable paths
7562 case "$d_portable" in
7563 "$define")
7564         echo " "
7565         echo "Stripping down executable paths..." >&4
7566         for file in $loclist $trylist; do
7567                 eval $file="\$file"
7568         done
7569         ;;
7570 esac
7571
7572 : create config.sh file
7573 echo " "
7574 echo "Creating config.sh..." >&4
7575 $spitshell <<EOT >config.sh
7576 $startsh
7577 #
7578 # This file was produced by running the Configure script. It holds all the
7579 # definitions figured out by Configure. Should you modify one of these values,
7580 # do not forget to propagate your changes by running "Configure -der". You may
7581 # instead choose to run each of the .SH files by yourself, or "Configure -S".
7582 #
7583
7584 # Configuration time: $cf_time
7585 # Configured by: $cf_by
7586 # Target system: $myuname
7587
7588 Author='$Author'
7589 Date='$Date'
7590 Header='$Header'
7591 Id='$Id'
7592 Locker='$Locker'
7593 Log='$Log'
7594 Mcc='$Mcc'
7595 RCSfile='$RCSfile'
7596 Revision='$Revision'
7597 Source='$Source'
7598 State='$State'
7599 afs='$afs'
7600 alignbytes='$alignbytes'
7601 aphostname='$aphostname'
7602 archlib='$archlib'
7603 archlibexp='$archlibexp'
7604 archname='$archname'
7605 awk='$awk'
7606 baserev='$baserev'
7607 bash='$bash'
7608 bin='$bin'
7609 binexp='$binexp'
7610 bison='$bison'
7611 byacc='$byacc'
7612 byteorder='$byteorder'
7613 c='$c'
7614 castflags='$castflags'
7615 cat='$cat'
7616 cc='$cc'
7617 cccdlflags='$cccdlflags'
7618 ccdlflags='$ccdlflags'
7619 ccflags='$ccflags'
7620 cf_by='$cf_by'
7621 cf_time='$cf_time'
7622 chgrp='$chgrp'
7623 chmod='$chmod'
7624 chown='$chown'
7625 clocktype='$clocktype'
7626 comm='$comm'
7627 compress='$compress'
7628 contains='$contains'
7629 cp='$cp'
7630 cpio='$cpio'
7631 cpp='$cpp'
7632 cpp_stuff='$cpp_stuff'
7633 cppflags='$cppflags'
7634 cpplast='$cpplast'
7635 cppminus='$cppminus'
7636 cpprun='$cpprun'
7637 cppstdin='$cppstdin'
7638 cryptlib='$cryptlib'
7639 csh='$csh'
7640 d_Gconvert='$d_Gconvert'
7641 d_access='$d_access'
7642 d_alarm='$d_alarm'
7643 d_archlib='$d_archlib'
7644 d_attribut='$d_attribut'
7645 d_bcmp='$d_bcmp'
7646 d_bcopy='$d_bcopy'
7647 d_bsd='$d_bsd'
7648 d_bsdpgrp='$d_bsdpgrp'
7649 d_byacc='$d_byacc'
7650 d_bzero='$d_bzero'
7651 d_casti32='$d_casti32'
7652 d_castneg='$d_castneg'
7653 d_charvspr='$d_charvspr'
7654 d_chown='$d_chown'
7655 d_chroot='$d_chroot'
7656 d_chsize='$d_chsize'
7657 d_closedir='$d_closedir'
7658 d_const='$d_const'
7659 d_crypt='$d_crypt'
7660 d_csh='$d_csh'
7661 d_cuserid='$d_cuserid'
7662 d_dbl_dig='$d_dbl_dig'
7663 d_difftime='$d_difftime'
7664 d_dirnamlen='$d_dirnamlen'
7665 d_dlerror='$d_dlerror'
7666 d_dlopen='$d_dlopen'
7667 d_dlsymun='$d_dlsymun'
7668 d_dosuid='$d_dosuid'
7669 d_drem='$d_drem'
7670 d_dup2='$d_dup2'
7671 d_eunice='$d_eunice'
7672 d_fchmod='$d_fchmod'
7673 d_fchown='$d_fchown'
7674 d_fcntl='$d_fcntl'
7675 d_fd_macros='$d_fd_macros'
7676 d_fd_set='$d_fd_set'
7677 d_fds_bits='$d_fds_bits'
7678 d_fgetpos='$d_fgetpos'
7679 d_flexfnam='$d_flexfnam'
7680 d_flock='$d_flock'
7681 d_fmod='$d_fmod'
7682 d_fork='$d_fork'
7683 d_fpathconf='$d_fpathconf'
7684 d_fsetpos='$d_fsetpos'
7685 d_getgrps='$d_getgrps'
7686 d_gethent='$d_gethent'
7687 d_gethname='$d_gethname'
7688 d_getlogin='$d_getlogin'
7689 d_getpgrp2='$d_getpgrp2'
7690 d_getpgrp='$d_getpgrp'
7691 d_getppid='$d_getppid'
7692 d_getprior='$d_getprior'
7693 d_htonl='$d_htonl'
7694 d_index='$d_index'
7695 d_isascii='$d_isascii'
7696 d_killpg='$d_killpg'
7697 d_link='$d_link'
7698 d_linuxstd='$d_linuxstd'
7699 d_locconv='$d_locconv'
7700 d_lockf='$d_lockf'
7701 d_lstat='$d_lstat'
7702 d_mblen='$d_mblen'
7703 d_mbstowcs='$d_mbstowcs'
7704 d_mbtowc='$d_mbtowc'
7705 d_memcmp='$d_memcmp'
7706 d_memcpy='$d_memcpy'
7707 d_memmove='$d_memmove'
7708 d_memset='$d_memset'
7709 d_mkdir='$d_mkdir'
7710 d_mkfifo='$d_mkfifo'
7711 d_mktime='$d_mktime'
7712 d_msg='$d_msg'
7713 d_msgctl='$d_msgctl'
7714 d_msgget='$d_msgget'
7715 d_msgrcv='$d_msgrcv'
7716 d_msgsnd='$d_msgsnd'
7717 d_mymalloc='$d_mymalloc'
7718 d_nice='$d_nice'
7719 d_oldsock='$d_oldsock'
7720 d_open3='$d_open3'
7721 d_pathconf='$d_pathconf'
7722 d_pause='$d_pause'
7723 d_phostname='$d_phostname'
7724 d_pipe='$d_pipe'
7725 d_portable='$d_portable'
7726 d_pwage='$d_pwage'
7727 d_pwchange='$d_pwchange'
7728 d_pwclass='$d_pwclass'
7729 d_pwcomment='$d_pwcomment'
7730 d_pwexpire='$d_pwexpire'
7731 d_pwquota='$d_pwquota'
7732 d_readdir='$d_readdir'
7733 d_readlink='$d_readlink'
7734 d_rename='$d_rename'
7735 d_rewinddir='$d_rewinddir'
7736 d_rmdir='$d_rmdir'
7737 d_safebcpy='$d_safebcpy'
7738 d_safemcpy='$d_safemcpy'
7739 d_seekdir='$d_seekdir'
7740 d_select='$d_select'
7741 d_sem='$d_sem'
7742 d_semctl='$d_semctl'
7743 d_semget='$d_semget'
7744 d_semop='$d_semop'
7745 d_setegid='$d_setegid'
7746 d_seteuid='$d_seteuid'
7747 d_setlinebuf='$d_setlinebuf'
7748 d_setlocale='$d_setlocale'
7749 d_setpgid='$d_setpgid'
7750 d_setpgrp2='$d_setpgrp2'
7751 d_setpgrp='$d_setpgrp'
7752 d_setprior='$d_setprior'
7753 d_setregid='$d_setregid'
7754 d_setresgid='$d_setresgid'
7755 d_setresuid='$d_setresuid'
7756 d_setreuid='$d_setreuid'
7757 d_setrgid='$d_setrgid'
7758 d_setruid='$d_setruid'
7759 d_setsid='$d_setsid'
7760 d_shm='$d_shm'
7761 d_shmat='$d_shmat'
7762 d_shmatprototype='$d_shmatprototype'
7763 d_shmctl='$d_shmctl'
7764 d_shmdt='$d_shmdt'
7765 d_shmget='$d_shmget'
7766 d_shrplib='$d_shrplib'
7767 d_socket='$d_socket'
7768 d_sockpair='$d_sockpair'
7769 d_statblks='$d_statblks'
7770 d_stdstdio='$d_stdstdio'
7771 d_strchr='$d_strchr'
7772 d_strcoll='$d_strcoll'
7773 d_strctcpy='$d_strctcpy'
7774 d_strerrm='$d_strerrm'
7775 d_strerror='$d_strerror'
7776 d_strxfrm='$d_strxfrm'
7777 d_suidsafe='$d_suidsafe'
7778 d_symlink='$d_symlink'
7779 d_syscall='$d_syscall'
7780 d_sysconf='$d_sysconf'
7781 d_sysernlst='$d_sysernlst'
7782 d_syserrlst='$d_syserrlst'
7783 d_system='$d_system'
7784 d_tcgetpgrp='$d_tcgetpgrp'
7785 d_tcsetpgrp='$d_tcsetpgrp'
7786 d_telldir='$d_telldir'
7787 d_time='$d_time'
7788 d_times='$d_times'
7789 d_truncate='$d_truncate'
7790 d_tzname='$d_tzname'
7791 d_umask='$d_umask'
7792 d_uname='$d_uname'
7793 d_vfork='$d_vfork'
7794 d_void_closedir='$d_void_closedir'
7795 d_voidsig='$d_voidsig'
7796 d_voidtty='$d_voidtty'
7797 d_volatile='$d_volatile'
7798 d_vprintf='$d_vprintf'
7799 d_wait4='$d_wait4'
7800 d_waitpid='$d_waitpid'
7801 d_wcstombs='$d_wcstombs'
7802 d_wctomb='$d_wctomb'
7803 d_xenix='$d_xenix'
7804 date='$date'
7805 db_hashtype='$db_hashtype'
7806 db_prefixtype='$db_prefixtype'
7807 defvoidused='$defvoidused'
7808 direntrytype='$direntrytype'
7809 dlext='$dlext'
7810 dlsrc='$dlsrc'
7811 dynamic_ext='$dynamic_ext'
7812 echo='$echo'
7813 egrep='$egrep'
7814 emacs='$emacs'
7815 eunicefix='$eunicefix'
7816 expr='$expr'
7817 extensions='$extensions'
7818 find='$find'
7819 flex='$flex'
7820 fpostype='$fpostype'
7821 full_csh='$full_csh'
7822 full_sed='$full_sed'
7823 gcc='$gcc'
7824 gccversion='$gccversion'
7825 gidtype='$gidtype'
7826 glibpth='$glibpth'
7827 grep='$grep'
7828 groupcat='$groupcat'
7829 groupstype='$groupstype'
7830 h_fcntl='$h_fcntl'
7831 h_sysfile='$h_sysfile'
7832 hint='$hint'
7833 hostcat='$hostcat'
7834 huge='$huge'
7835 i_bsdioctl='$i_bsdioctl'
7836 i_db='$i_db'
7837 i_dbm='$i_dbm'
7838 i_dirent='$i_dirent'
7839 i_dld='$i_dld'
7840 i_dlfcn='$i_dlfcn'
7841 i_fcntl='$i_fcntl'
7842 i_float='$i_float'
7843 i_gdbm='$i_gdbm'
7844 i_grp='$i_grp'
7845 i_limits='$i_limits'
7846 i_malloc='$i_malloc'
7847 i_math='$i_math'
7848 i_memory='$i_memory'
7849 i_ndbm='$i_ndbm'
7850 i_neterrno='$i_neterrno'
7851 i_niin='$i_niin'
7852 i_pwd='$i_pwd'
7853 i_sgtty='$i_sgtty'
7854 i_stdarg='$i_stdarg'
7855 i_stddef='$i_stddef'
7856 i_stdlib='$i_stdlib'
7857 i_string='$i_string'
7858 i_sysdir='$i_sysdir'
7859 i_sysfile='$i_sysfile'
7860 i_sysfilio='$i_sysfilio'
7861 i_sysin='$i_sysin'
7862 i_sysioctl='$i_sysioctl'
7863 i_sysndir='$i_sysndir'
7864 i_sysparam='$i_sysparam'
7865 i_sysselct='$i_sysselct'
7866 i_syssockio='$i_syssockio'
7867 i_sysstat='$i_sysstat'
7868 i_systime='$i_systime'
7869 i_systimek='$i_systimek'
7870 i_systimes='$i_systimes'
7871 i_systypes='$i_systypes'
7872 i_termio='$i_termio'
7873 i_termios='$i_termios'
7874 i_time='$i_time'
7875 i_unistd='$i_unistd'
7876 i_utime='$i_utime'
7877 i_varargs='$i_varargs'
7878 i_varhdr='$i_varhdr'
7879 i_vfork='$i_vfork'
7880 incpath='$incpath'
7881 inews='$inews'
7882 installarchlib='$installarchlib'
7883 installbin='$installbin'
7884 installmansrc='$installmansrc'
7885 installprivlib='$installprivlib'
7886 installscript='$installscript'
7887 intsize='$intsize'
7888 known_extensions='$known_extensions'
7889 ksh='$ksh'
7890 large='$large'
7891 lddlflags='$lddlflags'
7892 ldflags='$ldflags'
7893 less='$less'
7894 libc='$libc'
7895 libpth='$libpth'
7896 libs='$libs'
7897 libswanted='$libswanted'
7898 line='$line'
7899 lint='$lint'
7900 lkflags='$lkflags'
7901 ln='$ln'
7902 lns='$lns'
7903 lp='$lp'
7904 lpr='$lpr'
7905 ls='$ls'
7906 lseektype='$lseektype'
7907 mail='$mail'
7908 mailx='$mailx'
7909 make='$make'
7910 mallocobj='$mallocobj'
7911 mallocsrc='$mallocsrc'
7912 malloctype='$malloctype'
7913 manext='$manext'
7914 mansrc='$mansrc'
7915 mansrcexp='$mansrcexp'
7916 medium='$medium'
7917 mips='$mips'
7918 mips_type='$mips_type'
7919 mkdir='$mkdir'
7920 models='$models'
7921 modetype='$modetype'
7922 more='$more'
7923 mv='$mv'
7924 mydomain='$mydomain'
7925 myhostname='$myhostname'
7926 myuname='$myuname'
7927 n='$n'
7928 nm_opt='$nm_opt'
7929 nroff='$nroff'
7930 optimize='$optimize'
7931 orderlib='$orderlib'
7932 osname='$osname'
7933 osvers='$osvers'
7934 package='$package'
7935 passcat='$passcat'
7936 patchlevel='$patchlevel'
7937 perl='$perl'
7938 pg='$pg'
7939 phostname='$phostname'
7940 plibpth='$plibpth'
7941 pmake='$pmake'
7942 pr='$pr'
7943 prefix='$prefix'
7944 prefixexp='$prefixexp'
7945 privlib='$privlib'
7946 privlibexp='$privlibexp'
7947 prototype='$prototype'
7948 randbits='$randbits'
7949 ranlib='$ranlib'
7950 rm='$rm'
7951 rmail='$rmail'
7952 runnm='$runnm'
7953 scriptdir='$scriptdir'
7954 scriptdirexp='$scriptdirexp'
7955 sed='$sed'
7956 selecttype='$selecttype'
7957 sendmail='$sendmail'
7958 sh='$sh'
7959 shar='$shar'
7960 sharpbang='$sharpbang'
7961 shmattype='$shmattype'
7962 shrpdir='$shrpdir'
7963 shsharp='$shsharp'
7964 sig_name='$sig_name'
7965 signal_t='$signal_t'
7966 sizetype='$sizetype'
7967 sleep='$sleep'
7968 smail='$smail'
7969 small='$small'
7970 so='$so'
7971 sockethdr='$sockethdr'
7972 socketlib='$socketlib'
7973 sort='$sort'
7974 spackage='$spackage'
7975 spitshell='$spitshell'
7976 split='$split'
7977 ssizetype='$ssizetype'
7978 startsh='$startsh'
7979 static_ext='$static_ext'
7980 stdchar='$stdchar'
7981 strings='$strings'
7982 submit='$submit'
7983 sysman='$sysman'
7984 tail='$tail'
7985 tar='$tar'
7986 tbl='$tbl'
7987 test='$test'
7988 timeincl='$timeincl'
7989 timetype='$timetype'
7990 touch='$touch'
7991 tr='$tr'
7992 troff='$troff'
7993 uidtype='$uidtype'
7994 uname='$uname'
7995 uniq='$uniq'
7996 usedl='$usedl'
7997 usemymalloc='$usemymalloc'
7998 usenm='$usenm'
7999 useposix='$useposix'
8000 usevfork='$usevfork'
8001 usrinc='$usrinc'
8002 uuname='$uuname'
8003 vi='$vi'
8004 voidflags='$voidflags'
8005 xlibpth='$xlibpth'
8006 zcat='$zcat'
8007 EOT
8008
8009 : add special variables
8010 $test -f patchlevel.h && \
8011 awk '/^#define/ {printf "%s=%s\n",$2,$3}' patchlevel.h >>config.sh
8012 echo "CONFIG=true" >>config.sh
8013
8014 : propagate old symbols
8015 if $test -f UU/config.sh; then
8016         <UU/config.sh sort | uniq >UU/oldconfig.sh
8017         sed -n 's/^\([a-zA-Z_0-9]*\)=.*/\1/p' config.sh config.sh UU/oldconfig.sh |\
8018         sort | uniq -u >UU/oldsyms
8019         set X `cat UU/oldsyms`
8020         shift
8021         case $# in
8022         0) ;;
8023         *)
8024                 cat <<EOM
8025 Hmm...You had some extra variables I don't know about...I'll try to keep 'em...
8026 EOM
8027                 echo "# Variables propagated from previous config.sh file." >>config.sh
8028                 for sym in `cat UU/oldsyms`; do
8029                         echo "    Propagating $hint variable "'$'"$sym..."
8030                         eval 'tmp="$'"${sym}"'"'
8031                         echo "$tmp" | \
8032                                 sed -e "s/'/'\"'\"'/g" -e "s/^/$sym='/" -e "s/$/'/" >>config.sh
8033                 done
8034                 ;;
8035         esac
8036 fi
8037
8038 : Finish up by extracting the .SH files
8039 case "$alldone" in
8040 exit)
8041         $rm -rf UU
8042         echo "Done."
8043         exit 0
8044         ;;
8045 cont)
8046         ;;
8047 '')
8048         echo " "
8049         dflt=''
8050         nostick=true
8051 echo "If you didn't make any mistakes, then just type a carriage return here."
8052         rp="If you need to edit config.sh, do it as a shell escape here:"
8053         . UU/myread
8054         nostick=''
8055         case "$ans" in
8056         '') ;;
8057         *) : in case they cannot read
8058                 sh 1>&4 -c "$ans";;
8059         esac
8060         ;;
8061 esac
8062
8063 : if this fails, just run all the .SH files by hand
8064 . ./config.sh
8065
8066 echo " "
8067 exec 1>&4
8068 . ./UU/extract
8069
8070 if $contains '^depend:' [Mm]akefile >/dev/null 2>&1; then
8071         dflt=y
8072         case "$silent" in
8073         true) ;;
8074         *)
8075                 $cat <<EOM
8076
8077 Now you need to generate make dependencies by running "make depend".
8078 You might prefer to run it in background: "make depend > makedepend.out &"
8079 It can take a while, so you might not want to run it right now.
8080
8081 EOM
8082                 ;;
8083         esac
8084         rp="Run make depend now?"
8085         . UU/myread
8086         case "$ans" in
8087         y*)
8088                 make depend && echo "Now you must run a make."
8089                 ;;
8090         *)
8091                 echo "You must run 'make depend' then 'make'."
8092                 ;;
8093         esac
8094 elif test -f [Mm]akefile; then
8095         echo " "
8096         echo "Now you must run a make."
8097 else
8098         echo "Done."
8099 fi
8100
8101 $rm -f kit*isdone ark*isdone
8102 $rm -rf UU
8103
8104 : End of Configure
8105