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