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