This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
5.002 beta 1
[perl5.git] / Configure
1 #! /bin/sh
2 #
3 # If these # comments don't work, trim them. Don't worry about any other
4 # shell scripts, Configure will trim # comments from them for you.
5 #
6 # (If you are trying to port this package to a machine without sh,
7 # I would suggest you have a look at the prototypical config_h.SH file
8 # and edit it to reflect your system. Some packages may include samples
9 # of config.h for certain machines, so you might look for one of those.)
10 #
11 # Yes, you may rip this off to use in other distribution packages. This
12 # script belongs to the public domain and cannot be copyrighted.
13 #
14 # (Note: this Configure script was generated automatically. Rather than
15 # working with this copy of Configure, you may wish to get metaconfig.
16 # The dist-3.0 package (which contains metaconfig) was posted in
17 # comp.sources.misc so you may fetch it yourself from your nearest
18 # archive site. Check with Archie if you don't know where that can be.)
19 #
20
21 # $Id: Head.U,v 3.0.1.8 1995/07/25 13:40:02 ram Exp $
22 #
23 # Generated on 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