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