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