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