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