This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
6eb478d7214816ced51aaee60438676996bcd888
[perl5.git] / Configure
1 #! /bin/sh
2 #
3 # If these # comments don't work, trim them. Don't worry about any other
4 # shell scripts, Configure will trim # comments from them for you.
5 #
6 # (If you are trying to port this package to a machine without sh,
7 # I would suggest you have a look at the prototypical config_h.SH file
8 # and edit it to reflect your system. Some packages may include samples
9 # of config.h for certain machines, so you might look for one of those.)
10 #
11 # Yes, you may rip this off to use in other distribution packages. This
12 # script belongs to the public domain and cannot be copyrighted.
13 #
14 # Note: this Configure script was generated automatically 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 -f /sys/utilities/MultiView ; then
73         # AmigaOS, test -c for /dev/null is not useful
74         :
75 elif test ! -c /dev/null ; then
76         cat <<EOF
77 ***
78 *** I'm sorry, but /dev/null appears to be a file rather than a device.
79 *** Please consult your operating sytem's notes for making a device
80 *** in /dev.
81 *** Cannot continue, aborting.
82 ***
83 EOF
84         exit 1
85 fi
86
87 : compute my invocation name
88 me=$0
89 case "$0" in
90 */*)
91         me=`echo $0 | sed -e 's!.*/\(.*\)!\1!' 2>/dev/null`
92         test "$me" || me=$0
93         ;;
94 esac
95
96 : Proper separator for the PATH environment variable
97 p_=:
98 : On OS/2 this directory should exist if this is not floppy only system ":-]"
99 if test -d c:/. || ( uname -a | grep -i 'os\(/\|\)2' 2>&1 ) 2>&1 >/dev/null ; then
100         if test -n "$OS2_SHELL"; then
101                 p_=\;
102                 PATH=`cmd /c "echo %PATH%" | tr '\\\\' / `
103                 OS2_SHELL=`cmd /c "echo %OS2_SHELL%" | tr '\\\\' / | tr '[A-Z]' '[a-z]'`
104                 is_os2=yes
105         elif test -n "$DJGPP"; then
106                 case "X${MACHTYPE:-nonesuchmach}" in
107                 *cygwin|*msys) ;;
108                 *) p_=\; ;;
109                 esac
110         fi
111 fi
112
113 : Proper PATH setting
114 paths='/bin /usr/bin /usr/local/bin /usr/ucb /usr/local /usr/lbin'
115 paths="$paths /opt/bin /opt/local/bin /opt/local /opt/lbin"
116 paths="$paths /usr/5bin /etc /usr/gnu/bin /usr/new /usr/new/bin /usr/nbin"
117 paths="$paths /opt/gnu/bin /opt/new /opt/new/bin /opt/nbin"
118 paths="$paths /sys5.3/bin /sys5.3/usr/bin /bsd4.3/bin /bsd4.3/usr/ucb"
119 paths="$paths /bsd4.3/usr/bin /usr/bsd /bsd43/bin /opt/ansic/bin /usr/ccs/bin"
120 paths="$paths /etc /usr/lib /usr/ucblib /lib /usr/ccs/lib"
121 paths="$paths /sbin /usr/sbin /usr/libexec"
122 paths="$paths /system/gnu_library/bin"
123
124 for p in $paths
125 do
126         case "$p_$PATH$p_" in
127         *$p_$p$p_*) ;;
128         *) test -d $p && PATH=$PATH$p_$p ;;
129         esac
130 done
131
132 PATH=.$p_$PATH
133 export PATH
134
135 : shall we be using ksh?
136 inksh=''
137 needksh=''
138 avoidksh=''
139 newsh=/bin/ksh
140 changesh=''
141 if (PATH=.; alias -x) >/dev/null 2>&1; then
142                 inksh=true
143 fi
144 if test -f /hp-ux -a -f /bin/ksh; then
145         needksh='to avoid sh bug in "here document" expansion'
146 fi
147 if test -d /usr/lpp -a -f /usr/bin/bsh -a -f /usr/bin/uname; then
148         if test X`/usr/bin/uname -v` = X4; then
149                 avoidksh="to avoid AIX 4's /bin/sh"
150                 newsh=/usr/bin/bsh
151         fi
152 fi
153 if test -f /osf_boot -a -f /usr/sbin/setld; then
154         if test X`/usr/bin/uname -s` = XOSF1; then
155                 avoidksh="to avoid Digital UNIX' ksh"
156                 newsh=/bin/sh
157                 unset BIN_SH
158         fi
159 fi
160 case "$inksh/$needksh" in
161 /[a-z]*)
162                 ENV=''
163                 changesh=true
164                 reason="$needksh"
165         ;;
166 esac
167 case "$inksh/$avoidksh" in
168 true/[a-z]*)
169         changesh=true
170         reason="$avoidksh"
171         ;;
172 esac
173 case "$inksh/$needksh-$avoidksh-" in
174 true/--)
175                 cat <<EOM
176 (I see you are using the Korn shell.  Some ksh's blow up on $me,
177 mainly on older exotic systems.  If yours does, try the Bourne shell instead.)
178 EOM
179         ;;
180 esac
181 case "$changesh" in
182 true)
183         export newsh
184         echo "(Feeding myself to $newsh $reason.)"
185         case "$0" in
186         Configure|*/Configure) exec $newsh $0 "$@";;
187         *) exec $newsh Configure "$@";;
188         esac
189         ;;
190 esac
191 test -x "${newsh}" || unset newsh
192
193 : if needed, set CDPATH to a harmless value that is not chatty
194 : avoid bash 2.02 problems with empty CDPATH.
195 case "$CDPATH" in
196 '')     ;;
197 *)      case "$SHELL" in
198         *bash*) CDPATH='.' ;;
199         *) CDPATH='' ;;
200         esac
201         ;;
202 esac
203
204 : Configure runs within the UU subdirectory
205 test -d UU || mkdir UU
206 cd UU && rm -f ./*
207
208 ccname=''
209 ccversion=''
210 ccsymbols=''
211 cppccsymbols=''
212 cppsymbols=''
213 from=''
214 hostgenerate=''
215 hostosname=''
216 hostperl=''
217 run=''
218 targetarch=''
219 targetdir=''
220 targetenv=''
221 targethost=''
222 targetmkdir=''
223 targetport=''
224 to=''
225 usecrosscompile=''
226 extern_C=''
227 mistrustnm=''
228 usedevel=''
229 perllibs=''
230 dynamic_ext=''
231 extensions=''
232 known_extensions=''
233 nonxs_ext=''
234 static_ext=''
235 useopcode=''
236 useposix=''
237 extras=''
238 d_bsd=''
239 d_eunice=''
240 d_xenix=''
241 eunicefix=''
242 ar=''
243 awk=''
244 bash=''
245 bison=''
246 byacc=''
247 cat=''
248 chgrp=''
249 chmod=''
250 chown=''
251 comm=''
252 compress=''
253 cp=''
254 cpio=''
255 cpp=''
256 csh=''
257 date=''
258 echo=''
259 egrep=''
260 emacs=''
261 expr=''
262 find=''
263 flex=''
264 gmake=''
265 grep=''
266 gzip=''
267 inews=''
268 ksh=''
269 less=''
270 line=''
271 lint=''
272 ln=''
273 lp=''
274 lpr=''
275 ls=''
276 mail=''
277 mailx=''
278 make=''
279 mkdir=''
280 more=''
281 mv=''
282 nm=''
283 nroff=''
284 perl=''
285 pg=''
286 pmake=''
287 pr=''
288 rm=''
289 rmail=''
290 sed=''
291 sendmail=''
292 shar=''
293 sleep=''
294 smail=''
295 sort=''
296 submit=''
297 tail=''
298 tar=''
299 tbl=''
300 tee=''
301 test=''
302 touch=''
303 tr=''
304 troff=''
305 uname=''
306 uniq=''
307 uuname=''
308 vi=''
309 zcat=''
310 zip=''
311 full_ar=''
312 full_sed=''
313 libswanted=''
314 hint=''
315 myuname=''
316 osname=''
317 osvers=''
318 Author=''
319 Date=''
320 Header=''
321 Id=''
322 Locker=''
323 Log=''
324 RCSfile=''
325 Revision=''
326 Source=''
327 State=''
328 sysroot=''
329 _a=''
330 _exe=''
331 _o=''
332 archobjs=''
333 exe_ext=''
334 firstmakefile=''
335 lib_ext=''
336 obj_ext=''
337 path_sep=''
338 rm_try=''
339 afs=''
340 afsroot=''
341 alignbytes=''
342 ansi2knr=''
343 archlib=''
344 archlibexp=''
345 d_archlib=''
346 installarchlib=''
347 archname=''
348 myarchname=''
349 useversionedarchname=''
350 d_atolf=''
351 d_atoll=''
352 baserev=''
353 bin=''
354 binexp=''
355 initialinstalllocation=''
356 installbin=''
357 userelocatableinc=''
358 byteorder=''
359 cc=''
360 ccflags=''
361 cppflags=''
362 ldflags=''
363 lkflags=''
364 locincpth=''
365 optimize=''
366 cf_email=''
367 cf_by=''
368 cf_time=''
369 charbits=''
370 charsize=''
371 contains=''
372 cpp_stuff=''
373 cpplast=''
374 cppminus=''
375 cpprun=''
376 cppstdin=''
377 d__fwalk=''
378 d_access=''
379 d_accessx=''
380 d_acosh=''
381 d_aintl=''
382 d_alarm=''
383 asctime_r_proto=''
384 d_asctime_r=''
385 d_asinh=''
386 d_atanh=''
387 d_attribute_deprecated=''
388 d_attribute_format=''
389 d_attribute_malloc=''
390 d_attribute_nonnull=''
391 d_attribute_noreturn=''
392 d_attribute_pure=''
393 d_attribute_unused=''
394 d_attribute_warn_unused_result=''
395 d_printf_format_null=''
396 d_backtrace=''
397 d_bcmp=''
398 d_bcopy=''
399 d_builtin_choose_expr=''
400 d_builtin_expect=''
401 d_bzero=''
402 d_c99_variadic_macros=''
403 d_casti32=''
404 castflags=''
405 d_castneg=''
406 d_cbrt=''
407 d_chown=''
408 d_chroot=''
409 d_chsize=''
410 d_class=''
411 d_clearenv=''
412 d_closedir=''
413 d_void_closedir=''
414 d_cmsghdr_s=''
415 d_const=''
416 d_copysign=''
417 d_copysignl=''
418 d_cplusplus=''
419 cryptlib=''
420 d_crypt=''
421 crypt_r_proto=''
422 d_crypt_r=''
423 d_csh=''
424 full_csh=''
425 d_ctermid=''
426 ctermid_r_proto=''
427 d_ctermid_r=''
428 ctime_r_proto=''
429 d_ctime_r=''
430 d_cuserid=''
431 d_dbl_dig=''
432 d_dbminitproto=''
433 d_difftime=''
434 d_dir_dd_fd=''
435 d_dirfd=''
436 d_dladdr=''
437 d_dlerror=''
438 d_dlopen=''
439 d_dlsymun=''
440 d_dosuid=''
441 d_suidsafe=''
442 d_drand48_r=''
443 drand48_r_proto=''
444 d_drand48proto=''
445 d_dup2=''
446 d_eaccess=''
447 d_endgrent=''
448 d_endgrent_r=''
449 endgrent_r_proto=''
450 d_endhent=''
451 d_endhostent_r=''
452 endhostent_r_proto=''
453 d_endnent=''
454 d_endnetent_r=''
455 endnetent_r_proto=''
456 d_endpent=''
457 d_endprotoent_r=''
458 endprotoent_r_proto=''
459 d_endpwent=''
460 d_endpwent_r=''
461 endpwent_r_proto=''
462 d_endsent=''
463 d_endservent_r=''
464 endservent_r_proto=''
465 d_erf=''
466 d_erfc=''
467 d_exp2=''
468 d_expm1=''
469 d_faststdio=''
470 d_fchdir=''
471 d_fchmod=''
472 d_fchown=''
473 d_fcntl=''
474 d_fcntl_can_lock=''
475 d_fd_macros=''
476 d_fd_set=''
477 d_fds_bits=''
478 d_fdim=''
479 d_fegetround=''
480 d_fgetpos=''
481 d_finite=''
482 d_finitel=''
483 d_flexfnam=''
484 d_flock=''
485 d_flockproto=''
486 d_fma=''
487 d_fmax=''
488 d_fmin=''
489 d_fork=''
490 d_fp_class=''
491 d_fp_classl=''
492 d_fpclass=''
493 d_fp_classify=''
494 d_fpclassify=''
495 d_fpclassl=''
496 d_fpgetround=''
497 d_fpos64_t=''
498 d_frexpl=''
499 d_fs_data_s=''
500 d_fseeko=''
501 d_fsetpos=''
502 d_fstatfs=''
503 d_fsync=''
504 d_ftello=''
505 d_ftime=''
506 d_gettimeod=''
507 d_futimes=''
508 d_Gconvert=''
509 d_getaddrinfo=''
510 d_getcwd=''
511 d_getespwnam=''
512 d_getfsstat=''
513 d_getgrent=''
514 d_getgrent_r=''
515 getgrent_r_proto=''
516 d_getgrgid_r=''
517 getgrgid_r_proto=''
518 d_getgrnam_r=''
519 getgrnam_r_proto=''
520 d_getgrps=''
521 d_gethbyaddr=''
522 d_gethbyname=''
523 d_gethent=''
524 aphostname=''
525 d_gethname=''
526 d_phostname=''
527 d_uname=''
528 d_gethostbyaddr_r=''
529 gethostbyaddr_r_proto=''
530 d_gethostbyname_r=''
531 gethostbyname_r_proto=''
532 d_gethostent_r=''
533 gethostent_r_proto=''
534 d_gethostprotos=''
535 d_getitimer=''
536 d_getlogin=''
537 d_getlogin_r=''
538 getlogin_r_proto=''
539 d_getmnt=''
540 d_getmntent=''
541 d_getnameinfo=''
542 d_getnbyaddr=''
543 d_getnbyname=''
544 d_getnent=''
545 d_getnetbyaddr_r=''
546 getnetbyaddr_r_proto=''
547 d_getnetbyname_r=''
548 getnetbyname_r_proto=''
549 d_getnetent_r=''
550 getnetent_r_proto=''
551 d_getnetprotos=''
552 d_getpagsz=''
553 d_getpent=''
554 d_getpgid=''
555 d_getpgrp2=''
556 d_bsdgetpgrp=''
557 d_getpgrp=''
558 d_getppid=''
559 d_getprior=''
560 d_getpbyname=''
561 d_getpbynumber=''
562 d_getprotobyname_r=''
563 getprotobyname_r_proto=''
564 d_getprotobynumber_r=''
565 getprotobynumber_r_proto=''
566 d_getprotoent_r=''
567 getprotoent_r_proto=''
568 d_getprotoprotos=''
569 d_getprpwnam=''
570 d_getpwent=''
571 d_getpwent_r=''
572 getpwent_r_proto=''
573 d_getpwnam_r=''
574 getpwnam_r_proto=''
575 d_getpwuid_r=''
576 getpwuid_r_proto=''
577 d_getsent=''
578 d_getservbyname_r=''
579 getservbyname_r_proto=''
580 d_getservbyport_r=''
581 getservbyport_r_proto=''
582 d_getservent_r=''
583 getservent_r_proto=''
584 d_getservprotos=''
585 d_getspnam=''
586 d_getspnam_r=''
587 getspnam_r_proto=''
588 d_getsbyname=''
589 d_getsbyport=''
590 d_gmtime_r=''
591 gmtime_r_proto=''
592 d_gnulibc=''
593 gnulibc_version=''
594 d_hasmntopt=''
595 d_htonl=''
596 d_hypot=''
597 d_ilogb=''
598 d_ilogbl=''
599 d_inetaton=''
600 d_inetntop=''
601 d_inetpton=''
602 d_int64_t=''
603 d_isascii=''
604 d_isblank=''
605 d_isfinite=''
606 d_isfinitel=''
607 d_isinf=''
608 d_isinfl=''
609 d_isless=''
610 d_isnan=''
611 d_isnanl=''
612 d_isnormal=''
613 d_j0=''
614 d_j0l=''
615 d_killpg=''
616 d_lc_monetary_2008=''
617 d_lchown=''
618 d_ldbl_dig=''
619 d_lgamma=''
620 d_lgamma_r=''
621 d_libm_lib_version=''
622 d_link=''
623 d_llrint=''
624 d_llrintl=''
625 d_llround=''
626 d_llroundl=''
627 d_localtime_r=''
628 d_localtime_r_needs_tzset=''
629 localtime_r_proto=''
630 d_locconv=''
631 d_lockf=''
632 d_log1p=''
633 d_log2=''
634 d_logb=''
635 d_ldexpl=''
636 d_longdbl=''
637 longdblkind=''
638 longdblsize=''
639 d_longlong=''
640 longlongsize=''
641 d_lrint=''
642 d_lrintl=''
643 d_lround=''
644 d_lroundl=''
645 d_lseekproto=''
646 d_lstat=''
647 d_madvise=''
648 d_malloc_good_size=''
649 d_malloc_size=''
650 d_mblen=''
651 d_mbstowcs=''
652 d_mbtowc=''
653 d_memchr=''
654 d_memcmp=''
655 d_memcpy=''
656 d_memmove=''
657 d_memset=''
658 d_mkdir=''
659 d_mkdtemp=''
660 d_mkfifo=''
661 d_mkstemp=''
662 d_mkstemps=''
663 d_mktime=''
664 d_mmap=''
665 mmaptype=''
666 d_modfl=''
667 d_modfl_pow32_bug=''
668 d_modflproto=''
669 d_mprotect=''
670 d_msg=''
671 d_msgctl=''
672 d_msgget=''
673 d_msghdr_s=''
674 d_msgrcv=''
675 d_msgsnd=''
676 d_msync=''
677 d_munmap=''
678 d_nan=''
679 d_nearbyint=''
680 d_nextafter=''
681 d_nexttoward=''
682 d_nice=''
683 d_nl_langinfo=''
684 d_off64_t=''
685 d_open3=''
686 d_fpathconf=''
687 d_pathconf=''
688 d_pause=''
689 d_pipe=''
690 d_poll=''
691 d_portable=''
692 d_prctl=''
693 d_prctl_set_name=''
694 d_procselfexe=''
695 procselfexe=''
696 d_old_pthread_create_joinable=''
697 old_pthread_create_joinable=''
698 d_pthread_atfork=''
699 d_pthread_attr_setscope=''
700 d_pthread_yield=''
701 d_sched_yield=''
702 sched_yield=''
703 d_ptrdiff_t=''
704 d_qgcvt=''
705 d_random_r=''
706 random_r_proto=''
707 d_readdir64_r=''
708 readdir64_r_proto=''
709 d_readdir=''
710 d_rewinddir=''
711 d_seekdir=''
712 d_telldir=''
713 d_readdir_r=''
714 readdir_r_proto=''
715 d_readlink=''
716 d_readv=''
717 d_recvmsg=''
718 d_re_comp=''
719 d_regcmp=''
720 d_regcomp=''
721 d_remainder=''
722 d_remquo=''
723 d_rename=''
724 d_rint=''
725 d_rmdir=''
726 d_round=''
727 d_safebcpy=''
728 d_safemcpy=''
729 d_sanemcmp=''
730 d_sbrkproto=''
731 d_scalbn=''
732 d_scalbnl=''
733 d_select=''
734 d_sem=''
735 d_semctl=''
736 d_semget=''
737 d_semop=''
738 d_sendmsg=''
739 d_setegid=''
740 d_seteuid=''
741 d_setgrent=''
742 d_setgrent_r=''
743 setgrent_r_proto=''
744 d_setgrps=''
745 d_sethent=''
746 d_sethostent_r=''
747 sethostent_r_proto=''
748 d_setitimer=''
749 d_setlinebuf=''
750 d_setlocale=''
751 d_setlocale_r=''
752 setlocale_r_proto=''
753 d_setnent=''
754 d_setnetent_r=''
755 setnetent_r_proto=''
756 d_setpent=''
757 d_setpgid=''
758 d_setpgrp2=''
759 d_bsdsetpgrp=''
760 d_setpgrp=''
761 d_setprior=''
762 d_setproctitle=''
763 d_setprotoent_r=''
764 setprotoent_r_proto=''
765 d_setpwent=''
766 d_setpwent_r=''
767 setpwent_r_proto=''
768 d_setregid=''
769 d_setresgid=''
770 d_setresuid=''
771 d_setreuid=''
772 d_setrgid=''
773 d_setruid=''
774 d_setsent=''
775 d_setservent_r=''
776 setservent_r_proto=''
777 d_setsid=''
778 d_setvbuf=''
779 d_shm=''
780 d_shmat=''
781 d_shmatprototype=''
782 shmattype=''
783 d_shmctl=''
784 d_shmdt=''
785 d_shmget=''
786 d_sigaction=''
787 d_signbit=''
788 d_sigprocmask=''
789 d_sigsetjmp=''
790 usesitecustomize=''
791 d_snprintf=''
792 d_vsnprintf=''
793 d_sockatmark=''
794 d_sockatmarkproto=''
795 d_ip_mreq=''
796 d_ip_mreq_source=''
797 d_ipv6_mreq=''
798 d_ipv6_mreq_source=''
799 d_msg_ctrunc=''
800 d_msg_dontroute=''
801 d_msg_oob=''
802 d_msg_peek=''
803 d_msg_proxy=''
804 d_oldsock=''
805 d_scm_rights=''
806 d_sin6_scope_id=''
807 d_sockaddr_in6=''
808 d_sockaddr_sa_len=''
809 d_socket=''
810 d_sockpair=''
811 sockethdr=''
812 socketlib=''
813 d_socklen_t=''
814 d_socks5_init=''
815 d_sprintf_returns_strlen=''
816 d_sqrtl=''
817 d_srand48_r=''
818 srand48_r_proto=''
819 d_srandom_r=''
820 srandom_r_proto=''
821 d_sresgproto=''
822 d_sresuproto=''
823 d_stat=''
824 d_statblks=''
825 d_statfs_f_flags=''
826 d_statfs_s=''
827 d_static_inline=''
828 perl_static_inline=''
829 d_fstatvfs=''
830 d_statvfs=''
831 d_stdio_cnt_lval=''
832 d_stdio_ptr_lval=''
833 d_stdio_ptr_lval_nochange_cnt=''
834 d_stdio_ptr_lval_sets_cnt=''
835 d_stdiobase=''
836 d_stdstdio=''
837 stdio_base=''
838 stdio_bufsiz=''
839 stdio_cnt=''
840 stdio_filbuf=''
841 stdio_ptr=''
842 d_index=''
843 d_strchr=''
844 d_strcoll=''
845 d_strctcpy=''
846 d_strerrm=''
847 d_strerror=''
848 d_sysernlst=''
849 d_syserrlst=''
850 d_strerror_r=''
851 strerror_r_proto=''
852 d_strftime=''
853 d_strlcat=''
854 d_strlcpy=''
855 d_strtod=''
856 d_strtol=''
857 d_strtold=''
858 d_strtoll=''
859 d_strtoq=''
860 d_strtoul=''
861 d_strtoull=''
862 d_strtouq=''
863 d_strxfrm=''
864 d_symlink=''
865 d_syscall=''
866 d_syscallproto=''
867 d_sysconf=''
868 d_system=''
869 d_tcgetpgrp=''
870 d_tcsetpgrp=''
871 d_telldirproto=''
872 d_tgamma=''
873 d_time=''
874 timetype=''
875 d_asctime64=''
876 d_ctime64=''
877 d_difftime64=''
878 d_gmtime64=''
879 d_localtime64=''
880 d_mktime64=''
881 d_timegm=''
882 clocktype=''
883 d_times=''
884 d_tmpnam_r=''
885 tmpnam_r_proto=''
886 d_trunc=''
887 d_truncate=''
888 d_truncl=''
889 d_ttyname_r=''
890 ttyname_r_proto=''
891 d_tzname=''
892 d_u32align=''
893 d_ualarm=''
894 d_umask=''
895 d_semctl_semid_ds=''
896 d_semctl_semun=''
897 d_union_semun=''
898 d_unordered=''
899 d_unsetenv=''
900 d_usleep=''
901 d_usleepproto=''
902 d_ustat=''
903 d_pseudofork=''
904 d_vfork=''
905 usevfork=''
906 d_voidsig=''
907 signal_t=''
908 d_volatile=''
909 d_charvspr=''
910 d_vprintf=''
911 d_wait4=''
912 d_waitpid=''
913 d_wcscmp=''
914 d_wcstombs=''
915 d_wcsxfrm=''
916 d_wctomb=''
917 d_writev=''
918 dlext=''
919 bin_ELF=''
920 cccdlflags=''
921 ccdlflags=''
922 dlsrc=''
923 ld=''
924 ld_can_script=''
925 lddlflags=''
926 usedl=''
927 doublesize=''
928 ebcdic=''
929 fflushNULL=''
930 fflushall=''
931 fpossize=''
932 fpostype=''
933 gccansipedantic=''
934 gccosandvers=''
935 gccversion=''
936 gidformat=''
937 gidsign=''
938 gidsize=''
939 gidtype=''
940 groupstype=''
941 h_fcntl=''
942 h_sysfile=''
943 html1dir=''
944 html1direxp=''
945 installhtml1dir=''
946 html3dir=''
947 html3direxp=''
948 installhtml3dir=''
949 i_arpainet=''
950 i_assert=''
951 i_bfd=''
952 i_crypt=''
953 db_hashtype=''
954 db_prefixtype=''
955 db_version_major=''
956 db_version_minor=''
957 db_version_patch=''
958 i_db=''
959 i_dbm=''
960 i_rpcsvcdbm=''
961 d_dirnamlen=''
962 direntrytype=''
963 i_dirent=''
964 i_dlfcn=''
965 i_execinfo=''
966 i_fcntl=''
967 i_fenv=''
968 i_float=''
969 i_fp=''
970 i_fp_class=''
971 i_gdbm=''
972 d_grpasswd=''
973 i_grp=''
974 i_ieeefp=''
975 i_inttypes=''
976 i_langinfo=''
977 i_libutil=''
978 i_limits=''
979 i_locale=''
980 i_machcthr=''
981 i_malloc=''
982 i_mallocmalloc=''
983 i_math=''
984 i_memory=''
985 i_mntent=''
986 d_gdbm_ndbm_h_uses_prototypes=''
987 d_gdbmndbm_h_uses_prototypes=''
988 d_ndbm=''
989 d_ndbm_h_uses_prototypes=''
990 i_gdbm_ndbm=''
991 i_gdbmndbm=''
992 i_ndbm=''
993 i_netdb=''
994 i_neterrno=''
995 i_netinettcp=''
996 i_niin=''
997 i_sysin=''
998 i_poll=''
999 i_prot=''
1000 i_pthread=''
1001 d_pwage=''
1002 d_pwchange=''
1003 d_pwclass=''
1004 d_pwcomment=''
1005 d_pwexpire=''
1006 d_pwgecos=''
1007 d_pwpasswd=''
1008 d_pwquota=''
1009 i_pwd=''
1010 i_quadmath=''
1011 i_shadow=''
1012 i_socks=''
1013 i_stdbool=''
1014 i_stddef=''
1015 i_stdint=''
1016 i_stdlib=''
1017 i_string=''
1018 strings=''
1019 i_sunmath=''
1020 i_sysaccess=''
1021 i_sysdir=''
1022 i_sysfile=''
1023 d_voidtty=''
1024 i_bsdioctl=''
1025 i_sysfilio=''
1026 i_sysioctl=''
1027 i_syssockio=''
1028 i_syslog=''
1029 i_sysmman=''
1030 i_sysmode=''
1031 i_sysmount=''
1032 i_sysndir=''
1033 i_sysparam=''
1034 i_syspoll=''
1035 i_sysresrc=''
1036 i_syssecrt=''
1037 i_sysselct=''
1038 i_sysstat=''
1039 i_sysstatfs=''
1040 i_sysstatvfs=''
1041 i_systimes=''
1042 i_systypes=''
1043 i_sysuio=''
1044 i_sysun=''
1045 i_sysutsname=''
1046 i_sysvfs=''
1047 i_syswait=''
1048 i_sgtty=''
1049 i_termio=''
1050 i_termios=''
1051 d_tm_tm_gmtoff=''
1052 d_tm_tm_zone=''
1053 i_systime=''
1054 i_systimek=''
1055 i_time=''
1056 timeincl=''
1057 i_unistd=''
1058 i_ustat=''
1059 i_utime=''
1060 i_values=''
1061 i_stdarg=''
1062 i_varargs=''
1063 i_varhdr=''
1064 i_vfork=''
1065 d_inc_version_list=''
1066 inc_version_list=''
1067 inc_version_list_init=''
1068 doubleinfbytes=''
1069 doublenanbytes=''
1070 longdblinfbytes=''
1071 longdblnanbytes=''
1072 installprefix=''
1073 installprefixexp=''
1074 installstyle=''
1075 installusrbinperl=''
1076 intsize=''
1077 longsize=''
1078 shortsize=''
1079 issymlink=''
1080 libc=''
1081 ldlibpthname=''
1082 libperl=''
1083 shrpenv=''
1084 useshrplib=''
1085 glibpth=''
1086 incpth=''
1087 libpth=''
1088 loclibpth=''
1089 plibpth=''
1090 xlibpth=''
1091 ignore_versioned_solibs=''
1092 libs=''
1093 libsdirs=''
1094 libsfiles=''
1095 libsfound=''
1096 libspath=''
1097 lns=''
1098 d_PRIEUldbl=''
1099 d_PRIFUldbl=''
1100 d_PRIGUldbl=''
1101 d_PRIeldbl=''
1102 d_PRIfldbl=''
1103 d_PRIgldbl=''
1104 d_SCNfldbl=''
1105 doublekind=''
1106 sPRIEUldbl=''
1107 sPRIFUldbl=''
1108 sPRIGUldbl=''
1109 sPRIeldbl=''
1110 sPRIfldbl=''
1111 sPRIgldbl=''
1112 sSCNfldbl=''
1113 lseeksize=''
1114 lseektype=''
1115 make_set_make=''
1116 d_mymalloc=''
1117 freetype=''
1118 mallocobj=''
1119 mallocsrc=''
1120 malloctype=''
1121 usemallocwrap=''
1122 usemymalloc=''
1123 installman1dir=''
1124 man1dir=''
1125 man1direxp=''
1126 man1ext=''
1127 installman3dir=''
1128 man3dir=''
1129 man3direxp=''
1130 man3ext=''
1131 doublemantbits=''
1132 longdblmantbits=''
1133 nvmantbits=''
1134 modetype=''
1135 multiarch=''
1136 mydomain=''
1137 myhostname=''
1138 phostname=''
1139 c=''
1140 n=''
1141 d_eofnblk=''
1142 eagain=''
1143 o_nonblock=''
1144 rd_nodata=''
1145 need_va_copy=''
1146 netdb_hlen_type=''
1147 netdb_host_type=''
1148 netdb_name_type=''
1149 netdb_net_type=''
1150 groupcat=''
1151 hostcat=''
1152 passcat=''
1153 orderlib=''
1154 ranlib=''
1155 d_perl_otherlibdirs=''
1156 otherlibdirs=''
1157 package=''
1158 spackage=''
1159 pager=''
1160 api_revision=''
1161 api_subversion=''
1162 api_version=''
1163 api_versionstring=''
1164 patchlevel=''
1165 perl_patchlevel=''
1166 revision=''
1167 subversion=''
1168 version=''
1169 version_patchlevel_string=''
1170 perl5=''
1171 perladmin=''
1172 perlpath=''
1173 d_nv_preserves_uv=''
1174 d_nv_zero_is_allbits_zero=''
1175 i16size=''
1176 i16type=''
1177 i32size=''
1178 i32type=''
1179 i64size=''
1180 i64type=''
1181 i8size=''
1182 i8type=''
1183 ivsize=''
1184 ivtype=''
1185 nv_overflows_integers_at=''
1186 nv_preserves_uv_bits=''
1187 nvsize=''
1188 nvtype=''
1189 u16size=''
1190 u16type=''
1191 u32size=''
1192 u32type=''
1193 u64size=''
1194 u64type=''
1195 u8size=''
1196 u8type=''
1197 uvsize=''
1198 uvtype=''
1199 ivdformat=''
1200 nvEUformat=''
1201 nvFUformat=''
1202 nvGUformat=''
1203 nveformat=''
1204 nvfformat=''
1205 nvgformat=''
1206 uvXUformat=''
1207 uvoformat=''
1208 uvuformat=''
1209 uvxformat=''
1210 pidtype=''
1211 prefix=''
1212 prefixexp=''
1213 installprivlib=''
1214 privlib=''
1215 privlibexp=''
1216 prototype=''
1217 ptrsize=''
1218 d_PRIXU64=''
1219 d_PRId64=''
1220 d_PRIi64=''
1221 d_PRIo64=''
1222 d_PRIu64=''
1223 d_PRIx64=''
1224 sPRIXU64=''
1225 sPRId64=''
1226 sPRIi64=''
1227 sPRIo64=''
1228 sPRIu64=''
1229 sPRIx64=''
1230 d_quad=''
1231 quadkind=''
1232 quadtype=''
1233 uquadtype=''
1234 drand01=''
1235 randbits=''
1236 randfunc=''
1237 randseedtype=''
1238 seedfunc=''
1239 installscript=''
1240 scriptdir=''
1241 scriptdirexp=''
1242 selectminbits=''
1243 selecttype=''
1244 sh=''
1245 targetsh=''
1246 sig_count=''
1247 sig_name=''
1248 sig_name_init=''
1249 sig_num=''
1250 sig_num_init=''
1251 sig_size=''
1252 d_sitearch=''
1253 installsitearch=''
1254 sitearch=''
1255 sitearchexp=''
1256 installsitebin=''
1257 sitebin=''
1258 sitebinexp=''
1259 installsitehtml1dir=''
1260 sitehtml1dir=''
1261 sitehtml1direxp=''
1262 installsitehtml3dir=''
1263 sitehtml3dir=''
1264 sitehtml3direxp=''
1265 installsitelib=''
1266 sitelib=''
1267 sitelib_stem=''
1268 sitelibexp=''
1269 installsiteman1dir=''
1270 siteman1dir=''
1271 siteman1direxp=''
1272 installsiteman3dir=''
1273 siteman3dir=''
1274 siteman3direxp=''
1275 siteprefix=''
1276 siteprefixexp=''
1277 installsitescript=''
1278 sitescript=''
1279 sitescriptexp=''
1280 sizesize=''
1281 sizetype=''
1282 d_libname_unique=''
1283 so=''
1284 socksizetype=''
1285 sharpbang=''
1286 shsharp=''
1287 spitshell=''
1288 src=''
1289 ssizetype=''
1290 st_ino_sign=''
1291 st_ino_size=''
1292 startperl=''
1293 startsh=''
1294 stdchar=''
1295 d_stdio_stream_array=''
1296 stdio_stream_array=''
1297 sysman=''
1298 sGMTIME_max=''
1299 sGMTIME_min=''
1300 sLOCALTIME_max=''
1301 sLOCALTIME_min=''
1302 trnl=''
1303 uidformat=''
1304 uidsign=''
1305 uidsize=''
1306 uidtype=''
1307 archname64=''
1308 use64bitall=''
1309 use64bitint=''
1310 usecbacktrace=''
1311 dtrace=''
1312 usedtrace=''
1313 usefaststdio=''
1314 usekernprocpathname=''
1315 ccflags_uselargefiles=''
1316 ldflags_uselargefiles=''
1317 libswanted_uselargefiles=''
1318 uselargefiles=''
1319 uselongdouble=''
1320 usemorebits=''
1321 usemultiplicity=''
1322 nm_opt=''
1323 nm_so_opt=''
1324 runnm=''
1325 usenm=''
1326 usensgetexecutablepath=''
1327 useperlio=''
1328 usequadmath=''
1329 usesocks=''
1330 d_oldpthreads=''
1331 use5005threads=''
1332 useithreads=''
1333 usereentrant=''
1334 usethreads=''
1335 incpath=''
1336 mips_type=''
1337 usrinc=''
1338 vaproto=''
1339 d_vendorarch=''
1340 installvendorarch=''
1341 vendorarch=''
1342 vendorarchexp=''
1343 d_vendorbin=''
1344 installvendorbin=''
1345 vendorbin=''
1346 vendorbinexp=''
1347 installvendorhtml1dir=''
1348 vendorhtml1dir=''
1349 vendorhtml1direxp=''
1350 installvendorhtml3dir=''
1351 vendorhtml3dir=''
1352 vendorhtml3direxp=''
1353 d_vendorlib=''
1354 installvendorlib=''
1355 vendorlib=''
1356 vendorlib_stem=''
1357 vendorlibexp=''
1358 installvendorman1dir=''
1359 vendorman1dir=''
1360 vendorman1direxp=''
1361 installvendorman3dir=''
1362 vendorman3dir=''
1363 vendorman3direxp=''
1364 usevendorprefix=''
1365 vendorprefix=''
1366 vendorprefixexp=''
1367 d_vendorscript=''
1368 installvendorscript=''
1369 vendorscript=''
1370 vendorscriptexp=''
1371 versiononly=''
1372 yacc=''
1373 yaccflags=''
1374 CONFIG=''
1375
1376 : Detect odd OSs
1377 define='define'
1378 undef='undef'
1379 smallmach='pdp11 i8086 z8000 i80286 iAPX286'
1380 rmlist=''
1381
1382 : We must find out about Eunice early
1383 eunicefix=':'
1384 if test -f /etc/unixtovms; then
1385         eunicefix=/etc/unixtovms
1386 fi
1387 if test -f /etc/unixtovms.exe; then
1388         eunicefix=/etc/unixtovms.exe
1389 fi
1390
1391 : Set executable suffix now -- needed before hints available
1392 if test -f "/libs/version.library"; then
1393 : Amiga OS
1394     _exe=""
1395 elif test -f "/system/gnu_library/bin/ar.pm"; then
1396 : Stratus VOS
1397     _exe=".pm"
1398 elif test -n "$DJGPP"; then
1399 : DOS DJGPP
1400     _exe=".exe"
1401 elif test -f /kern/cookiejar; then
1402 : MiNT
1403     _exe=""
1404 elif test -d c:/. -o -n "$is_os2" ; then
1405 : OS/2 or cygwin
1406     _exe=".exe"
1407 fi
1408
1409 groupstype=''
1410 i_whoami=''
1411 : Trailing extension.  Override this in a hint file, if needed.
1412 : Extra object files, if any, needed on this platform.
1413 archobjs=''
1414 archname=''
1415 : Possible local include directories to search.
1416 : Set locincpth to "" in a hint file to defeat local include searches.
1417 locincpth="/usr/local/include /opt/local/include /usr/gnu/include"
1418 locincpth="$locincpth /opt/gnu/include /usr/GNU/include /opt/GNU/include"
1419 :
1420 : no include file wanted by default
1421 inclwanted=''
1422
1423 : Enable -DEBUGGING and -DDEBUGGING from the command line
1424 EBUGGING=''
1425 DEBUGGING=''
1426
1427 libnames=''
1428 : change the next line if compiling for Xenix/286 on Xenix/386
1429 xlibpth='/usr/lib/386 /lib/386'
1430 : Possible local library directories to search.
1431 loclibpth="/usr/local/lib /opt/local/lib /usr/gnu/lib"
1432 loclibpth="$loclibpth /opt/gnu/lib /usr/GNU/lib /opt/GNU/lib"
1433
1434 : general looking path for locating libraries
1435 glibpth="/lib /usr/lib $xlibpth"
1436 glibpth="$glibpth /usr/ccs/lib /usr/ucblib /usr/local/lib"
1437 test -f /usr/shlib/libc.so && glibpth="/usr/shlib $glibpth"
1438 test -f /shlib/libc.so     && glibpth="/shlib $glibpth"
1439 test -d /usr/lib64         && glibpth="$glibpth /lib64 /usr/lib64 /usr/local/lib64"
1440
1441 : Private path used by Configure to find libraries.  Its value
1442 : is prepended to libpth. This variable takes care of special
1443 : machines, like the mips.  Usually, it should be empty.
1444 plibpth=''
1445
1446 : default library list
1447 libswanted=''
1448 : some systems want to use only the non-versioned libso:s
1449 ignore_versioned_solibs=''
1450 : set usethreads on the Configure command line to enable threads.
1451 usereentrant='undef'
1452 ccname=''
1453 ccversion=''
1454 perllibs=''
1455 : set useposix=false in your hint file to disable the POSIX extension.
1456 useposix=true
1457 : set useopcode=false in your hint file to disable the Opcode extension.
1458 useopcode=true
1459 archname64=''
1460 ccflags_uselargefiles=''
1461 ldflags_uselargefiles=''
1462 libswanted_uselargefiles=''
1463 : set usemultiplicity on the Configure command line to enable multiplicity.
1464 : set usesocks on the Configure command line to enable socks.
1465 : List of libraries we want.
1466 : If anyone needs extra -lxxx, put those in a hint file.
1467 libswanted="cl pthread socket bind inet nsl nm ndbm gdbm dbm db malloc dl ld"
1468 libswanted="$libswanted sun m crypt sec util c cposix posix ucb bsd BSD"
1469 : We probably want to search /usr/shlib before most other libraries.
1470 : This is only used by the lib/ExtUtils/MakeMaker.pm routine extliblist.
1471 glibpth=`echo " $glibpth " | sed -e 's! /usr/shlib ! !'`
1472 glibpth="/usr/shlib $glibpth"
1473 : Do not use vfork unless overridden by a hint file.
1474 usevfork=false
1475
1476 : Find the basic shell for Bourne shell scripts
1477 case "$sh" in
1478 '')
1479         case "$SYSTYPE" in
1480         *bsd*|sys5*) xxx="/$SYSTYPE/bin/sh";;
1481         *) xxx='/bin/sh';;
1482         esac
1483         if test -f "$xxx"; then
1484                 sh="$xxx"
1485         else
1486                 : Build up a list and do a single loop so we can 'break' out.
1487                 pth=`echo $PATH | sed -e "s/$p_/ /g"`
1488                 for xxx in sh bash ksh pdksh ash; do
1489                         for p in $pth; do
1490                                 try="$try ${p}/${xxx}"
1491                         done
1492                 done
1493                 for xxx in $try; do
1494                         if test -f "$xxx"; then
1495                                 sh="$xxx";
1496                                 break
1497                         elif test "X$_exe" != X -a -f "$xxx$_exe"; then
1498                                 sh="$xxx";
1499                                 break
1500                         elif test -f "$xxx.exe"; then
1501                                 sh="$xxx";
1502                                 break
1503                         fi
1504                 done
1505         fi
1506         ;;
1507 esac
1508
1509 case "$sh" in
1510 '')     cat >&2 <<EOM
1511 $me:  Fatal Error:  I can't find a Bourne Shell anywhere.
1512
1513 Usually it's in /bin/sh.  How did you even get this far?
1514 Please contact me (Perl Maintainers) at perlbug@perl.org and
1515 we'll try to straighten this all out.
1516 EOM
1517         exit 1
1518         ;;
1519 esac
1520
1521 : When cross-compiling we need to separate the sh-to-run-Configure-with from the sh-to-use-in-Perl
1522 : default both to the same thing, cross-compilers can then set targetsh differently if they like
1523 targetsh=$sh
1524
1525 : see if sh knows # comments
1526 if `$sh -c '#' >/dev/null 2>&1`; then
1527         shsharp=true
1528         spitshell=cat
1529         xcat=/bin/cat
1530         test -f $xcat$_exe || xcat=/usr/bin/cat
1531         if test ! -f $xcat$_exe; then
1532                 for p in `echo $PATH | sed -e "s/$p_/ /g"` $paths; do
1533                         if test -f $p/cat$_exe; then
1534                                 xcat=$p/cat
1535                                 break
1536                         fi
1537                 done
1538                 if test ! -f $xcat$_exe; then
1539                         echo "Can't find cat anywhere!"
1540                         exit 1
1541                 fi
1542         fi
1543         echo "#!$xcat" >sharp
1544         $eunicefix sharp
1545         chmod +x sharp
1546         ./sharp > today 2>/dev/null
1547         if test -s today; then
1548                 sharpbang='#!'
1549         else
1550                 echo "#! $xcat" > sharp
1551                 $eunicefix sharp
1552                 chmod +x sharp
1553                 ./sharp > today 2>/dev/null
1554                 if test -s today; then
1555                         sharpbang='#! '
1556                 else
1557                         sharpbang=': use '
1558                 fi
1559         fi
1560 else
1561         echo " "
1562         echo "Your $sh doesn't grok # comments--I will strip them later on."
1563         shsharp=false
1564         cd ..
1565         echo "exec grep -v '^[  ]*#'" >spitshell
1566         chmod +x spitshell
1567         $eunicefix spitshell
1568         spitshell=`pwd`/spitshell
1569         cd UU
1570         echo "I presume that if # doesn't work, #! won't work either!"
1571         sharpbang=': use '
1572 fi
1573 rm -f sharp today
1574
1575 : figure out how to guarantee sh startup
1576 case "$startsh" in
1577 '') startsh=${sharpbang}${sh} ;;
1578 *)
1579 esac
1580 cat >sharp <<EOSS
1581 $startsh
1582 set abc
1583 test "$?abc" != 1
1584 EOSS
1585
1586 chmod +x sharp
1587 $eunicefix sharp
1588 if ./sharp; then
1589         : echo "Yup, it does."
1590 else
1591         echo "Hmm... '$startsh' does not guarantee sh startup..."
1592         echo "You may have to fix up the shell scripts to make sure $sh runs them."
1593 fi
1594 rm -f sharp
1595
1596 : Save command line options in file UU/cmdline.opt for later use in
1597 : generating config.sh.
1598 cat > cmdline.opt <<EOSH
1599 : Configure command line arguments.
1600 config_arg0='$0'
1601 config_args='$*'
1602 config_argc=$#
1603 EOSH
1604 argn=1
1605 args_exp=''
1606 args_sep=''
1607 for arg in "$@"; do
1608         cat >>cmdline.opt <<EOSH
1609 config_arg$argn='$arg'
1610 EOSH
1611         cat <<EOC | sed -e "s/'/'"'"'"'"'"'"'/g" > cmdl.opt
1612 $arg
1613 EOC
1614         arg_exp=`cat cmdl.opt`
1615         args_exp="$args_exp$args_sep'$arg_exp'"
1616         argn=`expr $argn + 1`
1617         args_sep=' '
1618 done
1619 rm -f cmdl.opt
1620
1621 : produce awk script to parse command line options
1622 cat >options.awk <<'EOF'
1623 BEGIN {
1624         optstr = "A:dD:eEf:hKOrsSU:V";  # getopt-style specification
1625
1626         len = length(optstr);
1627         for (i = 1; i <= len; i++) {
1628                 c = substr(optstr, i, 1);
1629                 if (i < len) a = substr(optstr, i + 1, 1); else a = "";
1630                 if (a == ":") {
1631                         arg[c] = 1;
1632                         i++;
1633                 }
1634                 opt[c] = 1;
1635         }
1636 }
1637 {
1638         expect = 0;
1639         str = $0;
1640         if (substr(str, 1, 1) != "-") {
1641                 printf("'%s'\n", str);
1642                 next;
1643         }
1644         len = length($0);
1645         for (i = 2; i <= len; i++) {
1646                 c = substr(str, i, 1);
1647                 if (!opt[c]) {
1648                         printf("-%s\n", substr(str, i));
1649                         next;
1650                 }
1651                 printf("-%s\n", c);
1652                 if (arg[c]) {
1653                         if (i < len)
1654                                 printf("'%s'\n", substr(str, i + 1));
1655                         else
1656                                 expect = 1;
1657                         next;
1658                 }
1659         }
1660 }
1661 END {
1662         if (expect)
1663                 print "?";
1664 }
1665 EOF
1666
1667 : process the command line options
1668 set X `for arg in "$@"; do echo "X$arg"; done |
1669         sed -e s/X// | awk -f options.awk`
1670 eval "set $*"
1671 shift
1672 rm -f options.awk
1673
1674 : set up default values
1675 fastread=''
1676 reuseval=false
1677 config_sh=''
1678 alldone=''
1679 error=''
1680 silent=''
1681 extractsh=''
1682 override=''
1683 knowitall=''
1684 rm -f optdef.sh posthint.sh
1685 cat >optdef.sh <<EOS
1686 $startsh
1687 EOS
1688
1689
1690 : option parsing
1691 while test $# -gt 0; do
1692         case "$1" in
1693         -d) shift; fastread=yes;;
1694         -e) shift; alldone=cont;;
1695         -f)
1696                 shift
1697                 cd ..
1698                 if test -r "$1"; then
1699                         config_sh="$1"
1700                 else
1701                         echo "$me: cannot read config file $1." >&2
1702                         error=true
1703                 fi
1704                 cd UU
1705                 shift;;
1706         --help|\
1707         -h) shift; error=true;;
1708         -r) shift; reuseval=true;;
1709         -s) shift; silent=true; realsilent=true;;
1710         -E) shift; alldone=exit;;
1711         -K) shift; knowitall=true;;
1712         -O) shift; override=true;;
1713         -S) shift; silent=true; extractsh=true;;
1714         -D)
1715                 shift
1716                 case "$1" in
1717                 *=)
1718                         echo "$me: use '-U symbol=', not '-D symbol='." >&2
1719                         echo "$me: ignoring -D $1" >&2
1720                         ;;
1721                 *=*) echo "$1" | \
1722                                 sed -e "s/'/'\"'\"'/g" -e "s/=\(.*\)/='\1'/" >> optdef.sh;;
1723                 *) echo "$1='define'" >> optdef.sh;;
1724                 esac
1725                 shift
1726                 ;;
1727         -U)
1728                 shift
1729                 case "$1" in
1730                 *=) echo "$1" >> optdef.sh;;
1731                 *=*)
1732                         echo "$me: use '-D symbol=val', not '-U symbol=val'." >&2
1733                         echo "$me: ignoring -U $1" >&2
1734                         ;;
1735                 *) echo "$1='undef'" >> optdef.sh;;
1736                 esac
1737                 shift
1738                 ;;
1739         -A)
1740             shift
1741             xxx=''
1742             yyy="$1"
1743             zzz=''
1744             uuu=undef
1745             case "$yyy" in
1746             *=*) zzz=`echo "$yyy"|sed 's!=.*!!'`
1747                  case "$zzz" in
1748                  *:*) zzz='' ;;
1749                  *)   xxx=append
1750                       zzz=" "`echo "$yyy"|sed 's!^[^=]*=!!'`
1751                       yyy=`echo "$yyy"|sed 's!=.*!!'` ;;
1752                  esac
1753                  ;;
1754             esac
1755             case "$xxx" in
1756             '')  case "$yyy" in
1757                  *:*) xxx=`echo "$yyy"|sed 's!:.*!!'`
1758                       yyy=`echo "$yyy"|sed 's!^[^:]*:!!'`
1759                       zzz=`echo "$yyy"|sed 's!^[^=]*=!!'`
1760                       yyy=`echo "$yyy"|sed 's!=.*!!'` ;;
1761                  *)   xxx=`echo "$yyy"|sed 's!:.*!!'`
1762                       yyy=`echo "$yyy"|sed 's!^[^:]*:!!'` ;;
1763                  esac
1764                  ;;
1765             esac
1766             case "$xxx" in
1767             append)
1768                 echo "$yyy=\"\${$yyy}$zzz\""    >> posthint.sh ;;
1769             clear)
1770                 echo "$yyy=''"                  >> posthint.sh ;;
1771             define)
1772                 case "$zzz" in
1773                 '') zzz=define ;;
1774                 esac
1775                 echo "$yyy='$zzz'"              >> posthint.sh ;;
1776             eval)
1777                 echo "eval \"$yyy=$zzz\""       >> posthint.sh ;;
1778             prepend)
1779                 echo "$yyy=\"$zzz\${$yyy}\""    >> posthint.sh ;;
1780             undef)
1781                 case "$zzz" in
1782                 '') zzz="$uuu" ;;
1783                 esac
1784                 echo "$yyy=$zzz"                >> posthint.sh ;;
1785             *)  echo "$me: unknown -A command '$xxx', ignoring -A $1" >&2 ;;
1786             esac
1787             shift
1788             ;;
1789         -V) echo "$me generated by metaconfig 3.5 PL0." >&2
1790             exit 0;;
1791         --) break;;
1792         -*) echo "$me: unknown option $1" >&2; shift; error=true;;
1793         *) break;;
1794         esac
1795 done
1796
1797 case "$error" in
1798 true)
1799         cat >&2 <<EOM
1800 Usage: $me [-dehrsEKOSV] [-f config.sh] [-D symbol] [-D symbol=value]
1801                  [-U symbol] [-U symbol=] [-A command:symbol...]
1802   -d : use defaults for all answers.
1803   -e : go on without questioning past the production of config.sh.
1804   -f : specify an alternate default configuration file.
1805   -h : print this help message and exit (with an error status).
1806   -r : reuse C symbols value if possible (skips costly nm extraction).
1807   -s : silent mode, only echoes questions and essential information.
1808   -D : define symbol to have some value:
1809          -D symbol         symbol gets the value 'define'
1810          -D symbol=value   symbol gets the value 'value'
1811        common used examples (see INSTALL for more info):
1812          -Duse64bitint            use 64bit integers
1813          -Duse64bitall            use 64bit integers and pointers
1814          -Dusethreads             use thread support
1815          -Dinc_version_list=none  do not include older perl trees in @INC
1816          -DEBUGGING=none          DEBUGGING options
1817          -Dcc=gcc                 choose your compiler
1818          -Dprefix=/opt/perl5      choose your destination
1819   -E : stop at the end of questions, after having produced config.sh.
1820   -K : do not use unless you know what you are doing.
1821   -O : let -D and -U override definitions from loaded configuration file.
1822   -S : perform variable substitutions on all .SH files (can mix with -f)
1823   -U : undefine symbol:
1824          -U symbol    symbol gets the value 'undef'
1825          -U symbol=   symbol gets completely empty
1826        e.g.:  -Uversiononly
1827   -A : manipulate symbol after the platform specific hints have been applied:
1828          -A append:symbol=value   append value to symbol
1829          -A symbol=value          like append:, but with a separating space
1830          -A define:symbol=value   define symbol to have value
1831          -A clear:symbol          define symbol to be ''
1832          -A define:symbol         define symbol to be 'define'
1833          -A eval:symbol=value     define symbol to be eval of value
1834          -A prepend:symbol=value  prepend value to symbol
1835          -A undef:symbol          define symbol to be 'undef'
1836          -A undef:symbol=         define symbol to be ''
1837        e.g.:  -A prepend:libswanted='cl pthread '
1838               -A ccflags=-DSOME_MACRO
1839   -V : print version number and exit (with a zero status).
1840 EOM
1841         exit 1
1842         ;;
1843 esac
1844
1845 : Sanity checks
1846 case "$fastread$alldone" in
1847 yescont|yesexit) ;;
1848 *)
1849         case "$extractsh" in
1850         true) ;;
1851         *)
1852                 if test ! -t 0; then
1853                         echo "Say 'sh Configure', not 'sh <Configure'"
1854                         exit 1
1855                 fi
1856                 ;;
1857         esac
1858         ;;
1859 esac
1860
1861 exec 4>&1
1862 case "$silent" in
1863 true) exec 1>/dev/null;;
1864 esac
1865
1866 : run the defines and the undefines, if any, but leave the file out there...
1867 touch optdef.sh
1868 grep -q '\\' optdef.sh
1869 if test $? = 0; then
1870     echo "Configure does not support \\ in -D arguments"
1871     exit 1
1872 fi
1873 . ./optdef.sh
1874 : create the posthint manipulation script and leave the file out there...
1875 touch posthint.sh
1876
1877 : set package name
1878 package='perl5'
1879 first=`echo $package | sed -e 's/^\(.\).*/\1/'`
1880 last=`echo $package | sed -e 's/^.\(.*\)/\1/'`
1881 case "`echo AbyZ | tr '[:lower:]' '[:upper:]' 2>/dev/null`"-"`echo AbyZ | tr '[:upper:]' '[:lower:]' 2>/dev/null`" in
1882 ABYZ-abyz) spackage=`echo $first | tr '[:lower:]' '[:upper:]'`$last;;
1883 *) spackage=`echo $first | tr '[a-z]' '[A-Z]'`$last;;
1884 esac
1885
1886 : Some greps do not return status, grrr.
1887 echo "grimblepritz" >grimble
1888 if grep blurfldyick grimble >/dev/null 2>&1 ; then
1889         contains=contains
1890 elif grep grimblepritz grimble >/dev/null 2>&1 ; then
1891         contains=grep
1892 else
1893         contains=contains
1894 fi
1895 rm -f grimble
1896 : the following should work in any shell
1897 case "$contains" in
1898 contains*)
1899         echo " "
1900         echo "AGH!  Grep doesn't return a status.  Attempting remedial action."
1901         cat >contains <<'EOSS'
1902 grep "$1" "$2" >.greptmp && cat .greptmp && test -s .greptmp
1903 EOSS
1904 chmod +x contains
1905 esac
1906
1907 : Find the path to the source tree
1908 case "$src" in
1909 '') case "$0" in
1910     */*) src=`echo $0 | sed -e 's%/[^/][^/]*$%%'`
1911          case "$src" in
1912          /*)    ;;
1913          .)     ;;
1914          *)     src=`cd ../$src && pwd` ;;
1915          esac
1916          ;;
1917     *)   src='.';;
1918     esac;;
1919 esac
1920 case "$src" in
1921 '')     src=/
1922         rsrc=/
1923         ;;
1924 /*)     rsrc="$src";;
1925 *)      rsrc="../$src";;
1926 esac
1927 if test -f $rsrc/Configure && \
1928         $contains "^package='$package'\$" $rsrc/Configure >/dev/null 2>&1
1929 then
1930    : found it, so we are ok.
1931 else
1932         rsrc=''
1933         for src in . .. ../.. ../../.. ../../../..; do
1934                 if test -f ../$src/Configure && \
1935                         $contains "^package=$package$" ../$src/Configure >/dev/null 2>&1
1936                 then
1937                         rsrc=../$src
1938                         break
1939                 fi
1940         done
1941 fi
1942 case "$rsrc" in
1943 '')
1944         cat <<EOM >&4
1945
1946 Sorry, I can't seem to locate the source dir for $package.  Please start
1947 Configure with an explicit path -- i.e. /some/path/Configure.
1948
1949 EOM
1950         exit 1
1951         ;;
1952 ../.)   rsrc='..';;
1953 *)
1954         echo " "
1955         echo "Sources for $package found in \"$src\"." >&4
1956         ;;
1957 esac
1958
1959 : script used to extract .SH files with variable substitutions
1960 cat >extract <<'EOS'
1961 PERL_CONFIG_SH=true
1962 echo "Doing variable substitutions on .SH files..."
1963 if test -f MANIFEST; then
1964         set x `awk '{print $1}' < MANIFEST | grep '\.SH$'`
1965 else
1966         echo "(Looking for .SH files under the source directory.)"
1967         set x `(cd "$src"; find . -name "*.SH" -print)`
1968 fi
1969 shift
1970 case $# in
1971 0) set x `(cd "$src"; echo *.SH)`; shift;;
1972 esac
1973 if test ! -f "$src/$1"; then
1974         shift
1975 fi
1976 mkdir_p='
1977 name=$1;
1978 create="";
1979 while test $name; do
1980         if test ! -d "$name"; then
1981                 create="$name $create";
1982                 name=`echo $name | sed -e "s|^[^/]*$||"`;
1983                 name=`echo $name | sed -e "s|\(.*\)/.*|\1|"`;
1984         else
1985                 name="";
1986         fi;
1987 done;
1988 for file in $create; do
1989         mkdir $file;
1990 done
1991 '
1992 for file in $*; do
1993         case "$src" in
1994         ".")
1995                 case "$file" in
1996                 */*)
1997                         dir=`expr X$file : 'X\(.*\)/'`
1998                         file=`expr X$file : 'X.*/\(.*\)'`
1999                         (cd "$dir" && . ./$file)
2000                         ;;
2001                 *)
2002                         . ./$file
2003                         ;;
2004                 esac
2005                 ;;
2006         *)
2007                 case "$file" in
2008                 */*)
2009                         dir=`expr X$file : 'X\(.*\)/'`
2010                         file=`expr X$file : 'X.*/\(.*\)'`
2011                         (set x $dir; shift; eval $mkdir_p)
2012                         sh <"$src/$dir/$file"
2013                         ;;
2014                 *)
2015                         sh <"$src/$file"
2016                         ;;
2017                 esac
2018                 ;;
2019         esac
2020 done
2021 if test -f "$src/config_h.SH"; then
2022         if test ! -f config.h; then
2023         : oops, they left it out of MANIFEST, probably, so do it anyway.
2024         . "$src/config_h.SH"
2025         fi
2026 fi
2027 EOS
2028
2029 : extract files and exit if asked to do so
2030 case "$extractsh" in
2031 true)
2032         case "$realsilent" in
2033         true) ;;
2034         *) exec 1>&4;;
2035         esac
2036         case "$config_sh" in
2037         '') config_sh='config.sh';;
2038         esac
2039         echo " "
2040         echo "Fetching answers from $config_sh..."
2041         cd ..
2042         . $config_sh
2043         test "$override" && . ./optdef.sh
2044         echo " "
2045         . UU/extract
2046         rm -rf UU
2047         echo "Extraction done."
2048         exit 0
2049         ;;
2050 esac
2051
2052 : Eunice requires " " instead of "", can you believe it
2053 echo " "
2054 : Here we go...
2055 echo "Beginning of configuration questions for $package."
2056
2057 trap 'echo " "; test -d ../UU && rm -rf X $rmlist; exit 1' 1 2 3 15
2058
2059 : first determine how to suppress newline on echo command
2060 echo " "
2061 echo "Checking echo to see how to suppress newlines..."
2062 (echo "hi there\c" ; echo " ") >.echotmp
2063 if $contains c .echotmp >/dev/null 2>&1 ; then
2064         echo "...using -n."
2065         n='-n'
2066         c=''
2067 else
2068         cat <<'EOM'
2069 ...using \c
2070 EOM
2071         n=''
2072         c='\c'
2073 fi
2074 echo $n "The star should be here-->$c"
2075 echo '*'
2076 rm -f .echotmp
2077
2078 : Now test for existence of everything in MANIFEST
2079 echo " "
2080 if test -f "$rsrc/MANIFEST"; then
2081         echo "First let's make sure your kit is complete.  Checking..." >&4
2082         awk '$1 !~ /PACK[A-Z]+/ {print $1}' "$rsrc/MANIFEST" | \
2083                 (split -l 50 2>/dev/null || split -50)
2084         rm -f missing
2085         tmppwd=`pwd`
2086         for filelist in x??; do
2087                 (cd "$rsrc"; ls `cat "$tmppwd/$filelist"` \
2088                         >/dev/null 2>>"$tmppwd/missing")
2089         done
2090         if test -s missing; then
2091                 cat missing >&4
2092                 cat >&4 <<'EOM'
2093
2094 THIS PACKAGE SEEMS TO BE INCOMPLETE.
2095
2096 You have the option of continuing the configuration process, despite the
2097 distinct possibility that your kit is damaged, by typing 'y'es.  If you
2098 do, don't blame me if something goes wrong.  I advise you to type 'n'o
2099 and contact the author (perlbug@perl.org).
2100
2101 EOM
2102                 echo $n "Continue? [n] $c" >&4
2103                 read ans
2104                 case "$ans" in
2105                 y*)
2106                         echo "Continuing..." >&4
2107                         rm -f missing
2108                         ;;
2109                 *)
2110                         echo "ABORTING..." >&4
2111                         kill $$
2112                         ;;
2113                 esac
2114         else
2115                 echo "Looks good..."
2116         fi
2117 else
2118         echo "There is no MANIFEST file.  I hope your kit is complete !"
2119 fi
2120 rm -f missing x??
2121
2122 : Find the appropriate value for a newline for tr
2123 echo " "
2124 if test -n "$DJGPP"; then
2125        trnl='\012'
2126 fi
2127 if test X"$trnl" = X; then
2128         case "`echo foo|tr '\n' x 2>/dev/null`" in
2129         foox) trnl='\n' ;;
2130         esac
2131 fi
2132 if test X"$trnl" = X; then
2133         case "`echo foo|tr '\012' x 2>/dev/null`" in
2134         foox) trnl='\012' ;;
2135         esac
2136 fi
2137 if test X"$trnl" = X; then
2138        case "`echo foo|tr '\r\n' xy 2>/dev/null`" in
2139        fooxy) trnl='\n\r' ;;
2140        esac
2141 fi
2142 if test X"$trnl" = X; then
2143         cat <<EOM >&2
2144
2145 $me: Fatal Error: cannot figure out how to translate newlines with 'tr'.
2146
2147 EOM
2148         exit 1
2149 fi
2150
2151 : compute the number of columns on the terminal for proper question formatting
2152 case "$COLUMNS" in
2153 '') COLUMNS='80';;
2154 esac
2155
2156 : set up the echo used in my read
2157 myecho="case \"\$xxxm\" in
2158 '') echo $n \"\$rp $c\" >&4;;
2159 *) case \"\$rp\" in
2160         '') echo $n \"[\$xxxm] $c\";;
2161         *)
2162                 if test \`echo \"\$rp [\$xxxm]  \" | wc -c\` -ge $COLUMNS; then
2163                         echo \"\$rp\" >&4
2164                         echo $n \"[\$xxxm] $c\" >&4
2165                 else
2166                         echo $n \"\$rp [\$xxxm] $c\" >&4
2167                 fi
2168                 ;;
2169         esac;;
2170 esac"
2171
2172 : now set up to do reads with possible shell escape and default assignment
2173 cat <<EOSC >myread
2174 $startsh
2175 xxxm=\$dflt
2176 $myecho
2177 ans='!'
2178 case "\$fastread" in
2179 yes) case "\$dflt" in
2180         '') ;;
2181         *) ans='';
2182                 case "\$silent-\$rp" in
2183                 true-) ;;
2184                 *) echo " " >&4;;
2185                 esac;;
2186         esac;;
2187 *) case "\$silent" in
2188         true) case "\$rp" in
2189                 '') ans='';;
2190                 esac;;
2191         esac;;
2192 esac
2193 while expr "X\$ans" : "X!" >/dev/null; do
2194         read answ
2195         set x \$xxxm
2196         shift
2197         aok=''; eval "ans=\\"\$answ\\"" && aok=y
2198         case  "\$answ" in
2199         "!")
2200                 sh 1>&4
2201                 echo " "
2202                 $myecho
2203                 ;;
2204         !*)
2205                 set x \`expr "X\$ans" : "X!\(.*\)\$"\`
2206                 shift
2207                 sh 1>&4 -c "\$*"
2208                 echo " "
2209                 $myecho
2210                 ;;
2211         "\$ans")
2212                 case "\$ans" in
2213                 \\&*)
2214                         set x \`expr "X\$ans" : "X&\(.*\)\$"\`
2215                         shift
2216                         case "\$1" in
2217                         -d)
2218                                 fastread=yes
2219                                 echo "(OK, I'll run with -d after this question.)" >&4
2220                                 ;;
2221                         -*)
2222                                 echo "*** Sorry, \$1 not supported yet." >&4
2223                                 ;;
2224                         esac
2225                         $myecho
2226                         ans=!
2227                         ;;
2228                 esac;;
2229         *)
2230                 case "\$aok" in
2231                 y)
2232                         echo "*** Substitution done -- please confirm."
2233                         xxxm="\$ans"
2234                         ans=\`echo $n "\$ans$c" | tr '$trnl' ' '\`
2235                         xxxm="\$ans"
2236                         ans=!
2237                         ;;
2238                 *)
2239                         echo "*** Error -- try again."
2240                         ans=!
2241                         ;;
2242                 esac
2243                 $myecho
2244                 ;;
2245         esac
2246         case "\$ans\$xxxm\$nostick" in
2247         '')
2248                 ans=!
2249                 $myecho
2250                 ;;
2251         esac
2252 done
2253 case "\$ans" in
2254 '') ans="\$xxxm";;
2255 esac
2256 EOSC
2257
2258 : create .config dir to save info across Configure sessions
2259 test -d ../.config || mkdir ../.config
2260 cat >../.config/README <<EOF
2261 This directory created by Configure to save information that should
2262 persist across sessions for $package.
2263
2264 You may safely delete it if you wish.
2265 EOF
2266
2267 : See if we are using a devel version and want that
2268 xversion=`awk '/define[         ]+PERL_VERSION/ {print $3}' $rsrc/patchlevel.h`
2269 case "$usedevel" in
2270 $define|true|[yY]*)
2271     usedevel="$define" ;;
2272 *) case "$xversion" in
2273    *[13579])
2274         cat >&4 <<EOH
2275 *** WHOA THERE!!! ***
2276
2277     This is an UNSTABLE DEVELOPMENT release.
2278     The version of this $package distribution is $xversion, that is, odd,
2279     (as opposed to even) and that signifies a development release.
2280     If you want a maintenance release, you want an even-numbered version.
2281
2282     Do ***NOT*** install this into production use.
2283     Data corruption and crashes are possible.
2284
2285     It is most seriously suggested that you do not continue any further
2286     unless you want to help in developing and debugging Perl.
2287
2288     If you *still* want to build perl, you can answer 'y' now,
2289     or pass -Dusedevel to Configure.
2290
2291 EOH
2292         rp='Do you really want to continue?'
2293         dflt='n'
2294         . ./myread
2295         case "$ans" in
2296         [yY]) echo >&4 "Okay, continuing."
2297               usedevel="$define" ;;
2298         *) echo >&4 "Okay, bye."
2299            exit 1
2300            ;;
2301         esac
2302         ;;
2303     esac
2304     usedevel="$undef"
2305     ;;
2306 esac
2307 case "$usedevel" in
2308 $define|true|[yY]*)
2309         case "$versiononly" in
2310         '') versiononly="$define" ;;
2311         esac
2312         case "$installusrbinperl" in
2313         '') installusrbinperl="$undef" ;;
2314         esac
2315         ;;
2316 esac
2317
2318 : general instructions
2319 needman=true
2320 firsttime=true
2321 user=`(logname) 2>/dev/null`
2322 case "$user" in
2323 '') user=`whoami 2>&1`;;
2324 esac
2325 if $contains "^$user\$" ../.config/instruct >/dev/null 2>&1; then
2326         firsttime=false
2327         echo " "
2328         rp='Would you like to see the instructions?'
2329         dflt=n
2330         . ./myread
2331         case "$ans" in
2332         [yY]*) ;;
2333         *) needman=false;;
2334         esac
2335 fi
2336 if $needman; then
2337         cat <<EOH
2338
2339 This installation shell script will examine your system and ask you questions
2340 to determine how the perl5 package should be installed. If you get
2341 stuck on a question, you may use a ! shell escape to start a subshell or
2342 execute a command.  Many of the questions will have default answers in square
2343 brackets; typing carriage return will give you the default.
2344
2345 On some of the questions which ask for file or directory names you are allowed
2346 to use the ~name construct to specify the login directory belonging to "name",
2347 even if you don't have a shell which knows about that.  Questions where this is
2348 allowed will be marked "(~name ok)".
2349
2350 EOH
2351         rp=''
2352         dflt='Type carriage return to continue'
2353         . ./myread
2354         cat <<'EOH'
2355
2356 The prompter used in this script allows you to use shell variables and
2357 backticks in your answers.  You may use $1, $2, etc...  to refer to the words
2358 in the default answer, as if the default line was a set of arguments given to a
2359 script shell.  This means you may also use $* to repeat the whole default line,
2360 so you do not have to re-type everything to add something to the default.
2361
2362 Every time there is a substitution, you will have to confirm.  If there is an
2363 error (e.g. an unmatched backtick), the default answer will remain unchanged
2364 and you will be prompted again.
2365
2366 If you are in a hurry, you may run 'Configure -d'.  This will bypass nearly all
2367 the questions and use the computed defaults (or the previous answers if there
2368 was already a config.sh file). Type 'Configure -h' for a list of options.
2369 You may also start interactively and then answer '& -d' at any prompt to turn
2370 on the non-interactive behaviour for the remainder of the execution.
2371
2372 EOH
2373         . ./myread
2374         cat <<EOH
2375
2376 Much effort has been expended to ensure that this shell script will run on any
2377 Unix system.  If despite that it blows up on yours, your best bet is to edit
2378 Configure and run it again.  If you can't run Configure for some reason,
2379 you'll have to generate a config.sh file by hand.  Whatever problems you
2380 have, let me (perlbug@perl.org) know how I blew it.
2381
2382 This installation script affects things in two ways:
2383
2384 1) it may do direct variable substitutions on some of the files included
2385    in this kit.
2386 2) it builds a config.h file for inclusion in C programs.  You may edit
2387    any of these files as the need arises after running this script.
2388
2389 If you make a mistake on a question, there is no easy way to back up to it
2390 currently.  The easiest thing to do is to edit config.sh and rerun all the SH
2391 files.  Configure will offer to let you do this before it runs the SH files.
2392
2393 EOH
2394         dflt='Type carriage return to continue'
2395         . ./myread
2396         case "$firsttime" in
2397         true) echo $user >>../.config/instruct;;
2398         esac
2399 fi
2400
2401 : Set 'sysroot' to change the logical root directory to your headers and libraries see man gcc
2402 : This is primarily meant for cross-compile environments, and may fail to be useful in other cases
2403 if test "X$sysroot" = X; then
2404     sysroot=""
2405 else
2406     case "$cc" in
2407         *gcc*|*g++*)
2408             echo "Using $sysroot to find your headers and libraries, adding to ccflags"
2409             # _sysroot is used in places where we need --sysroot=foo
2410             # but using the rest of the flags could cause issues.
2411             _sysroot="--sysroot=$sysroot";
2412             case "$ccflags" in
2413                 *sysroot*) ;;
2414                 'undef'|*)
2415                 ccflags="$ccflags $_sysroot"
2416             esac
2417             case "$ldflags" in
2418                 *sysroot*) ;;
2419                 'undef'|*)
2420                 ldflags="$ldflags $_sysroot"
2421             esac
2422             case "$cppflags" in
2423                 *sysroot*) ;;
2424                 'undef'|*)
2425                 cppflags="$cppflags $_sysroot"
2426             esac
2427             # lddlflags updated below in lddlflags section;
2428             # same with cccdlflags
2429             ;;
2430     esac
2431
2432     # Adjust some defaults to also use $sysroot
2433     for var in xlibpth loclibpth locincpth glibpth; do
2434         eval xxx=\$$var
2435         eval $var=''
2436         for path in $xxx; do
2437             eval $var=\"\$$var $sysroot$path\"
2438         done
2439     done
2440
2441 fi
2442
2443 : find out where common programs are
2444 echo " "
2445 echo "Locating common programs..." >&4
2446 cat <<EOSC >loc
2447 $startsh
2448 case \$# in
2449 0) exit 1;;
2450 esac
2451 thing=\$1
2452 shift
2453 dflt=\$1
2454 shift
2455 for dir in \$*; do
2456         case "\$thing" in
2457         .)
2458         if test -d \$dir/\$thing; then
2459                 echo \$dir
2460                 exit 0
2461         fi
2462         ;;
2463         *)
2464         for thisthing in \$dir/\$thing; do
2465                 : just loop through to pick last item
2466         done
2467         if test -f \$thisthing; then
2468                 echo \$thisthing
2469                 exit 0
2470         elif test "X$_exe" != X -a -f \$thisthing$_exe; then
2471                 echo \$thisthing
2472                 exit 0
2473         elif test -f \$dir/\$thing.exe; then
2474                 if test -n "$DJGPP"; then
2475                         echo \$dir/\$thing.exe
2476                 elif test "$eunicefix" != ":"; then
2477                         : on Eunice apparently
2478                         echo \$dir/\$thing
2479                 fi
2480                 exit 0
2481         fi
2482         ;;
2483         esac
2484 done
2485 echo \$dflt
2486 exit 1
2487 EOSC
2488 chmod +x loc
2489 $eunicefix loc
2490 loclist="
2491 awk
2492 cat
2493 chmod
2494 comm
2495 cp
2496 echo
2497 expr
2498 grep
2499 ls
2500 mkdir
2501 rm
2502 sed
2503 sort
2504 touch
2505 tr
2506 uniq
2507 "
2508 trylist="
2509 ar
2510 bison
2511 byacc
2512 cpp
2513 csh
2514 date
2515 egrep
2516 gmake
2517 gzip
2518 less
2519 ln
2520 make
2521 more
2522 nm
2523 nroff
2524 perl
2525 pg
2526 test
2527 uname
2528 zip
2529 "
2530 pth=`echo $PATH | sed -e "s/$p_/ /g"`
2531 pth="$pth $sysroot/lib $sysroot/usr/lib"
2532 for file in $loclist; do
2533         eval xxx=\$$file
2534         case "$xxx" in
2535         /*|?:[\\/]*)
2536                 if test -f "$xxx"; then
2537                         : ok
2538                 else
2539                         echo "WARNING: no $xxx -- ignoring your setting for $file." >&4
2540                         xxx=`./loc $file $file $pth`
2541                 fi
2542                 ;;
2543         '') xxx=`./loc $file $file $pth`;;
2544         *) xxx=`./loc $xxx $xxx $pth`;;
2545         esac
2546         eval $file=$xxx$_exe
2547         eval _$file=$xxx
2548         case "$xxx" in
2549         /*)
2550                 echo $file is in $xxx.
2551                 ;;
2552         ?:[\\/]*)
2553                 echo $file is in $xxx.
2554                 ;;
2555         *)
2556                 echo "I don't know where '$file' is, and my life depends on it." >&4
2557                 echo "Go find a public domain implementation or fix your PATH setting!" >&4
2558                 exit 1
2559                 ;;
2560         esac
2561 done
2562 echo " "
2563 echo "Don't worry if any of the following aren't found..."
2564 say=offhand
2565 for file in $trylist; do
2566         eval xxx=\$$file
2567         case "$xxx" in
2568         /*|?:[\\/]*)
2569                 if test -f "$xxx"; then
2570                         : ok
2571                 else
2572                         echo "WARNING: no $xxx -- ignoring your setting for $file." >&4
2573                         xxx=`./loc $file $file $pth`
2574                 fi
2575                 ;;
2576         '') xxx=`./loc $file $file $pth`;;
2577         *) xxx=`./loc $xxx $xxx $pth`;;
2578         esac
2579         eval $file=$xxx$_exe
2580         eval _$file=$xxx
2581         case "$xxx" in
2582         /*)
2583                 echo $file is in $xxx.
2584                 ;;
2585         ?:[\\/]*)
2586                 echo $file is in $xxx.
2587                 ;;
2588         *)
2589                 echo "I don't see $file out there, $say."
2590                 say=either
2591                 ;;
2592         esac
2593 done
2594 case "$egrep" in
2595 egrep)
2596         echo "Substituting grep for egrep."
2597         egrep=$grep
2598         _egrep=$grep
2599         ;;
2600 esac
2601 case "$less" in
2602 '')     ;;
2603 *)      if $less -R </dev/null >/dev/null 2>&1; then
2604                echo "Substituting less -R for less."
2605                less="$less -R"
2606                _less=$less
2607         fi
2608         ;;
2609 esac
2610 case "$ln" in
2611 ln)
2612         echo "Substituting cp for ln."
2613         ln=$cp
2614         _ln=$cp
2615         ;;
2616 esac
2617 case "$make" in
2618 make)
2619         case "$gmake" in
2620         gmake)
2621         echo "I can't find make or gmake, and my life depends on it." >&4
2622         echo "Go find a public domain implementation or fix your PATH setting!" >&4
2623         exit 1
2624         ;;
2625         esac
2626         ;;
2627 esac
2628 case "$gmake" in
2629 gmake)  ;;
2630 *)      # We can't have osname yet.
2631         if test -f "/system/gnu_library/bin/ar.pm"; then # Stratus VOS
2632                 # Assume that gmake, if found, is definitely GNU make
2633                 # and prefer it over the system make.
2634                 echo "Substituting gmake for make."
2635                 make=$gmake
2636                 _make=$gmake
2637         fi
2638         ;;
2639 esac
2640 case "$test" in
2641 test)
2642         echo "Hopefully test is built into your sh."
2643         ;;
2644 *)
2645         if `sh -c "PATH= test true" >/dev/null 2>&1`; then
2646                 echo "Using the test built into your sh."
2647                 test=test
2648                 _test=test
2649         fi
2650         ;;
2651 esac
2652 case "$echo" in
2653 echo)
2654         echo "Hopefully echo is built into your sh."
2655         ;;
2656 '') ;;
2657 *)
2658         echo " "
2659 echo "Checking compatibility between $echo and builtin echo (if any)..." >&4
2660         $echo $n "hi there$c" >foo1
2661         echo $n "hi there$c" >foo2
2662         if cmp foo1 foo2 >/dev/null 2>&1; then
2663                 echo "They are compatible.  In fact, they may be identical."
2664         else
2665                 case "$n" in
2666                 '-n') n='' c='\c';;
2667                 *) n='-n' c='';;
2668                 esac
2669                 cat <<FOO
2670 They are not compatible!  You are probably running ksh on a non-USG system.
2671 I'll have to use $echo instead of the builtin, since Bourne shell doesn't
2672 have echo built in and we may have to run some Bourne shell scripts.  That
2673 means I'll have to use '$n$c' to suppress newlines now.  Life is ridiculous.
2674
2675 FOO
2676                 $echo $n "The star should be here-->$c"
2677                 $echo "*"
2678         fi
2679         $rm -f foo1 foo2
2680         ;;
2681 esac
2682
2683 # This question was auctioned at YAPC::Europe-2007 in Vienna
2684 # I never promised you could answer it. I only auctioned the question.
2685 cat <<FOO
2686 The following message is sponsored by
2687
2688   Dresden.pm<--The stars should be here.
2689
2690 Dear Perl user, system administrator or package
2691 maintainer, the Perl community sends greetings to
2692 you. Do you (emblematical) greet back [Y/n]? n
2693
2694 FOO
2695
2696 : Check what type of C compiler we use
2697 cat <<EOS >trygcc
2698 $startsh
2699 EOS
2700 cat <<'EOSC' >>trygcc
2701 case "$cc" in
2702 '') ;;
2703 *)  $rm -f try try.*
2704     $cat >try.c <<EOM
2705 int main(int argc, char *argv[]) {
2706   return 0;
2707 }
2708 EOM
2709     if $cc -o try $ccflags $ldflags try.c; then
2710        :
2711     else
2712         echo "Uh-oh, the C compiler '$cc' doesn't seem to be working." >&4
2713         despair=yes
2714         trygcc=yes
2715         case "$cc" in
2716         *gcc*) trygcc=no ;;
2717         esac
2718         # Skip this test because it gives a false match on output like:
2719         #    ./trygcc: line 23: cc: command not found
2720         # case "`$cc -v -c try.c 2>&1`" in
2721         # *gcc*) trygcc=no ;;
2722         # esac
2723         if $test X"$trygcc" = Xyes; then
2724             if gcc -o try -c try.c; then
2725                 echo " "
2726                 echo "You seem to have a working gcc, though." >&4
2727                 # Switching compilers may undo the work of hints files.
2728                 # The most common problem is -D_REENTRANT for threads.
2729                 # This heuristic catches that case, but gets false positives
2730                 # if -Dusethreads was not actually specified.  Better to
2731                 # bail out here with a useful message than fail
2732                 # mysteriously later. Should we perhaps just try to
2733                 # re-invoke Configure -Dcc=gcc config_args ?
2734                 if $test -f usethreads.cbu; then
2735                         $cat >&4 <<EOM
2736
2737 *** However, any setting of the C compiler flags (e.g. for thread support)
2738 *** will be lost.  It may be necessary for you to restart Configure and
2739 *** add -Dcc=gcc to your Configure command line.
2740
2741 EOM
2742                         rp="Would you like to go ahead and try gcc anyway?"
2743                         dflt=n
2744                 else
2745                         rp="Would you like to use it?"
2746                         dflt=y
2747                 fi
2748                 if $test -f myread; then
2749                     . ./myread
2750                 else
2751                     if $test -f UU/myread; then
2752                         . ./UU/myread
2753                     else
2754                         echo "Cannot find myread, sorry.  Aborting." >&2
2755                         exit 1
2756                     fi
2757                 fi
2758                 case "$ans" in
2759                 [yY]*) cc=gcc; ccname=gcc; ccflags=''; despair=no;
2760                 esac
2761             fi
2762         fi
2763     fi
2764     $rm -f try try.*
2765     ;;
2766 esac
2767 EOSC
2768
2769 cat <<EOS >checkcc
2770 $startsh
2771 EOS
2772 cat <<'EOSC' >>checkcc
2773 case "$cc" in
2774 '') ;;
2775 *)  $rm -f try try.*
2776     $cat >try.c <<EOM
2777 int main(int argc, char *argv[]) {
2778   return 0;
2779 }
2780 EOM
2781     if $cc -o try $ccflags $ldflags try.c; then
2782        :
2783     else
2784         if $test X"$despair" = Xyes; then
2785            echo "Uh-oh, the C compiler '$cc' doesn't seem to be working." >&4
2786         fi
2787         $cat >&4 <<EOM
2788 You need to find a working C compiler.
2789 Either (purchase and) install the C compiler supplied by your OS vendor,
2790 or for a free C compiler try http://gcc.gnu.org/
2791 I cannot continue any further, aborting.
2792 EOM
2793         exit 1
2794     fi
2795     $rm -f try try.*
2796     ;;
2797 esac
2798 EOSC
2799
2800 : determine whether symbolic links are supported
2801 echo " "
2802 $touch blurfl
2803 if $ln -s blurfl sym > /dev/null 2>&1 ; then
2804         echo "Symbolic links are supported." >&4
2805         lns="$ln -s"
2806 else
2807         echo "Symbolic links are NOT supported." >&4
2808         lns="$ln"
2809 fi
2810 $rm -f blurfl sym
2811
2812 : determine whether symbolic links are supported
2813 echo " "
2814 case "$lns" in
2815 *"ln"*" -s")
2816         echo "Checking how to test for symbolic links..." >&4
2817         $lns blurfl sym
2818         if $test "X$issymlink" = X; then
2819                 case "$newsh" in
2820                 '') sh     -c "PATH= test -h sym" >/dev/null 2>&1 ;;
2821                 *)  $newsh -c "PATH= test -h sym" >/dev/null 2>&1 ;;
2822                 esac
2823                 if test $? = 0; then
2824                         issymlink="test -h"
2825                 else
2826                         echo "Your builtin 'test -h' may be broken." >&4
2827                         case "$test" in
2828                         /*)     ;;
2829                         *)      pth=`echo $PATH | sed -e "s/$p_/ /g"`
2830                                 for p in $pth
2831                                 do
2832                                         if test -f "$p/$test"; then
2833                                                 test="$p/$test"
2834                                                 break
2835                                         fi
2836                                 done
2837                                 ;;
2838                         esac
2839                         case "$test" in
2840                         /*)
2841                                 echo "Trying external '$test -h'." >&4
2842                                 issymlink="$test -h"
2843                                 if $test ! -h sym >/dev/null 2>&1; then
2844                                         echo "External '$test -h' is broken, too." >&4
2845                                         issymlink=''
2846                                 fi
2847                                 ;;
2848                         *)      issymlink='' ;;
2849                         esac
2850                 fi
2851         fi
2852         if $test "X$issymlink" = X; then
2853                 if $test -L sym 2>/dev/null; then
2854                         issymlink="$test -L"
2855                         echo "The builtin '$test -L' worked." >&4
2856                 fi
2857         fi
2858         if $test "X$issymlink" != X; then
2859                 echo "You can test for symbolic links with '$issymlink'." >&4
2860         else
2861                 echo "I do not know how you can test for symbolic links." >&4
2862         fi
2863         $rm -f blurfl sym
2864         ;;
2865 *)      echo "No symbolic links, so not testing for their testing..." >&4
2866         ;;
2867 esac
2868 echo " "
2869
2870 : Make symlinks util
2871 case "$mksymlinks" in
2872 $define|true|[yY]*)
2873         case "$src" in
2874         ''|'.') echo "Cannot create symlinks in the original directory." >&4
2875                 exit 1
2876                 ;;
2877         *)      case "$lns:$issymlink" in
2878                 *"ln"*" -s:"*"test -"?)
2879                         echo "Creating the symbolic links..." >&4
2880                         cd ..
2881                         awk '{print $1}' $src/MANIFEST | sed -e 's:/\([^/]*\)$: \1:' |
2882                         awk 'NF == 1 {
2883                                 dir=".";
2884                                 file=$1 "";
2885                              }
2886                              NF == 2 {
2887                                 dir=$1 "";
2888                                 file=$2 "";
2889                              }
2890                              {
2891                                  print "# dir = ", dir, "file = ", file
2892                                  mf[dir] = mf[dir]" "source"/"dir"/"file;
2893                              } END {
2894                                  for (d in mf) {
2895                                      if (d != ".") { print("mkdir -p "d) }
2896                                      print("ln -sf "mf[d]" "d);
2897                                  }
2898                              }' source="$src" > UU/mksymlinks.$$
2899                         sh UU/mksymlinks.$$
2900                         rm UU/mksymlinks.$$
2901                         # Sanity check 1.
2902                         if test ! -d t/base; then
2903                                 echo "Failed to create the subdirectories.  Aborting." >&4
2904                                 exit 1
2905                         fi
2906                         # Sanity check 2.
2907                         if test ! -f t/base/lex.t; then
2908                                 echo "Failed to create the symlinks (t/base/lex.t missing).  Aborting." >&4
2909                                 exit 1
2910                         fi
2911                         if test ! -f win32/win32.c; then
2912                                 echo "Failed to create the symlinks (win32/win32.c missing).  Aborting." >&4
2913                                 exit 1
2914                         fi
2915                         cd UU
2916                         ;;
2917                 *)      echo "(I cannot figure out how to do symbolic links, ignoring mksymlinks)." >&4
2918                         ;;
2919                 esac
2920                 ;;
2921         esac
2922         ;;
2923 esac
2924
2925 : Check for Cross-Compilation
2926 if $test "X$targethost" = "X"; then
2927     targethost=""
2928 fi
2929 if $test "X$targetenv" = "X"; then
2930     targetenv=""
2931 fi
2932 case "$usecrosscompile" in
2933 $define|true|[yY]*)
2934         $echo "Cross-compiling..."
2935         croak=''
2936         case "$cc" in
2937         *-gcc*|*-g++*) # A cross-compiling gcc, probably.
2938             # arm-linux-androideabi-gcc  -> arm-linux-androideabi
2939             # x86_64-w64-mingw32-gcc.exe -> x86_64-w64-mingw32
2940             targetarch=`$echo $cc|$sed 's/-g[c\+][c\+].*$//'`
2941             ar=`$echo $cc|$sed 's/-g[c\+][c\+]/-ar/'`
2942             # leave out ld, choosing it is more complex
2943             nm=`$echo $cc|$sed 's/-g[c\+][c\+]/-nm/'`
2944             ranlib=`$echo $cc|$sed 's/-g[c\+][c\+]/-ranlib/'`
2945             # We are in a weird spot. Just before us, some values
2946             # were 'saved', to be restored after the hints are
2947             # run.  This means that the changes we made to ar,
2948             # nm and ranlib will get reverted.
2949             # To avoid that, we hijack the saving mechanism and
2950             # have it save our new values.
2951             for file in ar nm ranlib; do
2952                 eval xxx=\$$file
2953                 eval $file=$xxx$_exe
2954                 eval _$file=$xxx
2955             done
2956         ;;
2957         esac
2958         case "$targetarch" in
2959         '') echo "Targetarch not defined." >&4; croak=y ;;
2960         *)  echo "Using targetarch $targetarch." >&4 ;;
2961         esac
2962         case "$targethost" in
2963         '') echo "Targethost not defined." >&4; croak=y ;;
2964         *)  echo "Using targethost $targethost." >&4
2965         esac
2966         locincpth=' '
2967         loclibpth=' '
2968         case "$croak" in
2969         y) echo "Cannot continue, aborting." >&4; exit 1 ;;
2970         esac
2971     : compile a host miniperl and generate_uudmap, unless we got passed them
2972     if $test "X$hostperl" = X; then
2973       echo "Building host miniperl and generate_uudmap binaries" >&4
2974       before_host=`pwd`
2975       cd ..
2976       cd $src
2977       src=`pwd`
2978       rm -rf $src/host
2979       mkdir $src/host
2980       cd $src/host
2981       $src/Configure -des -Dusedevel -Dmksymlinks
2982       $make miniperl
2983       case "$hostgenerate" in
2984       '') $make generate_uudmap
2985           hostgenerate=$src/host/generate_uudmap
2986           ;;
2987        "$undef") hostgenerate=''
2988           ;;
2989       esac
2990       hostperl=$src/host/miniperl
2991       cd $before_host
2992     fi
2993     hostosname=`$hostperl -le 'print $^O'`
2994     ;;
2995 *)
2996     usecrosscompile="$undef"
2997     ;;
2998 esac
2999
3000 : Define -Dtargethost=somecomputer to run compiled tests on another machine
3001 case "$targethost" in
3002     '') echo "Checking for cross-compile" >&4
3003     case "$usecrosscompile$multiarch" in
3004        *$define*) echo "Skipping the try tests in the rest of Configure as no targethost was defined when cross-compiling" >&4
3005          if [ -f Makefile ]; then
3006            echo " "
3007            echo "Now you must ensure config.sh, config.h and the generated headers exist and run a $make."
3008          else
3009            echo "Configure done."
3010          fi
3011        exit 0
3012        ;;
3013      *) echo "No targethost for running compiler tests against defined, running locally" >&4
3014         run=''
3015         to=:
3016         from=:
3017         ;;
3018     esac
3019     ;;
3020     *) echo "Using targethost $targethost." >&4
3021         case "$src" in
3022         /*) run=$src/Cross/run
3023             targetmkdir=$src/Cross/mkdir
3024             to=$src/Cross/to
3025             from=$src/Cross/from
3026             ;;
3027         *)  pwd=`$test -f ../Configure & cd ..; pwd`
3028             run=$pwd/Cross/run
3029             targetmkdir=$pwd/Cross/mkdir
3030             to=$pwd/Cross/to
3031             from=$pwd/Cross/from
3032             ;;
3033         esac
3034         case "$targetrun" in
3035         '') targetrun=ssh ;;
3036         esac
3037         case "$targetto" in
3038         '') targetto=scp ;;
3039         esac
3040         case "$targetfrom" in
3041         '') targetfrom=scp ;;
3042         esac
3043         run=$run-$targetrun
3044         to=$to-$targetto
3045         from=$from-$targetfrom
3046         case "$targetdir" in
3047         '')  targetdir=/tmp
3048              echo "Guessing targetdir $targetdir." >&4
3049              ;;
3050         esac
3051         case "$targetuser" in
3052         '')  targetuser=root
3053              echo "Guessing targetuser $targetuser." >&4
3054              ;;
3055         esac
3056         case "$targetport" in
3057         '')  targetport=22
3058              echo "Guessing targetport $targetport." >&4
3059              ;;
3060         esac
3061         case "$targetfrom" in
3062         scp)    q=-q ;;
3063         *)      q='' ;;
3064         esac
3065         case "$targetrun" in
3066         ssh|rsh)
3067             cat >$run <<EOF
3068 #!/bin/sh
3069 env=''
3070 case "\$1" in
3071 -cwd)
3072   shift
3073   cwd=\$1
3074   shift
3075   ;;
3076 esac
3077 case "\$1" in
3078 -env)
3079   shift
3080   env=\$1
3081   shift
3082   ;;
3083 esac
3084 case "\$cwd" in
3085 '') cwd=$targetdir ;;
3086 esac
3087 exe=\$1
3088 shift
3089 $to \$exe
3090 $targetrun -p $targetport -l $targetuser $targethost "cd \$cwd && \$env \$exe \$@"
3091 EOF
3092             ;;
3093         adb)
3094             $touch $run
3095             ;;
3096         *)  echo "Unknown targetrun '$targetrun'" >&4
3097             exit 1
3098             ;;
3099         esac
3100         case "$targetmkdir" in
3101         */Cross/mkdir)
3102             cat >$targetmkdir <<EOF
3103 #!/bin/sh
3104 $targetrun -p $targetport -l $targetuser $targethost "mkdir -p \$@"
3105 EOF
3106             $chmod a+rx $targetmkdir
3107             ;;
3108         *)  echo "Unknown targetmkdir '$targetmkdir'" >&4
3109             exit 1
3110             ;;
3111         esac
3112         case "$targetto" in
3113         scp|rcp)
3114             cat >$to <<EOF
3115 #!/bin/sh
3116 for f in \$@
3117 do
3118   case "\$f" in
3119   /*)
3120     $targetmkdir \`dirname \$f\`
3121     $targetto -P $targetport -r $q \$f $targetuser@$targethost:\$f           2>/dev/null  || exit 1
3122     ;;
3123   *)
3124     $targetmkdir $targetdir/\`dirname \$f\`
3125     $targetto -P $targetport -r $q \$f $targetuser@$targethost:$targetdir/\$f 2>/dev/null || exit 1
3126     ;;
3127   esac
3128 done
3129 exit 0
3130 EOF
3131             ;;
3132         cp) cat >$to <<EOF
3133 #!/bin/sh
3134 for f in \$@
3135 do
3136   case "\$f" in
3137   /*)
3138     $mkdir -p $targetdir/\`dirname \$f\`
3139     $cp \$f $targetdir/\$f || exit 1
3140     ;;
3141   *)
3142     $targetmkdir $targetdir/\`dirname \$f\`
3143     $cp \$f $targetdir/\$f || exit 1
3144     ;;
3145   esac
3146 done
3147 exit 0
3148 EOF
3149             ;;
3150         *)  echo "Unknown targetto '$targetto'" >&4
3151             exit 1
3152             ;;
3153         esac
3154         case "$targetfrom" in
3155         scp|rcp)
3156           cat >$from <<EOF
3157 #!/bin/sh
3158 for f in \$@
3159 do
3160   $rm -f \$f
3161   $targetfrom -P $targetport $q $targetuser@$targethost:$targetdir/\$f . || exit 1
3162 done
3163 exit 0
3164 EOF
3165             ;;
3166         cp) cat >$from <<EOF
3167 #!/bin/sh
3168 for f in \$@
3169 do
3170   $rm -f \$f
3171   cp $targetdir/\$f . || exit 1
3172 done
3173 exit 0
3174 EOF
3175             ;;
3176         *)  echo "Unknown targetfrom '$targetfrom'" >&4
3177             exit 1
3178             ;;
3179         esac
3180         if $test ! -f $run; then
3181             echo "Target 'run' script '$run' not found." >&4
3182         else
3183             $chmod a+rx $run
3184         fi
3185         if $test ! -f $to; then
3186             echo "Target 'to' script '$to' not found." >&4
3187         else
3188             $chmod a+rx $to
3189         fi
3190         if $test ! -f $from; then
3191             echo "Target 'from' script '$from' not found." >&4
3192         else
3193             $chmod a+rx $from
3194         fi
3195         if $test ! -f $run -o ! -f $to -o ! -f $from; then
3196             exit 1
3197         fi
3198         cat >&4 <<EOF
3199 Using '$run' for remote execution,
3200 and '$from' and '$to'
3201 for remote file transfer.
3202 EOF
3203         ;;
3204 *)      run=''
3205         to=:
3206         from=:
3207         usecrosscompile="$undef"
3208         targetarch=''
3209         ;;
3210 esac
3211
3212 : see whether [:lower:] and [:upper:] are supported character classes
3213 echo " "
3214 case "`echo AbyZ | $tr '[:lower:]' '[:upper:]' 2>/dev/null`"-"`echo AbyZ | $tr '[:upper:]' '[:lower:]' 2>/dev/null`" in
3215 ABYZ-abyz)
3216         echo "Good, your tr supports [:lower:] and [:upper:] to convert case." >&4
3217         up='[:upper:]'
3218         low='[:lower:]'
3219         ;;
3220 *)      # There is a discontinuity in EBCDIC between 'R' and 'S'
3221         # (0xd9 and 0xe2), therefore that is a nice testing point.
3222         if test "X$up" = X -o "X$low" = X; then
3223             case "`echo RS | $tr '[R-S]' '[r-s]' 2>/dev/null`" in
3224             rs) up='[A-Z]'
3225                 low='[a-z]'
3226                 ;;
3227             esac
3228         fi
3229         if test "X$up" = X -o "X$low" = X; then
3230             case "`echo RS | $tr R-S r-s 2>/dev/null`" in
3231             rs) up='A-Z'
3232                 low='a-z'
3233                 ;;
3234             esac
3235         fi
3236         if test "X$up" = X -o "X$low" = X; then
3237             case "`echo RS | od -x 2>/dev/null`" in
3238             *D9E2*|*d9e2*)
3239                 echo "Hey, this might be EBCDIC." >&4
3240                 if test "X$up" = X -o "X$low" = X; then
3241                     case "`echo RS | $tr '[A-IJ-RS-Z]' '[a-ij-rs-z]' 2>/dev/null`" in
3242                     rs) up='[A-IJ-RS-Z]'
3243                         low='[a-ij-rs-z]'
3244                         ;;
3245                     esac
3246                 fi
3247                 if test "X$up" = X -o "X$low" = X; then
3248                     case "`echo RS | $tr A-IJ-RS-Z a-ij-rs-z 2>/dev/null`" in
3249                     rs) up='A-IJ-RS-Z'
3250                         low='a-ij-rs-z'
3251                         ;;
3252                     esac
3253                 fi
3254                 ;;
3255             esac
3256         fi
3257 esac
3258 case "`echo RS | $tr \"$up\" \"$low\" 2>/dev/null`" in
3259 rs)
3260     echo "Using $up and $low to convert case." >&4
3261     ;;
3262 *)
3263     echo "I don't know how to translate letters from upper to lower case." >&4
3264     echo "Your tr is not acting any way I know of." >&4
3265     exit 1
3266     ;;
3267 esac
3268 : set up the translation script tr, must be called with ./tr of course
3269 cat >tr <<EOSC
3270 $startsh
3271 case "\$1\$2" in
3272 '[A-Z][a-z]') exec $tr '$up' '$low';;
3273 '[a-z][A-Z]') exec $tr '$low' '$up';;
3274 esac
3275 exec $tr "\$@"
3276 EOSC
3277 chmod +x tr
3278 $eunicefix tr
3279
3280 : Try to determine whether config.sh was made on this system
3281 case "$config_sh" in
3282 '')
3283 myuname=`$uname -a 2>/dev/null`
3284 $test -z "$myuname" && myuname=`hostname 2>/dev/null`
3285 # Downcase everything to avoid ambiguity.
3286 # Remove slashes and single quotes so we can use parts of this in
3287 # directory and file names.
3288 # Remove newlines so myuname is sane to use elsewhere.
3289 # tr '[A-Z]' '[a-z]' would not work in EBCDIC
3290 # because the A-Z/a-z are not consecutive.
3291 myuname=`echo $myuname | $sed -e "s,['/],,g" | \
3292         ./tr '[A-Z]' '[a-z]' | $tr $trnl ' '`
3293 newmyuname="$myuname"
3294 dflt=n
3295 case "$knowitall" in
3296 '')
3297         if test -f ../config.sh; then
3298                 if $contains myuname= ../config.sh >/dev/null 2>&1; then
3299                         eval "`grep myuname= ../config.sh`"
3300                 fi
3301                 if test "X$myuname" = "X$newmyuname"; then
3302                         dflt=y
3303                 fi
3304         fi
3305         ;;
3306 *) dflt=y;;
3307 esac
3308
3309 : Get old answers from old config file if Configure was run on the
3310 : same system, otherwise use the hints.
3311 hint=default
3312 cd ..
3313 if test -f config.sh; then
3314         echo " "
3315         rp="I see a config.sh file.  Shall I use it to set the defaults?"
3316         . UU/myread
3317         case "$ans" in
3318         n*|N*) echo "OK, I'll ignore it."
3319                 mv config.sh config.sh.old
3320                 myuname="$newmyuname"
3321                 ;;
3322         *)  echo "Fetching default answers from your old config.sh file..." >&4
3323                 tmp_n="$n"
3324                 tmp_c="$c"
3325                 tmp_sh="$sh"
3326                 . ./config.sh
3327                 cp config.sh UU
3328                 n="$tmp_n"
3329                 c="$tmp_c"
3330                 : Older versions did not always set $sh.  Catch re-use of such
3331                 : an old config.sh.
3332                 case "$sh" in
3333                 '') sh="$tmp_sh" ;;
3334                 esac
3335                 hint=previous
3336                 ;;
3337         esac
3338 fi
3339 . ./UU/checkcc
3340 if test ! -f config.sh; then
3341         $cat <<EOM
3342
3343 First time through, eh?  I have some defaults handy for some systems
3344 that need some extra help getting the Configure answers right:
3345
3346 EOM
3347         (cd $src/hints; ls -C *.sh) | $sed 's/\.sh/   /g' >&4
3348         dflt=''
3349         : Half the following guesses are probably wrong... If you have better
3350         : tests or hints, please send them to perlbug@perl.org
3351         : The metaconfig authors would also appreciate a copy...
3352         $test -f /irix && osname=irix
3353         $test -f /xenix && osname=sco_xenix
3354         $test -f /dynix && osname=dynix
3355         $test -f /dnix && osname=dnix
3356         $test -f /lynx.os && osname=lynxos
3357         $test -f /unicos && osname=unicos && osvers=`$uname -r`
3358         $test -f /unicosmk && osname=unicosmk && osvers=`$uname -r`
3359         $test -f /unicosmk.ar && osname=unicosmk && osvers=`$uname -r`
3360         $test -f /bin/mips && /bin/mips && osname=mips
3361         $test -d /usr/apollo/bin && osname=apollo
3362         $test -f /etc/saf/_sactab && osname=svr4
3363         $test -d /usr/include/minix && osname=minix && osvers=`$uname -r`
3364         $test -f /system/gnu_library/bin/ar.pm && osname=vos
3365         $test -f /sys/utilities/MultiView && osname=amigaos
3366         if $test -d /MachTen -o -d /MachTen_Folder; then
3367                 osname=machten
3368                 if $test -x /sbin/version; then
3369                         osvers=`/sbin/version | $awk '{print $2}' |
3370                         $sed -e 's/[A-Za-z]$//'`
3371                 elif $test -x /usr/etc/version; then
3372                         osvers=`/usr/etc/version | $awk '{print $2}' |
3373                         $sed -e 's/[A-Za-z]$//'`
3374                 else
3375                         osvers="$2.$3"
3376                 fi
3377         fi
3378
3379         $test -f /sys/posix.dll &&
3380                 $test -f /usr/bin/what &&
3381                 set X `/usr/bin/what /sys/posix.dll` &&
3382                 $test "$3" = UWIN &&
3383                 osname=uwin &&
3384                 osvers="$5"
3385
3386         if $test -f $uname; then
3387                 set X $myuname
3388                 shift
3389
3390                 case "$5" in
3391                 fps*) osname=fps ;;
3392                 mips*)
3393                         case "$4" in
3394                         umips) osname=umips ;;
3395                         *) osname=mips ;;
3396                         esac;;
3397                 [23]100) osname=mips ;;
3398                 i386*)
3399                         tmp=`/bin/uname -X 2>/dev/null|awk '/3\.2v[45]/{ print $(NF) }'`
3400                         if $test "$tmp" != "" -a "$3" = "3.2" -a -f '/etc/systemid'; then
3401                                 osname='sco'
3402                                 osvers=$tmp
3403                         elif $test -f /etc/kconfig; then
3404                                 osname=isc
3405                                 if test "$lns" = "$ln -s"; then
3406                                         osvers=4
3407                                 elif $contains _SYSV3 /usr/include/stdio.h > /dev/null 2>&1 ; then
3408                                         osvers=3
3409                                 elif $contains _POSIX_SOURCE /usr/include/stdio.h > /dev/null 2>&1 ; then
3410                                         osvers=2
3411                                 fi
3412                         fi
3413                         tmp=''
3414                         ;;
3415                 pc*)
3416                         if test -n "$DJGPP"; then
3417                                 osname=dos
3418                                 osvers=djgpp
3419                         fi
3420                         ;;
3421                 esac
3422
3423                 case "$1" in
3424                 aix) osname=aix
3425                         tmp=`( (oslevel) 2>/dev/null || echo "not found") 2>&1`
3426                         case "$tmp" in
3427                         # oslevel can fail with:
3428                         # oslevel: Unable to acquire lock.
3429                         *not\ found) osvers="$4"."$3" ;;
3430                         '<3240'|'<>3240') osvers=3.2.0 ;;
3431                         '=3240'|'>3240'|'<3250'|'<>3250') osvers=3.2.4 ;;
3432                         '=3250'|'>3250') osvers=3.2.5 ;;
3433                         *) osvers=$tmp;;
3434                         esac
3435                         ;;
3436                 bitrig) osname=bitrig
3437                         osvers="$3"
3438                         ;;
3439                 bsd386) osname=bsd386
3440                         osvers=`$uname -r`
3441                         ;;
3442                 cygwin*) osname=cygwin
3443                         osvers="$3"
3444                         ;;
3445                 *dc.osx) osname=dcosx
3446                         osvers="$3"
3447                         ;;
3448                 dnix) osname=dnix
3449                         osvers="$3"
3450                         ;;
3451                 domainos) osname=apollo
3452                         osvers="$3"
3453                         ;;
3454                 dgux)   osname=dgux
3455                         osvers="$3"
3456                         ;;
3457                 dragonfly) osname=dragonfly
3458                         osvers="$3"
3459                         ;;
3460                 dynixptx*) osname=dynixptx
3461                         osvers=`echo "$4"|sed 's/^v//'`
3462                         ;;
3463                 freebsd) osname=freebsd
3464                         osvers="$3" ;;
3465                 genix)  osname=genix ;;
3466                 gnu)    osname=gnu
3467                         osvers="$3" ;;
3468                 hp*)    osname=hpux
3469                         osvers=`echo "$3" | $sed 's,.*\.\([0-9]*\.[0-9]*\),\1,'`
3470                         ;;
3471                 irix*)  osname=irix
3472                         case "$3" in
3473                         4*) osvers=4 ;;
3474                         5*) osvers=5 ;;
3475                         *)      osvers="$3" ;;
3476                         esac
3477                         ;;
3478                 linux)  osname=linux
3479                         case "$3" in
3480                         *)      osvers="$3" ;;
3481                         esac
3482                         $test -f /system/lib/libandroid.so && osname=linux-android
3483                         ;;
3484                 MiNT)   osname=mint
3485                         ;;
3486                 netbsd*) osname=netbsd
3487                         osvers="$3"
3488                         ;;
3489                 news-os) osvers="$3"
3490                         case "$3" in
3491                         4*) osname=newsos4 ;;
3492                         *) osname=newsos ;;
3493                         esac
3494                         ;;
3495                 nonstop-ux) osname=nonstopux ;;
3496                 openbsd) osname=openbsd
3497                         osvers="$3"
3498                         ;;
3499                 os2)    osname=os2
3500                         osvers="$4"
3501                         ;;
3502                 POSIX-BC | posix-bc ) osname=posix-bc
3503                         osvers="$3"
3504                         ;;
3505                 powerux | power_ux | powermax_os | powermaxos | \
3506                 powerunix | power_unix) osname=powerux
3507                         osvers="$3"
3508                         ;;
3509                 qnx) osname=qnx
3510                         osvers="$4"
3511                         ;;
3512                 solaris) osname=solaris
3513                         case "$3" in
3514                         5*) osvers=`echo $3 | $sed 's/^5/2/g'` ;;
3515                         *)      osvers="$3" ;;
3516                         esac
3517                         ;;
3518                 sunos) osname=sunos
3519                         case "$3" in
3520                         5*) osname=solaris
3521                                 osvers=`echo $3 | $sed 's/^5/2/g'` ;;
3522                         *)      osvers="$3" ;;
3523                         esac
3524                         ;;
3525                 titanos) osname=titanos
3526                         case "$3" in
3527                         1*) osvers=1 ;;
3528                         2*) osvers=2 ;;
3529                         3*) osvers=3 ;;
3530                         4*) osvers=4 ;;
3531                         *)      osvers="$3" ;;
3532                         esac
3533                         ;;
3534                 ultrix) osname=ultrix
3535                         osvers="$3"
3536                         ;;
3537                 osf1|mls+)      case "$5" in
3538                                 alpha)
3539                                         osname=dec_osf
3540                                         osvers=`sizer -v | awk -FUNIX '{print $2}' | awk '{print $1}' |  tr '[A-Z]' '[a-z]' | sed 's/^[xvt]//'`
3541                                         case "$osvers" in
3542                                         [1-9].[0-9]*) ;;
3543                                         *) osvers=`echo "$3" | sed 's/^[xvt]//'` ;;
3544                                         esac
3545                                         ;;
3546                         hp*)    osname=hp_osf1  ;;
3547                         mips)   osname=mips_osf1 ;;
3548                         esac
3549                         ;;
3550                 # UnixWare 7.1.2 is known as Open UNIX 8
3551                 openunix|unixware) osname=svr5
3552                         osvers="$4"
3553                         ;;
3554                 uts)    osname=uts
3555                         osvers="$3"
3556                         ;;
3557                 vos) osvers="$3"
3558                         ;;
3559                 $2) case "$osname" in
3560                         *isc*) ;;
3561                         *freebsd*) ;;
3562                         svr*)
3563                                 : svr4.x or possibly later
3564                                 case "svr$3" in
3565                                 ${osname}*)
3566                                         osname=svr$3
3567                                         osvers=$4
3568                                         ;;
3569                                 esac
3570                                 case "$osname" in
3571                                 svr4.0)
3572                                         : Check for ESIX
3573                                         if test -f /stand/boot ; then
3574                                                 eval `grep '^INITPROG=[a-z/0-9]*$' /stand/boot`
3575                                                 if test -n "$INITPROG" -a -f "$INITPROG"; then
3576                         isesix=`strings -a $INITPROG|grep 'ESIX SYSTEM V/386 Release 4.0'`
3577                                                         if test -n "$isesix"; then
3578                                                                 osname=esix4
3579                                                         fi
3580                                                 fi
3581                                         fi
3582                                         ;;
3583                                 esac
3584                                 ;;
3585                         *)      if test -f /etc/systemid; then
3586                                         osname=sco
3587                                         set `echo $3 | $sed 's/\./ /g'` $4
3588                                         if $test -f $src/hints/sco_$1_$2_$3.sh; then
3589                                                 osvers=$1.$2.$3
3590                                         elif $test -f $src/hints/sco_$1_$2.sh; then
3591                                                 osvers=$1.$2
3592                                         elif $test -f $src/hints/sco_$1.sh; then
3593                                                 osvers=$1
3594                                         fi
3595                                 else
3596                                         case "$osname" in
3597                                         '') : Still unknown.  Probably a generic Sys V.
3598                                                 osname="sysv"
3599                                                 osvers="$3"
3600                                                 ;;
3601                                         esac
3602                                 fi
3603                                 ;;
3604                         esac
3605                         ;;
3606                 *)      case "$osname" in
3607                         '') : Still unknown.  Probably a generic BSD.
3608                                 osname="$1"
3609                                 osvers="$3"
3610                                 ;;
3611                         esac
3612                         ;;
3613                 esac
3614         else
3615                 if test -f /vmunix -a -f $src/hints/news_os.sh; then
3616                         (what /vmunix | UU/tr '[A-Z]' '[a-z]') > UU/kernel.what 2>&1
3617                         if $contains news-os UU/kernel.what >/dev/null 2>&1; then
3618                                 osname=news_os
3619                         fi
3620                         $rm -f UU/kernel.what
3621                 elif test -d c:/. -o -n "$is_os2" ; then
3622                         set X $myuname
3623                         osname=os2
3624                         osvers="$5"
3625                 fi
3626         fi
3627
3628         case "$targetarch" in
3629         '') ;;
3630         *)  hostarch=$osname
3631             case "$targetarch" in
3632                 nto*|*-nto-*)
3633                     # Will load qnx.sh, which should change osname to nto
3634                     osname=qnx
3635                     osvers=''
3636                     ;;
3637                 *linux-android*)
3638                     # Catch arm-linux-androideabi, mipsel-linux-android,
3639                     # and i686-linux-android
3640                     osname=linux-android
3641                     osvers=''
3642                     ;;
3643                 *linux*)
3644                     # Something like arm-linux-gnueabihf is really just
3645                     # plain linux.
3646                     osname=linux
3647                     osvers=''
3648                     ;;
3649                 *solaris*|*sunos*)
3650                     osname=solaris
3651                     # XXX perhaps we should just assume
3652                     # osvers to be 2, or maybe take the value
3653                     # from targetarch. Using $run before the
3654                     # hints are run is somewhat icky.
3655                     set X `$run $uname -a 2>/dev/null`
3656                     shift
3657                     case "$3" in
3658                         5*) osvers=`echo $3 | $sed 's/^5/2/g'` ;;
3659                         *)  osvers="$3" ;;
3660                     esac
3661                     ;;
3662                 *)
3663                     osname=`echo $targetarch|sed 's,^[^-]*-,,'`
3664                     osvers=''
3665                 ;;
3666             esac
3667             ;;
3668         esac
3669
3670         : Now look for a hint file osname_osvers, unless one has been
3671         : specified already.
3672         case "$hintfile" in
3673         ''|' ')
3674                 file=`echo "${osname}_${osvers}" | $sed -e 's%\.%_%g' -e 's%_$%%'`
3675                 : Also try without trailing minor version numbers.
3676                 xfile=`echo $file | $sed -e 's%_[^_]*$%%'`
3677                 xxfile=`echo $xfile | $sed -e 's%_[^_]*$%%'`
3678                 xxxfile=`echo $xxfile | $sed -e 's%_[^_]*$%%'`
3679                 xxxxfile=`echo $xxxfile | $sed -e 's%_[^_]*$%%'`
3680                 case "$file" in
3681                 '') dflt=none ;;
3682                 *)  case "$osvers" in
3683                         '') dflt=$file
3684                                 ;;
3685                         *)  if $test -f $src/hints/$file.sh ; then
3686                                         dflt=$file
3687                                 elif $test -f $src/hints/$xfile.sh ; then
3688                                         dflt=$xfile
3689                                 elif $test -f $src/hints/$xxfile.sh ; then
3690                                         dflt=$xxfile
3691                                 elif $test -f $src/hints/$xxxfile.sh ; then
3692                                         dflt=$xxxfile
3693                                 elif $test -f $src/hints/$xxxxfile.sh ; then
3694                                         dflt=$xxxxfile
3695                                 elif $test -f "$src/hints/${osname}.sh" ; then
3696                                         dflt="${osname}"
3697                                 else
3698                                         dflt=none
3699                                 fi
3700                                 ;;
3701                         esac
3702                         ;;
3703                 esac
3704                 if $test -f Policy.sh ; then
3705                         case "$dflt" in
3706                         *Policy*) ;;
3707                         none) dflt="Policy" ;;
3708                         *) dflt="Policy $dflt" ;;
3709                         esac
3710                 fi
3711                 ;;
3712         *)
3713                 dflt=`echo $hintfile | $sed 's/\.sh$//'`
3714                 ;;
3715         esac
3716
3717         if $test -f Policy.sh ; then
3718                 $cat <<EOM
3719
3720 There's also a Policy hint file available, which should make the
3721 site-specific (policy) questions easier to answer.
3722 EOM
3723
3724         fi
3725
3726         $cat <<EOM
3727
3728 You may give one or more space-separated answers, or "none" if appropriate.
3729 If you have a handcrafted Policy.sh file or a Policy.sh file generated by a
3730 previous run of Configure, you may specify it as well as or instead of
3731 OS-specific hints.  If hints are provided for your OS, you should use them:
3732 although Perl can probably be built without hints on many platforms, using
3733 hints often improve performance and may enable features that Configure can't
3734 set up on its own. If there are no hints that match your OS, specify "none";
3735 DO NOT give a wrong version or a wrong OS.
3736
3737 EOM
3738
3739         rp="Which of these apply, if any?"
3740         . UU/myread
3741         tans=$ans
3742         for file in $tans; do
3743                 if $test X$file = XPolicy -a -f Policy.sh; then
3744                         . Policy.sh
3745                         $cat Policy.sh >> UU/config.sh
3746                 elif $test -f $src/hints/$file.sh; then
3747                         . $src/hints/$file.sh
3748                         $cat $src/hints/$file.sh >> UU/config.sh
3749                 elif $test X"$tans" = X -o X"$tans" = Xnone ; then
3750                         : nothing
3751                 else
3752                         : Give one chance to correct a possible typo.
3753                         echo "$file.sh does not exist"
3754                         dflt=$file
3755                         rp="hint to use instead?"
3756                         . UU/myread
3757                         for file in $ans; do
3758                                 if $test -f "$src/hints/$file.sh"; then
3759                                         . $src/hints/$file.sh
3760                                         $cat $src/hints/$file.sh >> UU/config.sh
3761                                 elif $test X$ans = X -o X$ans = Xnone ; then
3762                                         : nothing
3763                                 else
3764                                         echo "$file.sh does not exist -- ignored."
3765                                 fi
3766                         done
3767                 fi
3768         done
3769
3770         hint=recommended
3771         : Remember our hint file for later.
3772         if $test -f "$src/hints/$file.sh" ; then
3773                 hintfile="$file"
3774         else
3775                 hintfile=''
3776         fi
3777 fi
3778 cd UU
3779 ;;
3780 *)
3781         echo " "
3782         echo "Fetching default answers from $config_sh..." >&4
3783         tmp_n="$n"
3784         tmp_c="$c"
3785         cd ..
3786         cp $config_sh config.sh 2>/dev/null
3787         chmod +w config.sh
3788         . ./config.sh
3789         cd UU
3790         cp ../config.sh .
3791         n="$tmp_n"
3792         c="$tmp_c"
3793         hint=previous
3794         ;;
3795 esac
3796 test "$override" && . ./optdef.sh
3797
3798 : Restore computed paths
3799 for file in $loclist $trylist; do
3800         eval $file="\$_$file"
3801 done
3802
3803 cat << EOM
3804
3805 Configure uses the operating system name and version to set some defaults.
3806 The default value is probably right if the name rings a bell. Otherwise,
3807 since spelling matters for me, either accept the default or answer "none"
3808 to leave it blank.
3809
3810 EOM
3811 case "$osname" in
3812         ''|' ')
3813                 case "$hintfile" in
3814                 ''|' '|none) dflt=none ;;
3815                 *)  dflt=`echo $hintfile | $sed -e 's/\.sh$//' -e 's/_.*$//'` ;;
3816                 esac
3817                 ;;
3818         *) dflt="$osname" ;;
3819 esac
3820 rp="Operating system name?"
3821 . ./myread
3822 case "$ans" in
3823 none)  osname='' ;;
3824 *) osname=`echo "$ans" | $sed -e 's/[   ][      ]*/_/g' | ./tr '[A-Z]' '[a-z]'`;;
3825 esac
3826 echo " "
3827 case "$osvers" in
3828         ''|' ')
3829                 case "$hintfile" in
3830                 ''|' '|none) dflt=none ;;
3831                 *)      dflt=`echo $hintfile | $sed -e 's/\.sh$//' -e 's/^[^_]*//'`
3832                         dflt=`echo $dflt | $sed -e 's/^_//' -e 's/_/./g'`
3833                         case "$dflt" in
3834                         ''|' ') dflt=none ;;
3835                         esac
3836                         ;;
3837                 esac
3838                 ;;
3839         *) dflt="$osvers" ;;
3840 esac
3841 rp="Operating system version?"
3842 . ./myread
3843 case "$ans" in
3844 none)  osvers='' ;;
3845 *) osvers="$ans" ;;
3846 esac
3847
3848
3849 . ./posthint.sh
3850
3851 : who configured the system
3852 cf_time=`LC_ALL=C; LANGUAGE=C; export LC_ALL; export LANGUAGE; $date 2>&1`
3853 case "$cf_by" in
3854 "")
3855         cf_by=`(logname) 2>/dev/null`
3856         case "$cf_by" in
3857         "")
3858                 cf_by=`(whoami) 2>/dev/null`
3859                 case "$cf_by" in
3860                 "") cf_by=unknown ;;
3861                 esac ;;
3862         esac ;;
3863 esac
3864
3865 : decide how portable to be.  Allow command line overrides.
3866 case "$d_portable" in
3867 "$undef") ;;
3868 *)      d_portable="$define" ;;
3869 esac
3870
3871 : set up shell script to do ~ expansion
3872 cat >filexp <<EOSS
3873 $startsh
3874 : expand filename
3875 case "\$1" in
3876  \~/*|\~)
3877         echo \$1 | $sed "s|~|\${HOME-\$LOGDIR}|"
3878         ;;
3879  \~*)
3880         if $test -f /bin/csh; then
3881                 /bin/csh -f -c "glob \$1"
3882                 failed=\$?
3883                 echo ""
3884                 exit \$failed
3885         else
3886                 name=\`$expr x\$1 : '..\([^/]*\)'\`
3887                 dir=\`$sed -n -e "/^\${name}:/{s/^[^:]*:[^:]*:[^:]*:[^:]*:[^:]*:\([^:]*\).*"'\$'"/\1/" -e p -e q -e '}' </etc/passwd\`
3888                 if $test ! -d "\$dir"; then
3889                         me=\`basename \$0\`
3890                         echo "\$me: can't locate home directory for: \$name" >&2
3891                         exit 1
3892                 fi
3893                 case "\$1" in
3894                 */*)
3895                         echo \$dir/\`$expr x\$1 : '..[^/]*/\(.*\)'\`
3896                         ;;
3897                 *)
3898                         echo \$dir
3899                         ;;
3900                 esac
3901         fi
3902         ;;
3903 *)
3904         echo \$1
3905         ;;
3906 esac
3907 EOSS
3908 chmod +x filexp
3909 $eunicefix filexp
3910
3911 : now set up to get a file name
3912 cat <<EOS >getfile
3913 $startsh
3914 EOS
3915 cat <<'EOSC' >>getfile
3916 tilde=''
3917 fullpath=''
3918 already=''
3919 skip=''
3920 none_ok=''
3921 exp_file=''
3922 nopath_ok=''
3923 orig_rp="$rp"
3924 orig_dflt="$dflt"
3925 case "$gfpth" in
3926 '') gfpth='.' ;;
3927 esac
3928
3929 case "$fn" in
3930 *\(*)
3931         : getfile will accept an answer from the comma-separated list
3932         : enclosed in parentheses even if it does not meet other criteria.
3933         expr "$fn" : '.*(\(.*\)).*' | $tr ',' $trnl >getfile.ok
3934         fn=`echo $fn | sed 's/(.*)//'`
3935         ;;
3936 esac
3937
3938 case "$fn" in
3939 *:*)
3940         loc_file=`expr $fn : '.*:\(.*\)'`
3941         fn=`expr $fn : '\(.*\):.*'`
3942         ;;
3943 esac
3944
3945 case "$fn" in
3946 *~*) tilde=true;;
3947 esac
3948 case "$fn" in
3949 */*) fullpath=true;;
3950 esac
3951 case "$fn" in
3952 *+*) skip=true;;
3953 esac
3954 case "$fn" in
3955 *n*) none_ok=true;;
3956 esac
3957 case "$fn" in
3958 *e*) exp_file=true;;
3959 esac
3960 case "$fn" in
3961 *p*) nopath_ok=true;;
3962 esac
3963
3964 case "$fn" in
3965 *f*) type='File';;
3966 *d*) type='Directory';;
3967 *l*) type='Locate';;
3968 esac
3969
3970 what="$type"
3971 case "$what" in
3972 Locate) what='File';;
3973 esac
3974
3975 case "$exp_file" in
3976 '')
3977         case "$d_portable" in
3978         "$define") ;;
3979         *) exp_file=true;;
3980         esac
3981         ;;
3982 esac
3983
3984 cd ..
3985 while test "$type"; do
3986         redo=''
3987         rp="$orig_rp"
3988         dflt="$orig_dflt"
3989         case "$tilde" in
3990         true) rp="$rp (~name ok)";;
3991         esac
3992         . UU/myread
3993         if test -f UU/getfile.ok && \
3994                 $contains "^$ans\$" UU/getfile.ok >/dev/null 2>&1
3995         then
3996                 value="$ans"
3997                 ansexp="$ans"
3998                 break
3999         fi
4000         case "$ans" in
4001         none)
4002                 value=''
4003                 ansexp=''
4004                 case "$none_ok" in
4005                 true) type='';;
4006                 esac
4007                 ;;
4008         *)
4009                 case "$tilde" in
4010                 '') value="$ans"
4011                         ansexp="$ans";;
4012                 *)
4013                         value=`UU/filexp $ans`
4014                         case $? in
4015                         0)
4016                                 if test "$ans" != "$value"; then
4017                                         echo "(That expands to $value on this system.)"
4018                                 fi
4019                                 ;;
4020                         *) value="$ans";;
4021                         esac
4022                         ansexp="$value"
4023                         case "$exp_file" in
4024                         '') value="$ans";;
4025                         esac
4026                         ;;
4027                 esac
4028                 case "$fullpath" in
4029                 true)
4030                         case "$ansexp" in
4031                         /*) value="$ansexp" ;;
4032                         [a-zA-Z]:/*) value="$ansexp" ;;
4033                         *)
4034                                 redo=true
4035                                 case "$already" in
4036                                 true)
4037                                 echo "I shall only accept a full path name, as in /bin/ls." >&4
4038                                 echo "Use a ! shell escape if you wish to check pathnames." >&4
4039                                         ;;
4040                                 *)
4041                                 echo "Please give a full path name, starting with slash." >&4
4042                                         case "$tilde" in
4043                                         true)
4044                                 echo "Note that using ~name is ok provided it expands well." >&4
4045                                                 already=true
4046                                                 ;;
4047                                         esac
4048                                 esac
4049                                 ;;
4050                         esac
4051                         ;;
4052                 esac
4053                 case "$redo" in
4054                 '')
4055                         case "$type" in
4056                         File)
4057                                 for fp in $gfpth; do
4058                                         if test "X$fp" = X.; then
4059                                             pf="$ansexp"
4060                                         else    
4061                                             pf="$fp/$ansexp"
4062                                         fi
4063                                         if test -f "$pf"; then
4064                                                 type=''
4065                                         elif test -r "$pf" || (test -h "$pf") >/dev/null 2>&1
4066                                         then
4067                                                 echo "($value is not a plain file, but that's ok.)"
4068                                                 type=''
4069                                         fi
4070                                         if test X"$type" = X; then
4071                                             value="$pf"
4072                                             break
4073                                         fi
4074                                 done
4075                                 ;;
4076                         Directory)
4077                                 for fp in $gfpth; do
4078                                         if test "X$fp" = X.; then
4079                                             dir="$ans"
4080                                             direxp="$ansexp"
4081                                         else    
4082                                             dir="$fp/$ansexp"
4083                                             direxp="$fp/$ansexp"
4084                                         fi
4085                                         if test -d "$direxp"; then
4086                                                 type=''
4087                                                 value="$dir"
4088                                                 break
4089                                         fi
4090                                 done
4091                                 ;;
4092                         Locate)
4093                                 if test -d "$ansexp"; then
4094                                         echo "(Looking for $loc_file in directory $value.)"
4095                                         value="$value/$loc_file"
4096                                         ansexp="$ansexp/$loc_file"
4097                                 fi
4098                                 if test -f "$ansexp"; then
4099                                         type=''
4100                                 fi
4101                                 case "$nopath_ok" in
4102                                 true)   case "$value" in
4103                                         */*) ;;
4104                                         *)      echo "Assuming $value will be in people's path."
4105                                                 type=''
4106                                                 ;;
4107                                         esac
4108                                         ;;
4109                                 esac
4110                                 ;;
4111                         esac
4112
4113                         case "$skip" in
4114                         true) type='';
4115                         esac
4116
4117                         case "$type" in
4118                         '') ;;
4119                         *)
4120                                 if test "$fastread" = yes; then
4121                                         dflt=y
4122                                 else
4123                                         dflt=n
4124                                 fi
4125                                 rp="$what $value doesn't exist.  Use that name anyway?"
4126                                 . UU/myread
4127                                 dflt=''
4128                                 case "$ans" in
4129                                 y*) type='';;
4130                                 *) echo " ";;
4131                                 esac
4132                                 ;;
4133                         esac
4134                         ;;
4135                 esac
4136                 ;;
4137         esac
4138 done
4139 cd UU
4140 ans="$value"
4141 rp="$orig_rp"
4142 dflt="$orig_dflt"
4143 rm -f getfile.ok
4144 test "X$gfpthkeep" != Xy && gfpth=""
4145 EOSC
4146
4147 : determine root of directory hierarchy where package will be installed.
4148 case "$prefix" in
4149 '')
4150         dflt=`./loc . /usr/local /usr/local /local /opt /usr`
4151         ;;
4152 *?/)
4153         dflt=`echo "$prefix" | sed 's/.$//'`
4154         ;;
4155 *)
4156         dflt="$prefix"
4157         ;;
4158 esac
4159 $cat <<EOM
4160
4161 By default, $package will be installed in $dflt/bin, manual pages
4162 under $dflt/man, etc..., i.e. with $dflt as prefix for all
4163 installation directories. Typically this is something like /usr/local.
4164 If you wish to have binaries under /usr/bin but other parts of the
4165 installation under /usr/local, that's ok: you will be prompted
4166 separately for each of the installation directories, the prefix being
4167 only used to set the defaults.
4168
4169 EOM
4170 fn=d~
4171 rp='Installation prefix to use?'
4172 . ./getfile
4173 oldprefix=''
4174 case "$prefix" in
4175 '') ;;
4176 *)
4177         case "$ans" in
4178         "$prefix") ;;
4179         *) oldprefix="$prefix";;
4180         esac
4181         ;;
4182 esac
4183 prefix="$ans"
4184 prefixexp="$ansexp"
4185
4186 : allow them to override the AFS root
4187 case "$afsroot" in
4188 '')     afsroot=/afs ;;
4189 *)      afsroot=$afsroot ;;
4190 esac
4191
4192 : is AFS running?
4193 echo " "
4194 case "$afs" in
4195 $define|true)   afs=true ;;
4196 $undef|false)   afs=false ;;
4197 *)      if $test -d $afsroot; then
4198                 afs=true
4199         else
4200                 afs=false
4201         fi
4202         ;;
4203 esac
4204 if $afs; then
4205         echo "AFS may be running... I'll be extra cautious then..." >&4
4206 else
4207         echo "AFS does not seem to be running..." >&4
4208 fi
4209
4210 : determine installation prefix for where package is to be installed.
4211 if $afs; then
4212 $cat <<EOM
4213
4214 Since you are running AFS, I need to distinguish the directory in which
4215 files will reside from the directory in which they are installed (and from
4216 which they are presumably copied to the former directory by occult means).
4217
4218 EOM
4219         case "$installprefix" in
4220         '') dflt=`echo $prefix | sed 's#^/afs/#/afs/.#'`;;
4221         *) dflt="$installprefix";;
4222         esac
4223 else
4224 $cat <<EOM
4225
4226 In some special cases, particularly when building $package for distribution,
4227 it is convenient to distinguish the directory in which files should be
4228 installed from the directory ($prefix) in which they will
4229 eventually reside.  For most users, these two directories are the same.
4230
4231 EOM
4232         case "$installprefix" in
4233         '') dflt=$prefix ;;
4234         *) dflt=$installprefix;;
4235         esac
4236 fi
4237 fn=d~
4238 rp='What installation prefix should I use for installing files?'
4239 . ./getfile
4240 installprefix="$ans"
4241 installprefixexp="$ansexp"
4242
4243 : Perform the prefixexp/installprefixexp correction if necessary
4244 cat <<EOS >installprefix
4245 $startsh
4246 EOS
4247 cat <<'EOSC' >>installprefix
4248 : Change installation prefix, if necessary.
4249 if $test X"$prefix" != X"$installprefix"; then
4250     eval "install${prefixvar}=\`echo \$${prefixvar}exp | sed \"s#^\$prefixexp#\$installprefixexp#\"\`"
4251 else
4252     eval "install${prefixvar}=\"\$${prefixvar}exp\""
4253 fi
4254 EOSC
4255 chmod +x installprefix
4256 $eunicefix installprefix
4257
4258 : Set variables such as privlib and privlibexp from the output of ./getfile
4259 : performing the prefixexp/installprefixexp correction if necessary.
4260 cat <<EOS >setprefixvar
4261 $startsh
4262 EOS
4263 cat <<'EOSC' >>setprefixvar
4264 eval "${prefixvar}=\"\$ans\""
4265 eval "${prefixvar}exp=\"\$ansexp\""
4266 . ./installprefix
4267 EOSC
4268 chmod +x setprefixvar
4269 $eunicefix setprefixvar
4270
4271 : set up the script used to warn in case of inconsistency
4272 cat <<EOS >whoa
4273 $startsh
4274 EOS
4275 cat <<'EOSC' >>whoa
4276 dflt=y
4277 case "$hint" in
4278     recommended)
4279         case "$hintfile" in
4280         '')     echo "The $hint value for \$$var on this machine was \"$was\"!" >&4
4281                 ;;
4282         *)      echo "Hmm.  Based on the hints in hints/$hintfile.sh, " >&4
4283                 echo "the $hint value for \$$var on this machine was \"$was\"!" >&4
4284                 ;;
4285         esac
4286         ;;
4287     *)  echo " "
4288         echo "*** WHOA THERE!!! ***" >&4
4289         echo "    The $hint value for \$$var on this machine was \"$was\"!" >&4
4290         ;;
4291 esac
4292 rp="    Keep the $hint value?"
4293 . ./myread
4294 case "$ans" in
4295 y) td=$was; tu=$was;;
4296 esac
4297 EOSC
4298
4299 : function used to set '$1' to '$val'
4300 setvar='var=$1; eval "was=\$$1"; td=$define; tu=$undef;
4301 case "$val$was" in
4302 $define$undef) . ./whoa; eval "$var=\$td";;
4303 $undef$define) . ./whoa; eval "$var=\$tu";;
4304 *) eval "$var=$val";;
4305 esac'
4306
4307 : get the patchlevel
4308 echo " "
4309 echo "Getting the current patchlevel..." >&4
4310 if $test -r $rsrc/patchlevel.h;then
4311         revision=`awk '/define[         ]+PERL_REVISION/ {print $3}' $rsrc/patchlevel.h`
4312         patchlevel=`awk '/define[       ]+PERL_VERSION/ {print $3}' $rsrc/patchlevel.h`
4313         subversion=`awk '/define[       ]+PERL_SUBVERSION/ {print $3}' $rsrc/patchlevel.h`
4314         api_revision=`awk '/define[     ]+PERL_API_REVISION/ {print $3}' $rsrc/patchlevel.h`
4315         api_version=`awk '/define[      ]+PERL_API_VERSION/ {print $3}' $rsrc/patchlevel.h`
4316         api_subversion=`awk '/define[   ]+PERL_API_SUBVERSION/ {print $3}' $rsrc/patchlevel.h`
4317         perl_patchlevel=`egrep ',"(MAINT|SMOKE)[0-9][0-9]*"' $rsrc/patchlevel.h|tail -1|sed 's/[^0-9]//g'`
4318 else
4319         revision=0
4320         patchlevel=0
4321         subversion=0
4322         api_revision=0
4323         api_version=0
4324         api_subversion=0
4325         perl_patchlevel=0
4326         $echo "(You do not have patchlevel.h.  Eek.)"
4327 fi
4328 : Define a handy string here to avoid duplication in myconfig.SH and configpm.
4329 version_patchlevel_string="version $patchlevel subversion $subversion"
4330 case "$perl_patchlevel" in
4331 0|'') ;;
4332 *)  perl_patchlevel=`echo $perl_patchlevel | sed 's/.* //'`
4333     version_patchlevel_string="$version_patchlevel_string patch $perl_patchlevel"
4334     ;;
4335 esac
4336
4337 $echo "(You have $package $version_patchlevel_string.)"
4338
4339 case "$osname" in
4340 dos|vms)
4341         : XXX Should be a Configure test for double-dots in filenames.
4342         version=`echo $revision $patchlevel $subversion | \
4343                  $awk '{ printf "%d_%d_%d", $1, $2, $3 }'`
4344         api_versionstring=`echo $api_revision $api_version $api_subversion | \
4345                  $awk '{ printf "%d_%d_%d", $1, $2, $3 }'`
4346         ;;
4347 *)
4348         version=`echo $revision $patchlevel $subversion | \
4349                  $awk '{ printf "%d.%d.%d", $1, $2, $3 }'`
4350         api_versionstring=`echo $api_revision $api_version $api_subversion | \
4351                  $awk '{ printf "%d.%d.%d", $1, $2, $3 }'`
4352         ;;
4353 esac
4354 : Special case the 5.005_xx maintenance series, which used 5.005
4355 : without any subversion label as a subdirectory in $sitelib
4356 if test "${api_revision}${api_version}${api_subversion}" = "550"; then
4357         api_versionstring='5.005'
4358 fi
4359
4360 : Do we want threads support and if so, what type
4361 case "$usethreads" in
4362 $define|true|[yY]*)     dflt='y';;
4363 *)     # Catch case where user specified ithreads or 5005threads but
4364        # forgot -Dusethreads (A.D. 4/2002)
4365        case "$useithreads$use5005threads" in
4366        *$define*)       dflt='y';;
4367        *)               dflt='n';;
4368        esac
4369        ;;
4370 esac
4371 cat <<EOM
4372
4373 Perl can be built to offer a form of threading support on some systems
4374 To do so, Configure can be run with -Dusethreads.
4375
4376 Note that Perl built with threading support runs slightly slower
4377 and uses slightly more memory than plain Perl.
4378
4379 If this doesn't make any sense to you, just accept the default '$dflt'.
4380 EOM
4381 rp='Build a threading Perl?'
4382 . ./myread
4383 case "$ans" in
4384 y|Y)    val="$define" ;;
4385 *)      val="$undef" ;;
4386 esac
4387 set usethreads
4388 eval $setvar
4389
4390 if $test $patchlevel -lt 9; then
4391     case "$usethreads" in
4392     $define)
4393         : Default to ithreads unless overridden on command line or with
4394         : old config.sh
4395         dflt='y'
4396         case "$use5005threads" in
4397                 $define|true|[yY]*)
4398                         echo "5.005 threads are no longer supported"
4399                         exit 1
4400                 ;;
4401         esac
4402         case "$useithreads" in
4403                 $undef|false|[nN]*) dflt='n';;
4404         esac
4405         rp='Use the newer interpreter-based ithreads?'
4406         . ./myread
4407         case "$ans" in
4408         y|Y)    val="$define" ;;
4409         *)      val="$undef" ;;
4410         esac
4411         set useithreads
4412         eval $setvar
4413         : Now set use5005threads to the opposite value.
4414         case "$useithreads" in
4415         $define) val="$undef" ;;
4416         *) val="$define" ;;
4417         esac
4418         set use5005threads
4419         eval $setvar
4420         ;;
4421     *)
4422         useithreads="$undef"
4423         use5005threads="$undef"
4424         ;;
4425     esac
4426
4427     case "$useithreads$use5005threads" in
4428     "$define$define")
4429         $cat >&4 <<EOM
4430
4431 You cannot have both the ithreads and the 5.005 threads enabled
4432 at the same time.  Disabling the 5.005 threads since they are
4433 much less stable than the ithreads.
4434
4435 EOM
4436         use5005threads="$undef"
4437         ;;
4438     esac
4439
4440 else
4441 : perl-5.9.x and later
4442
4443     if test X"$usethreads" = "X$define"; then
4444         case "$use5005threads" in
4445             $define|true|[yY]*)
4446                 $cat >&4 <<EOM
4447
4448 5.005 threads has been removed for 5.10.  Perl will be built using ithreads.
4449
4450 EOM
4451             ;;
4452         esac
4453     fi
4454
4455     use5005threads="$undef"
4456     useithreads="$usethreads"
4457 fi
4458
4459 case "$d_oldpthreads" in
4460 '')     : Configure tests would be welcome here.  For now, assume undef.
4461         val="$undef" ;;
4462 *)      val="$d_oldpthreads" ;;
4463 esac
4464 set d_oldpthreads
4465 eval $setvar
4466
4467
4468 : Look for a hint-file generated 'call-back-unit'.  If the
4469 : user has specified that a threading perl is to be built,
4470 : we may need to set or change some other defaults.
4471 if $test -f usethreads.cbu; then
4472     echo "Your platform has some specific hints regarding threaded builds, using them..."
4473     . ./usethreads.cbu
4474 else
4475     case "$usethreads" in
4476         "$define"|true|[yY]*)
4477                 $cat <<EOM
4478 (Your platform does not have any specific hints for threaded builds.
4479  Assuming POSIX threads, then.)
4480 EOM
4481         ;;
4482     esac
4483 fi
4484
4485 : Check if multiplicity is required
4486 cat <<EOM
4487
4488 Perl can be built so that multiple Perl interpreters can coexist
4489 within the same Perl executable.
4490 EOM
4491
4492 case "$useithreads" in
4493 $define)
4494         cat <<EOM
4495 This multiple interpreter support is required for interpreter-based threads.
4496 EOM
4497         val="$define"
4498         ;;
4499 *)      case "$usemultiplicity" in
4500         $define|true|[yY]*)     dflt='y';;
4501         *) dflt='n';;
4502         esac
4503         echo " "
4504         echo "If this doesn't make any sense to you, just accept the default '$dflt'."
4505         rp='Build Perl for multiplicity?'
4506         . ./myread
4507         case "$ans" in
4508         y|Y)    val="$define" ;;
4509         *)      val="$undef" ;;
4510         esac
4511         ;;
4512 esac
4513 set usemultiplicity
4514 eval $setvar
4515
4516 : Check if morebits is requested
4517 case "$usemorebits" in
4518 "$define"|true|[yY]*)
4519         use64bitint="$define"
4520         uselongdouble="$define"
4521         usemorebits="$define"
4522         ;;
4523 *)      usemorebits="$undef"
4524         ;;
4525 esac
4526
4527 : Determine the C compiler to be used
4528 echo " "
4529 case "$cc" in
4530 '') dflt=cc;;
4531 *) dflt="$cc";;
4532 esac
4533 rp="Use which C compiler?"
4534 . ./myread
4535 cc="$ans"
4536
4537 : See whether they have no cc but they do have gcc
4538 . ./trygcc
4539 if $test -f cc.cbu; then
4540     . ./cc.cbu
4541 fi
4542 . ./checkcc
4543
4544 : make some quick guesses about what we are up against
4545 echo " "
4546 $echo $n "Hmm...  $c"
4547 echo exit 1 >bsd
4548 echo exit 1 >usg
4549 echo exit 1 >v7
4550 echo exit 1 >osf1
4551 echo exit 1 >eunice
4552 echo exit 1 >xenix
4553 echo exit 1 >venix
4554 echo exit 1 >os2
4555 d_bsd="$undef"
4556 $cat $sysroot/usr/include/signal.h $sysroot/usr/include/sys/signal.h >foo 2>/dev/null
4557 if test -f /osf_boot || $contains 'OSF/1' $sysroot/usr/include/ctype.h >/dev/null 2>&1
4558 then
4559         echo "Looks kind of like an OSF/1 system, but we'll see..."
4560         echo exit 0 >osf1
4561 elif test `echo abc | $tr a-z A-Z` = Abc ; then
4562         xxx=`./loc addbib blurfl $pth`
4563         if $test -f $xxx; then
4564         echo "Looks kind of like a USG system with BSD features, but we'll see..."
4565                 echo exit 0 >bsd
4566                 echo exit 0 >usg
4567         else
4568                 if $contains SIGTSTP foo >/dev/null 2>&1 ; then
4569                         echo "Looks kind of like an extended USG system, but we'll see..."
4570                 else
4571                         echo "Looks kind of like a USG system, but we'll see..."
4572                 fi
4573                 echo exit 0 >usg
4574         fi
4575 elif $contains SIGTSTP foo >/dev/null 2>&1 ; then
4576         echo "Looks kind of like a BSD system, but we'll see..."
4577         d_bsd="$define"
4578         echo exit 0 >bsd
4579 else
4580         echo "Looks kind of like a Version 7 system, but we'll see..."
4581         echo exit 0 >v7
4582 fi
4583 case "$eunicefix" in
4584 *unixtovms*)
4585         $cat <<'EOI'
4586 There is, however, a strange, musty smell in the air that reminds me of
4587 something...hmm...yes...I've got it...there's a VMS nearby, or I'm a Blit.
4588 EOI
4589         echo exit 0 >eunice
4590         d_eunice="$define"
4591 : it so happens the Eunice I know will not run shell scripts in Unix format
4592         ;;
4593 *)
4594         echo " "
4595         echo "Congratulations.  You aren't running Eunice."
4596         d_eunice="$undef"
4597         ;;
4598 esac
4599 : Detect OS2.  The p_ variable is set above in the Head.U unit.
4600 : Note that this also -- wrongly -- detects e.g. dos-djgpp, which also uses
4601 : semicolon as a patch separator
4602 case "$p_" in
4603 :) ;;
4604 *)
4605         $cat <<'EOI'
4606 I have the feeling something is not exactly right, however...don't tell me...
4607 lemme think...does HAL ring a bell?...no, of course, you're only running OS/2!
4608 (Or you may be running DOS with DJGPP.)
4609 EOI
4610         echo exit 0 >os2
4611         ;;
4612 esac
4613 if test -f /xenix; then
4614         echo "Actually, this looks more like a XENIX system..."
4615         echo exit 0 >xenix
4616         d_xenix="$define"
4617 else
4618         echo " "
4619         echo "It's not Xenix..."
4620         d_xenix="$undef"
4621 fi
4622 chmod +x xenix
4623 $eunicefix xenix
4624 if test -f /venix; then
4625         echo "Actually, this looks more like a VENIX system..."
4626         echo exit 0 >venix
4627 else
4628         echo " "
4629         if ./xenix; then
4630                 : null
4631         else
4632                 echo "Nor is it Venix..."
4633         fi
4634 fi
4635 chmod +x bsd usg v7 osf1 eunice xenix venix os2
4636 $eunicefix bsd usg v7 osf1 eunice xenix venix os2
4637 $rm -f foo
4638
4639 : Check if we are using GNU gcc and what its version is
4640 echo " "
4641 echo "Checking for GNU cc in disguise and/or its version number..." >&4
4642 $cat >try.c <<EOM
4643 #include <stdio.h>
4644 int main() {
4645 #if defined(__GNUC__) && !defined(__INTEL_COMPILER)
4646 #ifdef __VERSION__
4647         printf("%s\n", __VERSION__);
4648 #else
4649         printf("%s\n", "1");
4650 #endif
4651 #endif
4652         return(0);
4653 }
4654 EOM
4655 if $cc -o try $ccflags $ldflags try.c; then
4656         gccversion=`$run ./try`
4657         case "$gccversion" in
4658         '') echo "You are not using GNU cc." ;;
4659         *)  echo "You are using GNU cc $gccversion."
4660             ccname=gcc
4661             ;;
4662         esac
4663 else
4664         echo " "
4665         echo "*** WHOA THERE!!! ***" >&4
4666         echo "    Your C compiler \"$cc\" doesn't seem to be working!" >&4
4667         case "$knowitall" in
4668         '')
4669         echo "    You'd better start hunting for one and let me know about it." >&4
4670                 exit 1
4671                 ;;
4672         esac
4673 fi
4674 $rm -f try try.*
4675 case "$gccversion" in
4676 1*) cpp=`./loc gcc-cpp $cpp $pth` ;;
4677 esac
4678 case "$gccversion" in
4679 '') gccosandvers='' ;;
4680 *) gccshortvers=`echo "$gccversion"|sed 's/ .*//'`
4681    gccosandvers=`$cc -v 2>&1|grep '/specs$'|sed "s!.*/[^-/]*-[^-/]*-\([^-/]*\)/$gccshortvers/specs!\1!"`
4682    gccshortvers=''
4683    case "$gccosandvers" in
4684    $osname) gccosandvers='' ;; # linux gccs seem to have no linux osvers, grr
4685    $osname$osvers) ;; # looking good
4686    $osname*) cat <<EOM >&4
4687
4688 *** WHOA THERE!!! ***
4689
4690     Your gcc has not been compiled for the exact release of
4691     your operating system ($gccosandvers versus $osname$osvers).
4692
4693     In general it is a good idea to keep gcc synchronized with
4694     the operating system because otherwise serious problems
4695     may ensue when trying to compile software, like Perl.
4696
4697     I'm trying to be optimistic here, though, and will continue.
4698     If later during the configuration and build icky compilation
4699     problems appear (headerfile conflicts being the most common
4700     manifestation), I suggest reinstalling the gcc to match
4701     your operating system release.
4702
4703 EOM
4704       ;;
4705    *) gccosandvers='' ;; # failed to parse, better be silent
4706    esac
4707    ;;
4708 esac
4709 case "$ccname" in
4710 '') ccname="$cc" ;;
4711 esac
4712
4713 # gcc 3.* complain about adding -Idirectories that they already know about,
4714 # so we will take those off from locincpth.
4715 case "$gccversion" in
4716 3*)
4717     echo "main(){}">try.c
4718     for incdir in $locincpth; do
4719        warn=`$cc $ccflags -I$incdir -c try.c 2>&1 | \
4720              grep '^c[cp]p*[01]: warning: changing search order '`
4721        if test "X$warn" != X; then
4722            locincpth=`echo " $locincpth " | sed "s! $incdir ! !"`
4723        fi
4724     done
4725     $rm -f try try.*
4726 esac
4727
4728 # gcc 4.9 by default does some optimizations that break perl.
4729 # see ticket 121505.
4730 #
4731 # The -fwrapv disables those optimizations (and probably others,) so
4732 # for gcc 4.9 (and later, since the optimizations probably won't go
4733 # away), add -fwrapv unless the user requests -fno-wrapv, which
4734 # disables -fwrapv, or if the user requests -fsanitize=undefined,
4735 # which turns the overflows -fwrapv ignores into runtime errors.
4736 case "$gccversion" in
4737 4.[3-9].*|4.[1-9][0-9]*|[5-9].*|[1-9][0-9]*)
4738     case "$ccflags" in
4739     *-fno-wrapv*|*-fsanitize=undefined*|*-fwrapv*) ;;
4740     *) ccflags="$ccflags -fwrapv" ;;
4741     esac
4742 esac
4743
4744 : What should the include directory be ?
4745 : Use sysroot if set, so findhdr looks in the right place.
4746 echo " "
4747 $echo $n "Hmm...  $c"
4748 dflt="$sysroot/usr/include"
4749 incpath=''
4750 mips_type=''
4751 if $test -f /bin/mips && /bin/mips; then
4752         echo "Looks like a MIPS system..."
4753         $cat >usr.c <<'EOCP'
4754 #ifdef SYSTYPE_BSD43
4755 /bsd43
4756 #endif
4757 EOCP
4758         if $cc $cppflags -E usr.c > usr.out && $contains / usr.out >/dev/null 2>&1; then
4759                 dflt='/bsd43/usr/include'
4760                 incpath='/bsd43'
4761                 mips_type='BSD 4.3'
4762         else
4763                 mips_type='System V'
4764         fi
4765         $rm -f usr.c usr.out
4766         echo "and you're compiling with the $mips_type compiler and libraries."
4767         xxx_prompt=y
4768         echo "exit 0" >mips
4769 else
4770         echo "Doesn't look like a MIPS system."
4771         xxx_prompt=n
4772         echo "exit 1" >mips
4773 fi
4774 chmod +x mips
4775 $eunicefix mips
4776 case "$usrinc" in
4777 '') ;;
4778 *) dflt="$usrinc";;
4779 esac
4780 case "$xxx_prompt" in
4781 y)      fn=d/
4782         echo " "
4783         rp='Where are the include files you want to use?'
4784         . ./getfile
4785         usrinc="$ans"
4786         ;;
4787 *)      usrinc="$dflt"
4788         ;;
4789 esac
4790
4791 : see how we invoke the C preprocessor
4792 echo " "
4793 echo "Now, how can we feed standard input to your C preprocessor..." >&4
4794 cat <<'EOT' >testcpp.c
4795 #define ABC abc
4796 #define XYZ xyz
4797 ABC.XYZ
4798 EOT
4799 cd ..
4800 if test ! -f cppstdin; then
4801         if test "X$osname" = "Xaix" -a "X$gccversion" = X; then
4802                 # AIX cc -E doesn't show the absolute headerfile
4803                 # locations but we'll cheat by using the -M flag.
4804                 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
4805         else
4806                 echo 'cat >.$$.c; '"$cc $cppflags"' -E ${1+"$@"} .$$.c; rm .$$.c' >cppstdin
4807         fi
4808 else
4809         echo "Keeping your $hint cppstdin wrapper."
4810 fi
4811 chmod 755 cppstdin
4812 wrapper=`pwd`/cppstdin
4813 ok='false'
4814 cd UU
4815
4816 if $test "X$cppstdin" != "X" && \
4817         $cppstdin $cppminus <testcpp.c >testcpp.out 2>&1 && \
4818         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1
4819 then
4820         echo "You used to use $cppstdin $cppminus so we'll use that again."
4821         case "$cpprun" in
4822         '') echo "But let's see if we can live without a wrapper..." ;;
4823         *)
4824                 if $cpprun $cpplast <testcpp.c >testcpp.out 2>&1 && \
4825                         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1
4826                 then
4827                         echo "(And we'll use $cpprun $cpplast to preprocess directly.)"
4828                       &nb