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