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