This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Obsolete epoc/config.h caused #4153 to re-introduce already
[perl5.git] / Configure
1 #! /bin/sh
2 #
3 # If these # comments don't work, trim them. Don't worry about any other
4 # shell scripts, Configure will trim # comments from them for you.
5 #
6 # (If you are trying to port this package to a machine without sh,
7 # I would suggest you have a look at the prototypical config_h.SH file
8 # and edit it to reflect your system. Some packages may include samples
9 # of config.h for certain machines, so you might look for one of those.)
10 #
11 # Yes, you may rip this off to use in other distribution packages. This
12 # script belongs to the public domain and cannot be copyrighted.
13 #
14 # (Note: this Configure script was generated automatically. Rather than
15 # working with this copy of Configure, you may wish to get metaconfig.
16 # The dist-3.0 package (which contains metaconfig) was posted in
17 # comp.sources.misc and is available on CPAN under authors/id/RAM so
18 # you may fetch it yourself from your nearest archive site.)
19 #
20
21 # $Id: Head.U,v 3.0.1.9 1997/02/28 15:02:09 ram Exp $
22 #
23 # Generated on Tue Sep 14 23:20:30 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 = "A: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 posthint.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         -A)
1219             shift
1220             xxx=''
1221             yyy="$1"
1222             case "$yyy" in
1223             *:*) xxx=`echo $yyy|sed 's!:.*!!'`
1224                  yyy=`echo $yyy|sed 's!^[^:]*:!!'`
1225                  ;;
1226             esac
1227             case "$xxx" in
1228             '') xxx=define ;;
1229             esac
1230             zzz=''
1231             uuu='undef'
1232             case "$yyy" in
1233             *=*) zzz=`echo $yyy|sed 's!^[^=]*=!!'`
1234                  yyy=`echo $yyy|sed 's!=.*!!'`
1235                  case "$yyy:$zzz" in
1236                  undef:) uuu='' ;;
1237                  esac
1238                  ;;
1239             esac
1240             case "$xxx" in
1241             append)
1242                 echo "$yyy=\"\${$yyy}$zzz\""    >> posthint.sh
1243                 ;;
1244             clear)
1245                 echo "$yyy=''"                  >> posthint.sh
1246                 ;;
1247             define)
1248                 case "$zzz" in
1249                 '') zzz=define ;;
1250                 esac
1251                 echo "$yyy='$zzz'"              >> posthint.sh
1252                 ;; 
1253             eval)
1254                 echo "eval \"$yyy=$zzz\""       >> posthint.sh
1255                 ;; 
1256             prepend)
1257                 echo "$yyy=\"$zzz\${$yyy}\""    >> posthint.sh
1258                 ;; 
1259             undef)
1260                 case "$zzz" in
1261                 '') zzz="$uuu" ;;
1262                 esac
1263                 echo "$yyy=$zzz"                >> posthint.sh
1264                 ;; 
1265             *)  echo "$me: unknown -A command '$xxx', ignoring -A $1" >&2
1266                 ;;
1267             esac
1268             ;;
1269         -V) echo "$me generated by metaconfig 3.0 PL70." >&2
1270                 exit 0;;
1271         --) break;;
1272         -*) echo "$me: unknown option $1" >&2; shift; error=true;;
1273         *) break;;
1274         esac
1275 done
1276
1277 case "$error" in
1278 true)
1279         cat >&2 <<EOM
1280 Usage: $me [-dehrsEKOSV] [-f config.sh] [-D symbol] [-D symbol=value]
1281                  [-U symbol] [-U symbol=] [-A command:symbol...]
1282   -d : use defaults for all answers.
1283   -e : go on without questioning past the production of config.sh.
1284   -f : specify an alternate default configuration file.
1285   -h : print this help message and exit (with an error status).
1286   -r : reuse C symbols value if possible (skips costly nm extraction).
1287   -s : silent mode, only echoes questions and essential information.
1288   -D : define symbol to have some value:
1289          -D symbol         symbol gets the value 'define'
1290          -D symbol=value   symbol gets the value 'value'
1291   -E : stop at the end of questions, after having produced config.sh.
1292   -K : do not use unless you know what you are doing.
1293   -O : let -D and -U override definitions from loaded configuration file.
1294   -S : perform variable substitutions on all .SH files (can mix with -f)
1295   -U : undefine symbol:
1296          -U symbol    symbol gets the value 'undef'
1297          -U symbol=   symbol gets completely empty
1298   -A : manipulate symbol after the platform specific hints have been applied:
1299          -A append:symbol=value         append value to symbol
1300          -A define:symbol=value         define symbol to have value
1301          -A symbol=value                define symbol to have value
1302          -A clear:symbol                define symbol to be ''
1303          -A define:symbol               define symbol to be 'define'
1304          -A eval:symbol=value           define symbol to be eval of value
1305          -A prepend:symbol=value        prepend value to symbol
1306          -A undef:symbol                define symbol to be 'undef'
1307          -A undef:symbol=               define symbol to be ''
1308   -V : print version number and exit (with a zero status).
1309 EOM
1310         exit 1
1311         ;;
1312 esac
1313
1314 : Sanity checks
1315 case "$fastread$alldone" in
1316 yescont|yesexit) ;;
1317 *)
1318         if test ! -t 0; then
1319                 echo "Say 'sh Configure', not 'sh <Configure'"
1320                 exit 1
1321         fi
1322         ;;
1323 esac
1324
1325 exec 4>&1
1326 case "$silent" in
1327 true) exec 1>/dev/null;;
1328 esac
1329
1330 : run the defines and the undefines, if any, but leave the file out there...
1331 touch optdef.sh
1332 . ./optdef.sh
1333 : create the posthint manipulation script and leave the file out there...
1334 touch posthint.sh
1335 . ./posthint.sh
1336
1337 : set package name
1338 package=perl5
1339 first=`echo $package | sed -e 's/^\(.\).*/\1/'`
1340 last=`echo $package | sed -e 's/^.\(.*\)/\1/'`
1341 case "`echo AbyZ | tr '[:lower:]' '[:upper:]' 2>/dev/null`" in
1342 ABYZ) spackage=`echo $first | tr '[:lower:]' '[:upper:]'`$last;;
1343 *) spackage=`echo $first | tr '[a-z]' '[A-Z]'`$last;;
1344 esac
1345
1346 : Some greps do not return status, grrr.
1347 echo "grimblepritz" >grimble
1348 if grep blurfldyick grimble >/dev/null 2>&1 ; then
1349         contains=contains
1350 elif grep grimblepritz grimble >/dev/null 2>&1 ; then
1351         contains=grep
1352 else
1353         contains=contains
1354 fi
1355 rm -f grimble
1356 : the following should work in any shell
1357 case "$contains" in
1358 contains*)
1359         echo " "
1360         echo "AGH!  Grep doesn't return a status.  Attempting remedial action."
1361         cat >contains <<'EOSS'
1362 grep "$1" "$2" >.greptmp && cat .greptmp && test -s .greptmp
1363 EOSS
1364 chmod +x contains
1365 esac
1366
1367 : Find the path to the source tree
1368 case "$src" in
1369 '') case "$0" in
1370     */*) src=`echo $0 | sed -e 's%/[^/][^/]*$%%'`
1371          case "$src" in
1372          /*)    ;;
1373          *)     src=`cd ../$src && pwd` ;;
1374          esac
1375          ;;
1376     *)   src='.';;
1377     esac;;
1378 esac
1379 case "$src" in
1380 '')     src=/
1381         rsrc=/
1382         ;;
1383 /*) rsrc="$src";;
1384 *) rsrc="../$src";;
1385 esac
1386 if test -f $rsrc/Configure && \
1387         $contains "^package=$package$" $rsrc/Configure >/dev/null 2>&1
1388 then
1389    : found it, so we are ok.
1390 else
1391         rsrc=''
1392         for src in . .. ../.. ../../.. ../../../..; do
1393                 if test -f ../$src/Configure && \
1394                         $contains "^package=$package$" ../$src/Configure >/dev/null 2>&1
1395                 then
1396                         rsrc=../$src
1397                         break
1398                 fi
1399         done
1400 fi
1401 case "$rsrc" in
1402 '')
1403         cat <<EOM >&4
1404
1405 Sorry, I can't seem to locate the source dir for $package.  Please start
1406 Configure with an explicit path -- i.e. /some/path/Configure.
1407
1408 EOM
1409         exit 1
1410         ;;
1411 ../.)   rsrc='..';;
1412 *)
1413         echo " "
1414         echo "Sources for $package found in \"$src\"." >&4
1415         ;;
1416 esac
1417
1418 : script used to extract .SH files with variable substitutions
1419 cat >extract <<'EOS'
1420 CONFIGDOTSH=true
1421 echo "Doing variable substitutions on .SH files..."
1422 if test -f $src/MANIFEST; then
1423         set x `awk '{print $1}' <$src/MANIFEST | grep '\.SH$'`
1424 else
1425         echo "(Looking for .SH files under the source directory.)"
1426         set x `(cd $src; find . -name "*.SH" -print)`
1427 fi
1428 shift
1429 case $# in
1430 0) set x `(cd $src; echo *.SH)`; shift;;
1431 esac
1432 if test ! -f $src/$1; then
1433         shift
1434 fi
1435 mkdir_p='
1436 name=$1;
1437 create="";
1438 while test $name; do
1439         if test ! -d "$name"; then
1440                 create="$name $create";
1441                 name=`echo $name | sed -e "s|^[^/]*$||"`;
1442                 name=`echo $name | sed -e "s|\(.*\)/.*|\1|"`;
1443         else
1444                 name="";
1445         fi;
1446 done;
1447 for file in $create; do
1448         mkdir $file;
1449 done
1450 '
1451 for file in $*; do
1452         case "$src" in
1453         ".")
1454                 case "$file" in
1455                 */*)
1456                         dir=`expr X$file : 'X\(.*\)/'`
1457                         file=`expr X$file : 'X.*/\(.*\)'`
1458                         (cd $dir && . ./$file)
1459                         ;;
1460                 *)
1461                         . ./$file
1462                         ;;
1463                 esac
1464                 ;;
1465         *)
1466                 case "$file" in
1467                 */*)
1468                         dir=`expr X$file : 'X\(.*\)/'`
1469                         file=`expr X$file : 'X.*/\(.*\)'`
1470                         (set x $dir; shift; eval $mkdir_p)
1471                         sh <$src/$dir/$file
1472                         ;;
1473                 *)
1474                         sh <$src/$file
1475                         ;;
1476                 esac
1477                 ;;
1478         esac
1479 done
1480 if test -f $src/config_h.SH; then
1481         if test ! -f config.h; then
1482         : oops, they left it out of MANIFEST, probably, so do it anyway.
1483         . $src/config_h.SH
1484         fi
1485 fi
1486 EOS
1487
1488 : extract files and exit if asked to do so
1489 case "$extractsh" in
1490 true)
1491         case "$realsilent" in
1492         true) ;;
1493         *) exec 1>&4;;
1494         esac
1495         case "$config_sh" in
1496         '') config_sh='config.sh';;
1497         esac
1498         echo " "
1499         echo "Fetching answers from $config_sh..."
1500         cd ..
1501         . $config_sh
1502         test "$override" && . ./optdef.sh
1503         echo " "
1504         . UU/extract
1505         rm -rf UU
1506         echo "Done."
1507         exit 0
1508         ;;
1509 esac
1510
1511 : Eunice requires " " instead of "", can you believe it
1512 echo " "
1513 : Here we go...
1514 echo "Beginning of configuration questions for $package."
1515
1516 trap 'echo " "; test -d ../UU && rm -rf X $rmlist; exit 1' 1 2 3 15
1517
1518 : first determine how to suppress newline on echo command
1519 echo " "
1520 echo "Checking echo to see how to suppress newlines..."
1521 (echo "hi there\c" ; echo " ") >.echotmp
1522 if $contains c .echotmp >/dev/null 2>&1 ; then
1523         echo "...using -n."
1524         n='-n'
1525         c=''
1526 else
1527         cat <<'EOM'
1528 ...using \c
1529 EOM
1530         n=''
1531         c='\c'
1532 fi
1533 echo $n "The star should be here-->$c"
1534 echo '*'
1535 rm -f .echotmp
1536
1537 : Now test for existence of everything in MANIFEST
1538 echo " "
1539 if test -f $rsrc/MANIFEST; then
1540         echo "First let's make sure your kit is complete.  Checking..." >&4
1541         awk '$1 !~ /PACK[A-Z]+/ {print $1}' $rsrc/MANIFEST | split -50
1542         rm -f missing
1543         tmppwd=`pwd`
1544         for filelist in x??; do
1545                 (cd $rsrc; ls `cat $tmppwd/$filelist` >/dev/null 2>>$tmppwd/missing)
1546         done
1547         if test -s missing; then
1548                 cat missing >&4
1549                 cat >&4 <<'EOM'
1550
1551 THIS PACKAGE SEEMS TO BE INCOMPLETE.
1552
1553 You have the option of continuing the configuration process, despite the
1554 distinct possibility that your kit is damaged, by typing 'y'es.  If you
1555 do, don't blame me if something goes wrong.  I advise you to type 'n'o
1556 and contact the author (perlbug@perl.com).
1557
1558 EOM
1559                 echo $n "Continue? [n] $c" >&4
1560                 read ans
1561                 case "$ans" in
1562                 y*)
1563                         echo "Continuing..." >&4
1564                         rm -f missing
1565                         ;;
1566                 *)
1567                         echo "ABORTING..." >&4
1568                         kill $$
1569                         ;;
1570                 esac
1571         else
1572                 echo "Looks good..."
1573         fi
1574 else
1575         echo "There is no MANIFEST file.  I hope your kit is complete !"
1576 fi
1577 rm -f missing x??
1578
1579 echo " "
1580 : Find the appropriate value for a newline for tr
1581 if test -n "$DJGPP"; then
1582        trnl='\012'
1583 fi
1584 if test X"$trnl" = X; then
1585         case "`echo foo|tr '\n' x 2>/dev/null`" in
1586         foox) trnl='\n' ;;
1587         esac
1588 fi
1589 if test X"$trnl" = X; then
1590         case "`echo foo|tr '\012' x 2>/dev/null`" in
1591         foox) trnl='\012' ;;
1592         esac
1593 fi
1594 if test X"$trnl" = X; then
1595         cat <<EOM >&2
1596
1597 $me: Fatal Error: cannot figure out how to translate newlines with 'tr'.
1598
1599 EOM
1600         exit 1
1601 fi
1602
1603 : compute the number of columns on the terminal for proper question formatting
1604 case "$COLUMNS" in
1605 '') COLUMNS='80';;
1606 esac
1607
1608 : set up the echo used in my read
1609 myecho="case \"\$xxxm\" in
1610 '') echo $n \"\$rp $c\" >&4;;
1611 *) case \"\$rp\" in
1612         '') echo $n \"[\$xxxm] $c\";;
1613         *)
1614                 if test \`echo \"\$rp [\$xxxm]  \" | wc -c\` -ge $COLUMNS; then
1615                         echo \"\$rp\" >&4
1616                         echo $n \"[\$xxxm] $c\" >&4
1617                 else
1618                         echo $n \"\$rp [\$xxxm] $c\" >&4
1619                 fi
1620                 ;;
1621         esac;;
1622 esac"
1623
1624 : now set up to do reads with possible shell escape and default assignment
1625 cat <<EOSC >myread
1626 $startsh
1627 xxxm=\$dflt
1628 $myecho
1629 ans='!'
1630 case "\$fastread" in
1631 yes) case "\$dflt" in
1632         '') ;;
1633         *) ans='';
1634                 case "\$silent-\$rp" in
1635                 true-) ;;
1636                 *) echo " " >&4;;
1637                 esac;;
1638         esac;;
1639 *) case "\$silent" in
1640         true) case "\$rp" in
1641                 '') ans='';;
1642                 esac;;
1643         esac;;
1644 esac
1645 while expr "X\$ans" : "X!" >/dev/null; do
1646         read answ
1647         set x \$xxxm
1648         shift
1649         aok=''; eval "ans=\\"\$answ\\"" && aok=y
1650         case  "\$answ" in
1651         "!")
1652                 sh 1>&4
1653                 echo " "
1654                 $myecho
1655                 ;;
1656         !*)
1657                 set x \`expr "X\$ans" : "X!\(.*\)\$"\`
1658                 shift
1659                 sh 1>&4 -c "\$*"
1660                 echo " "
1661                 $myecho
1662                 ;;
1663         "\$ans")
1664                 case "\$ans" in
1665                 \\&*)
1666                         set x \`expr "X\$ans" : "X&\(.*\)\$"\`
1667                         shift
1668                         case "\$1" in
1669                         -d)
1670                                 fastread=yes
1671                                 echo "(OK, I'll run with -d after this question.)" >&4
1672                                 ;;
1673                         -*)
1674                                 echo "*** Sorry, \$1 not supported yet." >&4
1675                                 ;;
1676                         esac
1677                         $myecho
1678                         ans=!
1679                         ;;
1680                 esac;;
1681         *)
1682                 case "\$aok" in
1683                 y)
1684                         echo "*** Substitution done -- please confirm."
1685                         xxxm="\$ans"
1686                         ans=\`echo $n "\$ans$c" | tr '$trnl' ' '\`
1687                         xxxm="\$ans"
1688                         ans=!
1689                         ;;
1690                 *)
1691                         echo "*** Error -- try again."
1692                         ans=!
1693                         ;;
1694                 esac
1695                 $myecho
1696                 ;;
1697         esac
1698         case "\$ans\$xxxm\$nostick" in
1699         '')
1700                 ans=!
1701                 $myecho
1702                 ;;
1703         esac
1704 done
1705 case "\$ans" in
1706 '') ans="\$xxxm";;
1707 esac
1708 EOSC
1709
1710 : create .config dir to save info across Configure sessions
1711 test -d ../.config || mkdir ../.config
1712 cat >../.config/README <<EOF
1713 This directory created by Configure to save information that should
1714 persist across sessions for $package.
1715
1716 You may safely delete it if you wish.
1717 EOF
1718
1719 : general instructions
1720 needman=true
1721 firsttime=true
1722 user=`(logname) 2>/dev/null`
1723 case "$user" in
1724 '') user=`whoami 2>&1`;;
1725 esac
1726 if $contains "^$user\$" ../.config/instruct >/dev/null 2>&1; then
1727         firsttime=false
1728         echo " "
1729         rp='Would you like to see the instructions?'
1730         dflt=n
1731         . ./myread
1732         case "$ans" in
1733         [yY]*) ;;
1734         *) needman=false;;
1735         esac
1736 fi
1737 if $needman; then
1738         cat <<EOH
1739
1740 This installation shell script will examine your system and ask you questions
1741 to determine how the perl5 package should be installed. If you get
1742 stuck on a question, you may use a ! shell escape to start a subshell or
1743 execute a command.  Many of the questions will have default answers in square
1744 brackets; typing carriage return will give you the default.
1745
1746 On some of the questions which ask for file or directory names you are allowed
1747 to use the ~name construct to specify the login directory belonging to "name",
1748 even if you don't have a shell which knows about that.  Questions where this is
1749 allowed will be marked "(~name ok)".
1750
1751 EOH
1752         rp=''
1753         dflt='Type carriage return to continue'
1754         . ./myread
1755         cat <<'EOH'
1756
1757 The prompter used in this script allows you to use shell variables and
1758 backticks in your answers.  You may use $1, $2, etc...  to refer to the words
1759 in the default answer, as if the default line was a set of arguments given to a
1760 script shell.  This means you may also use $* to repeat the whole default line,
1761 so you do not have to re-type everything to add something to the default.
1762
1763 Everytime there is a substitution, you will have to confirm.  If there is an
1764 error (e.g. an unmatched backtick), the default answer will remain unchanged
1765 and you will be prompted again.
1766
1767 If you are in a hurry, you may run 'Configure -d'.  This will bypass nearly all
1768 the questions and use the computed defaults (or the previous answers if there
1769 was already a config.sh file). Type 'Configure -h' for a list of options.
1770 You may also start interactively and then answer '& -d' at any prompt to turn
1771 on the non-interactive behaviour for the remainder of the execution.
1772
1773 EOH
1774         . ./myread
1775         cat <<EOH
1776
1777 Much effort has been expended to ensure that this shell script will run on any
1778 Unix system.  If despite that it blows up on yours, your best bet is to edit
1779 Configure and run it again.  If you can't run Configure for some reason,
1780 you'll have to generate a config.sh file by hand.  Whatever problems you
1781 have, let me (perlbug@perl.com) know how I blew it.
1782
1783 This installation script affects things in two ways:
1784
1785 1) it may do direct variable substitutions on some of the files included
1786    in this kit.
1787 2) it builds a config.h file for inclusion in C programs.  You may edit
1788    any of these files as the need arises after running this script.
1789
1790 If you make a mistake on a question, there is no easy way to back up to it
1791 currently.  The easiest thing to do is to edit config.sh and rerun all the SH
1792 files.  Configure will offer to let you do this before it runs the SH files.
1793
1794 EOH
1795         dflt='Type carriage return to continue'
1796         . ./myread
1797         case "$firsttime" in
1798         true) echo $user >>../.config/instruct;;
1799         esac
1800 fi
1801
1802 : find out where common programs are
1803 echo " "
1804 echo "Locating common programs..." >&4
1805 cat <<EOSC >loc
1806 $startsh
1807 case \$# in
1808 0) exit 1;;
1809 esac
1810 thing=\$1
1811 shift
1812 dflt=\$1
1813 shift
1814 for dir in \$*; do
1815         case "\$thing" in
1816         .)
1817         if test -d \$dir/\$thing; then
1818                 echo \$dir
1819                 exit 0
1820         fi
1821         ;;
1822         *)
1823         for thisthing in \$dir/\$thing; do
1824                 : just loop through to pick last item
1825         done
1826         if test -f \$thisthing; then
1827                 echo \$thisthing
1828                 exit 0
1829         elif test -f \$dir/\$thing.exe; then
1830                 if test -n "$DJGPP"; then
1831                         echo \$dir/\$thing.exe
1832                 else
1833                         : on Eunice apparently
1834                         echo \$dir/\$thing
1835                 fi
1836                 exit 0
1837         fi
1838         ;;
1839         esac
1840 done
1841 echo \$dflt
1842 exit 1
1843 EOSC
1844 chmod +x loc
1845 $eunicefix loc
1846 loclist="
1847 awk
1848 cat
1849 comm
1850 cp
1851 echo
1852 expr
1853 grep
1854 ls
1855 make
1856 mkdir
1857 rm
1858 sed
1859 sort
1860 touch
1861 tr
1862 uniq
1863 "
1864 trylist="
1865 Mcc
1866 ar
1867 byacc
1868 cpp
1869 csh
1870 date
1871 egrep
1872 gzip
1873 less
1874 ln
1875 more
1876 nm
1877 nroff
1878 pg
1879 test
1880 uname
1881 zip
1882 "
1883 pth=`echo $PATH | sed -e "s/$p_/ /g"`
1884 pth="$pth /lib /usr/lib"
1885 for file in $loclist; do
1886         eval xxx=\$$file
1887         case "$xxx" in
1888         /*|?:[\\/]*)
1889                 if test -f "$xxx"; then
1890                         : ok
1891                 else
1892                         echo "WARNING: no $xxx -- ignoring your setting for $file." >&4
1893                         xxx=`./loc $file $file $pth`
1894                 fi
1895                 ;;
1896         '') xxx=`./loc $file $file $pth`;;
1897         *) xxx=`./loc $xxx $xxx $pth`;;
1898         esac
1899         eval $file=$xxx
1900         eval _$file=$xxx
1901         case "$xxx" in
1902         /*)
1903                 echo $file is in $xxx.
1904                 ;;
1905         ?:[\\/]*)
1906                 echo $file is in $xxx.
1907                 ;;
1908         *)
1909                 echo "I don't know where '$file' is, and my life depends on it." >&4
1910                 echo "Go find a public domain implementation or fix your PATH setting!" >&4
1911                 exit 1
1912                 ;;
1913         esac
1914 done
1915 echo " "
1916 echo "Don't worry if any of the following aren't found..."
1917 say=offhand
1918 for file in $trylist; do
1919         eval xxx=\$$file
1920         case "$xxx" in
1921         /*|?:[\\/]*)
1922                 if test -f "$xxx"; then
1923                         : ok
1924                 else
1925                         echo "WARNING: no $xxx -- ignoring your setting for $file." >&4
1926                         xxx=`./loc $file $file $pth`
1927                 fi
1928                 ;;
1929         '') xxx=`./loc $file $file $pth`;;
1930         *) xxx=`./loc $xxx $xxx $pth`;;
1931         esac
1932         eval $file=$xxx
1933         eval _$file=$xxx
1934         case "$xxx" in
1935         /*)
1936                 echo $file is in $xxx.
1937                 ;;
1938         ?:[\\/]*)
1939                 echo $file is in $xxx.
1940                 ;;
1941         *)
1942                 echo "I don't see $file out there, $say."
1943                 say=either
1944                 ;;
1945         esac
1946 done
1947 case "$egrep" in
1948 egrep)
1949         echo "Substituting grep for egrep."
1950         egrep=$grep
1951         ;;
1952 esac
1953 case "$ln" in
1954 ln)
1955         echo "Substituting cp for ln."
1956         ln=$cp
1957         ;;
1958 esac
1959 case "$test" in
1960 test)
1961         echo "Hopefully test is built into your sh."
1962         ;;
1963 *)
1964         if `sh -c "PATH= test true" >/dev/null 2>&1`; then
1965                 echo "Using the test built into your sh."
1966                 test=test
1967                 _test=test
1968         fi
1969         ;;
1970 esac
1971 case "$echo" in
1972 echo)
1973         echo "Hopefully echo is built into your sh."
1974         ;;
1975 '') ;;
1976 *)
1977         echo " "
1978 echo "Checking compatibility between $echo and builtin echo (if any)..." >&4
1979         $echo $n "hi there$c" >foo1
1980         echo $n "hi there$c" >foo2
1981         if cmp foo1 foo2 >/dev/null 2>&1; then
1982                 echo "They are compatible.  In fact, they may be identical."
1983         else
1984                 case "$n" in
1985                 '-n') n='' c='\c';;
1986                 *) n='-n' c='';;
1987                 esac
1988                 cat <<FOO
1989 They are not compatible!  You are probably running ksh on a non-USG system.
1990 I'll have to use $echo instead of the builtin, since Bourne shell doesn't
1991 have echo built in and we may have to run some Bourne shell scripts.  That
1992 means I'll have to use '$n$c' to suppress newlines now.  Life is ridiculous.
1993
1994 FOO
1995                 $echo $n "The star should be here-->$c"
1996                 $echo "*"
1997         fi
1998         $rm -f foo1 foo2
1999         ;;
2000 esac
2001
2002 : determine whether symbolic links are supported
2003 echo " "
2004 $touch blurfl
2005 if $ln -s blurfl sym > /dev/null 2>&1 ; then
2006         echo "Symbolic links are supported." >&4
2007         lns="$ln -s"
2008 else
2009         echo "Symbolic links are NOT supported." >&4
2010         lns="$ln"
2011 fi
2012 $rm -f blurfl sym
2013
2014 : see whether [:lower:] and [:upper:] are supported character classes
2015 echo " "
2016 case "`echo AbyZ | $tr '[:lower:]' '[:upper:]' 2>/dev/null`" in
2017 ABYZ)
2018         echo "Good, your tr supports [:lower:] and [:upper:] to convert case." >&4
2019         up='[:upper:]'
2020         low='[:lower:]'
2021         ;;
2022 *)      # There is a discontinuity in EBCDIC between 'I' and 'J'
2023         # (0xc9 and 0xd1), therefore that is a nice testing point.
2024         if test "X$up" = X -o "X$low" = X; then
2025             case "`echo IJ | $tr '[I-J]' '[i-j]' 2>/dev/null`" in
2026             ij) up='[A-Z]'
2027                 low='[a-z]'
2028                 ;;
2029             esac
2030         fi
2031         if test "X$up" = X -o "X$low" = X; then
2032             case "`echo IJ | $tr I-J i-j 2>/dev/null`" in
2033             ij) up='A-Z'
2034                 low='a-z'
2035                 ;;
2036             esac
2037         fi
2038         if test "X$up" = X -o "X$low" = X; then
2039             case "`echo IJ | od -x 2>/dev/null`" in
2040             *C9D1*|*c9d1*)
2041                 echo "Hey, this might be EBCDIC." >&4
2042                 if test "X$up" = X -o "X$low" = X; then
2043                     case "`echo IJ | $tr '[A-IJ-RS-Z]' '[a-ij-rs-z]' 2>/dev/null`" in
2044                     ij) up='[A-IJ-RS-Z]'
2045                         low='[a-ij-rs-z]'
2046                         ;;
2047                     esac
2048                 fi
2049                 if test "X$up" = X -o "X$low" = X; then
2050                     case "`echo IJ | $tr A-IJ-RS-Z a-ij-rs-z 2>/dev/null`" in
2051                     ij) up='A-IJ-RS-Z'
2052                         low='a-ij-rs-z'
2053                         ;;
2054                     esac
2055                 fi
2056                 ;;
2057             esac
2058         fi
2059 esac
2060 case "`echo IJ | $tr \"$up\" \"$low\" 2>/dev/null`" in
2061 ij)
2062     echo "Using $up and $low to convert case." >&4
2063     ;;
2064 *)
2065     echo "I don't know how to translate letters from upper to lower case." >&4
2066     echo "Your tr is not acting any way I know of." >&4
2067     exit 1
2068     ;;
2069 esac
2070 : set up the translation script tr, must be called with ./tr of course
2071 cat >tr <<EOSC
2072 $startsh
2073 case "\$1\$2" in
2074 '[A-Z][a-z]') exec $tr '$up' '$low';;
2075 '[a-z][A-Z]') exec $tr '$low' '$up';;
2076 esac
2077 exec $tr "\$@"
2078 EOSC
2079 chmod +x tr
2080 $eunicefix tr
2081
2082 : Try to determine whether config.sh was made on this system
2083 case "$config_sh" in
2084 '')
2085 myuname=`( ($uname -a) 2>/dev/null || hostname) 2>&1`
2086 # tr '[A-Z]' '[a-z]' would not work in EBCDIC
2087 # because the A-Z/a-z are not consecutive.
2088 myuname=`echo $myuname | $sed -e 's/^[^=]*=//' -e 's/\///g' | \
2089         ./tr '[A-Z]' '[a-z]' | $tr $trnl ' '`
2090 newmyuname="$myuname"
2091 dflt=n
2092 case "$knowitall" in
2093 '')
2094         if test -f ../config.sh; then
2095                 if $contains myuname= ../config.sh >/dev/null 2>&1; then
2096                         eval "`grep myuname= ../config.sh`"
2097                 fi
2098                 if test "X$myuname" = "X$newmyuname"; then
2099                         dflt=y
2100                 fi
2101         fi
2102         ;;
2103 *) dflt=y;;
2104 esac
2105
2106 : Get old answers from old config file if Configure was run on the
2107 : same system, otherwise use the hints.
2108 hint=default
2109 cd ..
2110 if test -f config.sh; then
2111         echo " "
2112         rp="I see a config.sh file.  Shall I use it to set the defaults?"
2113         . UU/myread
2114         case "$ans" in
2115         n*|N*) echo "OK, I'll ignore it."; mv config.sh config.sh.old;;
2116         *)  echo "Fetching default answers from your old config.sh file..." >&4
2117                 tmp_n="$n"
2118                 tmp_c="$c"
2119                 tmp_sh="$sh"
2120                 . ./config.sh
2121                 cp config.sh UU
2122                 n="$tmp_n"
2123                 c="$tmp_c"
2124                 : Older versions did not always set $sh.  Catch re-use of such
2125                 : an old config.sh.
2126                 case "$sh" in
2127                 '') sh="$tmp_sh" ;;
2128                 esac
2129                 hint=previous
2130                 ;;
2131         esac
2132 fi
2133 if test ! -f config.sh; then
2134         $cat <<EOM
2135
2136 First time through, eh?  I have some defaults handy for some systems
2137 that need some extra help getting the Configure answers right:
2138
2139 EOM
2140         (cd $src/hints; ls -C *.sh) | $sed 's/\.sh/   /g' >&4
2141         dflt=''
2142         : Half the following guesses are probably wrong... If you have better
2143         : tests or hints, please send them to perlbug@perl.com
2144         : The metaconfig authors would also appreciate a copy...
2145         $test -f /irix && osname=irix
2146         $test -f /xenix && osname=sco_xenix
2147         $test -f /dynix && osname=dynix
2148         $test -f /dnix && osname=dnix
2149         $test -f /lynx.os && osname=lynxos
2150         $test -f /unicos && osname=unicos && osvers=`$uname -r`
2151         $test -f /unicosmk.ar && osname=unicosmk && osvers=`$uname -r`
2152         $test -f /bin/mips && /bin/mips && osname=mips
2153         $test -d /NextApps && set X `hostinfo | grep 'NeXT Mach.*:' | \
2154                 $sed -e 's/://' -e 's/\./_/'` && osname=next && osvers=$4
2155         $test -d /usr/apollo/bin && osname=apollo
2156         $test -f /etc/saf/_sactab && osname=svr4
2157         $test -d /usr/include/minix && osname=minix
2158         if $test -d /MachTen -o -d /MachTen_Folder; then
2159                 osname=machten
2160                 if $test -x /sbin/version; then
2161                         osvers=`/sbin/version | $awk '{print $2}' |
2162                         $sed -e 's/[A-Za-z]$//'`
2163                 elif $test -x /usr/etc/version; then
2164                         osvers=`/usr/etc/version | $awk '{print $2}' |
2165                         $sed -e 's/[A-Za-z]$//'`
2166                 else
2167                         osvers="$2.$3"
2168                 fi
2169         fi
2170        $test -f /sys/posix.dll &&
2171                $test -f /usr/bin/what &&
2172                set X `/usr/bin/what /sys/posix.dll` &&
2173                $test "$3" = UWIN &&
2174                osname=uwin &&
2175                osvers="$5"
2176         if $test -f $uname; then
2177                 set X $myuname
2178                 shift
2179
2180                 case "$5" in
2181                 fps*) osname=fps ;;
2182                 mips*)
2183                         case "$4" in
2184                         umips) osname=umips ;;
2185                         *) osname=mips ;;
2186                         esac;;
2187                 [23]100) osname=mips ;;
2188                 next*) osname=next ;;
2189                 i386*)
2190                         tmp=`/bin/uname -X 2>/dev/null|awk '/3\.2v[45]/{ print $(NF) }'`
2191                         if $test "$tmp" != "" -a "$3" = "3.2" -a -f '/etc/systemid'; then
2192                                 osname='sco'
2193                                 osvers=$tmp
2194                         elif $test -f /etc/kconfig; then
2195                                 osname=isc
2196                                 if test "$lns" = "$ln -s"; then
2197                                         osvers=4
2198                                 elif $contains _SYSV3 /usr/include/stdio.h > /dev/null 2>&1 ; then
2199                                         osvers=3
2200                                 elif $contains _POSIX_SOURCE /usr/include/stdio.h > /dev/null 2>&1 ; then
2201                                         osvers=2
2202                                 fi
2203                         fi
2204                         tmp=''
2205                         ;;
2206                 pc*)
2207                         if test -n "$DJGPP"; then
2208                                 osname=dos
2209                                 osvers=djgpp
2210                         fi
2211                         ;;
2212                 esac
2213
2214                 case "$1" in
2215                 aix) osname=aix
2216                         tmp=`( (oslevel) 2>/dev/null || echo "not found") 2>&1`
2217                         case "$tmp" in
2218                         'not found') osvers="$4"."$3" ;;
2219                         '<3240'|'<>3240') osvers=3.2.0 ;;
2220                         '=3240'|'>3240'|'<3250'|'<>3250') osvers=3.2.4 ;;
2221                         '=3250'|'>3250') osvers=3.2.5 ;;
2222                         *) osvers=$tmp;;
2223                         esac
2224                         ;;
2225                 *dc.osx) osname=dcosx
2226                         osvers="$3"
2227                         ;;
2228                 dnix) osname=dnix
2229                         osvers="$3"
2230                         ;;
2231                 domainos) osname=apollo
2232                         osvers="$3"
2233                         ;;
2234                 dgux) osname=dgux 
2235                         osvers="$3"
2236                         ;;
2237                 dynixptx*) osname=dynixptx
2238                         osvers=`echo "$4"|sed 's/^v//'`
2239                         ;;
2240                 freebsd) osname=freebsd 
2241                         osvers="$3" ;;
2242                 genix) osname=genix ;;
2243                 hp*) osname=hpux 
2244                         osvers=`echo "$3" | $sed 's,.*\.\([0-9]*\.[0-9]*\),\1,'`
2245                         ;;
2246                 irix*) osname=irix
2247                         case "$3" in
2248                         4*) osvers=4 ;;
2249                         5*) osvers=5 ;;
2250                         *)      osvers="$3" ;;
2251                         esac
2252                         ;;
2253                 linux) osname=linux
2254                         case "$3" in
2255                         *)      osvers="$3" ;;
2256                         esac
2257                         ;;
2258                 MiNT) osname=mint
2259                         ;;
2260                 netbsd*) osname=netbsd
2261                         osvers="$3"
2262                         ;;
2263                 news-os) osvers="$3"
2264                         case "$3" in
2265                         4*) osname=newsos4 ;;
2266                         *) osname=newsos ;;
2267                         esac
2268                         ;;
2269                 bsd386) osname=bsd386
2270                         osvers=`$uname -r`
2271                         ;;
2272                 POSIX-BC | posix-bc ) osname=posix-bc
2273                         osvers="$3"
2274                         ;;
2275                 powerux | power_ux | powermax_os | powermaxos | \
2276                 powerunix | power_unix) osname=powerux
2277                         osvers="$3"
2278                         ;;
2279                 next*) osname=next ;;
2280                 solaris) osname=solaris
2281                         case "$3" in
2282                         5*) osvers=`echo $3 | $sed 's/^5/2/g'` ;;
2283                         *)      osvers="$3" ;;
2284                         esac
2285                         ;;
2286                 sunos) osname=sunos
2287                         case "$3" in
2288                         5*) osname=solaris
2289                                 osvers=`echo $3 | $sed 's/^5/2/g'` ;;
2290                         *)      osvers="$3" ;;
2291                         esac
2292                         ;;
2293                 titanos) osname=titanos
2294                         case "$3" in
2295                         1*) osvers=1 ;;
2296                         2*) osvers=2 ;;
2297                         3*) osvers=3 ;;
2298                         4*) osvers=4 ;;
2299                         *)      osvers="$3" ;;
2300                         esac
2301                         ;;
2302                 ultrix) osname=ultrix
2303                         osvers="$3"
2304                         ;;
2305                 osf1|mls+)      case "$5" in
2306                                 alpha)
2307                                         osname=dec_osf
2308                                         osvers=`echo "$3" | sed 's/^[xvt]//'`
2309                                         ;;
2310                         hp*)    osname=hp_osf1  ;;
2311                         mips)   osname=mips_osf1 ;;
2312                         esac
2313                         ;;
2314                 uts) osname=uts 
2315                         osvers="$3"
2316                         ;;
2317                 qnx) osname=qnx
2318                         osvers="$4"
2319                         ;;
2320                 $2) case "$osname" in
2321                         *isc*) ;;
2322                         *freebsd*) ;;
2323                         svr*)
2324                                 : svr4.x or possibly later
2325                                 case "svr$3" in 
2326                                 ${osname}*)
2327                                         osname=svr$3
2328                                         osvers=$4
2329                                         ;;
2330                                 esac
2331                                 case "$osname" in
2332                                 svr4.0)
2333                                         : Check for ESIX
2334                                         if test -f /stand/boot ; then
2335                                                 eval `grep '^INITPROG=[a-z/0-9]*$' /stand/boot`
2336                                                 if test -n "$INITPROG" -a -f "$INITPROG"; then
2337                         isesix=`strings -a $INITPROG|grep 'ESIX SYSTEM V/386 Release 4.0'`
2338                                                         if test -n "$isesix"; then
2339                                                                 osname=esix4
2340                                                         fi
2341                                                 fi
2342                                         fi
2343                                         ;;
2344                                 esac
2345                                 ;;
2346                         *)      if test -f /etc/systemid; then
2347                                         osname=sco
2348                                         set `echo $3 | $sed 's/\./ /g'` $4
2349                                         if $test -f $src/hints/sco_$1_$2_$3.sh; then
2350                                                 osvers=$1.$2.$3
2351                                         elif $test -f $src/hints/sco_$1_$2.sh; then
2352                                                 osvers=$1.$2
2353                                         elif $test -f $src/hints/sco_$1.sh; then
2354                                                 osvers=$1
2355                                         fi
2356                                 else
2357                                         case "$osname" in
2358                                         '') : Still unknown.  Probably a generic Sys V.
2359                                                 osname="sysv"
2360                                                 osvers="$3"
2361                                                 ;;
2362                                         esac
2363                                 fi
2364                                 ;;
2365                         esac
2366                         ;;
2367                 *)      case "$osname" in
2368                         '') : Still unknown.  Probably a generic BSD.
2369                                 osname="$1"
2370                                 osvers="$3"
2371                                 ;;
2372                         esac
2373                         ;;
2374                 esac
2375         else
2376                 if test -f /vmunix -a -f $src/hints/news_os.sh; then
2377                         (what /vmunix | UU/tr '[A-Z]' '[a-z]') > UU/kernel.what 2>&1
2378                         if $contains news-os UU/kernel.what >/dev/null 2>&1; then
2379                                 osname=news_os
2380                         fi
2381                         $rm -f UU/kernel.what
2382                 elif test -d c:/.; then
2383                         set X $myuname
2384                         osname=os2
2385                         osvers="$5"
2386                 fi
2387         fi
2388         
2389         : Now look for a hint file osname_osvers, unless one has been
2390         : specified already.
2391         case "$hintfile" in
2392         ''|' ')
2393                 file=`echo "${osname}_${osvers}" | $sed -e 's@\.@_@g' -e 's@_$@@'`
2394                 : Also try without trailing minor version numbers.
2395                 xfile=`echo $file | $sed -e 's@_[^_]*$@@'`
2396                 xxfile=`echo $xfile | $sed -e 's@_[^_]*$@@'`
2397                 xxxfile=`echo $xxfile | $sed -e 's@_[^_]*$@@'`
2398                 xxxxfile=`echo $xxxfile | $sed -e 's@_[^_]*$@@'`
2399                 case "$file" in
2400                 '') dflt=none ;;
2401                 *)  case "$osvers" in
2402                         '') dflt=$file
2403                                 ;;
2404                         *)  if $test -f $src/hints/$file.sh ; then
2405                                         dflt=$file
2406                                 elif $test -f $src/hints/$xfile.sh ; then
2407                                         dflt=$xfile
2408                                 elif $test -f $src/hints/$xxfile.sh ; then
2409                                         dflt=$xxfile
2410                                 elif $test -f $src/hints/$xxxfile.sh ; then
2411                                         dflt=$xxxfile
2412                                 elif $test -f $src/hints/$xxxxfile.sh ; then
2413                                         dflt=$xxxxfile
2414                                 elif $test -f "$src/hints/${osname}.sh" ; then
2415                                         dflt="${osname}"
2416                                 else
2417                                         dflt=none
2418                                 fi
2419                                 ;;
2420                         esac
2421                         ;;
2422                 esac
2423                 if $test -f Policy.sh ; then
2424                         case "$dflt" in
2425                         *Policy*) ;;
2426                         none) dflt="Policy" ;;
2427                         *) dflt="Policy $dflt" ;;
2428                         esac
2429                 fi
2430                 ;;
2431         *)
2432                 dflt=`echo $hintfile | $sed 's/\.sh$//'`
2433                 ;;
2434         esac
2435
2436         if $test -f Policy.sh ; then
2437                 $cat <<EOM
2438
2439 There's also a Policy hint file available, which should make the
2440 site-specific (policy) questions easier to answer.
2441 EOM
2442
2443         fi
2444
2445         $cat <<EOM
2446
2447 You may give one or more space-separated answers, or "none" if appropriate.
2448 A well-behaved OS will have no hints, so answering "none" or just "Policy"
2449 is a good thing.  DO NOT give a wrong version or a wrong OS.
2450
2451 EOM
2452
2453         rp="Which of these apply, if any?"
2454         . UU/myread
2455         tans=$ans
2456         for file in $tans; do
2457                 if $test X$file = XPolicy -a -f Policy.sh; then
2458                         . Policy.sh
2459                         $cat Policy.sh >> UU/config.sh
2460                 elif $test -f $src/hints/$file.sh; then
2461                         . $src/hints/$file.sh
2462                         $cat $src/hints/$file.sh >> UU/config.sh
2463                 elif $test X$tans = X -o X$tans = Xnone ; then
2464                         : nothing
2465                 else
2466                         : Give one chance to correct a possible typo.
2467                         echo "$file.sh does not exist"
2468                         dflt=$file
2469                         rp="hint to use instead?"
2470                         . UU/myread
2471                         for file in $ans; do
2472                                 if $test -f "$src/hints/$file.sh"; then
2473                                         . $src/hints/$file.sh
2474                                         $cat $src/hints/$file.sh >> UU/config.sh
2475                                 elif $test X$ans = X -o X$ans = Xnone ; then
2476                                         : nothing
2477                                 else
2478                                         echo "$file.sh does not exist -- ignored."
2479                                 fi
2480                         done
2481                 fi
2482         done
2483
2484         hint=recommended
2485         : Remember our hint file for later.
2486         if $test -f "$src/hints/$file.sh" ; then
2487                 hintfile="$file"
2488         else
2489                 hintfile=''
2490         fi
2491 fi
2492 cd UU
2493 ;;
2494 *)
2495         echo " "
2496         echo "Fetching default answers from $config_sh..." >&4
2497         tmp_n="$n"
2498         tmp_c="$c"
2499         cd ..
2500         cp $config_sh config.sh 2>/dev/null
2501         chmod +w config.sh
2502         . ./config.sh
2503         cd UU
2504         cp ../config.sh .
2505         n="$tmp_n"
2506         c="$tmp_c"
2507         hint=previous
2508         ;;
2509 esac
2510 test "$override" && . ./optdef.sh
2511 myuname="$newmyuname"
2512
2513 : Restore computed paths
2514 for file in $loclist $trylist; do
2515         eval $file="\$_$file"
2516 done
2517
2518 cat << EOM
2519
2520 Configure uses the operating system name and version to set some defaults.
2521 The default value is probably right if the name rings a bell. Otherwise,
2522 since spelling matters for me, either accept the default or answer "none"
2523 to leave it blank.
2524
2525 EOM
2526 case "$osname" in
2527         ''|' ')
2528                 case "$hintfile" in
2529                 ''|' '|none) dflt=none ;;
2530                 *)  dflt=`echo $hintfile | $sed -e 's/\.sh$//' -e 's/_.*$//'` ;;
2531                 esac
2532                 ;;
2533         *) dflt="$osname" ;;
2534 esac
2535 rp="Operating system name?"
2536 . ./myread
2537 case "$ans" in
2538 none)  osname='' ;;
2539 *) osname=`echo "$ans" | $sed -e 's/[   ][      ]*/_/g' | ./tr '[A-Z]' '[a-z]'`;;
2540 esac
2541 echo " "
2542 case "$osvers" in
2543         ''|' ')
2544                 case "$hintfile" in
2545                 ''|' '|none) dflt=none ;;
2546                 *)      dflt=`echo $hintfile | $sed -e 's/\.sh$//' -e 's/^[^_]*//'`
2547                         dflt=`echo $dflt | $sed -e 's/^_//' -e 's/_/./g'`
2548                         case "$dflt" in
2549                         ''|' ') dflt=none ;;
2550                         esac
2551                         ;;
2552                 esac
2553                 ;;
2554         *) dflt="$osvers" ;;
2555 esac
2556 rp="Operating system version?"
2557 . ./myread
2558 case "$ans" in
2559 none)  osvers='' ;;
2560 *) osvers="$ans" ;;
2561 esac
2562
2563
2564 . ./posthint.sh
2565
2566 : who configured the system
2567 cf_time=`LC_ALL=C; LANGUAGE=C; export LC_ALL; export LANGUAGE; $date 2>&1`
2568 cf_by=`(logname) 2>/dev/null`
2569 case "$cf_by" in
2570 "")
2571         cf_by=`(whoami) 2>/dev/null`
2572         case "$cf_by" in
2573         "") cf_by=unknown ;;
2574         esac ;;
2575 esac
2576
2577 : set up the script used to warn in case of inconsistency
2578 cat <<EOS >whoa
2579 $startsh
2580 EOS
2581 cat <<'EOSC' >>whoa
2582 dflt=y
2583 echo " "
2584 echo "*** WHOA THERE!!! ***" >&4
2585 echo "    The $hint value for \$$var on this machine was \"$was\"!" >&4
2586 rp="    Keep the $hint value?"
2587 . ./myread
2588 case "$ans" in
2589 y) td=$was; tu=$was;;
2590 esac
2591 EOSC
2592
2593 : function used to set $1 to $val
2594 setvar='var=$1; eval "was=\$$1"; td=$define; tu=$undef;
2595 case "$val$was" in
2596 $define$undef) . ./whoa; eval "$var=\$td";;
2597 $undef$define) . ./whoa; eval "$var=\$tu";;
2598 *) eval "$var=$val";;
2599 esac'
2600
2601 cat <<EOM
2602
2603 Perl can be built to take advantage of threads, on some systems.
2604 To do so, Configure must be run with -Dusethreads.
2605
2606 Note that threading is a highly experimental feature, and
2607 some known race conditions still remain.  If you choose to try
2608 it, be very sure to not actually deploy it for production
2609 purposes.  README.threads has more details, and is required
2610 reading if you enable threads.
2611 EOM
2612 case "$usethreads" in
2613 $define|true|[yY]*)     dflt='y';;
2614 *) dflt='n';;
2615 esac
2616 rp='Build a threading Perl?'
2617 . ./myread
2618 case "$ans" in
2619 y|Y)    val="$define" ;;     
2620 *)      val="$undef" ;;
2621 esac
2622 set usethreads
2623 eval $setvar 
2624
2625 case "$d_oldpthreads" in
2626 '')     : Configure tests would be welcome here.  For now, assume undef.
2627         val="$undef" ;;
2628 *)      val="$d_oldpthreads" ;;
2629 esac
2630 set d_oldpthreads
2631 eval $setvar
2632
2633
2634 case "$usethreads" in
2635 "$define"|true|[yY]*)
2636 : Look for a hint-file generated 'call-back-unit'.  If the
2637 : user has specified that a threading perl is to be built,
2638 : we may need to set or change some other defaults.
2639         if $test -f usethreads.cbu; then
2640                 echo "Your platform has some specific hints for threaded builds, using them..."
2641                 . ./usethreads.cbu
2642         else
2643                 $cat <<EOM
2644 (Your platform doesn't have any specific hints for threaded builds.
2645  Assuming POSIX threads, then.)
2646 EOM
2647         fi
2648     ;;
2649 esac
2650
2651 cat <<EOM
2652
2653 Perl can be built so that multiple Perl interpreters can coexist
2654 within the same Perl executable.  To do so, Configure must be run with
2655 -Dusemultiplicity.
2656
2657 Normally you do not need this and you should answer no.
2658
2659 EOM
2660 case "$usemultiplicity" in
2661 $define|true|[yY]*)     dflt='y';;
2662 *) dflt='n';;
2663 esac
2664 rp='Build Perl for multiplicity?'
2665 . ./myread
2666 case "$ans" in
2667 y|Y)    val="$define" ;;     
2668 *)      val="$undef" ;;
2669 esac
2670 set usemultiplicity
2671 eval $setvar 
2672
2673 : determine where manual pages are on this system
2674 echo " "
2675 case "$sysman" in
2676 '') 
2677         syspath='/usr/man/man1 /usr/man/mann /usr/man/manl /usr/man/local/man1'
2678         syspath="$syspath /usr/man/u_man/man1 /usr/share/man/man1"
2679         syspath="$syspath /usr/catman/u_man/man1 /usr/man/l_man/man1"
2680         syspath="$syspath /usr/local/man/u_man/man1 /usr/local/man/l_man/man1"
2681         syspath="$syspath /usr/man/man.L /local/man/man1 /usr/local/man/man1"
2682         sysman=`./loc . /usr/man/man1 $syspath`
2683         ;;
2684 esac
2685 if $test -d "$sysman"; then
2686         echo "System manual is in $sysman." >&4
2687 else
2688         echo "Could not find manual pages in source form." >&4
2689 fi
2690
2691 : see what memory models we can support
2692 case "$models" in
2693 '')
2694         $cat >pdp11.c <<'EOP'
2695 int main() {
2696 #ifdef pdp11
2697         exit(0);
2698 #else
2699         exit(1);
2700 #endif
2701 }
2702 EOP
2703         ( cc -o pdp11 pdp11.c ) >/dev/null 2>&1
2704         if $test -f pdp11 && ./pdp11 2>/dev/null; then
2705                 dflt='unsplit split'
2706         else
2707                 tans=`./loc . X /lib/small /lib/large /usr/lib/small /usr/lib/large /lib/medium /usr/lib/medium /lib/huge`
2708                 case "$tans" in
2709                 X) dflt='none';;
2710                 *) if $test -d /lib/small || $test -d /usr/lib/small; then
2711                                 dflt='small'
2712                         else
2713                                 dflt=''
2714                         fi
2715                         if $test -d /lib/medium || $test -d /usr/lib/medium; then
2716                                 dflt="$dflt medium"
2717                         fi
2718                         if $test -d /lib/large || $test -d /usr/lib/large; then
2719                                 dflt="$dflt large"
2720                         fi
2721                         if $test -d /lib/huge || $test -d /usr/lib/huge; then
2722                                 dflt="$dflt huge"
2723                         fi
2724                 esac
2725         fi;;
2726 *) dflt="$models";;
2727 esac
2728 $cat <<EOM
2729  
2730 Some systems have different model sizes.  On most systems they are called
2731 small, medium, large, and huge.  On the PDP11 they are called unsplit and
2732 split.  If your system doesn't support different memory models, say "none".
2733 If you wish to force everything to one memory model, say "none" here and
2734 put the appropriate flags later when it asks you for other cc and ld flags.
2735 Venix systems may wish to put "none" and let the compiler figure things out.
2736 (In the following question multiple model names should be space separated.)
2737
2738 The default for most systems is "none".
2739
2740 EOM
2741 rp="Which memory models are supported?"
2742 . ./myread
2743 models="$ans"
2744
2745 case "$models" in
2746 none)
2747         small=''
2748         medium=''
2749         large=''
2750         huge=''
2751         unsplit=''
2752         split=''
2753         ;;
2754 *split)
2755         case "$split" in
2756         '') if $contains '\-i' $sysman/ld.1 >/dev/null 2>&1 || \
2757                          $contains '\-i' $sysman/cc.1 >/dev/null 2>&1; then
2758                         dflt='-i'
2759                 else
2760                         dflt='none'
2761                 fi;;
2762         *) dflt="$split";;
2763         esac
2764         rp="What flag indicates separate I and D space?"
2765         . ./myread
2766         tans="$ans"
2767         case "$tans" in
2768         none) tans='';;
2769         esac
2770         split="$tans"
2771         unsplit='';;
2772 *large*|*small*|*medium*|*huge*)
2773         case "$models" in
2774         *large*)
2775                 case "$large" in
2776                 '') dflt='-Ml';;
2777                 *) dflt="$large";;
2778                 esac
2779         rp="What flag indicates large model?"
2780         . ./myread
2781         tans="$ans"
2782         case "$tans" in
2783         none) tans='';
2784         esac
2785         large="$tans";;
2786         *) large='';;
2787         esac
2788         case "$models" in
2789         *huge*) case "$huge" in
2790                 '') dflt='-Mh';;
2791                 *) dflt="$huge";;
2792                 esac
2793                 rp="What flag indicates huge model?"
2794                 . ./myread
2795                 tans="$ans"
2796                 case "$tans" in
2797                 none) tans='';
2798                 esac
2799                 huge="$tans";;
2800         *) huge="$large";;
2801         esac
2802         case "$models" in
2803         *medium*) case "$medium" in
2804                 '') dflt='-Mm';;
2805                 *) dflt="$medium";;
2806                 esac
2807                 rp="What flag indicates medium model?"
2808                 . ./myread
2809                 tans="$ans"
2810                 case "$tans" in
2811                 none) tans='';
2812                 esac
2813                 medium="$tans";;
2814         *) medium="$large";;
2815         esac
2816         case "$models" in
2817         *small*) case "$small" in
2818                 '') dflt='none';;
2819                 *) dflt="$small";;
2820                 esac
2821                 rp="What flag indicates small model?"
2822                 . ./myread
2823                 tans="$ans"
2824                 case "$tans" in
2825                 none) tans='';
2826                 esac
2827                 small="$tans";;
2828         *) small='';;
2829         esac
2830         ;;
2831 *)
2832         echo "Unrecognized memory models--you may have to edit Makefile.SH" >&4
2833         ;;
2834 esac
2835 $rm -f pdp11.* pdp11
2836
2837 : make some quick guesses about what we are up against
2838 echo " "
2839 $echo $n "Hmm...  $c"
2840 echo exit 1 >bsd
2841 echo exit 1 >usg
2842 echo exit 1 >v7
2843 echo exit 1 >osf1
2844 echo exit 1 >eunice
2845 echo exit 1 >xenix
2846 echo exit 1 >venix
2847 echo exit 1 >os2
2848 d_bsd="$undef"
2849 $cat /usr/include/signal.h /usr/include/sys/signal.h >foo 2>/dev/null
2850 if test -f /osf_boot || $contains 'OSF/1' /usr/include/ctype.h >/dev/null 2>&1
2851 then
2852         echo "Looks kind of like an OSF/1 system, but we'll see..."
2853         echo exit 0 >osf1
2854 elif test `echo abc | tr a-z A-Z` = Abc ; then
2855         xxx=`./loc addbib blurfl $pth`
2856         if $test -f $xxx; then
2857         echo "Looks kind of like a USG system with BSD features, but we'll see..."
2858                 echo exit 0 >bsd
2859                 echo exit 0 >usg
2860         else
2861                 if $contains SIGTSTP foo >/dev/null 2>&1 ; then
2862                         echo "Looks kind of like an extended USG system, but we'll see..."
2863                 else
2864                         echo "Looks kind of like a USG system, but we'll see..."
2865                 fi
2866                 echo exit 0 >usg
2867         fi
2868 elif $contains SIGTSTP foo >/dev/null 2>&1 ; then
2869         echo "Looks kind of like a BSD system, but we'll see..."
2870         d_bsd="$define"
2871         echo exit 0 >bsd
2872 else
2873         echo "Looks kind of like a Version 7 system, but we'll see..."
2874         echo exit 0 >v7
2875 fi
2876 case "$eunicefix" in
2877 *unixtovms*)
2878         $cat <<'EOI'
2879 There is, however, a strange, musty smell in the air that reminds me of
2880 something...hmm...yes...I've got it...there's a VMS nearby, or I'm a Blit.
2881 EOI
2882         echo exit 0 >eunice
2883         d_eunice="$define"
2884 : it so happens the Eunice I know will not run shell scripts in Unix format
2885         ;;
2886 *)
2887         echo " "
2888         echo "Congratulations.  You aren't running Eunice."
2889         d_eunice="$undef"
2890         ;;
2891 esac
2892 : Detect OS2.  The p_ variable is set above in the Head.U unit.
2893 case "$p_" in
2894 :) ;;
2895 *)
2896         $cat <<'EOI'
2897 I have the feeling something is not exactly right, however...don't tell me...
2898 lemme think...does HAL ring a bell?...no, of course, you're only running OS/2!
2899 EOI
2900         echo exit 0 >os2
2901         ;;
2902 esac
2903 if test -f /xenix; then
2904         echo "Actually, this looks more like a XENIX system..."
2905         echo exit 0 >xenix
2906         d_xenix="$define"
2907 else
2908         echo " "
2909         echo "It's not Xenix..."
2910         d_xenix="$undef"
2911 fi
2912 chmod +x xenix
2913 $eunicefix xenix
2914 if test -f /venix; then
2915         echo "Actually, this looks more like a VENIX system..."
2916         echo exit 0 >venix
2917 else
2918         echo " "
2919         if ./xenix; then
2920                 : null
2921         else
2922                 echo "Nor is it Venix..."
2923         fi
2924 fi
2925 chmod +x bsd usg v7 osf1 eunice xenix venix os2
2926 $eunicefix bsd usg v7 osf1 eunice xenix venix os2
2927 $rm -f foo
2928
2929 : see if we need a special compiler
2930 echo " "
2931 if ./usg; then
2932         case "$cc" in
2933         '') case "$Mcc" in
2934                 /*) dflt='Mcc';;
2935                 *) case "$large" in
2936                         -M*) dflt='cc';;
2937                         *)      if $contains '\-M' $sysman/cc.1 >/dev/null 2>&1 ; then
2938                                         if $contains '\-M' $sysman/cpp.1 >/dev/null 2>&1; then
2939                                                 dflt='cc'
2940                                         else
2941                                                 dflt='cc -M'
2942                                         fi
2943                                 else
2944                                         dflt='cc'
2945                                 fi;;
2946                         esac;;
2947                 esac;;
2948         *)  dflt="$cc";;
2949         esac
2950         case "$dflt" in
2951         *M*)    $cat <<'EOM'
2952 On some older systems the default C compiler will not resolve multiple global
2953 references that happen to have the same name.  On some such systems the "Mcc"
2954 command may be used to force these to be resolved.  On other systems a "cc -M"
2955 command is required.  (Note that the -M flag on other systems indicates a
2956 memory model to use!) If you have the Gnu C compiler, you might wish to use
2957 that instead.
2958
2959 EOM
2960         ;;
2961         esac
2962         rp="Use which C compiler?"
2963         . ./myread
2964         cc="$ans"
2965 else
2966         case "$cc" in
2967         '') dflt=cc;;
2968         *) dflt="$cc";;
2969         esac
2970         rp="Use which C compiler?"
2971         . ./myread
2972         cc="$ans"
2973 fi
2974 : Look for a hint-file generated 'call-back-unit'.  Now that the
2975 : user has specified the compiler, we may need to set or change some
2976 : other defaults.
2977 if $test -f cc.cbu; then
2978     . ./cc.cbu
2979 fi
2980 echo " "
2981 echo "Checking for GNU cc in disguise and/or its version number..." >&4
2982 $cat >gccvers.c <<EOM
2983 #include <stdio.h>
2984 int main() {
2985 #ifdef __GNUC__
2986 #ifdef __VERSION__
2987         printf("%s\n", __VERSION__);
2988 #else
2989         printf("%s\n", "1");
2990 #endif
2991 #endif
2992         exit(0);
2993 }
2994 EOM
2995 if $cc -o gccvers gccvers.c; then
2996         gccversion=`./gccvers`
2997         case "$gccversion" in
2998         '') echo "You are not using GNU cc." ;;
2999         *)  echo "You are using GNU cc $gccversion." ;;
3000         esac
3001 else
3002         echo " "
3003         echo "*** WHOA THERE!!! ***" >&4
3004         echo "    Your C compiler \"$cc\" doesn't seem to be working!" >&4
3005         case "$knowitall" in
3006         '')
3007         echo "    You'd better start hunting for one and let me know about it." >&4
3008                 exit 1
3009                 ;;
3010         esac
3011 fi
3012 $rm -f gccvers*
3013 case "$gccversion" in
3014 1*) cpp=`./loc gcc-cpp $cpp $pth` ;;
3015 esac
3016
3017 cat <<EOM
3018
3019 Perl can be built to take advantage of explicit 64-bit interfaces,
3020 on some systems.  To do so, Configure must be run with -Duse64bits.
3021
3022 If this doesn't make any sense to you, just accept the default 'n'.
3023 EOM
3024 case "$use64bits" in
3025 $define|true|[yY]*)     dflt='y';;
3026 *) dflt='n';;
3027 esac
3028 rp='Try to use explicit 64-bit interfaces, if available?'
3029 . ./myread
3030 case "$ans" in
3031 y|Y) 
3032         val="$define"
3033         ;;     
3034 *)      
3035         val="$undef"
3036         ;;
3037 esac
3038 set use64bits
3039 eval $setvar
3040
3041 case "$archname64" in
3042 '') archname64='' ;;    # not a typo
3043 esac
3044
3045 case "$use64bits" in
3046 "$define"|true|[yY]*)
3047 : Look for a hint-file generated 'call-back-unit'.  If the
3048 : user has specified that a 64 bit perl is to be built,
3049 : we may need to set or change some other defaults.
3050         if $test -f use64bits.cbu; then
3051                 echo "Your platform has some specific hints for 64-bit builds, using them..."
3052                 . ./use64bits.cbu
3053         else
3054                 $cat <<EOM
3055 (Your platform doesn't have any specific hints for 64-bit builds.
3056  This is probably okay, especially if your system is a true 64-bit system.)
3057 EOM
3058                 case "$gccversion" in
3059                 '')     ;;
3060                 *)      $cat <<EOM
3061 But since you seem to be using gcc,
3062 I will now add -DUSE_LONG_LONG to the compilation flags.
3063 EOM
3064                         ccflags="$ccflags -DUSE_LONG_LONG"
3065                         ;;
3066                 esac
3067         fi
3068         ;;
3069 esac
3070
3071 : determine the architecture name
3072 echo " "
3073 if xxx=`./loc arch blurfl $pth`; $test -f "$xxx"; then
3074         tarch=`arch`"-$osname"
3075 elif xxx=`./loc uname blurfl $pth`; $test -f "$xxx" ; then
3076         if uname -m > tmparch 2>&1 ; then
3077                 tarch=`$sed -e 's/ *$//' -e 's/ /_/g' \
3078                         -e 's/$/'"-$osname/" tmparch`
3079         else
3080                 tarch="$osname"
3081         fi
3082         $rm -f tmparch
3083 else
3084         tarch="$osname"
3085 fi
3086 case "$myarchname" in
3087 ''|"$tarch") ;;
3088 *)
3089         echo "(Your architecture name used to be $myarchname.)"
3090         archname=''
3091         ;;
3092 esac
3093 myarchname="$tarch"
3094 case "$archname" in
3095 '') dflt="$tarch";;
3096 *) dflt="$archname";;
3097 esac
3098 rp='What is your architecture name'
3099 . ./myread
3100 archname="$ans"
3101 case "$usethreads" in
3102 $define)
3103         echo "Threads selected." >&4
3104         case "$archname" in
3105         *-thread*) echo "...and architecture name already has -thread." >&4
3106                 ;;
3107         *)      archname="$archname-thread"
3108                 echo "...setting architecture name to $archname." >&4
3109                 ;;
3110         esac
3111         ;;
3112 esac
3113 case "$usemultiplicity" in
3114 $define)
3115         echo "Multiplicity selected." >&4
3116         case "$archname" in
3117         *-multi*) echo "...and architecture name already has -multi." >&4
3118                 ;;
3119         *)      archname="$archname-multi"
3120                 echo "...setting architecture name to $archname." >&4
3121                 ;;
3122         esac
3123         ;;
3124 esac
3125 case "$use64bits" in
3126 $define)
3127         echo "Explicit 64-bitness selected." >&4
3128         case "$archname64" in
3129         '')
3130                 ;;
3131         *)
3132                 case "$archname" in
3133                 *-$archname64*) echo "...and architecture name already has $archname64." >&4
3134                         ;;
3135                 *)      archname="$archname-$archname64"
3136                         echo "...setting architecture name to $archname." >&4
3137                         ;;
3138                 esac
3139                 ;;
3140         esac
3141 esac
3142
3143 : decide how portable to be.  Allow command line overrides.
3144 case "$d_portable" in
3145 "$undef") ;;
3146 *)      d_portable="$define" ;;
3147 esac
3148
3149 : set up shell script to do ~ expansion
3150 cat >filexp <<EOSS
3151 $startsh
3152 : expand filename
3153 case "\$1" in
3154  ~/*|~)
3155         echo \$1 | $sed "s|~|\${HOME-\$LOGDIR}|"
3156         ;;
3157  ~*)
3158         if $test -f /bin/csh; then
3159                 /bin/csh -f -c "glob \$1"
3160                 failed=\$?
3161                 echo ""
3162                 exit \$failed
3163         else
3164                 name=\`$expr x\$1 : '..\([^/]*\)'\`
3165                 dir=\`$sed -n -e "/^\${name}:/{s/^[^:]*:[^:]*:[^:]*:[^:]*:[^:]*:\([^:]*\).*"'\$'"/\1/" -e p -e q -e '}' </etc/passwd\`
3166                 if $test ! -d "\$dir"; then
3167                         me=\`basename \$0\`
3168                         echo "\$me: can't locate home directory for: \$name" >&2
3169                         exit 1
3170                 fi
3171                 case "\$1" in
3172                 */*)
3173                         echo \$dir/\`$expr x\$1 : '..[^/]*/\(.*\)'\`
3174                         ;;
3175                 *)
3176                         echo \$dir
3177                         ;;
3178                 esac
3179         fi
3180         ;;
3181 *)
3182         echo \$1
3183         ;;
3184 esac
3185 EOSS
3186 chmod +x filexp
3187 $eunicefix filexp
3188
3189 : now set up to get a file name
3190 cat <<EOS >getfile
3191 $startsh
3192 EOS
3193 cat <<'EOSC' >>getfile
3194 tilde=''
3195 fullpath=''
3196 already=''
3197 skip=''
3198 none_ok=''
3199 exp_file=''
3200 nopath_ok=''
3201 orig_rp="$rp"
3202 orig_dflt="$dflt"
3203 case "$gfpth" in
3204 '') gfpth='.' ;;
3205 esac
3206
3207 case "$fn" in
3208 *\(*)
3209         expr $fn : '.*(\(.*\)).*' | tr ',' $trnl >getfile.ok
3210         fn=`echo $fn | sed 's/(.*)//'`
3211         ;;
3212 esac
3213
3214 case "$fn" in
3215 *:*)
3216         loc_file=`expr $fn : '.*:\(.*\)'`
3217         fn=`expr $fn : '\(.*\):.*'`
3218         ;;
3219 esac
3220
3221 case "$fn" in
3222 *~*) tilde=true;;
3223 esac
3224 case "$fn" in
3225 */*) fullpath=true;;
3226 esac
3227 case "$fn" in
3228 *+*) skip=true;;
3229 esac
3230 case "$fn" in
3231 *n*) none_ok=true;;
3232 esac
3233 case "$fn" in
3234 *e*) exp_file=true;;
3235 esac
3236 case "$fn" in
3237 *p*) nopath_ok=true;;
3238 esac
3239
3240 case "$fn" in
3241 *f*) type='File';;
3242 *d*) type='Directory';;
3243 *l*) type='Locate';;
3244 esac
3245
3246 what="$type"
3247 case "$what" in
3248 Locate) what='File';;
3249 esac
3250
3251 case "$exp_file" in
3252 '')
3253         case "$d_portable" in
3254         "$define") ;;
3255         *) exp_file=true;;
3256         esac
3257         ;;
3258 esac
3259
3260 cd ..
3261 while test "$type"; do
3262         redo=''
3263         rp="$orig_rp"
3264         dflt="$orig_dflt"
3265         case "$tilde" in
3266         true) rp="$rp (~name ok)";;
3267         esac
3268         . UU/myread
3269         if test -f UU/getfile.ok && \
3270                 $contains "^$ans\$" UU/getfile.ok >/dev/null 2>&1
3271         then
3272                 value="$ans"
3273                 ansexp="$ans"
3274                 break
3275         fi
3276         case "$ans" in
3277         none)
3278                 value=''
3279                 ansexp=''
3280                 case "$none_ok" in
3281                 true) type='';;
3282                 esac
3283                 ;;
3284         *)
3285                 case "$tilde" in
3286                 '') value="$ans"
3287                         ansexp="$ans";;
3288                 *)
3289                         value=`UU/filexp $ans`
3290                         case $? in
3291                         0)
3292                                 if test "$ans" != "$value"; then
3293                                         echo "(That expands to $value on this system.)"
3294                                 fi
3295                                 ;;
3296                         *) value="$ans";;
3297                         esac
3298                         ansexp="$value"
3299                         case "$exp_file" in
3300                         '') value="$ans";;
3301                         esac
3302                         ;;
3303                 esac
3304                 case "$fullpath" in
3305                 true)
3306                         case "$ansexp" in
3307                         /*) value="$ansexp" ;;
3308                         *)
3309                                 redo=true
3310                                 case "$already" in
3311                                 true)
3312                                 echo "I shall only accept a full path name, as in /bin/ls." >&4
3313                                 echo "Use a ! shell escape if you wish to check pathnames." >&4
3314                                         ;;
3315                                 *)
3316                                 echo "Please give a full path name, starting with slash." >&4
3317                                         case "$tilde" in
3318                                         true)
3319                                 echo "Note that using ~name is ok provided it expands well." >&4
3320                                                 already=true
3321                                                 ;;
3322                                         esac
3323                                 esac
3324                                 ;;
3325                         esac
3326                         ;;
3327                 esac
3328                 case "$redo" in
3329                 '')
3330                         case "$type" in
3331                         File)
3332                                 for fp in $gfpth; do
3333                                         if test "X$fp" = X.; then
3334                                             pf="$ansexp"
3335                                         else    
3336                                             pf="$fp/$ansexp"
3337                                         fi
3338                                         if test -f "$pf"; then
3339                                                 type=''
3340                                         elif test -r "$pf" || (test -h "$pf") >/dev/null 2>&1
3341                                         then
3342                                                 echo "($value is not a plain file, but that's ok.)"
3343                                                 type=''
3344                                         fi
3345                                         if test X"$type" = X; then
3346                                             value="$pf"
3347                                             break
3348                                         fi
3349                                 done
3350                                 ;;
3351                         Directory)
3352                                 for fp in $gfpth; do
3353                                         if test "X$fp" = X.; then
3354                                             pf="$ansexp"
3355                                         else    
3356                                             pf="$fp/$ansexp"
3357                                         fi
3358                                         if test -d "$pf"; then
3359                                                 type=''
3360                                                 value="$pf"
3361                                                 break
3362                                         fi
3363                                 done
3364                                 ;;
3365                         Locate)
3366                                 if test -d "$ansexp"; then
3367                                         echo "(Looking for $loc_file in directory $value.)"
3368                                         value="$value/$loc_file"
3369                                         ansexp="$ansexp/$loc_file"
3370                                 fi
3371                                 if test -f "$ansexp"; then
3372                                         type=''
3373                                 fi
3374                                 case "$nopath_ok" in
3375                                 true)   case "$value" in
3376                                         */*) ;;
3377                                         *)      echo "Assuming $value will be in people's path."
3378                                                 type=''
3379                                                 ;;
3380                                         esac
3381                                         ;;
3382                                 esac
3383                                 ;;
3384                         esac
3385
3386                         case "$skip" in
3387                         true) type='';
3388                         esac
3389
3390                         case "$type" in
3391                         '') ;;
3392                         *)
3393                                 if test "$fastread" = yes; then
3394                                         dflt=y
3395                                 else
3396                                         dflt=n
3397                                 fi
3398                                 rp="$what $value doesn't exist.  Use that name anyway?"
3399                                 . UU/myread
3400                                 dflt=''
3401                                 case "$ans" in
3402                                 y*) type='';;
3403                                 *) echo " ";;
3404                                 esac
3405                                 ;;
3406                         esac
3407                         ;;
3408                 esac
3409                 ;;
3410         esac
3411 done
3412 cd UU
3413 ans="$value"
3414 rp="$orig_rp"
3415 dflt="$orig_dflt"
3416 rm -f getfile.ok
3417 test "X$gfpthkeep" != Xy && gfpth=""
3418 EOSC
3419
3420 : determine root of directory hierarchy where package will be installed.
3421 case "$prefix" in
3422 '')
3423         dflt=`./loc . /usr/local /usr/local /local /opt /usr`
3424         ;;
3425 *)
3426         dflt="$prefix"
3427         ;;
3428 esac
3429 $cat <<EOM
3430
3431 By default, $package will be installed in $dflt/bin, manual pages
3432 under $dflt/man, etc..., i.e. with $dflt as prefix for all
3433 installation directories. Typically this is something like /usr/local.
3434 If you wish to have binaries under /usr/bin but other parts of the
3435 installation under /usr/local, that's ok: you will be prompted
3436 separately for each of the installation directories, the prefix being
3437 only used to set the defaults.
3438
3439 EOM
3440 fn=d~
3441 rp='Installation prefix to use?'
3442 . ./getfile
3443 oldprefix=''
3444 case "$prefix" in
3445 '') ;;
3446 *)
3447         case "$ans" in
3448         "$prefix") ;;
3449         *) oldprefix="$prefix";;
3450         esac
3451         ;;
3452 esac
3453 prefix="$ans"
3454 prefixexp="$ansexp"
3455
3456 : is AFS running?
3457 echo " "
3458 case "$afs" in
3459 $define|true)   afs=true ;;
3460 $undef|false)   afs=false ;;
3461 *)      if test -d /afs; then
3462                 afs=true
3463         else
3464                 afs=false
3465         fi
3466         ;;
3467 esac
3468 if $afs; then
3469         echo "AFS may be running... I'll be extra cautious then..." >&4
3470 else
3471         echo "AFS does not seem to be running..." >&4
3472 fi
3473
3474 : determine installation prefix for where package is to be installed.
3475 if $afs; then 
3476 $cat <<EOM
3477
3478 Since you are running AFS, I need to distinguish the directory in which
3479 files will reside from the directory in which they are installed (and from
3480 which they are presumably copied to the former directory by occult means).
3481
3482 EOM
3483         case "$installprefix" in
3484         '') dflt=`echo $prefix | sed 's#^/afs/#/afs/.#'`;;
3485         *) dflt="$installprefix";;
3486         esac
3487 else
3488 $cat <<EOM
3489
3490 In some special cases, particularly when building $package for distribution,
3491 it is convenient to distinguish between the directory in which files should 
3492 be installed from the directory ($prefix) in which they 
3493 will eventually reside.  For most users, these two directories are the same.
3494
3495 EOM
3496         case "$installprefix" in
3497         '') dflt=$prefix ;;
3498         *) dflt=$installprefix;;
3499         esac
3500 fi
3501 fn=d~
3502 rp='What installation prefix should I use for installing files?'
3503 . ./getfile
3504 installprefix="$ans"
3505 installprefixexp="$ansexp"
3506
3507 : set the prefixit variable, to compute a suitable default value
3508 prefixit='case "$3" in
3509 ""|none)
3510         case "$oldprefix" in
3511         "") eval "$1=\"\$$2\"";;
3512         *)
3513                 case "$3" in
3514                 "") eval "$1=";;
3515                 none)
3516                         eval "tp=\"\$$2\"";
3517                         case "$tp" in
3518                         ""|" ") eval "$1=\"\$$2\"";;
3519                         *) eval "$1=";;
3520                         esac;;
3521                 esac;;
3522         esac;;
3523 *)
3524         eval "tp=\"$oldprefix-\$$2-\""; eval "tp=\"$tp\"";
3525         case "$tp" in
3526         --|/*--|\~*--) eval "$1=\"$prefix/$3\"";;
3527         /*-$oldprefix/*|\~*-$oldprefix/*)
3528                 eval "$1=\`echo \$$2 | sed \"s,^$oldprefix,$prefix,\"\`";;
3529         *) eval "$1=\"\$$2\"";;
3530         esac;;
3531 esac'
3532
3533 : set the base revision
3534 baserev=5.0
3535
3536 : get the patchlevel
3537 echo " "
3538 echo "Getting the current patchlevel..." >&4
3539 if $test -r $rsrc/patchlevel.h;then
3540         patchlevel=`awk '/define[       ]+PERL_VERSION/ {print $3}' $rsrc/patchlevel.h`
3541         subversion=`awk '/define[       ]+PERL_SUBVERSION/ {print $3}' $rsrc/patchlevel.h`
3542 else
3543         patchlevel=0
3544         subversion=0
3545 fi
3546 $echo $n "(You have $package" $c
3547 case "$package" in
3548 "*$baserev")    ;;
3549 *)              $echo $n " $baserev" $c ;;
3550 esac
3551 $echo $n " patchlevel $patchlevel" $c
3552 test 0 -eq "$subversion" || $echo $n " subversion $subversion" $c
3553 echo ".)"
3554
3555 if test 0 -eq "$subversion"; then
3556         version=`LC_ALL=C; export LC_ALL; \
3557                  echo $baserev $patchlevel | \
3558                  $awk '{ printf "%.3f\n", $1 + $2/1000.0 }'`
3559 else
3560         version=`LC_ALL=C; export LC_ALL; \
3561                  echo $baserev $patchlevel $subversion | \
3562                  $awk '{ printf "%.5f\n", $1 + $2/1000.0 + $3/100000.0 }'`
3563 fi
3564 : Figure out perl API version.  Perhaps this should be in patchlevel.h
3565 if test "$subversion" -lt 50; then
3566         apiversion=`LC_ALL=C; export LC_ALL; \
3567                  LANGUAGE=C; export LANGUAGE; \
3568                  echo $baserev $patchlevel | \
3569                  $awk '{ printf "%.3f\n", $1 + $2/1000.0 }'`
3570 else
3571         apiversion="$version"
3572 fi
3573
3574 : determine installation style
3575 : For now, try to deduce it from prefix unless it is already set.
3576 : Reproduce behavior of 5.005 and earlier, maybe drop that in 5.7.
3577 case "$installstyle" in
3578 '')     case "$prefix" in
3579                 *perl*) dflt='lib';;
3580                 *) dflt='lib/perl5' ;;
3581         esac
3582         ;;
3583 *)      dflt='lib/perl5' ;;
3584 esac
3585 : Probably not worth prompting for this since we prompt for all
3586 : the directories individually, and the prompt would be too long and
3587 : confusing anyway.
3588 installstyle=$dflt
3589
3590 : determine where private library files go
3591 : Usual default is /usr/local/lib/perl5/$version.
3592 : Also allow things like /opt/perl/lib/$version, since 
3593 : /opt/perl/lib/perl5... would be redundant.
3594 : The default "style" setting is made in installstyle.U
3595 case "$installstyle" in
3596 *lib/perl5*) set dflt privlib lib/$package/$version ;;
3597 *)       set dflt privlib lib/$version ;;
3598 esac
3599 eval $prefixit
3600 $cat <<EOM
3601
3602 There are some auxiliary files for $package that need to be put into a
3603 private library directory that is accessible by everyone.
3604
3605 EOM
3606 fn=d~+
3607 rp='Pathname where the private library files will reside?'
3608 . ./getfile
3609 privlib="$ans"
3610 privlibexp="$ansexp"
3611 : Change installation prefix, if necessary.
3612 if $test X"$prefix" != X"$installprefix"; then
3613         installprivlib=`echo $privlibexp | sed "s#^$prefix#$installprefix#"`
3614 else
3615         installprivlib="$privlibexp"
3616 fi
3617
3618 : set the prefixup variable, to restore leading tilda escape
3619 prefixup='case "$prefixexp" in
3620 "$prefix") ;;
3621 *) eval "$1=\`echo \$$1 | sed \"s,^$prefixexp,$prefix,\"\`";;
3622 esac'
3623
3624 : determine where public architecture dependent libraries go
3625 set archlib archlib
3626 eval $prefixit
3627 : privlib default is /usr/local/lib/$package/$version
3628 : archlib default is /usr/local/lib/$package/$version/$archname
3629 : privlib may have an optional trailing /share.
3630 tdflt=`echo $privlib | $sed 's,/share$,,'`
3631 tdflt=$tdflt/$archname
3632 case "$archlib" in
3633 '')     dflt=$tdflt
3634         ;;
3635 *)      dflt="$archlib"
3636     ;;
3637 esac
3638 $cat <<EOM
3639
3640 $spackage contains architecture-dependent library files.  If you are
3641 sharing libraries in a heterogeneous environment, you might store
3642 these files in a separate location.  Otherwise, you can just include
3643 them with the rest of the public library files.
3644
3645 EOM
3646 fn=d+~
3647 rp='Where do you want to put the public architecture-dependent libraries?'
3648 . ./getfile
3649 archlib="$ans"
3650 archlibexp="$ansexp"
3651 if $test X"$archlib" = X"$privlib"; then
3652         d_archlib="$undef"
3653 else
3654         d_archlib="$define"
3655 fi
3656 : Change installation prefix, if necessary.
3657 if $test X"$prefix" != X"$installprefix"; then
3658         installarchlib=`echo $archlibexp | sed "s#^$prefix#$installprefix#"`
3659 else
3660         installarchlib="$archlibexp"
3661 fi
3662
3663
3664 : Binary compatibility with 5.005 is not possible for builds
3665 : with advanced features
3666 case "$usethreads$usemultiplicity" in
3667 *define*)
3668         bincompat5005="$undef"
3669         d_bincompat5005="$undef"
3670         ;;
3671 *)      $cat <<EOM
3672
3673 Perl 5.006 can be compiled for binary compatibility with 5.005.
3674 If you decide to do so, you will be able to continue using most
3675 of the extensions that were compiled for Perl 5.005.
3676
3677 EOM
3678         case "$bincompat5005$d_bincompat5005" in
3679         *"$undef"*) dflt=n ;;
3680         *) dflt=y ;;
3681         esac
3682         rp='Binary compatibility with Perl 5.005?'
3683         . ./myread
3684         case "$ans" in
3685         y*) val="$define" ;;
3686         *)  val="$undef" ;;
3687         esac
3688         set d_bincompat5005
3689         eval $setvar
3690         case "$d_bincompat5005" in
3691         "$define")
3692                 bincompat5005="$define"
3693                 ;;
3694         *)      bincompat5005="$undef"
3695                 d_bincompat5005="$undef"
3696                 ;;
3697         esac
3698         ;;
3699 esac
3700
3701
3702 : see if setuid scripts can be secure
3703 $cat <<EOM
3704
3705 Some kernels have a bug that prevents setuid #! scripts from being
3706 secure.  Some sites have disabled setuid #! scripts because of this.
3707
3708 First let's decide if your kernel supports secure setuid #! scripts.
3709 (If setuid #! scripts would be secure but have been disabled anyway,
3710 don't say that they are secure if asked.)
3711
3712 EOM
3713
3714 val="$undef"
3715 if $test -d /dev/fd; then
3716         echo "#!$ls" >reflect
3717         chmod +x,u+s reflect
3718         ./reflect >flect 2>&1
3719         if $contains "/dev/fd" flect >/dev/null; then
3720                 echo "Congratulations, your kernel has secure setuid scripts!" >&4
3721                 val="$define"
3722         else
3723                 $cat <<EOM
3724 If you are not sure if they are secure, I can check but I'll need a
3725 username and password different from the one you are using right now.
3726 If you don't have such a username or don't want me to test, simply
3727 enter 'none'.
3728
3729 EOM
3730                 rp='Other username to test security of setuid scripts with?'
3731                 dflt='none'
3732                 . ./myread
3733                 case "$ans" in
3734                 n|none)
3735                         case "$d_suidsafe" in
3736                         '')     echo "I'll assume setuid scripts are *not* secure." >&4
3737                                 dflt=n;;
3738                         "$undef")
3739                                 echo "Well, the $hint value is *not* secure." >&4
3740                                 dflt=n;;
3741                         *)      echo "Well, the $hint value *is* secure." >&4
3742                                 dflt=y;;
3743                         esac
3744                         ;;
3745                 *)
3746                         $rm -f reflect flect
3747                         echo "#!$ls" >reflect
3748                         chmod +x,u+s reflect
3749                         echo >flect
3750                         chmod a+w flect
3751                         echo '"su" will (probably) prompt you for '"$ans's password."
3752                         su $ans -c './reflect >flect'
3753                         if $contains "/dev/fd" flect >/dev/null; then
3754                                 echo "Okay, it looks like setuid scripts are secure." >&4
3755                                 dflt=y
3756                         else
3757                                 echo "I don't think setuid scripts are secure." >&4
3758                                 dflt=n
3759                         fi
3760                         ;;
3761                 esac
3762                 rp='Does your kernel have *secure* setuid scripts?'
3763                 . ./myread
3764                 case "$ans" in
3765                 [yY]*)  val="$define";;
3766                 *)      val="$undef";;
3767                 esac
3768         fi
3769 else
3770         echo "I don't think setuid scripts are secure (no /dev/fd directory)." >&4
3771         echo "(That's for file descriptors, not floppy disks.)"
3772         val="$undef"
3773 fi
3774 set d_suidsafe
3775 eval $setvar
3776
3777 $rm -f reflect flect
3778
3779 : now see if they want to do setuid emulation
3780 echo " "
3781 val="$undef"
3782 case "$d_suidsafe" in
3783 "$define")
3784         val="$undef"
3785         echo "No need to emulate SUID scripts since they are secure here." >& 4
3786         ;;
3787 *)
3788         $cat <<EOM
3789 Some systems have disabled setuid scripts, especially systems where
3790 setuid scripts cannot be secure.  On systems where setuid scripts have
3791 been disabled, the setuid/setgid bits on scripts are currently
3792 useless.  It is possible for $package to detect those bits and emulate
3793 setuid/setgid in a secure fashion.  This emulation will only work if
3794 setuid scripts have been disabled in your kernel.
3795
3796 EOM
3797         case "$d_dosuid" in
3798         "$define") dflt=y ;;
3799         *) dflt=n ;;
3800         esac
3801         rp="Do you want to do setuid/setgid emulation?"
3802         . ./myread
3803         case "$ans" in
3804         [yY]*)  val="$define";;
3805         *)      val="$undef";;
3806         esac
3807         ;;
3808 esac
3809 set d_dosuid
3810 eval $setvar
3811
3812 : What should the include directory be ?
3813 echo " "
3814 $echo $n "Hmm...  $c"
3815 dflt='/usr/include'
3816 incpath=''
3817 mips_type=''
3818 if $test -f /bin/mips && /bin/mips; then
3819         echo "Looks like a MIPS system..."
3820         $cat >usr.c <<'EOCP'
3821 #ifdef SYSTYPE_BSD43
3822 /bsd43
3823 #endif
3824 EOCP
3825         if $cc -E usr.c > usr.out && $contains / usr.out >/dev/null 2>&1; then
3826                 dflt='/bsd43/usr/include'
3827                 incpath='/bsd43'
3828                 mips_type='BSD 4.3'
3829         else
3830                 mips_type='System V'
3831         fi
3832         $rm -f usr.c usr.out
3833         echo "and you're compiling with the $mips_type compiler and libraries."
3834         xxx_prompt=y
3835         echo "exit 0" >mips
3836 else
3837         echo "Doesn't look like a MIPS system."
3838         xxx_prompt=n
3839         echo "exit 1" >mips
3840 fi
3841 chmod +x mips
3842 $eunicefix mips
3843 case "$usrinc" in
3844 '') ;;
3845 *) dflt="$usrinc";;
3846 esac
3847 case "$xxx_prompt" in
3848 y)      fn=d/
3849         echo " "
3850         rp='Where are the include files you want to use?'
3851         . ./getfile
3852         usrinc="$ans"
3853         ;;
3854 *)      usrinc="$dflt"
3855         ;;
3856 esac
3857
3858 : see how we invoke the C preprocessor
3859 echo " "
3860 echo "Now, how can we feed standard input to your C preprocessor..." >&4
3861 cat <<'EOT' >testcpp.c
3862 #define ABC abc
3863 #define XYZ xyz
3864 ABC.XYZ
3865 EOT
3866 cd ..
3867 if test ! -f cppstdin; then
3868         if test "X$osname" = "Xaix" -a "X$gccversion" = X; then
3869                 # AIX cc -E doesn't show the absolute headerfile
3870                 # locations but we'll cheat by using the -M flag.
3871                 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
3872         else
3873                 echo 'cat >.$$.c; '"$cc"' -E ${1+"$@"} .$$.c; rm .$$.c' >cppstdin
3874         fi
3875 else
3876         echo "Keeping your $hint cppstdin wrapper."
3877 fi
3878 chmod 755 cppstdin
3879 wrapper=`pwd`/cppstdin
3880 ok='false'
3881 cd UU
3882
3883 if $test "X$cppstdin" != "X" && \
3884         $cppstdin $cppminus <testcpp.c >testcpp.out 2>&1 && \
3885         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1
3886 then
3887         echo "You used to use $cppstdin $cppminus so we'll use that again."
3888         case "$cpprun" in
3889         '') echo "But let's see if we can live without a wrapper..." ;;
3890         *)
3891                 if $cpprun $cpplast <testcpp.c >testcpp.out 2>&1 && \
3892                         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1
3893                 then
3894                         echo "(And we'll use $cpprun $cpplast to preprocess directly.)"
3895                         ok='true'
3896                 else
3897                         echo "(However, $cpprun $cpplast does not work, let's see...)"
3898                 fi
3899                 ;;
3900         esac
3901 else
3902         case "$cppstdin" in
3903         '') ;;
3904         *)
3905                 echo "Good old $cppstdin $cppminus does not seem to be of any help..."
3906                 ;;
3907         esac
3908 fi
3909
3910 if $ok; then
3911         : nothing
3912 elif echo 'Maybe "'"$cc"' -E" will work...'; \
3913         $cc -E <testcpp.c >testcpp.out 2>&1; \
3914         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3915         echo "Yup, it does."
3916         x_cpp="$cc -E"
3917         x_minus='';
3918 elif echo 'Nope...maybe "'"$cc"' -E -" will work...'; \
3919         $cc -E - <testcpp.c >testcpp.out 2>&1; \
3920         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3921         echo "Yup, it does."
3922         x_cpp="$cc -E"
3923         x_minus='-';
3924 elif echo 'Nope...maybe "'"$cc"' -P" will work...'; \
3925         $cc -P <testcpp.c >testcpp.out 2>&1; \
3926         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3927         echo "Yipee, that works!"
3928         x_cpp="$cc -P"
3929         x_minus='';
3930 elif echo 'Nope...maybe "'"$cc"' -P -" will work...'; \
3931         $cc -P - <testcpp.c >testcpp.out 2>&1; \
3932         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3933         echo "At long last!"
3934         x_cpp="$cc -P"
3935         x_minus='-';
3936 elif echo 'No such luck, maybe "'$cpp'" will work...'; \
3937         $cpp <testcpp.c >testcpp.out 2>&1; \
3938         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3939         echo "It works!"
3940         x_cpp="$cpp"
3941         x_minus='';
3942 elif echo 'Nixed again...maybe "'$cpp' -" will work...'; \
3943         $cpp - <testcpp.c >testcpp.out 2>&1; \
3944         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3945         echo "Hooray, it works!  I was beginning to wonder."
3946         x_cpp="$cpp"
3947         x_minus='-';
3948 elif echo 'Uh-uh.  Time to get fancy.  Trying a wrapper...'; \
3949         $wrapper <testcpp.c >testcpp.out 2>&1; \
3950         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3951         x_cpp="$wrapper"
3952         x_minus=''
3953         echo "Eureka!"
3954 else
3955         dflt=''
3956         rp="No dice.  I can't find a C preprocessor.  Name one:"
3957         . ./myread
3958         x_cpp="$ans"
3959         x_minus=''
3960         $x_cpp <testcpp.c >testcpp.out 2>&1
3961         if $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3962                 echo "OK, that will do." >&4
3963         else
3964 echo "Sorry, I can't get that to work.  Go find one and rerun Configure." >&4
3965                 exit 1
3966         fi
3967 fi
3968
3969 case "$ok" in
3970 false)
3971         cppstdin="$x_cpp"
3972         cppminus="$x_minus"
3973         cpprun="$x_cpp"
3974         cpplast="$x_minus"
3975         set X $x_cpp
3976         shift
3977         case "$1" in
3978         "$cpp")
3979                 echo "Perhaps can we force $cc -E using a wrapper..."
3980                 if $wrapper <testcpp.c >testcpp.out 2>&1; \
3981                         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1
3982                 then
3983                         echo "Yup, we can."
3984                         cppstdin="$wrapper"
3985                         cppminus='';
3986                 else
3987                         echo "Nope, we'll have to live without it..."
3988                 fi
3989                 ;;
3990         esac
3991         case "$cpprun" in
3992         "$wrapper")
3993                 cpprun=''
3994                 cpplast=''
3995                 ;;
3996         esac
3997         ;;
3998 esac
3999
4000 case "$cppstdin" in
4001 "$wrapper"|'cppstdin') ;;
4002 *) $rm -f $wrapper;;
4003 esac
4004 $rm -f testcpp.c testcpp.out
4005
4006 : Set private lib path
4007 case "$plibpth" in
4008 '') if ./mips; then
4009                 plibpth="$incpath/usr/lib /usr/local/lib /usr/ccs/lib"
4010         fi;;
4011 esac
4012 case "$libpth" in
4013 ' ') dlist='';;
4014 '') dlist="$loclibpth $plibpth $glibpth";;
4015 *) dlist="$libpth";;
4016 esac
4017
4018 : Now check and see which directories actually exist, avoiding duplicates
4019 libpth=''
4020 for xxx in $dlist
4021 do
4022     if $test -d $xxx; then
4023                 case " $libpth " in
4024                 *" $xxx "*) ;;
4025                 *) libpth="$libpth $xxx";;
4026                 esac
4027     fi
4028 done
4029 $cat <<'EOM'
4030
4031 Some systems have incompatible or broken versions of libraries.  Among
4032 the directories listed in the question below, please remove any you
4033 know not to be holding relevant libraries, and add any that are needed.
4034 Say "none" for none.
4035
4036 EOM
4037 case "$libpth" in
4038 '') dflt='none';;
4039 *)
4040         set X $libpth
4041         shift
4042         dflt=${1+"$@"}
4043         ;;
4044 esac
4045 rp="Directories to use for library searches?"
4046 . ./myread
4047 case "$ans" in
4048 none) libpth=' ';;
4049 *) libpth="$ans";;
4050 esac
4051
4052 : compute shared library extension
4053 case "$so" in
4054 '')
4055         if xxx=`./loc libc.sl X $libpth`; $test -f "$xxx"; then
4056                 dflt='sl'
4057         else
4058                 dflt='so'
4059         fi
4060         ;;
4061 *) dflt="$so";;
4062 esac
4063 $cat <<EOM
4064
4065 On some systems, shared libraries may be available.  Answer 'none' if
4066 you want to suppress searching of shared libraries for the remaining
4067 of this configuration.
4068
4069 EOM
4070 rp='What is the file extension used for shared libraries?'
4071 . ./myread
4072 so="$ans"
4073
4074 : Define several unixisms.
4075 : Hints files or command line option can be used to override them.
4076 : The convoluted testing is in case hints files set either the old
4077 : or the new name.
4078 case "$_exe" in
4079 '')     case "$exe_ext" in
4080     '') ;;
4081         *)      _exe="$exe_ext" ;;
4082         esac
4083         ;;
4084 esac
4085 case "$_a" in
4086 '')     case "$lib_ext" in
4087     '') _a='.a';;
4088         *)      _a="$lib_ext" ;;
4089         esac
4090         ;;
4091 esac
4092 case "$_o" in
4093 '') case "$obj_ext" in
4094         '')     _o='.o';;
4095         *)      _o="$obj_ext";;
4096         esac
4097         ;;
4098 esac
4099 case "$p_" in
4100 '') case "$path_sep" in
4101         '')     p_=':';;
4102         *)      p_="$path_sep";;
4103         esac
4104         ;;
4105 esac
4106 exe_ext=$_exe
4107 lib_ext=$_a
4108 obj_ext=$_o
4109 path_sep=$p_
4110
4111 : Which makefile gets called first.  This is used by make depend.
4112 case "$firstmakefile" in
4113 '') firstmakefile='makefile';;
4114 esac
4115
4116 cat <<EOM
4117
4118 Perl can be built to use the SOCKS proxy protocol library.  To do so,
4119 Configure must be run with -Dusesocks.
4120
4121 Normally you do not need this and you should answer no.
4122
4123 EOM
4124 case "$usesocks" in
4125 $define|true|[yY]*)     dflt='y';;
4126 *) dflt='n';;
4127 esac
4128 rp='Build Perl for SOCKS?'
4129 . ./myread
4130 case "$ans" in
4131 y|Y)    val="$define" ;;     
4132 *)      val="$undef" ;;
4133 esac
4134 set usesocks
4135 eval $setvar
4136
4137 : Looking for optional libraries
4138 echo " "
4139 echo "Checking for optional libraries..." >&4
4140 case "$libs" in
4141 ' '|'') dflt='';;
4142 *) dflt="$libs";;
4143 esac
4144 case "$libswanted" in
4145 '') libswanted='c_s';;
4146 esac
4147 case "$usesocks" in
4148 $define)
4149         libswanted="$libswanted socks5 socks5_sh"
4150         ;;
4151 esac
4152 for thislib in $libswanted; do
4153         
4154         if xxx=`./loc lib$thislib.$so.[0-9]'*' X $libpth`;
4155                 $test -f "$xxx" -a "X$ignore_versioned_solibs" = "X"; then
4156                 echo "Found -l$thislib (shared)."
4157                 case " $dflt " in
4158                 *"-l$thislib "*);;
4159                 *) dflt="$dflt -l$thislib";;
4160                 esac
4161         elif xxx=`./loc lib$thislib.$so X $libpth` ; $test -f "$xxx"; then
4162                 echo "Found -l$thislib (shared)."
4163                 case " $dflt " in
4164                 *"-l$thislib "*);;
4165                 *) dflt="$dflt -l$thislib";;
4166                 esac
4167         elif xxx=`./loc lib$thislib$_a X $libpth`; $test -f "$xxx"; then
4168                 echo "Found -l$thislib."
4169                 case " $dflt " in
4170                 *"-l$thislib "*);;
4171                 *) dflt="$dflt -l$thislib";;
4172                 esac
4173         elif xxx=`./loc $thislib$_a X $libpth`; $test -f "$xxx"; then
4174                 echo "Found -l$thislib."
4175                 case " $dflt " in
4176                 *"-l$thislib "*);;
4177                 *) dflt="$dflt -l$thislib";;
4178                 esac
4179         elif xxx=`./loc lib${thislib}_s$_a X $libpth`; $test -f "$xxx"; then
4180                 echo "Found -l${thislib}_s."
4181                 case " $dflt " in
4182                 *"-l$thislib "*);;
4183                 *) dflt="$dflt -l${thislib}_s";;
4184                 esac
4185         elif xxx=`./loc Slib$thislib$_a X $xlibpth`; $test -f "$xxx"; then
4186                 echo "Found -l$thislib."
4187                 case " $dflt " in
4188                 *"-l$thislib "*);;
4189                 *) dflt="$dflt -l$thislib";;
4190                 esac
4191         else
4192                 echo "No -l$thislib."
4193         fi
4194 done
4195 set X $dflt
4196 shift
4197 dflt="$*"
4198 case "$libs" in
4199 '') dflt="$dflt";;
4200 *) dflt="$libs";;
4201 esac
4202 case "$dflt" in
4203 ' '|'') dflt='none';;
4204 esac
4205
4206 $cat <<EOM
4207
4208 In order to compile $package on your machine, a number of libraries
4209 are usually needed.  Include any other special libraries here as well.
4210 Say "none" for none.  The default list is almost always right.
4211 EOM
4212
4213 echo " "
4214 rp="What libraries to use?"
4215 . ./myread
4216 case "$ans" in
4217 none) libs=' ';;
4218 *) libs="$ans";;
4219 esac
4220
4221 : determine optimization, if desired, or use for debug flag also
4222 case "$optimize" in
4223 ' '|$undef) dflt='none';;
4224 '') dflt='-O';;
4225 *) dflt="$optimize";;
4226 esac
4227 $cat <<EOH
4228
4229 By default, $package compiles with the -O flag to use the optimizer.
4230 Alternately, you might want to use the symbolic debugger, which uses
4231 the -g flag (on traditional Unix systems).  Either flag can be
4232 specified here.  To use neither flag, specify the word "none".
4233
4234 EOH
4235 rp="What optimizer/debugger flag should be used?"
4236 . ./myread
4237 optimize="$ans"
4238 case "$optimize" in
4239 'none') optimize=" ";;
4240 esac
4241
4242 dflt=''
4243 : We will not override a previous value, but we might want to
4244 : augment a hint file
4245 case "$hint" in
4246 default|recommended)
4247         case "$gccversion" in
4248         1*) dflt='-fpcc-struct-return' ;;
4249         esac
4250         case "$optimize" in
4251         *-g*) dflt="$dflt -DDEBUGGING";;
4252         esac
4253         case "$gccversion" in
4254         2*) if test -d /etc/conf/kconfig.d &&
4255                         $contains _POSIX_VERSION $usrinc/sys/unistd.h >/dev/null 2>&1
4256                 then
4257                         dflt="$dflt -posix"
4258                 fi
4259                 ;;
4260         esac
4261         case "$gccversion" in
4262         1*) ;;
4263         2.[0-8]*) ;;
4264         *)      echo " "
4265                 echo "Checking if your compiler accepts -fno-strict-aliasing" 2>&1
4266                 echo 'int main(void) { return 0; }' > gcctest.c
4267                 if $cc -O2 -fno-strict-aliasing -o gcctest gcctest.c; then
4268                         echo "Yes, it does." 2>&1
4269                         case "$ccflags" in
4270                         *strict-aliasing*) 
4271                                 echo "Leaving current flags $ccflags alone." 2>&1
4272                                 ;;
4273                         *) dflt="$dflt -fno-strict-aliasing" ;;
4274                         esac
4275                 else
4276                         echo "Nope, it doesn't, but that's ok." 2>&1
4277                 fi
4278                 ;;
4279         esac
4280         ;;
4281 esac
4282
4283 case "$mips_type" in
4284 *BSD*|'') inclwanted="$locincpth $usrinc";;
4285 *) inclwanted="$locincpth $inclwanted $usrinc/bsd";;
4286 esac
4287 for thisincl in $inclwanted; do
4288         if $test -d $thisincl; then
4289                 if $test x$thisincl != x$usrinc; then
4290                         case "$dflt" in
4291                         *$thisincl*);;
4292                         *) dflt="$dflt -I$thisincl";;
4293                         esac
4294                 fi
4295         fi
4296 done
4297
4298 inctest='if $contains $2 $usrinc/$1 >/dev/null 2>&1; then
4299         xxx=true;
4300 elif $contains $2 $usrinc/sys/$1 >/dev/null 2>&1; then
4301         xxx=true;
4302 else
4303         xxx=false;
4304 fi;
4305 if $xxx; then
4306         case "$dflt" in
4307         *$2*);;
4308         *) dflt="$dflt -D$2";;
4309         esac;
4310 fi'
4311
4312 set signal.h LANGUAGE_C; eval $inctest
4313
4314 case "$usesocks" in
4315 $define)
4316         ccflags="$ccflags -DSOCKS"
4317         ;;
4318 esac
4319
4320 case "$hint" in
4321 default|recommended) dflt="$ccflags $dflt" ;;
4322 *) dflt="$ccflags";;
4323 esac
4324
4325 case "$dflt" in
4326 ''|' ') dflt=none;;
4327 esac
4328 $cat <<EOH
4329
4330 Your C compiler may want other flags.  For this question you should include
4331 -I/whatever and -DWHATEVER flags and any other flags used by the C compiler,
4332 but you should NOT include libraries or ld flags like -lwhatever.  If you
4333 want $package to honor its debug switch, you should include -DDEBUGGING here.
4334 Your C compiler might also need additional flags, such as -D_POSIX_SOURCE.
4335
4336 To use no flags, specify the word "none".
4337
4338 EOH
4339 set X $dflt
4340 shift
4341 dflt=${1+"$@"}
4342 rp="Any additional cc flags?"
4343 . ./myread
4344 case "$ans" in
4345 none) ccflags='';;
4346 *) ccflags="$ans";;
4347 esac
4348
4349 : the following weeds options from ccflags that are of no interest to cpp
4350 cppflags="$ccflags"
4351 case "$gccversion" in
4352 1*) cppflags="$cppflags -D__GNUC__"
4353 esac
4354 case "$mips_type" in
4355 '');;
4356 *BSD*) cppflags="$cppflags -DSYSTYPE_BSD43";;
4357 esac
4358 case "$cppflags" in
4359 '');;
4360 *)
4361         echo " "
4362         echo "Let me guess what the preprocessor flags are..." >&4
4363         set X $cppflags
4364         shift
4365         cppflags=''
4366         $cat >cpp.c <<'EOM'
4367 #define BLURFL foo
4368
4369 BLURFL xx LFRULB
4370 EOM
4371         previous=''
4372         for flag in $*
4373         do
4374                 case "$flag" in
4375                 -*) ftry="$flag";;
4376                 *) ftry="$previous $flag";;
4377                 esac
4378                 if $cppstdin -DLFRULB=bar $cppflags $ftry $cppminus <cpp.c \
4379                         >cpp1.out 2>/dev/null && \
4380                         $cpprun -DLFRULB=bar $cppflags $ftry $cpplast <cpp.c \
4381                         >cpp2.out 2>/dev/null && \
4382                         $contains 'foo.*xx.*bar' cpp1.out >/dev/null 2>&1 && \
4383                         $contains 'foo.*xx.*bar' cpp2.out >/dev/null 2>&1
4384                 then
4385                         cppflags="$cppflags $ftry"
4386                         previous=''
4387                 else
4388                         previous="$flag"
4389                 fi
4390         done
4391         set X $cppflags
4392         shift
4393         cppflags=${1+"$@"}
4394         case "$cppflags" in
4395         *-*)  echo "They appear to be: $cppflags";;
4396         esac
4397         $rm -f cpp.c cpp?.out
4398         ;;
4399 esac
4400
4401 : flags used in final linking phase
4402 case "$ldflags" in
4403 '') if ./venix; then
4404                 dflt='-i -z'
4405         else
4406                 dflt=''
4407         fi
4408         case "$ccflags" in
4409         *-posix*) dflt="$dflt -posix" ;;
4410         esac
4411         ;;
4412 *) dflt="$ldflags";;
4413 esac
4414
4415 : Try to guess additional flags to pick up local libraries.
4416 for thislibdir in $libpth; do
4417         case " $loclibpth " in
4418         *" $thislibdir "*)
4419                 case "$dflt " in 
4420                 *"-L$thislibdir "*) ;;
4421                 *)  dflt="$dflt -L$thislibdir" ;;
4422                 esac
4423                 ;;
4424         esac
4425 done
4426
4427 case "$dflt" in
4428 '') dflt='none' ;;
4429 esac
4430
4431 $cat <<EOH
4432
4433 Your C linker may need flags.  For this question you should
4434 include -L/whatever and any other flags used by the C linker, but you
4435 should NOT include libraries like -lwhatever.
4436
4437 Make sure you include the appropriate -L/path flags if your C linker
4438 does not normally search all of the directories you specified above,
4439 namely
4440         $libpth
4441 To use no flags, specify the word "none".
4442
4443 EOH
4444
4445 rp="Any additional ld flags (NOT including libraries)?"
4446 . ./myread
4447 case "$ans" in
4448 none) ldflags='';;
4449 *) ldflags="$ans";;
4450 esac
4451 rmlist="$rmlist pdp11"
4452
4453 : coherency check
4454 echo " "
4455 echo "Checking your choice of C compiler and flags for coherency..." >&4
4456 $cat > try.c <<'EOF'
4457 #include <stdio.h>
4458 int main() { printf("Ok\n"); exit(0); }
4459 EOF
4460 set X $cc $optimize $ccflags -o try $ldflags try.c $libs
4461 shift
4462 $cat >try.msg <<'EOM'
4463 I've tried to compile and run the following simple program:
4464
4465 EOM
4466 $cat try.c >> try.msg
4467
4468 $cat >> try.msg <<EOM
4469
4470 I used the command:
4471
4472         $*
4473         ./try
4474
4475 and I got the following output:
4476
4477 EOM
4478 dflt=y
4479 if sh -c "$cc $optimize $ccflags -o try $ldflags try.c $libs" >>try.msg 2>&1; then
4480         if sh -c './try' >>try.msg 2>&1; then
4481                 xxx=`./try`
4482                 case "$xxx" in
4483                 "Ok") dflt=n ;;
4484                 *)      echo 'The program compiled OK, but produced no output.' >> try.msg
4485                         case " $libs " in
4486                         *" -lsfio "*)
4487                                 cat >> try.msg <<'EOQS'
4488 If $libs contains -lsfio, and sfio is mis-configured, then it
4489 sometimes (apparently) runs and exits with a 0 status, but with no
4490 output!  It may have to do with sfio's use of _exit vs. exit.
4491
4492 EOQS
4493                                 rp="You have a big problem.  Shall I abort Configure"
4494                                 dflt=y
4495                                 ;;
4496                         esac
4497                         ;;
4498                 esac
4499         else
4500                 echo "The program compiled OK, but exited with status $?." >>try.msg
4501                 rp="You have a problem.  Shall I abort Configure"
4502                 dflt=y
4503         fi
4504 else
4505         echo "I can't compile the test program." >>try.msg
4506         rp="You have a BIG problem.  Shall I abort Configure"
4507         dflt=y
4508 fi
4509 case "$dflt" in
4510 y)
4511         $cat try.msg >&4
4512         case "$knowitall" in
4513         '')
4514                 echo "(The supplied flags or libraries might be incorrect.)"
4515                 ;;
4516         *) dflt=n;;
4517         esac
4518         echo " "
4519         . ./myread
4520         case "$ans" in
4521         n*|N*) ;;
4522         *)      echo "Ok.  Stopping Configure." >&4
4523                 exit 1
4524                 ;;
4525         esac
4526         ;;
4527 n) echo "OK, that should do.";;
4528 esac
4529 $rm -f try try.* core
4530
4531 : determine filename position in cpp output
4532 echo " "
4533 echo "Computing filename position in cpp output for #include directives..." >&4
4534 echo '#include <stdio.h>' > foo.c
4535 $cat >fieldn <<EOF
4536 $startsh
4537 $cppstdin $cppflags $cppminus <foo.c 2>/dev/null | \
4538 $grep '^[       ]*#.*stdio\.h' | \
4539 while read cline; do
4540         pos=1
4541         set \$cline
4542         while $test \$# -gt 0; do
4543                 if $test -r \`echo \$1 | $tr -d '"'\`; then
4544                         echo "\$pos"
4545                         exit 0
4546                 fi
4547                 shift
4548                 pos=\`expr \$pos + 1\`
4549         done
4550 done
4551 EOF
4552 chmod +x fieldn
4553 fieldn=`./fieldn`
4554 $rm -f foo.c fieldn
4555 case $fieldn in
4556 '') pos='???';;
4557 1) pos=first;;
4558 2) pos=second;;
4559 3) pos=third;;
4560 *) pos="${fieldn}th";;
4561 esac
4562 echo "Your cpp writes the filename in the $pos field of the line."
4563
4564 : locate header file
4565 $cat >findhdr <<EOF
4566 $startsh
4567 wanted=\$1
4568 name=''
4569 for usrincdir in $usrinc
4570 do
4571         if test -f \$usrincdir/\$wanted; then
4572                 echo "\$usrincdir/\$wanted"
4573                 exit 0
4574         fi
4575 done
4576 awkprg='{ print \$$fieldn }'
4577 echo "#include <\$wanted>" > foo\$\$.c
4578 $cppstdin $cppminus $cppflags < foo\$\$.c 2>/dev/null | \
4579 $grep "^[       ]*#.*\$wanted" | \
4580 while read cline; do
4581         name=\`echo \$cline | $awk "\$awkprg" | $tr -d '"'\`
4582         case "\$name" in
4583         *[/\\\\]\$wanted) echo "\$name"; exit 1;;
4584         *[\\\\/]\$wanted) echo "\$name"; exit 1;;
4585         *) exit 2;;
4586         esac;
4587 done;
4588 #
4589 # status = 0: grep returned 0 lines, case statement not executed
4590 # status = 1: headerfile found
4591 # status = 2: while loop executed, no headerfile found
4592 #
4593 status=\$?
4594 $rm -f foo\$\$.c;
4595 if test \$status -eq 1; then
4596         exit 0;
4597 fi
4598 exit 1
4599 EOF
4600 chmod +x findhdr
4601
4602 : define an alternate in-header-list? function
4603 inhdr='echo " "; td=$define; tu=$undef; yyy=$@;
4604 cont=true; xxf="echo \"<\$1> found.\" >&4";
4605 case $# in 2) xxnf="echo \"<\$1> NOT found.\" >&4";;
4606 *) xxnf="echo \"<\$1> NOT found, ...\" >&4";;
4607 esac;
4608 case $# in 4) instead=instead;; *) instead="at last";; esac;
4609 while $test "$cont"; do
4610         xxx=`./findhdr $1`
4611         var=$2; eval "was=\$$2";
4612         if $test "$xxx" && $test -r "$xxx";
4613         then eval $xxf;
4614         eval "case \"\$$var\" in $undef) . ./whoa; esac"; eval "$var=\$td";
4615                 cont="";
4616         else eval $xxnf;
4617         eval "case \"\$$var\" in $define) . ./whoa; esac"; eval "$var=\$tu"; fi;
4618         set $yyy; shift; shift; yyy=$@;
4619         case $# in 0) cont="";;
4620         2) xxf="echo \"but I found <\$1> $instead.\" >&4";
4621                 xxnf="echo \"and I did not find <\$1> either.\" >&4";;
4622         *) xxf="echo \"but I found <\$1\> instead.\" >&4";
4623                 xxnf="echo \"there is no <\$1>, ...\" >&4";;
4624         esac;
4625 done;
4626 while $test "$yyy";
4627 do set $yyy; var=$2; eval "was=\$$2";
4628         eval "case \"\$$var\" in $define) . ./whoa; esac"; eval "$var=\$tu";
4629         set $yyy; shift; shift; yyy=$@;
4630 done'
4631
4632 : see if this is a malloc.h system
4633 set malloc.h i_malloc
4634 eval $inhdr
4635
4636 : see if stdlib is available
4637 set stdlib.h i_stdlib
4638 eval $inhdr
4639
4640 : determine which malloc to compile in
4641 echo " "
4642 case "$usemymalloc" in
4643 ''|[yY]*|true|$define)  dflt='y' ;;
4644 *)      dflt='n' ;;
4645 esac
4646 rp="Do you wish to attempt to use the malloc that comes with $package?"
4647 . ./myread
4648 usemymalloc="$ans"
4649 case "$ans" in
4650 y*|true)
4651         usemymalloc='y'
4652         mallocsrc='malloc.c'
4653         mallocobj="malloc$_o"
4654         d_mymalloc="$define"
4655         case "$libs" in
4656         *-lmalloc*)
4657                 : Remove malloc from list of libraries to use
4658                 echo "Removing unneeded -lmalloc from library list" >&4
4659                 set `echo X $libs | $sed -e 's/-lmalloc / /' -e 's/-lmalloc$//'`
4660                 shift
4661                 libs="$*"
4662                 echo "libs = $libs" >&4
4663                 ;;
4664         esac
4665         ;;
4666 *)
4667         usemymalloc='n'
4668         mallocsrc=''
4669         mallocobj=''
4670         d_mymalloc="$undef"
4671         ;;
4672 esac
4673
4674 : compute the return types of malloc and free
4675 echo " "
4676 $cat >malloc.c <<END
4677 #$i_malloc I_MALLOC
4678 #$i_stdlib I_STDLIB
4679 #include <stdio.h>
4680 #include <sys/types.h>
4681 #ifdef I_MALLOC
4682 #include <malloc.h>
4683 #endif
4684 #ifdef I_STDLIB
4685 #include <stdlib.h>
4686 #endif
4687 #ifdef TRY_MALLOC
4688 void *malloc();
4689 #endif
4690 #ifdef TRY_FREE
4691 void free();
4692 #endif
4693 END
4694 case "$malloctype" in
4695 '')
4696         if $cc $ccflags -c -DTRY_MALLOC malloc.c >/dev/null 2>&1; then
4697                 malloctype='void *'
4698         else
4699                 malloctype='char *'
4700         fi
4701         ;;
4702 esac
4703 echo "Your system wants malloc to return '$malloctype', it would seem." >&4
4704
4705 case "$freetype" in
4706 '')
4707         if $cc $ccflags -c -DTRY_FREE malloc.c >/dev/null 2>&1; then
4708                 freetype='void'
4709         else
4710                 freetype='int'
4711         fi
4712         ;;
4713 esac
4714 echo "Your system uses $freetype free(), it would seem." >&4
4715 $rm -f malloc.[co]
4716 $cat <<EOM
4717
4718 The installation process will also create a directory for
4719 vendor-supplied add-ons.  Vendors who supply perl with their system
4720 may find it convenient to place all vendor-supplied files in this
4721 directory rather than in the main distribution directory.  This will
4722 ease upgrades between binary-compatible maintenance versions of perl.
4723
4724 Of course you may also use these directories in whatever way you see
4725 fit.  For example, you might use them to access modules shared over a
4726 company-wide network.
4727
4728 The default answer should be fine for most people.
4729 This causes further questions about vendor add-ons to be skipped
4730 and no vendor-specific directories will be configured for perl.
4731
4732 EOM
4733 rp='Do you want to configure vendor-specific add-on directories?'
4734 case "$usevendorprefix" in
4735 define|true|[yY]*) dflt=y ;;
4736 *) dflt=n ;;
4737 esac
4738 . ./myread
4739 case "$ans" in
4740 [yY]*)  fn=d~+
4741         rp='Installation prefix to use for vendor-supplied add-ons?'
4742         case "$vendorprefix" in
4743         '') dflt='' ;;
4744         *)  dflt=$vendorprefix ;;
4745         esac
4746         . ./getfile
4747         oldvendorprefix=''
4748         case "$vendorprefix" in
4749         '') ;;
4750         *)      case "$ans" in
4751                 "$prefix") ;;
4752                 *) oldvendorprefix="$prefix";;
4753                 esac
4754                 ;;
4755         esac
4756         usevendorprefix="$define"
4757         vendorprefix="$ans"
4758         vendorprefixexp="$ansexp"
4759         ;;
4760 *)      usevendorprefix="$undef"
4761         vendorprefix=''
4762         vendorprefixexp=''
4763         ;;
4764 esac
4765
4766 case "$vendorprefix" in
4767 '')     d_vendorlib="$undef"
4768         vendorlib=''
4769         vendorlibexp=''
4770         ;;
4771 *)      d_vendorlib="$define"
4772         : determine where vendor-supplied modules go.
4773         : Usual default is /usr/local/lib/perl5/vendor_perl
4774         prog=`echo $package | $sed 's/-*[0-9.]*$//'`
4775         case "$installstyle" in
4776         *lib/perl5*) dflt=$vendorprefix/lib/$package/vendor_$prog ;;
4777         *)       &nb