fix Storable test for pre-5.19.2 threaded perls
[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
2900 : Make symlinks util
2901 case "$mksymlinks" in
2902 $define|true|[yY]*)
2903         case "$src" in
2904         ''|'.') echo "Cannot create symlinks in the original directory." >&4
2905                 exit 1
2906                 ;;
2907         *)      case "$lns:$issymlink" in
2908                 *"ln"*" -s:"*"test -"?)
2909                         echo "Creating the symbolic links..." >&4
2910                         cd ..
2911                         awk '{print $1}' $src/MANIFEST | sed -e 's:/\([^/]*\)$: \1:' |
2912                         awk 'NF == 1 {
2913                                 dir=".";
2914                                 file=$1 "";
2915                              }
2916                              NF == 2 {
2917                                 dir=$1 "";
2918                                 file=$2 "";
2919                              }
2920                              {
2921                                  print "# dir = ", dir, "file = ", file
2922                                  mf[dir] = mf[dir]" "source"/"dir"/"file;
2923                              } END {
2924                                  for (d in mf) {
2925                                      if (d != ".") { print("mkdir -p "d) }
2926                                      print("ln -sf "mf[d]" "d);
2927                                  }
2928                              }' source="$src" > UU/mksymlinks.$$
2929                         sh UU/mksymlinks.$$
2930                         rm UU/mksymlinks.$$
2931                         # Sanity check 1.
2932                         if test ! -d t/base; then
2933                                 echo "Failed to create the subdirectories.  Aborting." >&4
2934                                 exit 1
2935                         fi
2936                         # Sanity check 2.
2937                         if test ! -f t/base/lex.t; then
2938                                 echo "Failed to create the symlinks (t/base/lex.t missing).  Aborting." >&4
2939                                 exit 1
2940                         fi
2941                         if test ! -f win32/win32.c; then
2942                                 echo "Failed to create the symlinks (win32/win32.c missing).  Aborting." >&4
2943                                 exit 1
2944                         fi
2945                         cd UU
2946                         ;;
2947                 *)      echo "(I cannot figure out how to do symbolic links, ignoring mksymlinks)." >&4
2948                         ;;
2949                 esac
2950                 ;;
2951         esac
2952         ;;
2953 esac
2954
2955 : Check for Cross-Compilation
2956 if $test "X$targethost" = "X"; then
2957     targethost=""
2958 fi
2959 if $test "X$targetenv" = "X"; then
2960     targetenv=""
2961 fi
2962 case "$usecrosscompile" in
2963 $define|true|[yY]*)
2964         $echo "Cross-compiling..."
2965         croak=''
2966         case "$cc" in
2967         *-gcc*|*-g++*) # A cross-compiling gcc, probably.
2968             # arm-linux-androideabi-gcc  -> arm-linux-androideabi
2969             # x86_64-w64-mingw32-gcc.exe -> x86_64-w64-mingw32
2970             targetarch=`$echo $cc|$sed 's/-g[c\+][c\+].*$//'`
2971             ar=`$echo $cc|$sed 's/-g[c\+][c\+]/-ar/'`
2972             # leave out ld, choosing it is more complex
2973             nm=`$echo $cc|$sed 's/-g[c\+][c\+]/-nm/'`
2974             ranlib=`$echo $cc|$sed 's/-g[c\+][c\+]/-ranlib/'`
2975             # We are in a weird spot. Just before us, some values
2976             # were 'saved', to be restored after the hints are
2977             # run.  This means that the changes we made to ar,
2978             # nm and ranlib will get reverted.
2979             # To avoid that, we hijack the saving mechanism and
2980             # have it save our new values.
2981             for file in ar nm ranlib; do
2982                 eval xxx=\$$file
2983                 eval $file=$xxx$_exe
2984                 eval _$file=$xxx
2985             done
2986         ;;
2987         esac
2988         case "$targetarch" in
2989         '') echo "Targetarch not defined." >&4; croak=y ;;
2990         *)  echo "Using targetarch $targetarch." >&4 ;;
2991         esac
2992         case "$targethost" in
2993         '') echo "Targethost not defined." >&4; croak=n ;;
2994         *)  echo "Using targethost $targethost." >&4
2995         esac
2996         locincpth=' '
2997         loclibpth=' '
2998         case "$croak" in
2999         y) echo "Cannot continue, aborting." >&4; exit 1 ;;
3000         esac
3001     : compile a host miniperl and generate_uudmap, unless we got passed them
3002     if $test "X$hostperl" = X; then
3003       echo "Building host miniperl and generate_uudmap binaries" >&4
3004       before_host=`pwd`
3005       cd ..
3006       cd $src
3007       src=`pwd`
3008       rm -rf $src/host
3009       mkdir $src/host
3010       cd $src/host
3011       $src/Configure -des -Dusedevel -Dmksymlinks
3012       $make miniperl
3013       case "$hostgenerate" in
3014       '') $make generate_uudmap
3015           hostgenerate=$src/host/generate_uudmap
3016           ;;
3017        "$undef") hostgenerate=''
3018           ;;
3019       esac
3020       hostperl=$src/host/miniperl
3021       cd $before_host
3022     fi
3023     hostosname=`$hostperl -le 'print $^O'`
3024     ;;
3025 *)
3026     usecrosscompile="$undef"
3027     ;;
3028 esac
3029
3030 : Define -Dtargethost=somecomputer to run compiled tests on another machine
3031 case "$targethost" in
3032     '') echo "Checking for cross-compile" >&4
3033     case "$usecrosscompile$multiarch" in
3034        *$define*) echo "Skipping the try tests in the rest of Configure as no targethost was defined when cross-compiling" >&4
3035          if [ -f Makefile ]; then
3036            echo " "
3037            echo "Now you must ensure config.sh, config.h and the generated headers exist and run a $make."
3038          else
3039            echo "Configure done."
3040          fi
3041        exit 0
3042        ;;
3043      *) echo "No targethost for running compiler tests against defined, running locally" >&4
3044         run=''
3045         to=:
3046         from=:
3047         ;;
3048     esac
3049     ;;
3050     *) echo "Using targethost $targethost." >&4
3051         case "$src" in
3052         /*) run=$src/Cross/run
3053             targetmkdir=$src/Cross/mkdir
3054             to=$src/Cross/to
3055             from=$src/Cross/from
3056             ;;
3057         *)  pwd=`$test -f ../Configure & cd ..; pwd`
3058             run=$pwd/Cross/run
3059             targetmkdir=$pwd/Cross/mkdir
3060             to=$pwd/Cross/to
3061             from=$pwd/Cross/from
3062             ;;
3063         esac
3064         case "$targetrun" in
3065         '') targetrun=ssh ;;
3066         esac
3067         case "$targetto" in
3068         '') targetto=scp ;;
3069         esac
3070         case "$targetfrom" in
3071         '') targetfrom=scp ;;
3072         esac
3073         run=$run-$targetrun
3074         to=$to-$targetto
3075         from=$from-$targetfrom
3076         case "$targetdir" in
3077         '')  targetdir=/tmp
3078              echo "Guessing targetdir $targetdir." >&4
3079              ;;
3080         esac
3081         case "$targetuser" in
3082         '')  targetuser=root
3083              echo "Guessing targetuser $targetuser." >&4
3084              ;;
3085         esac
3086         case "$targetport" in
3087         '')  targetport=22
3088              echo "Guessing targetport $targetport." >&4
3089              ;;
3090         esac
3091         case "$targetfrom" in
3092         scp)    q=-q ;;
3093         *)      q='' ;;
3094         esac
3095         case "$targetrun" in
3096         ssh|rsh)
3097             cat >$run <<EOF
3098 #!/bin/sh
3099 env=''
3100 case "\$1" in
3101 -cwd)
3102   shift
3103   cwd=\$1
3104   shift
3105   ;;
3106 esac
3107 case "\$1" in
3108 -env)
3109   shift
3110   env=\$1
3111   shift
3112   ;;
3113 esac
3114 case "\$cwd" in
3115 '') cwd=$targetdir ;;
3116 esac
3117 exe=\$1
3118 shift
3119 $to \$exe
3120 $targetrun -p $targetport -l $targetuser $targethost "cd \$cwd && \$env \$exe \$@"
3121 EOF
3122             ;;
3123         adb)
3124             $touch $run
3125             ;;
3126         *)  echo "Unknown targetrun '$targetrun'" >&4
3127             exit 1
3128             ;;
3129         esac
3130         case "$targetmkdir" in
3131         */Cross/mkdir)
3132             cat >$targetmkdir <<EOF
3133 #!/bin/sh
3134 $targetrun -p $targetport -l $targetuser $targethost "mkdir -p \$@"
3135 EOF
3136             $chmod a+rx $targetmkdir
3137             ;;
3138         *)  echo "Unknown targetmkdir '$targetmkdir'" >&4
3139             exit 1
3140             ;;
3141         esac
3142         case "$targetto" in
3143         scp|rcp)
3144             cat >$to <<EOF
3145 #!/bin/sh
3146 for f in \$@
3147 do
3148   case "\$f" in
3149   /*)
3150     $targetmkdir \`dirname \$f\`
3151     $targetto -P $targetport -r $q \$f $targetuser@$targethost:\$f           2>/dev/null  || exit 1
3152     ;;
3153   *)
3154     $targetmkdir $targetdir/\`dirname \$f\`
3155     $targetto -P $targetport -r $q \$f $targetuser@$targethost:$targetdir/\$f 2>/dev/null || exit 1
3156     ;;
3157   esac
3158 done
3159 exit 0
3160 EOF
3161             ;;
3162         cp) cat >$to <<EOF
3163 #!/bin/sh
3164 for f in \$@
3165 do
3166   case "\$f" in
3167   /*)
3168     $mkdir -p $targetdir/\`dirname \$f\`
3169     $cp \$f $targetdir/\$f || exit 1
3170     ;;
3171   *)
3172     $targetmkdir $targetdir/\`dirname \$f\`
3173     $cp \$f $targetdir/\$f || exit 1
3174     ;;
3175   esac
3176 done
3177 exit 0
3178 EOF
3179             ;;
3180         *)  echo "Unknown targetto '$targetto'" >&4
3181             exit 1
3182             ;;
3183         esac
3184         case "$targetfrom" in
3185         scp|rcp)
3186           cat >$from <<EOF
3187 #!/bin/sh
3188 for f in \$@
3189 do
3190   $rm -f \$f
3191   $targetfrom -P $targetport $q $targetuser@$targethost:$targetdir/\$f . || exit 1
3192 done
3193 exit 0
3194 EOF
3195             ;;
3196         cp) cat >$from <<EOF
3197 #!/bin/sh
3198 for f in \$@
3199 do
3200   $rm -f \$f
3201   cp $targetdir/\$f . || exit 1
3202 done
3203 exit 0
3204 EOF
3205             ;;
3206         *)  echo "Unknown targetfrom '$targetfrom'" >&4
3207             exit 1
3208             ;;
3209         esac
3210         if $test ! -f $run; then
3211             echo "Target 'run' script '$run' not found." >&4
3212         else
3213             $chmod a+rx $run
3214         fi
3215         if $test ! -f $to; then
3216             echo "Target 'to' script '$to' not found." >&4
3217         else
3218             $chmod a+rx $to
3219         fi
3220         if $test ! -f $from; then
3221             echo "Target 'from' script '$from' not found." >&4
3222         else
3223             $chmod a+rx $from
3224         fi
3225         if $test ! -f $run -o ! -f $to -o ! -f $from; then
3226             exit 1
3227         fi
3228         cat >&4 <<EOF
3229 Using '$run' for remote execution,
3230 and '$from' and '$to'
3231 for remote file transfer.
3232 EOF
3233         ;;
3234 *)      run=''
3235         to=:
3236         from=:
3237         usecrosscompile="$undef"
3238         targetarch=''
3239         ;;
3240 esac
3241
3242 : see whether [:lower:] and [:upper:] are supported character classes
3243 echo " "
3244 case "`echo AbyZ | $tr '[:lower:]' '[:upper:]' 2>/dev/null`"-"`echo AbyZ | $tr '[:upper:]' '[:lower:]' 2>/dev/null`" in
3245 ABYZ-abyz)
3246         echo "Good, your tr supports [:lower:] and [:upper:] to convert case." >&4
3247         up='[:upper:]'
3248         low='[:lower:]'
3249         ;;
3250 *)      # There is a discontinuity in EBCDIC between 'R' and 'S'
3251         # (0xd9 and 0xe2), therefore that is a nice testing point.
3252         if test "X$up" = X -o "X$low" = X; then
3253             case "`echo RS | $tr '[R-S]' '[r-s]' 2>/dev/null`" in
3254             rs) up='[A-Z]'
3255                 low='[a-z]'
3256                 ;;
3257             esac
3258         fi
3259         if test "X$up" = X -o "X$low" = X; then
3260             case "`echo RS | $tr R-S r-s 2>/dev/null`" in
3261             rs) up='A-Z'
3262                 low='a-z'
3263                 ;;
3264             esac
3265         fi
3266         if test "X$up" = X -o "X$low" = X; then
3267             case "`echo RS | od -x 2>/dev/null`" in
3268             *D9E2*|*d9e2*)
3269                 echo "Hey, this might be EBCDIC." >&4
3270                 if test "X$up" = X -o "X$low" = X; then
3271                     case "`echo RS | $tr '[A-IJ-RS-Z]' '[a-ij-rs-z]' 2>/dev/null`" in
3272                     rs) up='[A-IJ-RS-Z]'
3273                         low='[a-ij-rs-z]'
3274                         ;;
3275                     esac
3276                 fi
3277                 if test "X$up" = X -o "X$low" = X; then
3278                     case "`echo RS | $tr A-IJ-RS-Z a-ij-rs-z 2>/dev/null`" in
3279                     rs) up='A-IJ-RS-Z'
3280                         low='a-ij-rs-z'
3281                         ;;
3282                     esac
3283                 fi
3284                 ;;
3285             esac
3286         fi
3287 esac
3288 case "`echo RS | $tr \"$up\" \"$low\" 2>/dev/null`" in
3289 rs)
3290     echo "Using $up and $low to convert case." >&4
3291     ;;
3292 *)
3293     echo "I don't know how to translate letters from upper to lower case." >&4
3294     echo "Your tr is not acting any way I know of." >&4
3295     exit 1
3296     ;;
3297 esac
3298 : set up the translation script tr, must be called with ./tr of course
3299 cat >tr <<EOSC
3300 $startsh
3301 case "\$1\$2" in
3302 '[A-Z][a-z]') exec $tr '$up' '$low';;
3303 '[a-z][A-Z]') exec $tr '$low' '$up';;
3304 esac
3305 exec $tr "\$@"
3306 EOSC
3307 chmod +x tr
3308 $eunicefix tr
3309
3310 : Try to determine whether config.sh was made on this system
3311 case "$config_sh" in
3312 '')
3313 myuname=`$uname -a 2>/dev/null`
3314 $test -z "$myuname" && myuname=`hostname 2>/dev/null`
3315 # Downcase everything to avoid ambiguity.
3316 # Remove slashes and single quotes so we can use parts of this in
3317 # directory and file names.
3318 # Remove newlines so myuname is sane to use elsewhere.
3319 # tr '[A-Z]' '[a-z]' would not work in EBCDIC
3320 # because the A-Z/a-z are not consecutive.
3321 myuname=`echo $myuname | $sed -e "s,['/],,g" | \
3322         ./tr '[A-Z]' '[a-z]' | $tr $trnl ' '`
3323 newmyuname="$myuname"
3324 dflt=n
3325 case "$knowitall" in
3326 '')
3327         if test -f ../config.sh; then
3328                 if $contains myuname= ../config.sh >/dev/null 2>&1; then
3329                         eval "`grep myuname= ../config.sh`"
3330                 fi
3331                 if test "X$myuname" = "X$newmyuname"; then
3332                         dflt=y
3333                 fi
3334         fi
3335         ;;
3336 *) dflt=y;;
3337 esac
3338
3339 : Get old answers from old config file if Configure was run on the
3340 : same system, otherwise use the hints.
3341 hint=default
3342 cd ..
3343 if test -f config.sh; then
3344         echo " "
3345         rp="I see a config.sh file.  Shall I use it to set the defaults?"
3346         . UU/myread
3347         case "$ans" in
3348         n*|N*) echo "OK, I'll ignore it."
3349                 mv config.sh config.sh.old
3350                 myuname="$newmyuname"
3351                 ;;
3352         *)  echo "Fetching default answers from your old config.sh file..." >&4
3353                 tmp_n="$n"
3354                 tmp_c="$c"
3355                 tmp_sh="$sh"
3356                 . ./config.sh
3357                 cp config.sh UU
3358                 n="$tmp_n"
3359                 c="$tmp_c"
3360                 : Older versions did not always set $sh.  Catch re-use of such
3361                 : an old config.sh.
3362                 case "$sh" in
3363                 '') sh="$tmp_sh" ;;
3364                 esac
3365                 hint=previous
3366                 ;;
3367         esac
3368 fi
3369 . ./UU/checkcc
3370 if test ! -f config.sh; then
3371         $cat <<EOM
3372
3373 First time through, eh?  I have some defaults handy for some systems
3374 that need some extra help getting the Configure answers right:
3375
3376 EOM
3377         (cd $src/hints; ls -C *.sh) | $sed 's/\.sh/   /g' >&4
3378         dflt=''
3379         : Half the following guesses are probably wrong... If you have better
3380         : tests or hints, please send them to perlbug@perl.org
3381         : The metaconfig authors would also appreciate a copy...
3382         $test -f /irix && osname=irix
3383         $test -f /xenix && osname=sco_xenix
3384         $test -f /dynix && osname=dynix
3385         $test -f /dnix && osname=dnix
3386         $test -f /lynx.os && osname=lynxos
3387         $test -f /unicos && osname=unicos && osvers=`$uname -r`
3388         $test -f /unicosmk && osname=unicosmk && osvers=`$uname -r`
3389         $test -f /unicosmk.ar && osname=unicosmk && osvers=`$uname -r`
3390         $test -f /bin/mips && /bin/mips && osname=mips
3391         $test -d /usr/apollo/bin && osname=apollo
3392         $test -f /etc/saf/_sactab && osname=svr4
3393         $test -d /usr/include/minix && osname=minix && osvers=`$uname -r`
3394         $test -f /system/gnu_library/bin/ar.pm && osname=vos
3395         $test -f /sys/utilities/MultiView && osname=amigaos
3396         if $test -d /MachTen -o -d /MachTen_Folder; then
3397                 osname=machten
3398                 if $test -x /sbin/version; then
3399                         osvers=`/sbin/version | $awk '{print $2}' |
3400                         $sed -e 's/[A-Za-z]$//'`
3401                 elif $test -x /usr/etc/version; then
3402                         osvers=`/usr/etc/version | $awk '{print $2}' |
3403                         $sed -e 's/[A-Za-z]$//'`
3404                 else
3405                         osvers="$2.$3"
3406                 fi
3407         fi
3408
3409         $test -f /sys/posix.dll &&
3410                 $test -f /usr/bin/what &&
3411                 set X `/usr/bin/what /sys/posix.dll` &&
3412                 $test "$3" = UWIN &&
3413                 osname=uwin &&
3414                 osvers="$5"
3415
3416         if $test -f $uname; then
3417                 set X $myuname
3418                 shift
3419
3420                 case "$5" in
3421                 fps*) osname=fps ;;
3422                 mips*)
3423                         case "$4" in
3424                         umips) osname=umips ;;
3425                         *) osname=mips ;;
3426                         esac;;
3427                 [23]100) osname=mips ;;
3428                 i386*)
3429                         tmp=`/bin/uname -X 2>/dev/null|awk '/3\.2v[45]/{ print $(NF) }'`
3430                         if $test "$tmp" != "" -a "$3" = "3.2" -a -f '/etc/systemid'; then
3431                                 osname='sco'
3432                                 osvers=$tmp
3433                         elif $test -f /etc/kconfig; then
3434                                 osname=isc
3435                                 if test "$lns" = "$ln -s"; then
3436                                         osvers=4
3437                                 elif $contains _SYSV3 /usr/include/stdio.h > /dev/null 2>&1 ; then
3438                                         osvers=3
3439                                 elif $contains _POSIX_SOURCE /usr/include/stdio.h > /dev/null 2>&1 ; then
3440                                         osvers=2
3441                                 fi
3442                         fi
3443                         tmp=''
3444                         ;;
3445                 pc*)
3446                         if test -n "$DJGPP"; then
3447                                 osname=dos
3448                                 osvers=djgpp
3449                         fi
3450                         ;;
3451                 esac
3452
3453                 case "$1" in
3454                 aix) osname=aix
3455                         tmp=`( (oslevel) 2>/dev/null || echo "not found") 2>&1`
3456                         case "$tmp" in
3457                         # oslevel can fail with:
3458                         # oslevel: Unable to acquire lock.
3459                         *not\ found) osvers="$4"."$3" ;;
3460                         '<3240'|'<>3240') osvers=3.2.0 ;;
3461                         '=3240'|'>3240'|'<3250'|'<>3250') osvers=3.2.4 ;;
3462                         '=3250'|'>3250') osvers=3.2.5 ;;
3463                         *) osvers=$tmp;;
3464                         esac
3465                         ;;
3466                 bitrig) osname=bitrig
3467                         osvers="$3"
3468                         ;;
3469                 bsd386) osname=bsd386
3470                         osvers=`$uname -r`
3471                         ;;
3472                 cygwin*) osname=cygwin
3473                         osvers="$3"
3474                         ;;
3475                 *dc.osx) osname=dcosx
3476                         osvers="$3"
3477                         ;;
3478                 dnix) osname=dnix
3479                         osvers="$3"
3480                         ;;
3481                 domainos) osname=apollo
3482                         osvers="$3"
3483                         ;;
3484                 dgux)   osname=dgux
3485                         osvers="$3"
3486                         ;;
3487                 dragonfly) osname=dragonfly
3488                         osvers="$3"
3489                         ;;
3490                 dynixptx*) osname=dynixptx
3491                         osvers=`echo "$4"|sed 's/^v//'`
3492                         ;;
3493                 freebsd) osname=freebsd
3494                         osvers="$3" ;;
3495                 genix)  osname=genix ;;
3496                 gnu)    osname=gnu
3497                         osvers="$3" ;;
3498                 hp*)    osname=hpux
3499                         osvers=`echo "$3" | $sed 's,.*\.\([0-9]*\.[0-9]*\),\1,'`
3500                         ;;
3501                 irix*)  osname=irix
3502                         case "$3" in
3503                         4*) osvers=4 ;;
3504                         5*) osvers=5 ;;
3505                         *)      osvers="$3" ;;
3506                         esac
3507                         ;;
3508                 linux)  osname=linux
3509                         case "$3" in
3510                         *)      osvers="$3" ;;
3511                         esac
3512                         $test -f /system/lib/libandroid.so && osname=linux-android
3513                         ;;
3514                 MiNT)   osname=mint
3515                         ;;
3516                 netbsd*) osname=netbsd
3517                         osvers="$3"
3518                         ;;
3519                 news-os) osvers="$3"
3520                         case "$3" in
3521                         4*) osname=newsos4 ;;
3522                         *) osname=newsos ;;
3523                         esac
3524                         ;;
3525                 nonstop-ux) osname=nonstopux ;;
3526                 openbsd) osname=openbsd
3527                         osvers="$3"
3528                         ;;
3529                 os2)    osname=os2
3530                         osvers="$4"
3531                         ;;
3532                 POSIX-BC | posix-bc ) osname=posix-bc
3533                         osvers="$3"
3534                         ;;
3535                 powerux | power_ux | powermax_os | powermaxos | \
3536                 powerunix | power_unix) osname=powerux
3537                         osvers="$3"
3538                         ;;
3539                 qnx) osname=qnx
3540                         osvers="$4"
3541                         ;;
3542                 solaris) osname=solaris
3543                         case "$3" in
3544                         5*) osvers=`echo $3 | $sed 's/^5/2/g'` ;;
3545                         *)      osvers="$3" ;;
3546                         esac
3547                         ;;
3548                 sunos) osname=sunos
3549                         case "$3" in
3550                         5*) osname=solaris
3551                                 osvers=`echo $3 | $sed 's/^5/2/g'` ;;
3552                         *)      osvers="$3" ;;
3553                         esac
3554                         ;;
3555                 titanos) osname=titanos
3556                         case "$3" in
3557                         1*) osvers=1 ;;
3558                         2*) osvers=2 ;;
3559                         3*) osvers=3 ;;
3560                         4*) osvers=4 ;;
3561                         *)      osvers="$3" ;;
3562                         esac
3563                         ;;
3564                 ultrix) osname=ultrix
3565                         osvers="$3"
3566                         ;;
3567                 osf1|mls+)      case "$5" in
3568                                 alpha)
3569                                         osname=dec_osf
3570                                         osvers=`sizer -v | awk -FUNIX '{print $2}' | awk '{print $1}' |  tr '[A-Z]' '[a-z]' | sed 's/^[xvt]//'`
3571                                         case "$osvers" in
3572                                         [1-9].[0-9]*) ;;
3573                                         *) osvers=`echo "$3" | sed 's/^[xvt]//'` ;;
3574                                         esac
3575                                         ;;
3576                         hp*)    osname=hp_osf1  ;;
3577                         mips)   osname=mips_osf1 ;;
3578                         esac
3579                         ;;
3580                 # UnixWare 7.1.2 is known as Open UNIX 8
3581                 openunix|unixware) osname=svr5
3582                         osvers="$4"
3583                         ;;
3584                 uts)    osname=uts
3585                         osvers="$3"
3586                         ;;
3587                 vos) osvers="$3"
3588                         ;;
3589                 $2) case "$osname" in
3590                         *isc*) ;;
3591                         *freebsd*) ;;
3592                         svr*)
3593                                 : svr4.x or possibly later
3594                                 case "svr$3" in
3595                                 ${osname}*)
3596                                         osname=svr$3
3597                                         osvers=$4
3598                                         ;;
3599                                 esac
3600                                 case "$osname" in
3601                                 svr4.0)
3602                                         : Check for ESIX
3603                                         if test -f /stand/boot ; then
3604                                                 eval `grep '^INITPROG=[a-z/0-9]*$' /stand/boot`
3605                                                 if test -n "$INITPROG" -a -f "$INITPROG"; then
3606                         isesix=`strings -a $INITPROG|grep 'ESIX SYSTEM V/386 Release 4.0'`
3607                                                         if test -n "$isesix"; then
3608                                                                 osname=esix4
3609                                                         fi
3610                                                 fi
3611                                         fi
3612                                         ;;
3613                                 esac
3614                                 ;;
3615                         *)      if test -f /etc/systemid; then
3616                                         osname=sco
3617                                         set `echo $3 | $sed 's/\./ /g'` $4
3618                                         if $test -f $src/hints/sco_$1_$2_$3.sh; then
3619                                                 osvers=$1.$2.$3
3620                                         elif $test -f $src/hints/sco_$1_$2.sh; then
3621                                                 osvers=$1.$2
3622                                         elif $test -f $src/hints/sco_$1.sh; then
3623                                                 osvers=$1
3624                                         fi
3625                                 else
3626                                         case "$osname" in
3627                                         '') : Still unknown.  Probably a generic Sys V.
3628                                                 osname="sysv"
3629                                                 osvers="$3"
3630                                                 ;;
3631                                         esac
3632                                 fi
3633                                 ;;
3634                         esac
3635                         ;;
3636                 *)      case "$osname" in
3637                         '') : Still unknown.  Probably a generic BSD.
3638                                 osname="$1"
3639                                 osvers="$3"
3640                                 ;;
3641                         esac
3642                         ;;
3643                 esac
3644         else
3645                 if test -f /vmunix -a -f $src/hints/news_os.sh; then
3646                         (what /vmunix | UU/tr '[A-Z]' '[a-z]') > UU/kernel.what 2>&1
3647                         if $contains news-os UU/kernel.what >/dev/null 2>&1; then
3648                                 osname=news_os
3649                         fi
3650                         $rm -f UU/kernel.what
3651                 elif test -d c:/. -o -n "$is_os2" ; then
3652                         set X $myuname
3653                         osname=os2
3654                         osvers="$5"
3655                 fi
3656         fi
3657
3658         case "$targetarch" in
3659         '') ;;
3660         *)  hostarch=$osname
3661             case "$targetarch" in
3662                 nto*|*-nto-*)
3663                     # Will load qnx.sh, which should change osname to nto
3664                     osname=qnx
3665                     osvers=''
3666                     ;;
3667                 *linux-android*)
3668                     # Catch arm-linux-androideabi, mipsel-linux-android,
3669                     # and i686-linux-android
3670                     osname=linux-android
3671                     osvers=''
3672                     ;;
3673                 *linux*)
3674                     # Something like arm-linux-gnueabihf is really just
3675                     # plain linux.
3676                     osname=linux
3677                     osvers=''
3678                     ;;
3679                 *solaris*|*sunos*)
3680                     osname=solaris
3681                     # XXX perhaps we should just assume
3682                     # osvers to be 2, or maybe take the value
3683                     # from targetarch. Using $run before the
3684                     # hints are run is somewhat icky.
3685                     set X `$run $uname -a 2>/dev/null`
3686                     shift
3687                     case "$3" in
3688                         5*) osvers=`echo $3 | $sed 's/^5/2/g'` ;;
3689                         *)  osvers="$3" ;;
3690                     esac
3691                     ;;
3692                 *)
3693                     osname=`echo $targetarch|sed 's,^[^-]*-,,'`
3694                     osvers=''
3695                 ;;
3696             esac
3697             ;;
3698         esac
3699
3700         : Now look for a hint file osname_osvers, unless one has been
3701         : specified already.
3702         case "$hintfile" in
3703         ''|' ')
3704                 file=`echo "${osname}_${osvers}" | $sed -e 's%\.%_%g' -e 's%_$%%'`
3705                 : Also try without trailing minor version numbers.
3706                 xfile=`echo $file | $sed -e 's%_[^_]*$%%'`
3707                 xxfile=`echo $xfile | $sed -e 's%_[^_]*$%%'`
3708                 xxxfile=`echo $xxfile | $sed -e 's%_[^_]*$%%'`
3709                 xxxxfile=`echo $xxxfile | $sed -e 's%_[^_]*$%%'`
3710                 case "$file" in
3711                 '') dflt=none ;;
3712                 *)  case "$osvers" in
3713                         '') dflt=$file
3714                                 ;;
3715                         *)  if $test -f $src/hints/$file.sh ; then
3716                                         dflt=$file
3717                                 elif $test -f $src/hints/$xfile.sh ; then
3718                                         dflt=$xfile
3719                                 elif $test -f $src/hints/$xxfile.sh ; then
3720                                         dflt=$xxfile
3721                                 elif $test -f $src/hints/$xxxfile.sh ; then
3722                                         dflt=$xxxfile
3723                                 elif $test -f $src/hints/$xxxxfile.sh ; then
3724                                         dflt=$xxxxfile
3725                                 elif $test -f "$src/hints/${osname}.sh" ; then
3726                                         dflt="${osname}"
3727                                 else
3728                                         dflt=none
3729                                 fi
3730                                 ;;
3731                         esac
3732                         ;;
3733                 esac
3734                 if $test -f Policy.sh ; then
3735                         case "$dflt" in
3736                         *Policy*) ;;
3737                         none) dflt="Policy" ;;
3738                         *) dflt="Policy $dflt" ;;
3739                         esac
3740                 fi
3741                 ;;
3742         *)
3743                 dflt=`echo $hintfile | $sed 's/\.sh$//'`
3744                 ;;
3745         esac
3746
3747         if $test -f Policy.sh ; then
3748                 $cat <<EOM
3749
3750 There's also a Policy hint file available, which should make the
3751 site-specific (policy) questions easier to answer.
3752 EOM
3753
3754         fi
3755
3756         $cat <<EOM
3757
3758 You may give one or more space-separated answers, or "none" if appropriate.
3759 If you have a handcrafted Policy.sh file or a Policy.sh file generated by a
3760 previous run of Configure, you may specify it as well as or instead of
3761 OS-specific hints.  If hints are provided for your OS, you should use them:
3762 although Perl can probably be built without hints on many platforms, using
3763 hints often improve performance and may enable features that Configure can't
3764 set up on its own. If there are no hints that match your OS, specify "none";
3765 DO NOT give a wrong version or a wrong OS.
3766
3767 EOM
3768
3769         rp="Which of these apply, if any?"
3770         . UU/myread
3771         tans=$ans
3772         for file in $tans; do
3773                 if $test X$file = XPolicy -a -f Policy.sh; then
3774                         . Policy.sh
3775                         $cat Policy.sh >> UU/config.sh
3776                 elif $test -f $src/hints/$file.sh; then
3777                         . $src/hints/$file.sh
3778                         $cat $src/hints/$file.sh >> UU/config.sh
3779                 elif $test X"$tans" = X -o X"$tans" = Xnone ; then
3780                         : nothing
3781                 else
3782                         : Give one chance to correct a possible typo.
3783                         echo "$file.sh does not exist"
3784                         dflt=$file
3785                         rp="hint to use instead?"
3786                         . UU/myread
3787                         for file in $ans; do
3788                                 if $test -f "$src/hints/$file.sh"; then
3789                                         . $src/hints/$file.sh
3790                                         $cat $src/hints/$file.sh >> UU/config.sh
3791                                 elif $test X$ans = X -o X$ans = Xnone ; then
3792                                         : nothing
3793                                 else
3794                                         echo "$file.sh does not exist -- ignored."
3795                                 fi
3796                         done
3797                 fi
3798         done
3799
3800         hint=recommended
3801         : Remember our hint file for later.
3802         if $test -f "$src/hints/$file.sh" ; then
3803                 hintfile="$file"
3804         else
3805                 hintfile=''
3806         fi
3807 fi
3808 cd UU
3809 ;;
3810 *)
3811         echo " "
3812         echo "Fetching default answers from $config_sh..." >&4
3813         tmp_n="$n"
3814         tmp_c="$c"
3815         cd ..
3816         cp $config_sh config.sh 2>/dev/null
3817         chmod +w config.sh
3818         . ./config.sh
3819         cd UU
3820         cp ../config.sh .
3821         n="$tmp_n"
3822         c="$tmp_c"
3823         hint=previous
3824         ;;
3825 esac
3826 . ./optdef.sh
3827
3828 : Restore computed paths
3829 for file in $loclist $trylist; do
3830         eval $file="\$_$file"
3831 done
3832
3833 cat << EOM
3834
3835 Configure uses the operating system name and version to set some defaults.
3836 The default value is probably right if the name rings a bell. Otherwise,
3837 since spelling matters for me, either accept the default or answer "none"
3838 to leave it blank.
3839
3840 EOM
3841 case "$osname" in
3842         ''|' ')
3843                 case "$hintfile" in
3844                 ''|' '|none) dflt=none ;;
3845                 *)  dflt=`echo $hintfile | $sed -e 's/\.sh$//' -e 's/_.*$//'` ;;
3846                 esac
3847                 ;;
3848         *) dflt="$osname" ;;
3849 esac
3850 rp="Operating system name?"
3851 . ./myread
3852 case "$ans" in
3853 none)  osname='' ;;
3854 *) osname=`echo "$ans" | $sed -e 's/[   ][      ]*/_/g' | ./tr '[A-Z]' '[a-z]'`;;
3855 esac
3856 echo " "
3857 case "$osvers" in
3858         ''|' ')
3859                 case "$hintfile" in
3860                 ''|' '|none) dflt=none ;;
3861                 *)      dflt=`echo $hintfile | $sed -e 's/\.sh$//' -e 's/^[^_]*//'`
3862                         dflt=`echo $dflt | $sed -e 's/^_//' -e 's/_/./g'`
3863                         case "$dflt" in
3864                         ''|' ') dflt=none ;;
3865                         esac
3866                         ;;
3867                 esac
3868                 ;;
3869         *) dflt="$osvers" ;;
3870 esac
3871 rp="Operating system version?"
3872 . ./myread
3873 case "$ans" in
3874 none)  osvers='' ;;
3875 *) osvers="$ans" ;;
3876 esac
3877
3878
3879 . ./posthint.sh
3880
3881 : who configured the system
3882 cf_time=`LC_ALL=C; LANGUAGE=C; export LC_ALL; export LANGUAGE; $date 2>&1`
3883 case "$cf_by" in
3884 "")
3885         cf_by=`(logname) 2>/dev/null`
3886         case "$cf_by" in
3887         "")
3888                 cf_by=`(whoami) 2>/dev/null`
3889                 case "$cf_by" in
3890                 "") cf_by=unknown ;;
3891                 esac ;;
3892         esac ;;
3893 esac
3894
3895 : decide how portable to be.  Allow command line overrides.
3896 case "$d_portable" in
3897 "$undef") ;;
3898 *)      d_portable="$define" ;;
3899 esac
3900
3901 : set up shell script to do ~ expansion
3902 cat >filexp <<EOSS
3903 $startsh
3904 : expand filename
3905 case "\$1" in
3906  \~/*|\~)
3907         echo \$1 | $sed "s|~|\${HOME-\$LOGDIR}|"
3908         ;;
3909  \~*)
3910         if $test -f /bin/csh; then
3911                 /bin/csh -f -c "glob \$1"
3912                 failed=\$?
3913                 echo ""
3914                 exit \$failed
3915         else
3916                 name=\`$expr x\$1 : '..\([^/]*\)'\`
3917                 dir=\`$sed -n -e "/^\${name}:/{s/^[^:]*:[^:]*:[^:]*:[^:]*:[^:]*:\([^:]*\).*"'\$'"/\1/" -e p -e q -e '}' </etc/passwd\`
3918                 if $test ! -d "\$dir"; then
3919                         me=\`basename \$0\`
3920                         echo "\$me: can't locate home directory for: \$name" >&2
3921                         exit 1
3922                 fi
3923                 case "\$1" in
3924                 */*)
3925                         echo \$dir/\`$expr x\$1 : '..[^/]*/\(.*\)'\`
3926                         ;;
3927                 *)
3928                         echo \$dir
3929                         ;;
3930                 esac
3931         fi
3932         ;;
3933 *)
3934         echo \$1
3935         ;;
3936 esac
3937 EOSS
3938 chmod +x filexp
3939 $eunicefix filexp
3940
3941 : now set up to get a file name
3942 cat <<EOS >getfile
3943 $startsh
3944 EOS
3945 cat <<'EOSC' >>getfile
3946 tilde=''
3947 fullpath=''
3948 already=''
3949 skip=''
3950 none_ok=''
3951 exp_file=''
3952 nopath_ok=''
3953 orig_rp="$rp"
3954 orig_dflt="$dflt"
3955 case "$gfpth" in
3956 '') gfpth='.' ;;
3957 esac
3958
3959 case "$fn" in
3960 *\(*)
3961         : getfile will accept an answer from the comma-separated list
3962         : enclosed in parentheses even if it does not meet other criteria.
3963         expr "$fn" : '.*(\(.*\)).*' | $tr ',' $trnl >getfile.ok
3964         fn=`echo $fn | sed 's/(.*)//'`
3965         ;;
3966 esac
3967
3968 case "$fn" in
3969 *:*)
3970         loc_file=`expr $fn : '.*:\(.*\)'`
3971         fn=`expr $fn : '\(.*\):.*'`
3972         ;;
3973 esac
3974
3975 case "$fn" in
3976 *~*) tilde=true;;
3977 esac
3978 case "$fn" in
3979 */*) fullpath=true;;
3980 esac
3981 case "$fn" in
3982 *+*) skip=true;;
3983 esac
3984 case "$fn" in
3985 *n*) none_ok=true;;
3986 esac
3987 case "$fn" in
3988 *e*) exp_file=true;;
3989 esac
3990 case "$fn" in
3991 *p*) nopath_ok=true;;
3992 esac
3993
3994 case "$fn" in
3995 *f*) type='File';;
3996 *d*) type='Directory';;
3997 *l*) type='Locate';;
3998 esac
3999
4000 what="$type"
4001 case "$what" in
4002 Locate) what='File';;
4003 esac
4004
4005 case "$exp_file" in
4006 '')
4007         case "$d_portable" in
4008         "$define") ;;
4009         *) exp_file=true;;
4010         esac
4011         ;;
4012 esac
4013
4014 cd ..
4015 while test "$type"; do
4016         redo=''
4017         rp="$orig_rp"
4018         dflt="$orig_dflt"
4019         case "$tilde" in
4020         true) rp="$rp (~name ok)";;
4021         esac
4022         . UU/myread
4023         if test -f UU/getfile.ok && \
4024                 $contains "^$ans\$" UU/getfile.ok >/dev/null 2>&1
4025         then
4026                 value="$ans"
4027                 ansexp="$ans"
4028                 break
4029         fi
4030         case "$ans" in
4031         none)
4032                 value=''
4033                 ansexp=''
4034                 case "$none_ok" in
4035                 true) type='';;
4036                 esac
4037                 ;;
4038         *)
4039                 case "$tilde" in
4040                 '') value="$ans"
4041                         ansexp="$ans";;
4042                 *)
4043                         value=`UU/filexp $ans`
4044                         case $? in
4045                         0)
4046                                 if test "$ans" != "$value"; then
4047                                         echo "(That expands to $value on this system.)"
4048                                 fi
4049                                 ;;
4050                         *) value="$ans";;
4051                         esac
4052                         ansexp="$value"
4053                         case "$exp_file" in
4054                         '') value="$ans";;
4055                         esac
4056                         ;;
4057                 esac
4058                 case "$fullpath" in
4059                 true)
4060                         case "$ansexp" in
4061                         /*) value="$ansexp" ;;
4062                         [a-zA-Z]:/*) value="$ansexp" ;;
4063                         *)
4064                                 redo=true
4065                                 case "$already" in
4066                                 true)
4067                                 echo "I shall only accept a full path name, as in /bin/ls." >&4
4068                                 echo "Use a ! shell escape if you wish to check pathnames." >&4
4069                                         ;;
4070                                 *)
4071                                 echo "Please give a full path name, starting with slash." >&4
4072                                         case "$tilde" in
4073                                         true)
4074                                 echo "Note that using ~name is ok provided it expands well." >&4
4075                                                 already=true
4076                                                 ;;
4077                                         esac
4078                                 esac
4079                                 ;;
4080                         esac
4081                         ;;
4082                 esac
4083                 case "$redo" in
4084                 '')
4085                         case "$type" in
4086                         File)
4087                                 for fp in $gfpth; do
4088                                         if test "X$fp" = X.; then
4089                                             pf="$ansexp"
4090                                         else    
4091                                             pf="$fp/$ansexp"
4092                                         fi
4093                                         if test -f "$pf"; then
4094                                                 type=''
4095                                         elif test -r "$pf" || (test -h "$pf") >/dev/null 2>&1
4096                                         then
4097                                                 echo "($value is not a plain file, but that's ok.)"
4098                                                 type=''
4099                                         fi
4100                                         if test X"$type" = X; then
4101                                             value="$pf"
4102                                             break
4103                                         fi
4104                                 done
4105                                 ;;
4106                         Directory)
4107                                 for fp in $gfpth; do
4108                                         if test "X$fp" = X.; then
4109                                             dir="$ans"
4110                                             direxp="$ansexp"
4111                                         else    
4112                                             dir="$fp/$ansexp"
4113                                             direxp="$fp/$ansexp"
4114                                         fi
4115                                         if test -d "$direxp"; then
4116                                                 type=''
4117                                                 value="$dir"
4118                                                 break
4119                                         fi
4120                                 done
4121                                 ;;
4122                         Locate)
4123                                 if test -d "$ansexp"; then
4124                                         echo "(Looking for $loc_file in directory $value.)"
4125                                         value="$value/$loc_file"
4126                                         ansexp="$ansexp/$loc_file"
4127                                 fi
4128                                 if test -f "$ansexp"; then
4129                                         type=''
4130                                 fi
4131                                 case "$nopath_ok" in
4132                                 true)   case "$value" in
4133                                         */*) ;;
4134                                         *)      echo "Assuming $value will be in people's path."
4135                                                 type=''
4136                                                 ;;
4137                                         esac
4138                                         ;;
4139                                 esac
4140                                 ;;
4141                         esac
4142
4143                         case "$skip" in
4144                         true) type='';
4145                         esac
4146
4147                         case "$type" in
4148                         '') ;;
4149                         *)
4150                                 if test "$fastread" = yes; then
4151                                         dflt=y
4152                                 else
4153                                         dflt=n
4154                                 fi
4155                                 rp="$what $value doesn't exist.  Use that name anyway?"
4156                                 . UU/myread
4157                                 dflt=''
4158                                 case "$ans" in
4159                                 y*) type='';;
4160                                 *) echo " ";;
4161                                 esac
4162                                 ;;
4163                         esac
4164                         ;;
4165                 esac
4166                 ;;
4167         esac
4168 done
4169 cd UU
4170 ans="$value"
4171 rp="$orig_rp"
4172 dflt="$orig_dflt"
4173 rm -f getfile.ok
4174 test "X$gfpthkeep" != Xy && gfpth=""
4175 EOSC
4176
4177 : determine root of directory hierarchy where package will be installed.
4178 case "$prefix" in
4179 '')
4180         dflt=`./loc . /usr/local /usr/local /local /opt /usr`
4181         ;;
4182 *?/)
4183         dflt=`echo "$prefix" | sed 's/.$//'`
4184         ;;
4185 *)
4186         dflt="$prefix"
4187         ;;
4188 esac
4189 $cat <<EOM
4190
4191 By default, $package will be installed in $dflt/bin, manual pages
4192 under $dflt/man, etc..., i.e. with $dflt as prefix for all
4193 installation directories. Typically this is something like /usr/local.
4194 If you wish to have binaries under /usr/bin but other parts of the
4195 installation under /usr/local, that's ok: you will be prompted
4196 separately for each of the installation directories, the prefix being
4197 only used to set the defaults.
4198
4199 EOM
4200 fn=d~
4201 rp='Installation prefix to use?'
4202 . ./getfile
4203 oldprefix=''
4204 case "$prefix" in
4205 '') ;;
4206 *)
4207         case "$ans" in
4208         "$prefix") ;;
4209         *) oldprefix="$prefix";;
4210         esac
4211         ;;
4212 esac
4213 prefix="$ans"
4214 prefixexp="$ansexp"
4215
4216 : allow them to override the AFS root
4217 case "$afsroot" in
4218 '')     afsroot=/afs ;;
4219 *)      afsroot=$afsroot ;;
4220 esac
4221
4222 : is AFS running?
4223 echo " "
4224 case "$afs" in
4225 $define|true)   afs=true ;;
4226 $undef|false)   afs=false ;;
4227 *)      if $test -d $afsroot; then
4228                 afs=true
4229         else
4230                 afs=false
4231         fi
4232         ;;
4233 esac
4234 if $afs; then
4235         echo "AFS may be running... I'll be extra cautious then..." >&4
4236 else
4237         echo "AFS does not seem to be running..." >&4
4238 fi
4239
4240 : determine installation prefix for where package is to be installed.
4241 if $afs; then
4242 $cat <<EOM
4243
4244 Since you are running AFS, I need to distinguish the directory in which
4245 files will reside from the directory in which they are installed (and from
4246 which they are presumably copied to the former directory by occult means).
4247
4248 EOM
4249         case "$installprefix" in
4250         '') dflt=`echo $prefix | sed 's#^/afs/#/afs/.#'`;;
4251         *) dflt="$installprefix";;
4252         esac
4253 else
4254 $cat <<EOM
4255
4256 In some special cases, particularly when building $package for distribution,
4257 it is convenient to distinguish the directory in which files should be
4258 installed from the directory ($prefix) in which they will
4259 eventually reside.  For most users, these two directories are the same.
4260
4261 EOM
4262         case "$installprefix" in
4263         '') dflt=$prefix ;;
4264         *) dflt=$installprefix;;
4265         esac
4266 fi
4267 fn=d~
4268 rp='What installation prefix should I use for installing files?'
4269 . ./getfile
4270 installprefix="$ans"
4271 installprefixexp="$ansexp"
4272
4273 : Perform the prefixexp/installprefixexp correction if necessary
4274 cat <<EOS >installprefix
4275 $startsh
4276 EOS
4277 cat <<'EOSC' >>installprefix
4278 : Change installation prefix, if necessary.
4279 if $test X"$prefix" != X"$installprefix"; then
4280     eval "install${prefixvar}=\`echo \$${prefixvar}exp | sed \"s#^\$prefixexp#\$installprefixexp#\"\`"
4281 else
4282     eval "install${prefixvar}=\"\$${prefixvar}exp\""
4283 fi
4284 EOSC
4285 chmod +x installprefix
4286 $eunicefix installprefix
4287
4288 : Set variables such as privlib and privlibexp from the output of ./getfile
4289 : performing the prefixexp/installprefixexp correction if necessary.
4290 cat <<EOS >setprefixvar
4291 $startsh
4292 EOS
4293 cat <<'EOSC' >>setprefixvar
4294 eval "${prefixvar}=\"\$ans\""
4295 eval "${prefixvar}exp=\"\$ansexp\""
4296 . ./installprefix
4297 EOSC
4298 chmod +x setprefixvar
4299 $eunicefix setprefixvar
4300
4301 : set up the script used to warn in case of inconsistency
4302 cat <<EOS >whoa
4303 $startsh
4304 EOS
4305 cat <<'EOSC' >>whoa
4306 dflt=y
4307 case "$hint" in
4308     recommended)
4309         case "$hintfile" in
4310         '')     echo "The $hint value for \$$var on this machine was \"$was\"!" >&4
4311                 ;;
4312         *)      echo "Hmm.  Based on the hints in hints/$hintfile.sh, " >&4
4313                 echo "the $hint value for \$$var on this machine was \"$was\"!" >&4
4314                 ;;
4315         esac
4316         ;;
4317     *)  echo " "
4318         echo "*** WHOA THERE!!! ***" >&4
4319         echo "    The $hint value for \$$var on this machine was \"$was\"!" >&4
4320         ;;
4321 esac
4322 rp="    Keep the $hint value?"
4323 . ./myread
4324 case "$ans" in
4325 y) td=$was; tu=$was;;
4326 esac
4327 EOSC
4328
4329 : function used to set '$1' to '$val'
4330 setvar='var=$1; eval "was=\$$1"; td=$define; tu=$undef;
4331 case "$val$was" in
4332 $define$undef) . ./whoa; eval "$var=\$td";;
4333 $undef$define) . ./whoa; eval "$var=\$tu";;
4334 *) eval "$var=$val";;
4335 esac'
4336
4337 : get the patchlevel
4338 echo " "
4339 echo "Getting the current patchlevel..." >&4
4340 if $test -r $rsrc/patchlevel.h;then
4341         revision=`awk '/define[         ]+PERL_REVISION/ {print $3}' $rsrc/patchlevel.h`
4342         patchlevel=`awk '/define[       ]+PERL_VERSION/ {print $3}' $rsrc/patchlevel.h`
4343         subversion=`awk '/define[       ]+PERL_SUBVERSION/ {print $3}' $rsrc/patchlevel.h`
4344         api_revision=`awk '/define[     ]+PERL_API_REVISION/ {print $3}' $rsrc/patchlevel.h`
4345         api_version=`awk '/define[      ]+PERL_API_VERSION/ {print $3}' $rsrc/patchlevel.h`
4346         api_subversion=`awk '/define[   ]+PERL_API_SUBVERSION/ {print $3}' $rsrc/patchlevel.h`
4347         perl_patchlevel=`egrep ',"(MAINT|SMOKE)[0-9][0-9]*"' $rsrc/patchlevel.h|tail -1|sed 's/[^0-9]//g'`
4348 else
4349         revision=0
4350         patchlevel=0
4351         subversion=0
4352         api_revision=0
4353         api_version=0
4354         api_subversion=0
4355         perl_patchlevel=0
4356         $echo "(You do not have patchlevel.h.  Eek.)"
4357 fi
4358 : Define a handy string here to avoid duplication in myconfig.SH and configpm.
4359 version_patchlevel_string="version $patchlevel subversion $subversion"
4360 case "$perl_patchlevel" in
4361 0|'') ;;
4362 *)  perl_patchlevel=`echo $perl_patchlevel | sed 's/.* //'`
4363     version_patchlevel_string="$version_patchlevel_string patch $perl_patchlevel"
4364     ;;
4365 esac
4366
4367 $echo "(You have $package $version_patchlevel_string.)"
4368
4369 case "$osname" in
4370 dos|vms)
4371         : XXX Should be a Configure test for double-dots in filenames.
4372         version=`echo $revision $patchlevel $subversion | \
4373                  $awk '{ printf "%d_%d_%d", $1, $2, $3 }'`
4374         api_versionstring=`echo $api_revision $api_version $api_subversion | \
4375                  $awk '{ printf "%d_%d_%d", $1, $2, $3 }'`
4376         ;;
4377 *)
4378         version=`echo $revision $patchlevel $subversion | \
4379                  $awk '{ printf "%d.%d.%d", $1, $2, $3 }'`
4380         api_versionstring=`echo $api_revision $api_version $api_subversion | \
4381                  $awk '{ printf "%d.%d.%d", $1, $2, $3 }'`
4382         ;;
4383 esac
4384 : Special case the 5.005_xx maintenance series, which used 5.005
4385 : without any subversion label as a subdirectory in $sitelib
4386 if test "${api_revision}${api_version}${api_subversion}" = "550"; then
4387         api_versionstring='5.005'
4388 fi
4389
4390 : Do we want threads support and if so, what type
4391 case "$usethreads" in
4392 $define|true|[yY]*)     dflt='y';;
4393 *)     # Catch case where user specified ithreads or 5005threads but
4394        # forgot -Dusethreads (A.D. 4/2002)
4395        case "$useithreads$use5005threads" in
4396        *$define*)       dflt='y';;
4397        *)               dflt='n';;
4398        esac
4399        ;;
4400 esac
4401 cat <<EOM
4402
4403 Perl can be built to offer a form of threading support on some systems
4404 To do so, Configure can be run with -Dusethreads.
4405
4406 Note that Perl built with threading support runs slightly slower
4407 and uses slightly more memory than plain Perl.
4408
4409 If this doesn't make any sense to you, just accept the default '$dflt'.
4410 EOM
4411 rp='Build a threading Perl?'
4412 . ./myread
4413 case "$ans" in
4414 y|Y)    val="$define" ;;
4415 *)      val="$undef" ;;
4416 esac
4417 set usethreads
4418 eval $setvar
4419
4420 if $test $patchlevel -lt 9; then
4421     case "$usethreads" in
4422     $define)
4423         : Default to ithreads unless overridden on command line or with
4424         : old config.sh
4425         dflt='y'
4426         case "$use5005threads" in
4427                 $define|true|[yY]*)
4428                         echo "5.005 threads are no longer supported"
4429                         exit 1
4430                 ;;
4431         esac
4432         case "$useithreads" in
4433                 $undef|false|[nN]*) dflt='n';;
4434         esac
4435         rp='Use the newer interpreter-based ithreads?'
4436         . ./myread
4437         case "$ans" in
4438         y|Y)    val="$define" ;;
4439         *)      val="$undef" ;;
4440         esac
4441         set useithreads
4442         eval $setvar
4443         : Now set use5005threads to the opposite value.
4444         case "$useithreads" in
4445         $define) val="$undef" ;;
4446         *) val="$define" ;;
4447         esac
4448         set use5005threads
4449         eval $setvar
4450         ;;
4451     *)
4452         useithreads="$undef"
4453         use5005threads="$undef"
4454         ;;
4455     esac
4456
4457     case "$useithreads$use5005threads" in
4458     "$define$define")
4459         $cat >&4 <<EOM
4460
4461 You cannot have both the ithreads and the 5.005 threads enabled
4462 at the same time.  Disabling the 5.005 threads since they are
4463 much less stable than the ithreads.
4464
4465 EOM
4466         use5005threads="$undef"
4467         ;;
4468     esac
4469
4470 else
4471 : perl-5.9.x and later
4472
4473     if test X"$usethreads" = "X$define"; then
4474         case "$use5005threads" in
4475             $define|true|[yY]*)
4476                 $cat >&4 <<EOM
4477
4478 5.005 threads has been removed for 5.10.  Perl will be built using ithreads.
4479
4480 EOM
4481             ;;
4482         esac
4483     fi
4484
4485     use5005threads="$undef"
4486     useithreads="$usethreads"
4487 fi
4488
4489 case "$d_oldpthreads" in
4490 '')     : Configure tests would be welcome here.  For now, assume undef.
4491         val="$undef" ;;
4492 *)      val="$d_oldpthreads" ;;
4493 esac
4494 set d_oldpthreads
4495 eval $setvar
4496
4497
4498 : Look for a hint-file generated 'call-back-unit'.  If the
4499 : user has specified that a threading perl is to be built,
4500 : we may need to set or change some other defaults.
4501 if $test -f usethreads.cbu; then
4502     echo "Your platform has some specific hints regarding threaded builds, using them..."
4503     . ./usethreads.cbu
4504 else
4505     case "$usethreads" in
4506         "$define"|true|[yY]*)
4507                 $cat <<EOM
4508 (Your platform does not have any specific hints for threaded builds.
4509  Assuming POSIX threads, then.)
4510 EOM
4511         ;;
4512     esac
4513 fi
4514
4515 : Check if multiplicity is required
4516 cat <<EOM
4517
4518 Perl can be built so that multiple Perl interpreters can coexist
4519 within the same Perl executable.
4520 EOM
4521
4522 case "$useithreads" in
4523 $define)
4524         cat <<EOM
4525 This multiple interpreter support is required for interpreter-based threads.
4526 EOM
4527         val="$define"
4528         ;;
4529 *)      case "$usemultiplicity" in
4530         $define|true|[yY]*)     dflt='y';;
4531         *) dflt='n';;
4532         esac
4533         echo " "
4534         echo "If this doesn't make any sense to you, just accept the default '$dflt'."
4535         rp='Build Perl for multiplicity?'
4536         . ./myread
4537         case "$ans" in
4538         y|Y)    val="$define" ;;
4539         *)      val="$undef" ;;
4540         esac
4541         ;;
4542 esac
4543 set usemultiplicity
4544 eval $setvar
4545
4546 : Check if morebits is requested
4547 case "$usemorebits" in
4548 "$define"|true|[yY]*)
4549         use64bitint="$define"
4550         uselongdouble="$define"
4551         usemorebits="$define"
4552         ;;
4553 *)      usemorebits="$undef"
4554         ;;
4555 esac
4556
4557 : Determine the C compiler to be used
4558 echo " "
4559 case "$cc" in
4560 '') dflt=cc;;
4561 *) dflt="$cc";;
4562 esac
4563 rp="Use which C compiler?"
4564 . ./myread
4565 cc="$ans"
4566
4567 : See whether they have no cc but they do have gcc
4568 . ./trygcc
4569 if $test -f cc.cbu; then
4570     . ./cc.cbu
4571 fi
4572 . ./checkcc
4573
4574 : make some quick guesses about what we are up against
4575 echo " "
4576 $echo $n "Hmm...  $c"
4577 echo exit 1 >bsd
4578 echo exit 1 >usg
4579 echo exit 1 >v7
4580 echo exit 1 >osf1
4581 echo exit 1 >eunice
4582 echo exit 1 >xenix
4583 echo exit 1 >venix
4584 echo exit 1 >os2
4585 d_bsd="$undef"
4586 $cat $sysroot/usr/include/signal.h $sysroot/usr/include/sys/signal.h >foo 2>/dev/null
4587 if test -f /osf_boot || $contains 'OSF/1' $sysroot/usr/include/ctype.h >/dev/null 2>&1
4588 then
4589         echo "Looks kind of like an OSF/1 system, but we'll see..."
4590         echo exit 0 >osf1
4591 elif test `echo abc | $tr a-z A-Z` = Abc ; then
4592         xxx=`./loc addbib blurfl $pth`
4593         if $test -f $xxx; then
4594         echo "Looks kind of like a USG system with BSD features, but we'll see..."
4595                 echo exit 0 >bsd
4596                 echo exit 0 >usg
4597         else
4598                 if $contains SIGTSTP foo >/dev/null 2>&1 ; then
4599                         echo "Looks kind of like an extended USG system, but we'll see..."
4600                 else
4601                         echo "Looks kind of like a USG system, but we'll see..."
4602                 fi
4603                 echo exit 0 >usg
4604         fi
4605 elif $contains SIGTSTP foo >/dev/null 2>&1 ; then
4606         echo "Looks kind of like a BSD system, but we'll see..."
4607         d_bsd="$define"
4608         echo exit 0 >bsd
4609 else
4610         echo "Looks kind of like a Version 7 system, but we'll see..."
4611         echo exit 0 >v7
4612 fi
4613 case "$eunicefix" in
4614 *unixtovms*)
4615         $cat <<'EOI'
4616 There is, however, a strange, musty smell in the air that reminds me of
4617 something...hmm...yes...I've got it...there's a VMS nearby, or I'm a Blit.
4618 EOI
4619         echo exit 0 >eunice
4620         d_eunice="$define"
4621 : it so happens the Eunice I know will not run shell scripts in Unix format
4622         ;;
4623 *)
4624         echo " "
4625         echo "Congratulations.  You aren't running Eunice."
4626         d_eunice="$undef"
4627         ;;
4628 esac
4629 : Detect OS2.  The p_ variable is set above in the Head.U unit.
4630 : Note that this also -- wrongly -- detects e.g. dos-djgpp, which also uses
4631 : semicolon as a patch separator
4632 case "$p_" in
4633 :) ;;
4634 *)
4635         $cat <<'EOI'
4636 I have the feeling something is not exactly right, however...don't tell me...
4637 lemme think...does HAL ring a bell?...no, of course, you're only running OS/2!
4638 (Or you may be running DOS with DJGPP.)
4639 EOI
4640         echo exit 0 >os2
4641         ;;
4642 esac
4643 if test -f /xenix; then
4644         echo "Actually, this looks more like a XENIX system..."
4645         echo exit 0 >xenix
4646         d_xenix="$define"
4647 else
4648         echo " "
4649         echo "It's not Xenix..."
4650         d_xenix="$undef"
4651 fi
4652 chmod +x xenix
4653 $eunicefix xenix
4654 if test -f /venix; then
4655         echo "Actually, this looks more like a VENIX system..."
4656         echo exit 0 >venix
4657 else
4658         echo " "
4659         if ./xenix; then
4660                 : null
4661         else
4662                 echo "Nor is it Venix..."
4663         fi
4664 fi
4665 chmod +x bsd usg v7 osf1 eunice xenix venix os2
4666 $eunicefix bsd usg v7 osf1 eunice xenix venix os2
4667 $rm -f foo
4668
4669 : Check if we are using GNU gcc and what its version is
4670 echo " "
4671 echo "Checking for GNU cc in disguise and/or its version number..." >&4
4672 $cat >try.c <<EOM
4673 #include <stdio.h>
4674 int main() {
4675 #if defined(__GNUC__) && !defined(__INTEL_COMPILER)
4676 #ifdef __VERSION__
4677         printf("%s\n", __VERSION__);
4678 #else
4679         printf("%s\n", "1");
4680 #endif
4681 #endif
4682         return(0);
4683 }
4684 EOM
4685 if $cc -o try $ccflags $ldflags try.c; then
4686         gccversion=`$run ./try`
4687         case "$gccversion" in
4688         '') echo "You are not using GNU cc." ;;
4689         *)  echo "You are using GNU cc $gccversion."
4690             ccname=gcc
4691             ;;
4692         esac
4693 else
4694         echo " "
4695         echo "*** WHOA THERE!!! ***" >&4
4696         echo "    Your C compiler \"$cc\" doesn't seem to be working!" >&4
4697         case "$knowitall" in
4698         '')
4699         echo "    You'd better start hunting for one and let me know about it." >&4
4700                 exit 1
4701                 ;;
4702         esac
4703 fi
4704 $rm -f try try.*
4705 case "$gccversion" in
4706 1*) cpp=`./loc gcc-cpp $cpp $pth` ;;
4707 esac
4708 case "$gccversion" in
4709 '') gccosandvers='' ;;
4710 *) gccshortvers=`echo "$gccversion"|sed 's/ .*//'`
4711    gccosandvers=`$cc -v 2>&1|grep '/specs$'|sed "s!.*/[^-/]*-[^-/]*-\([^-/]*\)/$gccshortvers/specs!\1!"`
4712    gccshortvers=''
4713    case "$gccosandvers" in
4714    $osname) gccosandvers='' ;; # linux gccs seem to have no linux osvers, grr
4715    $osname$osvers) ;; # looking good
4716    $osname*) cat <<EOM >&4
4717
4718 *** WHOA THERE!!! ***
4719
4720     Your gcc has not been compiled for the exact release of
4721     your operating system ($gccosandvers versus $osname$osvers).
4722
4723     In general it is a good idea to keep gcc synchronized with
4724     the operating system because otherwise serious problems
4725     may ensue when trying to compile software, like Perl.
4726
4727     I'm trying to be optimistic here, though, and will continue.
4728     If later during the configuration and build icky compilation
4729     problems appear (headerfile conflicts being the most common
4730     manifestation), I suggest reinstalling the gcc to match
4731     your operating system release.
4732
4733 EOM
4734       ;;
4735    *) gccosandvers='' ;; # failed to parse, better be silent
4736    esac
4737    ;;
4738 esac
4739 case "$ccname" in
4740 '') ccname="$cc" ;;
4741 esac
4742
4743 # gcc 3.* complain about adding -Idirectories that they already know about,
4744 # so we will take those off from locincpth.
4745 case "$gccversion" in
4746 3*)
4747     echo "main(){}">try.c
4748     for incdir in $locincpth; do
4749        warn=`$cc $ccflags -I$incdir -c try.c 2>&1 | \
4750              grep '^c[cp]p*[01]: warning: changing search order '`
4751        if test "X$warn" != X; then
4752            locincpth=`echo " $locincpth " | sed "s! $incdir ! !"`
4753        fi
4754     done
4755     $rm -f try try.*
4756 esac
4757
4758 # gcc 4.9 by default does some optimizations that break perl.
4759 # see ticket 121505.
4760 #
4761 # The -fwrapv disables those optimizations (and probably others,) so
4762 # for gcc 4.9 (and later, since the optimizations probably won't go
4763 # away), add -fwrapv unless the user requests -fno-wrapv, which
4764 # disables -fwrapv, or if the user requests -fsanitize=undefined,
4765 # which turns the overflows -fwrapv ignores into runtime errors.
4766 case "$gccversion" in
4767 4.[3-9].*|4.[1-9][0-9]*|[5-9].*|[1-9][0-9]*)
4768     case "$ccflags" in
4769     *-fno-wrapv*|*-fsanitize=undefined*|*-fwrapv*) ;;
4770     *) ccflags="$ccflags -fwrapv" ;;
4771     esac
4772 esac
4773
4774 : What should the include directory be ?
4775 : Use sysroot if set, so findhdr looks in the right place.
4776 echo " "
4777 $echo $n "Hmm...  $c"
4778 dflt="$sysroot/usr/include"
4779 incpath=''
4780 mips_type=''
4781 if $test -f /bin/mips && /bin/mips; then
4782         echo "Looks like a MIPS system..."
4783         $cat >usr.c <<'EOCP'
4784 #ifdef SYSTYPE_BSD43
4785 /bsd43
4786 #endif
4787 EOCP
4788         if $cc $cppflags -E usr.c > usr.out && $contains / usr.out >/dev/null 2>&1; then
4789                 dflt='/bsd43/usr/include'
4790                 incpath='/bsd43'
4791                 mips_type='BSD 4.3'
4792         else
4793                 mips_type='System V'
4794         fi
4795         $rm -f usr.c usr.out
4796         echo "and you're compiling with the $mips_type compiler and libraries."
4797         xxx_prompt=y
4798         echo "exit 0" >mips
4799 else
4800         echo "Doesn't look like a MIPS system."
4801         xxx_prompt=n
4802         echo "exit 1" >mips
4803 fi
4804 chmod +x mips
4805 $eunicefix mips
4806 case "$usrinc" in
4807 '') ;;
4808 *) dflt="$usrinc";;
4809 esac
4810 case "$xxx_prompt" in
4811 y)      fn=d/
4812         echo " "
4813         rp='Where are the include files you want to use?'
4814         . ./getfile
4815         usrinc="$ans"
4816         ;;
4817 *)      usrinc="$dflt"
4818         ;;
4819 esac
4820
4821 : see how we invoke the C preprocessor
4822 echo " "
4823 echo "Now, how can we feed standard input to your C preprocessor..." >&4
4824 cat <<'EOT' >testcpp.c
4825 #define ABC abc
4826 #define XYZ xyz
4827 ABC.XYZ
4828 EOT
4829 cd ..
4830 if test ! -f cppstdin; then
4831         if test "X$osname" = "Xaix" -a "X$gccversion" = X; then
4832                 # AIX cc -E doesn't show the absolute headerfile
4833                 # locations but we'll cheat by using the -M flag.
4834                 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
4835         else
4836                 echo 'cat >.$$.c; '"$cc $cppflags"' -E ${1+"$@"} .$$.c; rm .$$.c' >cppstdin
4837         fi
4838 else
4839         echo "Keeping your $hint cppstdin wrapper."
4840 fi
4841 chmod 755 cppstdin
4842 wrapper=`pwd`/cppstdin
4843 ok='false'
4844 cd UU
4845
4846 if $test "X$cppstdin" != "X" && \
4847         $cppstdin $cppminus <testcpp.c >testcpp.out 2>&1 && \
4848         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1
4849 then
4850         echo "You used to use $cppstdin $cppminus so we'll use that again."
4851         case "$cpprun" in
4852         '') echo "But let's see if we can live without a wrapper..." ;;
4853         *)
4854                 if $cpprun $cpplast <testcpp.c >testcpp.out 2>&1 && \
4855                         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1
4856                 then
4857                         echo "(And we'll use $cpprun $cpplast to preprocess directly.)"
4858                         ok='true'
4859                 else
4860                         echo "(However, $cpprun $cpplast does not work, let's see...)"
4861                 fi
4862                 ;;
4863         esac
4864 else
4865         case "$cppstdin" in
4866         '') ;;
4867         *)
4868                 echo "Good old $cppstdin $cppminus does not seem to be of any help..."
4869                 ;;
4870         esac
4871 fi
4872
4873 if $ok; then
4874         : nothing
4875 elif echo 'Maybe "'"$cc"' -E" will work...'; \
4876         $cc -E <testcpp.c >testcpp.out 2>&1; \
4877         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
4878         echo "Yup, it does."
4879         x_cpp="$cc $cppflags -E"
4880         x_minus='';
4881 elif echo 'Nope...maybe "'"$cc"' -E -" will work...'; \
4882         $cc -E - <testcpp.c >testcpp.out 2>&1; \
4883         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
4884         echo "Yup, it does."
4885         x_cpp="$cc $cppflags -E"
4886         x_minus='-';
4887 elif echo 'Nope...maybe "'"$cc"' -P" will work...'; \
4888         $cc -P <testcpp.c >testcpp.out 2>&1; \
4889         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
4890         echo "Yipee, that works!"
4891         x_cpp="$cc $cppflags -P"
4892         x_minus='';
4893 elif echo 'Nope...maybe "'"$cc"' -P -" will work...'; \
4894         $cc -P - <testcpp.c >testcpp.out 2>&1; \
4895         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
4896         echo "At long last!"
4897         x_cpp="$cc $cppflags -P"
4898         x_minus='-';
4899 elif echo 'No such luck, maybe "'$cpp'" will work...'; \
4900         $cpp <testcpp.c >testcpp.out 2>&1; \
4901         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
4902         echo "It works!"
4903         x_cpp="$cpp $cppflags"
4904         x_minus='';
4905 elif echo 'Nixed again...maybe "'$cpp' -" will work...'; \
4906         $cpp - <testcpp.c >testcpp.out 2>&1; \
4907         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
4908         echo "Hooray, it works!  I was beginning to wonder."
4909         x_cpp="$cpp $cppflags"
4910         x_minus='-';
4911 elif echo 'Uh-uh.  Time to get fancy.  Trying a wrapper...'; \
4912         $wrapper <testcpp.c >testcpp.out 2>&1; \
4913         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
4914         x_cpp="$wrapper"
4915         x_minus=''
4916         echo "Eureka!"
4917 else
4918         dflt=''
4919         rp="No dice.  I can't find a C preprocessor.  Name one:"
4920         . ./myread
4921         x_cpp="$ans"
4922         x_minus=''
4923         $x_cpp <testcpp.c >testcpp.out 2>&1
4924         if $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
4925                 echo "OK, that will do." >&4
4926         else
4927 echo "Sorry, I can't get that to work.  Go find one and rerun Configure." >&4
4928                 exit 1
4929         fi
4930 fi
4931
4932 case "$ok" in
4933 false)
4934         cppstdin="$x_cpp"
4935         cppminus="$x_minus"
4936         cpprun="$x_cpp"
4937         cpplast="$x_minus"
4938         set X $x_cpp
4939         shift
4940         case "$1" in
4941         "$cpp")
4942                 echo "Perhaps can we force $cc -E using a wrapper..."
4943                 if $wrapper <testcpp.c >testcpp.out 2>&1; \
4944                         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1
4945                 then
4946                         echo "Yup, we can."
4947                         cppstdin="$wrapper"
4948                         cppminus='';
4949                 else
4950                         echo "Nope, we'll have to live without it..."
4951                 fi
4952                 ;;
4953         esac
4954         case "$cpprun" in
4955         "$wrapper")
4956                 cpprun=''
4957                 cpplast=''
4958                 ;;
4959         esac
4960         ;;
4961 esac
4962
4963 case "$cppstdin" in
4964 "$wrapper"|'cppstdin') ;;
4965 *) $rm -f $wrapper;;
4966 esac
4967 $rm -f testcpp.c testcpp.out
4968
4969 : Adjust cppfilter for path component separator
4970 case "$osname" in
4971 vos) cppfilter="tr '\\\\>' '/' |" ;; # path component separator is >
4972 os2) cppfilter="sed -e 's|\\\\\\\\|/|g' |" ;; # path component separator is \
4973 *)   cppfilter='' ;;
4974 esac
4975
4976 : Use gcc to determine libpth and incpth
4977 # If using gcc or clang, we can get better values for libpth, incpth
4978 # and usrinc directly from the compiler.
4979 # Note that ccname for clang is also gcc.
4980 case "$ccname" in
4981     gcc)
4982         $echo 'extern int foo;' > try.c
4983         set X `$cppstdin -v try.c 2>&1 | $awk '/^#include </,/^End of search /'|$cppfilter $grep '/include'`
4984         shift
4985         if $test $# -gt 0; then
4986             incpth="$incpth $*"
4987             incpth="`$echo $incpth|$sed 's/^ //'`"
4988             for i in $*; do
4989                 j="`$echo $i|$sed 's,/include$,/lib,'`"
4990                 if $test -d $j; then
4991                     libpth="$libpth $j"
4992                 fi
4993             done
4994             libpth="`$echo $libpth|$sed 's/^ //'`"
4995             for xxx in $libpth $loclibpth $plibpth $glibpth; do
4996                 if $test -d $xxx; then
4997                     case " $libpth " in
4998                     *" $xxx "*) ;;
4999                     *) libpth="$libpth $xxx";;
5000                     esac
5001                 fi
5002             done
5003         fi
5004         $rm -f try.c
5005         case "$usrinc" in
5006         '') for i in $incpth; do
5007                 if $test -f $i/errno.h -a -f $i/stdio.h -a -f $i/time.h; then
5008                     usrinc="$i"
5009                     break
5010                 fi
5011             done
5012             ;;
5013         esac
5014
5015         case "$usecrosscompile" in
5016         $define|true|[yY]*)
5017             case "$incpth" in
5018                 '') echo "Incpth not defined." >&4; croak=y ;;
5019                 *)  echo "Using incpth '$incpth'." >&4 ;;
5020             esac
5021             case "$libpth" in
5022                 '') echo "Libpth not defined." >&4; croak=y ;;
5023                 *)  echo "Using libpth '$libpth'." >&4 ;;
5024             esac
5025             case "$usrinc" in
5026                 '') echo "Usrinc not defined." >&4; croak=y ;;
5027                 *)  echo "Using usrinc $usrinc." >&4 ;;
5028             esac
5029             case "$croak" in
5030                 y)
5031                 if test "X$sysroot" = X; then
5032                     echo "Cannot continue, aborting." >&4; exit 1
5033                 else
5034                     echo "Cross-compiling using sysroot $sysroot, failing to guess inc/lib paths is not fatal" >&4
5035                 fi
5036                 ;;
5037             esac
5038             ;;
5039         esac
5040     ;;
5041 esac
5042
5043 : Default value for incpth is just usrinc
5044 case "$incpth" in
5045 '') incpth="$usrinc";;
5046 esac
5047
5048 : Set private lib path
5049 case "$plibpth" in
5050 '') if ./mips; then
5051         plibpth="$incpath/usr/lib $sysroot/usr/local/lib $sysroot/usr/ccs/lib"
5052     fi;;
5053 esac
5054 case "$libpth" in
5055 ' ') dlist='';;
5056 '') dlist="$loclibpth $plibpth $glibpth";;
5057 *) dlist="$libpth";;
5058 esac
5059
5060 : Now check and see which directories actually exist, avoiding duplicates
5061 for xxx in $dlist
5062 do
5063     if $test -d $xxx; then
5064                 case " $libpth " in
5065                 *" $xxx "*) ;;
5066                 *) libpth="$libpth $xxx";;
5067                 esac
5068     fi
5069 done
5070 $cat <<'EOM'
5071
5072 Some systems have incompatible or broken versions of libraries.  Among
5073 the directories listed in the question below, please remove any you
5074 know not to be holding relevant libraries, and add any that are needed.
5075 Say "none" for none.
5076
5077 EOM
5078
5079 if test "X$sysroot" != X; then
5080     $cat <<EOM
5081 You have set sysroot to $sysroot, please supply the directories excluding sysroot
5082
5083 EOM
5084 fi
5085
5086 case "$libpth" in
5087 '') dflt='none';;
5088 *)
5089         set X $libpth
5090         shift
5091         dflt=${1+"$@"}
5092         ;;
5093 esac
5094 rp="Directories to use for library searches?"
5095 . ./myread
5096 case "$ans" in
5097 none) libpth=' ';;
5098 *) libpth="$ans";;
5099 esac
5100
5101 : compute shared library extension
5102 case "$so" in
5103 '')
5104         if xxx=`./loc libc.sl X $libpth`; $test -f "$xxx"; then
5105                 dflt='sl'
5106         else
5107                 dflt='so'
5108         fi
5109         ;;
5110 *) dflt="$so";;
5111 esac
5112 $cat <<EOM
5113
5114 On some systems, shared libraries may be available.  Answer 'none' if
5115 you want to suppress searching of shared libraries for the remainder
5116 of this configuration.
5117
5118 EOM
5119 rp='What is the file extension used for shared libraries?'
5120 . ./myread
5121 so="$ans"
5122
5123 : Does target system insist that shared library basenames are unique
5124 $cat << EOM
5125
5126 Some dynamic loaders assume that the *basename* of shared library filenames
5127 are globally unique.  We'll default this to undef as we assume your system
5128 is not this weird. Set to defined if you're on one of them.
5129
5130 EOM
5131
5132 dflt='n'
5133 rp='Make shared library basenames unique?'
5134 . ./myread
5135 case "$ans" in
5136 y|Y) val="$define" ;;
5137 *)   val="$undef"  ;;
5138 esac
5139 set d_libname_unique
5140 eval $setvar
5141
5142 : Define several unixisms.
5143 : Hints files or command line option can be used to override them.
5144 : The convoluted testing is in case hints files set either the old
5145 : or the new name.
5146 case "$_exe" in
5147 '')     case "$exe_ext" in
5148         '')     ;;
5149         *)      _exe="$exe_ext" ;;
5150         esac
5151         ;;
5152 esac
5153 case "$_a" in
5154 '')     case "$lib_ext" in
5155     '') _a='.a';;
5156         *)      _a="$lib_ext" ;;
5157         esac
5158         ;;
5159 esac
5160 case "$_o" in
5161 '') case "$obj_ext" in
5162         '')     _o='.o';;
5163         *)      _o="$obj_ext";;
5164         esac
5165         ;;
5166 esac
5167 case "$p_" in
5168 '') case "$path_sep" in
5169         '')     p_=':';;
5170         *)      p_="$path_sep";;
5171         esac
5172         ;;
5173 esac
5174 exe_ext=$_exe
5175 lib_ext=$_a
5176 obj_ext=$_o
5177 path_sep=$p_
5178
5179 rm_try="$rm -f try try$_exe a.out .out try.[cho] try.$_o core core.try* try.core*"
5180
5181 : Which makefile gets called first.  This is used by make depend.
5182 case "$firstmakefile" in
5183 '') firstmakefile='makefile';;
5184 esac
5185
5186 : Check is we will use socks
5187 case "$usesocks" in
5188 $define|true|[yY]*)     dflt='y';;
5189 *) dflt='n';;
5190 esac
5191 cat <<EOM
5192
5193 Perl can be built to use the SOCKS proxy protocol library.  To do so,
5194 Configure must be run with -Dusesocks.  If you use SOCKS you also need
5195 to use the PerlIO abstraction layer, this will be implicitly selected.
5196
5197 If this doesn't make any sense to you, just accept the default '$dflt'.
5198 EOM
5199 rp='Build Perl for SOCKS?'
5200 . ./myread
5201 case "$ans" in
5202 y|Y)    val="$define" ;;
5203 *)      val="$undef" ;;
5204 esac
5205 set usesocks
5206 eval $setvar
5207
5208 : Check for uselongdouble support
5209 case "$ccflags" in
5210 *-DUSE_LONG_DOUBLE*|*-DUSE_MORE_BITS*) uselongdouble="$define" ;;
5211 esac
5212
5213 case "$uselongdouble" in
5214 $define|true|[yY]*)     dflt='y';;
5215 *) dflt='n';;
5216 esac
5217 cat <<EOM
5218
5219 Perl can be built to take advantage of long doubles which
5220 (if available) may give more accuracy and range for floating point numbers.
5221
5222 If this doesn't make any sense to you, just accept the default '$dflt'.
5223 EOM
5224 rp='Try to use long doubles if available?'
5225 . ./myread
5226 case "$ans" in
5227 y|Y)    val="$define"   ;;
5228 *)      val="$undef"    ;;
5229 esac
5230 set uselongdouble
5231 eval $setvar
5232
5233 case "$uselongdouble" in
5234 true|[yY]*) uselongdouble="$define" ;;
5235 esac
5236
5237 : Look for a hint-file generated 'call-back-unit'.  If the
5238 : user has specified that long doubles should be used,
5239 : we may need to set or change some other defaults.
5240 if $test -f uselongdouble.cbu; then
5241     echo "Your platform has some specific hints regarding long doubles, using them..."
5242     . ./uselongdouble.cbu
5243 else
5244     case "$uselongdouble" in
5245         $define)
5246                 $cat <<EOM
5247 (Your platform does not have any specific hints for long doubles.)
5248 EOM
5249         ;;
5250     esac
5251 fi
5252
5253 : Check if quadmath is requested
5254 case "$usequadmath" in
5255 "$define"|true|[yY]*) usequadmath="$define" ;;
5256 *)                    usequadmath="$undef"  ;;
5257 esac
5258
5259 : Fail if both uselongdouble and usequadmath are requested
5260 case "$usequadmath:$uselongdouble" in
5261 define:define)
5262         $cat <<EOM >&4
5263
5264 *** You requested the use of the quadmath library and use
5265 *** of long doubles.
5266 ***
5267 *** Please select one or the other.
5268 EOM
5269         exit 1
5270         ;;
5271 esac
5272
5273 : Looking for optional libraries
5274 echo " "
5275 echo "Checking for optional libraries..." >&4
5276 case "$libs" in
5277 ' '|'') dflt='';;
5278 *) dflt="$libs";;
5279 esac
5280 case "$libswanted" in
5281 '') libswanted='c_s';;
5282 esac
5283 case "$usesocks" in
5284 "$define") libswanted="$libswanted socks5 socks5_sh" ;;
5285 esac
5286 case "$usecbacktrace" in
5287 "$define") libswanted="$libswanted bfd" ;;
5288 esac
5289 case "$usequadmath" in
5290 "$define") libswanted="$libswanted quadmath" ;;
5291 esac
5292 libsfound=''
5293 libsfiles=''
5294 libsdirs=''
5295 libspath=''
5296 for thisdir in $libpth $xlibpth; do
5297   test -d $thisdir && libspath="$libspath $thisdir"
5298 done
5299 for thislib in $libswanted; do
5300         for thisdir in $libspath; do
5301             xxx=''
5302             if $test ! -f "$xxx" -a "X$ignore_versioned_solibs" = "X"; then
5303                 xxx=`ls $thisdir/lib$thislib.$so.[0-9] 2>/dev/null|sed -n '$p'`
5304                 $test -f "$xxx" && eval $libscheck
5305                 $test -f "$xxx" && libstyle=shared
5306                 xxx=`ls $thisdir/lib$thislib.[0-9].$so 2>/dev/null|sed -n '$p'`
5307                 $test -f "$xxx" && eval $libscheck
5308                 $test -f "$xxx" && libstyle=shared
5309             fi
5310             if test ! -f "$xxx"; then
5311                 xxx=$thisdir/lib$thislib.$so
5312                 $test -f "$xxx" && eval $libscheck
5313                 $test -f "$xxx" && libstyle=shared
5314             fi
5315             if test ! -f "$xxx"; then
5316                 xxx=$thisdir/lib$thislib$_a
5317                 $test -f "$xxx" && eval $libscheck
5318                 $test -f "$xxx" && libstyle=static
5319             fi
5320             if test ! -f "$xxx"; then
5321                 xxx=$thisdir/$thislib$_a
5322                 $test -f "$xxx" && eval $libscheck
5323                 $test -f "$xxx" && libstyle=static
5324             fi
5325             if test ! -f "$xxx"; then
5326                 xxx=$thisdir/lib${thislib}_s$_a
5327                 $test -f "$xxx" && eval $libscheck
5328                 $test -f "$xxx" && libstyle=static
5329                 $test -f "$xxx" && thislib=${thislib}_s
5330             fi
5331             if test ! -f "$xxx"; then
5332                 xxx=$thisdir/Slib$thislib$_a
5333                 $test -f "$xxx" && eval $libscheck
5334                 $test -f "$xxx" && libstyle=static
5335             fi
5336             if $test -f "$xxx"; then
5337                 case "$libstyle" in
5338                 shared) echo "Found -l$thislib (shared)." ;;
5339                 static) echo "Found -l$thislib." ;;
5340                 *)      echo "Found -l$thislib ($libstyle)." ;;
5341                 esac
5342                 case " $dflt " in
5343                 *"-l$thislib "*);;
5344                 *) dflt="$dflt -l$thislib"
5345                    libsfound="$libsfound $xxx"
5346                    yyy=`basename $xxx`
5347                    libsfiles="$libsfiles $yyy"
5348                    yyy=`echo $xxx|$sed -e "s%/$yyy\\$%%"`
5349                    case " $libsdirs " in
5350                    *" $yyy "*) ;;
5351                    *) libsdirs="$libsdirs $yyy" ;;
5352                    esac
5353                    ;;
5354                 esac
5355                 break
5356             fi
5357         done
5358         if $test ! -f "$xxx"; then
5359             echo "No -l$thislib."
5360         fi
5361 done
5362 set X $dflt
5363 shift
5364 dflt="$*"
5365 case "$libs" in
5366 '') dflt="$dflt";;
5367 *) dflt="$libs";;
5368 esac
5369 case "$dflt" in
5370 ' '|'') dflt='none';;
5371 esac
5372
5373 $cat <<EOM
5374
5375 In order to compile $package on your machine, a number of libraries
5376 are usually needed.  Include any other special libraries here as well.
5377 Say "none" for none.  The default list is almost always right.
5378 EOM
5379
5380 echo " "
5381 rp="What libraries to use?"
5382 . ./myread
5383 case "$ans" in
5384 none) libs=' ';;
5385 *) libs="$ans";;
5386 esac
5387
5388 : determine optimization, if desired, or use for debug flag also
5389 case "$optimize" in
5390 ' '|$undef) dflt='none';;
5391 '') dflt='-O';;
5392 *) dflt="$optimize";;
5393 esac
5394 $cat <<EOH
5395
5396 By default, $package compiles with the -O flag to use the optimizer.
5397 Alternately, you might want to use the symbolic debugger, which uses
5398 the -g flag (on traditional Unix systems).  Either flag can be
5399 specified here.  To use neither flag, specify the word "none".
5400
5401 EOH
5402 rp="What optimizer/debugger flag should be used?"
5403 . ./myread
5404 optimize="$ans"
5405 case "$optimize" in
5406 'none') optimize=" ";;
5407 esac
5408
5409 : Check what DEBUGGING is required from the command line
5410 : -DEBUGGING      or -DDEBUGGING or
5411 : -DEBUGGING=both                       = -g + -DDEBUGGING
5412 : -DEBUGGING=-g   or -Doptimize=-g      = -g
5413 : -DEBUGGING=none or -UDEBUGGING        =
5414 : -DEBUGGING=old  or -DEBUGGING=default = ? $optimize
5415 case "$EBUGGING" in
5416 '')     ;;
5417 *)      DEBUGGING=$EBUGGING ;;
5418 esac
5419
5420 case "$DEBUGGING" in
5421 -g|both|$define)
5422     case "$optimize" in
5423         *-g*) ;;
5424         *)    optimize="$optimize -g" ;;
5425     esac ;;
5426 none|$undef)
5427     case "$optimize" in
5428         *-g*)   set `echo "X $optimize " | sed 's/ -g / /'`
5429                 shift
5430                 optimize="$*"
5431                 ;;
5432     esac ;;
5433 esac
5434
5435 dflt=''
5436 case "$DEBUGGING" in
5437 both|$define) dflt='-DDEBUGGING'
5438 esac
5439
5440 : argument order is deliberate, as the flag will start with - which set could
5441 : think is an option
5442 checkccflag='check=$1; flag=$2; callback=$3;
5443 echo " ";
5444 echo "Checking if your compiler accepts $flag" 2>&1;
5445 [ "X$sysroot" != "X" ] && echo "For sysroot = $sysroot";
5446 echo "int main(void) { return 0; }" > gcctest.c;
5447 if $cc $_sysroot -O2 $flag -o gcctest gcctest.c 2>gcctest.out && $run ./gcctest; then
5448     echo "Yes, it does." 2>&1;
5449     if $test -s gcctest.out ; then
5450         echo "But your platform does not like it:";
5451         cat gcctest.out;
5452     else
5453         case "$ccflags" in
5454         *$check*)
5455             echo "Leaving current flags $ccflags alone." 2>&1
5456             ;;
5457         *) dflt="$dflt $flag";
5458             eval $callback
5459             ;;
5460         esac
5461     fi
5462 else
5463     echo "Nope, it does not, but that is ok." 2>&1;
5464 fi
5465 '
5466
5467 : We will not override a previous value, but we might want to
5468 : augment a hint file
5469 case "$hint" in
5470 default|recommended)
5471         case "$gccversion" in
5472         1*) dflt="$dflt -fpcc-struct-return" ;;
5473         esac
5474         case "$optimize:$DEBUGGING" in
5475         *-g*:old) dflt="$dflt -DDEBUGGING";;
5476         esac
5477         case "$gccversion" in
5478         2*) if $test -d /etc/conf/kconfig.d &&
5479                         $contains _POSIX_VERSION $usrinc/sys/unistd.h >/dev/null 2>&1
5480                 then
5481                         # Interactive Systems (ISC) POSIX mode.
5482                         dflt="$dflt -posix"
5483                 fi
5484                 ;;
5485         esac
5486         case "$gccversion" in
5487         1*) ;;
5488         2.[0-8]*) ;;
5489         ?*)     set strict-aliasing -fno-strict-aliasing
5490                 eval $checkccflag
5491                 ;;
5492         esac
5493         # For gcc, adding -pipe speeds up compilations for some, but apparently
5494         # some assemblers can't read from stdin.  (It also slows down compilations
5495         # in other cases, but those are apparently rarer these days.)  AD 5/2004.
5496         case "$gccversion" in
5497         ?*)     set pipe -pipe
5498                 eval $checkccflag
5499                 ;;
5500         esac
5501
5502         # on x86_64 (at least) we require an extra library (libssp) in the
5503         # link command line. This library is not named, so I infer that it is
5504         # an implementation detail that may change. Hence the safest approach
5505         # is to add the flag to the flags passed to the compiler at link time,
5506         # as that way the compiler can do the right implementation dependant
5507         # thing. (NWC)
5508         case "$osname" in
5509         amigaos) ;; # -fstack-protector builds but doesn't work
5510         *)      case "$gccversion" in
5511                 ?*)     set stack-protector-strong -fstack-protector-strong
5512                         eval $checkccflag
5513                         case "$dflt" in
5514                         *-fstack-protector-strong*) ;; # It got added.
5515                         *) # Try the plain/older -fstack-protector.
5516                            set stack-protector -fstack-protector
5517                            eval $checkccflag
5518                            ;;
5519                         esac
5520                         ;;
5521                 esac
5522                 ;;
5523         esac
5524         ;;
5525 esac
5526
5527 case "$mips_type" in
5528 *BSD*|'') inclwanted="$locincpth $usrinc";;
5529 *) inclwanted="$locincpth $inclwanted $usrinc/bsd";;
5530 esac
5531 for thisincl in $inclwanted; do
5532         if $test -d $thisincl; then
5533                 if $test x$thisincl != x$usrinc; then
5534                         case "$dflt" in
5535                         *" -I$thisincl "*);;
5536                         *) dflt="$dflt -I$thisincl ";;
5537                         esac
5538                 fi
5539         fi
5540 done
5541
5542 inctest='if $contains $2 $usrinc/$1 >/dev/null 2>&1; then
5543         xxx=true;
5544 elif $contains $2 $usrinc/sys/$1 >/dev/null 2>&1; then
5545         xxx=true;
5546 else
5547         xxx=false;
5548 fi;
5549 if $xxx; then
5550         case "$dflt" in
5551         *$2*);;
5552         *) dflt="$dflt -D$2";;
5553         esac;
5554 fi'
5555
5556 set signal.h LANGUAGE_C; eval $inctest
5557
5558 case "$usesocks" in
5559 $define)
5560         ccflags="$ccflags -DSOCKS"
5561         ;;
5562 esac
5563
5564 case "$hint" in
5565 default|recommended) dflt="$ccflags $dflt" ;;
5566 *) dflt="$ccflags";;
5567 esac
5568
5569 case "$dflt" in
5570 ''|' ') dflt=none;;
5571 esac
5572
5573 $cat <<EOH
5574
5575 Your C compiler may want other flags.  For this question you should include
5576 -I/whatever and -DWHATEVER flags and any other flags used by the C compiler,
5577 but you should NOT include libraries or ld flags like -lwhatever.  If you
5578 want $package to honor its debug switch, you should include -DDEBUGGING here.
5579 Your C compiler might also need additional flags, such as -D_POSIX_SOURCE.
5580
5581 To use no flags, specify the word "none".
5582
5583 EOH
5584 set X $dflt
5585 shift
5586 dflt=${1+"$@"}
5587 rp="Any additional cc flags?"
5588 . ./myread
5589 case "$ans" in
5590 none) ccflags='';;
5591 *) ccflags="$ans";;
5592 esac
5593
5594 : the following weeds options from ccflags that are of no interest to cpp
5595 case "$cppflags" in
5596 '') cppflags="$ccflags" ;;
5597 *)  set X $ccflags; shift
5598     case " $cppflags " in
5599     *" $1 "*) ;;  # Try to avoid doubling the cppflags.
5600     *) cppflags="$cppflags $ccflags" ;;
5601     esac
5602     ;;
5603 esac
5604 case "$gccversion" in
5605 1*) cppflags="$cppflags -D__GNUC__"
5606 esac
5607 case "$mips_type" in
5608 '');;
5609 *BSD*) cppflags="$cppflags -DSYSTYPE_BSD43";;
5610 esac
5611 case "$cppflags" in
5612 '');;
5613 *)
5614         echo " "
5615         echo "Let me guess what the preprocessor flags are..." >&4
5616         set X $cppflags
5617         shift
5618         cppflags=''
5619         $cat >cpp.c <<'EOM'
5620 #define BLURFL foo
5621
5622 BLURFL xx LFRULB
5623 EOM
5624         previous=''
5625         for flag in $*
5626         do
5627                 case "$flag" in
5628                 -*) ftry="$flag";;
5629                 *) ftry="$previous $flag";;
5630                 esac
5631                 if $cppstdin -DLFRULB=bar $cppflags $ftry $cppminus <cpp.c \
5632                         >cpp1.out 2>/dev/null && \
5633                         $cpprun -DLFRULB=bar $cppflags $ftry $cpplast <cpp.c \
5634                         >cpp2.out 2>/dev/null && \
5635                         $contains 'foo.*xx.*bar' cpp1.out >/dev/null 2>&1 && \
5636                         $contains 'foo.*xx.*bar' cpp2.out >/dev/null 2>&1
5637                 then
5638                         cppflags="$cppflags $ftry"
5639                         previous=''
5640                 else
5641                         previous="$flag"
5642                 fi
5643         done
5644         set X $cppflags
5645         shift
5646         cppflags=${1+"$@"}
5647         case "$cppflags" in
5648         *-*)  echo "They appear to be: $cppflags";;
5649         esac
5650         $rm -f cpp.c cpp?.out
5651         ;;
5652 esac
5653
5654 : flags used in final linking phase
5655 case "$ldflags" in
5656 '') if ./venix; then
5657                 dflt='-i -z'
5658         else
5659                 dflt=''
5660         fi
5661         case "$ccflags" in
5662         *-posix*) dflt="$dflt -posix" ;;
5663         esac
5664         ;;
5665 *) dflt="$ldflags";;
5666 esac
5667 # See note above about -fstack-protector
5668 case "$ccflags" in
5669 *-fstack-protector-strong*)
5670         case "$dflt" in
5671         *-fstack-protector-strong*) ;; # Don't add it again
5672         *) dflt="$dflt -fstack-protector-strong" ;;
5673         esac
5674         ;;
5675 *-fstack-protector*)
5676         case "$dflt" in
5677         *-fstack-protector*) ;; # Don't add it again
5678         *) dflt="$dflt -fstack-protector" ;;
5679         esac
5680         ;;
5681 esac
5682
5683 : Try to guess additional flags to pick up local libraries.
5684 for thislibdir in $libpth; do
5685         case " $loclibpth " in
5686         *" $thislibdir "*)
5687                 case "$dflt " in
5688                 *"-L$thislibdir "*) ;;
5689                 *)  dflt="$dflt -L$thislibdir" ;;
5690                 esac
5691                 ;;
5692         esac
5693 done
5694
5695 case "$dflt" in
5696 '') dflt='none' ;;
5697 esac
5698
5699 $cat <<EOH
5700
5701 Your C linker may need flags.  For this question you should
5702 include -L/whatever and any other flags used by the C linker, but you
5703 should NOT include libraries like -lwhatever.
5704
5705 Make sure you include the appropriate -L/path flags if your C linker
5706 does not normally search all of the directories you specified above,
5707 namely
5708         $libpth
5709 To use no flags, specify the word "none".
5710
5711 EOH
5712
5713 rp="Any additional ld flags (NOT including libraries)?"
5714 . ./myread
5715 case "$ans" in
5716 none) ldflags='';;
5717 *) ldflags="$ans";;
5718 esac
5719 rmlist="$rmlist pdp11"
5720
5721 : coherency check
5722 echo " "
5723 echo "Checking your choice of C compiler and flags for coherency..." >&4
5724 $cat > try.c <<'EOF'
5725 #include <stdio.h>
5726 int main() { printf("Ok\n"); return(0); }
5727 EOF
5728 set X $cc -o try $optimize $ccflags $ldflags try.c $libs
5729 shift
5730 $cat >try.msg <<'EOM'
5731 I've tried to compile and run the following simple program:
5732
5733 EOM
5734 $cat try.c >> try.msg
5735
5736 $cat >> try.msg <<EOM
5737
5738 I used the command:
5739
5740         $*
5741         $run ./try
5742
5743 and I got the following output:
5744
5745 EOM
5746 dflt=y
5747 if $sh -c "$cc -o try $optimize $ccflags $ldflags try.c $libs" >>try.msg 2>&1; then
5748         if $sh -c "$run ./try " >>try.msg 2>&1; then
5749                 xxx=`$run ./try`
5750                 case "$xxx" in
5751                 "Ok") dflt=n ;;
5752                 *)    echo 'The program compiled OK, but produced no output.' >> try.msg ;;
5753                 esac
5754         else
5755                 echo "The program compiled OK, but exited with status $?." >>try.msg
5756                 rp="You have a problem.  Shall I abort Configure"
5757                 dflt=y
5758         fi
5759 else
5760         echo "I can't compile the test program." >>try.msg
5761         rp="You have a BIG problem.  Shall I abort Configure"
5762         dflt=y
5763 fi
5764 case "$dflt" in
5765 y)
5766         $cat try.msg >&4
5767         case "$knowitall" in
5768         '')
5769                 echo "(The supplied flags or libraries might be incorrect.)"
5770                 ;;
5771         *) dflt=n;;
5772         esac
5773         echo " "
5774         . ./myread
5775         case "$ans" in
5776         n*|N*) ;;
5777         *)      echo "Ok.  Stopping Configure." >&4
5778                 exit 1
5779                 ;;
5780         esac
5781         ;;
5782 n) echo "OK, that should do.";;
5783 esac
5784 $rm_try gcctest gcctest.out
5785
5786 : define a shorthand compile call
5787 compile='
5788 mc_file=$1;
5789 shift;
5790 case "$usedevel" in $define|true|[yY]*) if $test ! -f "${mc_file}.c"; then
5791 echo "Internal Configure script bug - compiler test file ${mc_file}.c is missing. Please report this to perlbug@perl.org" >&4;
5792 exit 1;
5793 fi;
5794 esac;
5795 $cc -o ${mc_file} $optimize $ccflags $ldflags $* ${mc_file}.c $libs > /dev/null 2>&1;'
5796 : define a shorthand compile call for compilations that should be ok.
5797 compile_ok='
5798 mc_file=$1;
5799 shift;
5800 $cc -o ${mc_file} $optimize $ccflags $ldflags $* ${mc_file}.c $libs;'
5801
5802 : determine filename position in cpp output
5803 echo " "
5804 echo "Computing filename position in cpp output for #include directives..." >&4
5805 case "$osname" in
5806 amigaos) fieldn=3 ;;  # Workaround for a bug in abc (pdksh).
5807 esac
5808 case "$fieldn" in
5809 '')
5810 case "$osname" in
5811 vos) testaccess=-e ;;
5812 *)   testaccess=-r ;;
5813 esac
5814 echo '#include <stdio.h>' > foo.c
5815 $cat >fieldn <<EOF
5816 $startsh
5817 $cppstdin $cppflags $cppminus <foo.c 2>/dev/null | \
5818 $grep '^[       ]*#.*stdio\.h' | \
5819 while read cline; do
5820         pos=1
5821         set \$cline
5822         while $test \$# -gt 0; do
5823                 if $test $testaccess \`echo \$1 | $tr -d '"'\`; then
5824                         echo "\$pos"
5825                         exit 0
5826                 fi
5827                 shift
5828                 pos=\`expr \$pos + 1\`
5829         done
5830 done
5831 EOF
5832 chmod +x fieldn
5833 fieldn=`./fieldn`
5834 $rm -f foo.c fieldn
5835 ;;
5836 esac
5837 case $fieldn in
5838 '') pos='???';;
5839 1) pos=first;;
5840 2) pos=second;;
5841 3) pos=third;;
5842 *) pos="${fieldn}th";;
5843 esac
5844 echo "Your cpp writes the filename in the $pos field of the line."
5845
5846 : locate header file
5847 $cat >findhdr <<EOF
5848 $startsh
5849 wanted=\$1
5850 name=''
5851 for usrincdir in $incpth
5852 do
5853         if test -f \$usrincdir/\$wanted; then
5854                 echo "\$usrincdir/\$wanted"
5855                 exit 0
5856         fi
5857 done
5858 awkprg='{ print \$$fieldn }'
5859 echo "#include <\$wanted>" > foo\$\$.c
5860 $cppstdin $cppminus $cppflags < foo\$\$.c 2>/dev/null | \
5861 $cppfilter $grep "^