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