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