lval substr() coredumps with refs (with patch)
[perl.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 Fri Aug 30 11:30:25 EDT 1996 [metaconfig 3.0 PL60]
24
25 cat >/tmp/c1$$ <<EOF
26 ARGGGHHHH!!!!!
27
28 SCO csh still thinks true is false.  Write to SCO today and tell them that next
29 year Configure ought to "rm /bin/csh" unless they fix their blasted shell. :-)
30
31 (Actually, Configure ought to just patch csh in place.  Hmm.  Hmmmmm.  All
32 we'd have to do is go in and swap the && and || tokens, wherever they are.)
33
34 [End of diatribe. We now return you to your regularly scheduled programming...]
35 EOF
36 cat >/tmp/c2$$ <<EOF
37
38 OOPS!  You naughty creature!  You didn't run Configure with sh!
39 I will attempt to remedy the situation by running sh for you...
40 EOF
41
42 true || cat /tmp/c1$$ /tmp/c2$$
43 true || exec sh $0 $argv:q
44
45 (exit $?0) || cat /tmp/c2$$
46 (exit $?0) || exec sh $0 $argv:q
47 rm -f /tmp/c1$$ /tmp/c2$$
48
49 : compute my invocation name
50 me=$0
51 case "$0" in
52 */*)
53         me=`echo $0 | sed -e 's!.*/\(.*\)!\1!' 2>/dev/null`
54         test "$me" || me=$0
55         ;;
56 esac
57
58 : Proper PATH separator
59 p_=:
60 : On OS/2 this directory should exist if this is not floppy only system :-]
61 if test -d c:/.; then
62         p_=\;
63         PATH=`cmd /c "echo %PATH%" | tr '\\\\' / `
64         OS2_SHELL=`cmd /c "echo %OS2_SHELL%" | tr '\\\\' / | tr '[A-Z]' '[a-z]'`
65 fi
66
67 : Proper PATH setting
68 paths='/bin /usr/bin /usr/local/bin /usr/ucb /usr/local /usr/lbin'
69 paths="$paths /opt/bin /opt/local/bin /opt/local /opt/lbin"
70 paths="$paths /usr/5bin /etc /usr/gnu/bin /usr/new /usr/new/bin /usr/nbin"
71 paths="$paths /opt/gnu/bin /opt/new /opt/new/bin /opt/nbin"
72 paths="$paths /sys5.3/bin /sys5.3/usr/bin /bsd4.3/bin /bsd4.3/usr/ucb"
73 paths="$paths /bsd4.3/usr/bin /usr/bsd /bsd43/bin /usr/ccs/bin"
74 paths="$paths /etc /usr/lib /usr/ucblib /lib /usr/ccs/lib"
75 paths="$paths /sbin /usr/sbin /usr/libexec"
76
77 for p in $paths
78 do
79         case "$p_$PATH$p_" in
80         *$p_$p$p_*) ;;
81         *) test -d $p && PATH=$PATH$p_$p ;;
82         esac
83 done
84
85 PATH=.$p_$PATH
86 export PATH
87
88 : Sanity checks
89 if test ! -t 0; then
90         echo "Say 'sh $me', not 'sh <$me'"
91         exit 1
92 fi
93
94 : On HP-UX, large Configure scripts may exercise a bug in /bin/sh
95 if test -f /hp-ux -a -f /bin/ksh; then
96         if (PATH=.; alias -x) >/dev/null 2>&1; then
97                 : already under /bin/ksh
98         else
99                 cat <<'EOM'
100 (Feeding myself to ksh to avoid nasty sh bug in "here document" expansion.)
101 EOM
102                 unset ENV
103                 exec /bin/ksh $0 "$@"
104         fi
105 else
106         : Warn them if they use ksh on other systems
107         (PATH=.; alias -x) >/dev/null 2>&1 && \
108                 cat <<EOM
109 (I see you are using the Korn shell.  Some ksh's blow up on $me,
110 especially on older exotic systems.  If yours does, try the Bourne 
111 shell instead.)
112 EOM
113 fi
114
115 : Configure runs within the UU subdirectory
116 test -d UU || mkdir UU
117 cd UU && rm -f ./*
118
119 dynamic_ext=''
120 extensions=''
121 known_extensions=''
122 static_ext=''
123 useopcode=''
124 useposix=''
125 d_bsd=''
126 d_eunice=''
127 d_xenix=''
128 eunicefix=''
129 Mcc=''
130 awk=''
131 bash=''
132 bison=''
133 byacc=''
134 cat=''
135 chgrp=''
136 chmod=''
137 chown=''
138 comm=''
139 compress=''
140 cp=''
141 cpio=''
142 cpp=''
143 csh=''
144 date=''
145 echo=''
146 egrep=''
147 emacs=''
148 expr=''
149 find=''
150 flex=''
151 gcc=''
152 grep=''
153 gzip=''
154 inews=''
155 ksh=''
156 less=''
157 line=''
158 lint=''
159 ln=''
160 lp=''
161 lpr=''
162 ls=''
163 mail=''
164 mailx=''
165 mkdir=''
166 more=''
167 mv=''
168 nroff=''
169 perl=''
170 pg=''
171 pmake=''
172 pr=''
173 rm=''
174 rmail=''
175 sed=''
176 sendmail=''
177 shar=''
178 sleep=''
179 smail=''
180 sort=''
181 submit=''
182 tail=''
183 tar=''
184 tbl=''
185 test=''
186 touch=''
187 tr=''
188 troff=''
189 uname=''
190 uniq=''
191 uuname=''
192 vi=''
193 zcat=''
194 zip=''
195 full_sed=''
196 libswanted=''
197 hint=''
198 myuname=''
199 osname=''
200 osvers=''
201 Author=''
202 Date=''
203 Header=''
204 Id=''
205 Locker=''
206 Log=''
207 RCSfile=''
208 Revision=''
209 Source=''
210 State=''
211 ar=''
212 archobjs=''
213 exe_ext=''
214 firstmakefile=''
215 lib_ext=''
216 obj_ext=''
217 path_sep=''
218 afs=''
219 alignbytes=''
220 archlib=''
221 archlibexp=''
222 d_archlib=''
223 installarchlib=''
224 archname=''
225 myarchname=''
226 baserev=''
227 bin=''
228 binexp=''
229 installbin=''
230 byteorder=''
231 cc=''
232 gccversion=''
233 ccflags=''
234 cppflags=''
235 ldflags=''
236 lkflags=''
237 locincpth=''
238 optimize=''
239 cf_email=''
240 cf_by=''
241 cf_time=''
242 contains=''
243 cpp_stuff=''
244 cpplast=''
245 cppminus=''
246 cpprun=''
247 cppstdin=''
248 d_access=''
249 d_alarm=''
250 d_attribut=''
251 d_bcmp=''
252 d_bcopy=''
253 d_bzero=''
254 d_casti32=''
255 castflags=''
256 d_castneg=''
257 d_chown=''
258 d_chroot=''
259 d_chsize=''
260 d_closedir=''
261 d_void_closedir=''
262 d_const=''
263 cryptlib=''
264 d_crypt=''
265 d_csh=''
266 full_csh=''
267 d_cuserid=''
268 d_dbl_dig=''
269 d_difftime=''
270 d_dlerror=''
271 d_dlopen=''
272 d_dlsymun=''
273 d_dosuid=''
274 d_suidsafe=''
275 d_dup2=''
276 d_fchmod=''
277 d_fchown=''
278 d_fcntl=''
279 d_fd_macros=''
280 d_fd_set=''
281 d_fds_bits=''
282 d_fgetpos=''
283 d_flexfnam=''
284 d_flock=''
285 d_fork=''
286 d_fsetpos=''
287 d_Gconvert=''
288 d_getgrps=''
289 d_gethent=''
290 aphostname=''
291 d_gethname=''
292 d_phostname=''
293 d_uname=''
294 d_getlogin=''
295 d_getpgrp2=''
296 d_getpgrp=''
297 d_getppid=''
298 d_getprior=''
299 d_htonl=''
300 d_isascii=''
301 d_killpg=''
302 d_link=''
303 d_locconv=''
304 d_lockf=''
305 d_lstat=''
306 d_mblen=''
307 d_mbstowcs=''
308 d_mbtowc=''
309 d_memcmp=''
310 d_memcpy=''
311 d_memmove=''
312 d_memset=''
313 d_mkdir=''
314 d_mkfifo=''
315 d_mktime=''
316 d_msg=''
317 d_msgctl=''
318 d_msgget=''
319 d_msgrcv=''
320 d_msgsnd=''
321 d_nice=''
322 d_open3=''
323 d_fpathconf=''
324 d_pathconf=''
325 d_pause=''
326 d_pipe=''
327 d_poll=''
328 d_portable=''
329 d_readdir=''
330 d_rewinddir=''
331 d_seekdir=''
332 d_telldir=''
333 d_readlink=''
334 d_rename=''
335 d_rmdir=''
336 d_safebcpy=''
337 d_safemcpy=''
338 d_select=''
339 d_sem=''
340 d_semctl=''
341 d_semget=''
342 d_semop=''
343 d_setegid=''
344 d_seteuid=''
345 d_setlinebuf=''
346 d_setlocale=''
347 d_setpgid=''
348 d_setpgrp2=''
349 d_bsdpgrp=''
350 d_setpgrp=''
351 d_setprior=''
352 d_setregid=''
353 d_setresgid=''
354 d_setresuid=''
355 d_setreuid=''
356 d_setrgid=''
357 d_setruid=''
358 d_setsid=''
359 d_sfio=''
360 usesfio=''
361 d_shm=''
362 d_shmat=''
363 d_shmatprototype=''
364 shmattype=''
365 d_shmctl=''
366 d_shmdt=''
367 d_shmget=''
368 d_sigaction=''
369 d_sigsetjmp=''
370 d_oldsock=''
371 d_socket=''
372 d_sockpair=''
373 sockethdr=''
374 socketlib=''
375 d_statblks=''
376 d_stdio_cnt_lval=''
377 d_stdio_ptr_lval=''
378 d_stdiobase=''
379 d_stdstdio=''
380 stdio_base=''
381 stdio_bufsiz=''
382 stdio_cnt=''
383 stdio_filbuf=''
384 stdio_ptr=''
385 d_index=''
386 d_strchr=''
387 d_strcoll=''
388 d_strctcpy=''
389 d_strerrm=''
390 d_strerror=''
391 d_sysernlst=''
392 d_syserrlst=''
393 d_strxfrm=''
394 d_symlink=''
395 d_syscall=''
396 d_sysconf=''
397 d_system=''
398 d_tcgetpgrp=''
399 d_tcsetpgrp=''
400 d_time=''
401 timetype=''
402 clocktype=''
403 d_times=''
404 d_truncate=''
405 d_tzname=''
406 d_umask=''
407 d_vfork=''
408 usevfork=''
409 d_voidsig=''
410 signal_t=''
411 d_volatile=''
412 d_charvspr=''
413 d_vprintf=''
414 d_wait4=''
415 d_waitpid=''
416 d_wcstombs=''
417 d_wctomb=''
418 dlext=''
419 cccdlflags=''
420 ccdlflags=''
421 dlsrc=''
422 ld=''
423 lddlflags=''
424 usedl=''
425 fpostype=''
426 gidtype=''
427 groupstype=''
428 h_fcntl=''
429 h_sysfile=''
430 db_hashtype=''
431 db_prefixtype=''
432 i_db=''
433 i_dbm=''
434 i_rpcsvcdbm=''
435 d_dirnamlen=''
436 direntrytype=''
437 i_dirent=''
438 i_dld=''
439 i_dlfcn=''
440 i_fcntl=''
441 i_float=''
442 i_gdbm=''
443 i_grp=''
444 i_limits=''
445 i_locale=''
446 i_malloc=''
447 i_math=''
448 i_memory=''
449 i_ndbm=''
450 i_neterrno=''
451 i_niin=''
452 i_sysin=''
453 d_pwage=''
454 d_pwchange=''
455 d_pwclass=''
456 d_pwcomment=''
457 d_pwexpire=''
458 d_pwquota=''
459 i_pwd=''
460 i_sfio=''
461 i_stddef=''
462 i_stdlib=''
463 i_string=''
464 strings=''
465 i_sysdir=''
466 i_sysfile=''
467 d_voidtty=''
468 i_bsdioctl=''
469 i_sysfilio=''
470 i_sysioctl=''
471 i_syssockio=''
472 i_sysndir=''
473 i_sysparam=''
474 i_sysresrc=''
475 i_sysselct=''
476 i_sysstat=''
477 i_systimes=''
478 i_systypes=''
479 i_sysun=''
480 i_syswait=''
481 i_sgtty=''
482 i_termio=''
483 i_termios=''
484 i_systime=''
485 i_systimek=''
486 i_time=''
487 timeincl=''
488 i_unistd=''
489 i_utime=''
490 i_values=''
491 i_stdarg=''
492 i_varargs=''
493 i_varhdr=''
494 i_vfork=''
495 intsize=''
496 libc=''
497 libperl=''
498 useshrplib=''
499 glibpth=''
500 libpth=''
501 loclibpth=''
502 plibpth=''
503 xlibpth=''
504 libs=''
505 lns=''
506 lseektype=''
507 make=''
508 make_set_make=''
509 d_mymalloc=''
510 freetype=''
511 mallocobj=''
512 mallocsrc=''
513 malloctype=''
514 usemymalloc=''
515 installman1dir=''
516 man1dir=''
517 man1direxp=''
518 man1ext=''
519 installman3dir=''
520 man3dir=''
521 man3direxp=''
522 man3ext=''
523 huge=''
524 large=''
525 medium=''
526 models=''
527 small=''
528 split=''
529 modetype=''
530 mydomain=''
531 myhostname=''
532 phostname=''
533 c=''
534 n=''
535 d_eofnblk=''
536 eagain=''
537 o_nonblock=''
538 rd_nodata=''
539 groupcat=''
540 hostcat=''
541 passcat=''
542 d_oldarchlib=''
543 oldarchlib=''
544 oldarchlibexp=''
545 orderlib=''
546 ranlib=''
547 package=''
548 spackage=''
549 pager=''
550 patchlevel=''
551 subversion=''
552 perladmin=''
553 perlpath=''
554 prefix=''
555 prefixexp=''
556 installprivlib=''
557 privlib=''
558 privlibexp=''
559 prototype=''
560 randbits=''
561 installscript=''
562 scriptdir=''
563 scriptdirexp=''
564 selecttype=''
565 sh=''
566 sig_name=''
567 sig_num=''
568 installsitearch=''
569 sitearch=''
570 sitearchexp=''
571 installsitelib=''
572 sitelib=''
573 sitelibexp=''
574 sizetype=''
575 so=''
576 sharpbang=''
577 shsharp=''
578 spitshell=''
579 ssizetype=''
580 startperl=''
581 startsh=''
582 stdchar=''
583 sysman=''
584 uidtype=''
585 nm_opt=''
586 nm_so_opt=''
587 runnm=''
588 usenm=''
589 useperlio=''
590 incpath=''
591 mips=''
592 mips_type=''
593 usrinc=''
594 defvoidused=''
595 voidflags=''
596 CONFIG=''
597
598 define='define'
599 undef='undef'
600 smallmach='pdp11 i8086 z8000 i80286 iAPX286'
601 rmlist=''
602
603 : We must find out about Eunice early
604 eunicefix=':'
605 if test -f /etc/unixtovms; then
606         eunicefix=/etc/unixtovms
607 fi
608 if test -f /etc/unixtovms.exe; then
609         eunicefix=/etc/unixtovms.exe
610 fi
611
612 : list of known cpp symbols, sorted alphabetically
613 al="AMIX BIT_MSF BSD BSD4_3 BSD_NET2 CMU CRAY DGUX DOLPHIN DPX2"
614 al="$al GO32 GOULD_PN HP700 I386 I80960 I960 Lynx M68000 M68K MACH"
615 al="$al MIPSEB MIPSEL MSDOS MTXINU MULTIMAX MVS"
616 al="$al M_COFF M_I186 M_I286 M_I386 M_I8086 M_I86 M_I86SM"
617 al="$al M_SYS3 M_SYS5 M_SYSIII M_SYSV M_UNIX M_XENIX"
618 al="$al NeXT OCS88 OSF1 PARISC PC532 PORTAR POSIX"
619 al="$al PWB R3000 RES RISC6000 RT Sun386i SVR3 SVR4"
620 al="$al SYSTYPE_BSD SYSTYPE_SVR4 SYSTYPE_SYSV Tek4132 Tek4300"
621 al="$al UMAXV USGr4 USGr4_2 UTEK UTS UTek UnicomPBB UnicomPBD Utek"
622 al="$al VMS Xenix286"
623 al="$al _AIX _AIX32 _AIX370 _AM29000 _COFF _CRAY _CX_UX _EPI"
624 al="$al _IBMESA _IBMR2 _M88K _M88KBCS_TARGET"
625 al="$al _MIPSEB _MIPSEL _M_COFF _M_I86 _M_I86SM _M_SYS3"
626 al="$al _M_SYS5 _M_SYSIII _M_SYSV _M_UNIX _M_XENIX _NLS _PGC_ _R3000"
627 al="$al _SYSTYPE_BSD _SYSTYPE_BSD43 _SYSTYPE_SVR4"
628 al="$al _SYSTYPE_SYSV _SYSV3 _U370 _UNICOS"
629 al="$al __386BSD__ __BIG_ENDIAN __BIG_ENDIAN__ __BSD_4_4__"
630 al="$al __DGUX__ __DPX2__ __H3050R __H3050RX"
631 al="$al __LITTLE_ENDIAN __LITTLE_ENDIAN__ __MACH__"
632 al="$al __MIPSEB __MIPSEB__ __MIPSEL __MIPSEL__"
633 al="$al __Next__ __OSF1__ __PARAGON__ __PGC__ __PWB __STDC__"
634 al="$al __SVR4_2__ __UMAXV__"
635 al="$al ____386BSD____ __alpha __alpha__ __amiga"
636 al="$al __bsd4_2 __bsd4_2__ __bsdi__ __convex__"
637 al="$al __host_mips__"
638 al="$al __hp9000s200 __hp9000s300 __hp9000s400 __hp9000s500"
639 al="$al __hp9000s500 __hp9000s700 __hp9000s800"
640 al="$al __hppa __hpux __hp_osf __i286 __i286__ __i386 __i386__"
641 al="$al __i486 __i486__ __i860 __i860__ __ibmesa __ksr1__ __linux__"
642 al="$al __m68k __m68k__ __m88100__ __m88k __m88k__"
643 al="$al __mc68000 __mc68000__ __mc68020 __mc68020__"
644 al="$al __mc68030 __mc68030__ __mc68040 __mc68040__"
645 al="$al __mc88100 __mc88100__ __mips __mips__"
646 al="$al __motorola__ __osf__ __pa_risc __sparc__ __stdc__"
647 al="$al __sun __sun__ __svr3__ __svr4__ __ultrix __ultrix__"
648 al="$al __unix __unix__ __uxpm__ __uxps__ __vax __vax__"
649 al="$al _host_mips _mips _unix"
650 al="$al a29k aegis aix aixpc alliant alpha am29000 amiga ansi ardent"
651 al="$al apollo ardent att386 att3b"
652 al="$al bsd bsd43 bsd4_2 bsd4_3 bsd4_4 bsdi bull"
653 al="$al cadmus clipper concurrent convex cray ctix"
654 al="$al dmert encore gcos gcx gimpel gould"
655 al="$al hbullx20 hcx host_mips hp200 hp300 hp700 hp800"
656 al="$al hp9000 hp9000s300 hp9000s400 hp9000s500"
657 al="$al hp9000s700 hp9000s800 hp9k8 hppa hpux"
658 al="$al i186 i286 i386 i486 i8086"
659 al="$al i80960 i860 iAPX286 ibm ibm032 ibmrt interdata is68k"
660 al="$al ksr1 linux luna luna88k m68k m88100 m88k"
661 al="$al mc300 mc500 mc68000 mc68010 mc68020 mc68030"
662 al="$al mc68040 mc68060 mc68k mc68k32 mc700"
663 al="$al mc88000 mc88100 merlin mert mips mvs n16"
664 al="$al ncl_el ncl_mr"
665 al="$al news1500 news1700 news1800 news1900 news3700"
666 al="$al news700 news800 news900 ns16000 ns32000"
667 al="$al ns32016 ns32332 ns32k nsc32000 os osf"
668 al="$al parisc pc532 pdp11 plexus posix pyr"
669 al="$al riscix riscos scs sequent sgi sinix sony sony_news"
670 al="$al sonyrisc sparc sparclite spectrum stardent stratos"
671 al="$al sun sun3 sun386 svr4 sysV68 sysV88"
672 al="$al titan tower tower32 tower32_200 tower32_600 tower32_700"
673 al="$al tower32_800 tower32_850 tss u370 u3b u3b2 u3b20 u3b200"
674 al="$al u3b20d u3b5 ultrix unix unixpc unos vax venix vms"
675 al="$al xenix z8000"
676
677 groupstype=''
678 i_whoami=''
679 : default library list
680 libswanted=''
681 : set useposix=false in your hint file to disable the POSIX extension.
682 useposix=true
683 : set useopcode=false in your hint file to disable the Opcode extension.
684 useopcode=true
685 : Define several unixisms.  These can be used in hint files.
686 exe_ext='' 
687 : Extra object files, if any, needed on this platform.
688 archobjs=''
689 : Possible local include directories to search.
690 : Set locincpth to "" in a hint file to defeat local include searches.
691 locincpth="/usr/local/include /opt/local/include /usr/gnu/include"
692 locincpth="$locincpth /opt/gnu/include /usr/GNU/include /opt/GNU/include"
693 :
694 : no include file wanted by default
695 inclwanted=''
696
697 : change the next line if compiling for Xenix/286 on Xenix/386
698 xlibpth='/usr/lib/386 /lib/386'
699
700 : Possible local library directories to search.
701 loclibpth="/usr/local/lib /opt/local/lib /usr/gnu/lib"
702 loclibpth="$loclibpth /opt/gnu/lib /usr/GNU/lib /opt/GNU/lib"
703
704 : general looking path for locating libraries
705 glibpth="/lib/pa1.1 /usr/shlib /usr/lib/large /lib /usr/lib"
706 glibpth="$glibpth $xlibpth /lib/large /usr/lib/small /lib/small"
707 glibpth="$glibpth /usr/ccs/lib /usr/ucblib /usr/shlib"
708
709 : Private path used by Configure to find libraries.  Its value
710 : is prepended to libpth. This variable takes care of special
711 : machines, like the mips.  Usually, it should be empty.
712 plibpth=''
713
714 : full support for void wanted by default
715 defvoidused=15
716
717 : List of libraries we want.
718 libswanted='sfio net socket inet nsl nm ndbm gdbm dbm db malloc dl'
719 libswanted="$libswanted dld ld sun m c cposix posix ndir dir crypt"
720 libswanted="$libswanted ucb bsd BSD PW x"
721 : We probably want to search /usr/shlib before most other libraries.
722 : This is only used by the lib/ExtUtils/MakeMaker.pm routine extliblist.
723 glibpth=`echo " $glibpth " | sed -e 's! /usr/shlib ! !'`
724 glibpth="/usr/shlib $glibpth"
725 : Do not use vfork unless overridden by a hint file.
726 usevfork=false
727
728 : Find the basic shell for Bourne shell scripts
729 case "$sh" in
730 '')
731         : SYSTYPE is for some older MIPS systems. 
732         : I do not know if it is still needed.
733         case "$SYSTYPE" in
734         *bsd*|sys5*) xxx="/$SYSTYPE/bin/sh";;
735         *) xxx='/bin/sh';;
736         esac
737         if test -f "$xxx"; then
738                 sh="$xxx"
739         else
740                 : Build up a list and do a single loop so we can 'break' out.
741                 pth=`echo $PATH | sed -e "s/$p_/ /g"`
742                 for xxx in sh bash ksh pdksh ash; do
743                         for p in $pth; do
744                                 try="$try ${p}/${xxx}"
745                         done
746                 done
747                 for xxx in $try; do
748                         if test -f "$xxx"; then
749                                 sh="$xxx";
750                                 echo "Your Bourne shell appears to be in $sh."
751                                 break
752                         elif test -f "$xxx.exe"; then
753                                 sh="$xxx";
754                                 echo "Hmm.  Your Bourne shell appears to be in $sh."
755                                 break
756                         fi
757                 done
758         fi
759         ;;
760 esac
761
762 case "$sh" in
763 '')     cat <<EOM >&2
764 $me:  Fatal Error:  I can't find a Bourne Shell anywhere.  
765 Usually it's in /bin/sh.  How did you even get this far?
766 Please contact me (Andy Dougherty) at doughera@lafcol.lafayette.edu and 
767 we'll try to straigten this all out.
768 EOM
769         exit 1
770         ;;
771 esac
772
773 : see if sh knows # comments
774 if `$sh -c '#' >/dev/null 2>&1`; then
775         shsharp=true
776         spitshell=cat
777         echo " "
778         xcat=/bin/cat
779         test -f $xcat || xcat=/usr/bin/cat
780         echo "#!$xcat" >try
781         $eunicefix try
782         chmod +x try
783         ./try > today
784         if test -s today; then
785                 sharpbang='#!'
786         else
787                 echo "#! $xcat" > try
788                 $eunicefix try
789                 chmod +x try
790                 ./try > today
791                 if test -s today; then
792                         sharpbang='#! '
793                 else
794                         echo "Okay, let's see if #! works on this system..."
795                         echo "It's just a comment."
796                         sharpbang=': use '
797                 fi
798         fi
799 else
800         echo "Your $sh doesn't grok # comments--I will strip them later on."
801         shsharp=false
802         cd ..
803         echo "exec grep -v '^[  ]*#'" >spitshell
804         chmod +x spitshell
805         $eunicefix spitshell
806         spitshell=`pwd`/spitshell
807         cd UU
808         echo "I presume that if # doesn't work, #! won't work either!"
809         sharpbang=': use '
810 fi
811 rm -f try today
812
813 : figure out how to guarantee sh startup
814 case "$startsh" in
815 '') startsh=${sharpbang}${sh} ;;
816 *)
817 esac
818 cat >try <<EOSS
819 $startsh
820 set abc
821 test "$?abc" != 1
822 EOSS
823
824 chmod +x try
825 $eunicefix try
826 if ./try; then
827         : echo "Yup, it does."
828 else
829         echo "Hmm.  '$startsh' didn't work."
830         echo "You may have to fix up the shell scripts to make sure sh runs them."
831 fi
832 rm -f try
833
834 : script used to extract .SH files with variable substitutions
835 cat >extract <<EOS
836 $startsh
837 EOS
838 cat >>extract <<'EOS'
839 CONFIG=true
840 echo "Doing variable substitutions on .SH files..."
841 if test -f MANIFEST; then
842         shlist=`awk '{print $1}' <MANIFEST | grep '\.SH'`
843         : Pick up possible extension manifests.
844         for dir in ext/* ; do
845                 if test -f $dir/MANIFEST; then
846                         xxx=`awk '{print $1}' < $dir/MANIFEST | 
847                                 sed -n "/\.SH$/ s@^@$dir/@p"`
848                         shlist="$shlist $xxx"
849                 fi
850         done
851         set x $shlist
852 else
853         echo "(Looking for .SH files under the current directory.)"
854         set x `find . -name "*.SH" -print`
855 fi
856 shift
857 case $# in
858 0) set x *.SH; shift;;
859 esac
860 if test ! -f $1; then
861         shift
862 fi
863 for file in $*; do
864         case "$file" in
865         */*)
866                 dir=`expr X$file : 'X\(.*\)/'`
867                 file=`expr X$file : 'X.*/\(.*\)'`
868                 (cd $dir && . ./$file)
869                 ;;
870         *)
871                 . ./$file
872                 ;;
873         esac
874 done
875 if test -f config_h.SH; then
876         if test ! -f config.h; then
877         : oops, they left it out of MANIFEST, probably, so do it anyway.
878         . ./config_h.SH
879         fi
880 fi
881 EOS
882
883 : produce awk script to parse command line options
884 cat >options.awk <<'EOF'
885 BEGIN {
886         optstr = "dD:eEf:hKOrsSU:V";    # getopt-style specification
887
888         len = length(optstr);
889         for (i = 1; i <= len; i++) {
890                 c = substr(optstr, i, 1);
891                 if (i < len) a = substr(optstr, i + 1, 1); else a = "";
892                 if (a == ":") {
893                         arg[c] = 1;
894                         i++;
895                 }
896                 opt[c] = 1;
897         }
898 }
899 {
900         expect = 0;
901         str = $0;
902         if (substr(str, 1, 1) != "-") {
903                 printf("'%s'\n", str);
904                 next;
905         }
906         len = length($0);
907         for (i = 2; i <= len; i++) {
908                 c = substr(str, i, 1);
909                 if (!opt[c]) {
910                         printf("-%s\n", substr(str, i));
911                         next;
912                 }
913                 printf("-%s\n", c);
914                 if (arg[c]) {
915                         if (i < len)
916                                 printf("'%s'\n", substr(str, i + 1));
917                         else
918                                 expect = 1;
919                         next;
920                 }
921         }
922 }
923 END {
924         if (expect)
925                 print "?";
926 }
927 EOF
928
929 : process the command line options
930 set X `for arg in "$@"; do echo "X$arg"; done |
931         sed -e s/X// | awk -f options.awk`
932 eval "set $*"
933 shift
934 rm -f options.awk
935
936 : set up default values
937 fastread=''
938 reuseval=false
939 config_sh=''
940 alldone=''
941 error=''
942 silent=''
943 extractsh=''
944 override=''
945 knowitall=''
946 rm -f optdef.sh
947
948 : option parsing
949 while test $# -gt 0; do
950         case "$1" in
951         -d) shift; fastread=yes;;
952         -e) shift; alldone=cont;;
953         -f)
954                 shift
955                 cd ..
956                 if test -r "$1"; then
957                         config_sh="$1"
958                 else
959                         echo "$me: cannot read config file $1." >&2
960                         error=true
961                 fi
962                 cd UU
963                 shift;;
964         -h) shift; error=true;;
965         -r) shift; reuseval=true;;
966         -s) shift; silent=true;;
967         -E) shift; alldone=exit;;
968         -K) shift; knowitall=true;;
969         -O) shift; override=true;;
970         -S) shift; extractsh=true;;
971         -D)
972                 shift
973                 case "$1" in
974                 *=)
975                         echo "$me: use '-U symbol=', not '-D symbol='." >&2
976                         echo "$me: ignoring -D $1" >&2
977                         ;;
978                 *=*) echo "$1" | \
979                                 sed -e "s/'/'\"'\"'/g" -e "s/=\(.*\)/='\1'/" >> optdef.sh;;
980                 *) echo "$1='define'" >> optdef.sh;;
981                 esac
982                 shift
983                 ;;
984         -U)
985                 shift
986                 case "$1" in
987                 *=) echo "$1" >> optdef.sh;;
988                 *=*)
989                         echo "$me: use '-D symbol=val', not '-U symbol=val'." >&2
990                         echo "$me: ignoring -U $1" >&2
991                         ;;
992                 *) echo "$1='undef'" >> optdef.sh;;
993                 esac
994                 shift
995                 ;;
996         -V) echo "$me generated by metaconfig 3.0 PL60." >&2
997                 exit 0;;
998         --) break;;
999         -*) echo "$me: unknown option $1" >&2; shift; error=true;;
1000         *) break;;
1001         esac
1002 done
1003
1004 case "$error" in
1005 true)
1006         cat >&2 <<EOM
1007 Usage: $me [-dehrEKOSV] [-f config.sh] [-D symbol] [-D symbol=value]
1008                  [-U symbol] [-U symbol=]
1009   -d : use defaults for all answers.
1010   -e : go on without questioning past the production of config.sh.
1011   -f : specify an alternate default configuration file.
1012   -h : print this help message and exit (with an error status).
1013   -r : reuse C symbols value if possible (skips costly nm extraction).
1014   -s : silent mode, only echoes questions and essential information.
1015   -D : define symbol to have some value:
1016          -D symbol         symbol gets the value 'define'
1017          -D symbol=value   symbol gets the value 'value'
1018   -E : stop at the end of questions, after having produced config.sh.
1019   -K : do not use unless you know what you are doing.
1020   -O : let -D and -U override definitions from loaded configuration file.
1021   -S : perform variable substitutions on all .SH files (can mix with -f)
1022   -U : undefine symbol:
1023          -U symbol    symbol gets the value 'undef'
1024          -U symbol=   symbol gets completely empty
1025   -V : print version number and exit (with a zero status).
1026 EOM
1027         exit 1
1028         ;;
1029 esac
1030
1031 exec 4>&1
1032 case "$silent" in
1033 true) exec 1>/dev/null;;
1034 esac
1035
1036 : run the defines and the undefines, if any, but leave the file out there...
1037 touch optdef.sh
1038 . ./optdef.sh
1039
1040 case "$extractsh" in
1041 true)
1042         case "$config_sh" in
1043         '') config_sh='config.sh'; config='./config.sh';;
1044         /*) config="$config_sh";;
1045         *) config="./$config_sh";;
1046         esac
1047         echo " "
1048         echo "Fetching answers from $config_sh..."
1049         cd ..
1050         . $config
1051         test "$override" && . ./optdef.sh
1052         echo " "
1053         . ./UU/extract
1054         rm -rf UU
1055         echo "Done."
1056         exit 0
1057         ;;
1058 esac
1059
1060 : set package name
1061 package=perl5
1062 first=`echo $package | sed -e 's/^\(.\).*/\1/'`
1063 last=`echo $package | sed -e 's/^.\(.*\)/\1/'`
1064 case "`echo AbyZ | tr '[:lower:]' '[:upper:]' 2>/dev/null`" in
1065 ABYZ) spackage=`echo $first | tr '[:lower:]' '[:upper:]'`$last;;
1066 *) spackage=`echo $first | tr '[a-z]' '[A-Z]'`$last;;
1067 esac
1068
1069 : Eunice requires " " instead of "", can you believe it
1070 echo " "
1071 : Here we go...
1072 echo "Beginning of configuration questions for $package."
1073
1074 trap 'echo " "; test -d ../UU && rm -rf X $rmlist; exit 1' 1 2 3 15
1075
1076 : Some greps do not return status, grrr.
1077 echo "grimblepritz" >grimble
1078 if grep blurfldyick grimble >/dev/null 2>&1 ; then
1079         contains=contains
1080 elif grep grimblepritz grimble >/dev/null 2>&1 ; then
1081         contains=grep
1082 else
1083         contains=contains
1084 fi
1085 rm -f grimble
1086 : the following should work in any shell
1087 case "$contains" in
1088 contains*)
1089         echo " "
1090         echo "AGH!  Grep doesn't return a status.  Attempting remedial action."
1091         cat >contains <<'EOSS'
1092 grep "$1" "$2" >.greptmp && cat .greptmp && test -s .greptmp
1093 EOSS
1094 chmod +x contains
1095 esac
1096
1097 : first determine how to suppress newline on echo command
1098 echo " "
1099 echo "Checking echo to see how to suppress newlines..."
1100 (echo "hi there\c" ; echo " ") >.echotmp
1101 if $contains c .echotmp >/dev/null 2>&1 ; then
1102         echo "...using -n."
1103         n='-n'
1104         c=''
1105 else
1106         cat <<'EOM'
1107 ...using \c
1108 EOM
1109         n=''
1110         c='\c'
1111 fi
1112 echo $n "The star should be here-->$c"
1113 echo '*'
1114 rm -f .echotmp
1115
1116 : Now test for existence of everything in MANIFEST
1117 echo " "
1118 if test -f ../MANIFEST; then
1119         echo "First let's make sure your kit is complete.  Checking..." >&4
1120         awk '$1 !~ /PACK[A-Z]+/ {print $1}' ../MANIFEST | split -50
1121         rm -f missing
1122         for filelist in x??; do
1123                 (cd ..; ls `cat UU/$filelist` >/dev/null 2>>UU/missing)
1124         done
1125         if test -s missing; then
1126                 cat missing >&4
1127                 cat >&4 <<'EOM'
1128
1129 THIS PACKAGE SEEMS TO BE INCOMPLETE.
1130
1131 You have the option of continuing the configuration process, despite the
1132 distinct possibility that your kit is damaged, by typing 'y'es.  If you
1133 do, don't blame me if something goes wrong.  I advise you to type 'n'o
1134 and contact the author (doughera@lafcol.lafayette.edu).
1135
1136 EOM
1137                 echo $n "Continue? [n] $c" >&4
1138                 read ans
1139                 case "$ans" in
1140                 y*)
1141                         echo "Continuing..." >&4
1142                         rm -f missing
1143                         ;;
1144                 *)
1145                         echo "ABORTING..." >&4
1146                         kill $$
1147                         ;;
1148                 esac
1149         else
1150                 echo "Looks good..." >&4
1151         fi
1152 else
1153         echo "There is no MANIFEST file.  I hope your kit is complete !"
1154 fi
1155 rm -f missing x??
1156
1157 : compute the number of columns on the terminal for proper question formatting
1158 case "$COLUMNS" in
1159 '') COLUMNS='80';;
1160 esac
1161
1162 : set up the echo used in my read
1163 myecho="case \"\$xxxm\" in
1164 '') echo $n \"\$rp $c\" >&4;;
1165 *) case \"\$rp\" in
1166         '') echo $n \"[\$xxxm] $c\";;
1167         *)
1168                 if test \`echo \"\$rp [\$xxxm]  \" | wc -c\` -ge $COLUMNS; then
1169                         echo \"\$rp\" >&4
1170                         echo $n \"[\$xxxm] $c\" >&4
1171                 else
1172                         echo $n \"\$rp [\$xxxm] $c\" >&4
1173                 fi
1174                 ;;
1175         esac;;
1176 esac"
1177
1178 : now set up to do reads with possible shell escape and default assignment
1179 cat <<EOSC >myread
1180 xxxm=\$dflt
1181 $myecho
1182 ans='!'
1183 case "\$fastread" in
1184 yes) case "\$dflt" in
1185         '') ;;
1186         *) ans='';
1187                 case "\$silent-\$rp" in
1188                 true-) ;;
1189                 *) echo " " >&4;;
1190                 esac;;
1191         esac;;
1192 *) case "\$silent" in
1193         true) case "\$rp" in
1194                 '') ans='';;
1195                 esac;;
1196         esac;;
1197 esac
1198 while expr "X\$ans" : "X!" >/dev/null; do
1199         read answ
1200         set x \$xxxm
1201         shift
1202         aok=''; eval "ans=\"\$answ\"" && aok=y
1203         case  "\$answ" in
1204         "\$ans")
1205                 case "\$ans" in
1206                 \\&*)
1207                         set x \`expr "X\$ans" : "X&\(.*\)\$"\`
1208                         shift
1209                         case "\$1" in
1210                         -d)
1211                                 fastread=yes
1212                                 echo "(OK, I'll run with -d after this question.)" >&4
1213                                 ;;
1214                         -*)
1215                                 echo "*** Sorry, \$1 not supported yet." >&4
1216                                 ;;
1217                         esac
1218                         $myecho
1219                         ans=!
1220                         ;;
1221                 "!")
1222                         sh 1>&4
1223                         echo " "
1224                         $myecho
1225                         ;;
1226                 !*)
1227                         set x \`expr "X\$ans" : "X!\(.*\)\$"\`
1228                         shift
1229                         sh 1>&4 -c "\$*"
1230                         echo " "
1231                         $myecho
1232                         ;;
1233                 esac;;
1234         *)
1235                 case "\$aok" in
1236                 y)
1237                         echo "*** Substitution done -- please confirm."
1238                         xxxm="\$ans"
1239                         ans=\`echo $n "\$ans$c" | tr '\012' ' '\`
1240                         xxxm="\$ans"
1241                         ans=!
1242                         ;;
1243                 *)
1244                         echo "*** Error -- try again."
1245                         ans=!
1246                         ;;
1247                 esac
1248                 $myecho
1249                 ;;
1250         esac
1251         case "\$ans\$xxxm\$nostick" in
1252         '')
1253                 ans=!
1254                 $myecho
1255                 ;;
1256         esac
1257 done
1258 case "\$ans" in
1259 '') ans="\$xxxm";;
1260 esac
1261 EOSC
1262
1263 : create .config dir to save info across Configure sessions
1264 test -d ../.config || mkdir ../.config
1265 cat >../.config/README <<EOF
1266 This directory created by Configure to save information that should
1267 persist across sessions.
1268
1269 You may safely delete it if you wish.
1270 EOF
1271
1272 : general instructions
1273 needman=true
1274 firsttime=true
1275 user=`(logname) 2>/dev/null`
1276 case "$user" in "")
1277         user=`whoami 2>&1` ;;
1278 esac
1279 if $contains "^$user\$" ../.config/instruct >/dev/null 2>&1; then
1280         firsttime=false
1281         echo " "
1282         rp='Would you like to see the instructions?'
1283         dflt=n
1284         . ./myread
1285         case "$ans" in
1286         [yY]*) ;;
1287         *) needman=false;;
1288         esac
1289 fi
1290 if $needman; then
1291         cat <<EOH
1292  
1293 This installation shell script will examine your system and ask you questions
1294 to determine how the perl5 package should be installed. If you get
1295 stuck on a question, you may use a ! shell escape to start a subshell or
1296 execute a command.  Many of the questions will have default answers in square
1297 brackets; typing carriage return will give you the default.
1298
1299 On some of the questions which ask for file or directory names you are allowed
1300 to use the ~name construct to specify the login directory belonging to "name",
1301 even if you don't have a shell which knows about that.  Questions where this is
1302 allowed will be marked "(~name ok)".
1303
1304 EOH
1305         rp=''
1306         dflt='Type carriage return to continue'
1307         . ./myread
1308         cat <<'EOH'
1309
1310 The prompter used in this script allows you to use shell variables and
1311 backticks in your answers.  You may use $1, $2, etc...  to refer to the words
1312 in the default answer, as if the default line was a set of arguments given to a
1313 script shell.  This means you may also use $* to repeat the whole default line,
1314 so you do not have to re-type everything to add something to the default.
1315
1316 Everytime there is a substitution, you will have to confirm.  If there is an
1317 error (e.g. an unmatched backtick), the default answer will remain unchanged
1318 and you will be prompted again.
1319
1320 If you are in a hurry, you may run 'Configure -d'.  This will bypass nearly all
1321 the questions and use the computed defaults (or the previous answers if there
1322 was already a config.sh file). Type 'Configure -h' for a list of options.
1323 You may also start interactively and then answer '& -d' at any prompt to turn
1324 on the non-interactive behaviour for the remaining of the execution.
1325
1326 EOH
1327         . ./myread
1328         cat <<EOH
1329
1330 Much effort has been expended to ensure that this shell script will run on any
1331 Unix system.  If despite that it blows up on yours, your best bet is to edit
1332 Configure and run it again.  If you can't run Configure for some reason,
1333 you'll have to generate a config.sh file by hand.  Whatever problems you
1334 have, let me (doughera@lafcol.lafayette.edu) know how I blew it.
1335
1336 This installation script affects things in two ways:
1337
1338 1) it may do direct variable substitutions on some of the files included
1339    in this kit.
1340 2) it builds a config.h file for inclusion in C programs.  You may edit
1341    any of these files as the need arises after running this script.
1342
1343 If you make a mistake on a question, there is no easy way to back up to it
1344 currently.  The easiest thing to do is to edit config.sh and rerun all the SH
1345 files.  Configure will offer to let you do this before it runs the SH files.
1346
1347 EOH
1348         dflt='Type carriage return to continue'
1349         . ./myread
1350         case "$firsttime" in
1351         true) echo $user >>../.config/instruct;;
1352         esac
1353 fi
1354
1355 : find out where common programs are
1356 echo " "
1357 echo "Locating common programs..." >&4
1358 cat <<EOSC >loc
1359 $startsh
1360 case \$# in
1361 0) exit 1;;
1362 esac
1363 thing=\$1
1364 shift
1365 dflt=\$1
1366 shift
1367 for dir in \$*; do
1368         case "\$thing" in
1369         .)
1370         if test -d \$dir/\$thing; then
1371                 echo \$dir
1372                 exit 0
1373         fi
1374         ;;
1375         *)
1376         for thisthing in \$dir/\$thing; do
1377                 : just loop through to pick last item
1378         done
1379         if test -f \$thisthing; then
1380                 echo \$thisthing
1381                 exit 0
1382         elif test -f \$dir/\$thing.exe; then
1383                 : on Eunice apparently
1384                 echo \$dir/\$thing
1385                 exit 0
1386         fi
1387         ;;
1388         esac
1389 done
1390 echo \$dflt
1391 exit 1
1392 EOSC
1393 chmod +x loc
1394 $eunicefix loc
1395 loclist="
1396 awk
1397 cat
1398 comm
1399 cp
1400 echo
1401 expr
1402 find
1403 grep
1404 ls
1405 mkdir
1406 rm
1407 sed
1408 sort
1409 touch
1410 tr
1411 uniq
1412 "
1413 trylist="
1414 Mcc
1415 byacc
1416 cpp
1417 csh
1418 date
1419 egrep
1420 gzip
1421 less
1422 line
1423 ln
1424 more
1425 nroff
1426 perl
1427 pg
1428 sendmail
1429 test
1430 uname
1431 zip
1432 "
1433 pth=`echo $PATH | sed -e "s/$p_/ /g"`
1434 pth="$pth /lib /usr/lib"
1435 for file in $loclist; do
1436         xxx=`./loc $file $file $pth`
1437         eval $file=$xxx
1438         eval _$file=$xxx
1439         case "$xxx" in
1440         /*)
1441                 echo $file is in $xxx.
1442                 ;;
1443         ?:[\\/]*)
1444                 echo $file is in $xxx.
1445                 ;;
1446         *)
1447                 echo "I don't know where '$file' is, and my life depends on it." >&4
1448                 echo "Go find a public domain implementation or fix your PATH setting!" >&4
1449                 exit 1
1450                 ;;
1451         esac
1452 done
1453 echo " "
1454 echo "Don't worry if any of the following aren't found..."
1455 say=offhand
1456 for file in $trylist; do
1457         xxx=`./loc $file $file $pth`
1458         eval $file=$xxx
1459         eval _$file=$xxx
1460         case "$xxx" in
1461         /*)
1462                 echo $file is in $xxx.
1463                 ;;
1464         ?:[\\/]*)
1465                 echo $file is in $xxx.
1466                 ;;
1467         *)
1468                 echo "I don't see $file out there, $say."
1469                 say=either
1470                 ;;
1471         esac
1472 done
1473 case "$egrep" in
1474 egrep)
1475         echo "Substituting grep for egrep."
1476         egrep=$grep
1477         ;;
1478 esac
1479 case "$ln" in
1480 ln)
1481         echo "Substituting cp for ln."
1482         ln=$cp
1483         ;;
1484 esac
1485 case "$test" in
1486 test)
1487         echo "Hopefully test is built into your sh."
1488         ;;
1489 *)
1490         if `sh -c "PATH= test true" >/dev/null 2>&1`; then
1491                 echo "Using the test built into your sh."
1492                 test=test
1493                 _test=test
1494         fi
1495         ;;
1496 esac
1497 case "$echo" in
1498 echo)
1499         echo "Hopefully echo is built into your sh."
1500         ;;
1501 '') ;;
1502 *)
1503         echo " "
1504 echo "Checking compatibility between $echo and builtin echo (if any)..." >&4
1505         $echo $n "hi there$c" >foo1
1506         echo $n "hi there$c" >foo2
1507         if cmp foo1 foo2 >/dev/null 2>&1; then
1508                 echo "They are compatible.  In fact, they may be identical."
1509         else
1510                 case "$n" in
1511                 '-n') n='' c='\c';;
1512                 *) n='-n' c='';;
1513                 esac
1514                 cat <<FOO
1515 They are not compatible!  You are probably running ksh on a non-USG system.
1516 I'll have to use $echo instead of the builtin, since Bourne shell doesn't
1517 have echo built in and we may have to run some Bourne shell scripts.  That
1518 means I'll have to use '$n$c' to suppress newlines now.  Life is ridiculous.
1519
1520 FOO
1521                 $echo $n "The star should be here-->$c"
1522                 $echo "*"
1523         fi
1524         $rm -f foo1 foo2
1525         ;;
1526 esac
1527
1528 : determine whether symbolic links are supported
1529 echo " "
1530 $touch blurfl
1531 if $ln -s blurfl sym > /dev/null 2>&1 ; then
1532         echo "Symbolic links are supported." >&4
1533         lns="$ln -s"
1534 else
1535         echo "Symbolic links are NOT supported." >&4
1536         lns="$ln"
1537 fi
1538 $rm -f blurfl sym
1539
1540 : see whether [:lower:] and [:upper:] are supported character classes
1541 echo " "
1542 up='[A-Z]'
1543 low='[a-z]'
1544 case "`echo AbyZ | $tr '[:lower:]' '[:upper:]' 2>/dev/null`" in
1545 ABYZ)
1546         echo "Good, your tr supports [:lower:] and [:upper:] to convert case." >&4
1547         up='[:upper:]'
1548         low='[:lower:]'
1549         ;;
1550 *)
1551         echo "Your tr only supports [a-z] and [A-Z] to convert case." >&4
1552         ;;
1553 esac
1554 : set up the translation script tr, must be called with ./tr of course
1555 cat >tr <<EOSC
1556 $startsh
1557 case "\$1\$2" in
1558 '[A-Z][a-z]') exec $tr '$up' '$low';;
1559 '[a-z][A-Z]') exec $tr '$low' '$up';;
1560 esac
1561 exec $tr "\$@"
1562 EOSC
1563 chmod +x tr
1564 $eunicefix tr
1565
1566 : Try to determine whether config.sh was made on this system
1567 case "$config_sh" in
1568 '')
1569 myuname=`( ($uname -a) 2>/dev/null || hostname) 2>&1`
1570 myuname=`echo $myuname | $sed -e 's/^[^=]*=//' -e 's/\///g' | \
1571         ./tr '[A-Z]' '[a-z]' | tr '\012' ' '`
1572 newmyuname="$myuname"
1573 dflt=n
1574 case "$knowitall" in
1575 '')
1576         if test -f ../config.sh; then
1577                 if $contains myuname= ../config.sh >/dev/null 2>&1; then
1578                         eval "`grep myuname= ../config.sh`"
1579                 fi
1580                 if test "X$myuname" = "X$newmyuname"; then
1581                         dflt=y
1582                 fi
1583         fi
1584         ;;
1585 *) dflt=y;;
1586 esac
1587
1588 : Get old answers from old config file if Configure was run on the
1589 : same system, otherwise use the hints.
1590 hint=default
1591 cd ..
1592 if test -f config.sh; then
1593         echo " "
1594         rp="I see a config.sh file.  Shall I use it to set the defaults?"
1595         . UU/myread
1596         case "$ans" in
1597         n*|N*) echo "OK, I'll ignore it."; mv config.sh config.sh.old;;
1598         *)  echo "Fetching default answers from your old config.sh file..." >&4
1599                 tmp_n="$n"
1600                 tmp_c="$c"
1601                 tmp_sh="$sh"
1602                 . ./config.sh
1603                 cp config.sh UU
1604                 n="$tmp_n"
1605                 c="$tmp_c"
1606                 : Older versions did not always set $sh.  Catch re-use of such
1607                 : an old config.sh.
1608                 case "$sh" in
1609                 '') sh="$tmp_sh" ;;
1610                 esac
1611                 hint=previous
1612                 ;;
1613         esac
1614 fi
1615 if test ! -f config.sh; then
1616         $cat <<EOM
1617
1618 First time through, eh?  I have some defaults handy for the following systems:
1619
1620 EOM
1621         cd hints; ls -C *.sh | $sed 's/\.sh/   /g' >&4
1622         dflt=''
1623         : Half the following guesses are probably wrong... If you have better
1624         : tests or hints, please send them to doughera@lafcol.lafayette.edu
1625         : The metaconfig authors would also appreciate a copy...
1626         $test -f /irix && osname=irix
1627         $test -f /xenix && osname=sco_xenix
1628         $test -f /dynix && osname=dynix
1629         $test -f /dnix && osname=dnix
1630         $test -f /unicos && osname=unicos && osvers=`$uname -r`
1631         $test -f /bin/mips && /bin/mips && osname=mips
1632         $test -d /NextApps && set X `hostinfo | grep 'NeXT Mach.*:' | \
1633                 $sed -e 's/://' -e 's/\./_/'` && osname=next && osvers=$4
1634         $test -d /usr/apollo/bin && osname=apollo
1635         $test -f /etc/saf/_sactab && osname=svr4
1636         $test -d /usr/include/minix && osname=minix
1637         if $test -d /MachTen; then
1638                 osname=machten 
1639                 if $test -x /sbin/version; then
1640                         osvers=`/sbin/version | $awk '{print $2}' | 
1641                         $sed -e 's/[A-Za-z]$//'`
1642                 elif $test -x /usr/etc/version; then
1643                         osvers=`/usr/etc/version | $awk '{print $2}' | 
1644                         $sed -e 's/[A-Za-z]$//'`
1645                 else
1646                         osvers="$2.$3"
1647                 fi
1648         fi
1649         if $test -f $uname; then
1650                 set X $myuname
1651                 shift
1652
1653                 case "$5" in
1654                 fps*) osname=fps ;;
1655                 mips*)
1656                         case "$4" in
1657                         umips) osname=umips ;;
1658                         *) osname=mips ;;
1659                         esac;;
1660                 [23]100) osname=mips ;;
1661                 next*) osname=next ;;
1662                 news*) osname=news ;;
1663                 i386*)
1664                         if $test -f /etc/kconfig; then
1665                                 osname=isc
1666                                 if test "$lns" = "ln -s"; then
1667                                         osvers=4
1668                                 elif $contains _SYSV3 /usr/include/stdio.h > /dev/null 2>&1 ; then
1669                                         osvers=3
1670                                 elif $contains _POSIX_SOURCE /usr/include/stdio.h > /dev/null 2>&1 ; then
1671                                         osvers=2
1672                                 fi
1673                         fi
1674                         ;;
1675                 esac
1676
1677                 case "$1" in
1678                 aix) osname=aix
1679                         tmp=`( (oslevel) 2>/dev/null || echo "not found") 2>&1`
1680                         case "$tmp" in
1681                         'not found') osvers="$4"."$3" ;;
1682                         '<3240'|'<>3240') osvers=3.2.0 ;;
1683                         '=3240'|'>3240'|'<3250'|'<>3250') osvers=3.2.4 ;;
1684                         '=3250'|'>3250') osvers=3.2.5 ;;
1685                         *) osvers=$tmp;;
1686                         esac
1687                         ;;
1688                 dnix) osname=dnix
1689                         osvers="$3"
1690                         ;;
1691                 domainos) osname=apollo
1692                         osvers="$3"
1693                         ;;
1694                 dgux) osname=dgux 
1695                         osvers="$3"
1696                         ;;
1697                 dynixptx*) osname=dynixptx
1698                         osvers="$3"
1699                         ;;
1700                 freebsd) osname=freebsd 
1701                         osvers="$3" ;;
1702                 genix) osname=genix ;;
1703                 hp*) osname=hpux 
1704                         case "$3" in
1705                         *.08.*) osvers=9 ;;
1706                         *.09.*) osvers=9 ;;
1707                         *.10.*) osvers=10 ;;
1708                         *)      osvers="$3" ;;
1709                         esac
1710                         ;;
1711                 irix*) osname=irix
1712                         case "$3" in
1713                         4*) osvers=4 ;;
1714                         5*) osvers=5 ;;
1715                         *)      osvers="$3" ;;
1716                         esac
1717                         ;;
1718                 linux) osname=linux
1719                         case "$3" in
1720                         1*) osvers=1 ;;
1721                         *)      osvers="$3" ;;
1722                         esac
1723                         ;;
1724                 netbsd*) osname=netbsd 
1725                         osvers="$3"
1726                         ;;
1727                 bsd386) osname=bsd386
1728                         osvers=`$uname -r`
1729                         ;;
1730                 next*) osname=next ;;
1731                 solaris) osname=solaris
1732                         case "$3" in
1733                         5*) osvers=`echo $3 | $sed 's/^5/2/g'` ;;
1734                         *)      osvers="$3" ;;
1735                         esac
1736                         ;;
1737                 sunos) osname=sunos
1738                         case "$3" in
1739                         5*) osname=solaris
1740                                 osvers=`echo $3 | $sed 's/^5/2/g'` ;;
1741                         *)      osvers="$3" ;;
1742                         esac
1743                         ;;
1744                 titanos) osname=titanos
1745                         case "$3" in
1746                         1*) osvers=1 ;;
1747                         2*) osvers=2 ;;
1748                         3*) osvers=3 ;;
1749                         4*) osvers=4 ;;
1750                         *)      osvers="$3" ;;
1751                         esac
1752                         ;;
1753                 ultrix) osname=ultrix
1754                         osvers="$3"
1755                         ;;
1756                 osf1)   case "$5" in
1757                                 alpha)
1758                                         osname=dec_osf
1759                                         osvers=`echo "$3" | sed 's/^[vt]//'`
1760                                         ;;
1761                         hp*)    osname=hp_osf1  ;;
1762                         mips)   osname=mips_osf1 ;;
1763                         esac
1764                         ;;
1765                 uts) osname=uts 
1766                         osvers="$3"
1767                         ;;
1768                 $2) case "$osname" in
1769                         *isc*) ;;
1770                         *freebsd*) ;;
1771                         svr*)
1772                                 : svr4.x or possibly later
1773                                 case "svr$3" in 
1774                                 ${osname}*)
1775                                         osname=svr$3
1776                                         osvers=$4
1777                                         ;;
1778                                 esac
1779                                 case "$osname" in
1780                                 svr4.0)
1781                                         : Check for ESIX
1782                                         if test -f /stand/boot ; then
1783                                                 eval `grep '^INITPROG=[a-z/0-9]*$' /stand/boot`
1784                                                 if test -n "$INITPROG" -a -f "$INITPROG"; then
1785                         isesix=`strings -a $INITPROG|grep 'ESIX SYSTEM V/386 Release 4.0'`
1786                                                         if test -n "$isesix"; then
1787                                                                 osname=esix4
1788                                                         fi
1789                                                 fi
1790                                         fi
1791                                         ;;
1792                                 esac
1793                                 ;;
1794                         *)      if test -f /etc/systemid; then
1795                                         osname=sco
1796                                         set `echo $3 | $sed 's/\./ /g'` $4
1797                                         if $test -f sco_$1_$2_$3.sh; then
1798                                                 osvers=$1.$2.$3
1799                                         elif $test -f sco_$1_$2.sh; then
1800                                                 osvers=$1.$2
1801                                         elif $test -f sco_$1.sh; then
1802                                                 osvers=$1
1803                                         fi
1804                                 else
1805                                         case "$osname" in
1806                                         '') : Still unknown.  Probably a generic Sys V.
1807                                                 osname="sysv"
1808                                                 osvers="$3"
1809                                                 ;;
1810                                         esac
1811                                 fi
1812                                 ;;
1813                         esac
1814                         ;;
1815                 *)      case "$osname" in
1816                         '') : Still unknown.  Probably a generic BSD.
1817                                 osname="$1"
1818                                 osvers="$3"
1819                                 ;;
1820                         esac
1821                         ;;
1822                 esac
1823         else
1824                 if test -f /vmunix -a -f news_os.sh; then
1825                         (what /vmunix | ../UU/tr '[A-Z]' '[a-z]') > ../UU/kernel.what 2>&1
1826                         if $contains news-os ../UU/kernel.what >/dev/null 2>&1; then
1827                                 osname=news_os
1828                         fi
1829                         $rm -f ../UU/kernel.what
1830                 elif test -d c:/.; then
1831                         set X $myuname
1832                         osname=os2
1833                         osvers="$5"
1834                 fi
1835         fi
1836         
1837         : Now look for a hint file osname_osvers, unless one has been
1838         : specified already.
1839         case "$hintfile" in
1840         ''|' ')
1841                 file=`echo "${osname}_${osvers}" | $sed -e 's@\.@_@g' -e 's@_$@@'`
1842                 : Also try without trailing minor version numbers.
1843                 xfile=`echo $file | $sed -e 's@_[^_]*$@@'`
1844                 xxfile=`echo $xfile | $sed -e 's@_[^_]*$@@'`
1845                 xxxfile=`echo $xxfile | $sed -e 's@_[^_]*$@@'`
1846                 xxxxfile=`echo $xxxfile | $sed -e 's@_[^_]*$@@'`
1847                 case "$file" in
1848                 '') dflt=none ;;
1849                 *)  case "$osvers" in
1850                         '') dflt=$file
1851                                 ;;
1852                         *)  if $test -f $file.sh ; then
1853                                         dflt=$file
1854                                 elif $test -f $xfile.sh ; then
1855                                         dflt=$xfile
1856                                 elif $test -f $xxfile.sh ; then
1857                                         dflt=$xxfile
1858                                 elif $test -f $xxxfile.sh ; then
1859                                         dflt=$xxxfile
1860                                 elif $test -f $xxxxfile.sh ; then
1861                                         dflt=$xxxxfile
1862                                 elif $test -f "${osname}.sh" ; then
1863                                         dflt="${osname}"
1864                                 else
1865                                         dflt=none
1866                                 fi
1867                                 ;;
1868                         esac
1869                         ;;
1870                 esac
1871                 ;;
1872         *)
1873                 dflt=`echo $hintfile | $sed 's/\.sh$//'`
1874                 ;;
1875         esac
1876
1877         $cat <<EOM
1878
1879 You may give one or more space-separated answers, or "none" if appropriate.
1880 If your OS version has no hints, DO NOT give a wrong version -- say "none".
1881
1882 EOM
1883         rp="Which of these apply, if any?"
1884         . ../UU/myread
1885         tans=$ans
1886         for file in $tans; do
1887                 if $test -f $file.sh; then
1888                         . ./$file.sh
1889                         $cat $file.sh >> ../UU/config.sh
1890                 elif $test X$tans = X -o X$tans = Xnone ; then
1891                         : nothing
1892                 else
1893                         : Give one chance to correct a possible typo.
1894                         echo "$file.sh does not exist"
1895                         dflt=$file
1896                         rp="hint to use instead?"
1897                         . ../UU/myread
1898                         for file in $ans; do
1899                                 if $test -f "$file.sh"; then
1900                                         . ./$file.sh
1901                                         $cat $file.sh >> ../UU/config.sh
1902                                 elif $test X$ans = X -o X$ans = Xnone ; then
1903                                         : nothing
1904                                 else
1905                                         echo "$file.sh does not exist -- ignored."
1906                                 fi
1907                         done
1908                 fi
1909         done
1910
1911         hint=recommended
1912         : Remember our hint file for later.
1913         if $test -f "$file.sh" ; then
1914                 hintfile="$file"
1915         else
1916                 hintfile=''
1917         fi
1918
1919         cd ..
1920 fi
1921 cd UU
1922 ;;
1923 *)
1924         echo " "
1925         echo "Fetching default answers from $config_sh..." >&4
1926         tmp_n="$n"
1927         tmp_c="$c"
1928         cd ..
1929         cp $config_sh config.sh 2>/dev/null
1930         chmod +w config.sh
1931         . ./config.sh
1932         cd UU
1933         cp ../config.sh .
1934         n="$tmp_n"
1935         c="$tmp_c"
1936         hint=previous
1937         ;;
1938 esac
1939 test "$override" && . ./optdef.sh
1940 myuname="$newmyuname"
1941
1942 : Restore computed paths
1943 for file in $loclist $trylist; do
1944         eval $file="\$_$file"
1945 done
1946
1947 cat << EOM
1948
1949 Configure uses the operating system name and version to set some defaults.
1950 The default value is probably right if the name rings a bell. Otherwise,
1951 since spelling matters for me, either accept the default or answer "none"
1952 to leave it blank.
1953
1954 EOM
1955 case "$osname" in
1956         ''|' ')
1957                 case "$hintfile" in
1958                 ''|' '|none) dflt=none ;;
1959                 *)  dflt=`echo $hintfile | $sed -e 's/\.sh$//' -e 's/_.*$//'` ;;
1960                 esac
1961                 ;;
1962         *) dflt="$osname" ;;
1963 esac
1964 rp="Operating system name?"
1965 . ./myread
1966 case "$ans" in
1967 none)  osname='' ;;
1968 *) osname=`echo "$ans" | $sed -e 's/[   ][      ]*/_/g' | ./tr '[A-Z]' '[a-z]'`;;
1969 esac
1970 echo " "
1971 case "$osvers" in
1972         ''|' ')
1973                 case "$hintfile" in
1974                 ''|' '|none) dflt=none ;;
1975                 *)      dflt=`echo $hintfile | $sed -e 's/\.sh$//' -e 's/^[^_]*//'`
1976                         dflt=`echo $dflt | $sed -e 's/^_//' -e 's/_/./g'`
1977                         case "$dflt" in
1978                         ''|' ') dflt=none ;;
1979                         esac
1980                         ;;
1981                 esac
1982                 ;;
1983         *) dflt="$osvers" ;;
1984 esac
1985 rp="Operating system version?"
1986 . ./myread
1987 case "$ans" in
1988 none)  osvers='' ;;
1989 *) osvers="$ans" ;;
1990 esac
1991
1992
1993
1994 : who configured the system
1995 cf_time=`$date 2>&1`
1996 cf_by=`(logname) 2>/dev/null`
1997 case "$cf_by" in "")
1998         cf_by=`(whoami) 2>/dev/null`
1999         case "$cf_by" in "")
2000                 cf_by=unknown ;;
2001         esac ;;
2002 esac
2003
2004 : determine the architecture name
2005 echo " "
2006 if xxx=`./loc arch blurfl $pth`; $test -f "$xxx"; then
2007         tarch=`arch`"-$osname"
2008 elif xxx=`./loc uname blurfl $pth`; $test -f "$xxx" ; then
2009         if uname -m > tmparch 2>&1 ; then
2010                 tarch=`$sed -e 's/ /_/g' -e 's/$/'"-$osname/" tmparch`
2011         else
2012                 tarch="$osname"
2013         fi
2014         $rm -f tmparch
2015 else
2016         tarch="$osname"
2017 fi
2018 case "$myarchname" in
2019 ''|"$tarch") ;;
2020 *)
2021         echo "(Your architecture name used to be $myarchname.)"
2022         archname=''
2023         ;;
2024 esac
2025 case "$archname" in
2026 '') dflt="$tarch";;
2027 *) dflt="$archname";;
2028 esac
2029 rp='What is your architecture name'
2030 . ./myread
2031 archname="$ans"
2032 myarchname="$tarch"
2033
2034 : is AFS running?
2035 echo " "
2036 if test -d /afs; then
2037         echo "AFS may be running... I'll be extra cautious then..." >&4
2038         afs=true
2039 else
2040         echo "AFS does not seem to be running..." >&4
2041         afs=false
2042 fi
2043
2044 : decide how portable to be.  Allow command line overrides.
2045 case "$d_portable" in
2046 "$undef") ;;
2047 *)      d_portable="$define" ;;
2048 esac
2049
2050 : set up shell script to do ~ expansion
2051 cat >filexp <<EOSS
2052 $startsh
2053 : expand filename
2054 case "\$1" in
2055  ~/*|~)
2056         echo \$1 | $sed "s|~|\${HOME-\$LOGDIR}|"
2057         ;;
2058  ~*)
2059         if $test -f /bin/csh; then
2060                 /bin/csh -f -c "glob \$1"
2061                 failed=\$?
2062                 echo ""
2063                 exit \$failed
2064         else
2065                 name=\`$expr x\$1 : '..\([^/]*\)'\`
2066                 dir=\`$sed -n -e "/^\${name}:/{s/^[^:]*:[^:]*:[^:]*:[^:]*:[^:]*:\([^:]*\).*"'\$'"/\1/" -e p -e q -e '}' </etc/passwd\`
2067                 if $test ! -d "\$dir"; then
2068                         me=\`basename \$0\`
2069                         echo "\$me: can't locate home directory for: \$name" >&2
2070                         exit 1
2071                 fi
2072                 case "\$1" in
2073                 */*)
2074                         echo \$dir/\`$expr x\$1 : '..[^/]*/\(.*\)'\`
2075                         ;;
2076                 *)
2077                         echo \$dir
2078                         ;;
2079                 esac
2080         fi
2081         ;;
2082 *)
2083         echo \$1
2084         ;;
2085 esac
2086 EOSS
2087 chmod +x filexp
2088 $eunicefix filexp
2089
2090 : now set up to get a file name
2091 cat <<'EOSC' >getfile
2092 tilde=''
2093 fullpath=''
2094 already=''
2095 skip=''
2096 none_ok=''
2097 exp_file=''
2098 nopath_ok=''
2099 orig_rp="$rp"
2100 orig_dflt="$dflt"
2101
2102 case "$fn" in
2103 *\(*)
2104         expr $fn : '.*(\(.*\)).*' | tr ',' '\012' >getfile.ok
2105         fn=`echo $fn | sed 's/(.*)//'`
2106         ;;
2107 esac
2108
2109 case "$fn" in
2110 *:*)
2111         loc_file=`expr $fn : '.*:\(.*\)'`
2112         fn=`expr $fn : '\(.*\):.*'`
2113         ;;
2114 esac
2115
2116 case "$fn" in
2117 *~*) tilde=true;;
2118 esac
2119 case "$fn" in
2120 */*) fullpath=true;;
2121 esac
2122 case "$fn" in
2123 *+*) skip=true;;
2124 esac
2125 case "$fn" in
2126 *n*) none_ok=true;;
2127 esac
2128 case "$fn" in
2129 *e*) exp_file=true;;
2130 esac
2131 case "$fn" in
2132 *p*) nopath_ok=true;;
2133 esac
2134
2135 case "$fn" in
2136 *f*) type='File';;
2137 *d*) type='Directory';;
2138 *l*) type='Locate';;
2139 esac
2140
2141 what="$type"
2142 case "$what" in
2143 Locate) what='File';;
2144 esac
2145
2146 case "$exp_file" in
2147 '')
2148         case "$d_portable" in
2149         "$define") ;;
2150         *) exp_file=true;;
2151         esac
2152         ;;
2153 esac
2154
2155 cd ..
2156 while test "$type"; do
2157         redo=''
2158         rp="$orig_rp"
2159         dflt="$orig_dflt"
2160         case "$tilde" in
2161         true) rp="$rp (~name ok)";;
2162         esac
2163         . UU/myread
2164         if test -f UU/getfile.ok && \
2165                 $contains "^$ans\$" UU/getfile.ok >/dev/null 2>&1
2166         then
2167                 value="$ans"
2168                 ansexp="$ans"
2169                 break
2170         fi
2171         case "$ans" in
2172         none)
2173                 value=''
2174                 ansexp=''
2175                 case "$none_ok" in
2176                 true) type='';;
2177                 esac
2178                 ;;
2179         *)
2180                 case "$tilde" in
2181                 '') value="$ans"
2182                         ansexp="$ans";;
2183                 *)
2184                         value=`UU/filexp $ans`
2185                         case $? in
2186                         0)
2187                                 if test "$ans" != "$value"; then
2188                                         echo "(That expands to $value on this system.)"
2189                                 fi
2190                                 ;;
2191                         *) value="$ans";;
2192                         esac
2193                         ansexp="$value"
2194                         case "$exp_file" in
2195                         '') value="$ans";;
2196                         esac
2197                         ;;
2198                 esac
2199                 case "$fullpath" in
2200                 true)
2201                         case "$ansexp" in
2202                         /*) value="$ansexp" ;;
2203                         *)
2204                                 redo=true
2205                                 case "$already" in
2206                                 true)
2207                                 echo "I shall only accept a full path name, as in /bin/ls." >&4
2208                                 echo "Use a ! shell escape if you wish to check pathnames." >&4
2209                                         ;;
2210                                 *)
2211                                 echo "Please give a full path name, starting with slash." >&4
2212                                         case "$tilde" in
2213                                         true)
2214                                 echo "Note that using ~name is ok provided it expands well." >&4
2215                                                 already=true
2216                                                 ;;
2217                                         esac
2218                                 esac
2219                                 ;;
2220                         esac
2221                         ;;
2222                 esac
2223                 case "$redo" in
2224                 '')
2225                         case "$type" in
2226                         File)
2227                                 if test -f "$ansexp"; then
2228                                         type=''
2229                                 elif test -r "$ansexp" || (test -h "$ansexp") >/dev/null 2>&1
2230                                 then
2231                                         echo "($value is not a plain file, but that's ok.)"
2232                                         type=''
2233                                 fi
2234                                 ;;
2235                         Directory)
2236                                 if test -d "$ansexp"; then
2237                                         type=''
2238                                 fi
2239                                 ;;
2240                         Locate)
2241                                 if test -d "$ansexp"; then
2242                                         echo "(Looking for $loc_file in directory $value.)"
2243                                         value="$value/$loc_file"
2244                                         ansexp="$ansexp/$loc_file"
2245                                 fi
2246                                 if test -f "$ansexp"; then
2247                                         type=''
2248                                 fi
2249                                 case "$nopath_ok" in
2250                                 true)   case "$value" in
2251                                         */*) ;;
2252                                         *)      echo "Assuming $value will be in people's path."
2253                                                 type=''
2254                                                 ;;
2255                                         esac
2256                                         ;;
2257                                 esac
2258                                 ;;
2259                         esac
2260
2261                         case "$skip" in
2262                         true) type='';
2263                         esac
2264
2265                         case "$type" in
2266                         '') ;;
2267                         *)
2268                                 if test "$fastread" = yes; then
2269                                         dflt=y
2270                                 else
2271                                         dflt=n
2272                                 fi
2273                                 rp="$what $value doesn't exist.  Use that name anyway?"
2274                                 . UU/myread
2275                                 dflt=''
2276                                 case "$ans" in
2277                                 y*) type='';;
2278                                 *) echo " ";;
2279                                 esac
2280                                 ;;
2281                         esac
2282                         ;;
2283                 esac
2284                 ;;
2285         esac
2286 done
2287 cd UU
2288 ans="$value"
2289 rp="$orig_rp"
2290 dflt="$orig_dflt"
2291 rm -f getfile.ok
2292 EOSC
2293
2294 : determine root of directory hierarchy where package will be installed.
2295 case "$prefix" in
2296 '')
2297         dflt=`./loc . /usr/local /usr/local /local /opt /usr`
2298         ;;
2299 *)
2300         dflt="$prefix"
2301         ;;
2302 esac
2303 $cat <<EOM
2304
2305 By default, $package will be installed in $dflt/bin, manual
2306 pages under $dflt/man, etc..., i.e. with $dflt as prefix for
2307 all installation directories. Typically set to /usr/local, but you
2308 may choose /usr if you wish to install $package among your system
2309 binaries. If you wish to have binaries under /bin but manual pages
2310 under /usr/local/man, that's ok: you will be prompted separately
2311 for each of the installation directories, the prefix being only used
2312 to set the defaults.
2313
2314 EOM
2315 fn=d~
2316 rp='Installation prefix to use?'
2317 . ./getfile
2318 oldprefix=''
2319 case "$prefix" in
2320 '') ;;
2321 *)
2322         case "$ans" in
2323         "$prefix") ;;
2324         *) oldprefix="$prefix";;
2325         esac
2326         ;;
2327 esac
2328 prefix="$ans"
2329 prefixexp="$ansexp"
2330
2331 : set the prefixit variable, to compute a suitable default value
2332 prefixit='case "$3" in
2333 ""|none)
2334         case "$oldprefix" in
2335         "") eval "$1=\"\$$2\"";;
2336         *)
2337                 case "$3" in
2338                 "") eval "$1=";;
2339                 none)
2340                         eval "tp=\"\$$2\"";
2341                         case "$tp" in
2342                         ""|" ") eval "$1=\"\$$2\"";;
2343                         *) eval "$1=";;
2344                         esac;;
2345                 esac;;
2346         esac;;
2347 *)
2348         eval "tp=\"$oldprefix-\$$2-\""; eval "tp=\"$tp\"";
2349         case "$tp" in
2350         --|/*--|\~*--) eval "$1=\"$prefix/$3\"";;
2351         /*-$oldprefix/*|\~*-$oldprefix/*)
2352                 eval "$1=\`echo \$$2 | sed \"s,^$oldprefix,$prefix,\"\`";;
2353         *) eval "$1=\"\$$2\"";;
2354         esac;;
2355 esac'
2356
2357 : determine where private library files go
2358 : Usual default is /usr/local/lib/perl5.  Also allow things like 
2359 : /opt/perl/lib, since /opt/perl/lib/perl5 would be redundant.
2360 case "$prefix" in
2361 *perl*) set dflt privlib lib ;;
2362 *)       set dflt privlib lib/$package ;;
2363 esac
2364 eval $prefixit
2365 $cat <<EOM
2366
2367 There are some auxiliary files for $package that need to be put into a
2368 private library directory that is accessible by everyone.
2369
2370 EOM
2371 fn=d~+
2372 rp='Pathname where the private library files will reside?'
2373 . ./getfile
2374 if $test "X$privlibexp" != "X$ansexp"; then
2375         installprivlib=''
2376 fi
2377 privlib="$ans"
2378 privlibexp="$ansexp"
2379 if $afs; then
2380         $cat <<EOM
2381
2382 Since you are running AFS, I need to distinguish the directory in which
2383 private files reside from the directory in which they are installed (and from
2384 which they are presumably copied to the former directory by occult means).
2385
2386 EOM
2387         case "$installprivlib" in
2388         '') dflt=`echo $privlibexp | sed 's#^/afs/#/afs/.#'`;;
2389         *) dflt="$installprivlib";;
2390         esac
2391         fn=de~
2392         rp='Where will private files be installed?'
2393         . ./getfile
2394         installprivlib="$ans"
2395 else
2396         installprivlib="$privlibexp"
2397 fi
2398
2399 : set the base revision
2400 baserev=5.0
2401
2402 : get the patchlevel
2403 echo " "
2404 echo "Getting the current patchlevel..." >&4
2405 if $test -r ../patchlevel.h;then
2406         patchlevel=`awk '/PATCHLEVEL/ {print $3}' ../patchlevel.h`
2407         subversion=`awk '/SUBVERSION/ {print $3}' ../patchlevel.h`
2408 else
2409         patchlevel=0
2410         subversion=0
2411 fi
2412 echo "(You have $package $baserev patchlevel $patchlevel subversion $subversion.)"
2413
2414 : set the prefixup variable, to restore leading tilda escape
2415 prefixup='case "$prefixexp" in
2416 "$prefix") ;;
2417 *) eval "$1=\`echo \$$1 | sed \"s,^$prefixexp,$prefix,\"\`";;
2418 esac'
2419
2420 : determine where public architecture dependent libraries go
2421 set archlib archlib
2422 eval $prefixit
2423 case "$archlib" in
2424 '')
2425         case "$privlib" in
2426         '')     dflt=`./loc . "." $prefixexp/lib /usr/local/lib /usr/lib /lib`
2427                 set dflt
2428                 eval $prefixup
2429                 ;;
2430         *)      version=`LC_ALL=C;export LC_ALL;\
2431                         echo $baserev $patchlevel $subversion | \
2432                         $awk '{print $1 + $2/1000.0 + $3/100000.0}'`
2433                 dflt="$privlib/$archname/$version"
2434                 ;;
2435         esac
2436         ;;
2437 *) dflt="$archlib";;
2438 esac
2439 cat <<EOM
2440
2441 $spackage contains architecture-dependent library files.  If you are
2442 sharing libraries in a heterogeneous environment, you might store
2443 these files in a separate location.  Otherwise, you can just include
2444 them with the rest of the public library files.
2445
2446 EOM
2447 fn=d+~
2448 rp='Where do you want to put the public architecture-dependent libraries?'
2449 . ./getfile
2450 archlib="$ans"
2451 archlibexp="$ansexp"
2452
2453 if $afs; then
2454         $cat <<EOM
2455
2456 Since you are running AFS, I need to distinguish the directory in which
2457 private files reside from the directory in which they are installed (and from
2458 which they are presumably copied to the former directory by occult means).
2459
2460 EOM
2461         case "$installarchlib" in
2462         '') dflt=`echo $archlibexp | sed 's#^/afs/#/afs/.#'`;;
2463         *) dflt="$installarchlib";;
2464         esac
2465         fn=de~
2466         rp='Where will architecture-dependent library files be installed?'
2467         . ./getfile
2468         installarchlib="$ans"
2469 else
2470         installarchlib="$archlibexp"
2471 fi
2472 if $test X"$archlib" = X"$privlib"; then
2473         d_archlib="$undef"
2474 else
2475         d_archlib="$define"
2476 fi
2477
2478 : set up the script used to warn in case of inconsistency
2479 cat <<'EOSC' >whoa
2480 dflt=y
2481 echo " "
2482 echo "*** WHOA THERE!!! ***" >&4
2483 echo "    The $hint value for \$$var on this machine was \"$was\"!" >&4
2484 rp="    Keep the $hint value?"
2485 . ./myread
2486 case "$ans" in
2487 y) td=$was; tu=$was;;
2488 esac
2489 EOSC
2490
2491 : function used to set $1 to $val
2492 setvar='var=$1; eval "was=\$$1"; td=$define; tu=$undef;
2493 case "$val$was" in
2494 $define$undef) . ./whoa; eval "$var=\$td";;
2495 $undef$define) . ./whoa; eval "$var=\$tu";;
2496 *) eval "$var=$val";;
2497 esac'
2498
2499 : make some quick guesses about what we are up against
2500 echo " "
2501 $echo $n "Hmm...  $c"
2502 echo exit 1 >bsd
2503 echo exit 1 >usg
2504 echo exit 1 >v7
2505 echo exit 1 >osf1
2506 echo exit 1 >eunice
2507 echo exit 1 >xenix
2508 echo exit 1 >venix
2509 echo exit 1 >os2
2510 d_bsd="$undef"
2511 $cat /usr/include/signal.h /usr/include/sys/signal.h >foo 2>/dev/null
2512 if test -f /osf_boot || $contains 'OSF/1' /usr/include/ctype.h >/dev/null 2>&1
2513 then
2514         echo "Looks kind of like an OSF/1 system, but we'll see..."
2515         echo exit 0 >osf1
2516 elif test `echo abc | tr a-z A-Z` = Abc ; then
2517         xxx=`./loc addbib blurfl $pth`
2518         if $test -f $xxx; then
2519         echo "Looks kind of like a USG system with BSD features, but we'll see..."
2520                 echo exit 0 >bsd
2521                 echo exit 0 >usg
2522         else
2523                 if $contains SIGTSTP foo >/dev/null 2>&1 ; then
2524                         echo "Looks kind of like an extended USG system, but we'll see..."
2525                 else
2526                         echo "Looks kind of like a USG system, but we'll see..."
2527                 fi
2528                 echo exit 0 >usg
2529         fi
2530 elif $contains SIGTSTP foo >/dev/null 2>&1 ; then
2531         echo "Looks kind of like a BSD system, but we'll see..."
2532         d_bsd="$define"
2533         echo exit 0 >bsd
2534 else
2535         echo "Looks kind of like a Version 7 system, but we'll see..."
2536         echo exit 0 >v7
2537 fi
2538 case "$eunicefix" in
2539 *unixtovms*)
2540         $cat <<'EOI'
2541 There is, however, a strange, musty smell in the air that reminds me of
2542 something...hmm...yes...I've got it...there's a VMS nearby, or I'm a Blit.
2543 EOI
2544         echo exit 0 >eunice
2545         d_eunice="$define"
2546 : it so happens the Eunice I know will not run shell scripts in Unix format
2547         ;;
2548 *)
2549         echo " "
2550         echo "Congratulations.  You aren't running Eunice."
2551         d_eunice="$undef"
2552         ;;
2553 esac
2554 : Detect OS2.  The p_ variable is set above in the Head.U unit.
2555 case "$p_" in
2556 :) ;;
2557 *)
2558         $cat <<'EOI'
2559 I have the feeling something is not exactly right, however...don't tell me...
2560 lemme think...does HAL ring a bell?...no, of course, you're only running OS/2!
2561 EOI
2562         echo exit 0 >os2
2563         ;;
2564 esac
2565 if test -f /xenix; then
2566         echo "Actually, this looks more like a XENIX system..."
2567         echo exit 0 >xenix
2568         d_xenix="$define"
2569 else
2570         echo " "
2571         echo "It's not Xenix..."
2572         d_xenix="$undef"
2573 fi
2574 chmod +x xenix
2575 $eunicefix xenix
2576 if test -f /venix; then
2577         echo "Actually, this looks more like a VENIX system..."
2578         echo exit 0 >venix
2579 else
2580         echo " "
2581         if ./xenix; then
2582                 : null
2583         else
2584                 echo "Nor is it Venix..."
2585         fi
2586 fi
2587 chmod +x bsd usg v7 osf1 eunice xenix venix os2
2588 $eunicefix bsd usg v7 osf1 eunice xenix venix os2
2589 $rm -f foo
2590
2591 : see if setuid scripts can be secure
2592 $cat <<EOM
2593
2594 Some kernels have a bug that prevents setuid #! scripts from being
2595 secure.  Some sites have disabled setuid #! scripts because of this.
2596
2597 First let's decide if your kernel supports secure setuid #! scripts.
2598 (If setuid #! scripts would be secure but have been disabled anyway,
2599 don't say that they are secure if asked.)
2600
2601 EOM
2602
2603 val="$undef"
2604 if $test -d /dev/fd; then
2605         echo "#!$ls" >reflect
2606         chmod +x,u+s reflect
2607         ./reflect >flect 2>&1
2608         if $contains "/dev/fd" flect >/dev/null; then
2609                 echo "Congratulations, your kernel has secure setuid scripts!" >&4
2610                 val="$define"
2611         else
2612                 $cat <<EOM
2613 If you are not sure if they are secure, I can check but I'll need a
2614 username and password different from the one you are using right now.
2615 If you don't have such a username or don't want me to test, simply
2616 enter 'none'.
2617
2618 EOM
2619                 rp='Other username to test security of setuid scripts with?'
2620                 dflt='none'
2621                 . ./myread
2622                 case "$ans" in
2623                 n|none)
2624                         case "$d_suidsafe" in
2625                         '')     echo "I'll assume setuid scripts are *not* secure." >&4
2626                                 dflt=n;;
2627                         "$undef")
2628                                 echo "Well, the $hint value is *not* secure." >&4
2629                                 dflt=n;;
2630                         *)      echo "Well, the $hint value *is* secure." >&4
2631                                 dflt=y;;
2632                         esac
2633                         ;;
2634                 *)
2635                         $rm -f reflect flect
2636                         echo "#!$ls" >reflect
2637                         chmod +x,u+s reflect
2638                         echo >flect
2639                         chmod a+w flect
2640                         echo '"su" will (probably) prompt you for '"$ans's password."
2641                         su $ans -c './reflect >flect'
2642                         if $contains "/dev/fd" flect >/dev/null; then
2643                                 echo "Okay, it looks like setuid scripts are secure." >&4
2644                                 dflt=y
2645                         else
2646                                 echo "I don't think setuid scripts are secure." >&4
2647                                 dflt=n
2648                         fi
2649                         ;;
2650                 esac
2651                 rp='Does your kernel have *secure* setuid scripts?'
2652                 . ./myread
2653                 case "$ans" in
2654                 [yY]*)  val="$define";;
2655                 *)      val="$undef";;
2656                 esac
2657         fi
2658 else
2659         echo "I don't think setuid scripts are secure (no /dev/fd directory)." >&4
2660         echo "(That's for file descriptors, not floppy disks.)"
2661         val="$undef"
2662 fi
2663 set d_suidsafe
2664 eval $setvar
2665
2666 $rm -f reflect flect
2667
2668 : now see if they want to do setuid emulation
2669 echo " "
2670 val="$undef"
2671 case "$d_suidsafe" in
2672 "$define")
2673         val="$undef"
2674         echo "No need to emulate SUID scripts since they are secure here." >& 4
2675         ;;
2676 *)
2677         $cat <<EOM
2678 Some systems have disabled setuid scripts, especially systems where
2679 setuid scripts cannot be secure.  On systems where setuid scripts have
2680 been disabled, the setuid/setgid bits on scripts are currently
2681 useless.  It is possible for $package to detect those bits and emulate
2682 setuid/setgid in a secure fashion.  This emulation will only work if
2683 setuid scripts have been disabled in your kernel.
2684
2685 EOM
2686         case "$d_dosuid" in
2687         "$define") dflt=y ;;
2688         *) dflt=n ;;
2689         esac
2690         rp="Do you want to do setuid/setgid emulation?"
2691         . ./myread
2692         case "$ans" in
2693         [yY]*)  val="$define";;
2694         *)      val="$undef";;
2695         esac
2696         ;;
2697 esac
2698 set d_dosuid
2699 eval $setvar
2700
2701 : determine where site specific libraries go.
2702 set sitelib sitelib
2703 eval $prefixit
2704 case "$sitelib" in
2705 '')     dflt="$privlib/site_perl" ;;
2706 *)      dflt="$sitelib" ;;
2707 esac
2708 $cat <<EOM
2709
2710 The installation process will also create a directory for
2711 site-specific extensions and modules.  Some users find it convenient
2712 to place all local files in this directory rather than in the main
2713 distribution directory.
2714
2715 EOM
2716 fn=d~+
2717 rp='Pathname for the site-specific library files?'
2718 . ./getfile
2719 if $test "X$sitelibexp" != "X$ansexp"; then
2720         installsitelib=''
2721 fi
2722 sitelib="$ans"
2723 sitelibexp="$ansexp"
2724 if $afs; then
2725         $cat <<EOM
2726
2727 Since you are running AFS, I need to distinguish the directory in which
2728 private files reside from the directory in which they are installed (and from
2729 which they are presumably copied to the former directory by occult means).
2730
2731 EOM
2732         case "$installsitelib" in
2733         '') dflt=`echo $sitelibexp | sed 's#^/afs/#/afs/.#'`;;
2734         *) dflt="$installsitelib";;
2735         esac
2736         fn=de~
2737         rp='Where will private files be installed?'
2738         . ./getfile
2739         installsitelib="$ans"
2740 else
2741         installsitelib="$sitelibexp"
2742 fi
2743
2744 : determine where site specific architecture-dependent libraries go.
2745 xxx=`echo $sitelib/$archname | sed 's!^$prefix!!'`
2746 : xxx is usuually lib/site_perl/archname.
2747 set sitearch sitearch none
2748 eval $prefixit
2749 case "$sitearch" in
2750 '')     dflt="$sitelib/$archname" ;;
2751 *)      dflt="$sitearch" ;;
2752 esac
2753 $cat <<EOM
2754
2755 The installation process will also create a directory for
2756 architecture-dependent site-specific extensions and modules.
2757
2758 EOM
2759 fn=nd~+
2760 rp='Pathname for the site-specific architecture-dependent library files?'
2761 . ./getfile
2762 if $test "X$sitearchexp" != "X$ansexp"; then
2763         installsitearch=''
2764 fi
2765 sitearch="$ans"
2766 sitearchexp="$ansexp"
2767 if $afs; then
2768         $cat <<EOM
2769
2770 Since you are running AFS, I need to distinguish the directory in which
2771 private files reside from the directory in which they are installed (and from
2772 which they are presumably copied to the former directory by occult means).
2773
2774 EOM
2775         case "$installsitearch" in
2776         '') dflt=`echo $sitearchexp | sed 's#^/afs/#/afs/.#'`;;
2777         *) dflt="$installsitearch";;
2778         esac
2779         fn=de~
2780         rp='Where will private files be installed?'
2781         . ./getfile
2782         installsitearch="$ans"
2783 else
2784         installsitearch="$sitearchexp"
2785 fi
2786
2787 : determine where old public architecture dependent libraries might be
2788 case "$oldarchlib" in
2789 '')     case "$privlib" in
2790         '') ;;
2791         *)      dflt="$privlib/$archname"
2792                 ;;
2793         esac
2794         ;;
2795 *)      dflt="$oldarchlib" 
2796         ;;
2797 esac
2798 if $test ! -d "$dflt/auto"; then
2799         dflt=none
2800 fi
2801 cat <<EOM
2802
2803 In 5.001, Perl stored architecture-dependent library files in a directory
2804 with a name such as $privlib/$archname, 
2805 and this directory contained files from the standard extensions and 
2806 files from any additional extensions you might have added.  Starting 
2807 with version 5.002, all the architecture-dependent standard extensions 
2808 will go into a version-specific directory such as
2809 $archlib, 
2810 while locally-added extensions will go into
2811 $sitearch.
2812
2813 If you wish Perl to continue to search the old architecture-dependent
2814 library for your local extensions, give the path to that directory.
2815 If you do not wish to use your old architecture-dependent library
2816 files, answer 'none'.
2817
2818 EOM
2819 fn=dn~
2820 rp='Directory for your old 5.001 architecture-dependent libraries?'
2821 . ./getfile
2822 oldarchlib="$ans"
2823 oldarchlibexp="$ansexp"
2824 case "$oldarchlib" in
2825 ''|' ') val="$undef" ;;
2826 *) val="$define" ;;
2827 esac
2828 set d_oldarchlib
2829 eval $setvar
2830
2831 : determine where public executables go
2832 echo " "
2833 set dflt bin bin
2834 eval $prefixit
2835 fn=d~
2836 rp='Pathname where the public executables will reside?'
2837 . ./getfile
2838 if $test "X$ansexp" != "X$binexp"; then
2839         installbin=''
2840 fi
2841 bin="$ans"
2842 binexp="$ansexp"
2843 if $afs; then
2844         $cat <<EOM
2845
2846 Since you are running AFS, I need to distinguish the directory in which
2847 executables reside from the directory in which they are installed (and from
2848 which they are presumably copied to the former directory by occult means).
2849
2850 EOM
2851         case "$installbin" in
2852         '') dflt=`echo $binexp | sed 's#^/afs/#/afs/.#'`;;
2853         *) dflt="$installbin";;
2854         esac
2855         fn=de~
2856         rp='Where will public executables be installed?'
2857         . ./getfile
2858         installbin="$ans"
2859 else
2860         installbin="$binexp"
2861 fi
2862
2863 : determine where manual pages are on this system
2864 echo " "
2865 case "$sysman" in
2866 '') 
2867         syspath='/usr/man/man1 /usr/man/mann /usr/man/manl /usr/man/local/man1'
2868         syspath="$syspath /usr/man/u_man/man1 /usr/share/man/man1"
2869         syspath="$syspath /usr/catman/u_man/man1 /usr/man/l_man/man1"
2870         syspath="$syspath /usr/local/man/u_man/man1 /usr/local/man/l_man/man1"
2871         syspath="$syspath /usr/man/man.L /local/man/man1 /usr/local/man/man1"
2872         sysman=`./loc . /usr/man/man1 $syspath`
2873         ;;
2874 esac
2875 if $test -d "$sysman"; then
2876         echo "System manual is in $sysman." >&4
2877 else
2878         echo "Could not find manual pages in source form." >&4
2879 fi
2880
2881 : determine where manual pages go
2882 set man1dir man1dir none
2883 eval $prefixit
2884 $cat <<EOM
2885
2886 $spackage has manual pages available in source form.
2887 EOM
2888 case "$nroff" in
2889 nroff)
2890         echo "However, you don't have nroff, so they're probably useless to you."
2891         case "$man1dir" in
2892         '') man1dir="none";;
2893         esac;;
2894 esac
2895 echo "If you don't want the manual sources installed, answer 'none'."
2896 case "$man1dir" in
2897 ' ') dflt=none
2898         ;;
2899 '')
2900         lookpath="$prefixexp/man/man1 $prefixexp/man/l_man/man1"
2901         lookpath="$lookpath $prefixexp/man/p_man/man1"
2902         lookpath="$lookpath $prefixexp/man/u_man/man1"
2903         lookpath="$lookpath $prefixexp/man/man.1"
2904         : If prefix contains 'perl' then we want to keep the man pages
2905         : under the prefix directory.  Otherwise, look in a variety of
2906         : other possible places.  This is debatable, but probably a
2907         : good compromise.  Well, apparently not.
2908         : Experience has shown people expect man1dir to be under prefix,
2909         : so we now always put it there.  Users who want other behavior
2910         : can answer interactively or use a command line option.
2911         : Does user have System V-style man paths.
2912         case "$sysman" in
2913         */?_man*)       dflt=`./loc . $prefixexp/l_man/man1 $lookpath` ;;
2914         *)      dflt=`./loc . $prefixexp/man/man1 $lookpath` ;;
2915         esac
2916         set dflt
2917         eval $prefixup
2918         ;;
2919 *)  dflt="$man1dir"
2920         ;;
2921 esac
2922 echo " "
2923 fn=dn+~
2924 rp="Where do the main $spackage manual pages (source) go?"
2925 . ./getfile
2926 if $test "X$man1direxp" != "X$ansexp"; then
2927         installman1dir=''
2928 fi
2929 man1dir="$ans"
2930 man1direxp="$ansexp"
2931 case "$man1dir" in
2932 '') man1dir=' '
2933         installman1dir='';;
2934 esac
2935 if $afs; then
2936         $cat <<EOM
2937
2938 Since you are running AFS, I need to distinguish the directory in which
2939 manual pages reside from the directory in which they are installed (and from
2940 which they are presumably copied to the former directory by occult means).
2941
2942 EOM
2943         case "$installman1dir" in
2944         '') dflt=`echo $man1direxp | sed 's#^/afs/#/afs/.#'`;;
2945         *) dflt="$installman1dir";;
2946         esac
2947         fn=de~
2948         rp='Where will man pages be installed?'
2949         . ./getfile
2950         installman1dir="$ans"
2951 else
2952         installman1dir="$man1direxp"
2953 fi
2954
2955 : What suffix to use on installed man pages
2956
2957 case "$man1dir" in
2958 ' ')
2959         man1ext='0'
2960         ;;
2961 *)
2962         rp="What suffix should be used for the main $spackage man pages?"
2963         case "$man1ext" in
2964         '')     case "$man1dir" in
2965                 *1)  dflt=1 ;;
2966                 *1p) dflt=1p ;;
2967                 *1pm) dflt=1pm ;;
2968                 *l) dflt=l;;
2969                 *n) dflt=n;;
2970                 *o) dflt=o;;
2971                 *p) dflt=p;;
2972                 *C) dflt=C;;
2973                 *L) dflt=L;;
2974                 *L1) dflt=L1;;
2975                 *) dflt=1;;
2976                 esac
2977                 ;;
2978         *)      dflt="$man1ext";;
2979         esac
2980         . ./myread
2981         man1ext="$ans"
2982         ;;
2983 esac
2984
2985 : see if we can have long filenames
2986 echo " "
2987 rmlist="$rmlist /tmp/cf$$"
2988 $test -d /tmp/cf$$ || mkdir /tmp/cf$$
2989 first=123456789abcdef
2990 second=/tmp/cf$$/$first
2991 $rm -f $first $second
2992 if (echo hi >$first) 2>/dev/null; then
2993         if $test -f 123456789abcde; then
2994                 echo 'You cannot have filenames longer than 14 characters.  Sigh.' >&4
2995                 val="$undef"
2996         else
2997                 if (echo hi >$second) 2>/dev/null; then
2998                         if $test -f /tmp/cf$$/123456789abcde; then
2999                                 $cat <<'EOM'
3000 That's peculiar... You can have filenames longer than 14 characters, but only
3001 on some of the filesystems.  Maybe you are using NFS.  Anyway, to avoid problems
3002 I shall consider your system cannot support long filenames at all.
3003 EOM
3004                                 val="$undef"
3005                         else
3006                                 echo 'You can have filenames longer than 14 characters.' >&4
3007                                 val="$define"
3008                         fi
3009                 else
3010                         $cat <<'EOM'
3011 How confusing! Some of your filesystems are sane enough to allow filenames
3012 longer than 14 characters but some others like /tmp can't even think about them.
3013 So, for now on, I shall assume your kernel does not allow them at all.
3014 EOM
3015                         val="$undef"
3016                 fi
3017         fi
3018 else
3019         $cat <<'EOM'
3020 You can't have filenames longer than 14 chars.  You can't even think about them!
3021 EOM
3022         val="$undef"
3023 fi 
3024 set d_flexfnam
3025 eval $setvar
3026 $rm -rf /tmp/cf$$ 123456789abcde*
3027
3028 : determine where library module manual pages go
3029 set man3dir man3dir none
3030 eval $prefixit
3031 $cat <<EOM
3032
3033 $spackage has manual pages for many of the library modules.
3034 EOM
3035
3036 case "$nroff" in
3037 nroff)
3038         $cat <<'EOM'
3039 However, you don't have nroff, so they're probably useless to you.
3040 You can use the supplied perldoc script instead.
3041 EOM
3042         case "$man3dir" in
3043         '') man3dir="none";;
3044         esac;;
3045 esac
3046
3047 case "$d_flexfnam" in
3048 undef)
3049         $cat <<'EOM'
3050 However, your system can't handle the long file names like File::Basename.3. 
3051 You can use the supplied perldoc script instead.
3052 EOM
3053         case "$man3dir" in
3054         '') man3dir="none";;
3055         esac;;
3056 esac
3057
3058 echo "If you don't want the manual sources installed, answer 'none'."
3059 : We dont use /usr/local/man/man3 because some man programs will
3060 : only show the /usr/local/man/man3 contents, and not the system ones,
3061 : thus man less will show the perl module less.pm, but not the system
3062 : less command.  We might also conflict with TCL man pages.
3063 : However, something like /opt/perl/man/man3 is fine.
3064 case "$man3dir" in
3065 '')     case "$prefix" in 
3066         *perl*) dflt=`echo $man1dir | 
3067                         $sed -e 's/man1/man3/g' -e 's/man\.1/man\.3/g'` ;;
3068         *)      dflt="$privlib/man/man3" ;;
3069         esac
3070         ;;
3071 ' ') dflt=none;;
3072 *)      dflt="$man3dir" ;;
3073 esac
3074 echo " "
3075
3076 fn=dn+~
3077 rp="Where do the $spackage library man pages (source) go?"
3078 . ./getfile
3079 if test "X$man3direxp" != "X$ansexp"; then
3080         installman3dir=''
3081 fi
3082
3083 man3dir="$ans"
3084 man3direxp="$ansexp"
3085 case "$man3dir" in
3086 '') man3dir=' '
3087         installman3dir='';;
3088 esac
3089 if $afs; then
3090         $cat <<EOM
3091
3092 Since you are running AFS, I need to distinguish the directory in which
3093 manual pages reside from the directory in which they are installed (and from
3094 which they are presumably copied to the former directory by occult means).
3095
3096 EOM
3097         case "$installman3dir" in
3098         '') dflt=`echo $man3direxp | sed 's#^/afs/#/afs/.#'`;;
3099         *) dflt="$installman3dir";;
3100         esac
3101         fn=de~
3102         rp='Where will man pages be installed?'
3103         . ./getfile
3104         installman3dir="$ans"
3105 else
3106         installman3dir="$man3direxp"
3107 fi
3108
3109 : What suffix to use on installed man pages
3110
3111 case "$man3dir" in
3112 ' ')
3113         man3ext='0'
3114         ;;
3115 *)
3116         rp="What suffix should be used for the $spackage library man pages?"
3117         case "$man3ext" in
3118         '')     case "$man3dir" in
3119                 *3)  dflt=3 ;;
3120                 *3p) dflt=3p ;;
3121                 *3pm) dflt=3pm ;;
3122                 *l) dflt=l;;
3123                 *n) dflt=n;;
3124                 *o) dflt=o;;
3125                 *p) dflt=p;;
3126                 *C) dflt=C;;
3127                 *L) dflt=L;;
3128                 *L3) dflt=L3;;
3129                 *) dflt=3;;
3130                 esac
3131                 ;;
3132         *)      dflt="$man3ext";;
3133         esac
3134         . ./myread
3135         man3ext="$ans"
3136         ;;
3137 esac
3138
3139 : see what memory models we can support
3140 case "$models" in
3141 '')
3142         $cat >pdp11.c <<'EOP'
3143 main() {
3144 #ifdef pdp11
3145         exit(0);
3146 #else
3147         exit(1);
3148 #endif
3149 }
3150 EOP
3151         cc -o pdp11 pdp11.c >/dev/null 2>&1
3152         if ./pdp11 2>/dev/null; then
3153                 dflt='unsplit split'
3154         else
3155                 tans=`./loc . X /lib/small /lib/large /usr/lib/small /usr/lib/large /lib/medium /usr/lib/medium /lib/huge`
3156                 case "$tans" in
3157                 X) dflt='none';;
3158                 *) if $test -d /lib/small || $test -d /usr/lib/small; then
3159                                 dflt='small'
3160                         else
3161                                 dflt=''
3162                         fi
3163                         if $test -d /lib/medium || $test -d /usr/lib/medium; then
3164                                 dflt="$dflt medium"
3165                         fi
3166                         if $test -d /lib/large || $test -d /usr/lib/large; then
3167                                 dflt="$dflt large"
3168                         fi
3169                         if $test -d /lib/huge || $test -d /usr/lib/huge; then
3170                                 dflt="$dflt huge"
3171                         fi
3172                 esac
3173         fi;;
3174 *) dflt="$models";;
3175 esac
3176 $cat <<EOM
3177  
3178 Some systems have different model sizes.  On most systems they are called
3179 small, medium, large, and huge.  On the PDP11 they are called unsplit and
3180 split.  If your system doesn't support different memory models, say "none".
3181 If you wish to force everything to one memory model, say "none" here and
3182 put the appropriate flags later when it asks you for other cc and ld flags.
3183 Venix systems may wish to put "none" and let the compiler figure things out.
3184 (In the following question multiple model names should be space separated.)
3185
3186 EOM
3187 rp="Which memory models are supported?"
3188 . ./myread
3189 models="$ans"
3190
3191 case "$models" in
3192 none)
3193         small=''
3194         medium=''
3195         large=''
3196         huge=''
3197         unsplit=''
3198         split=''
3199         ;;
3200 *split)
3201         case "$split" in
3202         '') if $contains '\-i' $sysman/ld.1 >/dev/null 2>&1 || \
3203                          $contains '\-i' $sysman/cc.1 >/dev/null 2>&1; then
3204                         dflt='-i'
3205                 else
3206                         dflt='none'
3207                 fi;;
3208         *) dflt="$split";;
3209         esac
3210         rp="What flag indicates separate I and D space?"
3211         . ./myread
3212         tans="$ans"
3213         case "$tans" in
3214         none) tans='';;
3215         esac
3216         split="$tans"
3217         unsplit='';;
3218 *large*|*small*|*medium*|*huge*)
3219         case "$models" in
3220         *large*)
3221                 case "$large" in
3222                 '') dflt='-Ml';;
3223                 *) dflt="$large";;
3224                 esac
3225         rp="What flag indicates large model?"
3226         . ./myread
3227         tans="$ans"
3228         case "$tans" in
3229         none) tans='';
3230         esac
3231         large="$tans";;
3232         *) large='';;
3233         esac
3234         case "$models" in
3235         *huge*) case "$huge" in
3236                 '') dflt='-Mh';;
3237                 *) dflt="$huge";;
3238                 esac
3239                 rp="What flag indicates huge model?"
3240                 . ./myread
3241                 tans="$ans"
3242                 case "$tans" in
3243                 none) tans='';
3244                 esac
3245                 huge="$tans";;
3246         *) huge="$large";;
3247         esac
3248         case "$models" in
3249         *medium*) case "$medium" in
3250                 '') dflt='-Mm';;
3251                 *) dflt="$medium";;
3252                 esac
3253                 rp="What flag indicates medium model?"
3254                 . ./myread
3255                 tans="$ans"
3256                 case "$tans" in
3257                 none) tans='';
3258                 esac
3259                 medium="$tans";;
3260         *) medium="$large";;
3261         esac
3262         case "$models" in
3263         *small*) case "$small" in
3264                 '') dflt='none';;
3265                 *) dflt="$small";;
3266                 esac
3267                 rp="What flag indicates small model?"
3268                 . ./myread
3269                 tans="$ans"
3270                 case "$tans" in
3271                 none) tans='';
3272                 esac
3273                 small="$tans";;
3274         *) small='';;
3275         esac
3276         ;;
3277 *)
3278         echo "Unrecognized memory models--you may have to edit Makefile.SH" >&4
3279         ;;
3280 esac
3281
3282 : see if we need a special compiler
3283 echo " "
3284 if ./usg; then
3285         case "$cc" in
3286         '') case "$Mcc" in
3287                 /*) dflt='Mcc';;
3288                 *) case "$large" in
3289                         -M*) dflt='cc';;
3290                         *)      if $contains '\-M' $sysman/cc.1 >/dev/null 2>&1 ; then
3291                                         if $contains '\-M' $sysman/cpp.1 >/dev/null 2>&1; then
3292                                                 dflt='cc'
3293                                         else
3294                                                 dflt='cc -M'
3295                                         fi
3296                                 else
3297                                         dflt='cc'
3298                                 fi;;
3299                         esac;;
3300                 esac;;
3301         *)  dflt="$cc";;
3302         esac
3303         $cat <<'EOM'
3304 On some systems the default C compiler will not resolve multiple global
3305 references that happen to have the same name.  On some such systems the "Mcc"
3306 command may be used to force these to be resolved.  On other systems a "cc -M"
3307 command is required.  (Note that the -M flag on other systems indicates a
3308 memory model to use!) If you have the Gnu C compiler, you might wish to use
3309 that instead.
3310
3311 EOM
3312         rp="What command will force resolution on this system?"
3313         . ./myread
3314         cc="$ans"
3315 else
3316         case "$cc" in
3317         '') dflt=cc;;
3318         *) dflt="$cc";;
3319         esac
3320         rp="Use which C compiler?"
3321         . ./myread
3322         cc="$ans"
3323 fi
3324 echo " "
3325 echo "Checking for GNU cc in disguise and/or its version number..." >&4
3326 $cat >gccvers.c <<EOM
3327 #include <stdio.h>
3328 int main() {
3329 #ifdef __GNUC__
3330 #ifdef __VERSION__
3331         printf("%s\n", __VERSION__);
3332 #else
3333         printf("%s\n", "1");
3334 #endif
3335 #endif
3336         exit(0);
3337 }
3338 EOM
3339 if $cc -o gccvers gccvers.c >/dev/null 2>&1; then
3340         gccversion=`./gccvers`
3341         case "$gccversion" in
3342         '') echo "You are not using GNU cc." ;;
3343         *)  echo "You are using GNU cc $gccversion." ;;
3344         esac
3345 else
3346         echo " "
3347         echo "*** WHOA THERE!!! ***" >&4
3348         echo "    Your C compiler \"$cc\" doesn't seem to be working!" >&4
3349         case "$knowitall" in
3350         '')
3351         echo "    You'd better start hunting for one and let me know about it." >&4
3352                 exit 1
3353                 ;;
3354         esac
3355 fi
3356 $rm -f gccvers*
3357 case "$gccversion" in
3358 1*) cpp=`./loc gcc-cpp $cpp $pth` ;;
3359 esac
3360
3361 : What should the include directory be ?
3362 echo " "
3363 $echo $n "Hmm...  $c"
3364 dflt='/usr/include'
3365 incpath=''
3366 mips_type=''
3367 if $test -f /bin/mips && /bin/mips; then
3368         echo "Looks like a MIPS system..."
3369         $cat >usr.c <<'EOCP'
3370 #ifdef SYSTYPE_BSD43
3371 /bsd43
3372 #endif
3373 EOCP
3374         if $cc -E usr.c > usr.out && $contains / usr.out >/dev/null 2>&1; then
3375                 dflt='/bsd43/usr/include'
3376                 incpath='/bsd43'
3377                 mips_type='BSD 4.3'
3378         else
3379                 mips_type='System V'
3380         fi
3381         $rm -f usr.c usr.out
3382         echo "and you're compiling with the $mips_type compiler and libraries."
3383         xxx_prompt=y
3384         echo "exit 0" >mips
3385 else
3386         echo "Doesn't look like a MIPS system."
3387         xxx_prompt=n
3388         echo "exit 1" >mips
3389 fi
3390 chmod +x mips
3391 $eunicefix mips
3392 echo " "
3393 case "$usrinc" in
3394 '') ;;
3395 *) dflt="$usrinc";;
3396 esac
3397 case "$xxx_prompt" in
3398 y)      fn=d/
3399         rp='Where are the include files you want to use?'
3400         . ./getfile
3401         usrinc="$ans"
3402         ;;
3403 *)      usrinc="$dflt"
3404         ;;
3405 esac
3406
3407 : see if we have to deal with yellow pages, now NIS.
3408 if $test -d /usr/etc/yp || $test -d /etc/yp; then
3409         if $test -f /usr/etc/nibindd; then
3410                 echo " "
3411                 echo "I'm fairly confident you're on a NeXT."
3412                 echo " "
3413                 rp='Do you get the hosts file via NetInfo?'
3414                 dflt=y
3415                 case "$hostcat" in
3416                 nidump*) ;;
3417                 '') ;;
3418                 *) dflt=n;;
3419                 esac
3420                 . ./myread
3421                 case "$ans" in
3422                 y*) hostcat='nidump hosts .';;
3423                 *)      case "$hostcat" in
3424                         nidump*) hostcat='';;
3425                         esac
3426                         ;;
3427                 esac
3428         fi
3429         case "$hostcat" in
3430         nidump*) ;;
3431         *)
3432                 case "$hostcat" in
3433                 *ypcat*) dflt=y;;
3434                 '') if $contains '^\+' /etc/passwd >/dev/null 2>&1; then
3435                                 dflt=y
3436                         else
3437                                 dflt=n
3438                         fi;;
3439                 *) dflt=n;;
3440                 esac
3441                 echo " "
3442                 rp='Are you getting the hosts file via yellow pages?'
3443                 . ./myread
3444                 case "$ans" in
3445                 y*) hostcat='ypcat hosts';;
3446                 *) hostcat='cat /etc/hosts';;
3447                 esac
3448                 ;;
3449         esac
3450 fi
3451
3452 : now get the host name
3453 echo " "
3454 echo "Figuring out host name..." >&4
3455 case "$myhostname" in
3456 '') cont=true
3457         echo 'Maybe "hostname" will work...'
3458         if tans=`sh -c hostname 2>&1` ; then
3459                 myhostname=$tans
3460                 phostname=hostname
3461                 cont=''
3462         fi
3463         ;;
3464 *) cont='';;
3465 esac
3466 if $test "$cont"; then
3467         if ./xenix; then
3468                 echo 'Oh, dear.  Maybe "/etc/systemid" is the key...'
3469                 if tans=`cat /etc/systemid 2>&1` ; then
3470                         myhostname=$tans
3471                         phostname='cat /etc/systemid'
3472                         echo "Whadyaknow.  Xenix always was a bit strange..."
3473                         cont=''
3474                 fi
3475         elif $test -r /etc/systemid; then
3476                 echo "(What is a non-Xenix system doing with /etc/systemid?)"
3477         fi
3478 fi
3479 if $test "$cont"; then
3480         echo 'No, maybe "uuname -l" will work...'
3481         if tans=`sh -c 'uuname -l' 2>&1` ; then
3482                 myhostname=$tans
3483                 phostname='uuname -l'
3484         else
3485                 echo 'Strange.  Maybe "uname -n" will work...'
3486                 if tans=`sh -c 'uname -n' 2>&1` ; then
3487                         myhostname=$tans
3488                         phostname='uname -n'
3489                 else
3490                         echo 'Oh well, maybe I can mine it out of whoami.h...'
3491                         if tans=`sh -c $contains' sysname $usrinc/whoami.h' 2>&1` ; then
3492                                 myhostname=`echo "$tans" | $sed 's/^.*"\(.*\)"/\1/'`
3493                                 phostname="sed -n -e '"'/sysname/s/^.*\"\\(.*\\)\"/\1/{'"' -e p -e q -e '}' <$usrinc/whoami.h"
3494                         else
3495                                 case "$myhostname" in
3496                                 '') echo "Does this machine have an identity crisis or something?"
3497                                         phostname='';;
3498                                 *)
3499                                         echo "Well, you said $myhostname before..."
3500                                         phostname='echo $myhostname';;
3501                                 esac
3502                         fi
3503                 fi
3504         fi
3505 fi
3506 : you do not want to know about this
3507 set $myhostname
3508 myhostname=$1
3509
3510 : verify guess
3511 if $test "$myhostname" ; then
3512         dflt=y
3513         rp='Your host name appears to be "'$myhostname'".'" Right?"
3514         . ./myread
3515         case "$ans" in
3516         y*) ;;
3517         *) myhostname='';;
3518         esac
3519 fi
3520
3521 : bad guess or no guess
3522 while $test "X$myhostname" = X ; do
3523         dflt=''
3524         rp="Please type the (one word) name of your host:"
3525         . ./myread
3526         myhostname="$ans"
3527 done
3528
3529 : translate upper to lower if necessary
3530 case "$myhostname" in
3531 *[A-Z]*)
3532         echo "(Normalizing case in your host name)"
3533         myhostname=`echo $myhostname | ./tr '[A-Z]' '[a-z]'`
3534         ;;
3535 esac
3536
3537 case "$myhostname" in
3538 *.*)
3539         dflt=`expr "X$myhostname" : "X[^.]*\(\..*\)"`
3540         myhostname=`expr "X$myhostname" : "X\([^.]*\)\."`
3541         echo "(Trimming domain name from host name--host name is now $myhostname)"
3542         ;;
3543 *) case "$mydomain" in
3544         '')
3545                 {
3546                         : If we use NIS, try ypmatch.
3547                         : Is there some reason why this was not done before?
3548                         test "X$hostcat" = "Xypcat hosts" &&
3549                         ypmatch "$myhostname" hosts 2>/dev/null |\
3550                                 $sed -e 's/[     ]*#.*//; s/$/ /' > hosts && \
3551                         $test -s hosts
3552                 } || {
3553                         : Extract only the relevant hosts, reducing file size,
3554                         : remove comments, insert trailing space for later use.
3555                         $hostcat | $sed -n -e "s/[       ]*#.*//; s/\$/ /
3556                                         /[       ]$myhostname[  . ]/p" > hosts
3557                 }
3558                 tmp_re="[       . ]"
3559                 $test x`$awk "/[0-9].*[  ]$myhostname$tmp_re/ { sum++ }
3560                              END { print sum }" hosts` = x1 || tmp_re="[         ]"
3561                 dflt=.`$awk "/[0-9].*[   ]$myhostname$tmp_re/ {for(i=2; i<=NF;i++) print \\\$i}" \
3562                         hosts | $sort | $uniq | \
3563                         $sed -n -e "s/$myhostname\.\([-a-zA-Z0-9_.]\)/\1/p"`
3564                 case `$echo X$dflt` in
3565                 X*\ *)  echo "(Several hosts in /etc/hosts matched hostname)"
3566                         dflt=.
3567                         ;;
3568                 X.) echo "(You do not have fully-qualified names in /etc/hosts)"
3569                         ;;
3570                 esac
3571                 case "$dflt" in
3572                 .)
3573                         tans=`./loc resolv.conf X /etc /usr/etc`
3574                         if $test -f "$tans"; then
3575                                 echo "(Attempting domain name extraction from $tans)"
3576                                 : Why was there an Egrep here, when Sed works?
3577                                 dflt=.`$sed -n -e 's/^domain[   ]*\(.*\)/\1/p' $tans \
3578                                         | ./tr '[A-Z]' '[a-z]' 2>/dev/null`
3579                         fi
3580                         ;;
3581                 esac
3582                 case "$dflt" in
3583                 .) echo "(No help from resolv.conf either -- attempting clever guess)"
3584                         dflt=.`sh -c domainname 2>/dev/null`
3585                         case "$dflt" in
3586                         '') dflt='.';;
3587                         .nis.*|.yp.*|.main.*) dflt=`echo $dflt | $sed -e 's/^\.[^.]*//'`;;
3588                         esac
3589                         ;;
3590                 esac
3591                 case "$dflt" in
3592                 .) echo "(Lost all hope -- silly guess then)"
3593                         dflt='.uucp'
3594                         ;;
3595                 esac
3596                 $rm -f hosts
3597                 ;;
3598         *) dflt="$mydomain";;
3599         esac;;
3600 esac
3601 echo " "
3602 rp="What is your domain name?"
3603 . ./myread
3604 tans="$ans"
3605 case "$ans" in
3606 '') ;;
3607 .*) ;;
3608 *) tans=".$tans";;
3609 esac
3610 mydomain="$tans"
3611
3612 : translate upper to lower if necessary
3613 case "$mydomain" in
3614 *[A-Z]*)
3615         echo "(Normalizing case in your domain name)"
3616         mydomain=`echo $mydomain | ./tr '[A-Z]' '[a-z]'`
3617         ;;
3618 esac
3619
3620 : a little sanity check here
3621 case "$phostname" in
3622 '') ;;
3623 *)
3624         case `$phostname | ./tr '[A-Z]' '[a-z]'` in
3625         $myhostname$mydomain|$myhostname) ;;
3626         *)
3627                 case "$phostname" in
3628                 sed*)
3629                         echo "(That doesn't agree with your whoami.h file, by the way.)"
3630                         ;;
3631                 *)
3632                         echo "(That doesn't agree with your $phostname command, by the way.)"
3633                         ;;
3634                 esac
3635         ;;
3636         esac
3637         ;;
3638 esac
3639
3640 $cat <<EOM
3641
3642 I need to get your e-mail address in Internet format if possible, i.e.
3643 something like user@host.domain. Please answer accurately since I have
3644 no easy means to double check it. The default value provided below
3645 is most probably close to the reality but may not be valid from outside
3646 your organization...
3647
3648 EOM
3649 cont=x
3650 while test "$cont"; do
3651         case "$cf_email" in
3652         '') dflt="$cf_by@$myhostname$mydomain";;
3653         *) dflt="$cf_email";;
3654         esac
3655         rp='What is your e-mail address?'
3656         . ./myread
3657         cf_email="$ans"
3658         case "$cf_email" in
3659         *@*.*) cont='' ;;
3660         *)
3661                 rp='Address does not look like an Internet one.  Use it anyway?'
3662                 case "$fastread" in
3663                 yes) dflt=y ;;
3664                 *) dflt=n ;;
3665                 esac
3666                 . ./myread
3667                 case "$ans" in
3668                 y*) cont='' ;;
3669                 *) echo " " ;;
3670                 esac
3671                 ;;
3672         esac
3673 done
3674
3675 $cat <<EOM
3676
3677 If you or somebody else will be maintaining perl at your site, please
3678 fill in the correct e-mail address here so that they may be contacted
3679 if necessary. Currently, the "perlbug" program included with perl
3680 will send mail to this address in addition to perlbug@perl.com. You may
3681 enter "none" for no administrator.
3682
3683 EOM
3684 case "$perladmin" in
3685 '') dflt="$cf_email";;
3686 *) dflt="$perladmin";;
3687 esac
3688 rp='Perl administrator e-mail address'
3689 . ./myread
3690 perladmin="$ans"
3691
3692 : determine where public executable scripts go
3693 set scriptdir scriptdir
3694 eval $prefixit
3695 case "$scriptdir" in
3696 '')
3697         dflt="$bin"
3698         : guess some guesses
3699         $test -d /usr/share/scripts && dflt=/usr/share/scripts
3700         $test -d /usr/share/bin && dflt=/usr/share/bin
3701         $test -d /usr/local/script && dflt=/usr/local/script
3702         $test -d $prefixexp/script && dflt=$prefixexp/script
3703         set dflt
3704         eval $prefixup
3705         ;;
3706 *)  dflt="$scriptdir"
3707         ;;
3708 esac
3709 $cat <<EOM
3710  
3711 Some installations have a separate directory just for executable scripts so
3712 that they can mount it across multiple architectures but keep the scripts in
3713 one spot.  You might, for example, have a subdirectory of /usr/share for this.
3714 Or you might just lump your scripts in with all your other executables.
3715  
3716 EOM
3717 fn=d~
3718 rp='Where do you keep publicly executable scripts?'
3719 . ./getfile
3720 if $test "X$ansexp" != "X$scriptdirexp"; then
3721         installscript=''
3722 fi
3723 scriptdir="$ans"
3724 scriptdirexp="$ansexp"
3725 if $afs; then
3726         $cat <<EOM
3727
3728 Since you are running AFS, I need to distinguish the directory in which
3729 scripts reside from the directory in which they are installed (and from
3730 which they are presumably copied to the former directory by occult means).
3731
3732 EOM
3733         case "$installscript" in
3734         '') dflt=`echo $scriptdirexp | sed 's#^/afs/#/afs/.#'`;;
3735         *) dflt="$installscript";;
3736         esac
3737         fn=de~
3738         rp='Where will public scripts be installed?'
3739         . ./getfile
3740         installscript="$ans"
3741 else
3742         installscript="$scriptdirexp"
3743 fi
3744
3745 : determine perl absolute location
3746 case "$perlpath" in
3747 '')     perlpath=$binexp/perl ;;
3748 esac
3749
3750 : figure out how to guarantee perl startup
3751 case "$startperl" in
3752 '')
3753         case "$sharpbang" in
3754         *!)
3755                 $cat <<EOH
3756
3757 I can use the #! construct to start perl on your system. This will
3758 make startup of perl scripts faster, but may cause problems if you
3759 want to share those scripts and perl is not in a standard place
3760 ($perlpath) on all your platforms. The alternative is to force
3761 a shell by starting the script with a single ':' character.
3762
3763 EOH
3764                 dflt=$perlpath
3765                 rp='What shall I put after the #! to start up perl ("none" to not use #!)?'
3766                 . ./myread
3767                 case "$ans" in
3768                 none) startperl=": # use perl";;
3769                 *) startperl="#!$ans";;
3770                 esac
3771                 ;;
3772         *) startperl=": # use perl"
3773                 ;;
3774         esac
3775         ;;
3776 esac
3777 echo "I'll use $startperl to start perl scripts."
3778
3779 cat <<EOM
3780
3781 Previous version of $package used the standard IO mechanisms as defined in
3782 <stdio.h>.  Versions 5.003_02 and later of perl allow alternate IO
3783 mechanisms via a "PerlIO" abstraction, but the stdio mechanism is still
3784 the default and is the only supported mechanism.  This abstraction
3785 layer can use AT&T's sfio (if you already have sfio installed) or
3786 fall back on standard IO.  This PerlIO abstraction layer is
3787 experimental and may cause problems with some extension modules.
3788
3789 If this doesn't make any sense to you, just accept the default 'n'.
3790 EOM
3791 case "$useperlio" in
3792 $define|true|[yY]*)     dflt='y';;
3793 *) dflt='n';;
3794 esac
3795 rp='Use the experimental PerlIO abstraction layer?'
3796 . ./myread
3797 case "$ans" in
3798 y|Y) 
3799         val="$define"
3800         ;;     
3801 *)      
3802         echo "Ok, doing things the stdio way"
3803         val="$undef"
3804         ;;
3805 esac
3806 set useperlio
3807 eval $setvar 
3808
3809 : see how we invoke the C preprocessor
3810 echo " "
3811 echo "Now, how can we feed standard input to your C preprocessor..." >&4
3812 cat <<'EOT' >testcpp.c
3813 #define ABC abc
3814 #define XYZ xyz
3815 ABC.XYZ
3816 EOT
3817 cd ..
3818 echo 'cat >.$$.c; '"$cc"' -E ${1+"$@"} .$$.c; rm .$$.c' >cppstdin
3819 chmod 755 cppstdin
3820 wrapper=`pwd`/cppstdin
3821 ok='false'
3822 cd UU
3823
3824 if $test "X$cppstdin" != "X" && \
3825         $cppstdin $cppminus <testcpp.c >testcpp.out 2>&1 && \
3826         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1
3827 then
3828         echo "You used to use $cppstdin $cppminus so we'll use that again."
3829         case "$cpprun" in
3830         '') echo "But let's see if we can live without a wrapper..." ;;
3831         *)
3832                 if $cpprun $cpplast <testcpp.c >testcpp.out 2>&1 && \
3833                         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1
3834                 then
3835                         echo "(And we'll use $cpprun $cpplast to preprocess directly.)"
3836                         ok='true'
3837                 else
3838                         echo "(However, $cpprun $cpplast does not work, let's see...)"
3839                 fi
3840                 ;;
3841         esac
3842 else
3843         case "$cppstdin" in
3844         '') ;;
3845         *)
3846                 echo "Good old $cppstdin $cppminus does not seem to be of any help..."
3847                 ;;
3848         esac
3849 fi
3850
3851 if $ok; then
3852         : nothing
3853 elif echo 'Maybe "'"$cc"' -E" will work...'; \
3854         $cc -E <testcpp.c >testcpp.out 2>&1; \
3855         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3856         echo "Yup, it does."
3857         x_cpp="$cc -E"
3858         x_minus='';
3859 elif echo 'Nope...maybe "'"$cc"' -E -" will work...'; \
3860         $cc -E - <testcpp.c >testcpp.out 2>&1; \
3861         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3862         echo "Yup, it does."
3863         x_cpp="$cc -E"
3864         x_minus='-';
3865 elif echo 'Nope...maybe "'"$cc"' -P" will work...'; \
3866         $cc -P <testcpp.c >testcpp.out 2>&1; \
3867         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3868         echo "Yipee, that works!"
3869         x_cpp="$cc -P"
3870         x_minus='';
3871 elif echo 'Nope...maybe "'"$cc"' -P -" will work...'; \
3872         $cc -P - <testcpp.c >testcpp.out 2>&1; \
3873         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3874         echo "At long last!"
3875         x_cpp="$cc -P"
3876         x_minus='-';
3877 elif echo 'No such luck, maybe "'$cpp'" will work...'; \
3878         $cpp <testcpp.c >testcpp.out 2>&1; \
3879         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3880         echo "It works!"
3881         x_cpp="$cpp"
3882         x_minus='';
3883 elif echo 'Nixed again...maybe "'$cpp' -" will work...'; \
3884         $cpp - <testcpp.c >testcpp.out 2>&1; \
3885         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3886         echo "Hooray, it works!  I was beginning to wonder."
3887         x_cpp="$cpp"
3888         x_minus='-';
3889 elif echo 'Uh-uh.  Time to get fancy.  Trying a wrapper...'; \
3890         $wrapper <testcpp.c >testcpp.out 2>&1; \
3891         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3892         x_cpp="$wrapper"
3893         x_minus=''
3894         echo "Eureka!"
3895 else
3896         dflt=''
3897         rp="No dice.  I can't find a C preprocessor.  Name one:"
3898         . ./myread
3899         x_cpp="$ans"
3900         x_minus=''
3901         $x_cpp <testcpp.c >testcpp.out 2>&1
3902         if $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3903                 echo "OK, that will do." >&4
3904         else
3905 echo "Sorry, I can't get that to work.  Go find one and rerun Configure." >&4
3906                 exit 1
3907         fi
3908 fi
3909
3910 case "$ok" in
3911 false)
3912         cppstdin="$x_cpp"
3913         cppminus="$x_minus"
3914         cpprun="$x_cpp"
3915         cpplast="$x_minus"
3916         set X $x_cpp
3917         shift
3918         case "$1" in
3919         "$cpp")
3920                 echo "Perhaps can we force $cc -E using a wrapper..."
3921                 if $wrapper <testcpp.c >testcpp.out 2>&1; \
3922                         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1
3923                 then
3924                         echo "Yup, we can."
3925                         cppstdin="$wrapper"
3926                         cppminus='';
3927                 else
3928                         echo "Nope, we'll have to live without it..."
3929                 fi
3930                 ;;
3931         esac
3932         case "$cpprun" in
3933         "$wrapper")
3934                 cpprun=''
3935                 cpplast=''
3936                 ;;
3937         esac
3938         ;;
3939 esac
3940
3941 case "$cppstdin" in
3942 "$wrapper") ;;
3943 *) $rm -f $wrapper;;
3944 esac
3945 $rm -f testcpp.c testcpp.out
3946
3947 : Set private lib path
3948 case "$plibpth" in
3949 '') if ./mips; then
3950                 plibpth="$incpath/usr/lib /usr/local/lib /usr/ccs/lib"
3951         fi;;
3952 esac
3953 case "$libpth" in
3954 ' ') dlist='';;
3955 '') dlist="$loclibpth $plibpth $glibpth";;
3956 *) dlist="$libpth";;
3957 esac
3958
3959 : Now check and see which directories actually exist, avoiding duplicates
3960 libpth=''
3961 for xxx in $dlist
3962 do
3963     if $test -d $xxx; then
3964                 case " $libpth " in
3965                 *" $xxx "*) ;;
3966                 *) libpth="$libpth $xxx";;
3967                 esac
3968     fi
3969 done
3970 $cat <<'EOM'
3971
3972 Some systems have incompatible or broken versions of libraries.  Among
3973 the directories listed in the question below, please remove any you
3974 know not to be holding relevant libraries, and add any that are needed.
3975 Say "none" for none.
3976
3977 EOM
3978 case "$libpth" in
3979 '') dflt='none';;
3980 *)
3981         set X $libpth
3982         shift
3983         dflt=${1+"$@"}
3984         ;;
3985 esac
3986 rp="Directories to use for library searches?"
3987 . ./myread
3988 case "$ans" in
3989 none) libpth=' ';;
3990 *) libpth="$ans";;
3991 esac
3992
3993 : determine optimize, if desired, or use for debug flag also
3994 case "$optimize" in
3995 ' ') dflt='none';;
3996 '') dflt='-O';;
3997 *) dflt="$optimize";;
3998 esac
3999 $cat <<EOH
4000
4001 Some C compilers have problems with their optimizers.  By default, $package
4002 compiles with the -O flag to use the optimizer.  Alternately, you might want
4003 to use the symbolic debugger, which uses the -g flag (on traditional Unix
4004 systems).  Either flag can be specified here.  To use neither flag, specify
4005 the word "none".
4006
4007 EOH
4008 rp="What optimizer/debugger flag should be used?"
4009 . ./myread
4010 optimize="$ans"
4011 case "$optimize" in
4012 'none') optimize=" ";;
4013 esac
4014
4015 dflt=''
4016 : We will not override a previous value, but we might want to
4017 : augment a hint file
4018 case "$hint" in
4019 none|recommended)
4020         case "$gccversion" in
4021         1*) dflt='-fpcc-struct-return' ;;
4022         esac
4023         case "$optimize" in
4024         *-g*) dflt="$dflt -DDEBUGGING";;
4025         esac
4026         case "$gccversion" in
4027         2*) if test -d /etc/conf/kconfig.d &&
4028                         $contains _POSIX_VERSION $usrinc/sys/unistd.h >/dev/null 2>&1
4029                 then
4030                         dflt="$dflt -posix"
4031                 fi
4032                 ;;
4033         esac
4034         ;;
4035 esac
4036
4037 case "$mips_type" in
4038 *BSD*|'') inclwanted="$locincpth $usrinc";;
4039 *) inclwanted="$locincpth $inclwanted $usrinc/bsd";;
4040 esac
4041 for thisincl in $inclwanted; do
4042         if $test -d $thisincl; then
4043                 if $test x$thisincl != x$usrinc; then
4044                         case "$dflt" in
4045                         *$thisincl*);;
4046                         *) dflt="$dflt -I$thisincl";;
4047                         esac
4048                 fi
4049         fi
4050 done
4051
4052 inctest='if $contains $2 $usrinc/$1 >/dev/null 2>&1; then
4053         xxx=true;
4054 elif $contains $2 $usrinc/sys/$1 >/dev/null 2>&1; then
4055         xxx=true;
4056 else
4057         xxx=false;
4058 fi;
4059 if $xxx; then
4060         case "$dflt" in
4061         *$2*);;
4062         *) dflt="$dflt -D$2";;
4063         esac;
4064 fi'
4065
4066 if ./osf1; then
4067         set signal.h __LANGUAGE_C__; eval $inctest
4068 else
4069         set signal.h LANGUAGE_C; eval $inctest
4070 fi
4071 set signal.h NO_PROTOTYPE; eval $inctest
4072 set signal.h _NO_PROTO; eval $inctest
4073
4074 case "$hint" in
4075 none|recommended) dflt="$ccflags $dflt" ;;
4076 *) dflt="$ccflags";;
4077 esac
4078
4079 case "$dflt" in
4080 ''|' ') dflt=none;;
4081 esac
4082 $cat <<EOH
4083
4084 Your C compiler may want other flags.  For this question you should include
4085 -I/whatever and -DWHATEVER flags and any other flags used by the C compiler,
4086 but you should NOT include libraries or ld flags like -lwhatever.  If you
4087 want $package to honor its debug switch, you should include -DDEBUGGING here.
4088 Your C compiler might also need additional flags, such as -D_POSIX_SOURCE,
4089 -DHIDEMYMALLOC or -DCRIPPLED_CC.
4090
4091 To use no flags, specify the word "none".
4092
4093 EOH
4094 set X $dflt
4095 shift
4096 dflt=${1+"$@"}
4097 rp="Any additional cc flags?"
4098 . ./myread
4099 case "$ans" in
4100 none) ccflags='';;
4101 *) ccflags="$ans";;
4102 esac
4103
4104 : the following weeds options from ccflags that are of no interest to cpp
4105 cppflags="$ccflags"
4106 case "$gccversion" in
4107 1*) cppflags="$cppflags -D__GNUC__"
4108 esac
4109 case "$mips_type" in
4110 '');;
4111 *BSD*) cppflags="$cppflags -DSYSTYPE_BSD43";;
4112 esac
4113 case "$cppflags" in
4114 '');;
4115 *)
4116         echo " "
4117         echo "Let me guess what the preprocessor flags are..." >&4
4118         set X $cppflags
4119         shift
4120         cppflags=''
4121         $cat >cpp.c <<'EOM'
4122 #define BLURFL foo
4123
4124 BLURFL xx LFRULB
4125 EOM
4126         previous=''
4127         for flag in $*
4128         do
4129                 case "$flag" in
4130                 -*) ftry="$flag";;
4131                 *) ftry="$previous $flag";;
4132                 esac
4133                 if $cppstdin -DLFRULB=bar $ftry $cppminus <cpp.c \
4134                         >cpp1.out 2>/dev/null && \
4135                         $cpprun -DLFRULB=bar $ftry $cpplast <cpp.c \
4136                         >cpp2.out 2>/dev/null && \
4137                         $contains 'foo.*xx.*bar' cpp1.out >/dev/null 2>&1 && \
4138                         $contains 'foo.*xx.*bar' cpp2.out >/dev/null 2>&1
4139                 then
4140                         cppflags="$cppflags $ftry"
4141                         previous=''
4142                 else
4143                         previous="$flag"
4144                 fi
4145         done
4146         set X $cppflags
4147         shift
4148         cppflags=${1+"$@"}
4149         case "$cppflags" in
4150         *-*)  echo "They appear to be: $cppflags";;
4151         esac
4152         $rm -f cpp.c cpp?.out
4153         ;;
4154 esac
4155
4156 : flags used in final linking phase
4157
4158 case "$ldflags" in
4159 '') if ./venix; then
4160                 dflt='-i -z'
4161         else
4162                 dflt=''
4163         fi
4164         case "$ccflags" in
4165         *-posix*) dflt="$dflt -posix" ;;
4166         esac
4167         ;;
4168 *) dflt="$ldflags";;
4169 esac
4170
4171 : Try to guess additional flags to pick up local libraries.
4172 for thislibdir in $libpth; do
4173         case " $loclibpth " in
4174         *" $thislibdir "*)
4175                 case "$dflt " in 
4176                 *"-L$thislibdir "*) ;;
4177                 *)  dflt="$dflt -L$thislibdir" ;;
4178                 esac
4179                 ;;
4180         esac
4181 done
4182
4183 case "$dflt" in
4184 '') dflt='none' ;;
4185 esac
4186
4187 $cat <<EOH
4188
4189 Your C linker may need flags.  For this question you should
4190 include -L/whatever and any other flags used by the C linker, but you
4191 should NOT include libraries like -lwhatever.
4192
4193 Make sure you include the appropriate -L/path flags if your C linker
4194 does not normally search all of the directories you specified above,
4195 namely
4196         $libpth
4197 To use no flags, specify the word "none".
4198
4199 EOH
4200
4201 rp="Any additional ld flags (NOT including libraries)?"
4202 . ./myread
4203 case "$ans" in
4204 none) ldflags='';;
4205 *) ldflags="$ans";;
4206 esac
4207 rmlist="$rmlist pdp11"
4208
4209 : coherency check
4210 echo " "
4211 echo "Checking your choice of C compiler and flags for coherency..." >&4
4212 set X $cc $optimize $ccflags $ldflags try.c -o try
4213 shift
4214 $cat >try.msg <<EOM
4215 I've tried to compile and run a simple program with:
4216
4217         $*
4218         ./try
4219
4220 and I got the following output:
4221
4222 EOM
4223 $cat > try.c <<'EOF'
4224 #include <stdio.h>
4225 main() { exit(0); }
4226 EOF
4227 dflt=y
4228 if sh -c "$cc $optimize $ccflags try.c -o try $ldflags" >>try.msg 2>&1; then
4229         if sh -c './try' >>try.msg 2>&1; then
4230                 dflt=n
4231         else
4232                 echo "The program compiled OK, but exited with status $?." >>try.msg
4233                 rp="You have a problem.  Shall I abort Configure"
4234                 dflt=y
4235         fi
4236 else
4237         echo "I can't compile the test program." >>try.msg
4238         rp="You have a BIG problem.  Shall I abort Configure"
4239         dflt=y
4240 fi
4241 case "$dflt" in
4242 y)
4243         $cat try.msg
4244         case "$knowitall" in
4245         '')
4246                 echo "(The supplied flags might be incorrect with this C compiler.)"
4247                 ;;
4248         *) dflt=n;;
4249         esac
4250         echo " "
4251         . ./myread
4252         case "$ans" in
4253         n*|N*) ;;
4254         *)      echo "Ok.  Stopping Configure." >&4
4255                 exit 1
4256                 ;;
4257         esac
4258         ;;
4259 n) echo "OK, that should do.";;
4260 esac
4261 $rm -f try try.* core
4262
4263 : compute shared library extension
4264 case "$so" in
4265 '')
4266         if xxx=`./loc libc.sl X $libpth`; $test -f "$xxx"; then
4267                 dflt='sl'
4268         else
4269                 dflt='so'
4270         fi
4271         ;;
4272 *) dflt="$so";;
4273 esac
4274 $cat <<EOM
4275
4276 On some systems, shared libraries may be available.  Answer 'none' if
4277 you want to suppress searching of shared libraries for the remaining
4278 of this configuration.
4279
4280 EOM
4281 rp='What is the file extension used for shared libraries?'
4282 . ./myread
4283 so="$ans"
4284
4285 : Looking for optional libraries
4286 echo " "
4287 echo "Checking for optional libraries..." >&4
4288 case "$libs" in
4289 ' '|'') dflt='';;
4290 *) dflt="$libs";;
4291 esac
4292 case "$libswanted" in
4293 '') libswanted='c_s';;
4294 esac
4295 for thislib in $libswanted; do
4296         
4297         if xxx=`./loc lib$thislib.$so.[0-9]'*' X $libpth`; $test -f "$xxx"; then
4298                 echo "Found -l$thislib (shared)."
4299                 case " $dflt " in
4300                 *"-l$thislib "*);;
4301                 *) dflt="$dflt -l$thislib";;
4302                 esac
4303         elif xxx=`./loc lib$thislib.$so X $libpth` ; $test -f "$xxx"; then
4304                 echo "Found -l$thislib (shared)."
4305                 case " $dflt " in
4306                 *"-l$thislib "*);;
4307                 *) dflt="$dflt -l$thislib";;
4308                 esac
4309         elif xxx=`./loc lib$thislib.a X $libpth`; $test -f "$xxx"; then
4310                 echo "Found -l$thislib."
4311                 case " $dflt " in
4312                 *"-l$thislib "*);;
4313                 *) dflt="$dflt -l$thislib";;
4314                 esac
4315         elif xxx=`./loc $thislib.a X $libpth`; $test -f "$xxx"; then
4316                 echo "Found -l$thislib."
4317                 case " $dflt " in
4318                 *"-l$thislib "*);;
4319                 *) dflt="$dflt -l$thislib";;
4320                 esac
4321         elif xxx=`./loc lib${thislib}_s.a X $libpth`; $test -f "$xxx"; then
4322                 echo "Found -l${thislib}_s."
4323                 case " $dflt " in
4324                 *"-l$thislib "*);;
4325                 *) dflt="$dflt -l${thislib}_s";;
4326                 esac
4327         elif xxx=`./loc Slib$thislib.a X $xlibpth`; $test -f "$xxx"; then
4328                 echo "Found -l$thislib."
4329                 case " $dflt " in
4330                 *"-l$thislib "*);;
4331                 *) dflt="$dflt -l$thislib";;
4332                 esac
4333         else
4334                 echo "No -l$thislib."
4335         fi
4336 done
4337 set X $dflt
4338 shift
4339 dflt="$*"
4340 case "$libs" in
4341 '') dflt="$dflt";;
4342 *) dflt="$libs";;
4343 esac
4344 case "$dflt" in
4345 ' '|'') dflt='none';;
4346 esac
4347
4348 $cat <<EOM
4349  
4350 Some versions of Unix support shared libraries, which make executables smaller
4351 but make load time slightly longer.
4352
4353 On some systems, mostly System V Release 3's, the shared library is included
4354 by putting the option "-lc_s" as the last thing on the cc command line when
4355 linking.  Other systems use shared libraries by default.  There may be other
4356 libraries needed to compile $package on your machine as well.  If your system
4357 needs the "-lc_s" option, include it here.  Include any other special libraries
4358 here as well.  Say "none" for none.
4359 EOM
4360
4361 echo " "
4362 rp="Any additional libraries?"
4363 . ./myread
4364 case "$ans" in
4365 none) libs=' ';;
4366 *) libs="$ans";;
4367 esac
4368
4369 : see if nm is to be used to determine whether a symbol is defined or not
4370 case "$usenm" in
4371 '')
4372         dflt=`egrep 'inlibc|csym' ../Configure | wc -l 2>/dev/null`
4373         if $test $dflt -gt 20; then
4374                 dflt=y
4375         else
4376                 dflt=n
4377         fi
4378         ;;
4379 *)
4380         case "$usenm" in
4381         true) dflt=y;;
4382         *) dflt=n;;
4383         esac
4384         ;;
4385 esac
4386 $cat <<EOM
4387
4388 I can use 'nm' to extract the symbols from your C libraries. This is a time
4389 consuming task which may generate huge output on the disk (up to 3 megabytes)
4390 but that should make the symbols extraction faster. The alternative is to skip
4391 the 'nm' extraction part and to compile a small test program instead to
4392 determine whether each symbol is present. If you have a fast C compiler and/or
4393 if your 'nm' output cannot be parsed, this may be the best solution.
4394
4395 EOM
4396 rp='Shall I use nm to extract C symbols from the libraries?'
4397 . ./myread
4398 case "$ans" in
4399 n|N) usenm=false;;
4400 *) usenm=true;;
4401 esac
4402
4403 runnm=$usenm
4404 case "$reuseval" in
4405 true) runnm=false;;
4406 esac
4407
4408 : nm options which may be necessary
4409 case "$nm_opt" in
4410 '') if $test -f /mach_boot; then
4411                 nm_opt=''
4412         elif $test -d /usr/ccs/lib; then
4413                 nm_opt='-p'
4414         elif $test -f /dgux; then
4415                 nm_opt='-p'
4416         else
4417                 nm_opt=''
4418         fi;;
4419 esac
4420
4421 : nm options which may be necessary for shared libraries but illegal
4422 : for archive libraries.  Thank you, Linux.
4423 case "$nm_so_opt" in
4424 '')     case "$myuname" in
4425         *linux*)
4426                 if nm --help | $grep 'dynamic' > /dev/null 2>&1; then
4427                         nm_so_opt='--dynamic'
4428                 fi
4429                 ;;
4430         esac
4431         ;;
4432 esac
4433
4434 case "$runnm" in
4435 true)
4436 : get list of predefined functions in a handy place
4437 echo " "
4438 case "$libc" in
4439 '') libc=unknown
4440         case "$libs" in
4441         *-lc_s*) libc=`./loc libc_s.a $libc $libpth`
4442         esac
4443         ;;
4444 esac
4445 libnames='';
4446 case "$libs" in
4447 '') ;;
4448 *)  for thislib in $libs; do
4449         case "$thislib" in
4450         -lc|-lc_s)
4451                 : Handle C library specially below.
4452                 ;;
4453         -l*)
4454                 thislib=`echo $thislib | $sed -e 's/^-l//'`
4455                 if try=`./loc lib$thislib.$so.'*' X $libpth`; $test -f "$try"; then
4456                         :
4457                 elif try=`./loc lib$thislib.$so X $libpth`; $test -f "$try"; then
4458                         :
4459                 elif try=`./loc lib$thislib.a X $libpth`; $test -f "$try"; then
4460                         :
4461                 elif try=`./loc lib$thislib X $libpth`; $test -f "$try"; then
4462                         :
4463                 elif try=`./loc $thislib X $libpth`; $test -f "$try"; then
4464                         :
4465                 elif try=`./loc Slib$thislib.a X $xlibpth`; $test -f "$try"; then
4466                         :
4467                 else
4468                         try=''
4469                 fi
4470                 libnames="$libnames $try"
4471                 ;;
4472         *) libnames="$libnames $thislib" ;;
4473         esac
4474         done
4475         ;;
4476 esac
4477 xxx=normal
4478 case "$libc" in
4479 unknown)
4480         set /lib/libc.$so
4481         for xxx in $libpth; do
4482                 $test -r $1 || set $xxx/libc.$so
4483                 : The messy sed command sorts on library version numbers.
4484                 $test -r $1 || \
4485                         set `echo blurfl; echo $xxx/libc.$so.[0-9]* | \
4486                                 tr ' ' '\012' | egrep -v '\.[A-Za-z]*$' | $sed -e '
4487                                 h
4488                                 s/[0-9][0-9]*/0000&/g
4489                                 s/0*\([0-9][0-9][0-9][0-9][0-9]\)/\1/g
4490                                 G
4491                                 s/\n/ /' | \
4492                         sort | $sed -e 's/^.* //'`
4493                 eval set \$$#
4494         done
4495         $test -r $1 || set /usr/ccs/lib/libc.$so
4496         $test -r $1 || set /lib/libsys_s.a
4497         ;;
4498 *)
4499         set blurfl
4500         ;;
4501 esac
4502 if $test -r "$1"; then
4503         echo "Your (shared) C library seems to be in $1."
4504         libc="$1"
4505 elif $test -r /lib/libc && $test -r /lib/clib; then
4506         echo "Your C library seems to be in both /lib/clib and /lib/libc."
4507         xxx=apollo
4508         libc='/lib/clib /lib/libc'
4509         if $test -r /lib/syslib; then
4510                 echo "(Your math library is in /lib/syslib.)"
4511                 libc="$libc /lib/syslib"
4512         fi
4513 elif $test -r "$libc" || (test -h "$libc") >/dev/null 2>&1; then
4514         echo "Your C library seems to be in $libc, as you said before."
4515 elif $test -r $incpath/usr/lib/libc.a; then
4516         libc=$incpath/usr/lib/libc.a;
4517         echo "Your C library seems to be in $libc.  That's fine."
4518 elif $test -r /lib/libc.a; then
4519         libc=/lib/libc.a;
4520         echo "Your C library seems to be in $libc.  You're normal."
4521 else
4522         if tans=`./loc libc.a blurfl/dyick $libpth`; $test -r "$tans"; then
4523                 :
4524         elif tans=`./loc libc blurfl/dyick $libpth`; $test -r "$tans"; then
4525                 libnames="$libnames "`./loc clib blurfl/dyick $libpth`
4526         elif tans=`./loc clib blurfl/dyick $libpth`; $test -r "$tans"; then
4527                 :
4528         elif tans=`./loc Slibc.a blurfl/dyick $xlibpth`; $test -r "$tans"; then
4529                 :
4530         elif tans=`./loc Mlibc.a blurfl/dyick $xlibpth`; $test -r "$tans"; then
4531                 :
4532         else
4533                 tans=`./loc Llibc.a blurfl/dyick $xlibpth`
4534         fi
4535         if $test -r "$tans"; then
4536                 echo "Your C library seems to be in $tans, of all places."
4537                 libc=$tans
4538         else
4539                 libc='blurfl'
4540         fi
4541 fi
4542 if $test $xxx = apollo -o -r "$libc" || (test -h "$libc") >/dev/null 2>&1; then
4543         dflt="$libc"
4544         cat <<EOM
4545
4546 If the guess above is wrong (which it might be if you're using a strange
4547 compiler, or your machine supports multiple models), you can override it here.
4548
4549 EOM
4550 else
4551         dflt=''
4552         echo $libpth | tr ' ' '\012' | sort | uniq > libpath
4553         cat >&4 <<EOM
4554 I can't seem to find your C library.  I've looked in the following places:
4555
4556 EOM
4557         $sed 's/^/      /' libpath
4558         cat <<EOM
4559
4560 None of these seems to contain your C library. I need to get its name...
4561
4562 EOM
4563 fi
4564 fn=f
4565 rp='Where is your C library?'
4566 . ./getfile
4567 libc="$ans"
4568
4569 echo " "
4570 echo $libc $libnames | tr ' ' '\012' | sort | uniq > libnames
4571 set X `cat libnames`
4572 shift
4573 xxx=files
4574 case $# in 1) xxx=file; esac
4575 echo "Extracting names from the following $xxx for later perusal:" >&4
4576 echo " "
4577 $sed 's/^/      /' libnames >&4
4578 echo " "
4579 $echo $n "This may take a while...$c" >&4
4580
4581 : Linux may need the special Dynamic option to nm for shared libraries.
4582 : In general, this is stored in the nm_so_opt variable.
4583 : Unfortunately, that option may be fatal on non-shared libraries.
4584 for nm_libs_ext in $*; do
4585     case $nm_libs_ext in
4586         *$so*)  nm $nm_so_opt $nm_opt $nm_libs_ext 2>/dev/null ;;
4587         *)              nm $nm_opt $nm_libs_ext 2>/dev/null ;;
4588         esac
4589 done > libc.tmp
4590
4591 $echo $n ".$c"
4592 $grep fprintf libc.tmp > libc.ptf
4593 xscan='eval "<libc.ptf $com >libc.list"; $echo $n ".$c" >&4'
4594 xrun='eval "<libc.tmp $com >libc.list"; echo "done" >&4'
4595 xxx='[ADTSIW]'
4596 if com="$sed -n -e 's/__IO//' -e 's/^.* $xxx  *_[_.]*//p' -e 's/^.* $xxx //p'";\
4597         eval $xscan;\
4598         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4599                 eval $xrun
4600 elif com="$sed -n -e 's/^__*//' -e 's/^\([a-zA-Z_0-9$]*\).*xtern.*/\1/p'";\
4601         eval $xscan;\
4602         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4603                 eval $xrun
4604 elif com="$sed -n -e '/|UNDEF/d' -e '/FUNC..GL/s/^.*|__*//p'";\
4605         eval $xscan;\
4606         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4607                 eval $xrun
4608 elif com="$sed -n -e 's/^.* D __*//p' -e 's/^.* D //p'";\
4609         eval $xscan;\
4610         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4611                 eval $xrun
4612 elif com="$sed -n -e 's/^_//' -e 's/^\([a-zA-Z_0-9]*\).*xtern.*text.*/\1/p'";\
4613         eval $xscan;\
4614         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4615                 eval $xrun
4616 elif com="$sed -n -e 's/^.*|FUNC |GLOB .*|//p'";\
4617         eval $xscan;\
4618         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4619                 eval $xrun
4620 elif com="$grep '|' | $sed -n -e '/|COMMON/d' -e '/|DATA/d' \
4621                                 -e '/ file/d' -e 's/^\([^       ]*\).*/\1/p'";\
4622         eval $xscan;\
4623         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4624                 eval $xrun
4625 elif com="$sed -n -e 's/^.*|FUNC |GLOB .*|//p' -e 's/^.*|FUNC |WEAK .*|//p'";\
4626         eval $xscan;\
4627         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4628                 eval $xrun
4629 elif com="$sed -n -e 's/^__//' -e '/|Undef/d' -e '/|Proc/s/ .*//p'";\
4630         eval $xscan;\
4631         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4632                 eval $xrun
4633 elif com="$sed -n -e '/Def. Text/s/.* \([^ ]*\)\$/\1/p'";\
4634         eval $xscan;\
4635         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4636                 eval $xrun
4637 elif com="$sed -n -e 's/^[-0-9a-f ]*_\(.*\)=.*/\1/p'";\
4638         eval $xscan;\
4639         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4640                 eval $xrun
4641 else
4642         nm -p $* 2>/dev/null >libc.tmp
4643         $grep fprintf libc.tmp > libc.ptf
4644         if com="$sed -n -e 's/^.* [ADTSIW]  *_[_.]*//p' -e 's/^.* [ADTSIW] //p'";\
4645                 eval $xscan; $contains '^fprintf$' libc.list >/dev/null 2>&1
4646         then
4647                 nm_opt='-p'
4648                 eval $xrun
4649         else
4650                 echo " "
4651                 echo "nm didn't seem to work right. Trying ar instead..." >&4
4652                 com=''
4653                 if ar t $libc > libc.tmp; then
4654                         for thisname in $libnames; do
4655                                 ar t $thisname >>libc.tmp
4656                         done
4657                         $sed -e 's/\.o$//' < libc.tmp > libc.list
4658                         echo "Ok." >&4
4659                 else
4660                         echo "ar didn't seem to work right." >&4
4661                         echo "Maybe this is a Cray...trying bld instead..." >&4
4662                         if bld t $libc | $sed -e 's/.*\///' -e 's/\.o:.*$//' > libc.list
4663                         then
4664                                 for thisname in $libnames; do
4665                                         bld t $libnames | \
4666                                         $sed -e 's/.*\///' -e 's/\.o:.*$//' >>libc.list
4667                                         ar t $thisname >>libc.tmp
4668                                 done
4669                                 echo "Ok." >&4
4670                         else
4671                                 echo "That didn't work either.  Giving up." >&4
4672                                 exit 1
4673                         fi
4674                 fi
4675         fi
4676 fi
4677 nm_extract="$com"
4678 if $test -f /lib/syscalls.exp; then
4679         echo " "
4680         echo "Also extracting names from /lib/syscalls.exp for good ole AIX..." >&4
4681         $sed -n 's/^\([^        ]*\)[   ]*syscall$/\1/p' /lib/syscalls.exp >>libc.list
4682 fi
4683 ;;
4684 esac
4685 $rm -f libnames libpath
4686
4687 : is a C symbol defined?
4688 csym='tlook=$1;
4689 case "$3" in
4690 -v) tf=libc.tmp; tc=""; tdc="";;
4691 -a) tf=libc.tmp; tc="[0]"; tdc="[]";;
4692 *) tlook="^$1\$"; tf=libc.list; tc="()"; tdc="()";;
4693 esac;
4694 tx=yes;
4695 case "$reuseval-$4" in
4696 true-) ;;
4697 true-*) tx=no; eval "tval=\$$4"; case "$tval" in "") tx=yes;; esac;;
4698 esac;
4699 case "$tx" in
4700 yes)
4701         case "$runnm" in
4702         true)
4703                 if $contains $tlook $tf >/dev/null 2>&1;
4704                 then tval=true;
4705                 else tval=false;
4706                 fi;;
4707         *)
4708                 echo "main() { extern short $1$tdc; printf(\"%hd\", $1$tc); }" > t.c;
4709                 if $cc $ccflags $ldflags -o t t.c $libs >/dev/null 2>&1;
4710                 then tval=true;
4711                 else tval=false;
4712                 fi;
4713                 $rm -f t t.c;;
4714         esac;;
4715 *)
4716         case "$tval" in
4717         $define) tval=true;;
4718         *) tval=false;;
4719         esac;;
4720 esac;