utf8.c: Use slightly more efficient macro
[perl.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 package (which contains metaconfig) is available via SVN:
17 #     svn co https://svn.code.sf.net/p/dist/code/trunk/dist
18 #
19 # Though this script was generated by metaconfig from metaunits, it is
20 # OK to send patches against Configure itself. It's up to the Configure
21 # pumpkin to backport the patch to the metaunits if it is accepted.
22 # For more information on patching Configure, see pod/perlhack.pod
23 #
24 # The metaunits are also available from the public git repository:
25 #     http://perl5.git.perl.org/metaconfig.git/ or
26 #     $ git clone git://perl5.git.perl.org/metaconfig.git metaconfig
27 #
28 # See Porting/pumpkin.pod for more information on metaconfig.
29 #
30
31 # Generated using [metaconfig 3.5 PL0]
32 # (with additional metaconfig patches by perlbug@perl.org)
33
34 cat >c1$$ <<EOF
35 ARGGGHHHH!!!!!
36
37 SCO csh still thinks true is false.  Write to SCO today and tell them that next
38 year Configure ought to "rm /bin/csh" unless they fix their blasted shell. :-)
39
40 (Actually, Configure ought to just patch csh in place.  Hmm.  Hmmmmm.  All
41 we'd have to do is go in and swap the && and || tokens, wherever they are.)
42
43 [End of diatribe. We now return you to your regularly scheduled programming...]
44 EOF
45 cat >c2$$ <<EOF
46
47 OOPS!  You naughty creature!  You didn't run Configure with sh!
48 I will attempt to remedy the situation by running sh for you...
49 EOF
50
51 true || cat c1$$ c2$$
52 true || exec sh $0 $argv:q
53
54 (exit $?0) || cat c2$$
55 (exit $?0) || exec sh $0 $argv:q
56 rm -f c1$$ c2$$
57
58 if test -f /dev/cputype -a -f /dev/drivers -a -f /dev/osversion; then
59         cat <<EOF
60 ***
61 *** I'm sorry but this system looks like Plan 9 and Plan 9 doesn't do
62 *** Configure that well.  (Plan 9 is close to UNIX but not close enough.)
63 *** Please read the README.plan9 for further instructions.
64 *** Cannot continue, aborting.
65 ***
66 EOF
67         exit 1
68 fi
69
70 if test ! -c /dev/null ; then
71         cat <<EOF
72 ***
73 *** I'm sorry, but /dev/null appears to be a file rather than a device.
74 *** Please consult your operating sytem's notes for making a device
75 *** in /dev.
76 *** Cannot continue, aborting.
77 ***
78 EOF
79         exit 1
80 fi
81
82 : compute my invocation name
83 me=$0
84 case "$0" in
85 */*)
86         me=`echo $0 | sed -e 's!.*/\(.*\)!\1!' 2>/dev/null`
87         test "$me" || me=$0
88         ;;
89 esac
90
91 : Proper separator for the PATH environment variable
92 p_=:
93 : On OS/2 this directory should exist if this is not floppy only system ":-]"
94 if test -d c:/. || ( uname -a | grep -i 'os\(/\|\)2' 2>&1 ) 2>&1 >/dev/null ; then
95         if test -n "$OS2_SHELL"; then
96                 p_=\;
97                 PATH=`cmd /c "echo %PATH%" | tr '\\\\' / `
98                 OS2_SHELL=`cmd /c "echo %OS2_SHELL%" | tr '\\\\' / | tr '[A-Z]' '[a-z]'`
99                 is_os2=yes
100         elif test -n "$DJGPP"; then
101                 case "X${MACHTYPE:-nonesuchmach}" in
102                 *cygwin|*msys) ;;
103                 *) p_=\; ;;
104                 esac
105         fi
106 fi
107
108 : Proper PATH setting
109 paths='/bin /usr/bin /usr/local/bin /usr/ucb /usr/local /usr/lbin'
110 paths="$paths /opt/bin /opt/local/bin /opt/local /opt/lbin"
111 paths="$paths /usr/5bin /etc /usr/gnu/bin /usr/new /usr/new/bin /usr/nbin"
112 paths="$paths /opt/gnu/bin /opt/new /opt/new/bin /opt/nbin"
113 paths="$paths /sys5.3/bin /sys5.3/usr/bin /bsd4.3/bin /bsd4.3/usr/ucb"
114 paths="$paths /bsd4.3/usr/bin /usr/bsd /bsd43/bin /opt/ansic/bin /usr/ccs/bin"
115 paths="$paths /etc /usr/lib /usr/ucblib /lib /usr/ccs/lib"
116 paths="$paths /sbin /usr/sbin /usr/libexec"
117 paths="$paths /system/gnu_library/bin"
118
119 for p in $paths
120 do
121         case "$p_$PATH$p_" in
122         *$p_$p$p_*) ;;
123         *) test -d $p && PATH=$PATH$p_$p ;;
124         esac
125 done
126
127 PATH=.$p_$PATH
128 export PATH
129
130 : shall we be using ksh?
131 inksh=''
132 needksh=''
133 avoidksh=''
134 newsh=/bin/ksh
135 changesh=''
136 if (PATH=.; alias -x) >/dev/null 2>&1; then
137                 inksh=true
138 fi
139 if test -f /hp-ux -a -f /bin/ksh; then
140         needksh='to avoid sh bug in "here document" expansion'
141 fi
142 if test -d /usr/lpp -a -f /usr/bin/bsh -a -f /usr/bin/uname; then
143         if test X`/usr/bin/uname -v` = X4; then
144                 avoidksh="to avoid AIX 4's /bin/sh"
145                 newsh=/usr/bin/bsh
146         fi
147 fi
148 if test -f /osf_boot -a -f /usr/sbin/setld; then
149         if test X`/usr/bin/uname -s` = XOSF1; then
150                 avoidksh="to avoid Digital UNIX' ksh"
151                 newsh=/bin/sh
152                 unset BIN_SH
153         fi
154 fi
155 case "$inksh/$needksh" in
156 /[a-z]*)
157                 ENV=''
158                 changesh=true
159                 reason="$needksh"
160         ;;
161 esac
162 case "$inksh/$avoidksh" in
163 true/[a-z]*)
164         changesh=true
165         reason="$avoidksh"
166         ;;
167 esac
168 case "$inksh/$needksh-$avoidksh-" in
169 true/--)
170                 cat <<EOM
171 (I see you are using the Korn shell.  Some ksh's blow up on $me,
172 mainly on older exotic systems.  If yours does, try the Bourne shell instead.)
173 EOM
174         ;;
175 esac
176 case "$changesh" in
177 true)
178         export newsh
179         echo "(Feeding myself to $newsh $reason.)"
180         case "$0" in
181         Configure|*/Configure) exec $newsh $0 "$@";;
182         *) exec $newsh Configure "$@";;
183         esac
184         ;;
185 esac
186 test -x "${newsh}" || unset newsh
187
188 : if needed, set CDPATH to a harmless value that is not chatty
189 : avoid bash 2.02 problems with empty CDPATH.
190 case "$CDPATH" in
191 '')     ;;
192 *)      case "$SHELL" in
193         *bash*) CDPATH='.' ;;
194         *) CDPATH='' ;;
195         esac
196         ;;
197 esac
198
199 : Configure runs within the UU subdirectory
200 test -d UU || mkdir UU
201 cd UU && rm -f ./*
202
203 ccname=''
204 ccversion=''
205 ccsymbols=''
206 cppccsymbols=''
207 cppsymbols=''
208 from=''
209 hostgenerate=''
210 hostosname=''
211 hostperl=''
212 run=''
213 targetarch=''
214 targetdir=''
215 targetenv=''
216 targethost=''
217 targetmkdir=''
218 targetport=''
219 to=''
220 usecrosscompile=''
221 extern_C=''
222 mistrustnm=''
223 usedevel=''
224 perllibs=''
225 dynamic_ext=''
226 extensions=''
227 known_extensions=''
228 nonxs_ext=''
229 static_ext=''
230 useopcode=''
231 useposix=''
232 extras=''
233 d_bsd=''
234 d_eunice=''
235 d_xenix=''
236 eunicefix=''
237 ar=''
238 awk=''
239 bash=''
240 bison=''
241 byacc=''
242 cat=''
243 chgrp=''
244 chmod=''
245 chown=''
246 comm=''
247 compress=''
248 cp=''
249 cpio=''
250 cpp=''
251 csh=''
252 date=''
253 echo=''
254 egrep=''
255 emacs=''
256 expr=''
257 find=''
258 flex=''
259 gmake=''
260 grep=''
261 gzip=''
262 inews=''
263 ksh=''
264 less=''
265 line=''
266 lint=''
267 ln=''
268 lp=''
269 lpr=''
270 ls=''
271 mail=''
272 mailx=''
273 make=''
274 mkdir=''
275 more=''
276 mv=''
277 nm=''
278 nroff=''
279 perl=''
280 pg=''
281 pmake=''
282 pr=''
283 rm=''
284 rmail=''
285 sed=''
286 sendmail=''
287 shar=''
288 sleep=''
289 smail=''
290 sort=''
291 submit=''
292 tail=''
293 tar=''
294 tbl=''
295 tee=''
296 test=''
297 touch=''
298 tr=''
299 troff=''
300 uname=''
301 uniq=''
302 uuname=''
303 vi=''
304 zcat=''
305 zip=''
306 full_ar=''
307 full_sed=''
308 libswanted=''
309 hint=''
310 myuname=''
311 osname=''
312 osvers=''
313 Author=''
314 Date=''
315 Header=''
316 Id=''
317 Locker=''
318 Log=''
319 RCSfile=''
320 Revision=''
321 Source=''
322 State=''
323 sysroot=''
324 _a=''
325 _exe=''
326 _o=''
327 archobjs=''
328 exe_ext=''
329 firstmakefile=''
330 lib_ext=''
331 obj_ext=''
332 path_sep=''
333 rm_try=''
334 afs=''
335 afsroot=''
336 alignbytes=''
337 ansi2knr=''
338 archlib=''
339 archlibexp=''
340 d_archlib=''
341 installarchlib=''
342 archname=''
343 myarchname=''
344 useversionedarchname=''
345 d_atolf=''
346 d_atoll=''
347 baserev=''
348 bin=''
349 binexp=''
350 initialinstalllocation=''
351 installbin=''
352 userelocatableinc=''
353 byteorder=''
354 cc=''
355 ccflags=''
356 cppflags=''
357 ldflags=''
358 lkflags=''
359 locincpth=''
360 optimize=''
361 cf_email=''
362 cf_by=''
363 cf_time=''
364 charbits=''
365 charsize=''
366 contains=''
367 cpp_stuff=''
368 cpplast=''
369 cppminus=''
370 cpprun=''
371 cppstdin=''
372 d__fwalk=''
373 d_access=''
374 d_accessx=''
375 d_aintl=''
376 d_alarm=''
377 asctime_r_proto=''
378 d_asctime_r=''
379 d_attribute_deprecated=''
380 d_attribute_format=''
381 d_attribute_malloc=''
382 d_attribute_nonnull=''
383 d_attribute_noreturn=''
384 d_attribute_pure=''
385 d_attribute_unused=''
386 d_attribute_warn_unused_result=''
387 d_printf_format_null=''
388 d_backtrace=''
389 d_bcmp=''
390 d_bcopy=''
391 d_builtin_choose_expr=''
392 d_builtin_expect=''
393 d_bzero=''
394 d_c99_variadic_macros=''
395 d_casti32=''
396 castflags=''
397 d_castneg=''
398 d_chown=''
399 d_chroot=''
400 d_chsize=''
401 d_class=''
402 d_clearenv=''
403 d_closedir=''
404 d_void_closedir=''
405 d_cmsghdr_s=''
406 d_const=''
407 d_copysignl=''
408 d_cplusplus=''
409 cryptlib=''
410 d_crypt=''
411 crypt_r_proto=''
412 d_crypt_r=''
413 d_csh=''
414 full_csh=''
415 d_ctermid=''
416 ctermid_r_proto=''
417 d_ctermid_r=''
418 ctime_r_proto=''
419 d_ctime_r=''
420 d_cuserid=''
421 d_dbl_dig=''
422 d_dbminitproto=''
423 d_difftime=''
424 d_dir_dd_fd=''
425 d_dirfd=''
426 d_dladdr=''
427 d_dlerror=''
428 d_dlopen=''
429 d_dlsymun=''
430 d_dosuid=''
431 d_suidsafe=''
432 d_drand48_r=''
433 drand48_r_proto=''
434 d_drand48proto=''
435 d_dup2=''
436 d_eaccess=''
437 d_endgrent=''
438 d_endgrent_r=''
439 endgrent_r_proto=''
440 d_endhent=''
441 d_endhostent_r=''
442 endhostent_r_proto=''
443 d_endnent=''
444 d_endnetent_r=''
445 endnetent_r_proto=''
446 d_endpent=''
447 d_endprotoent_r=''
448 endprotoent_r_proto=''
449 d_endpwent=''
450 d_endpwent_r=''
451 endpwent_r_proto=''
452 d_endsent=''
453 d_endservent_r=''
454 endservent_r_proto=''
455 d_faststdio=''
456 d_fchdir=''
457 d_fchmod=''
458 d_fchown=''
459 d_fcntl=''
460 d_fcntl_can_lock=''
461 d_fd_macros=''
462 d_fd_set=''
463 d_fds_bits=''
464 d_fgetpos=''
465 d_finite=''
466 d_finitel=''
467 d_flexfnam=''
468 d_flock=''
469 d_flockproto=''
470 d_fork=''
471 d_fp_class=''
472 d_fpclass=''
473 d_fpclassify=''
474 d_fpclassl=''
475 d_fpos64_t=''
476 d_frexpl=''
477 d_fs_data_s=''
478 d_fseeko=''
479 d_fsetpos=''
480 d_fstatfs=''
481 d_fsync=''
482 d_ftello=''
483 d_ftime=''
484 d_gettimeod=''
485 d_futimes=''
486 d_Gconvert=''
487 d_getaddrinfo=''
488 d_getcwd=''
489 d_getespwnam=''
490 d_getfsstat=''
491 d_getgrent=''
492 d_getgrent_r=''
493 getgrent_r_proto=''
494 d_getgrgid_r=''
495 getgrgid_r_proto=''
496 d_getgrnam_r=''
497 getgrnam_r_proto=''
498 d_getgrps=''
499 d_gethbyaddr=''
500 d_gethbyname=''
501 d_gethent=''
502 aphostname=''
503 d_gethname=''
504 d_phostname=''
505 d_uname=''
506 d_gethostbyaddr_r=''
507 gethostbyaddr_r_proto=''
508 d_gethostbyname_r=''
509 gethostbyname_r_proto=''
510 d_gethostent_r=''
511 gethostent_r_proto=''
512 d_gethostprotos=''
513 d_getitimer=''
514 d_getlogin=''
515 d_getlogin_r=''
516 getlogin_r_proto=''
517 d_getmnt=''
518 d_getmntent=''
519 d_getnameinfo=''
520 d_getnbyaddr=''
521 d_getnbyname=''
522 d_getnent=''
523 d_getnetbyaddr_r=''
524 getnetbyaddr_r_proto=''
525 d_getnetbyname_r=''
526 getnetbyname_r_proto=''
527 d_getnetent_r=''
528 getnetent_r_proto=''
529 d_getnetprotos=''
530 d_getpagsz=''
531 d_getpent=''
532 d_getpgid=''
533 d_getpgrp2=''
534 d_bsdgetpgrp=''
535 d_getpgrp=''
536 d_getppid=''
537 d_getprior=''
538 d_getpbyname=''
539 d_getpbynumber=''
540 d_getprotobyname_r=''
541 getprotobyname_r_proto=''
542 d_getprotobynumber_r=''
543 getprotobynumber_r_proto=''
544 d_getprotoent_r=''
545 getprotoent_r_proto=''
546 d_getprotoprotos=''
547 d_getprpwnam=''
548 d_getpwent=''
549 d_getpwent_r=''
550 getpwent_r_proto=''
551 d_getpwnam_r=''
552 getpwnam_r_proto=''
553 d_getpwuid_r=''
554 getpwuid_r_proto=''
555 d_getsent=''
556 d_getservbyname_r=''
557 getservbyname_r_proto=''
558 d_getservbyport_r=''
559 getservbyport_r_proto=''
560 d_getservent_r=''
561 getservent_r_proto=''
562 d_getservprotos=''
563 d_getspnam=''
564 d_getspnam_r=''
565 getspnam_r_proto=''
566 d_getsbyname=''
567 d_getsbyport=''
568 d_gmtime_r=''
569 gmtime_r_proto=''
570 d_gnulibc=''
571 gnulibc_version=''
572 d_hasmntopt=''
573 d_htonl=''
574 d_ilogbl=''
575 d_inetaton=''
576 d_inetntop=''
577 d_inetpton=''
578 d_int64_t=''
579 d_isascii=''
580 d_isblank=''
581 d_isfinite=''
582 d_isinf=''
583 d_isnan=''
584 d_isnanl=''
585 d_killpg=''
586 d_lchown=''
587 d_ldbl_dig=''
588 d_libm_lib_version=''
589 d_link=''
590 d_localtime_r=''
591 d_localtime_r_needs_tzset=''
592 localtime_r_proto=''
593 d_locconv=''
594 d_lockf=''
595 d_longdbl=''
596 longdblsize=''
597 d_longlong=''
598 longlongsize=''
599 d_lseekproto=''
600 d_lstat=''
601 d_madvise=''
602 d_malloc_good_size=''
603 d_malloc_size=''
604 d_mblen=''
605 d_mbstowcs=''
606 d_mbtowc=''
607 d_memchr=''
608 d_memcmp=''
609 d_memcpy=''
610 d_memmove=''
611 d_memset=''
612 d_mkdir=''
613 d_mkdtemp=''
614 d_mkfifo=''
615 d_mkstemp=''
616 d_mkstemps=''
617 d_mktime=''
618 d_mmap=''
619 mmaptype=''
620 d_modfl=''
621 d_modfl_pow32_bug=''
622 d_modflproto=''
623 d_mprotect=''
624 d_msg=''
625 d_msgctl=''
626 d_msgget=''
627 d_msghdr_s=''
628 d_msgrcv=''
629 d_msgsnd=''
630 d_msync=''
631 d_munmap=''
632 d_nice=''
633 d_nl_langinfo=''
634 d_off64_t=''
635 d_open3=''
636 d_fpathconf=''
637 d_pathconf=''
638 d_pause=''
639 d_pipe=''
640 d_poll=''
641 d_portable=''
642 d_prctl=''
643 d_prctl_set_name=''
644 d_procselfexe=''
645 procselfexe=''
646 d_old_pthread_create_joinable=''
647 old_pthread_create_joinable=''
648 d_pthread_atfork=''
649 d_pthread_attr_setscope=''
650 d_pthread_yield=''
651 d_sched_yield=''
652 sched_yield=''
653 d_ptrdiff_t=''
654 d_qgcvt=''
655 d_random_r=''
656 random_r_proto=''
657 d_readdir64_r=''
658 readdir64_r_proto=''
659 d_readdir=''
660 d_rewinddir=''
661 d_seekdir=''
662 d_telldir=''
663 d_readdir_r=''
664 readdir_r_proto=''
665 d_readlink=''
666 d_readv=''
667 d_recvmsg=''
668 d_rename=''
669 d_rmdir=''
670 d_safebcpy=''
671 d_safemcpy=''
672 d_sanemcmp=''
673 d_sbrkproto=''
674 d_scalbnl=''
675 d_select=''
676 d_sem=''
677 d_semctl=''
678 d_semget=''
679 d_semop=''
680 d_sendmsg=''
681 d_setegid=''
682 d_seteuid=''
683 d_setgrent=''
684 d_setgrent_r=''
685 setgrent_r_proto=''
686 d_setgrps=''
687 d_sethent=''
688 d_sethostent_r=''
689 sethostent_r_proto=''
690 d_setitimer=''
691 d_setlinebuf=''
692 d_setlocale=''
693 d_setlocale_r=''
694 setlocale_r_proto=''
695 d_setnent=''
696 d_setnetent_r=''
697 setnetent_r_proto=''
698 d_setpent=''
699 d_setpgid=''
700 d_setpgrp2=''
701 d_bsdsetpgrp=''
702 d_setpgrp=''
703 d_setprior=''
704 d_setproctitle=''
705 d_setprotoent_r=''
706 setprotoent_r_proto=''
707 d_setpwent=''
708 d_setpwent_r=''
709 setpwent_r_proto=''
710 d_setregid=''
711 d_setresgid=''
712 d_setresuid=''
713 d_setreuid=''
714 d_setrgid=''
715 d_setruid=''
716 d_setsent=''
717 d_setservent_r=''
718 setservent_r_proto=''
719 d_setsid=''
720 d_setvbuf=''
721 d_shm=''
722 d_shmat=''
723 d_shmatprototype=''
724 shmattype=''
725 d_shmctl=''
726 d_shmdt=''
727 d_shmget=''
728 d_sigaction=''
729 d_signbit=''
730 d_sigprocmask=''
731 d_sigsetjmp=''
732 usesitecustomize=''
733 d_snprintf=''
734 d_vsnprintf=''
735 d_sockatmark=''
736 d_sockatmarkproto=''
737 d_ip_mreq=''
738 d_ip_mreq_source=''
739 d_ipv6_mreq=''
740 d_ipv6_mreq_source=''
741 d_msg_ctrunc=''
742 d_msg_dontroute=''
743 d_msg_oob=''
744 d_msg_peek=''
745 d_msg_proxy=''
746 d_oldsock=''
747 d_scm_rights=''
748 d_sin6_scope_id=''
749 d_sockaddr_in6=''
750 d_sockaddr_sa_len=''
751 d_socket=''
752 d_sockpair=''
753 sockethdr=''
754 socketlib=''
755 d_socklen_t=''
756 d_socks5_init=''
757 d_sprintf_returns_strlen=''
758 d_sqrtl=''
759 d_srand48_r=''
760 srand48_r_proto=''
761 d_srandom_r=''
762 srandom_r_proto=''
763 d_sresgproto=''
764 d_sresuproto=''
765 d_statblks=''
766 d_statfs_f_flags=''
767 d_statfs_s=''
768 d_static_inline=''
769 perl_static_inline=''
770 d_fstatvfs=''
771 d_statvfs=''
772 d_stdio_cnt_lval=''
773 d_stdio_ptr_lval=''
774 d_stdio_ptr_lval_nochange_cnt=''
775 d_stdio_ptr_lval_sets_cnt=''
776 d_stdiobase=''
777 d_stdstdio=''
778 stdio_base=''
779 stdio_bufsiz=''
780 stdio_cnt=''
781 stdio_filbuf=''
782 stdio_ptr=''
783 d_index=''
784 d_strchr=''
785 d_strcoll=''
786 d_strctcpy=''
787 d_strerrm=''
788 d_strerror=''
789 d_sysernlst=''
790 d_syserrlst=''
791 d_strerror_r=''
792 strerror_r_proto=''
793 d_strftime=''
794 d_strlcat=''
795 d_strlcpy=''
796 d_strtod=''
797 d_strtol=''
798 d_strtold=''
799 d_strtoll=''
800 d_strtoq=''
801 d_strtoul=''
802 d_strtoull=''
803 d_strtouq=''
804 d_strxfrm=''
805 d_symlink=''
806 d_syscall=''
807 d_syscallproto=''
808 d_sysconf=''
809 d_system=''
810 d_tcgetpgrp=''
811 d_tcsetpgrp=''
812 d_telldirproto=''
813 d_time=''
814 timetype=''
815 d_asctime64=''
816 d_ctime64=''
817 d_difftime64=''
818 d_gmtime64=''
819 d_localtime64=''
820 d_mktime64=''
821 d_timegm=''
822 clocktype=''
823 d_times=''
824 d_tmpnam_r=''
825 tmpnam_r_proto=''
826 d_truncate=''
827 d_ttyname_r=''
828 ttyname_r_proto=''
829 d_tzname=''
830 d_u32align=''
831 d_ualarm=''
832 d_umask=''
833 d_semctl_semid_ds=''
834 d_semctl_semun=''
835 d_union_semun=''
836 d_unordered=''
837 d_unsetenv=''
838 d_usleep=''
839 d_usleepproto=''
840 d_ustat=''
841 d_pseudofork=''
842 d_vfork=''
843 usevfork=''
844 d_voidsig=''
845 signal_t=''
846 d_volatile=''
847 d_charvspr=''
848 d_vprintf=''
849 d_wait4=''
850 d_waitpid=''
851 d_wcscmp=''
852 d_wcstombs=''
853 d_wcsxfrm=''
854 d_wctomb=''
855 d_writev=''
856 dlext=''
857 bin_ELF=''
858 cccdlflags=''
859 ccdlflags=''
860 dlsrc=''
861 ld=''
862 ld_can_script=''
863 lddlflags=''
864 usedl=''
865 doublesize=''
866 ebcdic=''
867 fflushNULL=''
868 fflushall=''
869 fpossize=''
870 fpostype=''
871 gccansipedantic=''
872 gccosandvers=''
873 gccversion=''
874 gidformat=''
875 gidsign=''
876 gidsize=''
877 gidtype=''
878 groupstype=''
879 h_fcntl=''
880 h_sysfile=''
881 html1dir=''
882 html1direxp=''
883 installhtml1dir=''
884 html3dir=''
885 html3direxp=''
886 installhtml3dir=''
887 i_arpainet=''
888 i_assert=''
889 i_bfd=''
890 i_crypt=''
891 db_hashtype=''
892 db_prefixtype=''
893 db_version_major=''
894 db_version_minor=''
895 db_version_patch=''
896 i_db=''
897 i_dbm=''
898 i_rpcsvcdbm=''
899 d_dirnamlen=''
900 direntrytype=''
901 i_dirent=''
902 i_dlfcn=''
903 i_execinfo=''
904 i_fcntl=''
905 i_float=''
906 i_fp=''
907 i_fp_class=''
908 i_gdbm=''
909 d_grpasswd=''
910 i_grp=''
911 i_ieeefp=''
912 i_inttypes=''
913 i_langinfo=''
914 i_libutil=''
915 i_limits=''
916 i_locale=''
917 i_machcthr=''
918 i_malloc=''
919 i_mallocmalloc=''
920 i_math=''
921 i_memory=''
922 i_mntent=''
923 d_gdbm_ndbm_h_uses_prototypes=''
924 d_gdbmndbm_h_uses_prototypes=''
925 d_ndbm=''
926 d_ndbm_h_uses_prototypes=''
927 i_gdbm_ndbm=''
928 i_gdbmndbm=''
929 i_ndbm=''
930 i_netdb=''
931 i_neterrno=''
932 i_netinettcp=''
933 i_niin=''
934 i_sysin=''
935 i_poll=''
936 i_prot=''
937 i_pthread=''
938 d_pwage=''
939 d_pwchange=''
940 d_pwclass=''
941 d_pwcomment=''
942 d_pwexpire=''
943 d_pwgecos=''
944 d_pwpasswd=''
945 d_pwquota=''
946 i_pwd=''
947 i_shadow=''
948 i_socks=''
949 i_stdbool=''
950 i_stddef=''
951 i_stdlib=''
952 i_string=''
953 strings=''
954 i_sunmath=''
955 i_sysaccess=''
956 i_sysdir=''
957 i_sysfile=''
958 d_voidtty=''
959 i_bsdioctl=''
960 i_sysfilio=''
961 i_sysioctl=''
962 i_syssockio=''
963 i_syslog=''
964 i_sysmman=''
965 i_sysmode=''
966 i_sysmount=''
967 i_sysndir=''
968 i_sysparam=''
969 i_syspoll=''
970 i_sysresrc=''
971 i_syssecrt=''
972 i_sysselct=''
973 i_sysstat=''
974 i_sysstatfs=''
975 i_sysstatvfs=''
976 i_systimes=''
977 i_systypes=''
978 i_sysuio=''
979 i_sysun=''
980 i_sysutsname=''
981 i_sysvfs=''
982 i_syswait=''
983 i_sgtty=''
984 i_termio=''
985 i_termios=''
986 d_tm_tm_gmtoff=''
987 d_tm_tm_zone=''
988 i_systime=''
989 i_systimek=''
990 i_time=''
991 timeincl=''
992 i_unistd=''
993 i_ustat=''
994 i_utime=''
995 i_values=''
996 i_stdarg=''
997 i_varargs=''
998 i_varhdr=''
999 i_vfork=''
1000 d_inc_version_list=''
1001 inc_version_list=''
1002 inc_version_list_init=''
1003 installprefix=''
1004 installprefixexp=''
1005 installstyle=''
1006 installusrbinperl=''
1007 intsize=''
1008 longsize=''
1009 shortsize=''
1010 issymlink=''
1011 libc=''
1012 ldlibpthname=''
1013 libperl=''
1014 shrpenv=''
1015 useshrplib=''
1016 glibpth=''
1017 incpth=''
1018 libpth=''
1019 loclibpth=''
1020 plibpth=''
1021 xlibpth=''
1022 ignore_versioned_solibs=''
1023 libs=''
1024 libsdirs=''
1025 libsfiles=''
1026 libsfound=''
1027 libspath=''
1028 lns=''
1029 d_PRIEUldbl=''
1030 d_PRIFUldbl=''
1031 d_PRIGUldbl=''
1032 d_PRIeldbl=''
1033 d_PRIfldbl=''
1034 d_PRIgldbl=''
1035 d_SCNfldbl=''
1036 sPRIEUldbl=''
1037 sPRIFUldbl=''
1038 sPRIGUldbl=''
1039 sPRIeldbl=''
1040 sPRIfldbl=''
1041 sPRIgldbl=''
1042 sSCNfldbl=''
1043 lseeksize=''
1044 lseektype=''
1045 make_set_make=''
1046 d_mymalloc=''
1047 freetype=''
1048 mallocobj=''
1049 mallocsrc=''
1050 malloctype=''
1051 usemallocwrap=''
1052 usemymalloc=''
1053 installman1dir=''
1054 man1dir=''
1055 man1direxp=''
1056 man1ext=''
1057 installman3dir=''
1058 man3dir=''
1059 man3direxp=''
1060 man3ext=''
1061 modetype=''
1062 multiarch=''
1063 mydomain=''
1064 myhostname=''
1065 phostname=''
1066 c=''
1067 n=''
1068 d_eofnblk=''
1069 eagain=''
1070 o_nonblock=''
1071 rd_nodata=''
1072 need_va_copy=''
1073 netdb_hlen_type=''
1074 netdb_host_type=''
1075 netdb_name_type=''
1076 netdb_net_type=''
1077 groupcat=''
1078 hostcat=''
1079 passcat=''
1080 orderlib=''
1081 ranlib=''
1082 d_perl_otherlibdirs=''
1083 otherlibdirs=''
1084 package=''
1085 spackage=''
1086 pager=''
1087 api_revision=''
1088 api_subversion=''
1089 api_version=''
1090 api_versionstring=''
1091 patchlevel=''
1092 perl_patchlevel=''
1093 revision=''
1094 subversion=''
1095 version=''
1096 version_patchlevel_string=''
1097 perl5=''
1098 perladmin=''
1099 perlpath=''
1100 d_nv_preserves_uv=''
1101 d_nv_zero_is_allbits_zero=''
1102 i16size=''
1103 i16type=''
1104 i32size=''
1105 i32type=''
1106 i64size=''
1107 i64type=''
1108 i8size=''
1109 i8type=''
1110 ivsize=''
1111 ivtype=''
1112 nv_overflows_integers_at=''
1113 nv_preserves_uv_bits=''
1114 nvsize=''
1115 nvtype=''
1116 u16size=''
1117 u16type=''
1118 u32size=''
1119 u32type=''
1120 u64size=''
1121 u64type=''
1122 u8size=''
1123 u8type=''
1124 uvsize=''
1125 uvtype=''
1126 ivdformat=''
1127 nvEUformat=''
1128 nvFUformat=''
1129 nvGUformat=''
1130 nveformat=''
1131 nvfformat=''
1132 nvgformat=''
1133 uvXUformat=''
1134 uvoformat=''
1135 uvuformat=''
1136 uvxformat=''
1137 pidtype=''
1138 prefix=''
1139 prefixexp=''
1140 installprivlib=''
1141 privlib=''
1142 privlibexp=''
1143 prototype=''
1144 ptrsize=''
1145 d_PRIXU64=''
1146 d_PRId64=''
1147 d_PRIi64=''
1148 d_PRIo64=''
1149 d_PRIu64=''
1150 d_PRIx64=''
1151 sPRIXU64=''
1152 sPRId64=''
1153 sPRIi64=''
1154 sPRIo64=''
1155 sPRIu64=''
1156 sPRIx64=''
1157 d_quad=''
1158 quadkind=''
1159 quadtype=''
1160 uquadtype=''
1161 drand01=''
1162 randbits=''
1163 randfunc=''
1164 randseedtype=''
1165 seedfunc=''
1166 installscript=''
1167 scriptdir=''
1168 scriptdirexp=''
1169 selectminbits=''
1170 selecttype=''
1171 sh=''
1172 targetsh=''
1173 sig_count=''
1174 sig_name=''
1175 sig_name_init=''
1176 sig_num=''
1177 sig_num_init=''
1178 sig_size=''
1179 d_sitearch=''
1180 installsitearch=''
1181 sitearch=''
1182 sitearchexp=''
1183 installsitebin=''
1184 sitebin=''
1185 sitebinexp=''
1186 installsitehtml1dir=''
1187 sitehtml1dir=''
1188 sitehtml1direxp=''
1189 installsitehtml3dir=''
1190 sitehtml3dir=''
1191 sitehtml3direxp=''
1192 installsitelib=''
1193 sitelib=''
1194 sitelib_stem=''
1195 sitelibexp=''
1196 installsiteman1dir=''
1197 siteman1dir=''
1198 siteman1direxp=''
1199 installsiteman3dir=''
1200 siteman3dir=''
1201 siteman3direxp=''
1202 siteprefix=''
1203 siteprefixexp=''
1204 installsitescript=''
1205 sitescript=''
1206 sitescriptexp=''
1207 sizesize=''
1208 sizetype=''
1209 d_libname_unique=''
1210 so=''
1211 socksizetype=''
1212 sharpbang=''
1213 shsharp=''
1214 spitshell=''
1215 src=''
1216 ssizetype=''
1217 st_ino_sign=''
1218 st_ino_size=''
1219 startperl=''
1220 startsh=''
1221 stdchar=''
1222 d_stdio_stream_array=''
1223 stdio_stream_array=''
1224 sysman=''
1225 sGMTIME_max=''
1226 sGMTIME_min=''
1227 sLOCALTIME_max=''
1228 sLOCALTIME_min=''
1229 trnl=''
1230 uidformat=''
1231 uidsign=''
1232 uidsize=''
1233 uidtype=''
1234 archname64=''
1235 use64bitall=''
1236 use64bitint=''
1237 usecbacktrace=''
1238 dtrace=''
1239 usedtrace=''
1240 usefaststdio=''
1241 usekernprocpathname=''
1242 ccflags_uselargefiles=''
1243 ldflags_uselargefiles=''
1244 libswanted_uselargefiles=''
1245 uselargefiles=''
1246 uselongdouble=''
1247 usemorebits=''
1248 usemultiplicity=''
1249 nm_opt=''
1250 nm_so_opt=''
1251 runnm=''
1252 usenm=''
1253 usensgetexecutablepath=''
1254 useperlio=''
1255 usesocks=''
1256 d_oldpthreads=''
1257 use5005threads=''
1258 useithreads=''
1259 usereentrant=''
1260 usethreads=''
1261 incpath=''
1262 mips_type=''
1263 usrinc=''
1264 vaproto=''
1265 d_vendorarch=''
1266 installvendorarch=''
1267 vendorarch=''
1268 vendorarchexp=''
1269 d_vendorbin=''
1270 installvendorbin=''
1271 vendorbin=''
1272 vendorbinexp=''
1273 installvendorhtml1dir=''
1274 vendorhtml1dir=''
1275 vendorhtml1direxp=''
1276 installvendorhtml3dir=''
1277 vendorhtml3dir=''
1278 vendorhtml3direxp=''
1279 d_vendorlib=''
1280 installvendorlib=''
1281 vendorlib=''
1282 vendorlib_stem=''
1283 vendorlibexp=''
1284 installvendorman1dir=''
1285 vendorman1dir=''
1286 vendorman1direxp=''
1287 installvendorman3dir=''
1288 vendorman3dir=''
1289 vendorman3direxp=''
1290 usevendorprefix=''
1291 vendorprefix=''
1292 vendorprefixexp=''
1293 d_vendorscript=''
1294 installvendorscript=''
1295 vendorscript=''
1296 vendorscriptexp=''
1297 versiononly=''
1298 yacc=''
1299 yaccflags=''
1300 CONFIG=''
1301
1302 : Detect odd OSs
1303 define='define'
1304 undef='undef'
1305 smallmach='pdp11 i8086 z8000 i80286 iAPX286'
1306 rmlist=''
1307
1308 : We must find out about Eunice early
1309 eunicefix=':'
1310 if test -f /etc/unixtovms; then
1311         eunicefix=/etc/unixtovms
1312 fi
1313 if test -f /etc/unixtovms.exe; then
1314         eunicefix=/etc/unixtovms.exe
1315 fi
1316
1317 : Set executable suffix now -- needed before hints available
1318 if test -f "/libs/version.library"; then
1319 : Amiga OS
1320     _exe=""
1321 elif test -f "/system/gnu_library/bin/ar.pm"; then
1322 : Stratus VOS
1323     _exe=".pm"
1324 elif test -n "$DJGPP"; then
1325 : DOS DJGPP
1326     _exe=".exe"
1327 elif test -f /kern/cookiejar; then
1328 : MiNT
1329     _exe=""
1330 elif test -d c:/. -o -n "$is_os2" ; then
1331 : OS/2 or cygwin
1332     _exe=".exe"
1333 fi
1334
1335 groupstype=''
1336 i_whoami=''
1337 : Trailing extension.  Override this in a hint file, if needed.
1338 : Extra object files, if any, needed on this platform.
1339 archobjs=''
1340 archname=''
1341 : Possible local include directories to search.
1342 : Set locincpth to "" in a hint file to defeat local include searches.
1343 locincpth="/usr/local/include /opt/local/include /usr/gnu/include"
1344 locincpth="$locincpth /opt/gnu/include /usr/GNU/include /opt/GNU/include"
1345 :
1346 : no include file wanted by default
1347 inclwanted=''
1348
1349 : Enable -DEBUGGING and -DDEBUGGING from the command line
1350 EBUGGING=''
1351 DEBUGGING=''
1352
1353 libnames=''
1354 : change the next line if compiling for Xenix/286 on Xenix/386
1355 xlibpth='/usr/lib/386 /lib/386'
1356 : Possible local library directories to search.
1357 loclibpth="/usr/local/lib /opt/local/lib /usr/gnu/lib"
1358 loclibpth="$loclibpth /opt/gnu/lib /usr/GNU/lib /opt/GNU/lib"
1359
1360 : general looking path for locating libraries
1361 glibpth="/lib /usr/lib $xlibpth"
1362 glibpth="$glibpth /usr/ccs/lib /usr/ucblib /usr/local/lib"
1363 test -f /usr/shlib/libc.so && glibpth="/usr/shlib $glibpth"
1364 test -f /shlib/libc.so     && glibpth="/shlib $glibpth"
1365 test -d /usr/lib64         && glibpth="$glibpth /lib64 /usr/lib64 /usr/local/lib64"
1366
1367 : Private path used by Configure to find libraries.  Its value
1368 : is prepended to libpth. This variable takes care of special
1369 : machines, like the mips.  Usually, it should be empty.
1370 plibpth=''
1371
1372 : default library list
1373 libswanted=''
1374 : some systems want to use only the non-versioned libso:s
1375 ignore_versioned_solibs=''
1376 : set usethreads on the Configure command line to enable threads.
1377 usereentrant='undef'
1378 ccname=''
1379 ccversion=''
1380 perllibs=''
1381 : set useposix=false in your hint file to disable the POSIX extension.
1382 useposix=true
1383 : set useopcode=false in your hint file to disable the Opcode extension.
1384 useopcode=true
1385 archname64=''
1386 ccflags_uselargefiles=''
1387 ldflags_uselargefiles=''
1388 libswanted_uselargefiles=''
1389 : set usemultiplicity on the Configure command line to enable multiplicity.
1390 : set usesocks on the Configure command line to enable socks.
1391 : List of libraries we want.
1392 : If anyone needs extra -lxxx, put those in a hint file.
1393 libswanted="socket bind inet nsl nm ndbm gdbm dbm db malloc dl ld sun"
1394 libswanted="$libswanted m crypt sec util c cposix posix ucb bsd BSD"
1395 : We probably want to search /usr/shlib before most other libraries.
1396 : This is only used by the lib/ExtUtils/MakeMaker.pm routine extliblist.
1397 glibpth=`echo " $glibpth " | sed -e 's! /usr/shlib ! !'`
1398 glibpth="/usr/shlib $glibpth"
1399 : Do not use vfork unless overridden by a hint file.
1400 usevfork=false
1401
1402 : Find the basic shell for Bourne shell scripts
1403 case "$sh" in
1404 '')
1405         case "$SYSTYPE" in
1406         *bsd*|sys5*) xxx="/$SYSTYPE/bin/sh";;
1407         *) xxx='/bin/sh';;
1408         esac
1409         if test -f "$xxx"; then
1410                 sh="$xxx"
1411         else
1412                 : Build up a list and do a single loop so we can 'break' out.
1413                 pth=`echo $PATH | sed -e "s/$p_/ /g"`
1414                 for xxx in sh bash ksh pdksh ash; do
1415                         for p in $pth; do
1416                                 try="$try ${p}/${xxx}"
1417                         done
1418                 done
1419                 for xxx in $try; do
1420                         if test -f "$xxx"; then
1421                                 sh="$xxx";
1422                                 break
1423                         elif test "X$_exe" != X -a -f "$xxx$_exe"; then
1424                                 sh="$xxx";
1425                                 break
1426                         elif test -f "$xxx.exe"; then
1427                                 sh="$xxx";
1428                                 break
1429                         fi
1430                 done
1431         fi
1432         ;;
1433 esac
1434
1435 case "$sh" in
1436 '')     cat >&2 <<EOM
1437 $me:  Fatal Error:  I can't find a Bourne Shell anywhere.
1438
1439 Usually it's in /bin/sh.  How did you even get this far?
1440 Please contact me (Perl Maintainers) at perlbug@perl.org and
1441 we'll try to straighten this all out.
1442 EOM
1443         exit 1
1444         ;;
1445 esac
1446
1447 : When cross-compiling we need to separate the sh-to-run-Configure-with from the sh-to-use-in-Perl
1448 : default both to the same thing, cross-compilers can then set targetsh differently if they like
1449 targetsh=$sh
1450
1451 : see if sh knows # comments
1452 if `$sh -c '#' >/dev/null 2>&1`; then
1453         shsharp=true
1454         spitshell=cat
1455         xcat=/bin/cat
1456         test -f $xcat$_exe || xcat=/usr/bin/cat
1457         if test ! -f $xcat$_exe; then
1458                 for p in `echo $PATH | sed -e "s/$p_/ /g"` $paths; do
1459                         if test -f $p/cat$_exe; then
1460                                 xcat=$p/cat
1461                                 break
1462                         fi
1463                 done
1464                 if test ! -f $xcat$_exe; then
1465                         echo "Can't find cat anywhere!"
1466                         exit 1
1467                 fi
1468         fi
1469         echo "#!$xcat" >sharp
1470         $eunicefix sharp
1471         chmod +x sharp
1472         ./sharp > today 2>/dev/null
1473         if test -s today; then
1474                 sharpbang='#!'
1475         else
1476                 echo "#! $xcat" > sharp
1477                 $eunicefix sharp
1478                 chmod +x sharp
1479                 ./sharp > today 2>/dev/null
1480                 if test -s today; then
1481                         sharpbang='#! '
1482                 else
1483                         sharpbang=': use '
1484                 fi
1485         fi
1486 else
1487         echo " "
1488         echo "Your $sh doesn't grok # comments--I will strip them later on."
1489         shsharp=false
1490         cd ..
1491         echo "exec grep -v '^[  ]*#'" >spitshell
1492         chmod +x spitshell
1493         $eunicefix spitshell
1494         spitshell=`pwd`/spitshell
1495         cd UU
1496         echo "I presume that if # doesn't work, #! won't work either!"
1497         sharpbang=': use '
1498 fi
1499 rm -f sharp today
1500
1501 : figure out how to guarantee sh startup
1502 case "$startsh" in
1503 '') startsh=${sharpbang}${sh} ;;
1504 *)
1505 esac
1506 cat >sharp <<EOSS
1507 $startsh
1508 set abc
1509 test "$?abc" != 1
1510 EOSS
1511
1512 chmod +x sharp
1513 $eunicefix sharp
1514 if ./sharp; then
1515         : echo "Yup, it does."
1516 else
1517         echo "Hmm... '$startsh' does not guarantee sh startup..."
1518         echo "You may have to fix up the shell scripts to make sure $sh runs them."
1519 fi
1520 rm -f sharp
1521
1522 : Save command line options in file UU/cmdline.opt for later use in
1523 : generating config.sh.
1524 cat > cmdline.opt <<EOSH
1525 : Configure command line arguments.
1526 config_arg0='$0'
1527 config_args='$*'
1528 config_argc=$#
1529 EOSH
1530 argn=1
1531 args_exp=''
1532 args_sep=''
1533 for arg in "$@"; do
1534         cat >>cmdline.opt <<EOSH
1535 config_arg$argn='$arg'
1536 EOSH
1537         cat <<EOC | sed -e "s/'/'"'"'"'"'"'"'/g" > cmdl.opt
1538 $arg
1539 EOC
1540         arg_exp=`cat cmdl.opt`
1541         args_exp="$args_exp$args_sep'$arg_exp'"
1542         argn=`expr $argn + 1`
1543         args_sep=' '
1544 done
1545 rm -f cmdl.opt
1546
1547 : produce awk script to parse command line options
1548 cat >options.awk <<'EOF'
1549 BEGIN {
1550         optstr = "A:dD:eEf:hKOrsSU:V";  # getopt-style specification
1551
1552         len = length(optstr);
1553         for (i = 1; i <= len; i++) {
1554                 c = substr(optstr, i, 1);
1555                 if (i < len) a = substr(optstr, i + 1, 1); else a = "";
1556                 if (a == ":") {
1557                         arg[c] = 1;
1558                         i++;
1559                 }
1560                 opt[c] = 1;
1561         }
1562 }
1563 {
1564         expect = 0;
1565         str = $0;
1566         if (substr(str, 1, 1) != "-") {
1567                 printf("'%s'\n", str);
1568                 next;
1569         }
1570         len = length($0);
1571         for (i = 2; i <= len; i++) {
1572                 c = substr(str, i, 1);
1573                 if (!opt[c]) {
1574                         printf("-%s\n", substr(str, i));
1575                         next;
1576                 }
1577                 printf("-%s\n", c);
1578                 if (arg[c]) {
1579                         if (i < len)
1580                                 printf("'%s'\n", substr(str, i + 1));
1581                         else
1582                                 expect = 1;
1583                         next;
1584                 }
1585         }
1586 }
1587 END {
1588         if (expect)
1589                 print "?";
1590 }
1591 EOF
1592
1593 : process the command line options
1594 set X `for arg in "$@"; do echo "X$arg"; done |
1595         sed -e s/X// | awk -f options.awk`
1596 eval "set $*"
1597 shift
1598 rm -f options.awk
1599
1600 : set up default values
1601 fastread=''
1602 reuseval=false
1603 config_sh=''
1604 alldone=''
1605 error=''
1606 silent=''
1607 extractsh=''
1608 override=''
1609 knowitall=''
1610 rm -f optdef.sh posthint.sh
1611 cat >optdef.sh <<EOS
1612 $startsh
1613 EOS
1614
1615
1616 : option parsing
1617 while test $# -gt 0; do
1618         case "$1" in
1619         -d) shift; fastread=yes;;
1620         -e) shift; alldone=cont;;
1621         -f)
1622                 shift
1623                 cd ..
1624                 if test -r "$1"; then
1625                         config_sh="$1"
1626                 else
1627                         echo "$me: cannot read config file $1." >&2
1628                         error=true
1629                 fi
1630                 cd UU
1631                 shift;;
1632         --help|\
1633         -h) shift; error=true;;
1634         -r) shift; reuseval=true;;
1635         -s) shift; silent=true; realsilent=true;;
1636         -E) shift; alldone=exit;;
1637         -K) shift; knowitall=true;;
1638         -O) shift; override=true;;
1639         -S) shift; silent=true; extractsh=true;;
1640         -D)
1641                 shift
1642                 case "$1" in
1643                 *=)
1644                         echo "$me: use '-U symbol=', not '-D symbol='." >&2
1645                         echo "$me: ignoring -D $1" >&2
1646                         ;;
1647                 *=*) echo "$1" | \
1648                                 sed -e "s/'/'\"'\"'/g" -e "s/=\(.*\)/='\1'/" >> optdef.sh;;
1649                 *) echo "$1='define'" >> optdef.sh;;
1650                 esac
1651                 shift
1652                 ;;
1653         -U)
1654                 shift
1655                 case "$1" in
1656                 *=) echo "$1" >> optdef.sh;;
1657                 *=*)
1658                         echo "$me: use '-D symbol=val', not '-U symbol=val'." >&2
1659                         echo "$me: ignoring -U $1" >&2
1660                         ;;
1661                 *) echo "$1='undef'" >> optdef.sh;;
1662                 esac
1663                 shift
1664                 ;;
1665         -A)
1666             shift
1667             xxx=''
1668             yyy="$1"
1669             zzz=''
1670             uuu=undef
1671             case "$yyy" in
1672             *=*) zzz=`echo "$yyy"|sed 's!=.*!!'`
1673                  case "$zzz" in
1674                  *:*) zzz='' ;;
1675                  *)   xxx=append
1676                       zzz=" "`echo "$yyy"|sed 's!^[^=]*=!!'`
1677                       yyy=`echo "$yyy"|sed 's!=.*!!'` ;;
1678                  esac
1679                  ;;
1680             esac
1681             case "$xxx" in
1682             '')  case "$yyy" in
1683                  *:*) xxx=`echo "$yyy"|sed 's!:.*!!'`
1684                       yyy=`echo "$yyy"|sed 's!^[^:]*:!!'`
1685                       zzz=`echo "$yyy"|sed 's!^[^=]*=!!'`
1686                       yyy=`echo "$yyy"|sed 's!=.*!!'` ;;
1687                  *)   xxx=`echo "$yyy"|sed 's!:.*!!'`
1688                       yyy=`echo "$yyy"|sed 's!^[^:]*:!!'` ;;
1689                  esac
1690                  ;;
1691             esac
1692             case "$xxx" in
1693             append)
1694                 echo "$yyy=\"\${$yyy}$zzz\""    >> posthint.sh ;;
1695             clear)
1696                 echo "$yyy=''"                  >> posthint.sh ;;
1697             define)
1698                 case "$zzz" in
1699                 '') zzz=define ;;
1700                 esac
1701                 echo "$yyy='$zzz'"              >> posthint.sh ;;
1702             eval)
1703                 echo "eval \"$yyy=$zzz\""       >> posthint.sh ;;
1704             prepend)
1705                 echo "$yyy=\"$zzz\${$yyy}\""    >> posthint.sh ;;
1706             undef)
1707                 case "$zzz" in
1708                 '') zzz="$uuu" ;;
1709                 esac
1710                 echo "$yyy=$zzz"                >> posthint.sh ;;
1711             *)  echo "$me: unknown -A command '$xxx', ignoring -A $1" >&2 ;;
1712             esac
1713             shift
1714             ;;
1715         -V) echo "$me generated by metaconfig 3.5 PL0." >&2
1716             exit 0;;
1717         --) break;;
1718         -*) echo "$me: unknown option $1" >&2; shift; error=true;;
1719         *) break;;
1720         esac
1721 done
1722
1723 case "$error" in
1724 true)
1725         cat >&2 <<EOM
1726 Usage: $me [-dehrsEKOSV] [-f config.sh] [-D symbol] [-D symbol=value]
1727                  [-U symbol] [-U symbol=] [-A command:symbol...]
1728   -d : use defaults for all answers.
1729   -e : go on without questioning past the production of config.sh.
1730   -f : specify an alternate default configuration file.
1731   -h : print this help message and exit (with an error status).
1732   -r : reuse C symbols value if possible (skips costly nm extraction).
1733   -s : silent mode, only echoes questions and essential information.
1734   -D : define symbol to have some value:
1735          -D symbol         symbol gets the value 'define'
1736          -D symbol=value   symbol gets the value 'value'
1737        common used examples (see INSTALL for more info):
1738          -Duse64bitint            use 64bit integers
1739          -Duse64bitall            use 64bit integers and pointers
1740          -Dusethreads             use thread support
1741          -Dinc_version_list=none  do not include older perl trees in @INC
1742          -DEBUGGING=none          DEBUGGING options
1743          -Dcc=gcc                 choose your compiler
1744          -Dprefix=/opt/perl5      choose your destination
1745   -E : stop at the end of questions, after having produced config.sh.
1746   -K : do not use unless you know what you are doing.
1747   -O : let -D and -U override definitions from loaded configuration file.
1748   -S : perform variable substitutions on all .SH files (can mix with -f)
1749   -U : undefine symbol:
1750          -U symbol    symbol gets the value 'undef'
1751          -U symbol=   symbol gets completely empty
1752        e.g.:  -Uversiononly
1753   -A : manipulate symbol after the platform specific hints have been applied:
1754          -A append:symbol=value   append value to symbol
1755          -A symbol=value          like append:, but with a separating space
1756          -A define:symbol=value   define symbol to have value
1757          -A clear:symbol          define symbol to be ''
1758          -A define:symbol         define symbol to be 'define'
1759          -A eval:symbol=value     define symbol to be eval of value
1760          -A prepend:symbol=value  prepend value to symbol
1761          -A undef:symbol          define symbol to be 'undef'
1762          -A undef:symbol=         define symbol to be ''
1763        e.g.:  -A prepend:libswanted='cl pthread '
1764               -A ccflags=-DSOME_MACRO
1765   -V : print version number and exit (with a zero status).
1766 EOM
1767         exit 1
1768         ;;
1769 esac
1770
1771 : Sanity checks
1772 case "$fastread$alldone" in
1773 yescont|yesexit) ;;
1774 *)
1775         case "$extractsh" in
1776         true) ;;
1777         *)
1778                 if test ! -t 0; then
1779                         echo "Say 'sh Configure', not 'sh <Configure'"
1780                         exit 1
1781                 fi
1782                 ;;
1783         esac
1784         ;;
1785 esac
1786
1787 exec 4>&1
1788 case "$silent" in
1789 true) exec 1>/dev/null;;
1790 esac
1791
1792 : run the defines and the undefines, if any, but leave the file out there...
1793 touch optdef.sh
1794 . ./optdef.sh
1795 : create the posthint manipulation script and leave the file out there...
1796 touch posthint.sh
1797
1798 : set package name
1799 package='perl5'
1800 first=`echo $package | sed -e 's/^\(.\).*/\1/'`
1801 last=`echo $package | sed -e 's/^.\(.*\)/\1/'`
1802 case "`echo AbyZ | tr '[:lower:]' '[:upper:]' 2>/dev/null`" in
1803 ABYZ) spackage=`echo $first | tr '[:lower:]' '[:upper:]'`$last;;
1804 *) spackage=`echo $first | tr '[a-z]' '[A-Z]'`$last;;
1805 esac
1806
1807 : Some greps do not return status, grrr.
1808 echo "grimblepritz" >grimble
1809 if grep blurfldyick grimble >/dev/null 2>&1 ; then
1810         contains=contains
1811 elif grep grimblepritz grimble >/dev/null 2>&1 ; then
1812         contains=grep
1813 else
1814         contains=contains
1815 fi
1816 rm -f grimble
1817 : the following should work in any shell
1818 case "$contains" in
1819 contains*)
1820         echo " "
1821         echo "AGH!  Grep doesn't return a status.  Attempting remedial action."
1822         cat >contains <<'EOSS'
1823 grep "$1" "$2" >.greptmp && cat .greptmp && test -s .greptmp
1824 EOSS
1825 chmod +x contains
1826 esac
1827
1828 : Find the path to the source tree
1829 case "$src" in
1830 '') case "$0" in
1831     */*) src=`echo $0 | sed -e 's%/[^/][^/]*$%%'`
1832          case "$src" in
1833          /*)    ;;
1834          .)     ;;
1835          *)     src=`cd ../$src && pwd` ;;
1836          esac
1837          ;;
1838     *)   src='.';;
1839     esac;;
1840 esac
1841 case "$src" in
1842 '')     src=/
1843         rsrc=/
1844         ;;
1845 /*)     rsrc="$src";;
1846 *)      rsrc="../$src";;
1847 esac
1848 if test -f $rsrc/Configure && \
1849         $contains "^package='$package'\$" $rsrc/Configure >/dev/null 2>&1
1850 then
1851    : found it, so we are ok.
1852 else
1853         rsrc=''
1854         for src in . .. ../.. ../../.. ../../../..; do
1855                 if test -f ../$src/Configure && \
1856                         $contains "^package=$package$" ../$src/Configure >/dev/null 2>&1
1857                 then
1858                         rsrc=../$src
1859                         break
1860                 fi
1861         done
1862 fi
1863 case "$rsrc" in
1864 '')
1865         cat <<EOM >&4
1866
1867 Sorry, I can't seem to locate the source dir for $package.  Please start
1868 Configure with an explicit path -- i.e. /some/path/Configure.
1869
1870 EOM
1871         exit 1
1872         ;;
1873 ../.)   rsrc='..';;
1874 *)
1875         echo " "
1876         echo "Sources for $package found in \"$src\"." >&4
1877         ;;
1878 esac
1879
1880 : script used to extract .SH files with variable substitutions
1881 cat >extract <<'EOS'
1882 PERL_CONFIG_SH=true
1883 echo "Doing variable substitutions on .SH files..."
1884 if test -f MANIFEST; then
1885         set x `awk '{print $1}' < MANIFEST | grep '\.SH$'`
1886 else
1887         echo "(Looking for .SH files under the source directory.)"
1888         set x `(cd "$src"; find . -name "*.SH" -print)`
1889 fi
1890 shift
1891 case $# in
1892 0) set x `(cd "$src"; echo *.SH)`; shift;;
1893 esac
1894 if test ! -f "$src/$1"; then
1895         shift
1896 fi
1897 mkdir_p='
1898 name=$1;
1899 create="";
1900 while test $name; do
1901         if test ! -d "$name"; then
1902                 create="$name $create";
1903                 name=`echo $name | sed -e "s|^[^/]*$||"`;
1904                 name=`echo $name | sed -e "s|\(.*\)/.*|\1|"`;
1905         else
1906                 name="";
1907         fi;
1908 done;
1909 for file in $create; do
1910         mkdir $file;
1911 done
1912 '
1913 for file in $*; do
1914         case "$src" in
1915         ".")
1916                 case "$file" in
1917                 */*)
1918                         dir=`expr X$file : 'X\(.*\)/'`
1919                         file=`expr X$file : 'X.*/\(.*\)'`
1920                         (cd "$dir" && . ./$file)
1921                         ;;
1922                 *)
1923                         . ./$file
1924                         ;;
1925                 esac
1926                 ;;
1927         *)
1928                 case "$file" in
1929                 */*)
1930                         dir=`expr X$file : 'X\(.*\)/'`
1931                         file=`expr X$file : 'X.*/\(.*\)'`
1932                         (set x $dir; shift; eval $mkdir_p)
1933                         sh <"$src/$dir/$file"
1934                         ;;
1935                 *)
1936                         sh <"$src/$file"
1937                         ;;
1938                 esac
1939                 ;;
1940         esac
1941 done
1942 if test -f "$src/config_h.SH"; then
1943         if test ! -f config.h; then
1944         : oops, they left it out of MANIFEST, probably, so do it anyway.
1945         . "$src/config_h.SH"
1946         fi
1947 fi
1948 EOS
1949
1950 : extract files and exit if asked to do so
1951 case "$extractsh" in
1952 true)
1953         case "$realsilent" in
1954         true) ;;
1955         *) exec 1>&4;;
1956         esac
1957         case "$config_sh" in
1958         '') config_sh='config.sh';;
1959         esac
1960         echo " "
1961         echo "Fetching answers from $config_sh..."
1962         cd ..
1963         . $config_sh
1964         test "$override" && . ./optdef.sh
1965         echo " "
1966         . UU/extract
1967         rm -rf UU
1968         echo "Extraction done."
1969         exit 0
1970         ;;
1971 esac
1972
1973 : Eunice requires " " instead of "", can you believe it
1974 echo " "
1975 : Here we go...
1976 echo "Beginning of configuration questions for $package."
1977
1978 trap 'echo " "; test -d ../UU && rm -rf X $rmlist; exit 1' 1 2 3 15
1979
1980 : first determine how to suppress newline on echo command
1981 echo " "
1982 echo "Checking echo to see how to suppress newlines..."
1983 (echo "hi there\c" ; echo " ") >.echotmp
1984 if $contains c .echotmp >/dev/null 2>&1 ; then
1985         echo "...using -n."
1986         n='-n'
1987         c=''
1988 else
1989         cat <<'EOM'
1990 ...using \c
1991 EOM
1992         n=''
1993         c='\c'
1994 fi
1995 echo $n "The star should be here-->$c"
1996 echo '*'
1997 rm -f .echotmp
1998
1999 : Now test for existence of everything in MANIFEST
2000 echo " "
2001 if test -f "$rsrc/MANIFEST"; then
2002         echo "First let's make sure your kit is complete.  Checking..." >&4
2003         awk '$1 !~ /PACK[A-Z]+/ {print $1}' "$rsrc/MANIFEST" | \
2004                 (split -l 50 2>/dev/null || split -50)
2005         rm -f missing
2006         tmppwd=`pwd`
2007         for filelist in x??; do
2008                 (cd "$rsrc"; ls `cat "$tmppwd/$filelist"` \
2009                         >/dev/null 2>>"$tmppwd/missing")
2010         done
2011         if test -s missing; then
2012                 cat missing >&4
2013                 cat >&4 <<'EOM'
2014
2015 THIS PACKAGE SEEMS TO BE INCOMPLETE.
2016
2017 You have the option of continuing the configuration process, despite the
2018 distinct possibility that your kit is damaged, by typing 'y'es.  If you
2019 do, don't blame me if something goes wrong.  I advise you to type 'n'o
2020 and contact the author (perlbug@perl.org).
2021
2022 EOM
2023                 echo $n "Continue? [n] $c" >&4
2024                 read ans
2025                 case "$ans" in
2026                 y*)
2027                         echo "Continuing..." >&4
2028                         rm -f missing
2029                         ;;
2030                 *)
2031                         echo "ABORTING..." >&4
2032                         kill $$
2033                         ;;
2034                 esac
2035         else
2036                 echo "Looks good..."
2037         fi
2038 else
2039         echo "There is no MANIFEST file.  I hope your kit is complete !"
2040 fi
2041 rm -f missing x??
2042
2043 : Find the appropriate value for a newline for tr
2044 echo " "
2045 if test -n "$DJGPP"; then
2046        trnl='\012'
2047 fi
2048 if test X"$trnl" = X; then
2049         case "`echo foo|tr '\n' x 2>/dev/null`" in
2050         foox) trnl='\n' ;;
2051         esac
2052 fi
2053 if test X"$trnl" = X; then
2054         case "`echo foo|tr '\012' x 2>/dev/null`" in
2055         foox) trnl='\012' ;;
2056         esac
2057 fi
2058 if test X"$trnl" = X; then
2059        case "`echo foo|tr '\r\n' xy 2>/dev/null`" in
2060        fooxy) trnl='\n\r' ;;
2061        esac
2062 fi
2063 if test X"$trnl" = X; then
2064         cat <<EOM >&2
2065
2066 $me: Fatal Error: cannot figure out how to translate newlines with 'tr'.
2067
2068 EOM
2069         exit 1
2070 fi
2071
2072 : compute the number of columns on the terminal for proper question formatting
2073 case "$COLUMNS" in
2074 '') COLUMNS='80';;
2075 esac
2076
2077 : set up the echo used in my read
2078 myecho="case \"\$xxxm\" in
2079 '') echo $n \"\$rp $c\" >&4;;
2080 *) case \"\$rp\" in
2081         '') echo $n \"[\$xxxm] $c\";;
2082         *)
2083                 if test \`echo \"\$rp [\$xxxm]  \" | wc -c\` -ge $COLUMNS; then
2084                         echo \"\$rp\" >&4
2085                         echo $n \"[\$xxxm] $c\" >&4
2086                 else
2087                         echo $n \"\$rp [\$xxxm] $c\" >&4
2088                 fi
2089                 ;;
2090         esac;;
2091 esac"
2092
2093 : now set up to do reads with possible shell escape and default assignment
2094 cat <<EOSC >myread
2095 $startsh
2096 xxxm=\$dflt
2097 $myecho
2098 ans='!'
2099 case "\$fastread" in
2100 yes) case "\$dflt" in
2101         '') ;;
2102         *) ans='';
2103                 case "\$silent-\$rp" in
2104                 true-) ;;
2105                 *) echo " " >&4;;
2106                 esac;;
2107         esac;;
2108 *) case "\$silent" in
2109         true) case "\$rp" in
2110                 '') ans='';;
2111                 esac;;
2112         esac;;
2113 esac
2114 while expr "X\$ans" : "X!" >/dev/null; do
2115         read answ
2116         set x \$xxxm
2117         shift
2118         aok=''; eval "ans=\\"\$answ\\"" && aok=y
2119         case  "\$answ" in
2120         "!")
2121                 sh 1>&4
2122                 echo " "
2123                 $myecho
2124                 ;;
2125         !*)
2126                 set x \`expr "X\$ans" : "X!\(.*\)\$"\`
2127                 shift
2128                 sh 1>&4 -c "\$*"
2129                 echo " "
2130                 $myecho
2131                 ;;
2132         "\$ans")
2133                 case "\$ans" in
2134                 \\&*)
2135                         set x \`expr "X\$ans" : "X&\(.*\)\$"\`
2136                         shift
2137                         case "\$1" in
2138                         -d)
2139                                 fastread=yes
2140                                 echo "(OK, I'll run with -d after this question.)" >&4
2141                                 ;;
2142                         -*)
2143                                 echo "*** Sorry, \$1 not supported yet." >&4
2144                                 ;;
2145                         esac
2146                         $myecho
2147                         ans=!
2148                         ;;
2149                 esac;;
2150         *)
2151                 case "\$aok" in
2152                 y)
2153                         echo "*** Substitution done -- please confirm."
2154                         xxxm="\$ans"
2155                         ans=\`echo $n "\$ans$c" | tr '$trnl' ' '\`
2156                         xxxm="\$ans"
2157                         ans=!
2158                         ;;
2159                 *)
2160                         echo "*** Error -- try again."
2161                         ans=!
2162                         ;;
2163                 esac
2164                 $myecho
2165                 ;;
2166         esac
2167         case "\$ans\$xxxm\$nostick" in
2168         '')
2169                 ans=!
2170                 $myecho
2171                 ;;
2172         esac
2173 done
2174 case "\$ans" in
2175 '') ans="\$xxxm";;
2176 esac
2177 EOSC
2178
2179 : create .config dir to save info across Configure sessions
2180 test -d ../.config || mkdir ../.config
2181 cat >../.config/README <<EOF
2182 This directory created by Configure to save information that should
2183 persist across sessions for $package.
2184
2185 You may safely delete it if you wish.
2186 EOF
2187
2188 : See if we are using a devel version and want that
2189 xversion=`awk '/define[         ]+PERL_VERSION/ {print $3}' $rsrc/patchlevel.h`
2190 case "$usedevel" in
2191 $define|true|[yY]*)
2192     usedevel="$define" ;;
2193 *) case "$xversion" in
2194    *[13579])
2195         cat >&4 <<EOH
2196 *** WHOA THERE!!! ***
2197
2198     This is an UNSTABLE DEVELOPMENT release.
2199     The version of this $package distribution is $xversion, that is, odd,
2200     (as opposed to even) and that signifies a development release.
2201     If you want a maintenance release, you want an even-numbered version.
2202
2203     Do ***NOT*** install this into production use.
2204     Data corruption and crashes are possible.
2205
2206     It is most seriously suggested that you do not continue any further
2207     unless you want to help in developing and debugging Perl.
2208
2209     If you *still* want to build perl, you can answer 'y' now,
2210     or pass -Dusedevel to Configure.
2211
2212 EOH
2213         rp='Do you really want to continue?'
2214         dflt='n'
2215         . ./myread
2216         case "$ans" in
2217         [yY]) echo >&4 "Okay, continuing."
2218               usedevel="$define" ;;
2219         *) echo >&4 "Okay, bye."
2220            exit 1
2221            ;;
2222         esac
2223         ;;
2224     esac
2225     usedevel="$undef"
2226     ;;
2227 esac
2228 case "$usedevel" in
2229 $define|true|[yY]*)
2230         case "$versiononly" in
2231         '') versiononly="$define" ;;
2232         esac
2233         case "$installusrbinperl" in
2234         '') installusrbinperl="$undef" ;;
2235         esac
2236         ;;
2237 esac
2238
2239 : general instructions
2240 needman=true
2241 firsttime=true
2242 user=`(logname) 2>/dev/null`
2243 case "$user" in
2244 '') user=`whoami 2>&1`;;
2245 esac
2246 if $contains "^$user\$" ../.config/instruct >/dev/null 2>&1; then
2247         firsttime=false
2248         echo " "
2249         rp='Would you like to see the instructions?'
2250         dflt=n
2251         . ./myread
2252         case "$ans" in
2253         [yY]*) ;;
2254         *) needman=false;;
2255         esac
2256 fi
2257 if $needman; then
2258         cat <<EOH
2259
2260 This installation shell script will examine your system and ask you questions
2261 to determine how the perl5 package should be installed. If you get
2262 stuck on a question, you may use a ! shell escape to start a subshell or
2263 execute a command.  Many of the questions will have default answers in square
2264 brackets; typing carriage return will give you the default.
2265
2266 On some of the questions which ask for file or directory names you are allowed
2267 to use the ~name construct to specify the login directory belonging to "name",
2268 even if you don't have a shell which knows about that.  Questions where this is
2269 allowed will be marked "(~name ok)".
2270
2271 EOH
2272         rp=''
2273         dflt='Type carriage return to continue'
2274         . ./myread
2275         cat <<'EOH'
2276
2277 The prompter used in this script allows you to use shell variables and
2278 backticks in your answers.  You may use $1, $2, etc...  to refer to the words
2279 in the default answer, as if the default line was a set of arguments given to a
2280 script shell.  This means you may also use $* to repeat the whole default line,
2281 so you do not have to re-type everything to add something to the default.
2282
2283 Every time there is a substitution, you will have to confirm.  If there is an
2284 error (e.g. an unmatched backtick), the default answer will remain unchanged
2285 and you will be prompted again.
2286
2287 If you are in a hurry, you may run 'Configure -d'.  This will bypass nearly all
2288 the questions and use the computed defaults (or the previous answers if there
2289 was already a config.sh file). Type 'Configure -h' for a list of options.
2290 You may also start interactively and then answer '& -d' at any prompt to turn
2291 on the non-interactive behaviour for the remainder of the execution.
2292
2293 EOH
2294         . ./myread
2295         cat <<EOH
2296
2297 Much effort has been expended to ensure that this shell script will run on any
2298 Unix system.  If despite that it blows up on yours, your best bet is to edit
2299 Configure and run it again.  If you can't run Configure for some reason,
2300 you'll have to generate a config.sh file by hand.  Whatever problems you
2301 have, let me (perlbug@perl.org) know how I blew it.
2302
2303 This installation script affects things in two ways:
2304
2305 1) it may do direct variable substitutions on some of the files included
2306    in this kit.
2307 2) it builds a config.h file for inclusion in C programs.  You may edit
2308    any of these files as the need arises after running this script.
2309
2310 If you make a mistake on a question, there is no easy way to back up to it
2311 currently.  The easiest thing to do is to edit config.sh and rerun all the SH
2312 files.  Configure will offer to let you do this before it runs the SH files.
2313
2314 EOH
2315         dflt='Type carriage return to continue'
2316         . ./myread
2317         case "$firsttime" in
2318         true) echo $user >>../.config/instruct;;
2319         esac
2320 fi
2321
2322 : Set 'sysroot' to change the logical root directory to your headers and libraries see man gcc
2323 : This is primarily meant for cross-compile environments, and may fail to be useful in other cases
2324 if test "X$sysroot" = X; then
2325     sysroot=""
2326 else
2327     case "$cc" in
2328         *gcc*|*g++*)
2329             echo "Using $sysroot to find your headers and libraries, adding to ccflags"
2330             # _sysroot is used in places where we need --sysroot=foo
2331             # but using the rest of the flags could cause issues.
2332             _sysroot="--sysroot=$sysroot";
2333             case "$ccflags" in
2334                 *sysroot*) ;;
2335                 'undef'|*)
2336                 ccflags="$ccflags $_sysroot"
2337             esac
2338             case "$ldflags" in
2339                 *sysroot*) ;;
2340                 'undef'|*)
2341                 ldflags="$ldflags $_sysroot"
2342             esac
2343             case "$cppflags" in
2344                 *sysroot*) ;;
2345                 'undef'|*)
2346                 cppflags="$cppflags $_sysroot"
2347             esac
2348             # lddlflags updated below in lddlflags section;
2349             # same with cccdlflags
2350             ;;
2351     esac
2352
2353     # Adjust some defaults to also use $sysroot
2354     for var in xlibpth loclibpth locincpth glibpth; do
2355         eval xxx=\$$var
2356         eval $var=''
2357         for path in $xxx; do
2358             eval $var=\"\$$var $sysroot$path\"
2359         done
2360     done
2361
2362 fi
2363
2364 : find out where common programs are
2365 echo " "
2366 echo "Locating common programs..." >&4
2367 cat <<EOSC >loc
2368 $startsh
2369 case \$# in
2370 0) exit 1;;
2371 esac
2372 thing=\$1
2373 shift
2374 dflt=\$1
2375 shift
2376 for dir in \$*; do
2377         case "\$thing" in
2378         .)
2379         if test -d \$dir/\$thing; then
2380                 echo \$dir
2381                 exit 0
2382         fi
2383         ;;
2384         *)
2385         for thisthing in \$dir/\$thing; do
2386                 : just loop through to pick last item
2387         done
2388         if test -f \$thisthing; then
2389                 echo \$thisthing
2390                 exit 0
2391         elif test "X$_exe" != X -a -f \$thisthing$_exe; then
2392                 echo \$thisthing
2393                 exit 0
2394         elif test -f \$dir/\$thing.exe; then
2395                 if test -n "$DJGPP"; then
2396                         echo \$dir/\$thing.exe
2397                 elif test "$eunicefix" != ":"; then
2398                         : on Eunice apparently
2399                         echo \$dir/\$thing
2400                 fi
2401                 exit 0
2402         fi
2403         ;;
2404         esac
2405 done
2406 echo \$dflt
2407 exit 1
2408 EOSC
2409 chmod +x loc
2410 $eunicefix loc
2411 loclist="
2412 awk
2413 cat
2414 chmod
2415 comm
2416 cp
2417 echo
2418 expr
2419 grep
2420 ls
2421 mkdir
2422 rm
2423 sed
2424 sort
2425 touch
2426 tr
2427 uniq
2428 "
2429 trylist="
2430 ar
2431 bison
2432 byacc
2433 cpp
2434 csh
2435 date
2436 egrep
2437 gmake
2438 gzip
2439 less
2440 ln
2441 make
2442 more
2443 nm
2444 nroff
2445 perl
2446 pg
2447 test
2448 uname
2449 zip
2450 "
2451 pth=`echo $PATH | sed -e "s/$p_/ /g"`
2452 pth="$pth $sysroot/lib $sysroot/usr/lib"
2453 for file in $loclist; do
2454         eval xxx=\$$file
2455         case "$xxx" in
2456         /*|?:[\\/]*)
2457                 if test -f "$xxx"; then
2458                         : ok
2459                 else
2460                         echo "WARNING: no $xxx -- ignoring your setting for $file." >&4
2461                         xxx=`./loc $file $file $pth`
2462                 fi
2463                 ;;
2464         '') xxx=`./loc $file $file $pth`;;
2465         *) xxx=`./loc $xxx $xxx $pth`;;
2466         esac
2467         eval $file=$xxx$_exe
2468         eval _$file=$xxx
2469         case "$xxx" in
2470         /*)
2471                 echo $file is in $xxx.
2472                 ;;
2473         ?:[\\/]*)
2474                 echo $file is in $xxx.
2475                 ;;
2476         *)
2477                 echo "I don't know where '$file' is, and my life depends on it." >&4
2478                 echo "Go find a public domain implementation or fix your PATH setting!" >&4
2479                 exit 1
2480                 ;;
2481         esac
2482 done
2483 echo " "
2484 echo "Don't worry if any of the following aren't found..."
2485 say=offhand
2486 for file in $trylist; do
2487         eval xxx=\$$file
2488         case "$xxx" in
2489         /*|?:[\\/]*)
2490                 if test -f "$xxx"; then
2491                         : ok
2492                 else
2493                         echo "WARNING: no $xxx -- ignoring your setting for $file." >&4
2494                         xxx=`./loc $file $file $pth`
2495                 fi
2496                 ;;
2497         '') xxx=`./loc $file $file $pth`;;
2498         *) xxx=`./loc $xxx $xxx $pth`;;
2499         esac
2500         eval $file=$xxx$_exe
2501         eval _$file=$xxx
2502         case "$xxx" in
2503         /*)
2504                 echo $file is in $xxx.
2505                 ;;
2506         ?:[\\/]*)
2507                 echo $file is in $xxx.
2508                 ;;
2509         *)
2510                 echo "I don't see $file out there, $say."
2511                 say=either
2512                 ;;
2513         esac
2514 done
2515 case "$egrep" in
2516 egrep)
2517         echo "Substituting grep for egrep."
2518         egrep=$grep
2519         _egrep=$grep
2520         ;;
2521 esac
2522 case "$less" in
2523 '')     ;;
2524 *)      if $less -R </dev/null >/dev/null 2>&1; then
2525                echo "Substituting less -R for less."
2526                less="$less -R"
2527                _less=$less
2528         fi
2529         ;;
2530 esac
2531 case "$ln" in
2532 ln)
2533         echo "Substituting cp for ln."
2534         ln=$cp
2535         _ln=$cp
2536         ;;
2537 esac
2538 case "$make" in
2539 make)
2540         case "$gmake" in
2541         gmake)
2542         echo "I can't find make or gmake, and my life depends on it." >&4
2543         echo "Go find a public domain implementation or fix your PATH setting!" >&4
2544         exit 1
2545         ;;
2546         esac
2547         ;;
2548 esac
2549 case "$gmake" in
2550 gmake)  ;;
2551 *)      # We can't have osname yet.
2552         if test -f "/system/gnu_library/bin/ar.pm"; then # Stratus VOS
2553                 # Assume that gmake, if found, is definitely GNU make
2554                 # and prefer it over the system make.
2555                 echo "Substituting gmake for make."
2556                 make=$gmake
2557                 _make=$gmake
2558         fi
2559         ;;
2560 esac
2561 case "$test" in
2562 test)
2563         echo "Hopefully test is built into your sh."
2564         ;;
2565 *)
2566         if `sh -c "PATH= test true" >/dev/null 2>&1`; then
2567                 echo "Using the test built into your sh."
2568                 test=test
2569                 _test=test
2570         fi
2571         ;;
2572 esac
2573 case "$echo" in
2574 echo)
2575         echo "Hopefully echo is built into your sh."
2576         ;;
2577 '') ;;
2578 *)
2579         echo " "
2580 echo "Checking compatibility between $echo and builtin echo (if any)..." >&4
2581         $echo $n "hi there$c" >foo1
2582         echo $n "hi there$c" >foo2
2583         if cmp foo1 foo2 >/dev/null 2>&1; then
2584                 echo "They are compatible.  In fact, they may be identical."
2585         else
2586                 case "$n" in
2587                 '-n') n='' c='\c';;
2588                 *) n='-n' c='';;
2589                 esac
2590                 cat <<FOO
2591 They are not compatible!  You are probably running ksh on a non-USG system.
2592 I'll have to use $echo instead of the builtin, since Bourne shell doesn't
2593 have echo built in and we may have to run some Bourne shell scripts.  That
2594 means I'll have to use '$n$c' to suppress newlines now.  Life is ridiculous.
2595
2596 FOO
2597                 $echo $n "The star should be here-->$c"
2598                 $echo "*"
2599         fi
2600         $rm -f foo1 foo2
2601         ;;
2602 esac
2603
2604 # This question was auctioned at YAPC::Europe-2007 in Vienna
2605 # I never promised you could answer it. I only auctioned the question.
2606 cat <<FOO
2607 The following message is sponsored by
2608
2609   Dresden.pm<--The stars should be here.
2610
2611 Dear Perl user, system administrator or package
2612 maintainer, the Perl community sends greetings to
2613 you. Do you (emblematical) greet back [Y/n]? n
2614
2615 FOO
2616
2617 : Check what type of C compiler we use
2618 cat <<EOS >trygcc
2619 $startsh
2620 EOS
2621 cat <<'EOSC' >>trygcc
2622 case "$cc" in
2623 '') ;;
2624 *)  $rm -f try try.*
2625     $cat >try.c <<EOM
2626 int main(int argc, char *argv[]) {
2627   return 0;
2628 }
2629 EOM
2630     if $cc -o try $ccflags $ldflags try.c; then
2631        :
2632     else
2633         echo "Uh-oh, the C compiler '$cc' doesn't seem to be working." >&4
2634         despair=yes
2635         trygcc=yes
2636         case "$cc" in
2637         *gcc*) trygcc=no ;;
2638         esac
2639         # Skip this test because it gives a false match on output like:
2640         #    ./trygcc: line 23: cc: command not found
2641         # case "`$cc -v -c try.c 2>&1`" in
2642         # *gcc*) trygcc=no ;;
2643         # esac
2644         if $test X"$trygcc" = Xyes; then
2645             if gcc -o try -c try.c; then
2646                 echo " "
2647                 echo "You seem to have a working gcc, though." >&4
2648                 # Switching compilers may undo the work of hints files.
2649                 # The most common problem is -D_REENTRANT for threads.
2650                 # This heuristic catches that case, but gets false positives
2651                 # if -Dusethreads was not actually specified.  Better to
2652                 # bail out here with a useful message than fail 
2653                 # mysteriously later. Should we perhaps just try to
2654                 # re-invoke Configure -Dcc=gcc config_args ?
2655                 if $test -f usethreads.cbu; then
2656                         $cat >&4 <<EOM 
2657
2658 *** However, any setting of the C compiler flags (e.g. for thread support)
2659 *** will be lost.  It may be necessary for you to restart Configure and
2660 *** add -Dcc=gcc to your Configure command line.
2661
2662 EOM
2663                         rp="Would you like to go ahead and try gcc anyway?"
2664                         dflt=n
2665                 else
2666                         rp="Would you like to use it?"
2667                         dflt=y
2668                 fi
2669                 if $test -f myread; then
2670                     . ./myread
2671                 else
2672                     if $test -f UU/myread; then
2673                         . ./UU/myread
2674                     else
2675                         echo "Cannot find myread, sorry.  Aborting." >&2
2676                         exit 1
2677                     fi
2678                 fi  
2679                 case "$ans" in
2680                 [yY]*) cc=gcc; ccname=gcc; ccflags=''; despair=no;
2681                 esac
2682             fi
2683         fi
2684     fi
2685     $rm -f try try.*
2686     ;;
2687 esac
2688 EOSC
2689
2690 cat <<EOS >checkcc
2691 $startsh
2692 EOS
2693 cat <<'EOSC' >>checkcc
2694 case "$cc" in        
2695 '') ;;
2696 *)  $rm -f try try.*              
2697     $cat >try.c <<EOM
2698 int main(int argc, char *argv[]) {
2699   return 0;
2700 }
2701 EOM
2702     if $cc -o try $ccflags $ldflags try.c; then
2703        :
2704     else
2705         if $test X"$despair" = Xyes; then
2706            echo "Uh-oh, the C compiler '$cc' doesn't seem to be working." >&4
2707         fi
2708         $cat >&4 <<EOM         
2709 You need to find a working C compiler.
2710 Either (purchase and) install the C compiler supplied by your OS vendor,
2711 or for a free C compiler try http://gcc.gnu.org/
2712 I cannot continue any further, aborting.
2713 EOM
2714         exit 1
2715     fi
2716     $rm -f try try.*
2717     ;;
2718 esac
2719 EOSC
2720
2721 : determine whether symbolic links are supported
2722 echo " "
2723 $touch blurfl
2724 if $ln -s blurfl sym > /dev/null 2>&1 ; then
2725         echo "Symbolic links are supported." >&4
2726         lns="$ln -s"
2727 else
2728         echo "Symbolic links are NOT supported." >&4
2729         lns="$ln"
2730 fi
2731 $rm -f blurfl sym
2732
2733 : determine whether symbolic links are supported
2734 echo " "
2735 case "$lns" in
2736 *"ln"*" -s")
2737         echo "Checking how to test for symbolic links..." >&4
2738         $lns blurfl sym
2739         if $test "X$issymlink" = X; then
2740                 case "$newsh" in
2741                 '') sh     -c "PATH= test -h sym" >/dev/null 2>&1 ;;
2742                 *)  $newsh -c "PATH= test -h sym" >/dev/null 2>&1 ;;
2743                 esac
2744                 if test $? = 0; then
2745                         issymlink="test -h"
2746                 else
2747                         echo "Your builtin 'test -h' may be broken." >&4
2748                         case "$test" in
2749                         /*)     ;;
2750                         *)      pth=`echo $PATH | sed -e "s/$p_/ /g"`
2751                                 for p in $pth
2752                                 do
2753                                         if test -f "$p/$test"; then
2754                                                 test="$p/$test"
2755                                                 break
2756                                         fi
2757                                 done
2758                                 ;;
2759                         esac
2760                         case "$test" in
2761                         /*)
2762                                 echo "Trying external '$test -h'." >&4
2763                                 issymlink="$test -h"
2764                                 if $test ! -h sym >/dev/null 2>&1; then
2765                                         echo "External '$test -h' is broken, too." >&4
2766                                         issymlink=''
2767                                 fi
2768                                 ;;
2769                         *)      issymlink='' ;;
2770                         esac
2771                 fi
2772         fi
2773         if $test "X$issymlink" = X; then
2774                 if $test -L sym 2>/dev/null; then
2775                         issymlink="$test -L"
2776                         echo "The builtin '$test -L' worked." >&4
2777                 fi
2778         fi
2779         if $test "X$issymlink" != X; then
2780                 echo "You can test for symbolic links with '$issymlink'." >&4
2781         else
2782                 echo "I do not know how you can test for symbolic links." >&4
2783         fi
2784         $rm -f blurfl sym
2785         ;;
2786 *)      echo "No symbolic links, so not testing for their testing..." >&4
2787         ;;
2788 esac
2789 echo " "
2790
2791 : Make symlinks util
2792 case "$mksymlinks" in
2793 $define|true|[yY]*)
2794         case "$src" in
2795         ''|'.') echo "Cannot create symlinks in the original directory." >&4
2796                 exit 1
2797                 ;;
2798         *)      case "$lns:$issymlink" in
2799                 *"ln"*" -s:"*"test -"?)
2800                         echo "Creating the symbolic links..." >&4
2801                         echo "(First creating the subdirectories...)" >&4
2802                         cd ..
2803                         awk '{print $1}' $src/MANIFEST | grep / | sed 's:/[^/]*$::' | sort -u | while true; do
2804                                 read directory
2805                                 test -z "$directory" && break
2806                                 mkdir -p $directory
2807                         done
2808                         # Sanity check 1.
2809                         if test ! -d t/base; then
2810                                 echo "Failed to create the subdirectories.  Aborting." >&4
2811                                 exit 1
2812                         fi
2813                         echo "(Then creating the symlinks...)" >&4
2814                         awk '{print $1}' $src/MANIFEST | while true; do
2815                                 read filename
2816                                 test -z "$filename" && break
2817                                 if test -f $filename; then
2818                                         if $issymlink $filename; then
2819                                                 rm -f $filename
2820                                         fi
2821                                 fi
2822                                 if test -f $filename; then
2823                                         echo "$filename already exists, not symlinking."
2824                                 else
2825                                         ln -s $src/$filename $filename
2826                                 fi
2827                         done
2828                         # Sanity check 2.
2829                         if test ! -f t/base/lex.t; then
2830                                 echo "Failed to create the symlinks (t/base/lex.t missing).  Aborting." >&4
2831                                 exit 1
2832                         fi
2833                         cd UU
2834                         ;;
2835                 *)      echo "(I cannot figure out how to do symbolic links, ignoring mksymlinks)." >&4
2836                         ;;
2837                 esac
2838                 ;;
2839         esac
2840         ;;
2841 esac
2842
2843 : Check for Cross-Compilation
2844 if $test "X$targethost" = "X"; then
2845     targethost=""
2846 fi
2847 if $test "X$targetenv" = "X"; then
2848     targetenv=""
2849 fi
2850 case "$usecrosscompile" in
2851 $define|true|[yY]*)
2852         $echo "Cross-compiling..."
2853         croak=''
2854         case "$cc" in
2855         *-gcc*|*-g++*) # A cross-compiling gcc, probably.
2856             # arm-linux-androideabi-gcc  -> arm-linux-androideabi
2857             # x86_64-w64-mingw32-gcc.exe -> x86_64-w64-mingw32
2858             targetarch=`$echo $cc|$sed 's/-g[c\+][c\+].*$//'`
2859             ar=`$echo $cc|$sed 's/-g[c\+][c\+]/-ar/'`
2860             # leave out ld, choosing it is more complex
2861             nm=`$echo $cc|$sed 's/-g[c\+][c\+]/-nm/'`
2862             ranlib=`$echo $cc|$sed 's/-g[c\+][c\+]/-ranlib/'`
2863             # We are in a weird spot. Just before us, some values
2864             # were 'saved', to be restored after the hints are
2865             # run.  This means that the changes we made to ar,
2866             # nm and ranlib will get reverted.
2867             # To avoid that, we hijack the saving mechanism and
2868             # have it save our new values.
2869             for file in ar nm ranlib; do
2870                 eval xxx=\$$file
2871                 eval $file=$xxx$_exe
2872                 eval _$file=$xxx
2873             done
2874         ;;
2875         esac
2876         case "$targetarch" in
2877         '') echo "Targetarch not defined." >&4; croak=y ;;
2878         *)  echo "Using targetarch $targetarch." >&4 ;;
2879         esac
2880         case "$targethost" in
2881         '') echo "Targethost not defined." >&4; croak=y ;;
2882         *)  echo "Using targethost $targethost." >&4
2883         esac
2884         locincpth=' '
2885         loclibpth=' '
2886         case "$croak" in
2887         y) echo "Cannot continue, aborting." >&4; exit 1 ;;
2888         esac
2889     : compile a host miniperl and generate_uudmap, unless we got passed them
2890     if $test "X$hostperl" = X; then
2891       echo "Building host miniperl and generate_uudmap binaries" >&4
2892       before_host=`pwd`
2893       cd ..
2894       cd $src
2895       src=`pwd`
2896       rm -rf $src/host
2897       mkdir $src/host
2898       cd $src/host
2899       $src/Configure -des -Dusedevel -Dmksymlinks
2900       $make miniperl
2901       case "$hostgenerate" in
2902       '') $make generate_uudmap
2903           hostgenerate=$src/host/generate_uudmap
2904           ;;
2905        "$undef") hostgenerate=''
2906           ;;
2907       esac
2908       hostperl=$src/host/miniperl
2909       cd $before_host
2910     fi
2911     hostosname=`$hostperl -le 'print $^O'`
2912     ;;
2913 *)
2914     usecrosscompile="$undef"
2915     ;;
2916 esac
2917
2918 : Define -Dtargethost=somecomputer to run compiled tests on another machine
2919 case "$targethost" in
2920     '') echo "Checking for cross-compile" >&4
2921     case "$usecrosscompile$multiarch" in
2922        *$define*) echo "Skipping the try tests in the rest of Configure as no targethost was defined when cross-compiling" >&4
2923          if [ -f Makefile ]; then
2924            echo " "
2925            echo "Now you must ensure config.sh, config.h and the generated headers exist and run a $make."
2926          else
2927            echo "Configure done."
2928          fi
2929        exit 0
2930        ;;
2931      *) echo "No targethost for running compiler tests against defined, running locally" >&4
2932         run=''
2933         to=:
2934         from=:
2935         ;;
2936     esac
2937     ;;
2938     *) echo "Using targethost $targethost." >&4
2939         case "$src" in
2940         /*) run=$src/Cross/run
2941             targetmkdir=$src/Cross/mkdir
2942             to=$src/Cross/to
2943             from=$src/Cross/from
2944             ;;
2945         *)  pwd=`$test -f ../Configure & cd ..; pwd`
2946             run=$pwd/Cross/run
2947             targetmkdir=$pwd/Cross/mkdir
2948             to=$pwd/Cross/to
2949             from=$pwd/Cross/from
2950             ;;
2951         esac
2952         case "$targetrun" in
2953         '') targetrun=ssh ;;
2954         esac
2955         case "$targetto" in
2956         '') targetto=scp ;;
2957         esac
2958         case "$targetfrom" in
2959         '') targetfrom=scp ;;
2960         esac
2961         run=$run-$targetrun
2962         to=$to-$targetto
2963         from=$from-$targetfrom
2964         case "$targetdir" in
2965         '')  targetdir=/tmp
2966              echo "Guessing targetdir $targetdir." >&4
2967              ;;
2968         esac
2969         case "$targetuser" in
2970         '')  targetuser=root
2971              echo "Guessing targetuser $targetuser." >&4
2972              ;;
2973         esac
2974         case "$targetport" in
2975         '')  targetport=22
2976              echo "Guessing targetport $targetport." >&4
2977              ;;
2978         esac
2979         case "$targetfrom" in
2980         scp)    q=-q ;;
2981         *)      q='' ;;
2982         esac
2983         case "$targetrun" in
2984         ssh|rsh)
2985             cat >$run <<EOF
2986 #!/bin/sh
2987 env=''
2988 case "\$1" in
2989 -cwd)
2990   shift
2991   cwd=\$1
2992   shift
2993   ;;
2994 esac
2995 case "\$1" in
2996 -env)
2997   shift
2998   env=\$1
2999   shift
3000   ;;
3001 esac
3002 case "\$cwd" in
3003 '') cwd=$targetdir ;;
3004 esac
3005 exe=\$1
3006 shift
3007 $to \$exe
3008 $targetrun -p $targetport -l $targetuser $targethost "cd \$cwd && \$env \$exe \$@"
3009 EOF
3010             ;;
3011         adb)
3012             $touch $run
3013             ;;
3014         *)  echo "Unknown targetrun '$targetrun'" >&4
3015             exit 1
3016             ;;
3017         esac
3018         case "$targetmkdir" in
3019         */Cross/mkdir)
3020             cat >$targetmkdir <<EOF
3021 #!/bin/sh
3022 $targetrun -p $targetport -l $targetuser $targethost "mkdir -p \$@"
3023 EOF
3024             $chmod a+rx $targetmkdir
3025             ;;
3026         *)  echo "Unknown targetmkdir '$targetmkdir'" >&4
3027             exit 1
3028             ;;
3029         esac
3030         case "$targetto" in
3031         scp|rcp)
3032             cat >$to <<EOF
3033 #!/bin/sh
3034 for f in \$@
3035 do
3036   case "\$f" in
3037   /*)
3038     $targetmkdir \`dirname \$f\`
3039     $targetto -P $targetport -r $q \$f $targetuser@$targethost:\$f           2>/dev/null  || exit 1
3040     ;;
3041   *)
3042     $targetmkdir $targetdir/\`dirname \$f\`
3043     $targetto -P $targetport -r $q \$f $targetuser@$targethost:$targetdir/\$f 2>/dev/null || exit 1
3044     ;;
3045   esac
3046 done
3047 exit 0
3048 EOF
3049             ;;
3050         cp) cat >$to <<EOF
3051 #!/bin/sh
3052 for f in \$@
3053 do
3054   case "\$f" in
3055   /*)
3056     $mkdir -p $targetdir/\`dirname \$f\`
3057     $cp \$f $targetdir/\$f || exit 1
3058     ;;
3059   *)
3060     $targetmkdir $targetdir/\`dirname \$f\`
3061     $cp \$f $targetdir/\$f || exit 1
3062     ;;
3063   esac
3064 done
3065 exit 0
3066 EOF
3067             ;;
3068         *)  echo "Unknown targetto '$targetto'" >&4
3069             exit 1
3070             ;;
3071         esac
3072         case "$targetfrom" in
3073         scp|rcp)
3074           cat >$from <<EOF
3075 #!/bin/sh
3076 for f in \$@
3077 do
3078   $rm -f \$f
3079   $targetfrom -P $targetport $q $targetuser@$targethost:$targetdir/\$f . || exit 1
3080 done
3081 exit 0
3082 EOF
3083             ;;
3084         cp) cat >$from <<EOF
3085 #!/bin/sh
3086 for f in \$@
3087 do
3088   $rm -f \$f
3089   cp $targetdir/\$f . || exit 1
3090 done
3091 exit 0
3092 EOF
3093             ;;
3094         *)  echo "Unknown targetfrom '$targetfrom'" >&4
3095             exit 1
3096             ;;
3097         esac
3098         if $test ! -f $run; then
3099             echo "Target 'run' script '$run' not found." >&4
3100         else
3101             $chmod a+rx $run
3102         fi
3103         if $test ! -f $to; then
3104             echo "Target 'to' script '$to' not found." >&4
3105         else
3106             $chmod a+rx $to
3107         fi
3108         if $test ! -f $from; then
3109             echo "Target 'from' script '$from' not found." >&4
3110         else
3111             $chmod a+rx $from
3112         fi
3113         if $test ! -f $run -o ! -f $to -o ! -f $from; then
3114             exit 1
3115         fi
3116         cat >&4 <<EOF
3117 Using '$run' for remote execution,
3118 and '$from' and '$to'
3119 for remote file transfer.
3120 EOF
3121         ;;
3122 *)      run=''
3123         to=:
3124         from=:
3125         usecrosscompile="$undef"
3126         targetarch=''
3127         ;;
3128 esac
3129
3130 : see whether [:lower:] and [:upper:] are supported character classes
3131 echo " "
3132 case "`echo AbyZ | $tr '[:lower:]' '[:upper:]' 2>/dev/null`" in
3133 ABYZ)
3134         echo "Good, your tr supports [:lower:] and [:upper:] to convert case." >&4
3135         up='[:upper:]'
3136         low='[:lower:]'
3137         ;;
3138 *)      # There is a discontinuity in EBCDIC between 'R' and 'S'
3139         # (0xd9 and 0xe2), therefore that is a nice testing point.
3140         if test "X$up" = X -o "X$low" = X; then
3141             case "`echo RS | $tr '[R-S]' '[r-s]' 2>/dev/null`" in
3142             rs) up='[A-Z]'
3143                 low='[a-z]'
3144                 ;;
3145             esac
3146         fi
3147         if test "X$up" = X -o "X$low" = X; then
3148             case "`echo RS | $tr R-S r-s 2>/dev/null`" in
3149             rs) up='A-Z'
3150                 low='a-z'
3151                 ;;
3152             esac
3153         fi
3154         if test "X$up" = X -o "X$low" = X; then
3155             case "`echo RS | od -x 2>/dev/null`" in
3156             *D9E2*|*d9e2*)
3157                 echo "Hey, this might be EBCDIC." >&4
3158                 if test "X$up" = X -o "X$low" = X; then
3159                     case "`echo RS | $tr '[A-IJ-RS-Z]' '[a-ij-rs-z]' 2>/dev/null`" in
3160                     rs) up='[A-IJ-RS-Z]'
3161                         low='[a-ij-rs-z]'
3162                         ;;
3163                     esac
3164                 fi
3165                 if test "X$up" = X -o "X$low" = X; then
3166                     case "`echo RS | $tr A-IJ-RS-Z a-ij-rs-z 2>/dev/null`" in
3167                     rs) up='A-IJ-RS-Z'
3168                         low='a-ij-rs-z'
3169                         ;;
3170                     esac
3171                 fi
3172                 ;;
3173             esac
3174         fi
3175 esac
3176 case "`echo RS | $tr \"$up\" \"$low\" 2>/dev/null`" in
3177 rs)
3178     echo "Using $up and $low to convert case." >&4
3179     ;;
3180 *)
3181     echo "I don't know how to translate letters from upper to lower case." >&4
3182     echo "Your tr is not acting any way I know of." >&4
3183     exit 1
3184     ;;
3185 esac
3186 : set up the translation script tr, must be called with ./tr of course
3187 cat >tr <<EOSC
3188 $startsh
3189 case "\$1\$2" in
3190 '[A-Z][a-z]') exec $tr '$up' '$low';;
3191 '[a-z][A-Z]') exec $tr '$low' '$up';;
3192 esac
3193 exec $tr "\$@"
3194 EOSC
3195 chmod +x tr
3196 $eunicefix tr
3197
3198 : Try to determine whether config.sh was made on this system
3199 case "$config_sh" in
3200 '')
3201 myuname=`$uname -a 2>/dev/null`
3202 $test -z "$myuname" && myuname=`hostname 2>/dev/null`
3203 # Downcase everything to avoid ambiguity.
3204 # Remove slashes and single quotes so we can use parts of this in
3205 # directory and file names.
3206 # Remove newlines so myuname is sane to use elsewhere.
3207 # tr '[A-Z]' '[a-z]' would not work in EBCDIC
3208 # because the A-Z/a-z are not consecutive.
3209 myuname=`echo $myuname | $sed -e "s,['/],,g" | \
3210         ./tr '[A-Z]' '[a-z]' | $tr $trnl ' '`
3211 newmyuname="$myuname"
3212 dflt=n
3213 case "$knowitall" in
3214 '')
3215         if test -f ../config.sh; then
3216                 if $contains myuname= ../config.sh >/dev/null 2>&1; then
3217                         eval "`grep myuname= ../config.sh`"
3218                 fi
3219                 if test "X$myuname" = "X$newmyuname"; then
3220                         dflt=y
3221                 fi
3222         fi
3223         ;;
3224 *) dflt=y;;
3225 esac
3226
3227 : Get old answers from old config file if Configure was run on the
3228 : same system, otherwise use the hints.
3229 hint=default
3230 cd ..
3231 if test -f config.sh; then
3232         echo " "
3233         rp="I see a config.sh file.  Shall I use it to set the defaults?"
3234         . UU/myread
3235         case "$ans" in
3236         n*|N*) echo "OK, I'll ignore it."
3237                 mv config.sh config.sh.old
3238                 myuname="$newmyuname"
3239                 ;;
3240         *)  echo "Fetching default answers from your old config.sh file..." >&4
3241                 tmp_n="$n"
3242                 tmp_c="$c"
3243                 tmp_sh="$sh"
3244                 . ./config.sh
3245                 cp config.sh UU
3246                 n="$tmp_n"
3247                 c="$tmp_c"
3248                 : Older versions did not always set $sh.  Catch re-use of such
3249                 : an old config.sh.
3250                 case "$sh" in
3251                 '') sh="$tmp_sh" ;;
3252                 esac
3253                 hint=previous
3254                 ;;
3255         esac
3256 fi
3257 . ./UU/checkcc
3258 if test ! -f config.sh; then
3259         $cat <<EOM
3260
3261 First time through, eh?  I have some defaults handy for some systems
3262 that need some extra help getting the Configure answers right:
3263
3264 EOM
3265         (cd $src/hints; ls -C *.sh) | $sed 's/\.sh/   /g' >&4
3266         dflt=''
3267         : Half the following guesses are probably wrong... If you have better
3268         : tests or hints, please send them to perlbug@perl.org
3269         : The metaconfig authors would also appreciate a copy...
3270         $test -f /irix && osname=irix
3271         $test -f /xenix && osname=sco_xenix
3272         $test -f /dynix && osname=dynix
3273         $test -f /dnix && osname=dnix
3274         $test -f /lynx.os && osname=lynxos
3275         $test -f /unicos && osname=unicos && osvers=`$uname -r`
3276         $test -f /unicosmk && osname=unicosmk && osvers=`$uname -r`
3277         $test -f /unicosmk.ar && osname=unicosmk && osvers=`$uname -r`
3278         $test -f /bin/mips && /bin/mips && osname=mips
3279         $test -d /usr/apollo/bin && osname=apollo
3280         $test -f /etc/saf/_sactab && osname=svr4
3281         $test -d /usr/include/minix && osname=minix
3282         $test -f /system/gnu_library/bin/ar.pm && osname=vos
3283         if $test -d /MachTen -o -d /MachTen_Folder; then
3284                 osname=machten
3285                 if $test -x /sbin/version; then
3286                         osvers=`/sbin/version | $awk '{print $2}' |
3287                         $sed -e 's/[A-Za-z]$//'`
3288                 elif $test -x /usr/etc/version; then
3289                         osvers=`/usr/etc/version | $awk '{print $2}' |
3290                         $sed -e 's/[A-Za-z]$//'`
3291                 else
3292                         osvers="$2.$3"
3293                 fi
3294         fi
3295
3296         $test -f /sys/posix.dll &&
3297                 $test -f /usr/bin/what &&
3298                 set X `/usr/bin/what /sys/posix.dll` &&
3299                 $test "$3" = UWIN &&
3300                 osname=uwin &&
3301                 osvers="$5"
3302
3303         if $test -f $uname; then
3304                 set X $myuname
3305                 shift
3306
3307                 case "$5" in
3308                 fps*) osname=fps ;;
3309                 mips*)
3310                         case "$4" in
3311                         umips) osname=umips ;;
3312                         *) osname=mips ;;
3313                         esac;;
3314                 [23]100) osname=mips ;;
3315                 i386*)
3316                         tmp=`/bin/uname -X 2>/dev/null|awk '/3\.2v[45]/{ print $(NF) }'`
3317                         if $test "$tmp" != "" -a "$3" = "3.2" -a -f '/etc/systemid'; then
3318                                 osname='sco'
3319                                 osvers=$tmp
3320                         elif $test -f /etc/kconfig; then
3321                                 osname=isc
3322                                 if test "$lns" = "$ln -s"; then
3323                                         osvers=4
3324                                 elif $contains _SYSV3 /usr/include/stdio.h > /dev/null 2>&1 ; then
3325                                         osvers=3
3326                                 elif $contains _POSIX_SOURCE /usr/include/stdio.h > /dev/null 2>&1 ; then
3327                                         osvers=2
3328                                 fi
3329                         fi
3330                         tmp=''
3331                         ;;
3332                 pc*)
3333                         if test -n "$DJGPP"; then
3334                                 osname=dos
3335                                 osvers=djgpp
3336                         fi
3337                         ;;
3338                 esac
3339
3340                 case "$1" in
3341                 aix) osname=aix
3342                         tmp=`( (oslevel) 2>/dev/null || echo "not found") 2>&1`
3343                         case "$tmp" in
3344                         # oslevel can fail with:
3345                         # oslevel: Unable to acquire lock.
3346                         *not\ found) osvers="$4"."$3" ;;
3347                         '<3240'|'<>3240') osvers=3.2.0 ;;
3348                         '=3240'|'>3240'|'<3250'|'<>3250') osvers=3.2.4 ;;
3349                         '=3250'|'>3250') osvers=3.2.5 ;;
3350                         *) osvers=$tmp;;
3351                         esac
3352                         ;;
3353                 bitrig) osname=bitrig
3354                         osvers="$3"
3355                         ;;
3356                 bsd386) osname=bsd386
3357                         osvers=`$uname -r`
3358                         ;;
3359                 cygwin*) osname=cygwin
3360                         osvers="$3"
3361                         ;;
3362                 *dc.osx) osname=dcosx
3363                         osvers="$3"
3364                         ;;
3365                 dnix) osname=dnix
3366                         osvers="$3"
3367                         ;;
3368                 domainos) osname=apollo
3369                         osvers="$3"
3370                         ;;
3371                 dgux)   osname=dgux
3372                         osvers="$3"
3373                         ;;
3374                 dragonfly) osname=dragonfly
3375                         osvers="$3"
3376                         ;;
3377                 dynixptx*) osname=dynixptx
3378                         osvers=`echo "$4"|sed 's/^v//'`
3379                         ;;
3380                 freebsd) osname=freebsd
3381                         osvers="$3" ;;
3382                 genix)  osname=genix ;;
3383                 gnu)    osname=gnu
3384                         osvers="$3" ;;
3385                 hp*)    osname=hpux
3386                         osvers=`echo "$3" | $sed 's,.*\.\([0-9]*\.[0-9]*\),\1,'`
3387                         ;;
3388                 irix*)  osname=irix
3389                         case "$3" in
3390                         4*) osvers=4 ;;
3391                         5*) osvers=5 ;;
3392                         *)      osvers="$3" ;;
3393                         esac
3394                         ;;
3395                 linux)  osname=linux
3396                         case "$3" in
3397                         *)      osvers="$3" ;;
3398                         esac
3399                         $test -f /system/lib/libandroid.so && osname=linux-android
3400                         ;;
3401                 MiNT)   osname=mint
3402                         ;;
3403                 netbsd*) osname=netbsd
3404                         osvers="$3"
3405                         ;;
3406                 news-os) osvers="$3"
3407                         case "$3" in
3408                         4*) osname=newsos4 ;;
3409                         *) osname=newsos ;;
3410                         esac
3411                         ;;
3412                 nonstop-ux) osname=nonstopux ;;
3413                 openbsd) osname=openbsd
3414                         osvers="$3"
3415                         ;;
3416                 os2)    osname=os2
3417                         osvers="$4"
3418                         ;;
3419                 POSIX-BC | posix-bc ) osname=posix-bc
3420                         osvers="$3"
3421                         ;;
3422                 powerux | power_ux | powermax_os | powermaxos | \
3423                 powerunix | power_unix) osname=powerux
3424                         osvers="$3"
3425                         ;;
3426                 qnx) osname=qnx
3427                         osvers="$4"
3428                         ;;
3429                 solaris) osname=solaris
3430                         case "$3" in
3431                         5*) osvers=`echo $3 | $sed 's/^5/2/g'` ;;
3432                         *)      osvers="$3" ;;
3433                         esac
3434                         ;;
3435                 sunos) osname=sunos
3436                         case "$3" in
3437                         5*) osname=solaris
3438                                 osvers=`echo $3 | $sed 's/^5/2/g'` ;;
3439                         *)      osvers="$3" ;;
3440                         esac
3441                         ;;
3442                 titanos) osname=titanos
3443                         case "$3" in
3444                         1*) osvers=1 ;;
3445                         2*) osvers=2 ;;
3446                         3*) osvers=3 ;;
3447                         4*) osvers=4 ;;
3448                         *)      osvers="$3" ;;
3449                         esac
3450                         ;;
3451                 ultrix) osname=ultrix
3452                         osvers="$3"
3453                         ;;
3454                 osf1|mls+)      case "$5" in
3455                                 alpha)
3456                                         osname=dec_osf
3457                                         osvers=`sizer -v | awk -FUNIX '{print $2}' | awk '{print $1}' |  tr '[A-Z]' '[a-z]' | sed 's/^[xvt]//'`
3458                                         case "$osvers" in
3459                                         [1-9].[0-9]*) ;;
3460                                         *) osvers=`echo "$3" | sed 's/^[xvt]//'` ;;
3461                                         esac
3462                                         ;;
3463                         hp*)    osname=hp_osf1  ;;
3464                         mips)   osname=mips_osf1 ;;
3465                         esac
3466                         ;;
3467                 # UnixWare 7.1.2 is known as Open UNIX 8
3468                 openunix|unixware) osname=svr5
3469                         osvers="$4"
3470                         ;;
3471                 uts)    osname=uts
3472                         osvers="$3"
3473                         ;;
3474                 vos) osvers="$3"
3475                         ;;
3476                 $2) case "$osname" in
3477                         *isc*) ;;
3478                         *freebsd*) ;;
3479                         svr*)
3480                                 : svr4.x or possibly later
3481                                 case "svr$3" in
3482                                 ${osname}*)
3483                                         osname=svr$3
3484                                         osvers=$4
3485                                         ;;
3486                                 esac
3487                                 case "$osname" in
3488                                 svr4.0)
3489                                         : Check for ESIX
3490                                         if test -f /stand/boot ; then
3491                                                 eval `grep '^INITPROG=[a-z/0-9]*$' /stand/boot`
3492                                                 if test -n "$INITPROG" -a -f "$INITPROG"; then
3493                         isesix=`strings -a $INITPROG|grep 'ESIX SYSTEM V/386 Release 4.0'`
3494                                                         if test -n "$isesix"; then
3495                                                                 osname=esix4
3496                                                         fi
3497                                                 fi
3498                                         fi
3499                                         ;;
3500                                 esac
3501                                 ;;
3502                         *)      if test -f /etc/systemid; then
3503                                         osname=sco
3504                                         set `echo $3 | $sed 's/\./ /g'` $4
3505                                         if $test -f $src/hints/sco_$1_$2_$3.sh; then
3506                                                 osvers=$1.$2.$3
3507                                         elif $test -f $src/hints/sco_$1_$2.sh; then
3508                                                 osvers=$1.$2
3509                                         elif $test -f $src/hints/sco_$1.sh; then
3510                                                 osvers=$1
3511                                         fi
3512                                 else
3513                                         case "$osname" in
3514                                         '') : Still unknown.  Probably a generic Sys V.
3515                                                 osname="sysv"
3516                                                 osvers="$3"
3517                                                 ;;
3518                                         esac
3519                                 fi
3520                                 ;;
3521                         esac
3522                         ;;
3523                 *)      case "$osname" in
3524                         '') : Still unknown.  Probably a generic BSD.
3525                                 osname="$1"
3526                                 osvers="$3"
3527                                 ;;
3528                         esac
3529                         ;;
3530                 esac
3531         else
3532                 if test -f /vmunix -a -f $src/hints/news_os.sh; then
3533                         (what /vmunix | UU/tr '[A-Z]' '[a-z]') > UU/kernel.what 2>&1
3534                         if $contains news-os UU/kernel.what >/dev/null 2>&1; then
3535                                 osname=news_os
3536                         fi
3537                         $rm -f UU/kernel.what
3538                 elif test -d c:/. -o -n "$is_os2" ; then
3539                         set X $myuname
3540                         osname=os2
3541                         osvers="$5"
3542                 fi
3543         fi
3544
3545         case "$targetarch" in
3546         '') ;;
3547         *)  hostarch=$osname
3548             case "$targetarch" in
3549                 nto*|*-nto-*)
3550                     # Will load qnx.sh, which should change osname to nto
3551                     osname=qnx
3552                     osvers=''
3553                     ;;
3554                 *linux-android*)
3555                     # Catch arm-linux-androideabi, mipsel-linux-android,
3556                     # and i686-linux-android
3557                     osname=linux-android
3558                     osvers=''
3559                     ;;
3560                 *linux*)
3561                     # Something like arm-linux-gnueabihf is really just
3562                     # plain linux.
3563                     osname=linux
3564                     osvers=''
3565                     ;;
3566                 *solaris*|*sunos*)
3567                     osname=solaris
3568                     # XXX perhaps we should just assume
3569                     # osvers to be 2, or maybe take the value
3570                     # from targetarch. Using $run before the
3571                     # hints are run is somewhat icky.
3572                     set X `$run $uname -a 2>/dev/null`
3573                     shift
3574                     case "$3" in
3575                         5*) osvers=`echo $3 | $sed 's/^5/2/g'` ;;
3576                         *)  osvers="$3" ;;
3577                     esac
3578                     ;;
3579                 *)
3580                     osname=`echo $targetarch|sed 's,^[^-]*-,,'`
3581                     osvers=''
3582                 ;;
3583             esac
3584             ;;
3585         esac
3586
3587         : Now look for a hint file osname_osvers, unless one has been
3588         : specified already.
3589         case "$hintfile" in
3590         ''|' ')
3591                 file=`echo "${osname}_${osvers}" | $sed -e 's%\.%_%g' -e 's%_$%%'`
3592                 : Also try without trailing minor version numbers.
3593                 xfile=`echo $file | $sed -e 's%_[^_]*$%%'`
3594                 xxfile=`echo $xfile | $sed -e 's%_[^_]*$%%'`
3595                 xxxfile=`echo $xxfile | $sed -e 's%_[^_]*$%%'`
3596                 xxxxfile=`echo $xxxfile | $sed -e 's%_[^_]*$%%'`
3597                 case "$file" in
3598                 '') dflt=none ;;
3599                 *)  case "$osvers" in
3600                         '') dflt=$file
3601                                 ;;
3602                         *)  if $test -f $src/hints/$file.sh ; then
3603                                         dflt=$file
3604                                 elif $test -f $src/hints/$xfile.sh ; then
3605                                         dflt=$xfile
3606                                 elif $test -f $src/hints/$xxfile.sh ; then
3607                                         dflt=$xxfile
3608                                 elif $test -f $src/hints/$xxxfile.sh ; then
3609                                         dflt=$xxxfile
3610                                 elif $test -f $src/hints/$xxxxfile.sh ; then
3611                                         dflt=$xxxxfile
3612                                 elif $test -f "$src/hints/${osname}.sh" ; then
3613                                         dflt="${osname}"
3614                                 else
3615                                         dflt=none
3616                                 fi
3617                                 ;;
3618                         esac
3619                         ;;
3620                 esac
3621                 if $test -f Policy.sh ; then
3622                         case "$dflt" in
3623                         *Policy*) ;;
3624                         none) dflt="Policy" ;;
3625                         *) dflt="Policy $dflt" ;;
3626                         esac
3627                 fi
3628                 ;;
3629         *)
3630                 dflt=`echo $hintfile | $sed 's/\.sh$//'`
3631                 ;;
3632         esac
3633
3634         if $test -f Policy.sh ; then
3635                 $cat <<EOM
3636
3637 There's also a Policy hint file available, which should make the
3638 site-specific (policy) questions easier to answer.
3639 EOM
3640
3641         fi
3642
3643         $cat <<EOM
3644
3645 You may give one or more space-separated answers, or "none" if appropriate.
3646 If you have a handcrafted Policy.sh file or a Policy.sh file generated by a
3647 previous run of Configure, you may specify it as well as or instead of
3648 OS-specific hints.  If hints are provided for your OS, you should use them:
3649 although Perl can probably be built without hints on many platforms, using
3650 hints often improve performance and may enable features that Configure can't
3651 set up on its own. If there are no hints that match your OS, specify "none";
3652 DO NOT give a wrong version or a wrong OS.
3653
3654 EOM
3655
3656         rp="Which of these apply, if any?"
3657         . UU/myread
3658         tans=$ans
3659         for file in $tans; do
3660                 if $test X$file = XPolicy -a -f Policy.sh; then
3661                         . Policy.sh
3662                         $cat Policy.sh >> UU/config.sh
3663                 elif $test -f $src/hints/$file.sh; then
3664                         . $src/hints/$file.sh
3665                         $cat $src/hints/$file.sh >> UU/config.sh
3666                 elif $test X"$tans" = X -o X"$tans" = Xnone ; then
3667                         : nothing
3668                 else
3669                         : Give one chance to correct a possible typo.
3670                         echo "$file.sh does not exist"
3671                         dflt=$file
3672                         rp="hint to use instead?"
3673                         . UU/myread
3674                         for file in $ans; do
3675                                 if $test -f "$src/hints/$file.sh"; then
3676                                         . $src/hints/$file.sh
3677                                         $cat $src/hints/$file.sh >> UU/config.sh
3678                                 elif $test X$ans = X -o X$ans = Xnone ; then
3679                                         : nothing
3680                                 else
3681                                         echo "$file.sh does not exist -- ignored."
3682                                 fi
3683                         done
3684                 fi
3685         done
3686
3687         hint=recommended
3688         : Remember our hint file for later.
3689         if $test -f "$src/hints/$file.sh" ; then
3690                 hintfile="$file"
3691         else
3692                 hintfile=''
3693         fi
3694 fi
3695 cd UU
3696 ;;
3697 *)
3698         echo " "
3699         echo "Fetching default answers from $config_sh..." >&4
3700         tmp_n="$n"
3701         tmp_c="$c"
3702         cd ..
3703         cp $config_sh config.sh 2>/dev/null
3704         chmod +w config.sh
3705         . ./config.sh
3706         cd UU
3707         cp ../config.sh .
3708         n="$tmp_n"
3709         c="$tmp_c"
3710         hint=previous
3711         ;;
3712 esac
3713 test "$override" && . ./optdef.sh
3714
3715 : Restore computed paths
3716 for file in $loclist $trylist; do
3717         eval $file="\$_$file"
3718 done
3719
3720 cat << EOM
3721
3722 Configure uses the operating system name and version to set some defaults.
3723 The default value is probably right if the name rings a bell. Otherwise,
3724 since spelling matters for me, either accept the default or answer "none"
3725 to leave it blank.
3726
3727 EOM
3728 case "$osname" in
3729         ''|' ')
3730                 case "$hintfile" in
3731                 ''|' '|none) dflt=none ;;
3732                 *)  dflt=`echo $hintfile | $sed -e 's/\.sh$//' -e 's/_.*$//'` ;;
3733                 esac
3734                 ;;
3735         *) dflt="$osname" ;;
3736 esac
3737 rp="Operating system name?"
3738 . ./myread
3739 case "$ans" in
3740 none)  osname='' ;;
3741 *) osname=`echo "$ans" | $sed -e 's/[   ][      ]*/_/g' | ./tr '[A-Z]' '[a-z]'`;;
3742 esac
3743 echo " "
3744 case "$osvers" in
3745         ''|' ')
3746                 case "$hintfile" in
3747                 ''|' '|none) dflt=none ;;
3748                 *)      dflt=`echo $hintfile | $sed -e 's/\.sh$//' -e 's/^[^_]*//'`
3749                         dflt=`echo $dflt | $sed -e 's/^_//' -e 's/_/./g'`
3750                         case "$dflt" in
3751                         ''|' ') dflt=none ;;
3752                         esac
3753                         ;;
3754                 esac
3755                 ;;
3756         *) dflt="$osvers" ;;
3757 esac
3758 rp="Operating system version?"
3759 . ./myread
3760 case "$ans" in
3761 none)  osvers='' ;;
3762 *) osvers="$ans" ;;
3763 esac
3764
3765
3766 . ./posthint.sh
3767
3768 : who configured the system
3769 cf_time=`LC_ALL=C; LANGUAGE=C; export LC_ALL; export LANGUAGE; $date 2>&1`
3770 case "$cf_by" in
3771 "")
3772         cf_by=`(logname) 2>/dev/null`
3773         case "$cf_by" in
3774         "")
3775                 cf_by=`(whoami) 2>/dev/null`
3776                 case "$cf_by" in
3777                 "") cf_by=unknown ;;
3778                 esac ;;
3779         esac ;;
3780 esac
3781
3782 : decide how portable to be.  Allow command line overrides.
3783 case "$d_portable" in
3784 "$undef") ;;
3785 *)      d_portable="$define" ;;
3786 esac
3787
3788 : set up shell script to do ~ expansion
3789 cat >filexp <<EOSS
3790 $startsh
3791 : expand filename
3792 case "\$1" in
3793  \~/*|\~)
3794         echo \$1 | $sed "s|~|\${HOME-\$LOGDIR}|"
3795         ;;
3796  \~*)
3797         if $test -f /bin/csh; then
3798                 /bin/csh -f -c "glob \$1"
3799                 failed=\$?
3800                 echo ""
3801                 exit \$failed
3802         else
3803                 name=\`$expr x\$1 : '..\([^/]*\)'\`
3804                 dir=\`$sed -n -e "/^\${name}:/{s/^[^:]*:[^:]*:[^:]*:[^:]*:[^:]*:\([^:]*\).*"'\$'"/\1/" -e p -e q -e '}' </etc/passwd\`
3805                 if $test ! -d "\$dir"; then
3806                         me=\`basename \$0\`
3807                         echo "\$me: can't locate home directory for: \$name" >&2
3808                         exit 1
3809                 fi
3810                 case "\$1" in
3811                 */*)
3812                         echo \$dir/\`$expr x\$1 : '..[^/]*/\(.*\)'\`
3813                         ;;
3814                 *)
3815                         echo \$dir
3816                         ;;
3817                 esac
3818         fi
3819         ;;
3820 *)
3821         echo \$1
3822         ;;
3823 esac
3824 EOSS
3825 chmod +x filexp
3826 $eunicefix filexp
3827
3828 : now set up to get a file name
3829 cat <<EOS >getfile
3830 $startsh
3831 EOS
3832 cat <<'EOSC' >>getfile
3833 tilde=''
3834 fullpath=''
3835 already=''
3836 skip=''
3837 none_ok=''
3838 exp_file=''
3839 nopath_ok=''
3840 orig_rp="$rp"
3841 orig_dflt="$dflt"
3842 case "$gfpth" in
3843 '') gfpth='.' ;;
3844 esac
3845
3846 case "$fn" in
3847 *\(*)
3848         : getfile will accept an answer from the comma-separated list
3849         : enclosed in parentheses even if it does not meet other criteria.
3850         expr "$fn" : '.*(\(.*\)).*' | $tr ',' $trnl >getfile.ok
3851         fn=`echo $fn | sed 's/(.*)//'`
3852         ;;
3853 esac
3854
3855 case "$fn" in
3856 *:*)
3857         loc_file=`expr $fn : '.*:\(.*\)'`
3858         fn=`expr $fn : '\(.*\):.*'`
3859         ;;
3860 esac
3861
3862 case "$fn" in
3863 *~*) tilde=true;;
3864 esac
3865 case "$fn" in
3866 */*) fullpath=true;;
3867 esac
3868 case "$fn" in
3869 *+*) skip=true;;
3870 esac
3871 case "$fn" in
3872 *n*) none_ok=true;;
3873 esac
3874 case "$fn" in
3875 *e*) exp_file=true;;
3876 esac
3877 case "$fn" in
3878 *p*) nopath_ok=true;;
3879 esac
3880
3881 case "$fn" in
3882 *f*) type='File';;
3883 *d*) type='Directory';;
3884 *l*) type='Locate';;
3885 esac
3886
3887 what="$type"
3888 case "$what" in
3889 Locate) what='File';;
3890 esac
3891
3892 case "$exp_file" in
3893 '')
3894         case "$d_portable" in
3895         "$define") ;;
3896         *) exp_file=true;;
3897         esac
3898         ;;
3899 esac
3900
3901 cd ..
3902 while test "$type"; do
3903         redo=''
3904         rp="$orig_rp"
3905         dflt="$orig_dflt"
3906         case "$tilde" in
3907         true) rp="$rp (~name ok)";;
3908         esac
3909         . UU/myread
3910         if test -f UU/getfile.ok && \
3911                 $contains "^$ans\$" UU/getfile.ok >/dev/null 2>&1
3912         then
3913                 value="$ans"
3914                 ansexp="$ans"
3915                 break
3916         fi
3917         case "$ans" in
3918         none)
3919                 value=''
3920                 ansexp=''
3921                 case "$none_ok" in
3922                 true) type='';;
3923                 esac
3924                 ;;
3925         *)
3926                 case "$tilde" in
3927                 '') value="$ans"
3928                         ansexp="$ans";;
3929                 *)
3930                         value=`UU/filexp $ans`
3931                         case $? in
3932                         0)
3933                                 if test "$ans" != "$value"; then
3934                                         echo "(That expands to $value on this system.)"
3935                                 fi
3936                                 ;;
3937                         *) value="$ans";;
3938                         esac
3939                         ansexp="$value"
3940                         case "$exp_file" in
3941                         '') value="$ans";;
3942                         esac
3943                         ;;
3944                 esac
3945                 case "$fullpath" in
3946                 true)
3947                         case "$ansexp" in
3948                         /*) value="$ansexp" ;;
3949                         [a-zA-Z]:/*) value="$ansexp" ;;
3950                         *)
3951                                 redo=true
3952                                 case "$already" in
3953                                 true)
3954                                 echo "I shall only accept a full path name, as in /bin/ls." >&4
3955                                 echo "Use a ! shell escape if you wish to check pathnames." >&4
3956                                         ;;
3957                                 *)
3958                                 echo "Please give a full path name, starting with slash." >&4
3959                                         case "$tilde" in
3960                                         true)
3961                                 echo "Note that using ~name is ok provided it expands well." >&4
3962                                                 already=true
3963                                                 ;;
3964                                         esac
3965                                 esac
3966                                 ;;
3967                         esac
3968                         ;;
3969                 esac
3970                 case "$redo" in
3971                 '')
3972                         case "$type" in
3973                         File)
3974                                 for fp in $gfpth; do
3975                                         if test "X$fp" = X.; then
3976                                             pf="$ansexp"
3977                                         else    
3978                                             pf="$fp/$ansexp"
3979                                         fi
3980                                         if test -f "$pf"; then
3981                                                 type=''
3982                                         elif test -r "$pf" || (test -h "$pf") >/dev/null 2>&1
3983                                         then
3984                                                 echo "($value is not a plain file, but that's ok.)"
3985                                                 type=''
3986                                         fi
3987                                         if test X"$type" = X; then
3988                                             value="$pf"
3989                                             break
3990                                         fi
3991                                 done
3992                                 ;;
3993                         Directory)
3994                                 for fp in $gfpth; do
3995                                         if test "X$fp" = X.; then
3996                                             dir="$ans"
3997                                             direxp="$ansexp"
3998                                         else    
3999                                             dir="$fp/$ansexp"
4000                                             direxp="$fp/$ansexp"
4001                                         fi
4002                                         if test -d "$direxp"; then
4003                                                 type=''
4004                                                 value="$dir"
4005                                                 break
4006                                         fi
4007                                 done
4008                                 ;;
4009                         Locate)
4010                                 if test -d "$ansexp"; then
4011                                         echo "(Looking for $loc_file in directory $value.)"
4012                                         value="$value/$loc_file"
4013                                         ansexp="$ansexp/$loc_file"
4014                                 fi
4015                                 if test -f "$ansexp"; then
4016                                         type=''
4017                                 fi
4018                                 case "$nopath_ok" in
4019                                 true)   case "$value" in
4020                                         */*) ;;
4021                                         *)      echo "Assuming $value will be in people's path."
4022                                                 type=''
4023                                                 ;;
4024                                         esac
4025                                         ;;
4026                                 esac
4027                                 ;;
4028                         esac
4029
4030                         case "$skip" in
4031                         true) type='';
4032                         esac
4033
4034                         case "$type" in
4035                         '') ;;
4036                         *)
4037                                 if test "$fastread" = yes; then
4038                                         dflt=y
4039                                 else
4040                                         dflt=n
4041                                 fi
4042                                 rp="$what $value doesn't exist.  Use that name anyway?"
4043                                 . UU/myread
4044                                 dflt=''
4045                                 case "$ans" in
4046                                 y*) type='';;
4047                                 *) echo " ";;
4048                                 esac
4049                                 ;;
4050                         esac
4051                         ;;
4052                 esac
4053                 ;;
4054         esac
4055 done
4056 cd UU
4057 ans="$value"
4058 rp="$orig_rp"
4059 dflt="$orig_dflt"
4060 rm -f getfile.ok
4061 test "X$gfpthkeep" != Xy && gfpth=""
4062 EOSC
4063
4064 : determine root of directory hierarchy where package will be installed.
4065 case "$prefix" in
4066 '')
4067         dflt=`./loc . /usr/local /usr/local /local /opt /usr`
4068         ;;
4069 *?/)
4070         dflt=`echo "$prefix" | sed 's/.$//'`
4071         ;;
4072 *)
4073         dflt="$prefix"
4074         ;;
4075 esac
4076 $cat <<EOM
4077
4078 By default, $package will be installed in $dflt/bin, manual pages
4079 under $dflt/man, etc..., i.e. with $dflt as prefix for all
4080 installation directories. Typically this is something like /usr/local.
4081 If you wish to have binaries under /usr/bin but other parts of the
4082 installation under /usr/local, that's ok: you will be prompted
4083 separately for each of the installation directories, the prefix being
4084 only used to set the defaults.
4085
4086 EOM
4087 fn=d~
4088 rp='Installation prefix to use?'
4089 . ./getfile
4090 oldprefix=''
4091 case "$prefix" in
4092 '') ;;
4093 *)
4094         case "$ans" in
4095         "$prefix") ;;
4096         *) oldprefix="$prefix";;
4097         esac
4098         ;;
4099 esac
4100 prefix="$ans"
4101 prefixexp="$ansexp"
4102
4103 : allow them to override the AFS root
4104 case "$afsroot" in
4105 '')     afsroot=/afs ;;
4106 *)      afsroot=$afsroot ;;
4107 esac
4108
4109 : is AFS running?
4110 echo " "
4111 case "$afs" in
4112 $define|true)   afs=true ;;
4113 $undef|false)   afs=false ;;
4114 *)      if $test -d $afsroot; then
4115                 afs=true
4116         else
4117                 afs=false
4118         fi
4119         ;;
4120 esac
4121 if $afs; then
4122         echo "AFS may be running... I'll be extra cautious then..." >&4
4123 else
4124         echo "AFS does not seem to be running..." >&4
4125 fi
4126
4127 : determine installation prefix for where package is to be installed.
4128 if $afs; then
4129 $cat <<EOM
4130
4131 Since you are running AFS, I need to distinguish the directory in which
4132 files will reside from the directory in which they are installed (and from
4133 which they are presumably copied to the former directory by occult means).
4134
4135 EOM
4136         case "$installprefix" in
4137         '') dflt=`echo $prefix | sed 's#^/afs/#/afs/.#'`;;
4138         *) dflt="$installprefix";;
4139         esac
4140 else
4141 $cat <<EOM
4142
4143 In some special cases, particularly when building $package for distribution,
4144 it is convenient to distinguish the directory in which files should be
4145 installed from the directory ($prefix) in which they will
4146 eventually reside.  For most users, these two directories are the same.
4147
4148 EOM
4149         case "$installprefix" in
4150         '') dflt=$prefix ;;
4151         *) dflt=$installprefix;;
4152         esac
4153 fi
4154 fn=d~
4155 rp='What installation prefix should I use for installing files?'
4156 . ./getfile
4157 installprefix="$ans"
4158 installprefixexp="$ansexp"
4159
4160 : Perform the prefixexp/installprefixexp correction if necessary
4161 cat <<EOS >installprefix
4162 $startsh
4163 EOS
4164 cat <<'EOSC' >>installprefix
4165 : Change installation prefix, if necessary.
4166 if $test X"$prefix" != X"$installprefix"; then
4167     eval "install${prefixvar}=\`echo \$${prefixvar}exp | sed \"s#^\$prefixexp#\$installprefixexp#\"\`"
4168 else
4169     eval "install${prefixvar}=\"\$${prefixvar}exp\""
4170 fi
4171 EOSC
4172 chmod +x installprefix
4173 $eunicefix installprefix
4174
4175 : Set variables such as privlib and privlibexp from the output of ./getfile
4176 : performing the prefixexp/installprefixexp correction if necessary.
4177 cat <<EOS >setprefixvar
4178 $startsh
4179 EOS
4180 cat <<'EOSC' >>setprefixvar
4181 eval "${prefixvar}=\"\$ans\""
4182 eval "${prefixvar}exp=\"\$ansexp\""
4183 . ./installprefix
4184 EOSC
4185 chmod +x setprefixvar
4186 $eunicefix setprefixvar
4187
4188 : set up the script used to warn in case of inconsistency
4189 cat <<EOS >whoa
4190 $startsh
4191 EOS
4192 cat <<'EOSC' >>whoa
4193 dflt=y
4194 case "$hint" in
4195     recommended)
4196         case "$hintfile" in
4197         '')     echo "The $hint value for \$$var on this machine was \"$was\"!" >&4
4198                 ;;
4199         *)      echo "Hmm.  Based on the hints in hints/$hintfile.sh, " >&4
4200                 echo "the $hint value for \$$var on this machine was \"$was\"!" >&4
4201                 ;;
4202         esac
4203         ;;
4204     *)  echo " "
4205         echo "*** WHOA THERE!!! ***" >&4
4206         echo "    The $hint value for \$$var on this machine was \"$was\"!" >&4
4207         ;;
4208 esac
4209 rp="    Keep the $hint value?"
4210 . ./myread
4211 case "$ans" in
4212 y) td=$was; tu=$was;;
4213 esac
4214 EOSC
4215
4216 : function used to set '$1' to '$val'
4217 setvar='var=$1; eval "was=\$$1"; td=$define; tu=$undef;
4218 case "$val$was" in
4219 $define$undef) . ./whoa; eval "$var=\$td";;
4220 $undef$define) . ./whoa; eval "$var=\$tu";;
4221 *) eval "$var=$val";;
4222 esac'
4223
4224 : get the patchlevel
4225 echo " "
4226 echo "Getting the current patchlevel..." >&4
4227 if $test -r $rsrc/patchlevel.h;then
4228         revision=`awk '/define[         ]+PERL_REVISION/ {print $3}' $rsrc/patchlevel.h`
4229         patchlevel=`awk '/define[       ]+PERL_VERSION/ {print $3}' $rsrc/patchlevel.h`
4230         subversion=`awk '/define[       ]+PERL_SUBVERSION/ {print $3}' $rsrc/patchlevel.h`
4231         api_revision=`awk '/define[     ]+PERL_API_REVISION/ {print $3}' $rsrc/patchlevel.h`
4232         api_version=`awk '/define[      ]+PERL_API_VERSION/ {print $3}' $rsrc/patchlevel.h`
4233         api_subversion=`awk '/define[   ]+PERL_API_SUBVERSION/ {print $3}' $rsrc/patchlevel.h`
4234         perl_patchlevel=`egrep ',"(MAINT|SMOKE)[0-9][0-9]*"' $rsrc/patchlevel.h|tail -1|sed 's/[^0-9]//g'`
4235 else
4236         revision=0
4237         patchlevel=0
4238         subversion=0
4239         api_revision=0
4240         api_version=0
4241         api_subversion=0
4242         perl_patchlevel=0
4243         $echo "(You do not have patchlevel.h.  Eek.)"
4244 fi
4245 : Define a handy string here to avoid duplication in myconfig.SH and configpm.
4246 version_patchlevel_string="version $patchlevel subversion $subversion"
4247 case "$perl_patchlevel" in
4248 0|'') ;;
4249 *)  perl_patchlevel=`echo $perl_patchlevel | sed 's/.* //'`
4250     version_patchlevel_string="$version_patchlevel_string patch $perl_patchlevel"
4251     ;;
4252 esac
4253
4254 $echo "(You have $package $version_patchlevel_string.)"
4255
4256 case "$osname" in
4257 dos|vms)
4258         : XXX Should be a Configure test for double-dots in filenames.
4259         version=`echo $revision $patchlevel $subversion | \
4260                  $awk '{ printf "%d_%d_%d\n", $1, $2, $3 }'`
4261         api_versionstring=`echo $api_revision $api_version $api_subversion | \
4262                  $awk '{ printf "%d_%d_%d\n", $1, $2, $3 }'`
4263         ;;
4264 *)
4265         version=`echo $revision $patchlevel $subversion | \
4266                  $awk '{ printf "%d.%d.%d\n", $1, $2, $3 }'`
4267         api_versionstring=`echo $api_revision $api_version $api_subversion | \
4268                  $awk '{ printf "%d.%d.%d\n", $1, $2, $3 }'`
4269         ;;
4270 esac
4271 : Special case the 5.005_xx maintenance series, which used 5.005
4272 : without any subversion label as a subdirectory in $sitelib
4273 if test "${api_revision}${api_version}${api_subversion}" = "550"; then
4274         api_versionstring='5.005'
4275 fi
4276
4277 : Do we want threads support and if so, what type
4278 case "$usethreads" in
4279 $define|true|[yY]*)     dflt='y';;
4280 *)     # Catch case where user specified ithreads or 5005threads but
4281        # forgot -Dusethreads (A.D. 4/2002)
4282        case "$useithreads$use5005threads" in
4283        *$define*)       dflt='y';;
4284        *)               dflt='n';;
4285        esac
4286        ;;
4287 esac
4288 cat <<EOM
4289
4290 Perl can be built to offer a form of threading support on some systems
4291 To do so, Configure can be run with -Dusethreads.
4292
4293 Note that Perl built with threading support runs slightly slower
4294 and uses slightly more memory than plain Perl.
4295
4296 If this doesn't make any sense to you, just accept the default '$dflt'.
4297 EOM
4298 rp='Build a threading Perl?'
4299 . ./myread
4300 case "$ans" in
4301 y|Y)    val="$define" ;;
4302 *)      val="$undef" ;;
4303 esac
4304 set usethreads
4305 eval $setvar
4306
4307 if $test $patchlevel -lt 9; then
4308     case "$usethreads" in
4309     $define)
4310         : Default to ithreads unless overridden on command line or with
4311         : old config.sh
4312         dflt='y'
4313         case "$use5005threads" in
4314                 $define|true|[yY]*)
4315                         echo "5.005 threads are no longer supported"
4316                         exit 1
4317                 ;;
4318         esac
4319         case "$useithreads" in
4320                 $undef|false|[nN]*) dflt='n';;
4321         esac
4322         rp='Use the newer interpreter-based ithreads?'
4323         . ./myread
4324         case "$ans" in
4325         y|Y)    val="$define" ;;
4326         *)      val="$undef" ;;
4327         esac
4328         set useithreads
4329         eval $setvar
4330         : Now set use5005threads to the opposite value.
4331         case "$useithreads" in
4332         $define) val="$undef" ;;
4333         *) val="$define" ;;
4334         esac
4335         set use5005threads
4336         eval $setvar
4337         ;;
4338     *)
4339         useithreads="$undef"
4340         use5005threads="$undef"
4341         ;;
4342     esac
4343
4344     case "$useithreads$use5005threads" in
4345     "$define$define")
4346         $cat >&4 <<EOM
4347
4348 You cannot have both the ithreads and the 5.005 threads enabled
4349 at the same time.  Disabling the 5.005 threads since they are
4350 much less stable than the ithreads.
4351
4352 EOM
4353         use5005threads="$undef"
4354         ;;
4355     esac
4356
4357 else
4358 : perl-5.9.x and later
4359
4360     if test X"$usethreads" = "X$define"; then
4361         case "$use5005threads" in
4362             $define|true|[yY]*)
4363                 $cat >&4 <<EOM
4364
4365 5.005 threads has been removed for 5.10.  Perl will be built using ithreads.
4366
4367 EOM
4368             ;;
4369         esac
4370     fi
4371
4372     use5005threads="$undef"
4373     useithreads="$usethreads"
4374 fi
4375
4376 case "$d_oldpthreads" in
4377 '')     : Configure tests would be welcome here.  For now, assume undef.
4378         val="$undef" ;;
4379 *)      val="$d_oldpthreads" ;;
4380 esac
4381 set d_oldpthreads
4382 eval $setvar
4383
4384
4385 : Look for a hint-file generated 'call-back-unit'.  If the
4386 : user has specified that a threading perl is to be built,
4387 : we may need to set or change some other defaults.
4388 if $test -f usethreads.cbu; then
4389     echo "Your platform has some specific hints regarding threaded builds, using them..."
4390     . ./usethreads.cbu
4391 else
4392     case "$usethreads" in
4393         "$define"|true|[yY]*)
4394                 $cat <<EOM
4395 (Your platform does not have any specific hints for threaded builds.
4396  Assuming POSIX threads, then.)
4397 EOM
4398         ;;
4399     esac
4400 fi
4401
4402 : Check if multiplicity is required
4403 cat <<EOM
4404
4405 Perl can be built so that multiple Perl interpreters can coexist
4406 within the same Perl executable.
4407 EOM
4408
4409 case "$useithreads" in
4410 $define)
4411         cat <<EOM
4412 This multiple interpreter support is required for interpreter-based threads.
4413 EOM
4414         val="$define"
4415         ;;
4416 *)      case "$usemultiplicity" in
4417         $define|true|[yY]*)     dflt='y';;
4418         *) dflt='n';;
4419         esac
4420         echo " "
4421         echo "If this doesn't make any sense to you, just accept the default '$dflt'."
4422         rp='Build Perl for multiplicity?'
4423         . ./myread
4424         case "$ans" in
4425         y|Y)    val="$define" ;;
4426         *)      val="$undef" ;;
4427         esac
4428         ;;
4429 esac
4430 set usemultiplicity
4431 eval $setvar
4432
4433 : Check if morebits is requested
4434 case "$usemorebits" in
4435 "$define"|true|[yY]*)
4436         use64bitint="$define"
4437         uselongdouble="$define"
4438         usemorebits="$define"
4439         ;;
4440 *)      usemorebits="$undef"
4441         ;;
4442 esac
4443
4444 : Determine the C compiler to be used
4445 echo " "
4446 case "$cc" in
4447 '') dflt=cc;;
4448 *) dflt="$cc";;
4449 esac
4450 rp="Use which C compiler?"
4451 . ./myread
4452 cc="$ans"
4453
4454 : See whether they have no cc but they do have gcc
4455 . ./trygcc
4456 if $test -f cc.cbu; then
4457     . ./cc.cbu
4458 fi
4459 . ./checkcc
4460
4461 : make some quick guesses about what we are up against
4462 echo " "
4463 $echo $n "Hmm...  $c"
4464 echo exit 1 >bsd
4465 echo exit 1 >usg
4466 echo exit 1 >v7
4467 echo exit 1 >osf1
4468 echo exit 1 >eunice
4469 echo exit 1 >xenix
4470 echo exit 1 >venix
4471 echo exit 1 >os2
4472 d_bsd="$undef"
4473 $cat $sysroot/usr/include/signal.h $sysroot/usr/include/sys/signal.h >foo 2>/dev/null
4474 if test -f /osf_boot || $contains 'OSF/1' $sysroot/usr/include/ctype.h >/dev/null 2>&1
4475 then
4476         echo "Looks kind of like an OSF/1 system, but we'll see..."
4477         echo exit 0 >osf1
4478 elif test `echo abc | $tr a-z A-Z` = Abc ; then
4479         xxx=`./loc addbib blurfl $pth`
4480         if $test -f $xxx; then
4481         echo "Looks kind of like a USG system with BSD features, but we'll see..."
4482                 echo exit 0 >bsd
4483                 echo exit 0 >usg
4484         else
4485                 if $contains SIGTSTP foo >/dev/null 2>&1 ; then
4486                         echo "Looks kind of like an extended USG system, but we'll see..."
4487                 else
4488                         echo "Looks kind of like a USG system, but we'll see..."
4489                 fi
4490                 echo exit 0 >usg
4491         fi
4492 elif $contains SIGTSTP foo >/dev/null 2>&1 ; then
4493         echo "Looks kind of like a BSD system, but we'll see..."
4494         d_bsd="$define"
4495         echo exit 0 >bsd
4496 else
4497         echo "Looks kind of like a Version 7 system, but we'll see..."
4498         echo exit 0 >v7
4499 fi
4500 case "$eunicefix" in
4501 *unixtovms*)
4502         $cat <<'EOI'
4503 There is, however, a strange, musty smell in the air that reminds me of
4504 something...hmm...yes...I've got it...there's a VMS nearby, or I'm a Blit.
4505 EOI
4506         echo exit 0 >eunice
4507         d_eunice="$define"
4508 : it so happens the Eunice I know will not run shell scripts in Unix format
4509         ;;
4510 *)
4511         echo " "
4512         echo "Congratulations.  You aren't running Eunice."
4513         d_eunice="$undef"
4514         ;;
4515 esac
4516 : Detect OS2.  The p_ variable is set above in the Head.U unit.
4517 : Note that this also -- wrongly -- detects e.g. dos-djgpp, which also uses
4518 : semicolon as a patch separator
4519 case "$p_" in
4520 :) ;;
4521 *)
4522         $cat <<'EOI'
4523 I have the feeling something is not exactly right, however...don't tell me...
4524 lemme think...does HAL ring a bell?...no, of course, you're only running OS/2!
4525 (Or you may be running DOS with DJGPP.)
4526 EOI
4527         echo exit 0 >os2
4528         ;;
4529 esac
4530 if test -f /xenix; then
4531         echo "Actually, this looks more like a XENIX system..."
4532         echo exit 0 >xenix
4533         d_xenix="$define"
4534 else
4535         echo " "
4536         echo "It's not Xenix..."
4537         d_xenix="$undef"
4538 fi
4539 chmod +x xenix
4540 $eunicefix xenix
4541 if test -f /venix; then
4542         echo "Actually, this looks more like a VENIX system..."
4543         echo exit 0 >venix
4544 else
4545         echo " "
4546         if ./xenix; then
4547                 : null
4548         else
4549                 echo "Nor is it Venix..."
4550         fi
4551 fi
4552 chmod +x bsd usg v7 osf1 eunice xenix venix os2
4553 $eunicefix bsd usg v7 osf1 eunice xenix venix os2
4554 $rm -f foo
4555
4556 : Check if we are using GNU gcc and what its version is
4557 echo " "
4558 echo "Checking for GNU cc in disguise and/or its version number..." >&4
4559 $cat >try.c <<EOM
4560 #include <stdio.h>
4561 int main() {
4562 #if defined(__GNUC__) && !defined(__INTEL_COMPILER)
4563 #ifdef __VERSION__
4564         printf("%s\n", __VERSION__);
4565 #else
4566         printf("%s\n", "1");
4567 #endif
4568 #endif
4569         return(0);
4570 }
4571 EOM
4572 if $cc -o try $ccflags $ldflags try.c; then
4573         gccversion=`$run ./try`
4574         case "$gccversion" in
4575         '') echo "You are not using GNU cc." ;;
4576         *)  echo "You are using GNU cc $gccversion."
4577             ccname=gcc
4578             ;;
4579         esac
4580 else
4581         echo " "
4582         echo "*** WHOA THERE!!! ***" >&4
4583         echo "    Your C compiler \"$cc\" doesn't seem to be working!" >&4
4584         case "$knowitall" in
4585         '')
4586         echo "    You'd better start hunting for one and let me know about it." >&4
4587                 exit 1
4588                 ;;
4589         esac
4590 fi
4591 $rm -f try try.*
4592 case "$gccversion" in
4593 1*) cpp=`./loc gcc-cpp $cpp $pth` ;;
4594 esac
4595 case "$gccversion" in
4596 '') gccosandvers='' ;;
4597 *) gccshortvers=`echo "$gccversion"|sed 's/ .*//'`
4598    gccosandvers=`$cc -v 2>&1|grep '/specs$'|sed "s!.*/[^-/]*-[^-/]*-\([^-/]*\)/$gccshortvers/specs!\1!"`
4599    gccshortvers=''
4600    case "$gccosandvers" in
4601    $osname) gccosandvers='' ;; # linux gccs seem to have no linux osvers, grr
4602    $osname$osvers) ;; # looking good
4603    $osname*) cat <<EOM >&4
4604
4605 *** WHOA THERE!!! ***
4606
4607     Your gcc has not been compiled for the exact release of
4608     your operating system ($gccosandvers versus $osname$osvers).
4609
4610     In general it is a good idea to keep gcc synchronized with
4611     the operating system because otherwise serious problems
4612     may ensue when trying to compile software, like Perl.
4613
4614     I'm trying to be optimistic here, though, and will continue.
4615     If later during the configuration and build icky compilation
4616     problems appear (headerfile conflicts being the most common
4617     manifestation), I suggest reinstalling the gcc to match
4618     your operating system release.
4619
4620 EOM
4621       ;;
4622    *) gccosandvers='' ;; # failed to parse, better be silent
4623    esac
4624    ;;
4625 esac
4626 case "$ccname" in
4627 '') ccname="$cc" ;;
4628 esac
4629
4630 # gcc 3.* complain about adding -Idirectories that they already know about,
4631 # so we will take those off from locincpth.
4632 case "$gccversion" in
4633 3*)
4634     echo "main(){}">try.c
4635     for incdir in $locincpth; do
4636        warn=`$cc $ccflags -I$incdir -c try.c 2>&1 | \
4637              grep '^c[cp]p*[01]: warning: changing search order '`
4638        if test "X$warn" != X; then
4639            locincpth=`echo " $locincpth " | sed "s! $incdir ! !"`
4640        fi
4641     done
4642     $rm -f try try.*
4643 esac
4644
4645 # gcc 4.9 by default does some optimizations that break perl.
4646 # see ticket 121505.
4647 #
4648 # The -fwrapv disables those optimizations (and probably others,) so
4649 # for gcc 4.9 (and later, since the optimizations probably won't go
4650 # away), add -fwrapv unless the user requests -fno-wrapv, which
4651 # disables -fwrapv, or if the user requests -fsanitize=undefined,
4652 # which turns the overflows -fwrapv ignores into runtime errors.
4653 case "$gccversion" in
4654 4.[3-9].*|4.[1-9][0-9]*|[5-9].*|[1-9][0-9]*)
4655     case "$ccflags" in
4656     *-fno-wrapv*|*-fsanitize=undefined*|*-fwrapv*) ;;
4657     *) ccflags="$ccflags -fwrapv" ;;
4658     esac
4659 esac
4660
4661 : What should the include directory be ?
4662 : Use sysroot if set, so findhdr looks in the right place.
4663 echo " "
4664 $echo $n "Hmm...  $c"
4665 dflt="$sysroot/usr/include"
4666 incpath=''
4667 mips_type=''
4668 if $test -f /bin/mips && /bin/mips; then
4669         echo "Looks like a MIPS system..."
4670         $cat >usr.c <<'EOCP'
4671 #ifdef SYSTYPE_BSD43
4672 /bsd43
4673 #endif
4674 EOCP
4675         if $cc $cppflags -E usr.c > usr.out && $contains / usr.out >/dev/null 2>&1; then
4676                 dflt='/bsd43/usr/include'
4677                 incpath='/bsd43'
4678                 mips_type='BSD 4.3'
4679         else
4680                 mips_type='System V'
4681         fi
4682         $rm -f usr.c usr.out
4683         echo "and you're compiling with the $mips_type compiler and libraries."
4684         xxx_prompt=y
4685         echo "exit 0" >mips
4686 else
4687         echo "Doesn't look like a MIPS system."
4688         xxx_prompt=n
4689         echo "exit 1" >mips
4690 fi
4691 chmod +x mips
4692 $eunicefix mips
4693 case "$usrinc" in
4694 '') ;;
4695 *) dflt="$usrinc";;
4696 esac
4697 case "$xxx_prompt" in
4698 y)      fn=d/
4699         echo " "
4700         rp='Where are the include files you want to use?'
4701         . ./getfile
4702         usrinc="$ans"
4703         ;;
4704 *)      usrinc="$dflt"
4705         ;;
4706 esac
4707
4708 : see how we invoke the C preprocessor
4709 echo " "
4710 echo "Now, how can we feed standard input to your C preprocessor..." >&4
4711 cat <<'EOT' >testcpp.c
4712 #define ABC abc
4713 #define XYZ xyz
4714 ABC.XYZ
4715 EOT
4716 cd ..
4717 if test ! -f cppstdin; then
4718         if test "X$osname" = "Xaix" -a "X$gccversion" = X; then
4719                 # AIX cc -E doesn't show the absolute headerfile
4720                 # locations but we'll cheat by using the -M flag.
4721                 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
4722         else
4723                 echo 'cat >.$$.c; '"$cc $cppflags"' -E ${1+"$@"} .$$.c; rm .$$.c' >cppstdin
4724         fi
4725 else
4726         echo "Keeping your $hint cppstdin wrapper."
4727 fi
4728 chmod 755 cppstdin
4729 wrapper=`pwd`/cppstdin
4730 ok='false'
4731 cd UU
4732
4733 if $test "X$cppstdin" != "X" && \
4734         $cppstdin $cppminus <testcpp.c >testcpp.out 2>&1 && \
4735         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1
4736 then
4737         echo "You used to use $cppstdin $cppminus so we'll use that again."
4738         case "$cpprun" in
4739         '') echo "But let's see if we can live without a wrapper..." ;;
4740         *)
4741                 if $cpprun $cpplast <testcpp.c >testcpp.out 2>&1 && \
4742                         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1
4743                 then
4744                         echo "(And we'll use $cpprun $cpplast to preprocess directly.)"
4745                         ok='true'
4746                 else
4747                         echo "(However, $cpprun $cpplast does not work, let's see...)"
4748                 fi
4749                 ;;
4750         esac
4751 else
4752         case "$cppstdin" in
4753         '') ;;
4754         *)
4755                 echo "Good old $cppstdin $cppminus does not seem to be of any help..."
4756                 ;;
4757         esac
4758 fi
4759
4760 if $ok; then
4761         : nothing
4762 elif echo 'Maybe "'"$cc"' -E" will work...'; \
4763         $cc -E <testcpp.c >testcpp.out 2>&1; \
4764         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
4765         echo "Yup, it does."
4766         x_cpp="$cc $cppflags -E"
4767         x_minus='';
4768 elif echo 'Nope...maybe "'"$cc"' -E -" will work...'; \
4769         $cc -E - <testcpp.c >testcpp.out 2>&1; \
4770         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
4771         echo "Yup, it does."
4772         x_cpp="$cc $cppflags -E"
4773         x_minus='-';
4774 elif echo 'Nope...maybe "'"$cc"' -P" will work...'; \
4775         $cc -P <testcpp.c >testcpp.out 2>&1; \
4776         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
4777         echo "Yipee, that works!"
4778         x_cpp="$cc $cppflags -P"
4779         x_minus='';
4780 elif echo 'Nope...maybe "'"$cc"' -P -" will work...'; \
4781         $cc -P - <testcpp.c >testcpp.out 2>&1; \
4782         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
4783         echo "At long last!"
4784         x_cpp="$cc $cppflags -P"
4785         x_minus='-';
4786 elif echo 'No such luck, maybe "'$cpp'" will work...'; \
4787         $cpp <testcpp.c >testcpp.out 2>&1; \
4788         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
4789         echo "It works!"
4790         x_cpp="$cpp $cppflags"
4791         x_minus='';
4792 elif echo 'Nixed again...maybe "'$cpp' -" will work...'; \
4793         $cpp - <testcpp.c >testcpp.out 2>&1; \
4794         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
4795         echo "Hooray, it works!  I was beginning to wonder."
4796         x_cpp="$cpp $cppflags"
4797         x_minus='-';
4798 elif echo 'Uh-uh.  Time to get fancy.  Trying a wrapper...'; \
4799         $wrapper <testcpp.c >testcpp.out 2>&1; \
4800         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
4801         x_cpp="$wrapper"
4802         x_minus=''
4803         echo "Eureka!"
4804 else
4805         dflt=''
4806         rp="No dice.  I can't find a C preprocessor.  Name one:"
4807         . ./myread
4808         x_cpp="$ans"
4809         x_minus=''
4810         $x_cpp <testcpp.c >testcpp.out 2>&1
4811         if $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
4812                 echo "OK, that will do." >&4
4813         else
4814 echo "Sorry, I can't get that to work.  Go find one and rerun Configure." >&4
4815                 exit 1
4816         fi
4817 fi
4818
4819 case "$ok" in
4820 false)
4821         cppstdin="$x_cpp"
4822         cppminus="$x_minus"
4823         cpprun="$x_cpp"
4824         cpplast="$x_minus"
4825         set X $x_cpp
4826         shift
4827         case "$1" in
4828         "$cpp")
4829                 echo "Perhaps can we force $cc -E using a wrapper..."
4830                 if $wrapper <testcpp.c >testcpp.out 2>&1; \
4831                         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1
4832                 then
4833                         echo "Yup, we can."
4834                         cppstdin="$wrapper"
4835                         cppminus='';
4836                 else
4837                         echo "Nope, we'll have to live without it..."
4838                 fi
4839                 ;;
4840         esac
4841         case "$cpprun" in
4842         "$wrapper")
4843                 cpprun=''
4844                 cpplast=''
4845                 ;;
4846         esac
4847         ;;
4848 esac
4849
4850 case "$cppstdin" in
4851 "$wrapper"|'cppstdin') ;;
4852 *) $rm -f $wrapper;;
4853 esac
4854 $rm -f testcpp.c testcpp.out
4855
4856 : Adjust cppfilter for path component separator
4857 case "$osname" in
4858 vos) cppfilter="tr '\\\\>' '/' |" ;; # path component separator is >
4859 os2) cppfilter="sed -e 's|\\\\\\\\|/|g' |" ;; # path component separator is \
4860 *)   cppfilter='' ;;
4861 esac
4862
4863 : Use gcc to determine libpth and incpth
4864 # If using gcc or clang, we can get better values for libpth, incpth
4865 # and usrinc directly from the compiler.
4866 # Note that ccname for clang is also gcc.
4867 case "$ccname" in
4868     gcc)
4869         $echo 'extern int foo;' > try.c
4870         set X `$cppstdin -v try.c 2>&1 | $awk '/^#include </,/^End of search /'|$cppfilter $grep '/include'`
4871         shift
4872         if $test $# -gt 0; then
4873             incpth="$incpth $*"
4874             incpth="`$echo $incpth|$sed 's/^ //'`"
4875             for i in $*; do
4876                 j="`$echo $i|$sed 's,/include$,/lib,'`"
4877                 if $test -d $j; then
4878                     libpth="$libpth $j"
4879                 fi
4880             done
4881             libpth="`$echo $libpth|$sed 's/^ //'`"
4882             for xxx in $libpth $loclibpth $plibpth $glibpth; do
4883                 if $test -d $xxx; then
4884                     case " $libpth " in
4885                     *" $xxx "*) ;;
4886                     *) libpth="$libpth $xxx";;
4887                     esac
4888                 fi
4889             done
4890         fi
4891         $rm -f try.c
4892         case "$usrinc" in
4893         '') for i in $incpth; do
4894                 if $test -f $i/errno.h -a -f $i/stdio.h -a -f $i/time.h; then
4895                     usrinc="$i"
4896                     break
4897                 fi
4898             done
4899             ;;
4900         esac
4901
4902         case "$usecrosscompile" in
4903         $define|true|[yY]*)
4904             case "$incpth" in
4905                 '') echo "Incpth not defined." >&4; croak=y ;;
4906                 *)  echo "Using incpth '$incpth'." >&4 ;;
4907             esac
4908             case "$libpth" in
4909                 '') echo "Libpth not defined." >&4; croak=y ;;
4910                 *)  echo "Using libpth '$libpth'." >&4 ;;
4911             esac
4912             case "$usrinc" in
4913                 '') echo "Usrinc not defined." >&4; croak=y ;;
4914                 *)  echo "Using usrinc $usrinc." >&4 ;;
4915             esac
4916             case "$croak" in
4917                 y)
4918                 if test "X$sysroot" = X; then
4919                     echo "Cannot continue, aborting." >&4; exit 1
4920                 else
4921                     echo "Cross-compiling using sysroot $sysroot, failing to guess inc/lib paths is not fatal" >&4
4922                 fi
4923                 ;;
4924             esac
4925             ;;
4926         esac
4927     ;;
4928 esac
4929
4930 : Default value for incpth is just usrinc
4931 case "$incpth" in
4932 '') incpth="$usrinc";;
4933 esac
4934
4935 : Set private lib path
4936 case "$plibpth" in
4937 '') if ./mips; then
4938         plibpth="$incpath/usr/lib $sysroot/usr/local/lib $sysroot/usr/ccs/lib"
4939     fi;;
4940 esac
4941 case "$libpth" in
4942 ' ') dlist='';;
4943 '') dlist="$loclibpth $plibpth $glibpth";;
4944 *) dlist="$libpth";;
4945 esac
4946
4947 : Now check and see which directories actually exist, avoiding duplicates
4948 for xxx in $dlist
4949 do
4950     if $test -d $xxx; then
4951                 case " $libpth " in
4952                 *" $xxx "*) ;;
4953                 *) libpth="$libpth $xxx";;
4954                 esac
4955     fi
4956 done
4957 $cat <<'EOM'
4958
4959 Some systems have incompatible or broken versions of libraries.  Among
4960 the directories listed in the question below, please remove any you
4961 know not to be holding relevant libraries, and add any that are needed.
4962 Say "none" for none.
4963
4964 EOM
4965
4966 if test "X$sysroot" != X; then
4967     $cat <<EOM
4968 You have set sysroot to $sysroot, please supply the directories excluding sysroot
4969
4970 EOM
4971 fi
4972
4973 case "$libpth" in
4974 '') dflt='none';;
4975 *)
4976         set X $libpth
4977         shift
4978         dflt=${1+"$@"}
4979         ;;
4980 esac
4981 rp="Directories to use for library searches?"
4982 . ./myread
4983 case "$ans" in
4984 none) libpth=' ';;
4985 *) libpth="$ans";;
4986 esac
4987
4988 : compute shared library extension
4989 case "$so" in
4990 '')
4991         if xxx=`./loc libc.sl X $libpth`; $test -f "$xxx"; then
4992                 dflt='sl'
4993         else
4994                 dflt='so'
4995         fi
4996         ;;
4997 *) dflt="$so";;
4998 esac
4999 $cat <<EOM
5000
5001 On some systems, shared libraries may be available.  Answer 'none' if
5002 you want to suppress searching of shared libraries for the remainder
5003 of this configuration.
5004
5005 EOM
5006 rp='What is the file extension used for shared libraries?'
5007 . ./myread
5008 so="$ans"
5009
5010 : Does target system insist that shared library basenames are unique
5011 $cat << EOM
5012
5013 Some dynamic loaders assume that the *basename* of shared library filenames
5014 are globally unique.  We'll default this to undef as we assume your system
5015 is not this weird. Set to defined if you're on one of them.
5016
5017 EOM
5018
5019 dflt='n'
5020 rp='Make shared library basenames unique?'
5021 . ./myread
5022 case "$ans" in
5023 y|Y) val="$define" ;;
5024 *)   val="$undef"  ;;
5025 esac
5026 set d_libname_unique
5027 eval $setvar
5028
5029 : Define several unixisms.
5030 : Hints files or command line option can be used to override them.
5031 : The convoluted testing is in case hints files set either the old
5032 : or the new name.
5033 case "$_exe" in
5034 '')     case "$exe_ext" in
5035         '')     ;;
5036         *)      _exe="$exe_ext" ;;
5037         esac
5038         ;;
5039 esac
5040 case "$_a" in
5041 '')     case "$lib_ext" in
5042     '') _a='.a';;
5043         *)      _a="$lib_ext" ;;
5044         esac
5045         ;;
5046 esac
5047 case "$_o" in
5048 '') case "$obj_ext" in
5049         '')     _o='.o';;
5050         *)      _o="$obj_ext";;
5051         esac
5052         ;;
5053 esac
5054 case "$p_" in
5055 '') case "$path_sep" in
5056         '')     p_=':';;
5057         *)      p_="$path_sep";;
5058         esac
5059         ;;
5060 esac
5061 exe_ext=$_exe
5062 lib_ext=$_a
5063 obj_ext=$_o
5064 path_sep=$p_
5065
5066 rm_try="$rm -f try try$_exe a.out .out try.[cho] try.$_o core core.try* try.core*"
5067
5068 : Which makefile gets called first.  This is used by make depend.
5069 case "$firstmakefile" in
5070 '') firstmakefile='makefile';;
5071 esac
5072
5073 : Check is we will use socks
5074 case "$usesocks" in
5075 $define|true|[yY]*)     dflt='y';;
5076 *) dflt='n';;
5077 esac
5078 cat <<EOM
5079
5080 Perl can be built to use the SOCKS proxy protocol library.  To do so,
5081 Configure must be run with -Dusesocks.  If you use SOCKS you also need
5082 to use the PerlIO abstraction layer, this will be implicitly selected.
5083
5084 If this doesn't make any sense to you, just accept the default '$dflt'.
5085 EOM
5086 rp='Build Perl for SOCKS?'
5087 . ./myread
5088 case "$ans" in
5089 y|Y)    val="$define" ;;
5090 *)      val="$undef" ;;
5091 esac
5092 set usesocks
5093 eval $setvar
5094
5095 : Check for uselongdouble support
5096 case "$ccflags" in
5097 *-DUSE_LONG_DOUBLE*|*-DUSE_MORE_BITS*) uselongdouble="$define" ;;
5098 esac
5099
5100 case "$uselongdouble" in
5101 $define|true|[yY]*)     dflt='y';;
5102 *) dflt='n';;
5103 esac
5104 cat <<EOM
5105
5106 Perl can be built to take advantage of long doubles which
5107 (if available) may give more accuracy and range for floating point numbers.
5108
5109 If this doesn't make any sense to you, just accept the default '$dflt'.
5110 EOM
5111 rp='Try to use long doubles if available?'
5112 . ./myread
5113 case "$ans" in
5114 y|Y)    val="$define"   ;;
5115 *)      val="$undef"    ;;
5116 esac
5117 set uselongdouble
5118 eval $setvar
5119
5120 case "$uselongdouble" in
5121 true|[yY]*) uselongdouble="$define" ;;
5122 esac
5123
5124 : Look for a hint-file generated 'call-back-unit'.  If the
5125 : user has specified that long doubles should be used,
5126 : we may need to set or change some other defaults.
5127 if $test -f uselongdouble.cbu; then
5128     echo "Your platform has some specific hints regarding long doubles, using them..."
5129     . ./uselongdouble.cbu
5130 else
5131     case "$uselongdouble" in
5132         $define)
5133                 $cat <<EOM
5134 (Your platform does not have any specific hints for long doubles.)
5135 EOM
5136         ;;
5137     esac
5138 fi
5139
5140 : Looking for optional libraries
5141 echo " "
5142 echo "Checking for optional libraries..." >&4
5143 case "$libs" in
5144 ' '|'') dflt='';;
5145 *) dflt="$libs";;
5146 esac
5147 case "$libswanted" in
5148 '') libswanted='c_s';;
5149 esac
5150 case "$usesocks" in
5151 "$define") libswanted="$libswanted socks5 socks5_sh" ;;
5152 esac
5153 case "$usecbacktrace" in
5154 "$define") libswanted="$libswanted bfd" ;;
5155 esac
5156 libsfound=''
5157 libsfiles=''
5158 libsdirs=''
5159 libspath=''
5160 for thisdir in $libpth $xlibpth; do
5161   test -d $thisdir && libspath="$libspath $thisdir"
5162 done
5163 for thislib in $libswanted; do
5164         for thisdir in $libspath; do
5165             xxx=''
5166             if $test ! -f "$xxx" -a "X$ignore_versioned_solibs" = "X"; then
5167                 xxx=`ls $thisdir/lib$thislib.$so.[0-9] 2>/dev/null|sed -n '$p'`
5168                 $test -f "$xxx" && eval $libscheck
5169                 $test -f "$xxx" && libstyle=shared
5170             fi
5171             if test ! -f "$xxx"; then
5172                 xxx=$thisdir/lib$thislib.$so
5173                 $test -f "$xxx" && eval $libscheck
5174                 $test -f "$xxx" && libstyle=shared
5175             fi
5176             if test ! -f "$xxx"; then
5177                 xxx=$thisdir/lib$thislib$_a
5178                 $test -f "$xxx" && eval $libscheck
5179                 $test -f "$xxx" && libstyle=static
5180             fi
5181             if test ! -f "$xxx"; then
5182                 xxx=$thisdir/$thislib$_a
5183                 $test -f "$xxx" && eval $libscheck
5184                 $test -f "$xxx" && libstyle=static
5185             fi
5186             if test ! -f "$xxx"; then
5187                 xxx=$thisdir/lib${thislib}_s$_a
5188                 $test -f "$xxx" && eval $libscheck
5189                 $test -f "$xxx" && libstyle=static
5190                 $test -f "$xxx" && thislib=${thislib}_s
5191             fi
5192             if test ! -f "$xxx"; then
5193                 xxx=$thisdir/Slib$thislib$_a
5194                 $test -f "$xxx" && eval $libscheck
5195                 $test -f "$xxx" && libstyle=static
5196             fi
5197             if $test -f "$xxx"; then
5198                 case "$libstyle" in
5199                 shared) echo "Found -l$thislib (shared)." ;;
5200                 static) echo "Found -l$thislib." ;;
5201                 *)      echo "Found -l$thislib ($libstyle)." ;;
5202                 esac
5203                 case " $dflt " in
5204                 *"-l$thislib "*);;
5205                 *) dflt="$dflt -l$thislib"
5206                    libsfound="$libsfound $xxx"
5207                    yyy=`basename $xxx`
5208                    libsfiles="$libsfiles $yyy"
5209                    yyy=`echo $xxx|$sed -e "s%/$yyy\\$%%"`
5210                    case " $libsdirs " in
5211                    *" $yyy "*) ;;
5212                    *) libsdirs="$libsdirs $yyy" ;;
5213                    esac
5214                    ;;
5215                 esac
5216                 break
5217             fi
5218         done
5219         if $test ! -f "$xxx"; then
5220             echo "No -l$thislib."
5221         fi
5222 done
5223 set X $dflt
5224 shift
5225 dflt="$*"
5226 case "$libs" in
5227 '') dflt="$dflt";;
5228 *) dflt="$libs";;
5229 esac
5230 case "$dflt" in
5231 ' '|'') dflt='none';;
5232 esac
5233
5234 $cat <<EOM
5235
5236 In order to compile $package on your machine, a number of libraries
5237 are usually needed.  Include any other special libraries here as well.
5238 Say "none" for none.  The default list is almost always right.
5239 EOM
5240
5241 echo " "
5242 rp="What libraries to use?"
5243 . ./myread
5244 case "$ans" in
5245 none) libs=' ';;
5246 *) libs="$ans";;
5247 esac
5248
5249 : determine optimization, if desired, or use for debug flag also
5250 case "$optimize" in
5251 ' '|$undef) dflt='none';;
5252 '') dflt='-O';;
5253 *) dflt="$optimize";;
5254 esac
5255 $cat <<EOH
5256
5257 By default, $package compiles with the -O flag to use the optimizer.
5258 Alternately, you might want to use the symbolic debugger, which uses
5259 the -g flag (on traditional Unix systems).  Either flag can be
5260 specified here.  To use neither flag, specify the word "none".
5261
5262 EOH
5263 rp="What optimizer/debugger flag should be used?"
5264 . ./myread
5265 optimize="$ans"
5266 case "$optimize" in
5267 'none') optimize=" ";;
5268 esac
5269
5270 : Check what DEBUGGING is required from the command line
5271 : -DEBUGGING      or -DDEBUGGING or
5272 : -DEBUGGING=both                       = -g + -DDEBUGGING
5273 : -DEBUGGING=-g   or -Doptimize=-g      = -g
5274 : -DEBUGGING=none or -UDEBUGGING        =
5275 : -DEBUGGING=old  or -DEBUGGING=default = ? $optimize
5276 case "$EBUGGING" in
5277 '')     ;;
5278 *)      DEBUGGING=$EBUGGING ;;
5279 esac
5280
5281 case "$DEBUGGING" in
5282 -g|both|$define)
5283     case "$optimize" in
5284         *-g*) ;;
5285         *)    optimize="$optimize -g" ;;
5286     esac ;;
5287 none|$undef)
5288     case "$optimize" in
5289         *-g*)   set `echo "X $optimize " | sed 's/ -g / /'`
5290                 shift
5291                 optimize="$*"
5292                 ;;
5293     esac ;;
5294 esac
5295
5296 dflt=''
5297 case "$DEBUGGING" in
5298 both|$define) dflt='-DDEBUGGING'
5299 esac
5300
5301 : argument order is deliberate, as the flag will start with - which set could
5302 : think is an option
5303 checkccflag='check=$1; flag=$2; callback=$3;
5304 echo " ";
5305 echo "Checking if your compiler accepts $flag" 2>&1;
5306 [ "X$sysroot" != "X" ] && echo "For sysroot = $sysroot";
5307 echo "int main(void) { return 0; }" > gcctest.c;
5308 if $cc $_sysroot -O2 $flag -o gcctest gcctest.c 2>gcctest.out && $run ./gcctest; then
5309     echo "Yes, it does." 2>&1;
5310     if $test -s gcctest.out ; then
5311         echo "But your platform does not like it:";
5312         cat gcctest.out;
5313     else
5314         case "$ccflags" in
5315         *$check*)
5316             echo "Leaving current flags $ccflags alone." 2>&1
5317             ;;
5318         *) dflt="$dflt $flag";
5319             eval $callback
5320             ;;
5321         esac
5322     fi
5323 else
5324     echo "Nope, it does not, but that is ok." 2>&1;
5325 fi
5326 '
5327
5328 : We will not override a previous value, but we might want to
5329 : augment a hint file
5330 case "$hint" in
5331 default|recommended)
5332         case "$gccversion" in
5333         1*) dflt="$dflt -fpcc-struct-return" ;;
5334         esac
5335         case "$optimize:$DEBUGGING" in
5336         *-g*:old) dflt="$dflt -DDEBUGGING";;
5337         esac
5338         case "$gccversion" in
5339         2*) if $test -d /etc/conf/kconfig.d &&
5340                         $contains _POSIX_VERSION $usrinc/sys/unistd.h >/dev/null 2>&1
5341                 then
5342                         # Interactive Systems (ISC) POSIX mode.
5343                         dflt="$dflt -posix"
5344                 fi
5345                 ;;
5346         esac
5347         case "$gccversion" in
5348         1*) ;;
5349         2.[0-8]*) ;;
5350         ?*)     set strict-aliasing -fno-strict-aliasing
5351                 eval $checkccflag
5352                 ;;
5353         esac
5354         # For gcc, adding -pipe speeds up compilations for some, but apparently
5355         # some assemblers can't read from stdin.  (It also slows down compilations
5356         # in other cases, but those are apparently rarer these days.)  AD 5/2004.
5357         case "$gccversion" in
5358         ?*)     set pipe -pipe
5359                 eval $checkccflag
5360                 ;;
5361         esac
5362
5363         # on x86_64 (at least) we require an extra library (libssp) in the
5364         # link command line. This library is not named, so I infer that it is
5365         # an implementation detail that may change. Hence the safest approach
5366         # is to add the flag to the flags passed to the compiler at link time,
5367         # as that way the compiler can do the right implementation dependant
5368         # thing. (NWC)
5369         case "$gccversion" in
5370         ?*)     set stack-protector -fstack-protector
5371                 eval $checkccflag
5372                 ;;
5373         esac
5374         ;;
5375 esac
5376
5377 case "$mips_type" in
5378 *BSD*|'') inclwanted="$locincpth $usrinc";;
5379 *) inclwanted="$locincpth $inclwanted $usrinc/bsd";;
5380 esac
5381 for thisincl in $inclwanted; do
5382         if $test -d $thisincl; then
5383                 if $test x$thisincl != x$usrinc; then
5384                         case "$dflt" in
5385                         *" -I$thisincl "*);;
5386                         *) dflt="$dflt -I$thisincl ";;
5387                         esac
5388                 fi
5389         fi
5390 done
5391
5392 inctest='if $contains $2 $usrinc/$1 >/dev/null 2>&1; then
5393         xxx=true;
5394 elif $contains $2 $usrinc/sys/$1 >/dev/null 2>&1; then
5395         xxx=true;
5396 else
5397         xxx=false;
5398 fi;
5399 if $xxx; then
5400         case "$dflt" in
5401         *$2*);;
5402         *) dflt="$dflt -D$2";;
5403         esac;
5404 fi'
5405
5406 set signal.h LANGUAGE_C; eval $inctest
5407
5408 case "$usesocks" in
5409 $define)
5410         ccflags="$ccflags -DSOCKS"
5411         ;;
5412 esac
5413
5414 case "$hint" in
5415 default|recommended) dflt="$ccflags $dflt" ;;
5416 *) dflt="$ccflags";;
5417 esac
5418
5419 case "$dflt" in
5420 ''|' ') dflt=none;;
5421 esac
5422
5423 $cat <<EOH
5424
5425 Your C compiler may want other flags.  For this question you should include
5426 -I/whatever and -DWHATEVER flags and any other flags used by the C compiler,
5427 but you should NOT include libraries or ld flags like -lwhatever.  If you
5428 want $package to honor its debug switch, you should include -DDEBUGGING here.
5429 Your C compiler might also need additional flags, such as -D_POSIX_SOURCE.
5430
5431 To use no flags, specify the word "none".
5432
5433 EOH
5434 set X $dflt
5435 shift
5436 dflt=${1+"$@"}
5437 rp="Any additional cc flags?"
5438 . ./myread
5439 case "$ans" in
5440 none) ccflags='';;
5441 *) ccflags="$ans";;
5442 esac
5443
5444 : the following weeds options from ccflags that are of no interest to cpp
5445 case "$cppflags" in
5446 '') cppflags="$ccflags" ;;
5447 *)  cppflags="$cppflags $ccflags" ;;
5448 esac
5449 case "$gccversion" in
5450 1*) cppflags="$cppflags -D__GNUC__"
5451 esac
5452 case "$mips_type" in
5453 '');;
5454 *BSD*) cppflags="$cppflags -DSYSTYPE_BSD43";;
5455 esac
5456 case "$cppflags" in
5457 '');;
5458 *)
5459         echo " "
5460         echo "Let me guess what the preprocessor flags are..." >&4
5461         set X $cppflags
5462         shift
5463         cppflags=''
5464         $cat >cpp.c <<'EOM'
5465 #define BLURFL foo
5466
5467 BLURFL xx LFRULB
5468 EOM
5469         previous=''
5470         for flag in $*
5471         do
5472                 case "$flag" in
5473                 -*) ftry="$flag";;
5474                 *) ftry="$previous $flag";;
5475                 esac
5476                 if $cppstdin -DLFRULB=bar $cppflags $ftry $cppminus <cpp.c \
5477                         >cpp1.out 2>/dev/null && \
5478                         $cpprun -DLFRULB=bar $cppflags $ftry $cpplast <cpp.c \
5479                         >cpp2.out 2>/dev/null && \
5480                         $contains 'foo.*xx.*bar' cpp1.out >/dev/null 2>&1 && \
5481                         $contains 'foo.*xx.*bar' cpp2.out >/dev/null 2>&1
5482                 then
5483                         cppflags="$cppflags $ftry"
5484                         previous=''
5485                 else
5486                         previous="$flag"
5487                 fi
5488         done
5489         set X $cppflags
5490         shift
5491         cppflags=${1+"$@"}
5492         case "$cppflags" in
5493         *-*)  echo "They appear to be: $cppflags";;
5494         esac
5495         $rm -f cpp.c cpp?.out
5496         ;;
5497 esac
5498
5499 : flags used in final linking phase
5500 case "$ldflags" in
5501 '') if ./venix; then
5502                 dflt='-i -z'
5503         else
5504                 dflt=''
5505         fi
5506         case "$ccflags" in
5507         *-posix*) dflt="$dflt -posix" ;;
5508         esac
5509         ;;
5510 *) dflt="$ldflags";;
5511 esac
5512 # See note above about -fstack-protector
5513 case "$ccflags" in
5514 *-fstack-protector*)
5515         case "$dflt" in
5516         *-fstack-protector*) ;; # Don't add it again
5517         *) dflt="$dflt -fstack-protector" ;;
5518         esac
5519         ;;
5520 esac
5521
5522 : Try to guess additional flags to pick up local libraries.
5523 for thislibdir in $libpth; do
5524         case " $loclibpth " in
5525         *" $thislibdir "*)
5526                 case "$dflt " in
5527                 *"-L$thislibdir "*) ;;
5528                 *)  dflt="$dflt -L$thislibdir" ;;
5529                 esac
5530                 ;;
5531         esac
5532 done
5533
5534 case "$dflt" in
5535 '') dflt='none' ;;
5536 esac
5537
5538 $cat <<EOH
5539
5540 Your C linker may need flags.  For this question you should
5541 include -L/whatever and any other flags used by the C linker, but you
5542 should NOT include libraries like -lwhatever.
5543
5544 Make sure you include the appropriate -L/path flags if your C linker
5545 does not normally search all of the directories you specified above,
5546 namely
5547         $libpth
5548 To use no flags, specify the word "none".
5549
5550 EOH
5551
5552 rp="Any additional ld flags (NOT including libraries)?"
5553 . ./myread
5554 case "$ans" in
5555 none) ldflags='';;
5556 *) ldflags="$ans";;
5557 esac
5558 rmlist="$rmlist pdp11"
5559
5560 : coherency check
5561 echo " "
5562 echo "Checking your choice of C compiler and flags for coherency..." >&4
5563 $cat > try.c <<'EOF'
5564 #include <stdio.h>
5565 int main() { printf("Ok\n"); return(0); }
5566 EOF
5567 set X $cc -o try $optimize $ccflags $ldflags try.c $libs
5568 shift
5569 $cat >try.msg <<'EOM'
5570 I've tried to compile and run the following simple program:
5571
5572 EOM
5573 $cat try.c >> try.msg
5574
5575 $cat >> try.msg <<EOM
5576
5577 I used the command:
5578
5579         $*
5580         $run ./try
5581
5582 and I got the following output:
5583
5584 EOM
5585 dflt=y
5586 if $sh -c "$cc -o try $optimize $ccflags $ldflags try.c $libs" >>try.msg 2>&1; then
5587         if $sh -c "$run ./try " >>try.msg 2>&1; then
5588                 xxx=`$run ./try`
5589                 case "$xxx" in
5590                 "Ok") dflt=n ;;
5591                 *)    echo 'The program compiled OK, but produced no output.' >> try.msg ;;
5592                 esac
5593         else
5594                 echo "The program compiled OK, but exited with status $?." >>try.msg
5595                 rp="You have a problem.  Shall I abort Configure"
5596                 dflt=y
5597         fi
5598 else
5599         echo "I can't compile the test program." >>try.msg
5600         rp="You have a BIG problem.  Shall I abort Configure"
5601         dflt=y
5602 fi
5603 case "$dflt" in
5604 y)
5605         $cat try.msg >&4
5606         case "$knowitall" in
5607         '')
5608                 echo "(The supplied flags or libraries might be incorrect.)"
5609                 ;;
5610         *) dflt=n;;
5611         esac
5612         echo " "
5613         . ./myread
5614         case "$ans" in
5615         n*|N*) ;;
5616         *)      echo "Ok.  Stopping Configure." >&4
5617                 exit 1
5618                 ;;
5619         esac
5620         ;;
5621 n) echo "OK, that should do.";;
5622 esac
5623 $rm_try gcctest gcctest.out
5624
5625 : define a shorthand compile call
5626 compile='
5627 mc_file=$1;
5628 shift;
5629 case "$usedevel" in $define|true|[yY]*) if $test ! -f "${mc_file}.c"; then
5630 echo "Internal Configure script bug - compiler test file ${mc_file}.c is missing. Please report this to perlbug@perl.org" >&4;
5631 exit 1;
5632 fi;
5633 esac;
5634 $cc -o ${mc_file} $optimize $ccflags $ldflags $* ${mc_file}.c $libs > /dev/null 2>&1;'
5635 : define a shorthand compile call for compilations that should be ok.
5636 compile_ok='
5637 mc_file=$1;
5638 shift;
5639 $cc -o ${mc_file} $optimize $ccflags $ldflags $* ${mc_file}.c $libs;'
5640
5641 : determine filename position in cpp output
5642 echo " "
5643 echo "Computing filename position in cpp output for #include directives..." >&4
5644 case "$osname" in
5645 vos) testaccess=-e ;;
5646 *)   testaccess=-r ;;
5647 esac
5648 echo '#include <stdio.h>' > foo.c
5649 $cat >fieldn <<EOF
5650 $startsh
5651 $cppstdin $cppflags $cppminus <foo.c 2>/dev/null | \
5652 $grep '^[       ]*#.*stdio\.h' | \
5653 while read cline; do
5654         pos=1
5655         set \$cline
5656         while $test \$# -gt 0; do
5657                 if $test $testaccess \`echo \$1 | $tr -d '"'\`; then
5658                         echo "\$pos"
5659                         exit 0
5660                 fi
5661                 shift
5662                 pos=\`expr \$pos + 1\`
5663         done
5664 done
5665 EOF
5666 chmod +x fieldn
5667 fieldn=`./fieldn`
5668 $rm -f foo.c fieldn
5669 case $fieldn in
5670 '') pos='???';;
5671 1) pos=first;;
5672 2) pos=second;;
5673 3) pos=third;;
5674 *) pos="${fieldn}th";;
5675 esac
5676 echo "Your cpp writes the filename in the $pos field of the line."
5677
5678 : locate header file
5679 $cat >findhdr <<EOF
5680 $startsh
5681 wanted=\$1
5682 name=''
5683 for usrincdir in $incpth
5684 do
5685         if test -f \$usrincdir/\$wanted; then
5686                 echo "\$usrincdir/\$wanted"
5687                 exit 0
5688         fi
5689 done
5690 awkprg='{ print \$$fieldn }'
5691 echo "#include <\$wanted>" > foo\$\$.c
5692 $cppstdin $cppminus $cppflags < foo\$\$.c 2>/dev/null | \
5693 $cppfilter $grep "^[    ]*#.*\$wanted" | \
5694 while read cline; do
5695         name=\`echo \$cline | $awk "\$awkprg" | $tr -d '"'\`
5696         case "\$name" in
5697         *[/\\\\]\$wanted) echo "\$name"; exit 1;;
5698         *[\\\\/]\$wanted) echo "\$name"; exit 1;;
5699         *) exit 2;;
5700         esac;
5701 done;
5702 #
5703 # status = 0: grep returned 0 lines, case statement not executed
5704 # status = 1: headerfile found
5705 # status = 2: while loop executed, no headerfile found
5706 #
5707 status=\$?
5708 $rm -f foo\$\$.c;
5709 if test \$status -eq 1; then
5710         exit 0;
5711 fi
5712 exit 1
5713 EOF
5714 chmod +x findhdr
5715
5716 : define an alternate in-header-list? function
5717 inhdr='echo " "; td=$define; tu=$undef; yyy=$@;
5718 cont=true; xxf="echo \"<\$1> found.\" >&4";
5719 case $# in 2) xxnf="echo \"<\$1> NOT found.\" >&4";;
5720 *) xxnf="echo \"<\$1> NOT found, ...\" >&4";;
5721 esac;
5722 case $# in 4) instead=instead;; *) instead="at last";; esac;
5723 while $test "$cont"; do
5724         xxx=`./findhdr $1`
5725         var=$2; eval "was=\$$2";
5726         if $test "$xxx" && $test -r "$xxx";
5727         then eval $xxf;
5728         eval "case \"\$$var\" in $undef) . ./whoa; esac"; eval "$var=\$td";
5729                 cont="";
5730         else eval $xxnf;
5731         eval "case \"\$$var\" in $define) . ./whoa; esac"; eval "$var=\$tu"; fi;
5732         set $yyy; shift; shift; yyy=$@;
5733         case $# in 0) cont="";;
5734         2) xxf="echo \"but I found <\$1> $instead.\" >&4";
5735                 xxnf="echo \"and I did not find <\$1> either.\" >&4";;
5736         *) xxf="echo \"but I found <\$1\> instead.\" >&4";
5737                 xxnf="echo \"there is no <\$1>, ...\" >&4";;
5738         esac;
5739 done;
5740 while $test "$yyy";
5741 do set $yyy; var=$2; eval "was=\$$2";
5742         eval "case \"\$$var\" in $define) . ./whoa; esac"; eval "$var=\$tu";
5743         set $yyy; shift; shift; yyy=$@;
5744 done'
5745
5746 : see if stdlib is available
5747 set stdlib.h i_stdlib
5748 eval $inhdr
5749
5750 : check for lengths of integral types
5751 echo " "
5752 case "$intsize" in
5753 '')
5754         echo "Checking to see how big your integers are..." >&4
5755         $cat >try.c <<EOCP
5756 #include <stdio.h>
5757 #$i_stdlib I_STDLIB
5758 #ifdef I_STDLIB
5759 #include <stdlib.h>
5760 #endif
5761 int main()
5762 {
5763         printf("intsize=%d;\n", (int)sizeof(int));
5764         printf("longsize=%d;\n", (int)sizeof(long));
5765         printf("shortsize=%d;\n", (int)sizeof(short));
5766         exit(0);
5767 }
5768 EOCP
5769         set try
5770         if eval $compile_ok && $run ./try > /dev/null; then
5771                 eval `$run ./try`
5772                 echo "Your integers are $intsize bytes long."
5773                 echo "Your long integers are $longsize bytes long."
5774                 echo "Your short integers are $shortsize bytes long."
5775         else
5776                 $cat >&4 <<EOM
5777 !
5778 Help! I can't compile and run the intsize test program: please enlighten me!
5779 (This is probably a misconfiguration in your system or libraries, and
5780 you really ought to fix it.  Still, I'll try anyway.)
5781 !
5782 EOM
5783                 dflt=4
5784                 rp="What is the size of an integer (in bytes)?"
5785                 . ./myread
5786                 intsize="$ans"
5787                 dflt=$intsize
5788                 rp="What is the size of a long integer (in bytes)?"
5789                 . ./myread
5790                 longsize="$ans"
5791                 dflt=2
5792                 rp="What is the size of a short integer (in bytes)?"
5793                 . ./myread
5794                 shortsize="$ans"
5795         fi
5796         ;;
5797 esac
5798 $rm_try
5799
5800 : check for long long
5801 echo " "
5802 echo "Checking to see if you have long long..." >&4
5803 echo 'int main() { long long x = 7; return 0; }' > try.c
5804 set try
5805 if eval $compile; then
5806         val="$define"
5807         echo "You have long long."
5808 else
5809         val="$undef"
5810         echo "You do not have long long."
5811 fi
5812 $rm_try
5813 set d_longlong
5814 eval $setvar
5815
5816 : check for length of long long
5817 case "${d_longlong}${longlongsize}" in
5818 $define)
5819         echo " "
5820         echo "Checking to see how big your long longs are..." >&4
5821         $cat >try.c <<'EOCP'
5822 #include <stdio.h>
5823 int main()
5824 {
5825     printf("%d\n", (int)sizeof(long long));
5826     return(0);
5827 }
5828 EOCP
5829         set try
5830         if eval $compile_ok; then
5831                 longlongsize=`$run ./try`
5832                 echo "Your long longs are $longlongsize bytes long."
5833         else
5834                 dflt='8'
5835                 echo " "
5836                 echo "(I can't seem to compile the test program.  Guessing...)"
5837                 rp="What is the size of a long long (in bytes)?"
5838                 . ./myread
5839                 longlongsize="$ans"
5840         fi
5841         if $test "X$longsize" = "X$longlongsize"; then
5842                 echo "(That isn't any different from an ordinary long.)"
5843         fi
5844         ;;
5845 esac
5846 $rm_try
5847
5848 : see if inttypes.h is available
5849 : we want a real compile instead of Inhdr because some systems
5850 : have an inttypes.h which includes non-existent headers
5851 echo " "
5852 $cat >try.c <<EOCP
5853 #include <inttypes.h>
5854 int main() {
5855         static int32_t foo32 = 0x12345678;
5856 }
5857 EOCP
5858 set try
5859 if eval $compile; then
5860         echo "<inttypes.h> found." >&4
5861         val="$define"
5862 else
5863         echo "<inttypes.h> NOT found." >&4
5864         val="$undef"
5865 fi
5866 $rm_try
5867 set i_inttypes
5868 eval $setvar
5869
5870 : check for int64_t
5871 echo " "
5872 echo "Checking to see if you have int64_t..." >&4
5873 $cat >try.c <<EOCP
5874 #include <sys/types.h>
5875 #$i_inttypes I_INTTYPES
5876 #ifdef I_INTTYPES
5877 #include <inttypes.h>
5878 #endif
5879 int main() { int64_t x = 7; }
5880 EOCP
5881 set try
5882 if eval $compile; then
5883         val="$define"
5884         echo "You have int64_t."
5885 else
5886         val="$undef"
5887         echo "You do not have int64_t."
5888 fi
5889 $rm_try
5890 set d_int64_t
5891 eval $setvar
5892
5893 : Check if 64bit ints have a quad type
5894 echo " "
5895 echo "Checking which 64-bit integer type we could use..." >&4
5896
5897 case "$intsize" in
5898 8) val=int
5899    set quadtype
5900    eval $setvar
5901    val='"unsigned int"'
5902    set uquadtype
5903    eval $setvar
5904    quadkind=1
5905    ;;
5906 *) case "$longsize" in
5907    8) val=long
5908       set quadtype
5909       eval $setvar
5910       val='"unsigned long"'
5911       set uquadtype
5912       eval $setvar
5913       quadkind=2
5914       ;;
5915    *) case "$d_longlong:$longlongsize" in
5916       define:8)
5917         val='"long long"'
5918         set quadtype
5919         eval $setvar
5920         val='"unsigned long long"'
5921         set uquadtype
5922         eval $setvar
5923         quadkind=3
5924         ;;
5925       *) case "$d_int64_t" in
5926          define)
5927            val=int64_t
5928            set quadtype
5929            eval $setvar
5930            val=uint64_t
5931            set uquadtype
5932            eval $setvar
5933            quadkind=4
5934            ;;
5935          esac
5936          ;;
5937       esac
5938       ;;
5939    esac
5940    ;;
5941 esac
5942
5943 case "$quadtype" in
5944 '')     echo "Alas, no 64-bit integer types in sight." >&4
5945         d_quad="$undef"
5946         ;;
5947 *)      echo "We could use '$quadtype' for 64-bit integers." >&4
5948         d_quad="$define"
5949         ;;
5950 esac
5951
5952 : Do we want 64bit support
5953 case "$uselonglong" in
5954 "$define"|true|[yY]*)
5955         cat <<EOM >&4
5956
5957 *** Configure -Duselonglong is deprecated, using -Duse64bitint instead.
5958 EOM
5959         use64bitint="$define"
5960         ;;
5961 esac
5962 case "$use64bits" in
5963 "$define"|true|[yY]*)
5964         cat <<EOM >&4
5965
5966 *** Configure -Duse64bits is deprecated, using -Duse64bitint instead.
5967 EOM
5968         use64bitint="$define"
5969         ;;
5970 esac
5971 case "$use64bitints" in
5972 "$define"|true|[yY]*)
5973         cat <<EOM >&4
5974
5975 *** There is no Configure -Duse64bitints, using -Duse64bitint instead.
5976 EOM
5977         use64bitint="$define"
5978         ;;
5979 esac
5980 case "$use64bitsint" in
5981 "$define"|true|[yY]*)
5982         cat <<EOM >&4
5983
5984 *** There is no Configure -Duse64bitsint, using -Duse64bitint instead.
5985 EOM
5986         use64bitint="$define"
5987         ;;
5988 esac
5989 case "$uselonglongs" in
5990 "$define"|true|[yY]*)
5991         cat <<EOM >&4
5992
5993 *** There is no Configure -Duselonglongs, using -Duse64bitint instead.
5994 EOM
5995         use64bitint="$define"
5996         ;;
5997 esac
5998 case "$use64bitsall" in
5999 "$define"|true|[yY]*)
6000         cat <<EOM >&4
6001
6002 *** There is no Configure -Duse64bitsall, using -Duse64bitall instead.
6003 EOM
6004         use64bitall="$define"
6005         ;;
6006 esac
6007
6008 case "$ccflags" in
6009 *-DUSE_LONG_LONG*|*-DUSE_64_BIT_INT*|*-DUSE_64_BIT_ALL*) use64bitint="$define";;
6010 esac
6011 case "$use64bitall" in
6012 "$define"|true|[yY]*) use64bitint="$define" ;;
6013 esac
6014
6015 case "$longsize" in
6016 8) cat <<EOM
6017
6018 You have natively 64-bit long integers.
6019 EOM
6020    val="$define"
6021    ;;
6022 *) case "$use64bitint" in
6023    "$define"|true|[yY]*) dflt='y';;
6024    *) dflt='n';;
6025    esac
6026    case "$d_quad" in
6027    "$define") ;;
6028    *) dflt='n' ;;
6029    esac
6030    cat <<EOM
6031
6032 Perl can be built to take advantage of 64-bit integer types
6033 on some systems.  To do so, Configure can be run with -Duse64bitint.
6034 Choosing this option will most probably introduce binary incompatibilities.
6035
6036 If this doesn't make any sense to you, just accept the default '$dflt'.
6037 (The default has been chosen based on your configuration.)
6038 EOM
6039    rp='Try to use 64-bit integers, if available?'
6040    . ./myread
6041    case "$ans" in
6042    [yY]*) val="$define" ;;
6043    *)     val="$undef"  ;;
6044    esac
6045    ;;
6046 esac
6047 set use64bitint
6048 eval $setvar
6049
6050 case "$use64bitall" in
6051 "$define"|true|[yY]*) dflt='y' ;;
6052 *) case "$longsize" in
6053    8) dflt='y' ;;
6054    *) dflt='n' ;;
6055    esac
6056    ;;
6057 esac
6058 cat <<EOM
6059
6060 You may also choose to try maximal 64-bitness.  It means using as much
6061 64-bitness as possible on the platform.  This in turn means even more
6062 binary incompatibilities.  On the other hand, your platform may not
6063 have any more 64-bitness available than what you already have chosen.
6064
6065 If this doesn't make any sense to you, just accept the default '$dflt'.
6066 (The default has been chosen based on your configuration.)
6067 EOM
6068 rp='Try to use maximal 64-bit support, if available?'
6069 . ./myread
6070 case "$ans" in
6071 [yY]*) val="$define" ;;
6072 *)     val="$undef"  ;;
6073 esac
6074 set use64bitall
6075 eval $setvar
6076 case "$use64bitall" in
6077 "$define")
6078         case "$use64bitint" in
6079         "$undef")
6080                 cat <<EOM
6081
6082 Since you have chosen a maximally 64-bit build, I'm also turning on
6083 the use of 64-bit integers.
6084 EOM
6085                 use64bitint="$define" ;;
6086         esac
6087         ;;
6088 esac
6089
6090 : Look for a hint-file generated 'call-back-unit'.  If the
6091 : user has specified that a 64-bit perl is to be built,
6092 : we may need to set or change some other defaults.
6093 if $test -f use64bitint.cbu; then
6094         echo "Your platform has some specific hints regarding 64-bit integers, using them..."
6095         . ./use64bitint.cbu
6096 fi
6097 case "$use64bitint" in
6098 "$define"|true|[yY]*)
6099         : This test was common to all the OpenBSD forks, and seems harmless for
6100         : other platforms:
6101         echo " "
6102         echo "Checking if your C library has broken 64-bit functions..." >&4
6103         cat >try.c <<EOCP
6104 #include <stdio.h>
6105 typedef $uquadtype myULL;
6106 int main (void)
6107 {
6108     struct {
6109         double d;
6110         myULL  u;
6111     } *p, test[] = {
6112         {4294967303.15, 4294967303ULL},
6113         {4294967294.2,  4294967294ULL},
6114         {4294967295.7,  4294967295ULL},
6115         {0.0, 0ULL}
6116     };
6117     for (p = test; p->u; p++) {
6118         myULL x = (myULL)p->d;
6119         if (x != p->u) {
6120             printf("buggy\n");
6121             return 0;
6122         }
6123     }
6124     printf("ok\n");
6125     return 0;
6126 }
6127 EOCP
6128         set try
6129         if eval $compile_ok; then
6130             libcquad=`$run ./try`
6131             echo "Your C library's 64-bit functions are $libcquad."
6132         else
6133             echo "(I can't seem to compile the test program.)"
6134             echo "Assuming that your C library's 64-bit functions are ok."
6135             libcquad="ok"
6136         fi
6137         $rm_try
6138
6139         case "$libcquad" in
6140             buggy*)
6141                 cat >&4 <<EOM
6142
6143 *** You have a C library with broken 64-bit functions.
6144 *** 64-bit support does not work reliably in this configuration.
6145 *** Please rerun Configure without -Duse64bitint and/or -Dusemorebits.
6146 *** Cannot continue, aborting.
6147
6148 EOM
6149                 exit 1
6150                 ;;
6151         esac
6152         case "$longsize" in
6153         4) case "$archname64" in
6154            '') archname64=64int ;;
6155            esac
6156            ;;
6157         esac
6158         ;;
6159 esac
6160
6161 : Look for a hint-file generated 'call-back-unit'.  If the
6162 : user has specified that a maximally 64-bit perl is to be built,
6163 : we may need to set or change some other defaults.
6164 if $test -f use64bitall.cbu; then
6165         echo "Your platform has some specific hints regarding 64-bit builds, using them..."
6166         . ./use64bitall.cbu
6167 fi
6168 case "$use64bitall" in
6169 "$define"|true|[yY]*)
6170         case "$longsize" in
6171         4) case "$archname64" in
6172            ''|64int) archname64=64all ;;
6173            esac
6174            ;;
6175         esac
6176         ;;
6177 esac
6178
6179 case "$d_quad:$use64bitint" in
6180 $undef:$define)
6181         cat >&4 <<EOF
6182
6183 *** You have chosen to use 64-bit integers,
6184 *** but none can be found.
6185 *** Please rerun Configure without -Duse64bitint and/or -Dusemorebits.
6186 *** Cannot continue, aborting.
6187
6188 EOF
6189         exit 1
6190         ;;
6191 esac
6192
6193 : check for length of double
6194 echo " "
6195 case "$doublesize" in
6196 '')
6197         echo "Checking to see how big your double precision numbers are..." >&4
6198         $cat >try.c <<EOCP
6199 #include <stdio.h>
6200 #$i_stdlib I_STDLIB
6201 #ifdef I_STDLIB
6202 #include <stdlib.h>
6203 #endif
6204 int main()
6205 {
6206     printf("%d\n", (int)sizeof(double));
6207     exit(0);
6208 }
6209 EOCP
6210         set try
6211         if eval $compile_ok; then
6212                 doublesize=`$run ./try`
6213                 echo "Your double is $doublesize bytes long."
6214         else
6215                 dflt='8'
6216                 echo "(I can't seem to compile the test program.  Guessing...)"
6217                 rp="What is the size of a double precision number (in bytes)?"
6218                 . ./myread
6219                 doublesize="$ans"
6220         fi
6221         ;;
6222 esac
6223 $rm_try
6224
6225 : check for long doubles
6226 echo " "
6227 echo "Checking to see if you have long double..." >&4
6228 echo 'int main() { long double x = 7.0; }' > try.c
6229 set try
6230 if eval $compile; then
6231         val="$define"
6232         echo "You have long double."
6233 else
6234         val="$undef"
6235         echo "You do not have long double."
6236 fi
6237 $rm_try
6238 set d_longdbl
6239 eval $setvar
6240
6241 : check for length of long double
6242 case "${d_longdbl}${longdblsize}" in
6243 $define)
6244         echo " "
6245         echo "Checking to see how big your long doubles are..." >&4
6246         $cat >try.c <<'EOCP'
6247 #include <stdio.h>
6248 int main()
6249 {
6250         printf("%d\n", sizeof(long double));
6251 }
6252 EOCP
6253         set try
6254         set try
6255         if eval $compile; then
6256                 longdblsize=`$run ./try`
6257                 echo "Your long doubles are $longdblsize bytes long."
6258         else
6259                 dflt='8'
6260                 echo " "
6261                 echo "(I can't seem to compile the test program.  Guessing...)" >&4
6262                 rp="What is the size of a long double (in bytes)?"
6263                 . ./myread
6264                 longdblsize="$ans"
6265         fi
6266         if $test "X$doublesize" = "X$longdblsize"; then
6267                 echo "That isn't any different from an ordinary double."
6268                 echo "I'll keep your setting anyway, but you may see some"
6269                 echo "harmless compilation warnings."
6270         fi
6271         ;;
6272 esac
6273 $rm_try
6274
6275 : determine the architecture name
6276 echo " "
6277 if xxx=`./loc arch blurfl $pth`; $test -f "$xxx"; then
6278         tarch=`arch`"-$osname"
6279 elif xxx=`./loc uname blurfl $pth`; $test -f "$xxx" ; then
6280         if uname -m > tmparch 2>&1 ; then
6281                 tarch=`$sed -e 's/ *$//' -e 's/ /_/g' \
6282                         -e 's/$/'"-$osname/" tmparch`
6283         else
6284                 tarch="$osname"
6285         fi
6286         $rm -f tmparch
6287 else
6288         tarch="$osname"
6289 fi
6290 case "$myarchname" in
6291 ''|"$tarch") ;;
6292 *)
6293         echo "(Your architecture name used to be $myarchname.)"
6294         archname=''
6295         ;;
6296 esac
6297 case "$targetarch" in
6298 '') ;;
6299 *)  archname=`echo $targetarch|sed 's,^[^-]*-,,'` ;;
6300 esac
6301 myarchname="$tarch"
6302 case "$archname" in
6303 '') dflt="$tarch";;
6304 *) dflt="$archname";;
6305 esac
6306 rp='What is your architecture name'
6307 . ./myread
6308 archname="$ans"
6309
6310 : optionally add API version to the architecture for versioned archlibs
6311 case "$useversionedarchname" in
6312 $define|true|[yY]*) dflt='y';;
6313 *)                  dflt='n';;
6314 esac
6315 rp='Add the Perl API version to your archname?'
6316 . ./myread
6317 case "$ans" in
6318 y|Y)    useversionedarchname="$define" ;;
6319 *)      useversionedarchname="$undef" ;;
6320 esac
6321 case "$useversionedarchname" in
6322 $define)
6323         case "$archname" in
6324         *-$api_versionstring)
6325                 echo "...and architecture name already has -$api_versionstring" >&4
6326                 ;;
6327         *)
6328                 archname="$archname-$api_versionstring"
6329                 echo "...setting architecture name to $archname." >&4
6330                 ;;
6331         esac
6332         ;;
6333 esac
6334
6335 case "$usethreads" in
6336 $define)
6337         echo "Threads selected." >&4
6338         case "$archname" in
6339         *-thread*) echo "...and architecture name already has -thread." >&4
6340                 ;;
6341         *)      archname="$archname-thread"
6342                 echo "...setting architecture name to $archname." >&4
6343                 ;;
6344         esac
6345         ;;
6346 esac
6347 case "$usemultiplicity" in
6348 $define)
6349         echo "Multiplicity selected." >&4
6350         case "$archname" in
6351         *-multi*) echo "...and architecture name already has -multi." >&4
6352                 ;;
6353         *)      archname="$archname-multi"
6354                 echo "...setting architecture name to $archname." >&4
6355                 ;;
6356         esac
6357         ;;
6358 esac
6359 case "$use64bitint$use64bitall" in
6360 *"$define"*)
6361         case "$archname64" in
6362         '')
6363                 echo "This architecture is naturally 64-bit, not changing architecture name." >&4
6364                 ;;
6365         *)
6366                 case "$use64bitint" in
6367                 "$define") echo "64 bit integers selected." >&4 ;;
6368                 esac
6369                 case "$use64bitall" in
6370                 "$define") echo "Maximal 64 bitness selected." >&4 ;;
6371                 esac
6372                 case "$archname" in
6373                 *-$archname64*) echo "...and architecture name already has $archname64." >&4
6374                         ;;
6375                 *)      archname="$archname-$archname64"
6376                         echo "...setting architecture name to $archname." >&4
6377                         ;;
6378                 esac
6379                 ;;
6380         esac
6381 esac
6382 case "$uselongdouble" in
6383 $define)
6384         echo "Long doubles selected." >&4
6385         case "$longdblsize" in
6386         $doublesize)
6387                 echo "...but long doubles are equal to doubles, not changing architecture name." >&4
6388                 ;;
6389         *)
6390                 case "$archname" in
6391                 *-ld*) echo "...and architecture name already has -ld." >&4
6392                         ;;
6393                 *)      archname="$archname-ld"
6394                         echo "...setting architecture name to $archname." >&4
6395                         ;;
6396                 esac
6397                 ;;
6398         esac
6399         ;;
6400 esac
6401 if $test -f archname.cbu; then
6402         echo "Your platform has some specific hints for architecture name, using them..."
6403         . ./archname.cbu
6404 fi
6405
6406 : set the prefixit variable, to compute a suitable default value
6407 prefixit='case "$3" in
6408 ""|none)
6409         case "$oldprefix" in
6410         "") eval "$1=\"\$$2\"";;
6411         *)
6412                 case "$3" in
6413                 "") eval "$1=";;
6414                 none)
6415                         eval "tp=\"\$$2\"";
6416                         case "$tp" in
6417                         ""|" ") eval "$1=\"\$$2\"";;
6418                         *) eval "$1=";;
6419                         esac;;
6420                 esac;;
6421         esac;;
6422 *)
6423         eval "tp=\"$oldprefix-\$$2-\""; eval "tp=\"$tp\"";
6424         case "$tp" in
6425         --|/*--|\~*--) eval "$1=\"$prefix/$3\"";;
6426         /*-$oldprefix/*|\~*-$oldprefix/*)
6427                 eval "$1=\`echo \$$2 | sed \"s,^$oldprefix,$prefix,\"\`";;
6428         *) eval "$1=\"\$$2\"";;
6429         esac;;
6430 esac'
6431
6432 : determine installation style
6433 : For now, try to deduce it from prefix unless it is already set.
6434 : Reproduce behavior of 5.005 and earlier, maybe drop that in 5.7.
6435 case "$installstyle" in
6436 '')     case "$prefix" in
6437                 *perl*) dflt='lib';;
6438                 *) dflt='lib/perl5' ;;
6439         esac
6440         ;;
6441 *)      dflt="$installstyle" ;;
6442 esac
6443 : Probably not worth prompting for this since we prompt for all
6444 : the directories individually, and the prompt would be too long and
6445 : confusing anyway.
6446 installstyle=$dflt
6447
6448 : determine where public executables go
6449 echo " "
6450 set dflt bin bin
6451 eval $prefixit
6452 fn=d~
6453 rp='Pathname where the public executables will reside?'
6454 . ./getfile
6455 if $test "X$ansexp" != "X$binexp"; then
6456         installbin=''
6457 fi
6458 prefixvar=bin
6459 : XXX Bug? -- ignores Configure -Dinstallprefix setting.
6460 : XXX If this is fixed, also fix the "start perl" hunk below, which relies on
6461 :     this via initialinstalllocation
6462 . ./setprefixvar
6463
6464 case "$userelocatableinc" in
6465 $define|true|[yY]*)     dflt='y' ;;
6466 *)                      dflt='n' ;;
6467 esac
6468 cat <<EOM
6469
6470 Would you like to build Perl so that the installation is relocatable, so that
6471 library paths in @INC are determined relative to the path of the perl binary?
6472 This is not advised for system Perl installs, or if you need to run setid
6473 scripts or scripts under taint mode.
6474
6475 If this doesn't make any sense to you, just accept the default '$dflt'.
6476 EOM
6477 rp='Use relocatable @INC?'
6478 . ./myread
6479 case "$ans" in
6480 y|Y)    val="$define" ;;
6481 *)      val="$undef"  ;;
6482 esac
6483 set userelocatableinc
6484 eval $setvar
6485
6486 initialinstalllocation="$binexp"
6487 : Default prefix is now "up one level from where the binaries are"
6488 case "$userelocatableinc" in
6489 $define|true|[yY]*)
6490     bin=".../"
6491     binexp=".../"
6492     prefix=".../.."
6493     prefixexp=".../.."
6494     installprefixexp=".../.."
6495     ;;
6496 esac
6497
6498 : determine where private library files go
6499 : Usual default is /usr/local/lib/perl5/$version.
6500 : Also allow things like /opt/perl/lib/$version, since
6501 : /opt/perl/lib/perl5... would be redundant.
6502 : The default "style" setting is made in installstyle.U
6503 case "$installstyle" in
6504 *lib/perl5*) set dflt privlib lib/$package/$version ;;
6505 *)       set dflt privlib lib/$version ;;
6506 esac
6507 eval $prefixit
6508 $cat <<EOM
6509
6510 There are some auxiliary files for $package that need to be put into a
6511 private library directory that is accessible by everyone.
6512
6513 EOM
6514 fn=$binexp
6515 fn=d~+
6516 rp='Pathname where the private library files will reside?'
6517 . ./getfile
6518 prefixvar=privlib
6519 . ./setprefixvar
6520
6521 : set the prefixup variable, to restore leading tilda escape
6522 prefixup='case "$prefixexp" in
6523 "$prefix") ;;
6524 *) eval "$1=\`echo \$$1 | sed \"s,^$prefixexp,$prefix,\"\`";;
6525 esac'
6526
6527 : determine where public architecture dependent libraries go
6528 set archlib archlib
6529 eval $prefixit
6530 : privlib default is /usr/local/lib/$package/$version
6531 : archlib default is /usr/local/lib/$package/$version/$archname
6532 : privlib may have an optional trailing /share.
6533 tdflt=`echo $privlib | $sed 's,/share$,,'`
6534 tdflt=$tdflt/$archname
6535 case "$archlib" in
6536 '')     dflt=$tdflt
6537         ;;
6538 *)      dflt="$archlib"
6539     ;;
6540 esac
6541 $cat <<EOM
6542
6543 $spackage contains architecture-dependent library files.  If you are
6544 sharing libraries in a heterogeneous environment, you might store
6545 these files in a separate location.  Otherwise, you can just include
6546 them with the rest of the public library files.
6547
6548 EOM
6549 fn=$binexp
6550 fn=d+~
6551 rp='Where do you want to put the public architecture-dependent libraries?'
6552 . ./getfile
6553 prefixvar=archlib
6554 . ./setprefixvar
6555 if $test X"$archlib" = X"$privlib"; then
6556         d_archlib="$undef"
6557 else
6558         d_archlib="$define"
6559 fi
6560
6561 : see if setuid scripts can be secure
6562 $cat <<EOM
6563
6564 Some kernels have a bug that prevents setuid #! scripts from being
6565 secure.  Some sites have disabled setuid #! scripts because of this.
6566
6567 First let's decide if your kernel supports secure setuid #! scripts.
6568 (If setuid #! scripts would be secure but have been disabled anyway,
6569 don't say that they are secure if asked.)
6570
6571 EOM
6572
6573 val="$undef"
6574 if $test -d /dev/fd; then
6575         echo "#!$ls" >reflect
6576         chmod +x,u+s reflect
6577         ./reflect >flect 2>&1
6578         if $contains "/dev/fd" flect >/dev/null; then
6579                 echo "Congratulations, your kernel has secure setuid scripts!" >&4
6580                 val="$define"
6581         else
6582                 $cat <<EOM
6583 If you are not sure if they are secure, I can check but I'll need a
6584 username and password different from the one you are using right now.
6585 If you don't have such a username or don't want me to test, simply
6586 enter 'none'.
6587
6588 EOM
6589                 rp='Other username to test security of setuid scripts with?'
6590                 dflt='none'
6591                 . ./myread
6592                 case "$ans" in
6593                 n|none)
6594                         case "$d_suidsafe" in
6595                         '')     echo "I'll assume setuid scripts are *not* secure." >&4
6596                                 dflt=n;;
6597                         "$undef")
6598                                 echo "Well, the $hint value is *not* secure." >&4
6599                                 dflt=n;;
6600                         *)      echo "Well, the $hint value *is* secure." >&4
6601                                 dflt=y;;
6602                         esac
6603                         ;;
6604                 *)
6605                         $rm -f reflect flect
6606                         echo "#!$ls" >reflect
6607                         chmod +x,u+s reflect
6608                         echo >flect
6609                         chmod a+w flect
6610                         echo '"su" will (probably) prompt you for '"$ans's password."
6611                         su $ans -c './reflect >flect'
6612                         if $contains "/dev/fd" flect >/dev/null; then
6613                                 echo "Okay, it looks like setuid scripts are secure." >&4
6614                                 dflt=y
6615                         else
6616                                 echo "I don't think setuid scripts are secure." >&4
6617                                 dflt=n
6618                         fi
6619                         ;;
6620                 esac
6621                 rp='Does your kernel have *secure* setuid scripts?'
6622                 . ./myread
6623                 case "$ans" in
6624                 [yY]*)  val="$define";;
6625                 *)      val="$undef";;
6626                 esac
6627         fi
6628 else
6629         echo "I don't think setuid scripts are secure (no /dev/fd directory)." >&4
6630         echo "(That's for file descriptors, not floppy disks.)"
6631         val="$undef"
6632 fi
6633 set d_suidsafe
6634 eval $setvar
6635
6636 $rm -f reflect flect
6637
6638 : now see if they want to do setuid emulation
6639 if $test $patchlevel -lt 11; then
6640 echo " "
6641 val="$undef"
6642 case "$d_suidsafe" in
6643 "$define")
6644         val="$undef"
6645         echo "No need to emulate SUID scripts since they are secure here." >&4
6646         ;;
6647 *)
6648         $cat <<EOM
6649 Some systems have disabled setuid scripts, especially systems where
6650 setuid scripts cannot be secure.  On systems where setuid scripts have
6651 been disabled, the setuid/setgid bits on scripts are currently
6652 useless.  It is possible for $package to detect those bits and emulate
6653 setuid/setgid in a secure fashion.  This emulation will only work if
6654 setuid scripts have been disabled in your kernel.
6655
6656 EOM
6657         case "$d_dosuid" in
6658         "$define") dflt=y ;;
6659         *) dflt=n ;;
6660         esac
6661         rp="Do you want to do setuid/setgid emulation?"
6662         . ./myread
6663         case "$ans" in
6664         [yY]*)  val="$define";;
6665         *)      val="$undef";;
6666         esac
6667         ;;
6668 esac
6669 set d_dosuid
6670 eval $setvar
6671 else
6672     case "$d_dosuid" in
6673         "$define")
6674         cat >&4 <<EOH
6675
6676 SUID emulation has been removed for 5.12
6677 Please re-run Configure without -Dd_dosuid
6678
6679 EOH
6680         exit 1;
6681         ;;
6682     esac
6683     d_dosuid=undef
6684 fi
6685
6686 : Find perl5.005 or later.
6687 echo "Looking for a previously installed perl5.005 or later... "
6688 case "$perl5" in
6689 '')     for tdir in `echo "$binexp$path_sep$PATH" | $sed "s/$path_sep/ /g"`; do
6690                 : Check if this perl is recent and can load a simple module
6691                 if $test -x $tdir/perl$exe_ext && $tdir/perl -Mless -e 'use 5.005;' >/dev/null 2>&1; then
6692                         perl5=$tdir/perl
6693                         break;
6694                 elif $test -x $tdir/perl5$exe_ext && $tdir/perl5 -Mless -e 'use 5.005;' >/dev/null 2>&1; then
6695                         perl5=$tdir/perl5
6696                         break;
6697                 fi
6698         done
6699         ;;
6700 *)      perl5="$perl5"
6701         ;;
6702 esac
6703 case "$perl5" in
6704 '')     echo "None found.  That's ok.";;
6705 *)      echo "Using $perl5." ;;
6706 esac
6707
6708 : Set the siteprefix variables
6709 $cat <<EOM
6710
6711 After $package is installed, you may wish to install various
6712 add-on modules and utilities.  Typically, these add-ons will
6713 be installed under $prefix with the rest
6714 of this package.  However, you may wish to install such add-ons
6715 elsewhere under a different prefix.
6716
6717 If you do not wish to put everything under a single prefix, that's
6718 ok.  You will be prompted for the individual locations; this siteprefix
6719 is only used to suggest the defaults.
6720
6721 The default should be fine for most people.
6722
6723 EOM
6724 fn=d~+
6725 rp='Installation prefix to use for add-on modules and utilities?'
6726 : XXX Here might be another good place for an installstyle setting.
6727 case "$siteprefix" in
6728 '') dflt=$prefix ;;
6729 *)  dflt=$siteprefix ;;
6730 esac
6731 . ./getfile
6732 : XXX Prefixit unit does not yet support siteprefix and vendorprefix
6733 oldsiteprefix=''
6734 case "$siteprefix" in
6735 '') ;;
6736 *)      case "$ans" in
6737         "$prefix") ;;
6738         *) oldsiteprefix="$prefix";;
6739         esac
6740         ;;
6741 esac
6742 siteprefix="$ans"
6743 siteprefixexp="$ansexp"
6744
6745 : determine where site specific libraries go.
6746 : Usual default is /usr/local/lib/perl5/site_perl/$version
6747 : The default "style" setting is made in installstyle.U
6748 : XXX No longer works with Prefixit stuff.
6749 prog=`echo $package | $sed 's/-*[0-9.]*$//'`
6750 case "$sitelib" in
6751 '') case "$installstyle" in
6752         *lib/perl5*) dflt=$siteprefix/lib/$package/site_$prog/$version ;;
6753         *)       dflt=$siteprefix/lib/site_$prog/$version ;;
6754         esac
6755         ;;
6756 *)      dflt="$sitelib"
6757         ;;
6758 esac
6759 $cat <<EOM
6760
6761 The installation process will create a directory for
6762 site-specific extensions and modules.  Most users find it convenient
6763 to place all site-specific files in this directory rather than in the
6764 main distribution directory.
6765
6766 EOM
6767 fn=d~+
6768 rp='Pathname for the site-specific library files?'
6769 . ./getfile
6770 prefixvar=sitelib
6771 . ./setprefixvar
6772 sitelib_stem=`echo "$sitelibexp" | sed "s,/$version$,,"`
6773
6774 : Determine list of previous versions to include in @INC
6775 $cat > getverlist <<EOPL
6776 #!$perl5 -w
6777 use File::Basename;
6778 \$api_versionstring = "$api_versionstring";
6779 \$version = "$version";
6780 \$stem = "$sitelib_stem";
6781 \$archname = "$archname";
6782 EOPL
6783         $cat >> getverlist <<'EOPL'
6784 # The list found is store twice for each entry: the original name, and
6785 # the binary broken down version as pack "sss", so sorting is easy and
6786 # unambiguous. This will work for all versions that have a maximum of
6787 # three digit groups, separate by '.'s or '_'s. Names are extended with
6788 # ".0.0" to ensure at least three elements for the pack.
6789 #                                       -- H.Merijn Brand (m)'06 23-10-2006
6790
6791 # Can't have leading @ because metaconfig interprets it as a command!
6792 ;@inc_version_list=();
6793 # XXX Redo to do opendir/readdir?
6794 if (-d $stem) {
6795     chdir($stem);
6796     ;@candidates = map {
6797         [ $_, pack "sss", split m/[._]/, "$_.0.0" ] } glob("5.*");
6798     ;@candidates = sort { $a->[1] cmp $b->[1]} @candidates;
6799 }
6800 else {
6801     ;@candidates = ();
6802 }
6803
6804 ($pversion, $aversion, $vsn5005) = map {
6805     pack "sss", split m/[._]/, "$_.0.0" } $version, $api_versionstring, "5.005";
6806 foreach $d (@candidates) {
6807     if ($d->[1] lt $pversion) {
6808         if ($d->[1] ge $aversion) {
6809             unshift(@inc_version_list, grep { -d } $d->[0]."/$archname", $d->[0]);
6810         }
6811         elsif ($d->[1] ge $vsn5005) {
6812             unshift(@inc_version_list, grep { -d } $d->[0]);
6813         }
6814     }
6815     else {
6816         # Skip newer version.  I.e. don't look in
6817         # 5.7.0 if we're installing 5.6.1.
6818     }
6819 }
6820
6821 if (@inc_version_list) {
6822     print join(' ', @inc_version_list);
6823 }
6824 else {
6825     # Blank space to preserve value for next Configure run.
6826     print " ";
6827 }
6828 EOPL
6829 chmod +x getverlist
6830 case "$inc_version_list" in
6831 '')     if test -x "$perl5$exe_ext"; then
6832                 dflt=`$perl5 getverlist`
6833         else
6834                 dflt='none'
6835         fi
6836         ;;
6837 $undef) dflt='none' ;;
6838 *)  eval dflt=\"$inc_version_list\" ;;
6839 esac
6840 case "$dflt" in
6841 ''|' ') dflt=none ;;
6842 esac
6843 case "$dflt" in
6844 5.005) dflt=none ;;
6845 esac
6846 $cat <<EOM
6847
6848 In order to ease the process of upgrading, this version of perl
6849 can be configured to use modules built and installed with earlier
6850 versions of perl that were installed under $prefix.  Specify here
6851 the list of earlier versions that this version of perl should check.
6852 If Configure detected no earlier versions of perl installed under
6853 $prefix, then the list will be empty.  Answer 'none' to tell perl
6854 to not search earlier versions.
6855
6856 The default should almost always be sensible, so if you're not sure,
6857 just accept the default.
6858 EOM
6859
6860 rp='List of earlier versions to include in @INC?'
6861 . ./myread
6862 case "$ans" in
6863 [Nn]one|''|' '|$undef) inc_version_list=' ' ;;
6864 *) inc_version_list="$ans" ;;
6865 esac
6866 case "$inc_version_list" in
6867 ''|' ')
6868         inc_version_list_init='0'
6869         d_inc_version_list="$undef"
6870         ;;
6871 *)      inc_version_list_init=`echo $inc_version_list |
6872                 $sed -e 's/^/"/' -e 's/ /","/g' -e 's/$/",0/'`
6873         d_inc_version_list="$define"
6874         ;;
6875 esac
6876 $rm -f getverlist
6877
6878 : see if malloc/malloc.h has to be included
6879 set malloc/malloc.h i_mallocmalloc
6880 eval $inhdr
6881
6882 : see if this is a malloc.h system
6883 : we want a real compile instead of Inhdr because some systems have a
6884 : malloc.h that just gives a compile error saying to use stdlib.h instead
6885 echo " "
6886 $cat >try.c <<EOCP
6887 #include <stdlib.h>
6888 #include <malloc.h>
6889 #$i_mallocmalloc I_MALLOCMALLOC
6890 #ifdef I_MALLOCMALLOC
6891 # include <malloc/malloc.h>
6892 #endif
6893
6894 int main () { return 0; }
6895 EOCP
6896 set try
6897 if eval $compile; then
6898     echo "<malloc.h> found." >&4
6899     val="$define"
6900 else
6901     echo "<malloc.h> NOT found." >&4
6902     val="$undef"
6903 fi
6904 $rm_try
6905 set i_malloc
6906 eval $setvar
6907
6908 : check for length of pointer
6909 echo " "
6910 case "$ptrsize" in
6911 '')
6912         echo "Checking to see how big your pointers are..." >&4
6913         $cat >>try.c <<EOCP
6914 #include <stdio.h>
6915 #$i_stdlib I_STDLIB
6916 #ifdef I_STDLIB
6917 #include <stdlib.h>
6918 #endif
6919 int main()
6920 {
6921     printf("%d\n", (int)sizeof(void *));
6922     exit(0);
6923 }
6924 EOCP
6925         set try
6926         if eval $compile_ok; then
6927                 ptrsize=`$run ./try`
6928                 echo "Your pointers are $ptrsize bytes long."
6929         else
6930                 dflt='4'
6931                 echo "(I can't seem to compile the test program.  Guessing...)" >&4
6932                 rp="What is the size of a pointer (in bytes)?"
6933                 . ./myread
6934                 ptrsize="$ans"
6935         fi
6936         ;;
6937 esac
6938 $rm_try
6939 case "$use64bitall" in
6940 "$define"|true|[yY]*)
6941         case "$ptrsize" in
6942         4)      cat <<EOM >&4
6943
6944 *** You have chosen a maximally 64-bit build,
6945 *** but your pointers are only 4 bytes wide.
6946 *** Please rerun Configure without -Duse64bitall.
6947 EOM
6948                 case "$d_quad" in
6949                 define)
6950                         cat <<EOM >&4
6951 *** Since you have quads, you could possibly try with -Duse64bitint.
6952 EOM
6953                         ;;
6954                 esac
6955                 cat <<EOM >&4
6956 *** Cannot continue, aborting.
6957
6958 EOM
6959
6960                 exit 1
6961                 ;;
6962         esac
6963         ;;
6964 esac
6965
6966
6967 : determine whether to use malloc wrapping
6968 echo " "
6969 case "$usemallocwrap" in
6970 [yY]*|true|$define)     dflt='y' ;;
6971 [nN]*|false|$undef)     dflt='n' ;;
6972 *)      case "$usedevel" in
6973         [yY]*|true|$define)     dflt='y' ;;
6974         *) dflt='n' ;;
6975         esac
6976         ;;
6977 esac
6978 rp="Do you wish to wrap malloc calls to protect against potential overflows?"
6979 . ./myread
6980 usemallocwrap="$ans"
6981 case "$ans" in
6982 y*|true)
6983         usemallocwrap="$define" ;;
6984 *)
6985         usemallocwrap="$undef" ;;
6986 esac
6987
6988 : determine which malloc to compile in
6989 echo " "
6990 case "$usemymalloc" in
6991 [yY]*|true|$define)     dflt='y' ;;
6992 [nN]*|false|$undef)     dflt='n' ;;
6993 *)      case "$ptrsize" in
6994         4) dflt='y' ;;
6995         *) dflt='n' ;;
6996         esac
6997         if test "$useithreads" = "$define"; then dflt='n'; fi
6998         ;;
6999 esac
7000 rp="Do you wish to attempt to use the malloc that comes with $package?"
7001 . ./myread
7002 usemymalloc="$ans"
7003 case "$ans" in
7004 y*|true)
7005         usemymalloc='y'
7006         mallocsrc='malloc.c'
7007         mallocobj="malloc$_o"
7008         d_mymalloc="$define"
7009         case "$libs" in
7010         *-lmalloc*)
7011                 : Remove malloc from list of libraries to use
7012                 echo "Removing unneeded -lmalloc from library list" >&4
7013                 set `echo X $libs | $sed -e 's/-lmalloc / /' -e 's/-lmalloc$//'`
7014                 shift
7015                 libs="$*"
7016                 echo "libs = $libs" >&4
7017                 ;;
7018         esac
7019         ;;
7020 *)
7021         usemymalloc='n'
7022         mallocsrc=''
7023         mallocobj=''
7024         d_mymalloc="$undef"
7025         ;;
7026 esac
7027
7028 : compute the return types of malloc and free
7029 echo " "
7030 $cat >malloc.c <<END
7031 #$i_malloc I_MALLOC
7032 #$i_stdlib I_STDLIB
7033 #include <stdio.h>
7034 #include <sys/types.h>
7035 #ifdef I_MALLOC
7036 #include <malloc.h>
7037 #endif
7038 #ifdef I_STDLIB
7039 #include <stdlib.h>
7040 #endif
7041 #ifdef TRY_MALLOC
7042 void *malloc();
7043 #endif
7044 #ifdef TRY_FREE
7045 void free();
7046 #endif