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