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