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