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