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