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