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