This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
perlxs.pod; rpc is considered obsolete
[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/Perl/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 from https://github.com/Perl/metaconfig
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 compiler_warning=''
369 contains=''
370 cpp_stuff=''
371 cpplast=''
372 cppminus=''
373 cpprun=''
374 cppstdin=''
375 d__fwalk=''
376 d_accept4=''
377 d_access=''
378 d_accessx=''
379 d_acosh=''
380 d_aintl=''
381 d_alarm=''
382 asctime_r_proto=''
383 d_asctime_r=''
384 d_asinh=''
385 d_atanh=''
386 d_attribute_always_inline=''
387 d_attribute_deprecated=''
388 d_attribute_format=''
389 d_attribute_malloc=''
390 d_attribute_nonnull=''
391 d_attribute_noreturn=''
392 d_attribute_pure=''
393 d_attribute_unused=''
394 d_attribute_warn_unused_result=''
395 d_printf_format_null=''
396 d_backtrace=''
397 d_builtin_choose_expr=''
398 d_builtin_expect=''
399 d_builtin_add_overflow=''
400 d_builtin_mul_overflow=''
401 d_builtin_sub_overflow=''
402 d_c99_variadic_macros=''
403 d_casti32=''
404 castflags=''
405 d_castneg=''
406 d_cbrt=''
407 d_chown=''
408 d_chroot=''
409 d_chsize=''
410 d_class=''
411 d_clearenv=''
412 d_closedir=''
413 d_void_closedir=''
414 d_cmsghdr_s=''
415 d_copysign=''
416 d_copysignl=''
417 d_cplusplus=''
418 cryptlib=''
419 d_crypt=''
420 crypt_r_proto=''
421 d_crypt_r=''
422 d_csh=''
423 full_csh=''
424 d_ctermid=''
425 ctermid_r_proto=''
426 d_ctermid_r=''
427 ctime_r_proto=''
428 d_ctime_r=''
429 d_cuserid=''
430 d_dbminitproto=''
431 d_difftime=''
432 d_dir_dd_fd=''
433 d_dirfd=''
434 d_dladdr=''
435 d_dlerror=''
436 d_dlopen=''
437 d_dlsymun=''
438 d_dosuid=''
439 d_suidsafe=''
440 d_drand48_r=''
441 drand48_r_proto=''
442 d_drand48proto=''
443 d_dup2=''
444 d_dup3=''
445 d_eaccess=''
446 d_endgrent=''
447 d_endgrent_r=''
448 endgrent_r_proto=''
449 d_endhent=''
450 d_endhostent_r=''
451 endhostent_r_proto=''
452 d_endnent=''
453 d_endnetent_r=''
454 endnetent_r_proto=''
455 d_endpent=''
456 d_endprotoent_r=''
457 endprotoent_r_proto=''
458 d_endpwent=''
459 d_endpwent_r=''
460 endpwent_r_proto=''
461 d_endsent=''
462 d_endservent_r=''
463 endservent_r_proto=''
464 d_erf=''
465 d_erfc=''
466 d_exp2=''
467 d_expm1=''
468 d_faststdio=''
469 d_fchdir=''
470 d_fchmod=''
471 d_fchown=''
472 d_fcntl=''
473 d_fcntl_can_lock=''
474 d_fd_macros=''
475 d_fd_set=''
476 d_fds_bits=''
477 d_fdclose=''
478 d_fdim=''
479 d_fegetround=''
480 d_fgetpos=''
481 d_finite=''
482 d_finitel=''
483 d_flexfnam=''
484 d_flock=''
485 d_flockproto=''
486 d_fma=''
487 d_fmax=''
488 d_fmin=''
489 d_fork=''
490 d_fp_class=''
491 d_fp_classl=''
492 d_fpclass=''
493 d_fp_classify=''
494 d_fpclassify=''
495 d_fpclassl=''
496 d_fpgetround=''
497 d_fpos64_t=''
498 d_frexpl=''
499 d_fs_data_s=''
500 d_fchmodat=''
501 d_linkat=''
502 d_openat=''
503 d_renameat=''
504 d_unlinkat=''
505 d_fseeko=''
506 d_fsetpos=''
507 d_fstatfs=''
508 d_fsync=''
509 d_ftello=''
510 d_ftime=''
511 d_gettimeod=''
512 d_futimes=''
513 d_gai_strerror=''
514 d_Gconvert=''
515 d_getaddrinfo=''
516 d_getcwd=''
517 d_getenv_preserves_other_thread=''
518 d_getespwnam=''
519 d_getfsstat=''
520 d_getgrent=''
521 d_getgrent_r=''
522 getgrent_r_proto=''
523 d_getgrgid_r=''
524 getgrgid_r_proto=''
525 d_getgrnam_r=''
526 getgrnam_r_proto=''
527 d_getgrps=''
528 d_gethbyaddr=''
529 d_gethbyname=''
530 d_gethent=''
531 aphostname=''
532 d_gethname=''
533 d_phostname=''
534 d_uname=''
535 d_gethostbyaddr_r=''
536 gethostbyaddr_r_proto=''
537 d_gethostbyname_r=''
538 gethostbyname_r_proto=''
539 d_gethostent_r=''
540 gethostent_r_proto=''
541 d_gethostprotos=''
542 d_getitimer=''
543 d_getlogin=''
544 d_getlogin_r=''
545 getlogin_r_proto=''
546 d_getmnt=''
547 d_getmntent=''
548 d_getnameinfo=''
549 d_getnbyaddr=''
550 d_getnbyname=''
551 d_getnent=''
552 d_getnetbyaddr_r=''
553 getnetbyaddr_r_proto=''
554 d_getnetbyname_r=''
555 getnetbyname_r_proto=''
556 d_getnetent_r=''
557 getnetent_r_proto=''
558 d_getnetprotos=''
559 d_getpagsz=''
560 d_getpent=''
561 d_getpgid=''
562 d_getpgrp2=''
563 d_bsdgetpgrp=''
564 d_getpgrp=''
565 d_getppid=''
566 d_getprior=''
567 d_getpbyname=''
568 d_getpbynumber=''
569 d_getprotobyname_r=''
570 getprotobyname_r_proto=''
571 d_getprotobynumber_r=''
572 getprotobynumber_r_proto=''
573 d_getprotoent_r=''
574 getprotoent_r_proto=''
575 d_getprotoprotos=''
576 d_getprpwnam=''
577 d_getpwent=''
578 d_getpwent_r=''
579 getpwent_r_proto=''
580 d_getpwnam_r=''
581 getpwnam_r_proto=''
582 d_getpwuid_r=''
583 getpwuid_r_proto=''
584 d_getsent=''
585 d_getservbyname_r=''
586 getservbyname_r_proto=''
587 d_getservbyport_r=''
588 getservbyport_r_proto=''
589 d_getservent_r=''
590 getservent_r_proto=''
591 d_getservprotos=''
592 d_getspnam=''
593 d_getspnam_r=''
594 getspnam_r_proto=''
595 d_getsbyname=''
596 d_getsbyport=''
597 d_gmtime_r=''
598 gmtime_r_proto=''
599 d_gnulibc=''
600 gnulibc_version=''
601 d_hasmntopt=''
602 d_htonl=''
603 d_hypot=''
604 d_ilogb=''
605 d_ilogbl=''
606 d_inetaton=''
607 d_inetntop=''
608 d_inetpton=''
609 d_int64_t=''
610 d_isascii=''
611 d_isblank=''
612 d_isfinite=''
613 d_isfinitel=''
614 d_isinf=''
615 d_isinfl=''
616 d_isless=''
617 d_isnan=''
618 d_isnanl=''
619 d_isnormal=''
620 d_j0=''
621 d_j0l=''
622 d_killpg=''
623 d_lc_monetary_2008=''
624 d_lchown=''
625 d_ldbl_dig=''
626 d_lgamma=''
627 d_lgamma_r=''
628 d_libm_lib_version=''
629 d_link=''
630 d_llrint=''
631 d_llrintl=''
632 d_llround=''
633 d_llroundl=''
634 d_localeconv_l=''
635 d_localtime_r=''
636 d_localtime_r_needs_tzset=''
637 localtime_r_proto=''
638 d_locconv=''
639 d_lockf=''
640 d_log1p=''
641 d_log2=''
642 d_logb=''
643 d_ldexpl=''
644 d_long_double_style_ieee=''
645 d_long_double_style_ieee_doubledouble=''
646 d_long_double_style_ieee_extended=''
647 d_long_double_style_ieee_std=''
648 d_long_double_style_vax=''
649 d_longdbl=''
650 longdblkind=''
651 longdblsize=''
652 d_longlong=''
653 longlongsize=''
654 d_lrint=''
655 d_lrintl=''
656 d_lround=''
657 d_lroundl=''
658 d_lseekproto=''
659 d_lstat=''
660 d_madvise=''
661 d_malloc_good_size=''
662 d_malloc_size=''
663 d_malloc_usable_size=''
664 d_mblen=''
665 d_mbrlen=''
666 d_mbrtowc=''
667 d_mbstowcs=''
668 d_mbtowc=''
669 d_memmem=''
670 d_memrchr=''
671 d_mkdir=''
672 d_mkdtemp=''
673 d_mkfifo=''
674 d_mkostemp=''
675 d_mkstemp=''
676 d_mkstemps=''
677 d_mktime=''
678 d_mmap=''
679 mmaptype=''
680 d_modfl=''
681 d_modflproto=''
682 d_mprotect=''
683 d_msg=''
684 d_msgctl=''
685 d_msgget=''
686 d_msghdr_s=''
687 d_msgrcv=''
688 d_msgsnd=''
689 d_msync=''
690 d_munmap=''
691 d_nan=''
692 d_nanosleep=''
693 d_nearbyint=''
694 d_duplocale=''
695 d_freelocale=''
696 d_newlocale=''
697 d_querylocale=''
698 d_uselocale=''
699 i_xlocale=''
700 d_nextafter=''
701 d_nexttoward=''
702 d_nice=''
703 d_nl_langinfo=''
704 d_thread_safe_nl_langinfo_l=''
705 d_off64_t=''
706 d_open3=''
707 d_fpathconf=''
708 d_pathconf=''
709 d_pause=''
710 d_pipe2=''
711 d_pipe=''
712 d_poll=''
713 d_portable=''
714 d_prctl=''
715 d_prctl_set_name=''
716 d_procselfexe=''
717 procselfexe=''
718 d_old_pthread_create_joinable=''
719 old_pthread_create_joinable=''
720 d_pthread_atfork=''
721 d_pthread_attr_setscope=''
722 d_pthread_yield=''
723 d_sched_yield=''
724 sched_yield=''
725 d_ptrdiff_t=''
726 d_qgcvt=''
727 d_random_r=''
728 random_r_proto=''
729 d_readdir64_r=''
730 readdir64_r_proto=''
731 d_readdir=''
732 d_rewinddir=''
733 d_seekdir=''
734 d_telldir=''
735 d_readdir_r=''
736 readdir_r_proto=''
737 d_readlink=''
738 d_readv=''
739 d_recvmsg=''
740 d_re_comp=''
741 d_regcmp=''
742 d_regcomp=''
743 d_remainder=''
744 d_remquo=''
745 d_rename=''
746 d_rint=''
747 d_rmdir=''
748 d_round=''
749 d_sbrkproto=''
750 d_scalbn=''
751 d_scalbnl=''
752 d_select=''
753 d_sem=''
754 d_semctl=''
755 d_semget=''
756 d_semop=''
757 d_sendmsg=''
758 d_setegid=''
759 d_seteuid=''
760 d_setgrent=''
761 d_setgrent_r=''
762 setgrent_r_proto=''
763 d_setgrps=''
764 d_sethent=''
765 d_sethostent_r=''
766 sethostent_r_proto=''
767 d_setitimer=''
768 d_setlinebuf=''
769 d_has_C_UTF8=''
770 d_setlocale=''
771 d_setlocale_accepts_any_locale_name=''
772 d_setlocale_r=''
773 setlocale_r_proto=''
774 d_setnent=''
775 d_setnetent_r=''
776 setnetent_r_proto=''
777 d_setpent=''
778 d_setpgid=''
779 d_setpgrp2=''
780 d_bsdsetpgrp=''
781 d_setpgrp=''
782 d_setprior=''
783 d_setproctitle=''
784 d_setprotoent_r=''
785 setprotoent_r_proto=''
786 d_setpwent=''
787 d_setpwent_r=''
788 setpwent_r_proto=''
789 d_setregid=''
790 d_setresgid=''
791 d_setresuid=''
792 d_setreuid=''
793 d_setrgid=''
794 d_setruid=''
795 d_setsent=''
796 d_setservent_r=''
797 setservent_r_proto=''
798 d_setsid=''
799 d_setvbuf=''
800 d_shm=''
801 d_shmat=''
802 d_shmatprototype=''
803 shmattype=''
804 d_shmctl=''
805 d_shmdt=''
806 d_shmget=''
807 d_sigaction=''
808 d_siginfo_si_addr=''
809 d_siginfo_si_band=''
810 d_siginfo_si_errno=''
811 d_siginfo_si_fd=''
812 d_siginfo_si_pid=''
813 d_siginfo_si_status=''
814 d_siginfo_si_uid=''
815 d_siginfo_si_value=''
816 d_signbit=''
817 d_sigprocmask=''
818 d_sigsetjmp=''
819 usesitecustomize=''
820 d_snprintf=''
821 d_vsnprintf=''
822 d_sockatmark=''
823 d_sockatmarkproto=''
824 d_ip_mreq=''
825 d_ip_mreq_source=''
826 d_ipv6_mreq=''
827 d_ipv6_mreq_source=''
828 d_msg_ctrunc=''
829 d_msg_dontroute=''
830 d_msg_oob=''
831 d_msg_peek=''
832 d_msg_proxy=''
833 d_oldsock=''
834 d_scm_rights=''
835 d_sin6_scope_id=''
836 d_sockaddr_in6=''
837 d_sockaddr_sa_len=''
838 d_sockaddr_storage=''
839 d_socket=''
840 d_sockpair=''
841 sockethdr=''
842 socketlib=''
843 d_socklen_t=''
844 d_socks5_init=''
845 d_sqrtl=''
846 d_srand48_r=''
847 srand48_r_proto=''
848 d_srandom_r=''
849 srandom_r_proto=''
850 d_sresgproto=''
851 d_sresuproto=''
852 d_stat=''
853 d_statblks=''
854 d_statfs_f_flags=''
855 d_statfs_s=''
856 d_static_inline=''
857 perl_static_inline=''
858 d_fstatvfs=''
859 d_statvfs=''
860 d_stdio_cnt_lval=''
861 d_stdio_ptr_lval=''
862 d_stdio_ptr_lval_nochange_cnt=''
863 d_stdio_ptr_lval_sets_cnt=''
864 d_stdiobase=''
865 d_stdstdio=''
866 stdio_base=''
867 stdio_bufsiz=''
868 stdio_cnt=''
869 stdio_filbuf=''
870 stdio_ptr=''
871 d_strcoll=''
872 d_sysernlst=''
873 d_syserrlst=''
874 d_strerror_l=''
875 d_strerror_r=''
876 strerror_r_proto=''
877 d_strftime=''
878 d_strlcat=''
879 d_strlcpy=''
880 d_strnlen=''
881 d_strtod=''
882 d_strtod_l=''
883 d_strtol=''
884 d_strtold=''
885 d_strtold_l=''
886 d_strtoll=''
887 d_strtoq=''
888 d_strtoul=''
889 d_strtoull=''
890 d_strtouq=''
891 d_strxfrm=''
892 d_symlink=''
893 d_syscall=''
894 d_syscallproto=''
895 d_sysconf=''
896 d_system=''
897 d_tcgetpgrp=''
898 d_tcsetpgrp=''
899 d_telldirproto=''
900 d_tgamma=''
901 d_time=''
902 timetype=''
903 d_asctime64=''
904 d_ctime64=''
905 d_difftime64=''
906 d_gmtime64=''
907 d_localtime64=''
908 d_mktime64=''
909 d_timegm=''
910 clocktype=''
911 d_times=''
912 d_tmpnam_r=''
913 tmpnam_r_proto=''
914 d_towlower=''
915 d_towupper=''
916 d_trunc=''
917 d_truncate=''
918 d_truncl=''
919 d_ttyname_r=''
920 ttyname_r_proto=''
921 d_tzname=''
922 d_u32align=''
923 d_ualarm=''
924 d_umask=''
925 d_semctl_semid_ds=''
926 d_semctl_semun=''
927 d_union_semun=''
928 d_unordered=''
929 d_unsetenv=''
930 d_usleep=''
931 d_usleepproto=''
932 d_ustat=''
933 d_pseudofork=''
934 d_vfork=''
935 usevfork=''
936 d_voidsig=''
937 signal_t=''
938 d_wait4=''
939 d_waitpid=''
940 d_wcrtomb=''
941 d_wcscmp=''
942 d_wcstombs=''
943 d_wcsxfrm=''
944 d_wctomb=''
945 d_writev=''
946 default_inc_excludes_dot=''
947 dlext=''
948 bin_ELF=''
949 cccdlflags=''
950 ccdlflags=''
951 dlsrc=''
952 ld=''
953 ld_can_script=''
954 lddlflags=''
955 usedl=''
956 doublesize=''
957 dtraceobject=''
958 dtracexnolibs=''
959 ebcdic=''
960 fflushNULL=''
961 fflushall=''
962 fpossize=''
963 fpostype=''
964 gccansipedantic=''
965 gccosandvers=''
966 gccversion=''
967 gidformat=''
968 gidsign=''
969 gidsize=''
970 gidtype=''
971 groupstype=''
972 h_fcntl=''
973 h_sysfile=''
974 html1dir=''
975 html1direxp=''
976 installhtml1dir=''
977 html3dir=''
978 html3direxp=''
979 installhtml3dir=''
980 i_arpainet=''
981 i_bfd=''
982 i_crypt=''
983 db_hashtype=''
984 db_prefixtype=''
985 db_version_major=''
986 db_version_minor=''
987 db_version_patch=''
988 i_db=''
989 i_dbm=''
990 i_rpcsvcdbm=''
991 d_dirnamlen=''
992 direntrytype=''
993 i_dirent=''
994 i_dlfcn=''
995 i_execinfo=''
996 i_fcntl=''
997 i_fenv=''
998 i_fp=''
999 i_fp_class=''
1000 i_gdbm=''
1001 d_grpasswd=''
1002 i_grp=''
1003 i_ieeefp=''
1004 i_inttypes=''
1005 i_langinfo=''
1006 i_libutil=''
1007 i_locale=''
1008 i_machcthr=''
1009 i_malloc=''
1010 i_mallocmalloc=''
1011 i_mntent=''
1012 d_gdbm_ndbm_h_uses_prototypes=''
1013 d_gdbmndbm_h_uses_prototypes=''
1014 d_ndbm=''
1015 d_ndbm_h_uses_prototypes=''
1016 i_gdbm_ndbm=''
1017 i_gdbmndbm=''
1018 i_ndbm=''
1019 i_netdb=''
1020 i_neterrno=''
1021 i_netinettcp=''
1022 i_niin=''
1023 i_sysin=''
1024 i_poll=''
1025 i_prot=''
1026 i_pthread=''
1027 d_pwage=''
1028 d_pwchange=''
1029 d_pwclass=''
1030 d_pwcomment=''
1031 d_pwexpire=''
1032 d_pwgecos=''
1033 d_pwpasswd=''
1034 d_pwquota=''
1035 i_pwd=''
1036 i_quadmath=''
1037 i_shadow=''
1038 i_socks=''
1039 i_stdbool=''
1040 i_stdint=''
1041 i_stdlib=''
1042 i_sunmath=''
1043 i_sysaccess=''
1044 i_sysdir=''
1045 i_sysfile=''
1046 d_voidtty=''
1047 i_bsdioctl=''
1048 i_sysfilio=''
1049 i_sysioctl=''
1050 i_syssockio=''
1051 i_syslog=''
1052 i_sysmman=''
1053 i_sysmode=''
1054 i_sysmount=''
1055 i_sysndir=''
1056 i_sysparam=''
1057 i_syspoll=''
1058 i_sysresrc=''
1059 i_syssecrt=''
1060 i_sysselct=''
1061 i_sysstat=''
1062 i_sysstatfs=''
1063 i_sysstatvfs=''
1064 i_systimes=''
1065 i_systypes=''
1066 i_sysuio=''
1067 i_sysun=''
1068 i_sysutsname=''
1069 i_sysvfs=''
1070 i_syswait=''
1071 i_sgtty=''
1072 i_termio=''
1073 i_termios=''
1074 d_tm_tm_gmtoff=''
1075 d_tm_tm_zone=''
1076 i_systime=''
1077 i_systimek=''
1078 i_time=''
1079 timeincl=''
1080 i_unistd=''
1081 i_ustat=''
1082 i_utime=''
1083 i_vfork=''
1084 i_wchar=''
1085 i_wctype=''
1086 d_inc_version_list=''
1087 inc_version_list=''
1088 inc_version_list_init=''
1089 doubleinfbytes=''
1090 doublenanbytes=''
1091 longdblinfbytes=''
1092 longdblnanbytes=''
1093 installprefix=''
1094 installprefixexp=''
1095 installstyle=''
1096 installusrbinperl=''
1097 intsize=''
1098 longsize=''
1099 shortsize=''
1100 issymlink=''
1101 libc=''
1102 ldlibpthname=''
1103 libperl=''
1104 shrpenv=''
1105 useshrplib=''
1106 glibpth=''
1107 incpth=''
1108 libpth=''
1109 loclibpth=''
1110 plibpth=''
1111 xlibpth=''
1112 ignore_versioned_solibs=''
1113 libs=''
1114 libsdirs=''
1115 libsfiles=''
1116 libsfound=''
1117 libspath=''
1118 lns=''
1119 d_PRIEUldbl=''
1120 d_PRIFUldbl=''
1121 d_PRIGUldbl=''
1122 d_PRIeldbl=''
1123 d_PRIfldbl=''
1124 d_PRIgldbl=''
1125 d_SCNfldbl=''
1126 d_double_has_inf=''
1127 d_double_has_nan=''
1128 d_double_has_negative_zero=''
1129 d_double_has_subnormals=''
1130 d_double_style_cray=''
1131 d_double_style_ibm=''
1132 d_double_style_ieee=''
1133 d_double_style_vax=''
1134 doublekind=''
1135 sPRIEUldbl=''
1136 sPRIFUldbl=''
1137 sPRIGUldbl=''
1138 sPRIeldbl=''
1139 sPRIfldbl=''
1140 sPRIgldbl=''
1141 sSCNfldbl=''
1142 lseeksize=''
1143 lseektype=''
1144 make_set_make=''
1145 d_mymalloc=''
1146 freetype=''
1147 mallocobj=''
1148 mallocsrc=''
1149 malloctype=''
1150 usemallocwrap=''
1151 usemymalloc=''
1152 installman1dir=''
1153 man1dir=''
1154 man1direxp=''
1155 man1ext=''
1156 installman3dir=''
1157 man3dir=''
1158 man3direxp=''
1159 man3ext=''
1160 doublemantbits=''
1161 longdblmantbits=''
1162 nvmantbits=''
1163 modetype=''
1164 multiarch=''
1165 mydomain=''
1166 myhostname=''
1167 phostname=''
1168 c=''
1169 n=''
1170 d_eofnblk=''
1171 eagain=''
1172 o_nonblock=''
1173 rd_nodata=''
1174 need_va_copy=''
1175 netdb_hlen_type=''
1176 netdb_host_type=''
1177 netdb_name_type=''
1178 netdb_net_type=''
1179 groupcat=''
1180 hostcat=''
1181 passcat=''
1182 orderlib=''
1183 ranlib=''
1184 d_perl_otherlibdirs=''
1185 otherlibdirs=''
1186 package=''
1187 spackage=''
1188 pager=''
1189 api_revision=''
1190 api_subversion=''
1191 api_version=''
1192 api_versionstring=''
1193 patchlevel=''
1194 perl_patchlevel=''
1195 revision=''
1196 subversion=''
1197 version=''
1198 version_patchlevel_string=''
1199 perl5=''
1200 perladmin=''
1201 perlpath=''
1202 d_nv_preserves_uv=''
1203 d_nv_zero_is_allbits_zero=''
1204 i16size=''
1205 i16type=''
1206 i32size=''
1207 i32type=''
1208 i64size=''
1209 i64type=''
1210 i8size=''
1211 i8type=''
1212 ivsize=''
1213 ivtype=''
1214 nv_overflows_integers_at=''
1215 nv_preserves_uv_bits=''
1216 nvsize=''
1217 nvtype=''
1218 u16size=''
1219 u16type=''
1220 u32size=''
1221 u32type=''
1222 u64size=''
1223 u64type=''
1224 u8size=''
1225 u8type=''
1226 uvsize=''
1227 uvtype=''
1228 ivdformat=''
1229 nvEUformat=''
1230 nvFUformat=''
1231 nvGUformat=''
1232 nveformat=''
1233 nvfformat=''
1234 nvgformat=''
1235 uvXUformat=''
1236 uvoformat=''
1237 uvuformat=''
1238 uvxformat=''
1239 pidtype=''
1240 prefix=''
1241 prefixexp=''
1242 installprivlib=''
1243 privlib=''
1244 privlibexp=''
1245 ptrsize=''
1246 d_PRIXU64=''
1247 d_PRId64=''
1248 d_PRIi64=''
1249 d_PRIo64=''
1250 d_PRIu64=''
1251 d_PRIx64=''
1252 sPRIXU64=''
1253 sPRId64=''
1254 sPRIi64=''
1255 sPRIo64=''
1256 sPRIu64=''
1257 sPRIx64=''
1258 d_quad=''
1259 quadkind=''
1260 quadtype=''
1261 uquadtype=''
1262 drand01=''
1263 randbits=''
1264 randfunc=''
1265 randseedtype=''
1266 seedfunc=''
1267 installscript=''
1268 scriptdir=''
1269 scriptdirexp=''
1270 selectminbits=''
1271 selecttype=''
1272 sh=''
1273 targetsh=''
1274 sig_count=''
1275 sig_name=''
1276 sig_name_init=''
1277 sig_num=''
1278 sig_num_init=''
1279 sig_size=''
1280 d_sitearch=''
1281 installsitearch=''
1282 sitearch=''
1283 sitearchexp=''
1284 installsitebin=''
1285 sitebin=''
1286 sitebinexp=''
1287 installsitehtml1dir=''
1288 sitehtml1dir=''
1289 sitehtml1direxp=''
1290 installsitehtml3dir=''
1291 sitehtml3dir=''
1292 sitehtml3direxp=''
1293 installsitelib=''
1294 sitelib=''
1295 sitelib_stem=''
1296 sitelibexp=''
1297 installsiteman1dir=''
1298 siteman1dir=''
1299 siteman1direxp=''
1300 installsiteman3dir=''
1301 siteman3dir=''
1302 siteman3direxp=''
1303 siteprefix=''
1304 siteprefixexp=''
1305 installsitescript=''
1306 sitescript=''
1307 sitescriptexp=''
1308 sizesize=''
1309 sizetype=''
1310 d_libname_unique=''
1311 so=''
1312 socksizetype=''
1313 sharpbang=''
1314 shsharp=''
1315 spitshell=''
1316 src=''
1317 ssizetype=''
1318 st_ino_sign=''
1319 st_ino_size=''
1320 startperl=''
1321 startsh=''
1322 stdchar=''
1323 d_stdio_stream_array=''
1324 stdio_stream_array=''
1325 sysman=''
1326 sGMTIME_max=''
1327 sGMTIME_min=''
1328 sLOCALTIME_max=''
1329 sLOCALTIME_min=''
1330 trnl=''
1331 uidformat=''
1332 uidsign=''
1333 uidsize=''
1334 uidtype=''
1335 archname64=''
1336 use64bitall=''
1337 use64bitint=''
1338 usecbacktrace=''
1339 usedefaultstrict=''
1340 dtrace=''
1341 usedtrace=''
1342 usefaststdio=''
1343 usekernprocpathname=''
1344 ccflags_uselargefiles=''
1345 ldflags_uselargefiles=''
1346 libswanted_uselargefiles=''
1347 uselargefiles=''
1348 uselongdouble=''
1349 usemorebits=''
1350 usemultiplicity=''
1351 nm_opt=''
1352 nm_so_opt=''
1353 runnm=''
1354 usenm=''
1355 usensgetexecutablepath=''
1356 useperlio=''
1357 usequadmath=''
1358 usesocks=''
1359 d_oldpthreads=''
1360 useithreads=''
1361 usereentrant=''
1362 usethreads=''
1363 incpath=''
1364 mips_type=''
1365 usrinc=''
1366 d_vendorarch=''
1367 installvendorarch=''
1368 vendorarch=''
1369 vendorarchexp=''
1370 d_vendorbin=''
1371 installvendorbin=''
1372 vendorbin=''
1373 vendorbinexp=''
1374 installvendorhtml1dir=''
1375 vendorhtml1dir=''
1376 vendorhtml1direxp=''
1377 installvendorhtml3dir=''
1378 vendorhtml3dir=''
1379 vendorhtml3direxp=''
1380 d_vendorlib=''
1381 installvendorlib=''
1382 vendorlib=''
1383 vendorlib_stem=''
1384 vendorlibexp=''
1385 installvendorman1dir=''
1386 vendorman1dir=''
1387 vendorman1direxp=''
1388 installvendorman3dir=''
1389 vendorman3dir=''
1390 vendorman3direxp=''
1391 usevendorprefix=''
1392 vendorprefix=''
1393 vendorprefixexp=''
1394 d_vendorscript=''
1395 installvendorscript=''
1396 vendorscript=''
1397 vendorscriptexp=''
1398 versiononly=''
1399 yacc=''
1400 yaccflags=''
1401 CONFIG=''
1402
1403 : Detect odd OSs
1404 define='define'
1405 undef='undef'
1406 smallmach='pdp11 i8086 z8000 i80286 iAPX286'
1407 rmlist=''
1408
1409 : We must find out about Eunice early
1410 eunicefix=':'
1411 if test -f /etc/unixtovms; then
1412         eunicefix=/etc/unixtovms
1413 fi
1414 if test -f /etc/unixtovms.exe; then
1415         eunicefix=/etc/unixtovms.exe
1416 fi
1417
1418 : Set executable suffix now -- needed before hints available
1419 if test -f "/libs/version.library"; then
1420 : Amiga OS
1421     _exe=""
1422 elif test -f "/system/gnu_library/bin/ar.pm"; then
1423 : Stratus VOS
1424     _exe=".pm"
1425 elif test -n "$DJGPP"; then
1426 : DOS DJGPP
1427     _exe=".exe"
1428 elif test -f /kern/cookiejar; then
1429 : MiNT
1430     _exe=""
1431 elif test -d c:/. -o -n "$is_os2" ; then
1432 : OS/2 or cygwin
1433     _exe=".exe"
1434 fi
1435
1436 groupstype=''
1437 i_whoami=''
1438 : Possible local include directories to search.
1439 : Set locincpth to "" in a hint file to defeat local include searches.
1440 locincpth="/usr/local/include /opt/local/include /usr/gnu/include"
1441 locincpth="$locincpth /opt/gnu/include /usr/GNU/include /opt/GNU/include"
1442 :
1443 : no include file wanted by default
1444 inclwanted=''
1445
1446 : Enable -DEBUGGING and -DDEBUGGING from the command line
1447 EBUGGING=''
1448 DEBUGGING=''
1449
1450 : Trailing extension.  Override this in a hint file, if needed.
1451 : Extra object files, if any, needed on this platform.
1452 archobjs=''
1453 libnames=''
1454 : change the next line if compiling for Xenix/286 on Xenix/386
1455 xlibpth='/usr/lib/386 /lib/386'
1456 : Possible local library directories to search.
1457 loclibpth="/usr/local/lib /opt/local/lib /usr/gnu/lib"
1458 loclibpth="$loclibpth /opt/gnu/lib /usr/GNU/lib /opt/GNU/lib"
1459
1460 : general looking path for locating libraries
1461 glibpth="/lib /usr/lib $xlibpth"
1462 glibpth="$glibpth /usr/ccs/lib /usr/ucblib /usr/local/lib"
1463 test -f /usr/shlib/libc.so && glibpth="/usr/shlib $glibpth"
1464 test -f /shlib/libc.so     && glibpth="/shlib $glibpth"
1465 test -d /usr/lib64         && glibpth="$glibpth /lib64 /usr/lib64 /usr/local/lib64"
1466
1467 : Private path used by Configure to find libraries.  Its value
1468 : is prepended to libpth. This variable takes care of special
1469 : machines, like the mips.  Usually, it should be empty.
1470 plibpth=''
1471
1472 : default library list
1473 libswanted=''
1474 : some systems want to use only the non-versioned libso:s
1475 ignore_versioned_solibs=''
1476 ccname=''
1477 ccversion=''
1478 perllibs=''
1479 : set useposix=false in your hint file to disable the POSIX extension.
1480 useposix=true
1481 : set useopcode=false in your hint file to disable the Opcode extension.
1482 useopcode=true
1483 : set uselanginfo=false in your hint file to disable the I18N::Langinfo extension.
1484 uselanginfo=true
1485 archname64=''
1486 ccflags_uselargefiles=''
1487 ldflags_uselargefiles=''
1488 libswanted_uselargefiles=''
1489 : set usemultiplicity on the Configure command line to enable multiplicity.
1490 : set usesocks on the Configure command line to enable socks.
1491 archname=''
1492 : set usethreads on the Configure command line to enable threads.
1493 usereentrant='undef'
1494 : List of libraries we want.
1495 : If anyone needs extra -lxxx, put those in a hint file.
1496 libswanted="cl pthread socket bind inet nsl ndbm gdbm dbm db malloc dl ld"
1497 libswanted="$libswanted sun m crypt sec util c cposix posix ucb bsd BSD"
1498 : We probably want to search /usr/shlib before most other libraries.
1499 : This is only used by the lib/ExtUtils/MakeMaker.pm routine extliblist.
1500 glibpth=`echo " $glibpth " | sed -e 's! /usr/shlib ! !'`
1501 glibpth="/usr/shlib $glibpth"
1502 : Do not use vfork unless overridden by a hint file.
1503 usevfork=false
1504
1505 : Find the basic shell for Bourne shell scripts
1506 case "$sh" in
1507 '')
1508         case "$SYSTYPE" in
1509         *bsd*|sys5*) xxx="/$SYSTYPE/bin/sh";;
1510         *) xxx='/bin/sh';;
1511         esac
1512         if test -f "$xxx"; then
1513                 sh="$xxx"
1514         else
1515                 : Build up a list and do a single loop so we can 'break' out.
1516                 pth=`echo $PATH | sed -e "s/$p_/ /g"`
1517                 for xxx in sh bash ksh pdksh ash; do
1518                         for p in $pth; do
1519                                 try="$try ${p}/${xxx}"
1520                         done
1521                 done
1522                 for xxx in $try; do
1523                         if test -f "$xxx"; then
1524                                 sh="$xxx";
1525                                 break
1526                         elif test "X$_exe" != X -a -f "$xxx$_exe"; then
1527                                 sh="$xxx";
1528                                 break
1529                         elif test -f "$xxx.exe"; then
1530                                 sh="$xxx";
1531                                 break
1532                         fi
1533                 done
1534         fi
1535         ;;
1536 esac
1537
1538 case "$sh" in
1539 '')     cat >&2 <<EOM
1540 $me:  Fatal Error:  I can't find a Bourne Shell anywhere.
1541
1542 Usually it's in /bin/sh.  How did you even get this far?
1543 Please report this issue at https://github.com/Perl/perl5/issues
1544 and we'll try to straighten this all out.
1545 EOM
1546         exit 1
1547         ;;
1548 esac
1549
1550 : When cross-compiling we need to separate the sh-to-run-Configure-with from the sh-to-use-in-Perl
1551 : default both to the same thing, cross-compilers can then set targetsh differently if they like
1552 targetsh=$sh
1553
1554 : see if sh knows # comments
1555 if `$sh -c '#' >/dev/null 2>&1`; then
1556         shsharp=true
1557         spitshell=cat
1558         xcat=/bin/cat
1559         test -f $xcat$_exe || xcat=/usr/bin/cat
1560         if test ! -f $xcat$_exe; then
1561                 for p in `echo $PATH | sed -e "s/$p_/ /g"` $paths; do
1562                         if test -f $p/cat$_exe; then
1563                                 xcat=$p/cat
1564                                 break
1565                         fi
1566                 done
1567                 if test ! -f $xcat$_exe; then
1568                         echo "Can't find cat anywhere!"
1569                         exit 1
1570                 fi
1571         fi
1572         echo "#!$xcat" >sharp
1573         $eunicefix sharp
1574         chmod +x sharp
1575         ./sharp > today 2>/dev/null
1576         if test -s today; then
1577                 sharpbang='#!'
1578         else
1579                 echo "#! $xcat" > sharp
1580                 $eunicefix sharp
1581                 chmod +x sharp
1582                 ./sharp > today 2>/dev/null
1583                 if test -s today; then
1584                         sharpbang='#! '
1585                 else
1586                         sharpbang=': use '
1587                 fi
1588         fi
1589 else
1590         echo " "
1591         echo "Your $sh doesn't grok # comments--I will strip them later on."
1592         shsharp=false
1593         cd ..
1594         echo "exec grep -v '^[  ]*#'" >spitshell
1595         chmod +x spitshell
1596         $eunicefix spitshell
1597         spitshell=`pwd`/spitshell
1598         cd UU
1599         echo "I presume that if # doesn't work, #! won't work either!"
1600         sharpbang=': use '
1601 fi
1602 rm -f sharp today
1603
1604 : figure out how to guarantee sh startup
1605 case "$startsh" in
1606 '') startsh=${sharpbang}${sh} ;;
1607 *)
1608 esac
1609 cat >sharp <<EOSS
1610 $startsh
1611 set abc
1612 test "$?abc" != 1
1613 EOSS
1614
1615 chmod +x sharp
1616 $eunicefix sharp
1617 if ./sharp; then
1618         : echo "Yup, it does."
1619 else
1620         echo "Hmm... '$startsh' does not guarantee sh startup..."
1621         echo "You may have to fix up the shell scripts to make sure $sh runs them."
1622 fi
1623 rm -f sharp
1624
1625 : Save command line options in file UU/cmdline.opt for later use in
1626 : generating config.sh.
1627 cat > cmdline.opt <<EOSH
1628 : Configure command line arguments.
1629 config_arg0='$0'
1630 config_args='$*'
1631 config_argc=$#
1632 EOSH
1633 argn=1
1634 args_exp=''
1635 args_sep=''
1636 for arg in "$@"; do
1637         cat >>cmdline.opt <<EOSH
1638 config_arg$argn='$arg'
1639 EOSH
1640         cat <<EOC | sed -e "s/'/'"'"'"'"'"'"'/g" > cmdl.opt
1641 $arg
1642 EOC
1643         arg_exp=`cat cmdl.opt`
1644         args_exp="$args_exp$args_sep'$arg_exp'"
1645         argn=`expr $argn + 1`
1646         args_sep=' '
1647 done
1648 rm -f cmdl.opt
1649
1650 : produce awk script to parse command line options
1651 cat >options.awk <<'EOF'
1652 BEGIN {
1653         optstr = "A:dD:eEf:hKOrsSU:V";  # getopt-style specification
1654
1655         len = length(optstr);
1656         for (i = 1; i <= len; i++) {
1657                 c = substr(optstr, i, 1);
1658                 if (i < len) a = substr(optstr, i + 1, 1); else a = "";
1659                 if (a == ":") {
1660                         arg[c] = 1;
1661                         i++;
1662                 }
1663                 opt[c] = 1;
1664         }
1665 }
1666 {
1667         expect = 0;
1668         str = $0;
1669         if (substr(str, 1, 1) != "-") {
1670                 printf("'%s'\n", str);
1671                 next;
1672         }
1673         len = length($0);
1674         for (i = 2; i <= len; i++) {
1675                 c = substr(str, i, 1);
1676                 if (!opt[c]) {
1677                         printf("-%s\n", substr(str, i));
1678                         next;
1679                 }
1680                 printf("-%s\n", c);
1681                 if (arg[c]) {
1682                         if (i < len)
1683                                 printf("'%s'\n", substr(str, i + 1));
1684                         else
1685                                 expect = 1;
1686                         next;
1687                 }
1688         }
1689 }
1690 END {
1691         if (expect)
1692                 print "?";
1693 }
1694 EOF
1695
1696 : process the command line options
1697 set X `for arg in "$@"; do echo "X$arg"; done |
1698         sed -e s/X// | awk -f options.awk`
1699 eval "set $*"
1700 shift
1701 rm -f options.awk
1702
1703 : set up default values
1704 fastread=''
1705 reuseval=false
1706 config_sh=''
1707 alldone=''
1708 error=''
1709 silent=''
1710 extractsh=''
1711 knowitall=''
1712 rm -f optdef.sh posthint.sh
1713 cat >optdef.sh <<EOS
1714 $startsh
1715 EOS
1716
1717
1718 : option parsing
1719 while test $# -gt 0; do
1720         case "$1" in
1721         -d) shift; fastread=yes;;
1722         -e) shift; alldone=cont;;
1723         -f)
1724                 shift
1725                 cd ..
1726                 if test -r "$1"; then
1727                         config_sh="$1"
1728                 else
1729                         echo "$me: cannot read config file $1." >&2
1730                         error=true
1731                 fi
1732                 cd UU
1733                 shift;;
1734         --help|\
1735         -h) shift; error=true;;
1736         -r) shift; reuseval=true;;
1737         -s) shift; silent=true; realsilent=true;;
1738         -E) shift; alldone=exit;;
1739         -K) shift; knowitall=true;;
1740         -O) shift;;
1741         -S) shift; silent=true; extractsh=true;;
1742         -D)
1743                 shift
1744                 case "$1" in
1745                 *=)
1746                         echo "$me: use '-U symbol=', not '-D symbol='." >&2
1747                         echo "$me: ignoring -D $1" >&2
1748                         ;;
1749                 *=*) echo "$1" | \
1750                                 sed -e "s/'/'\"'\"'/g" -e "s/=\(.*\)/='\1'/" >> optdef.sh;;
1751                 *) echo "$1='define'" >> optdef.sh;;
1752                 esac
1753                 shift
1754                 ;;
1755         -U)
1756                 shift
1757                 case "$1" in
1758                 *=) echo "$1" >> optdef.sh;;
1759                 *=*)
1760                         echo "$me: use '-D symbol=val', not '-U symbol=val'." >&2
1761                         echo "$me: ignoring -U $1" >&2
1762                         ;;
1763                 *) echo "$1='undef'" >> optdef.sh;;
1764                 esac
1765                 shift
1766                 ;;
1767         -A)
1768             shift
1769             xxx=''
1770             yyy="$1"
1771             zzz=''
1772             uuu=undef
1773             case "$yyy" in
1774             *=*) zzz=`echo "$yyy"|sed 's!=.*!!'`
1775                  case "$zzz" in
1776                  *:*) zzz='' ;;
1777                  *)   xxx=append
1778                       zzz=" "`echo "$yyy"|sed 's!^[^=]*=!!'`
1779                       yyy=`echo "$yyy"|sed 's!=.*!!'` ;;
1780                  esac
1781                  ;;
1782             esac
1783             case "$xxx" in
1784             '')  case "$yyy" in
1785                  *:*) xxx=`echo "$yyy"|sed 's!:.*!!'`
1786                       yyy=`echo "$yyy"|sed 's!^[^:]*:!!'`
1787                       zzz=`echo "$yyy"|sed 's!^[^=]*=!!'`
1788                       yyy=`echo "$yyy"|sed 's!=.*!!'` ;;
1789                  *)   xxx=`echo "$yyy"|sed 's!:.*!!'`
1790                       yyy=`echo "$yyy"|sed 's!^[^:]*:!!'` ;;
1791                  esac
1792                  ;;
1793             esac
1794             case "$xxx" in
1795             append)
1796                 echo "$yyy=\"\${$yyy}$zzz\""    >> posthint.sh ;;
1797             clear)
1798                 echo "$yyy=''"                  >> posthint.sh ;;
1799             define)
1800                 case "$zzz" in
1801                 '') zzz=define ;;
1802                 esac
1803                 echo "$yyy='$zzz'"              >> posthint.sh ;;
1804             eval)
1805                 echo "eval \"$yyy=$zzz\""       >> posthint.sh ;;
1806             prepend)
1807                 echo "$yyy=\"$zzz\${$yyy}\""    >> posthint.sh ;;
1808             undef)
1809                 case "$zzz" in
1810                 '') zzz="$uuu" ;;
1811                 esac
1812                 echo "$yyy=$zzz"                >> posthint.sh ;;
1813             *)  echo "$me: unknown -A command '$xxx', ignoring -A $1" >&2 ;;
1814             esac
1815             shift
1816             ;;
1817         -V) echo "$me generated by metaconfig 3.5 PL0." >&2
1818             exit 0;;
1819         --) break;;
1820         -*) echo "$me: unknown option $1" >&2; shift; error=true;;
1821         *) break;;
1822         esac
1823 done
1824
1825 case "$error" in
1826 true)
1827         cat >&2 <<EOM
1828 Usage: $me [-dehrsEKOSV] [-f config.sh] [-D symbol] [-D symbol=value]
1829                  [-U symbol] [-U symbol=] [-A command:symbol...]
1830   -d : use defaults for all answers.
1831   -e : go on without questioning past the production of config.sh.
1832   -f : specify an alternate default configuration file.
1833   -h : print this help message and exit (with an error status).
1834   -r : reuse C symbols value if possible (skips costly nm extraction).
1835   -s : silent mode, only echoes questions and essential information.
1836   -D : define symbol to have some value:
1837          -D symbol         symbol gets the value 'define'
1838          -D symbol=value   symbol gets the value 'value'
1839        common used examples (see INSTALL for more info):
1840          -Duse64bitint            use 64bit integers
1841          -Duse64bitall            use 64bit integers and pointers
1842          -Dusethreads             use thread support
1843          -Dinc_version_list=none  do not include older perl trees in @INC
1844          -DEBUGGING=none          DEBUGGING options
1845          -Dcc=gcc                 choose your compiler
1846          -Dprefix=/opt/perl5      choose your destination
1847   -E : stop at the end of questions, after having produced config.sh.
1848   -K : do not use unless you know what you are doing.
1849   -O : ignored for backward compatibility
1850   -S : perform variable substitutions on all .SH files (can mix with -f)
1851   -U : undefine symbol:
1852          -U symbol    symbol gets the value 'undef'
1853          -U symbol=   symbol gets completely empty
1854        e.g.:  -Uversiononly
1855   -A : manipulate symbol after the platform specific hints have been applied:
1856          -A append:symbol=value   append value to symbol
1857          -A symbol=value          like append:, but with a separating space
1858          -A define:symbol=value   define symbol to have value
1859          -A clear:symbol          define symbol to be ''
1860          -A define:symbol         define symbol to be 'define'
1861          -A eval:symbol=value     define symbol to be eval of value
1862          -A prepend:symbol=value  prepend value to symbol
1863          -A undef:symbol          define symbol to be 'undef'
1864          -A undef:symbol=         define symbol to be ''
1865        e.g.:  -A prepend:libswanted='cl pthread '
1866               -A ccflags=-DSOME_MACRO
1867   -V : print version number and exit (with a zero status).
1868 EOM
1869         exit 1
1870         ;;
1871 esac
1872
1873 : Sanity checks
1874 case "$fastread$alldone" in
1875 yescont|yesexit) ;;
1876 *)
1877         case "$extractsh" in
1878         true) ;;
1879         *)
1880                 if test ! -t 0; then
1881                         echo "Say 'sh Configure', not 'sh <Configure'"
1882                         exit 1
1883                 fi
1884                 ;;
1885         esac
1886         ;;
1887 esac
1888
1889 exec 4>&1
1890 case "$silent" in
1891 true) exec 1>/dev/null;;
1892 esac
1893
1894 : run the defines and the undefines, if any, but leave the file out there...
1895 touch optdef.sh
1896 grep '\\' optdef.sh >/dev/null 2>&1
1897 if test $? = 0; then
1898     echo "Configure does not support \\ in -D arguments"
1899     exit 1
1900 fi
1901 . ./optdef.sh
1902 : create the posthint manipulation script and leave the file out there...
1903 touch posthint.sh
1904
1905 : set package name
1906 package='perl5'
1907 first=`echo $package | sed -e 's/^\(.\).*/\1/'`
1908 last=`echo $package | sed -e 's/^.\(.*\)/\1/'`
1909 case "`echo AbyZ | tr '[:lower:]' '[:upper:]' 2>/dev/null`"-"`echo AbyZ | tr '[:upper:]' '[:lower:]' 2>/dev/null`" in
1910 ABYZ-abyz) spackage=`echo $first | tr '[:lower:]' '[:upper:]'`$last;;
1911 *) spackage=`echo $first | tr '[a-z]' '[A-Z]'`$last;;
1912 esac
1913
1914 : Some greps do not return status, grrr.
1915 echo "grimblepritz" >grimble
1916 if grep blurfldyick grimble >/dev/null 2>&1 ; then
1917         contains=contains
1918 elif grep grimblepritz grimble >/dev/null 2>&1 ; then
1919         contains=grep
1920 else
1921         contains=contains
1922 fi
1923 rm -f grimble
1924 : the following should work in any shell
1925 case "$contains" in
1926 contains*)
1927         echo " " >&4
1928         echo "AGH!  Grep doesn't return a status.  Attempting remedial action." >&4
1929         cat >contains <<'EOSS'
1930 grep "$1" "$2" >.greptmp && cat .greptmp && test -s .greptmp
1931 EOSS
1932 contains=./contains
1933 chmod +x $contains
1934 esac
1935
1936 : Find the path to the source tree
1937 case "$src" in
1938 '') case "$0" in
1939     */*) src=`echo $0 | sed -e 's%/[^/][^/]*$%%'`
1940          case "$src" in
1941          /*)    ;;
1942          .)     ;;
1943          *)     src=`cd ../$src && pwd` ;;
1944          esac
1945          ;;
1946     *)   src='.';;
1947     esac;;
1948 esac
1949 case "$src" in
1950 '')     src=/
1951         rsrc=/
1952         ;;
1953 /*)     rsrc="$src";;
1954 *)      rsrc="../$src";;
1955 esac
1956 if test -f $rsrc/Configure && \
1957         $contains "^package='$package'\$" $rsrc/Configure >/dev/null 2>&1
1958 then
1959    : found it, so we are ok.
1960 else
1961         rsrc=''
1962         for src in . .. ../.. ../../.. ../../../..; do
1963                 if test -f ../$src/Configure && \
1964                         $contains "^package=$package$" ../$src/Configure >/dev/null 2>&1
1965                 then
1966                         rsrc=../$src
1967                         break
1968                 fi
1969         done
1970 fi
1971 case "$rsrc" in
1972 '')
1973         cat <<EOM >&4
1974
1975 Sorry, I can't seem to locate the source dir for $package.  Please start
1976 Configure with an explicit path -- i.e. /some/path/Configure.
1977
1978 EOM
1979         exit 1
1980         ;;
1981 ../.)   rsrc='..';;
1982 *)
1983         echo " "
1984         echo "Sources for $package found in \"$src\"." >&4
1985         ;;
1986 esac
1987
1988 : script used to extract .SH files with variable substitutions
1989 cat >extract <<'EOS'
1990 PERL_CONFIG_SH=true
1991 echo "Doing variable substitutions on .SH files..."
1992 if test -f MANIFEST; then
1993         set x `awk '{print $1}' < MANIFEST | grep '\.SH$'`
1994 else
1995         echo "(Looking for .SH files under the source directory.)"
1996         set x `(cd "$src"; find . -name "*.SH" -print)`
1997 fi
1998 shift
1999 case $# in
2000 0) set x `(cd "$src"; echo *.SH)`; shift;;
2001 esac
2002 if test ! -f "$src/$1"; then
2003         shift
2004 fi
2005 mkdir_p='
2006 name=$1;
2007 create="";
2008 while test $name; do
2009         if test ! -d "$name"; then
2010                 create="$name $create";
2011                 name=`echo $name | sed -e "s|^[^/]*$||"`;
2012                 name=`echo $name | sed -e "s|\(.*\)/.*|\1|"`;
2013         else
2014                 name="";
2015         fi;
2016 done;
2017 for file in $create; do
2018         mkdir $file;
2019 done
2020 '
2021 for file in $*; do
2022         case "$src" in
2023         ".")
2024                 case "$file" in
2025                 */*)
2026                         dir=`expr X$file : 'X\(.*\)/'`
2027                         file=`expr X$file : 'X.*/\(.*\)'`
2028                         (cd "$dir" && . ./$file)
2029                         ;;
2030                 *)
2031                         . ./$file
2032                         ;;
2033                 esac
2034                 ;;
2035         *)
2036                 case "$file" in
2037                 */*)
2038                         dir=`expr X$file : 'X\(.*\)/'`
2039                         file=`expr X$file : 'X.*/\(.*\)'`
2040                         (set x $dir; shift; eval $mkdir_p)
2041                         sh <"$src/$dir/$file"
2042                         ;;
2043                 *)
2044                         sh <"$src/$file"
2045                         ;;
2046                 esac
2047                 ;;
2048         esac
2049 done
2050 if test -f "$src/config_h.SH"; then
2051         if test ! -f config.h; then
2052         : oops, they left it out of MANIFEST, probably, so do it anyway.
2053         . "$src/config_h.SH"
2054         fi
2055 fi
2056 EOS
2057
2058 : extract files and exit if asked to do so
2059 case "$extractsh" in
2060 true)
2061         case "$realsilent" in
2062         true) ;;
2063         *) exec 1>&4;;
2064         esac
2065         case "$config_sh" in
2066         '') config_sh='config.sh';;
2067         esac
2068         echo " "
2069         echo "Fetching answers from $config_sh..."
2070         cd ..
2071         . $config_sh
2072         . UU/optdef.sh
2073         echo " "
2074         . UU/extract
2075         rm -rf UU
2076         echo "Extraction done."
2077         exit 0
2078         ;;
2079 esac
2080
2081 : Eunice requires " " instead of "", can you believe it
2082 echo " "
2083 : Here we go...
2084 echo "Beginning of configuration questions for $package."
2085
2086 trap 'echo " "; test -d ../UU && rm -rf X $rmlist; exit 1' 1 2 3 15
2087
2088 : first determine how to suppress newline on echo command
2089 echo " "
2090 echo "Checking echo to see how to suppress newlines..."
2091 (echo "hi there\c" ; echo " ") >.echotmp
2092 if $contains c .echotmp >/dev/null 2>&1 ; then
2093         echo "...using -n."
2094         n='-n'
2095         c=''
2096 else
2097         cat <<'EOM'
2098 ...using \c
2099 EOM
2100         n=''
2101         c='\c'
2102 fi
2103 echo $n "The star should be here-->$c"
2104 echo '*'
2105 rm -f .echotmp
2106
2107 : Now test for existence of everything in MANIFEST
2108 echo " "
2109 if test -f "$rsrc/MANIFEST"; then
2110         echo "First let's make sure your kit is complete.  Checking..." >&4
2111         awk '$1 !~ /PACK[A-Z]+/ {print $1}' "$rsrc/MANIFEST" | \
2112                 (split -l 50 2>/dev/null || split -50)
2113         rm -f missing
2114         tmppwd=`pwd`
2115         for filelist in x??; do
2116                 (cd "$rsrc"; ls `cat "$tmppwd/$filelist"` \
2117                         >/dev/null 2>>"$tmppwd/missing")
2118         done
2119         if test -s missing; then
2120                 cat missing >&4
2121                 cat >&4 <<'EOM'
2122
2123 THIS PACKAGE SEEMS TO BE INCOMPLETE.
2124
2125 You have the option of continuing the configuration process, despite the
2126 distinct possibility that your kit is damaged, by typing 'y'es.  If you
2127 do, don't blame me if something goes wrong.  I advise you to type 'n'o
2128 and contact the author (https://github.com/Perl/perl5/issues).
2129
2130 EOM
2131                 echo $n "Continue? [n] $c" >&4
2132                 read ans
2133                 case "$ans" in
2134                 y*)
2135                         echo "Continuing..." >&4
2136                         rm -f missing
2137                         ;;
2138                 *)
2139                         echo "ABORTING..." >&4
2140                         kill $$
2141                         ;;
2142                 esac
2143         else
2144                 echo "Looks good..."
2145         fi
2146 else
2147         echo "There is no MANIFEST file.  I hope your kit is complete !"
2148 fi
2149 rm -f missing x??
2150
2151 : Find the appropriate value for a newline for tr
2152 if test -n "$DJGPP"; then
2153        trnl='\012'
2154 fi
2155 if test X"$trnl" = X; then
2156         case "`echo foo | tr '\n' x 2>/dev/null`" in
2157         foox) trnl='\n' ;;
2158         esac
2159 fi
2160 if test X"$trnl" = X; then
2161         case "`echo foo | tr '\012' x 2>/dev/null`" in
2162         foox) trnl='\012' ;;
2163         esac
2164 fi
2165 if test X"$trnl" = X; then
2166        case "`echo foo | tr '\r\n' xy 2>/dev/null`" in
2167        fooxy) trnl='\n\r' ;;
2168        esac
2169 fi
2170 if test X"$trnl" = X; then
2171         cat <<EOM >&2
2172
2173 $me: Fatal Error: cannot figure out how to translate newlines with 'tr'.
2174
2175 EOM
2176         exit 1
2177 fi
2178
2179 : compute the number of columns on the terminal for proper question formatting
2180 case "$COLUMNS" in
2181 '') COLUMNS='80';;
2182 esac
2183
2184 : set up the echo used in my read
2185 myecho="case \"\$xxxm\" in
2186 '') echo $n \"\$rp $c\" >&4;;
2187 *) case \"\$rp\" in
2188         '') echo $n \"[\$xxxm] $c\";;
2189         *)
2190                 if test \`echo \"\$rp [\$xxxm]  \" | wc -c\` -ge $COLUMNS; then
2191                         echo \"\$rp\" >&4
2192                         echo $n \"[\$xxxm] $c\" >&4
2193                 else
2194                         echo $n \"\$rp [\$xxxm] $c\" >&4
2195                 fi
2196                 ;;
2197         esac;;
2198 esac"
2199
2200 : now set up to do reads with possible shell escape and default assignment
2201 cat <<EOSC >myread
2202 $startsh
2203 xxxm=\$dflt
2204 $myecho
2205 ans='!'
2206 case "\$fastread" in
2207 yes) case "\$dflt" in
2208         '') ;;
2209         *) ans='';
2210                 case "\$silent-\$rp" in
2211                 true-) ;;
2212                 *) echo " " >&4;;
2213                 esac;;
2214         esac;;
2215 *) case "\$silent" in
2216         true) case "\$rp" in
2217                 '') ans='';;
2218                 esac;;
2219         esac;;
2220 esac
2221 while expr "X\$ans" : "X!" >/dev/null; do
2222         read answ
2223         set x \$xxxm
2224         shift
2225         aok=''; eval "ans=\\"\$answ\\"" && aok=y
2226         case  "\$answ" in
2227         "!")
2228                 sh 1>&4
2229                 echo " "
2230                 $myecho
2231                 ;;
2232         !*)
2233                 set x \`expr "X\$ans" : "X!\(.*\)\$"\`
2234                 shift
2235                 sh 1>&4 -c "\$*"
2236                 echo " "
2237                 $myecho
2238                 ;;
2239         "\$ans")
2240                 case "\$ans" in
2241                 \\&*)
2242                         set x \`expr "X\$ans" : "X&\(.*\)\$"\`
2243                         shift
2244                         case "\$1" in
2245                         -d)
2246                                 fastread=yes
2247                                 echo "(OK, I'll run with -d after this question.)" >&4
2248                                 ;;
2249                         -*)
2250                                 echo "*** Sorry, \$1 not supported yet." >&4
2251                                 ;;
2252                         esac
2253                         $myecho
2254                         ans=!
2255                         ;;
2256                 esac;;
2257         *)
2258                 case "\$aok" in
2259                 y)
2260                         echo "*** Substitution done -- please confirm."
2261                         xxxm="\$ans"
2262                         ans=\`echo $n "\$ans$c" | tr '$trnl' ' '\`
2263                         xxxm="\$ans"
2264                         ans=!
2265                         ;;
2266                 *)
2267                         echo "*** Error -- try again."
2268                         ans=!
2269                         ;;
2270                 esac
2271                 $myecho
2272                 ;;
2273         esac
2274         case "\$ans\$xxxm\$nostick" in
2275         '')
2276                 ans=!
2277                 $myecho
2278                 ;;
2279         esac
2280 done
2281 case "\$ans" in
2282 '') ans="\$xxxm";;
2283 esac
2284 EOSC
2285
2286 : create .config dir to save info across Configure sessions
2287 test -d ../.config || mkdir ../.config
2288 cat >../.config/README <<EOF
2289 This directory created by Configure to save information that should
2290 persist across sessions for $package.
2291
2292 You may safely delete it if you wish.
2293 EOF
2294
2295 : See if we are using a devel version and want that
2296 xversion=`awk '/define[         ]+PERL_VERSION/ {print $3}' $rsrc/patchlevel.h`
2297 case "$usedevel" in
2298 $define|true|[yY]*)
2299     usedevel="$define" ;;
2300 *) case "$xversion" in
2301    *[13579])
2302         cat >&4 <<EOH
2303 *** WHOA THERE!!! ***
2304
2305     This is an UNSTABLE DEVELOPMENT release.
2306     The version of this $package distribution is $xversion, that is, odd,
2307     (as opposed to even) and that signifies a development release.
2308     If you want a maintenance release, you want an even-numbered version.
2309
2310     Do ***NOT*** install this into production use.
2311     Data corruption and crashes are possible.
2312
2313     It is most seriously suggested that you do not continue any further
2314     unless you want to help in developing and debugging Perl.
2315
2316     If you *still* want to build perl, you can answer 'y' now,
2317     or pass -Dusedevel to Configure.
2318
2319 EOH
2320         rp='Do you really want to continue?'
2321         dflt='n'
2322         . ./myread
2323         case "$ans" in
2324         [yY]) echo >&4 "Okay, continuing."
2325               usedevel="$define" ;;
2326         *) echo >&4 "Okay, bye."
2327            exit 1
2328            ;;
2329         esac
2330         ;;
2331     esac
2332     usedevel="$undef"
2333     ;;
2334 esac
2335 case "$usedevel" in
2336 $define|true|[yY]*)
2337         case "$versiononly" in
2338         '') versiononly="$define" ;;
2339         esac
2340         case "$installusrbinperl" in
2341         '') installusrbinperl="$undef" ;;
2342         esac
2343         ;;
2344 esac
2345
2346 : general instructions
2347 needman=true
2348 firsttime=true
2349 user=`(logname) 2>/dev/null`
2350 case "$user" in
2351 '') user=`whoami 2>&1`;;
2352 esac
2353 if $contains "^$user\$" ../.config/instruct >/dev/null 2>&1; then
2354         firsttime=false
2355         echo " "
2356         rp='Would you like to see the instructions?'
2357         dflt=n
2358         . ./myread
2359         case "$ans" in
2360         [yY]*) ;;
2361         *) needman=false;;
2362         esac
2363 fi
2364 if $needman; then
2365         cat <<EOH
2366
2367 This installation shell script will examine your system and ask you questions
2368 to determine how the perl5 package should be installed. If you get
2369 stuck on a question, you may use a ! shell escape to start a subshell or
2370 execute a command.  Many of the questions will have default answers in square
2371 brackets; typing carriage return will give you the default.
2372
2373 On some of the questions which ask for file or directory names you are allowed
2374 to use the ~name construct to specify the login directory belonging to "name",
2375 even if you don't have a shell which knows about that.  Questions where this is
2376 allowed will be marked "(~name ok)".
2377
2378 EOH
2379         rp=''
2380         dflt='Type carriage return to continue'
2381         . ./myread
2382         cat <<'EOH'
2383
2384 The prompter used in this script allows you to use shell variables and
2385 backticks in your answers.  You may use $1, $2, etc...  to refer to the words
2386 in the default answer, as if the default line was a set of arguments given to a
2387 script shell.  This means you may also use $* to repeat the whole default line,
2388 so you do not have to re-type everything to add something to the default.
2389
2390 Every time there is a substitution, you will have to confirm.  If there is an
2391 error (e.g. an unmatched backtick), the default answer will remain unchanged
2392 and you will be prompted again.
2393
2394 If you are in a hurry, you may run 'Configure -d'.  This will bypass nearly all
2395 the questions and use the computed defaults (or the previous answers if there
2396 was already a config.sh file). Type 'Configure -h' for a list of options.
2397 You may also start interactively and then answer '& -d' at any prompt to turn
2398 on the non-interactive behaviour for the remainder of the execution.
2399
2400 EOH
2401         . ./myread
2402         cat <<EOH
2403
2404 Much effort has been expended to ensure that this shell script will run on any
2405 Unix system.  If despite that it blows up on yours, your best bet is to edit
2406 Configure and run it again.  If you can't run Configure for some reason,
2407 you'll have to generate a config.sh file by hand.  Whatever problems you
2408 have, let me (https://github.com/Perl/perl5/issues) know how I blew it.
2409
2410 This installation script affects things in two ways:
2411
2412 1) it may do direct variable substitutions on some of the files included
2413    in this kit.
2414 2) it builds a config.h file for inclusion in C programs.  You may edit
2415    any of these files as the need arises after running this script.
2416
2417 If you make a mistake on a question, there is no easy way to back up to it
2418 currently.  The easiest thing to do is to edit config.sh and rerun all the SH
2419 files.  Configure will offer to let you do this before it runs the SH files.
2420
2421 EOH
2422         dflt='Type carriage return to continue'
2423         . ./myread
2424         case "$firsttime" in
2425         true) echo $user >>../.config/instruct;;
2426         esac
2427 fi
2428
2429 : Set 'sysroot' to change the logical root directory to your headers and libraries see man gcc
2430 : This is primarily meant for cross-compile environments, and may fail to be useful in other cases
2431 if test "X$sysroot" = X; then
2432     sysroot=""
2433 else
2434     case "$cc" in
2435         *gcc*|*g++*)
2436             echo "Using $sysroot to find your headers and libraries, adding to ccflags"
2437             # _sysroot is used in places where we need --sysroot=foo
2438             # but using the rest of the flags could cause issues.
2439             _sysroot="--sysroot=$sysroot";
2440             case "$ccflags" in
2441                 *sysroot*) ;;
2442                 'undef'|*)
2443                 ccflags="$ccflags $_sysroot"
2444             esac
2445             case "$ldflags" in
2446                 *sysroot*) ;;
2447                 'undef'|*)
2448                 ldflags="$ldflags $_sysroot"
2449             esac
2450             case "$cppflags" in
2451                 *sysroot*) ;;
2452                 'undef'|*)
2453                 cppflags="$cppflags $_sysroot"
2454             esac
2455             # lddlflags updated below in lddlflags section;
2456             # same with cccdlflags
2457             ;;
2458     esac
2459
2460     # Adjust some defaults to also use $sysroot
2461     for var in xlibpth loclibpth locincpth glibpth; do
2462         eval xxx=\$$var
2463         eval $var=''
2464         for path in $xxx; do
2465             eval $var=\"\$$var $sysroot$path\"
2466         done
2467     done
2468
2469 fi
2470
2471 : find out where common programs are
2472 echo " "
2473 echo "Locating common programs..." >&4
2474 cat <<EOSC >loc
2475 $startsh
2476 case \$# in
2477 0) exit 1;;
2478 esac
2479 thing=\$1
2480 shift
2481 dflt=\$1
2482 shift
2483 for dir in \$*; do
2484         case "\$thing" in
2485         .)
2486         if test -d \$dir/\$thing; then
2487                 echo \$dir
2488                 exit 0
2489         fi
2490         ;;
2491         *)
2492         for thisthing in \$dir/\$thing; do
2493                 : just loop through to pick last item
2494         done
2495         if test -f \$thisthing; then
2496                 echo \$thisthing
2497                 exit 0
2498         elif test "X$_exe" != X -a -f \$thisthing$_exe; then
2499                 echo \$thisthing
2500                 exit 0
2501         elif test -f \$dir/\$thing.exe; then
2502                 if test -n "$DJGPP"; then
2503                         echo \$dir/\$thing.exe
2504                 elif test "$eunicefix" != ":"; then
2505                         : on Eunice apparently
2506                         echo \$dir/\$thing
2507                 fi
2508                 exit 0
2509         fi
2510         ;;
2511         esac
2512 done
2513 echo \$dflt
2514 exit 1
2515 EOSC
2516 chmod +x loc
2517 $eunicefix loc
2518 loclist="
2519 awk
2520 cat
2521 chmod
2522 comm
2523 cp
2524 echo
2525 expr
2526 grep
2527 ls
2528 mkdir
2529 rm
2530 sed
2531 sort
2532 touch
2533 tr
2534 uniq
2535 "
2536 trylist="
2537 ar
2538 bison
2539 byacc
2540 cpp
2541 csh
2542 date
2543 egrep
2544 gmake
2545 gzip
2546 less
2547 ln
2548 make
2549 more
2550 nm
2551 nroff
2552 perl
2553 pg
2554 test
2555 uname
2556 zip
2557 "
2558 pth=`echo $PATH | sed -e "s/$p_/ /g"`
2559 pth="$pth $sysroot/lib $sysroot/usr/lib"
2560 for file in $loclist; do
2561         eval xxx=\$$file
2562         case "$xxx" in
2563         /*|?:[\\/]*)
2564                 if test -f "$xxx"; then
2565                         : ok
2566                 else
2567                         echo "WARNING: no $xxx -- ignoring your setting for $file." >&4
2568                         xxx=`./loc $file $file $pth`
2569                 fi
2570                 ;;
2571         '') xxx=`./loc $file $file $pth`;;
2572         *) xxx=`./loc $xxx $xxx $pth`;;
2573         esac
2574         eval $file=$xxx$_exe
2575         eval _$file=$xxx
2576         case "$xxx" in
2577         /*)
2578                 echo $file is in $xxx.
2579                 ;;
2580         ?:[\\/]*)
2581                 echo $file is in $xxx.
2582                 ;;
2583         *)
2584                 echo "I don't know where '$file' is, and my life depends on it." >&4
2585                 echo "Go find a public domain implementation or fix your PATH setting!" >&4
2586                 exit 1
2587                 ;;
2588         esac
2589 done
2590 echo " "
2591 echo "Don't worry if any of the following aren't found..."
2592 say=offhand
2593 for file in $trylist; do
2594         eval xxx=\$$file
2595         case "$xxx" in
2596         /*|?:[\\/]*)
2597                 if test -f "$xxx"; then
2598                         : ok
2599                 else
2600                         echo "WARNING: no $xxx -- ignoring your setting for $file." >&4
2601                         xxx=`./loc $file $file $pth`
2602                 fi
2603                 ;;
2604         '') xxx=`./loc $file $file $pth`;;
2605         *) xxx=`./loc $xxx $xxx $pth`;;
2606         esac
2607         eval $file=$xxx$_exe
2608         eval _$file=$xxx
2609         case "$xxx" in
2610         /*)
2611                 echo $file is in $xxx.
2612                 ;;
2613         ?:[\\/]*)
2614                 echo $file is in $xxx.
2615                 ;;
2616         *)
2617                 echo "I don't see $file out there, $say."
2618                 say=either
2619                 ;;
2620         esac
2621 done
2622 case "$egrep" in
2623 egrep)
2624         echo "Substituting grep for egrep."
2625         egrep=$grep
2626         _egrep=$grep
2627         ;;
2628 esac
2629 case "$less" in
2630 '')     ;;
2631 *)      if $less -R </dev/null >/dev/null 2>&1; then
2632                echo "Substituting less -R for less."
2633                less="$less -R"
2634                _less=$less
2635         fi
2636         ;;
2637 esac
2638 case "$ln" in
2639 ln)
2640         echo "Substituting cp for ln."
2641         ln=$cp
2642         _ln=$cp
2643         ;;
2644 esac
2645 case "$make" in
2646 make)
2647         case "$gmake" in
2648         gmake)
2649         echo "I can't find make or gmake, and my life depends on it." >&4
2650         echo "Go find a public domain implementation or fix your PATH setting!" >&4
2651         exit 1
2652         ;;
2653         esac
2654         ;;
2655 esac
2656 case "$gmake" in
2657 gmake)  ;;
2658 *)      # We can't have osname yet.
2659         if test -f "/system/gnu_library/bin/ar.pm"; then # Stratus VOS
2660                 # Assume that gmake, if found, is definitely GNU make
2661                 # and prefer it over the system make.
2662                 echo "Substituting gmake for make."
2663                 make=$gmake
2664                 _make=$gmake
2665         fi
2666         ;;
2667 esac
2668 case "$test" in
2669 test)
2670         echo "Hopefully test is built into your sh."
2671         ;;
2672 *)
2673         if `sh -c "PATH= test true" >/dev/null 2>&1`; then
2674                 echo "Using the test built into your sh."
2675                 test=test
2676                 _test=test
2677         fi
2678         ;;
2679 esac
2680 case "$echo" in
2681 echo)
2682         echo "Hopefully echo is built into your sh."
2683         ;;
2684 '') ;;
2685 *)
2686         echo " "
2687 echo "Checking compatibility between $echo and builtin echo (if any)..." >&4
2688         $echo $n "hi there$c" >foo1
2689         echo $n "hi there$c" >foo2
2690         if cmp foo1 foo2 >/dev/null 2>&1; then
2691                 echo "They are compatible.  In fact, they may be identical."
2692         else
2693                 case "$n" in
2694                 '-n') n='' c='\c';;
2695                 *) n='-n' c='';;
2696                 esac
2697                 cat <<FOO
2698 They are not compatible!  You are probably running ksh on a non-USG system.
2699 I'll have to use $echo instead of the builtin, since Bourne shell doesn't
2700 have echo built in and we may have to run some Bourne shell scripts.  That
2701 means I'll have to use '$n$c' to suppress newlines now.  Life is ridiculous.
2702
2703 FOO
2704                 $echo $n "The star should be here-->$c"
2705                 $echo "*"
2706         fi
2707         $rm -f foo1 foo2
2708         ;;
2709 esac
2710
2711 # This question was auctioned at YAPC::Europe-2007 in Vienna
2712 # I never promised you could answer it. I only auctioned the question.
2713 cat <<FOO
2714 The following message is sponsored by
2715
2716   Dresden.pm<--The stars should be here.
2717
2718 Dear Perl user, system administrator or package
2719 maintainer, the Perl community sends greetings to
2720 you. Do you (emblematical) greet back [Y/n]? n
2721
2722 FOO
2723
2724 : Check what type of C compiler we use
2725 cat <<EOS >trygcc
2726 $startsh
2727 EOS
2728 cat <<'EOSC' >>trygcc
2729 case "$cc" in
2730 '') ;;
2731 *)  $rm -f try try.*
2732     $cat >try.c <<EOM
2733 int main(int argc, char *argv[]) {
2734   return 0;
2735 }
2736 EOM
2737     if $cc -o try $ccflags $ldflags try.c; then
2738        :
2739     else
2740         echo "Uh-oh, the C compiler '$cc' doesn't seem to be working." >&4
2741         despair=yes
2742         trygcc=yes
2743         case "$cc" in
2744         *gcc*) trygcc=no ;;
2745         esac
2746         # Skip this test because it gives a false match on output like:
2747         #    ./trygcc: line 23: cc: command not found
2748         # case "`$cc -v -c try.c 2>&1`" in
2749         # *gcc*) trygcc=no ;;
2750         # esac
2751         if $test X"$trygcc" = Xyes; then
2752             if gcc -o try -c try.c; then
2753                 echo " "
2754                 echo "You seem to have a working gcc, though." >&4
2755                 # Switching compilers may undo the work of hints files.
2756                 # The most common problem is -D_REENTRANT for threads.
2757                 # This heuristic catches that case, but gets false positives
2758                 # if -Dusethreads was not actually specified.  Better to
2759                 # bail out here with a useful message than fail
2760                 # mysteriously later. Should we perhaps just try to
2761                 # re-invoke Configure -Dcc=gcc config_args ?
2762                 if $test -f usethreads.cbu; then
2763                         $cat >&4 <<EOM
2764
2765 *** However, any setting of the C compiler flags (e.g. for thread support)
2766 *** will be lost.  It may be necessary for you to restart Configure and
2767 *** add -Dcc=gcc to your Configure command line.
2768
2769 EOM
2770                         rp="Would you like to go ahead and try gcc anyway?"
2771                         dflt=n
2772                 else
2773                         rp="Would you like to use it?"
2774                         dflt=y
2775                 fi
2776                 if $test -f myread; then
2777                     . ./myread
2778                 else
2779                     if $test -f UU/myread; then
2780                         . ./UU/myread
2781                     else
2782                         echo "Cannot find myread, sorry.  Aborting." >&2
2783                         exit 1
2784                     fi
2785                 fi
2786                 case "$ans" in
2787                 [yY]*) cc=gcc; ccname=gcc; ccflags=''; despair=no;
2788                 esac
2789             fi
2790         fi
2791     fi
2792     $rm -f try try.*
2793     ;;
2794 esac
2795 EOSC
2796
2797 cat <<EOS >checkcc
2798 $startsh
2799 EOS
2800 cat <<'EOSC' >>checkcc
2801 case "$cc" in
2802 '') ;;
2803 *)  $rm -f try try.*
2804     $cat >try.c <<EOM
2805 int main(int argc, char *argv[]) {
2806   return 0;
2807 }
2808 EOM
2809     if $cc -o try $ccflags $ldflags try.c; then
2810        :
2811     else
2812         if $test X"$despair" = Xyes; then
2813            echo "Uh-oh, the C compiler '$cc' doesn't seem to be working." >&4
2814         fi
2815         $cat >&4 <<EOM
2816 You need to find a working C compiler.
2817 Either (purchase and) install the C compiler supplied by your OS vendor,
2818 or for a free C compiler try http://gcc.gnu.org/
2819 I cannot continue any further, aborting.
2820 EOM
2821         exit 1
2822     fi
2823     $rm -f try try.*
2824     ;;
2825 esac
2826 EOSC
2827
2828 : determine whether symbolic links are supported
2829 echo " "
2830 $touch blurfl
2831 if $ln -s blurfl sym > /dev/null 2>&1 ; then
2832         echo "Symbolic links are supported." >&4
2833         lns="$ln -s"
2834 else
2835         echo "Symbolic links are NOT supported." >&4
2836         lns="$ln"
2837 fi
2838 $rm -f blurfl sym
2839
2840 : determine whether symbolic links are supported
2841 echo " "
2842 case "$lns" in
2843 *"ln"*" -s")
2844         echo "Checking how to test for symbolic links..." >&4
2845         $lns blurfl sym
2846         if $test "X$issymlink" = X; then
2847                 case "$newsh" in
2848                 '') sh     -c "PATH= test -h sym" >/dev/null 2>&1 ;;
2849                 *)  $newsh -c "PATH= test -h sym" >/dev/null 2>&1 ;;
2850                 esac
2851                 if test $? = 0; then
2852                         issymlink="test -h"
2853                 else
2854                         echo "Your builtin 'test -h' may be broken." >&4
2855                         case "$test" in
2856                         /*)     ;;
2857                         *)      pth=`echo $PATH | sed -e "s/$p_/ /g"`
2858                                 for p in $pth
2859                                 do
2860                                         if test -f "$p/$test"; then
2861                                                 test="$p/$test"
2862                                                 break
2863                                         fi
2864                                 done
2865                                 ;;
2866                         esac
2867                         case "$test" in
2868                         /*)
2869                                 echo "Trying external '$test -h'." >&4
2870                                 issymlink="$test -h"
2871                                 if $test ! -h sym >/dev/null 2>&1; then
2872                                         echo "External '$test -h' is broken, too." >&4
2873                                         issymlink=''
2874                                 fi
2875                                 ;;
2876                         *)      issymlink='' ;;
2877                         esac
2878                 fi
2879         fi
2880         if $test "X$issymlink" = X; then
2881                 if $test -L sym 2>/dev/null; then
2882                         issymlink="$test -L"
2883                         echo "The builtin '$test -L' worked." >&4
2884                 fi
2885         fi
2886         if $test "X$issymlink" != X; then
2887                 echo "You can test for symbolic links with '$issymlink'." >&4
2888         else
2889                 echo "I do not know how you can test for symbolic links." >&4
2890         fi
2891         $rm -f blurfl sym
2892         ;;
2893 *)      echo "No symbolic links, so not testing for their testing..." >&4
2894         ;;
2895 esac
2896
2897 : Make symlinks util
2898 case "$mksymlinks" in
2899 $define|true|[yY]*)
2900         case "$src" in
2901         ''|'.') echo "Cannot create symlinks in the original directory." >&4
2902                 exit 1
2903                 ;;
2904         *)      case "$lns:$issymlink" in
2905                 *"ln"*" -s:"*"test -"?)
2906                         echo "Creating the symbolic links..." >&4
2907                         cd ..
2908                         awk '{print $1}' $src/MANIFEST | sed -e 's:/\([^/]*\)$: \1:' |
2909                         awk 'NF == 1 {
2910                                 dir=".";
2911                                 file=$1 "";
2912                              }
2913                              NF == 2 {
2914                                 dir=$1 "";
2915                                 file=$2 "";
2916                              }
2917                              {
2918                                  print "# dir = ", dir, "file = ", file
2919                                  mf[dir] = mf[dir]" "source"/"dir"/"file;
2920                              } END {
2921                                  for (d in mf) {
2922                                      if (d != ".") { print("mkdir -p "d) }
2923                                      print("ln -sf "mf[d]" "d);
2924                                  }
2925                              }' source="$src" > UU/mksymlinks.$$
2926                         sh UU/mksymlinks.$$
2927                         rm UU/mksymlinks.$$
2928                         # Sanity check 1.
2929                         if test ! -d t/base; then
2930                                 echo "Failed to create the subdirectories.  Aborting." >&4
2931                                 exit 1
2932                         fi
2933                         # Sanity check 2.
2934                         if test ! -f t/base/lex.t; then
2935                                 echo "Failed to create the symlinks (t/base/lex.t missing).  Aborting." >&4
2936                                 exit 1
2937                         fi
2938                         if test ! -f win32/win32.c; then
2939                                 echo "Failed to create the symlinks (win32/win32.c missing).  Aborting." >&4
2940                                 exit 1
2941                         fi
2942                         cd UU
2943                         ;;
2944                 *)      echo "(I cannot figure out how to do symbolic links, ignoring mksymlinks)." >&4
2945                         ;;
2946                 esac
2947                 ;;
2948         esac
2949         ;;
2950 esac
2951
2952 : Check for Cross-Compilation
2953 if $test "X$targethost" = "X"; then
2954     targethost=""
2955 fi
2956 if $test "X$targetenv" = "X"; then
2957     targetenv=""
2958 fi
2959 case "$usecrosscompile" in
2960 $define|true|[yY]*)
2961         $echo "Cross-compiling..."
2962         croak=''
2963         case "$cc" in
2964         *-gcc*|*-g++*) # A cross-compiling gcc, probably.
2965             # arm-linux-androideabi-gcc  -> arm-linux-androideabi
2966             # x86_64-w64-mingw32-gcc.exe -> x86_64-w64-mingw32
2967             targetarch=`$echo $cc|$sed 's/-g[c\+][c\+].*$//'`
2968             ar=`$echo $cc|$sed 's/-g[c\+][c\+]/-ar/'`
2969             # leave out ld, choosing it is more complex
2970             nm=`$echo $cc|$sed 's/-g[c\+][c\+]/-nm/'`
2971             ranlib=`$echo $cc|$sed 's/-g[c\+][c\+]/-ranlib/'`
2972             # We are in a weird spot. Just before us, some values
2973             # were 'saved', to be restored after the hints are
2974             # run.  This means that the changes we made to ar,
2975             # nm and ranlib will get reverted.
2976             # To avoid that, we hijack the saving mechanism and
2977             # have it save our new values.
2978             for file in ar nm ranlib; do
2979                 eval xxx=\$$file
2980                 eval $file=$xxx$_exe
2981                 eval _$file=$xxx
2982             done
2983         ;;
2984         esac
2985         case "$targetarch" in
2986         '') echo "Targetarch not defined." >&4; croak=y ;;
2987         *)  echo "Using targetarch $targetarch." >&4 ;;
2988         esac
2989         case "$targethost" in
2990         '') echo "Targethost not defined." >&4; croak=n ;;
2991         *)  echo "Using targethost $targethost." >&4
2992         esac
2993         locincpth=' '
2994         loclibpth=' '
2995         case "$croak" in
2996         y) echo "Cannot continue, aborting." >&4; exit 1 ;;
2997         esac
2998     : compile a host miniperl and generate_uudmap, unless we got passed them
2999     if $test "X$hostperl" = X; then
3000       echo "Building host miniperl and generate_uudmap binaries" >&4
3001       before_host=`pwd`
3002       cd ..
3003       cd $src
3004       src=`pwd`
3005       rm -rf $src/host
3006       mkdir $src/host
3007       cd $src/host
3008       $src/Configure -des -Dusedevel -Dmksymlinks
3009       $make miniperl
3010       case "$hostgenerate" in
3011       '') $make generate_uudmap
3012           hostgenerate=$src/host/generate_uudmap
3013           ;;
3014        "$undef") hostgenerate=''
3015           ;;
3016       esac
3017       hostperl=$src/host/miniperl
3018       cd $before_host
3019     fi
3020     hostosname=`$hostperl -le 'print $^O'`
3021     ;;
3022 *)
3023     usecrosscompile="$undef"
3024     ;;
3025 esac
3026
3027 : Define -Dtargethost=somecomputer to run compiled tests on another machine
3028 case "$targethost" in
3029     '') echo "Checking for cross-compile" >&4
3030     case "$usecrosscompile$multiarch" in
3031        *$define*) echo "Skipping the try tests in the rest of Configure as no targethost was defined when cross-compiling" >&4
3032          if [ -f Makefile ]; then
3033            echo " "
3034            echo "Now you must ensure config.sh, config.h and the generated headers exist and run a $make."
3035          else
3036            echo "Configure done."
3037          fi
3038        exit 0
3039        ;;
3040      *) echo "No targethost for running compiler tests against defined, running locally" >&4
3041         run=''
3042         to=:
3043         from=:
3044         ;;
3045     esac
3046     ;;
3047     *) echo "Using targethost $targethost." >&4
3048         case "$src" in
3049         /*) run=$src/Cross/run
3050             targetmkdir=$src/Cross/mkdir
3051             to=$src/Cross/to
3052             from=$src/Cross/from
3053             ;;
3054         *)  pwd=`$test -f ../Configure & cd ..; pwd`
3055             run=$pwd/Cross/run
3056             targetmkdir=$pwd/Cross/mkdir
3057             to=$pwd/Cross/to
3058             from=$pwd/Cross/from
3059             ;;
3060         esac
3061         case "$targetrun" in
3062         '') targetrun=ssh ;;
3063         esac
3064         case "$targetto" in
3065         '') targetto=scp ;;
3066         esac
3067         case "$targetfrom" in
3068         '') targetfrom=scp ;;
3069         esac
3070         run=$run-$targetrun
3071         to=$to-$targetto
3072         from=$from-$targetfrom
3073         case "$targetdir" in
3074         '')  targetdir=/tmp
3075              echo "Guessing targetdir $targetdir." >&4
3076              ;;
3077         esac
3078         case "$targetuser" in
3079         '')  targetuser=root
3080              echo "Guessing targetuser $targetuser." >&4
3081              ;;
3082         esac
3083         case "$targetport" in
3084         '')  targetport=22
3085              echo "Guessing targetport $targetport." >&4
3086              ;;
3087         esac
3088         case "$targetfrom" in
3089         scp)    q=-q ;;
3090         *)      q='' ;;
3091         esac
3092         case "$targetrun" in
3093         ssh|rsh)
3094             cat >$run <<EOF
3095 #!/bin/sh
3096 env=''
3097 case "\$1" in
3098 -cwd)
3099   shift
3100   cwd=\$1
3101   shift
3102   ;;
3103 esac
3104 case "\$1" in
3105 -env)
3106   shift
3107   env=\$1
3108   shift
3109   ;;
3110 esac
3111 case "\$cwd" in
3112 '') cwd=$targetdir ;;
3113 esac
3114 exe=\$1
3115 shift
3116 $to \$exe
3117 $targetrun -p $targetport -l $targetuser $targethost "cd \$cwd && \$env \$exe \$@"
3118 EOF
3119             ;;
3120         adb)
3121             $touch $run
3122             ;;
3123         *)  echo "Unknown targetrun '$targetrun'" >&4
3124             exit 1
3125             ;;
3126         esac
3127         case "$targetmkdir" in
3128         */Cross/mkdir)
3129             cat >$targetmkdir <<EOF
3130 #!/bin/sh
3131 $targetrun -p $targetport -l $targetuser $targethost "mkdir -p \$@"
3132 EOF
3133             $chmod a+rx $targetmkdir
3134             ;;
3135         *)  echo "Unknown targetmkdir '$targetmkdir'" >&4
3136             exit 1
3137             ;;
3138         esac
3139         case "$targetto" in
3140         scp|rcp)
3141             cat >$to <<EOF
3142 #!/bin/sh
3143 for f in \$@
3144 do
3145   case "\$f" in
3146   /*)
3147     $targetmkdir \`dirname \$f\`
3148     $targetto -P $targetport -r $q \$f $targetuser@$targethost:\$f           2>/dev/null  || exit 1
3149     ;;
3150   *)
3151     $targetmkdir $targetdir/\`dirname \$f\`
3152     $targetto -P $targetport -r $q \$f $targetuser@$targethost:$targetdir/\$f 2>/dev/null || exit 1
3153     ;;
3154   esac
3155 done
3156 exit 0
3157 EOF
3158             ;;
3159         cp) cat >$to <<EOF
3160 #!/bin/sh
3161 for f in \$@
3162 do
3163   case "\$f" in
3164   /*)
3165     $mkdir -p $targetdir/\`dirname \$f\`
3166     $cp \$f $targetdir/\$f || exit 1
3167     ;;
3168   *)
3169     $targetmkdir $targetdir/\`dirname \$f\`
3170     $cp \$f $targetdir/\$f || exit 1
3171     ;;
3172   esac
3173 done
3174 exit 0
3175 EOF
3176             ;;
3177         *)  echo "Unknown targetto '$targetto'" >&4
3178             exit 1
3179             ;;
3180         esac
3181         case "$targetfrom" in
3182         scp|rcp)
3183           cat >$from <<EOF
3184 #!/bin/sh
3185 for f in \$@
3186 do
3187   $rm -f \$f
3188   $targetfrom -P $targetport $q $targetuser@$targethost:$targetdir/\$f . || exit 1
3189 done
3190 exit 0
3191 EOF
3192             ;;
3193         cp) cat >$from <<EOF
3194 #!/bin/sh
3195 for f in \$@
3196 do
3197   $rm -f \$f
3198   cp $targetdir/\$f . || exit 1
3199 done
3200 exit 0
3201 EOF
3202             ;;
3203         *)  echo "Unknown targetfrom '$targetfrom'" >&4
3204             exit 1
3205             ;;
3206         esac
3207         if $test ! -f $run; then
3208             echo "Target 'run' script '$run' not found." >&4
3209         else
3210             $chmod a+rx $run
3211         fi
3212         if $test ! -f $to; then
3213             echo "Target 'to' script '$to' not found." >&4
3214         else
3215             $chmod a+rx $to
3216         fi
3217         if $test ! -f $from; then
3218             echo "Target 'from' script '$from' not found." >&4
3219         else
3220             $chmod a+rx $from
3221         fi
3222         if $test ! -f $run -o ! -f $to -o ! -f $from; then
3223             exit 1
3224         fi
3225         cat >&4 <<EOF
3226 Using '$run' for remote execution,
3227 and '$from' and '$to'
3228 for remote file transfer.
3229 EOF
3230         ;;
3231 *)      run=''
3232         to=:
3233         from=:
3234         usecrosscompile="$undef"
3235         targetarch=''
3236         ;;
3237 esac
3238
3239 : see whether [:lower:] and [:upper:] are supported character classes
3240 echo " "
3241 case "`echo AbyZ | $tr '[:lower:]' '[:upper:]' 2>/dev/null`"-"`echo AbyZ | $tr '[:upper:]' '[:lower:]' 2>/dev/null`" in
3242 ABYZ-abyz)
3243         echo "Good, your tr supports [:lower:] and [:upper:] to convert case." >&4
3244         up='[:upper:]'
3245         low='[:lower:]'
3246         ;;
3247 *)      # There is a discontinuity in EBCDIC between 'R' and 'S'
3248         # (0xd9 and 0xe2), therefore that is a nice testing point.
3249         if test "X$up" = X -o "X$low" = X; then
3250             case "`echo RS | $tr '[R-S]' '[r-s]' 2>/dev/null`" in
3251             rs) up='[A-Z]'
3252                 low='[a-z]'
3253                 ;;
3254             esac
3255         fi
3256         if test "X$up" = X -o "X$low" = X; then
3257             case "`echo RS | $tr R-S r-s 2>/dev/null`" in
3258             rs) up='A-Z'
3259                 low='a-z'
3260                 ;;
3261             esac
3262         fi
3263         if test "X$up" = X -o "X$low" = X; then
3264             case "`echo RS | od -x 2>/dev/null`" in
3265             *D9E2*|*d9e2*)
3266                 echo "Hey, this might be EBCDIC." >&4
3267                 if test "X$up" = X -o "X$low" = X; then
3268                     case "`echo RS | $tr '[A-IJ-RS-Z]' '[a-ij-rs-z]' 2>/dev/null`" in
3269                     rs) up='[A-IJ-RS-Z]'
3270                         low='[a-ij-rs-z]'
3271                         ;;
3272                     esac
3273                 fi
3274                 if test "X$up" = X -o "X$low" = X; then
3275                     case "`echo RS | $tr A-IJ-RS-Z a-ij-rs-z 2>/dev/null`" in
3276                     rs) up='A-IJ-RS-Z'
3277                         low='a-ij-rs-z'
3278                         ;;
3279                     esac
3280                 fi
3281                 ;;
3282             esac
3283         fi
3284 esac
3285 case "`echo RS | $tr \"$up\" \"$low\" 2>/dev/null`" in
3286 rs)
3287     echo "Using $up and $low to convert case." >&4
3288     ;;
3289 *)
3290     echo "I don't know how to translate letters from upper to lower case." >&4
3291     echo "Your tr is not acting any way I know of." >&4
3292     exit 1
3293     ;;
3294 esac
3295 : set up the translation script tr, must be called with ./tr of course
3296 cat >tr <<EOSC
3297 $startsh
3298 case "\$1\$2" in
3299 '[A-Z][a-z]') exec $tr '$up' '$low';;
3300 '[a-z][A-Z]') exec $tr '$low' '$up';;
3301 esac
3302 exec $tr "\$@"
3303 EOSC
3304 chmod +x tr
3305 $eunicefix tr
3306
3307 : Try to determine whether config.sh was made on this system
3308 case "$config_sh" in
3309 '')
3310 myuname=`$uname -a 2>/dev/null`
3311 $test -z "$myuname" && myuname=`hostname 2>/dev/null`
3312 # Downcase everything to avoid ambiguity.
3313 # Remove slashes and single quotes so we can use parts of this in
3314 # directory and file names.
3315 # Remove newlines so myuname is sane to use elsewhere.
3316 # tr '[A-Z]' '[a-z]' would not work in EBCDIC
3317 # because the A-Z/a-z are not consecutive.
3318 myuname=`echo $myuname | $sed -e "s,['/],,g" | \
3319         ./tr '[A-Z]' '[a-z]' | $tr $trnl ' '`
3320 newmyuname="$myuname"
3321 dflt=n
3322 case "$knowitall" in
3323 '')
3324         if test -f ../config.sh; then
3325                 if $contains myuname= ../config.sh >/dev/null 2>&1; then
3326                         eval "`grep myuname= ../config.sh`"
3327                 fi
3328                 if test "X$myuname" = "X$newmyuname"; then
3329                         dflt=y
3330                 fi
3331         fi
3332         ;;
3333 *) dflt=y;;
3334 esac
3335
3336 : Get old answers from old config file if Configure was run on the
3337 : same system, otherwise use the hints.
3338 hint=default
3339 cd ..
3340 if test -f config.sh; then
3341         echo " "
3342         rp="I see a config.sh file.  Shall I use it to set the defaults?"
3343         . UU/myread
3344         case "$ans" in
3345         n*|N*) echo "OK, I'll ignore it."
3346                 mv config.sh config.sh.old
3347                 myuname="$newmyuname"
3348                 ;;
3349         *)  echo "Fetching default answers from your old config.sh file..." >&4
3350                 tmp_n="$n"
3351                 tmp_c="$c"
3352                 tmp_sh="$sh"
3353                 . ./config.sh
3354                 cp config.sh UU
3355                 n="$tmp_n"
3356                 c="$tmp_c"
3357                 : Older versions did not always set $sh.  Catch re-use of such
3358                 : an old config.sh.
3359                 case "$sh" in
3360                 '') sh="$tmp_sh" ;;
3361                 esac
3362                 hint=previous
3363                 ;;
3364         esac
3365 fi
3366 . ./UU/checkcc
3367 if test ! -f config.sh; then
3368         $cat <<EOM
3369
3370 First time through, eh?  I have some defaults handy for some systems
3371 that need some extra help getting the Configure answers right:
3372
3373 EOM
3374         (cd $src/hints; ls -C *.sh) | $sed 's/\.sh/   /g' >&4
3375         dflt=''
3376         : Half the following guesses are probably wrong... If you have better
3377         : tests or hints, please send them to https://github.com/Perl/perl5/issues
3378         : The metaconfig authors would also appreciate a copy...
3379         $test -f /irix && osname=irix
3380         $test -f /xenix && osname=sco_xenix
3381         $test -f /dynix && osname=dynix
3382         $test -f /dnix && osname=dnix
3383         $test -f /lynx.os && osname=lynxos
3384         $test -f /unicos && osname=unicos && osvers=`$uname -r`
3385         $test -f /unicosmk && osname=unicosmk && osvers=`$uname -r`
3386         $test -f /unicosmk.ar && osname=unicosmk && osvers=`$uname -r`
3387         $test -f /bin/mips && /bin/mips && osname=mips
3388         $test -d /usr/apollo/bin && osname=apollo
3389         $test -f /etc/saf/_sactab && osname=svr4
3390         $test -d /usr/include/minix && osname=minix && osvers=`$uname -r`
3391         $test -f /system/gnu_library/bin/ar.pm && osname=vos
3392         $test -f /sys/utilities/MultiView && osname=amigaos
3393         if $test -d /MachTen -o -d /MachTen_Folder; then
3394                 osname=machten
3395                 if $test -x /sbin/version; then
3396                         osvers=`/sbin/version | $awk '{print $2}' |
3397                         $sed -e 's/[A-Za-z]$//'`
3398                 elif $test -x /usr/etc/version; then
3399                         osvers=`/usr/etc/version | $awk '{print $2}' |
3400                         $sed -e 's/[A-Za-z]$//'`
3401                 else
3402                         osvers="$2.$3"
3403                 fi
3404         fi
3405
3406         $test -f /sys/posix.dll &&
3407                 $test -f /usr/bin/what &&
3408                 set X `/usr/bin/what /sys/posix.dll` &&
3409                 $test "$3" = UWIN &&
3410                 osname=uwin &&
3411                 osvers="$5"
3412
3413         if $test -f $uname; then
3414                 set X $myuname
3415                 shift
3416
3417                 case "$5" in
3418                 fps*) osname=fps ;;
3419                 mips*)
3420                         case "$4" in
3421                         umips) osname=umips ;;
3422                         *) osname=mips ;;
3423                         esac;;
3424                 [23]100) osname=mips ;;
3425                 i386*)
3426                         tmp=`/bin/uname -X 2>/dev/null|awk '/3\.2v[45]/{ print $(NF) }'`
3427                         if $test "$tmp" != "" -a "$3" = "3.2" -a -f '/etc/systemid'; then
3428                                 osname='sco'
3429                                 osvers=$tmp
3430                         elif $test -f /etc/kconfig; then
3431                                 osname=isc
3432                                 if test "$lns" = "$ln -s"; then
3433                                         osvers=4
3434                                 elif $contains _SYSV3 /usr/include/stdio.h > /dev/null 2>&1 ; then
3435                                         osvers=3
3436                                 elif $contains _POSIX_SOURCE /usr/include/stdio.h > /dev/null 2>&1 ; then
3437                                         osvers=2
3438                                 fi
3439                         fi
3440                         tmp=''
3441                         ;;
3442                 pc*)
3443                         if test -n "$DJGPP"; then
3444                                 osname=dos
3445                                 osvers=djgpp
3446                         fi
3447                         ;;
3448                 esac
3449
3450                 case "$1" in
3451                 aix) osname=aix
3452                         tmp=`( (oslevel) 2>/dev/null || echo "not found") 2>&1`
3453                         case "$tmp" in
3454                         # oslevel can fail with:
3455                         # oslevel: Unable to acquire lock.
3456                         *not\ found) osvers="$4"."$3" ;;
3457                         '<3240'|'<>3240') osvers=3.2.0 ;;
3458                         '=3240'|'>3240'|'<3250'|'<>3250') osvers=3.2.4 ;;
3459                         '=3250'|'>3250') osvers=3.2.5 ;;
3460                         *) osvers=$tmp;;
3461                         esac
3462                         ;;
3463                 bitrig) osname=bitrig
3464                         osvers="$3"
3465                         ;;
3466                 bsd386) osname=bsd386
3467                         osvers=`$uname -r`
3468                         ;;
3469                 cygwin*) osname=cygwin
3470                         osvers="$3"
3471                         ;;
3472                 *dc.osx) osname=dcosx
3473                         osvers="$3"
3474                         ;;
3475                 dnix) osname=dnix
3476                         osvers="$3"
3477                         ;;
3478                 domainos) osname=apollo
3479                         osvers="$3"
3480                         ;;
3481                 dgux)   osname=dgux
3482                         osvers="$3"
3483                         ;;
3484                 dragonfly) osname=dragonfly
3485                         osvers="$3"
3486                         ;;
3487                 dynixptx*) osname=dynixptx
3488                         osvers=`echo "$4"|sed 's/^v//'`
3489                         ;;
3490                 freebsd) osname=freebsd
3491                         osvers="$3" ;;
3492                 genix)  osname=genix ;;
3493                 gnu)    osname=gnu
3494                         osvers="$3" ;;
3495                 hp*)    osname=hpux
3496                         osvers=`echo "$3" | $sed 's,.*\.\([0-9]*\.[0-9]*\),\1,'`
3497                         ;;
3498                 irix*)  osname=irix
3499                         case "$3" in
3500                         4*) osvers=4 ;;
3501                         5*) osvers=5 ;;
3502                         *)      osvers="$3" ;;
3503                         esac
3504                         ;;
3505                 linux)  osname=linux
3506                         case "$3" in
3507                         *)      osvers="$3" ;;
3508                         esac
3509                         $test -f /system/lib/libandroid.so && osname=linux-android
3510                         ;;
3511                 MiNT)   osname=mint
3512                         ;;
3513                 minix)  osname=minix
3514                         osvers=`$uname -r`
3515                         ;;
3516                 netbsd*) osname=netbsd
3517                         osvers="$3"
3518                         ;;
3519                 news-os) osvers="$3"
3520                         case "$3" in
3521                         4*) osname=newsos4 ;;
3522                         *) osname=newsos ;;
3523                         esac
3524                         ;;
3525                 nonstop-ux) osname=nonstopux ;;
3526                 openbsd) osname=openbsd
3527                         osvers="$3"
3528                         ;;
3529                 os2)    osname=os2
3530                         osvers="$4"
3531                         ;;
3532                 POSIX-BC | posix-bc ) osname=posix-bc
3533                         osvers="$3"
3534                         ;;
3535                 powerux | power_ux | powermax_os | powermaxos | \
3536                 powerunix | power_unix) osname=powerux
3537                         osvers="$3"
3538                         ;;
3539                 qnx) osname=qnx
3540                         osvers="$4"
3541                         ;;
3542                 solaris) osname=solaris
3543                         case "$3" in
3544                         5*) osvers=`echo $3 | $sed 's/^5/2/g'` ;;
3545                         *)      osvers="$3" ;;
3546                         esac
3547                         ;;
3548                 sunos) osname=sunos
3549                         case "$3" in
3550                         5*) osname=solaris
3551                                 osvers=`echo $3 | $sed 's/^5/2/g'` ;;
3552                         *)      osvers="$3" ;;
3553                         esac
3554                         ;;
3555                 titanos) osname=titanos
3556                         case "$3" in
3557                         1*) osvers=1 ;;
3558                         2*) osvers=2 ;;
3559                         3*) osvers=3 ;;
3560                         4*) osvers=4 ;;
3561                         *)      osvers="$3" ;;
3562                         esac
3563                         ;;
3564                 ultrix) osname=ultrix
3565                         osvers="$3"
3566                         ;;
3567                 osf1|mls+)      case "$5" in
3568                                 alpha)
3569                                         osname=dec_osf
3570                                         osvers=`sizer -v | awk -FUNIX '{print $2}' | awk '{print $1}' |  tr '[A-Z]' '[a-z]' | sed 's/^[xvt]//'`
3571                                         case "$osvers" in
3572                                         [1-9].[0-9]*) ;;
3573                                         *) osvers=`echo "$3" | sed 's/^[xvt]//'` ;;
3574                                         esac
3575                                         ;;
3576                         hp*)    osname=hp_osf1  ;;
3577                         mips)   osname=mips_osf1 ;;
3578                         esac
3579                         ;;
3580                 # UnixWare 7.1.2 is known as Open UNIX 8
3581                 openunix|unixware) osname=svr5
3582                         osvers="$4"
3583                         ;;
3584                 uts)    osname=uts
3585                         osvers="$3"
3586                         ;;
3587                 vos) osvers="$3"
3588                         ;;
3589                 $2) case "$osname" in
3590                         *isc*) ;;
3591                         *freebsd*) ;;
3592                         svr*)
3593                                 : svr4.x or possibly later
3594                                 case "svr$3" in
3595                                 ${osname}*)
3596                                         osname=svr$3
3597                                         osvers=$4
3598                                         ;;
3599                                 esac
3600                                 case "$osname" in
3601                                 svr4.0)
3602                                         : Check for ESIX
3603                                         if test -f /stand/boot ; then
3604                                                 eval `grep '^INITPROG=[a-z/0-9]*$' /stand/boot`
3605                                                 if test -n "$INITPROG" -a -f "$INITPROG"; then
3606                         isesix=`strings -a $INITPROG|grep 'ESIX SYSTEM V/386 Release 4.0'`
3607                                                         if test -n "$isesix"; then
3608                                                                 osname=esix4
3609                                                         fi
3610                                                 fi
3611                                         fi
3612                                         ;;
3613                                 esac
3614                                 ;;
3615                         *)      if test -f /etc/systemid; then
3616                                         osname=sco
3617                                         set `echo $3 | $sed 's/\./ /g'` $4
3618                                         if $test -f $src/hints/sco_$1_$2_$3.sh; then
3619                                                 osvers=$1.$2.$3
3620                                         elif $test -f $src/hints/sco_$1_$2.sh; then
3621                                                 osvers=$1.$2
3622                                         elif $test -f $src/hints/sco_$1.sh; then
3623                                                 osvers=$1
3624                                         fi
3625                                 else
3626                                         case "$osname" in
3627                                         '') : Still unknown.  Probably a generic Sys V.
3628                                                 osname="sysv"
3629                                                 osvers="$3"
3630                                                 ;;
3631                                         esac
3632                                 fi
3633                                 ;;
3634                         esac
3635                         ;;
3636                 *)      case "$osname" in
3637                         '') : Still unknown.  Probably a generic BSD.
3638                                 osname="$1"
3639                                 osvers="$3"
3640                                 ;;
3641                         esac
3642                         ;;
3643                 esac
3644         else
3645                 if test -f /vmunix -a -f $src/hints/news_os.sh; then
3646                         (what /vmunix | UU/tr '[A-Z]' '[a-z]') > UU/kernel.what 2>&1
3647                         if $contains news-os UU/kernel.what >/dev/null 2>&1; then
3648                                 osname=news_os
3649                         fi
3650                         $rm -f UU/kernel.what
3651                 elif test -d c:/. -o -n "$is_os2" ; then
3652                         set X $myuname
3653                         osname=os2
3654                         osvers="$5"
3655                 fi
3656         fi
3657
3658         case "$targetarch" in
3659         '') ;;
3660         *)  hostarch=$osname
3661             case "$targetarch" in
3662                 nto*|*-nto-*)
3663                     # Will load qnx.sh, which should change osname to nto
3664                     osname=qnx
3665                     osvers=''
3666                     ;;
3667                 *linux-android*)
3668                     # Catch arm-linux-androideabi, mipsel-linux-android,
3669                     # and i686-linux-android
3670                     osname=linux-android
3671                     osvers=''
3672                     ;;
3673                 *linux*)
3674                     # Something like arm-linux-gnueabihf is really just
3675                     # plain linux.
3676                     osname=linux
3677                     osvers=''
3678                     ;;
3679                 *solaris*|*sunos*)
3680                     osname=solaris
3681                     # XXX perhaps we should just assume
3682                     # osvers to be 2, or maybe take the value
3683                     # from targetarch. Using $run before the
3684                     # hints are run is somewhat icky.
3685                     set X `$run $uname -a 2>/dev/null`
3686                     shift
3687                     case "$3" in
3688                         5*) osvers=`echo $3 | $sed 's/^5/2/g'` ;;
3689                         *)  osvers="$3" ;;
3690                     esac
3691                     ;;
3692                 *)
3693                     osname=`echo $targetarch|sed 's,^[^-]*-,,'`
3694                     osvers=''
3695                 ;;
3696             esac
3697             ;;
3698         esac
3699
3700         : Now look for a hint file osname_osvers, unless one has been
3701         : specified already.
3702         case "$hintfile" in
3703         ''|' ')
3704                 file=`echo "${osname}_${osvers}" | $sed -e 's%\.%_%g' -e 's%_$%%'`
3705                 : Also try without trailing minor version numbers.
3706                 xfile=`echo $file | $sed -e 's%_[^_]*$%%'`
3707                 xxfile=`echo $xfile | $sed -e 's%_[^_]*$%%'`
3708                 xxxfile=`echo $xxfile | $sed -e 's%_[^_]*$%%'`
3709                 xxxxfile=`echo $xxxfile | $sed -e 's%_[^_]*$%%'`
3710                 case "$file" in
3711                 '') dflt=none ;;
3712                 *)  case "$osvers" in
3713                         '') dflt=$file
3714                                 ;;
3715                         *)  if $test -f $src/hints/$file.sh ; then
3716                                         dflt=$file
3717                                 elif $test -f $src/hints/$xfile.sh ; then
3718                                         dflt=$xfile
3719                                 elif $test -f $src/hints/$xxfile.sh ; then
3720                                         dflt=$xxfile
3721                                 elif $test -f $src/hints/$xxxfile.sh ; then
3722                                         dflt=$xxxfile
3723                                 elif $test -f $src/hints/$xxxxfile.sh ; then
3724                                         dflt=$xxxxfile
3725                                 elif $test -f "$src/hints/${osname}.sh" ; then
3726                                         dflt="${osname}"
3727                                 else
3728                                         dflt=none
3729                                 fi
3730                                 ;;
3731                         esac
3732                         ;;
3733                 esac
3734                 if $test -f Policy.sh ; then
3735                         case "$dflt" in
3736                         *Policy*) ;;
3737                         none) dflt="Policy" ;;
3738                         *) dflt="Policy $dflt" ;;
3739                         esac
3740                 fi
3741                 ;;
3742         *)
3743                 dflt=`echo $hintfile | $sed 's/\.sh$//'`
3744                 ;;
3745         esac
3746
3747         if $test -f Policy.sh ; then
3748                 $cat <<EOM
3749
3750 There's also a Policy hint file available, which should make the
3751 site-specific (policy) questions easier to answer.
3752 EOM
3753
3754         fi
3755
3756         $cat <<EOM
3757
3758 You may give one or more space-separated answers, or "none" if appropriate.
3759 If you have a handcrafted Policy.sh file or a Policy.sh file generated by a
3760 previous run of Configure, you may specify it as well as or instead of
3761 OS-specific hints.  If hints are provided for your OS, you should use them:
3762 although Perl can probably be built without hints on many platforms, using
3763 hints often improve performance and may enable features that Configure can't
3764 set up on its own. If there are no hints that match your OS, specify "none";
3765 DO NOT give a wrong version or a wrong OS.
3766
3767 EOM
3768
3769         rp="Which of these apply, if any?"
3770         . UU/myread
3771         tans=$ans
3772         for file in $tans; do
3773                 if $test X$file = XPolicy -a -f Policy.sh; then
3774                         . Policy.sh
3775                         $cat Policy.sh >> UU/config.sh
3776                 elif $test -f $src/hints/$file.sh; then
3777                         . $src/hints/$file.sh
3778                         $cat $src/hints/$file.sh >> UU/config.sh
3779                 elif $test X"$tans" = X -o X"$tans" = Xnone ; then
3780                         : nothing
3781                 else
3782                         : Give one chance to correct a possible typo.
3783                         echo "$file.sh does not exist"
3784                         dflt=$file
3785                         rp="hint to use instead?"
3786                         . UU/myread
3787                         for file in $ans; do
3788                                 if $test -f "$src/hints/$file.sh"; then
3789                                         . $src/hints/$file.sh
3790                                         $cat $src/hints/$file.sh >> UU/config.sh
3791                                 elif $test X$ans = X -o X$ans = Xnone ; then
3792                                         : nothing
3793                                 else
3794                                         echo "$file.sh does not exist -- ignored."
3795                                 fi
3796                         done
3797                 fi
3798         done
3799
3800         hint=recommended
3801         : Remember our hint file for later.
3802         if $test -f "$src/hints/$file.sh" ; then
3803                 hintfile="$file"
3804         else
3805                 hintfile=''
3806         fi
3807 fi
3808 cd UU
3809 ;;
3810 *)
3811         echo " "
3812         echo "Fetching default answers from $config_sh..." >&4
3813         tmp_n="$n"
3814         tmp_c="$c"
3815         cd ..
3816         cp $config_sh config.sh 2>/dev/null
3817         chmod +w config.sh
3818         . ./config.sh
3819         cd UU
3820         cp ../config.sh .
3821         n="$tmp_n"
3822         c="$tmp_c"
3823         hint=previous
3824         ;;
3825 esac
3826 . ./optdef.sh
3827
3828 : Restore computed paths
3829 for file in $loclist $trylist; do
3830         eval $file="\$_$file"
3831 done
3832
3833 cat << EOM
3834
3835 Configure uses the operating system name and version to set some defaults.
3836 The default value is probably right if the name rings a bell. Otherwise,
3837 since spelling matters for me, either accept the default or answer "none"
3838 to leave it blank.
3839
3840 EOM
3841 case "$osname" in
3842         ''|' ')
3843                 case "$hintfile" in
3844                 ''|' '|none) dflt=none ;;
3845                 *)  dflt=`echo $hintfile | $sed -e 's/\.sh$//' -e 's/_.*$//'` ;;
3846                 esac
3847                 ;;
3848         *) dflt="$osname" ;;
3849 esac
3850 rp="Operating system name?"
3851 . ./myread
3852 case "$ans" in
3853 none)  osname='' ;;
3854 *) osname=`echo "$ans" | $sed -e 's/[   ][      ]*/_/g' | ./tr '[A-Z]' '[a-z]'`;;
3855 esac
3856 echo " "
3857 case "$osvers" in
3858         ''|' ')
3859                 case "$hintfile" in
3860                 ''|' '|none) dflt=none ;;
3861                 *)      dflt=`echo $hintfile | $sed -e 's/\.sh$//' -e 's/^[^_]*//'`
3862                         dflt=`echo $dflt | $sed -e 's/^_//' -e 's/_/./g'`
3863                         case "$dflt" in
3864                         ''|' ') dflt=none ;;
3865                         esac
3866                         ;;
3867                 esac
3868                 ;;
3869         *) dflt="$osvers" ;;
3870 esac
3871 rp="Operating system version?"
3872 . ./myread
3873 case "$ans" in
3874 none)  osvers='' ;;
3875 *) osvers="$ans" ;;
3876 esac
3877
3878
3879 . ./posthint.sh
3880
3881 : who configured the system
3882 cf_time=`LC_ALL=C; LANGUAGE=C; export LC_ALL; export LANGUAGE; $date 2>&1`
3883 case "$cf_by" in
3884 "")
3885         cf_by=`(logname) 2>/dev/null`
3886         case "$cf_by" in
3887         "")
3888                 cf_by=`(whoami) 2>/dev/null`
3889                 case "$cf_by" in
3890                 "") cf_by=unknown ;;
3891                 esac ;;
3892         esac ;;
3893 esac
3894
3895 : decide how portable to be.  Allow command line overrides.
3896 case "$d_portable" in
3897 "$undef") ;;
3898 *)      d_portable="$define" ;;
3899 esac
3900
3901 : set up shell script to do ~ expansion
3902 cat >filexp <<EOSS
3903 $startsh
3904 : expand filename
3905 case "\$1" in
3906  \~/*|\~)
3907         echo \$1 | $sed "s|~|\${HOME-\$LOGDIR}|"
3908         ;;
3909  \~*)
3910         if $test -f /bin/csh; then
3911                 /bin/csh -f -c "glob \$1"
3912                 failed=\$?
3913                 echo ""
3914                 exit \$failed
3915         else
3916                 name=\`$expr x\$1 : '..\([^/]*\)'\`
3917                 dir=\`$sed -n -e "/^\${name}:/{s/^[^:]*:[^:]*:[^:]*:[^:]*:[^:]*:\([^:]*\).*"'\$'"/\1/" -e p -e q -e '}' </etc/passwd\`
3918                 if $test ! -d "\$dir"; then
3919                         me=\`basename \$0\`
3920                         echo "\$me: can't locate home directory for: \$name" >&2
3921                         exit 1
3922                 fi
3923                 case "\$1" in
3924                 */*)
3925                         echo \$dir/\`$expr x\$1 : '..[^/]*/\(.*\)'\`
3926                         ;;
3927                 *)
3928                         echo \$dir
3929                         ;;
3930                 esac
3931         fi
3932         ;;
3933 *)
3934         echo \$1
3935         ;;
3936 esac
3937 EOSS
3938 chmod +x filexp
3939 $eunicefix filexp
3940
3941 : now set up to get a file name
3942 cat <<EOS >getfile
3943 $startsh
3944 EOS
3945 cat <<'EOSC' >>getfile
3946 tilde=''
3947 fullpath=''
3948 already=''
3949 skip=''
3950 none_ok=''
3951 exp_file=''
3952 nopath_ok=''
3953 orig_rp="$rp"
3954 orig_dflt="$dflt"
3955 case "$gfpth" in
3956 '') gfpth='.' ;;
3957 esac
3958
3959 case "$fn" in
3960 *\(*)
3961         : getfile will accept an answer from the comma-separated list
3962         : enclosed in parentheses even if it does not meet other criteria.
3963         expr "$fn" : '.*(\(.*\)).*' | $tr ',' $trnl >getfile.ok
3964         fn=`echo $fn | sed 's/(.*)//'`
3965         ;;
3966 esac
3967
3968 case "$fn" in
3969 *:*)
3970         loc_file=`expr $fn : '.*:\(.*\)'`
3971         fn=`expr $fn : '\(.*\):.*'`
3972         ;;
3973 esac
3974
3975 case "$fn" in
3976 *~*) tilde=true;;
3977 esac
3978 case "$fn" in
3979 */*) fullpath=true;;
3980 esac
3981 case "$fn" in
3982 *+*) skip=true;;
3983 esac
3984 case "$fn" in
3985 *n*) none_ok=true;;
3986 esac
3987 case "$fn" in
3988 *e*) exp_file=true;;
3989 esac
3990 case "$fn" in
3991 *p*) nopath_ok=true;;
3992 esac
3993
3994 case "$fn" in
3995 *f*) type='File';;
3996 *d*) type='Directory';;
3997 *l*) type='Locate';;
3998 esac
3999
4000 what="$type"
4001 case "$what" in
4002 Locate) what='File';;
4003 esac
4004
4005 case "$exp_file" in
4006 '')
4007         case "$d_portable" in
4008         "$define") ;;
4009         *) exp_file=true;;
4010         esac
4011         ;;
4012 esac
4013
4014 cd ..
4015 while test "$type"; do
4016         redo=''
4017         rp="$orig_rp"
4018         dflt="$orig_dflt"
4019         case "$tilde" in
4020         true) rp="$rp (~name ok)";;
4021         esac
4022         . UU/myread
4023         if test -f UU/getfile.ok && \
4024                 $contains "^$ans\$" UU/getfile.ok >/dev/null 2>&1
4025         then
4026                 value="$ans"
4027                 ansexp="$ans"
4028                 break
4029         fi
4030         case "$ans" in
4031         none)
4032                 value=''
4033                 ansexp=''
4034                 case "$none_ok" in
4035                 true) type='';;
4036                 esac
4037                 ;;
4038         *)
4039                 case "$tilde" in
4040                 '') value="$ans"
4041                         ansexp="$ans";;
4042                 *)
4043                         value=`UU/filexp $ans`
4044                         case $? in
4045                         0)
4046                                 if test "$ans" != "$value"; then
4047                                         echo "(That expands to $value on this system.)"
4048                                 fi
4049                                 ;;
4050                         *) value="$ans";;
4051                         esac
4052                         ansexp="$value"
4053                         case "$exp_file" in
4054                         '') value="$ans";;
4055                         esac
4056                         ;;
4057                 esac
4058                 case "$fullpath" in
4059                 true)
4060                         case "$ansexp" in
4061                         /*) value="$ansexp" ;;
4062                         [a-zA-Z]:/*) value="$ansexp" ;;
4063                         *)
4064                                 redo=true
4065                                 case "$already" in
4066                                 true)
4067                                 echo "I shall only accept a full path name, as in /bin/ls." >&4
4068                                 echo "Use a ! shell escape if you wish to check pathnames." >&4
4069                                         ;;
4070                                 *)
4071                                 echo "Please give a full path name, starting with slash." >&4
4072                                         case "$tilde" in
4073                                         true)
4074                                 echo "Note that using ~name is ok provided it expands well." >&4
4075                                                 already=true
4076                                                 ;;
4077                                         esac
4078                                 esac
4079                                 ;;
4080                         esac
4081                         ;;
4082                 esac
4083                 case "$redo" in
4084                 '')
4085                         case "$type" in
4086                         File)
4087                                 for fp in $gfpth; do
4088                                         if test "X$fp" = X.; then
4089                                             pf="$ansexp"
4090                                         else    
4091                                             pf="$fp/$ansexp"
4092                                         fi
4093                                         if test -f "$pf"; then
4094                                                 type=''
4095                                         elif test -r "$pf" || (test -h "$pf") >/dev/null 2>&1
4096                                         then
4097                                                 echo "($value is not a plain file, but that's ok.)"
4098                                                 type=''
4099                                         fi
4100                                         if test X"$type" = X; then
4101                                             value="$pf"
4102                                             break
4103                                         fi
4104                                 done
4105                                 ;;
4106                         Directory)
4107                                 for fp in $gfpth; do
4108                                         if test "X$fp" = X.; then
4109                                             dir="$ans"
4110                                             direxp="$ansexp"
4111                                         else    
4112                                             dir="$fp/$ansexp"
4113                                             direxp="$fp/$ansexp"
4114                                         fi
4115                                         if test -d "$direxp"; then
4116                                                 type=''
4117                                                 value="$dir"
4118                                                 break
4119                                         fi
4120                                 done
4121                                 ;;
4122                         Locate)
4123                                 if test -d "$ansexp"; then
4124                                         echo "(Looking for $loc_file in directory $value.)"
4125                                         value="$value/$loc_file"
4126                                         ansexp="$ansexp/$loc_file"
4127                                 fi
4128                                 if test -f "$ansexp"; then
4129                                         type=''
4130                                 fi
4131                                 case "$nopath_ok" in
4132                                 true)   case "$value" in
4133                                         */*) ;;
4134                                         *)      echo "Assuming $value will be in people's path."
4135                                                 type=''
4136                                                 ;;
4137                                         esac
4138                                         ;;
4139                                 esac
4140                                 ;;
4141                         esac
4142
4143                         case "$skip" in
4144                         true) type='';
4145                         esac
4146
4147                         case "$type" in
4148                         '') ;;
4149                         *)
4150                                 if test "$fastread" = yes; then
4151                                         dflt=y
4152                                 else
4153                                         dflt=n
4154                                 fi
4155                                 rp="$what $value doesn't exist.  Use that name anyway?"
4156                                 . UU/myread
4157                                 dflt=''
4158                                 case "$ans" in
4159                                 y*) type='';;
4160                                 *) echo " ";;
4161                                 esac
4162                                 ;;
4163                         esac
4164                         ;;
4165                 esac
4166                 ;;
4167         esac
4168 done
4169 cd UU
4170 ans="$value"
4171 rp="$orig_rp"
4172 dflt="$orig_dflt"
4173 rm -f getfile.ok
4174 test "X$gfpthkeep" != Xy && gfpth=""
4175 EOSC
4176
4177 : determine root of directory hierarchy where package will be installed.
4178 case "$prefix" in
4179 '')     dflt=`./loc . /usr/local /usr/local /local /opt /usr`
4180         ;;
4181 *)      dflt="$prefix"
4182         ;;
4183 esac
4184 $cat <<EOM
4185
4186 By default, $package will be installed in $dflt/bin, manual pages
4187 under $dflt/man, etc..., i.e. with $dflt as prefix for all
4188 installation directories. Typically this is something like /usr/local.
4189 If you wish to have binaries under /usr/bin but other parts of the
4190 installation under /usr/local, that's ok: you will be prompted
4191 separately for each of the installation directories, the prefix being
4192 only used to set the defaults.
4193
4194 EOM
4195 fn=d~
4196 rp='Installation prefix to use?'
4197 . ./getfile
4198 oldprefix=''
4199 case "$prefix" in
4200 '')     ;;
4201 *)      case "$ans" in
4202         "$prefix") ;;
4203         *) oldprefix="$prefix";;
4204         esac
4205         ;;
4206 esac
4207
4208 case "$ans" in
4209 *?/)    prefix=`echo "$ans" | sed 's/.$//'`
4210         ;;
4211 *)      prefix="$ans"
4212 esac
4213
4214 case "$ansexp" in
4215 *?/)    prefixexp=`echo "$ansexp" | sed 's/.$//'`
4216         ;;
4217 *)      prefixexp="$ansexp"
4218 esac
4219
4220 : allow them to override the AFS root
4221 case "$afsroot" in
4222 '')     afsroot=/afs ;;
4223 *)      afsroot=$afsroot ;;
4224 esac
4225
4226 : is AFS running?
4227 echo " "
4228 case "$afs" in
4229 $define|true)   afs=true ;;
4230 $undef|false)   afs=false ;;
4231 *)      if $test -d $afsroot; then
4232                 afs=true
4233         else
4234                 afs=false
4235         fi
4236         ;;
4237 esac
4238 if $afs; then
4239         echo "AFS may be running... I'll be extra cautious then..." >&4
4240 else
4241         echo "AFS does not seem to be running..." >&4
4242 fi
4243
4244 : determine installation prefix for where package is to be installed.
4245 if $afs; then
4246 $cat <<EOM
4247
4248 Since you are running AFS, I need to distinguish the directory in which
4249 files will reside from the directory in which they are installed (and from
4250 which they are presumably copied to the former directory by occult means).
4251
4252 EOM
4253         case "$installprefix" in
4254         '') dflt=`echo $prefix | sed 's#^/afs/#/afs/.#'`;;
4255         *) dflt="$installprefix";;
4256         esac
4257 else
4258 $cat <<EOM
4259
4260 In some special cases, particularly when building $package for distribution,
4261 it is convenient to distinguish the directory in which files should be
4262 installed from the directory ($prefix) in which they will
4263 eventually reside.  For most users, these two directories are the same.
4264
4265 EOM
4266         case "$installprefix" in
4267         '') dflt=$prefix ;;
4268         *) dflt=$installprefix;;
4269         esac
4270 fi
4271 fn=d~
4272 rp='What installation prefix should I use for installing files?'
4273 . ./getfile
4274 installprefix="$ans"
4275 installprefixexp="$ansexp"
4276
4277 : Perform the prefixexp/installprefixexp correction if necessary
4278 cat <<EOS >installprefix
4279 $startsh
4280 EOS
4281 cat <<'EOSC' >>installprefix
4282 : Change installation prefix, if necessary.
4283 if $test X"$prefix" != X"$installprefix"; then
4284     eval "install${prefixvar}=\`echo \$${prefixvar}exp | sed \"s#^\$prefixexp#\$installprefixexp#\"\`"
4285 else
4286     eval "install${prefixvar}=\"\$${prefixvar}exp\""
4287 fi
4288 EOSC
4289 chmod +x installprefix
4290 $eunicefix installprefix
4291
4292 : Set variables such as privlib and privlibexp from the output of ./getfile
4293 : performing the prefixexp/installprefixexp correction if necessary.
4294 cat <<EOS >setprefixvar
4295 $startsh
4296 EOS
4297 cat <<'EOSC' >>setprefixvar
4298 eval "${prefixvar}=\"\$ans\""
4299 eval "${prefixvar}exp=\"\$ansexp\""
4300 . ./installprefix
4301 EOSC
4302 chmod +x setprefixvar
4303 $eunicefix setprefixvar
4304
4305 : set up the script used to warn in case of inconsistency
4306 cat <<EOS >whoa
4307 $startsh
4308 EOS
4309 cat <<'EOSC' >>whoa
4310 dflt=y
4311 case "$hint" in
4312     recommended)
4313         case "$hintfile" in
4314         '')     echo "The $hint value for \$$var on this machine was \"$was\"!" >&4
4315                 ;;
4316         *)      echo "Hmm.  Based on the hints in hints/$hintfile.sh, " >&4
4317                 echo "the $hint value for \$$var on this machine was \"$was\"!" >&4
4318                 ;;
4319         esac
4320         ;;
4321     *)  echo " "
4322         echo "*** WHOA THERE!!! ***" >&4
4323         echo "    The $hint value for \$$var on this machine was \"$was\"!" >&4
4324         ;;
4325 esac
4326 rp="    Keep the $hint value?"
4327 . ./myread
4328 case "$ans" in
4329 y) td=$was; tu=$was;;
4330 esac
4331 EOSC
4332
4333 : function used to set '$1' to '$val'
4334 setvar='var=$1; eval "was=\$$1"; td=$define; tu=$undef;
4335 case "$val$was" in
4336 $define$undef) . ./whoa; eval "$var=\$td";;
4337 $undef$define) . ./whoa; eval "$var=\$tu";;
4338 *) eval "$var=$val";;
4339 esac'
4340
4341 : Do we want threads support and if so, what type
4342 case "$usethreads" in
4343 $define|true|[yY]*)     dflt='y';;
4344 *)     # Catch case where user specified ithreads but
4345        # forgot -Dusethreads (A.D. 4/2002)
4346        case "$useithreads" in
4347        *$define*)       dflt='y';;
4348        *)               dflt='n';;
4349        esac
4350        ;;
4351 esac
4352 cat <<EOM
4353
4354 Perl can be built to offer a form of threading support on some systems
4355 To do so, Configure can be run with -Dusethreads.
4356
4357 Note that Perl built with threading support runs slightly slower
4358 and uses slightly more memory than plain Perl.
4359
4360 If this doesn't make any sense to you, just accept the default '$dflt'.
4361 EOM
4362 rp='Build a threading Perl?'
4363 . ./myread
4364 case "$ans" in
4365 y|Y)    val="$define" ;;
4366 *)      val="$undef" ;;
4367 esac
4368 set usethreads
4369 eval $setvar
4370
4371 useithreads="$usethreads"
4372
4373 case "$d_oldpthreads" in
4374 '')     : Configure tests would be welcome here.  For now, assume undef.
4375         val="$undef" ;;
4376 *)      val="$d_oldpthreads" ;;
4377 esac
4378 set d_oldpthreads
4379 eval $setvar
4380
4381
4382 : Look for a hint-file generated 'call-back-unit'.  If the
4383 : user has specified that a threading perl is to be built,
4384 : we may need to set or change some other defaults.
4385 if $test -f usethreads.cbu; then
4386     echo "Your platform has some specific hints regarding threaded builds, using them..."
4387     . ./usethreads.cbu
4388 else
4389     case "$usethreads" in
4390         "$define"|true|[yY]*)
4391                 $cat <<EOM
4392 (Your platform does not have any specific hints for threaded builds.
4393  Assuming POSIX threads, then.)
4394 EOM
4395         ;;
4396     esac
4397 fi
4398
4399 : Check if multiplicity is required
4400 cat <<EOM
4401
4402 Perl can be built so that multiple Perl interpreters can coexist
4403 within the same Perl executable.
4404 EOM
4405
4406 case "$useithreads" in
4407 $define)
4408         cat <<EOM
4409 This multiple interpreter support is required for interpreter-based threads.
4410 EOM
4411         val="$define"
4412         ;;
4413 *)      case "$usemultiplicity" in
4414         $define|true|[yY]*)     dflt='y';;
4415         *) dflt='n';;
4416         esac
4417         echo " "
4418         echo "If this doesn't make any sense to you, just accept the default '$dflt'."
4419         rp='Build Perl for multiplicity?'
4420         . ./myread
4421         case "$ans" in
4422         y|Y)    val="$define" ;;
4423         *)      val="$undef" ;;
4424         esac
4425         ;;
4426 esac
4427 set usemultiplicity
4428 eval $setvar
4429
4430 : Check if morebits is requested
4431 case "$usemorebits" in
4432 "$define"|true|[yY]*)
4433         use64bitint="$define"
4434         uselongdouble="$define"
4435         usemorebits="$define"
4436         ;;
4437 *)      usemorebits="$undef"
4438         ;;
4439 esac
4440
4441 : Determine the C compiler to be used
4442 echo " "
4443 case "$cc" in
4444 '') dflt=cc;;
4445 *) dflt="$cc";;
4446 esac
4447 rp="Use which C compiler?"
4448 . ./myread
4449 cc="$ans"
4450
4451 : See whether they have no cc but they do have gcc
4452 . ./trygcc
4453 if $test -f cc.cbu; then
4454     . ./cc.cbu
4455 fi
4456 . ./checkcc
4457
4458 : make some quick guesses about what we are up against
4459 echo " "
4460 $echo $n "Hmm...  $c"
4461 echo exit 1 >bsd
4462 echo exit 1 >usg
4463 echo exit 1 >v7
4464 echo exit 1 >osf1
4465 echo exit 1 >eunice
4466 echo exit 1 >xenix
4467 echo exit 1 >venix
4468 echo exit 1 >os2
4469 d_bsd="$undef"
4470 $cat $sysroot/usr/include/signal.h $sysroot/usr/include/sys/signal.h >foo 2>/dev/null
4471 if test -f /osf_boot || $contains 'OSF/1' $sysroot/usr/include/ctype.h >/dev/null 2>&1
4472 then
4473         echo "Looks kind of like an OSF/1 system, but we'll see..."
4474         echo exit 0 >osf1
4475 elif test `echo abc | $tr a-z A-Z` = Abc ; then
4476         xxx=`./loc addbib blurfl $pth`
4477         if $test -f $xxx; then
4478         echo "Looks kind of like a USG system with BSD features, but we'll see..."
4479                 echo exit 0 >bsd
4480                 echo exit 0 >usg
4481         else
4482                 if $contains SIGTSTP foo >/dev/null 2>&1 ; then
4483                         echo "Looks kind of like an extended USG system, but we'll see..."
4484                 else
4485                         echo "Looks kind of like a USG system, but we'll see..."
4486                 fi
4487                 echo exit 0 >usg
4488         fi
4489 elif $contains SIGTSTP foo >/dev/null 2>&1 ; then
4490         echo "Looks kind of like a BSD system, but we'll see..."
4491         d_bsd="$define"
4492         echo exit 0 >bsd
4493 else
4494         echo "Looks kind of like a Version 7 system, but we'll see..."
4495         echo exit 0 >v7
4496 fi
4497 case "$eunicefix" in
4498 *unixtovms*)
4499         $cat <<'EOI'
4500 There is, however, a strange, musty smell in the air that reminds me of
4501 something...hmm...yes...I've got it...there's a VMS nearby, or I'm a Blit.
4502 EOI
4503         echo exit 0 >eunice
4504         d_eunice="$define"
4505 : it so happens the Eunice I know will not run shell scripts in Unix format
4506         ;;
4507 *)
4508         echo " "
4509         echo "Congratulations.  You aren't running Eunice."
4510         d_eunice="$undef"
4511         ;;
4512 esac
4513 : Detect OS2.  The p_ variable is set above in the Head.U unit.
4514 : Note that this also -- wrongly -- detects e.g. dos-djgpp, which also uses
4515 : semicolon as a patch separator
4516 case "$p_" in
4517 :) ;;
4518 *)
4519         $cat <<'EOI'
4520 I have the feeling something is not exactly right, however...don't tell me...
4521 lemme think...does HAL ring a bell?...no, of course, you're only running OS/2!
4522 (Or you may be running DOS with DJGPP.)
4523 EOI
4524         echo exit 0 >os2
4525         ;;
4526 esac
4527 if test -f /xenix; then
4528         echo "Actually, this looks more like a XENIX system..."
4529         echo exit 0 >xenix
4530         d_xenix="$define"
4531 else
4532         echo " "
4533         echo "It's not Xenix..."
4534         d_xenix="$undef"
4535 fi
4536 chmod +x xenix
4537 $eunicefix xenix
4538 if test -f /venix; then
4539         echo "Actually, this looks more like a VENIX system..."
4540         echo exit 0 >venix
4541 else
4542         echo " "
4543         if ./xenix; then
4544                 : null
4545         else
4546                 echo "Nor is it Venix..."
4547         fi
4548 fi
4549 chmod +x bsd usg v7 osf1 eunice xenix venix os2
4550 $eunicefix bsd usg v7 osf1 eunice xenix venix os2
4551 $rm -f foo
4552
4553 : Check if we are using GNU gcc and what its version is
4554 echo " "
4555 echo "Checking for GNU cc in disguise and/or its version number..." >&4
4556 $cat >try.c <<EOM
4557 #include <stdio.h>
4558 int main() {
4559 #if defined(__GNUC__) && !defined(__INTEL_COMPILER)
4560 #ifdef __VERSION__
4561         printf("%s\n", __VERSION__);
4562 #else
4563         printf("%s\n", "1");
4564 #endif
4565 #endif
4566         return(0);
4567 }
4568 EOM
4569 if $cc -o try $ccflags $ldflags try.c; then
4570         gccversion=`$run ./try`
4571         case "$gccversion" in
4572         '') echo "You are not using GNU cc." ;;
4573         *)  echo "You are using GNU cc $gccversion."
4574             ccname=gcc
4575             ;;
4576         esac
4577 else
4578         echo " "
4579         echo "*** WHOA THERE!!! ***" >&4
4580         echo "    Your C compiler \"$cc\" doesn't seem to be working!" >&4
4581         case "$knowitall" in
4582         '')
4583         echo "    You'd better start hunting for one and let me know about it." >&4
4584                 exit 1
4585                 ;;
4586         esac
4587 fi
4588 $rm -f try try.*
4589 case "$gccversion" in
4590 1.*) cpp=`./loc gcc-cpp $cpp $pth` ;;
4591 esac
4592 case "$gccversion" in
4593 '') gccosandvers='' ;;
4594 *) gccshortvers=`echo "$gccversion"|sed 's/ .*//'`
4595    gccosandvers=`$cc -v 2>&1|grep '/specs$'|sed "s!.*/[^-/]*-[^-/]*-\([^-/]*\)/$gccshortvers/specs!\1!"`
4596    gccshortvers=''
4597    case "$gccosandvers" in
4598    $osname) gccosandvers='' ;; # linux gccs seem to have no linux osvers, grr
4599    $osname$osvers) ;; # looking good
4600    $osname*) cat <<EOM >&4
4601
4602 *** WHOA THERE!!! ***
4603
4604     Your gcc has not been compiled for the exact release of
4605     your operating system ($gccosandvers versus $osname$osvers).
4606
4607     In general it is a good idea to keep gcc synchronized with
4608     the operating system because otherwise serious problems
4609     may ensue when trying to compile software, like Perl.
4610
4611     I'm trying to be optimistic here, though, and will continue.
4612     If later during the configuration and build icky compilation
4613     problems appear (headerfile conflicts being the most common
4614     manifestation), I suggest reinstalling the gcc to match
4615     your operating system release.
4616
4617 EOM
4618       ;;
4619    *) gccosandvers='' ;; # failed to parse, better be silent
4620    esac
4621    ;;
4622 esac
4623 case "$ccname" in
4624 '') ccname="$cc" ;;
4625 esac
4626
4627 # gcc 3.* complain about adding -Idirectories that they already know about,
4628 # so we will take those off from locincpth.
4629 case "$gccversion" in
4630 3.*)
4631     echo "main(){}">try.c
4632     for incdir in $locincpth; do
4633        warn=`$cc $ccflags -I$incdir -c try.c 2>&1 | \
4634              grep '^c[cp]p*[01]: warning: changing search order '`
4635        if test "X$warn" != X; then
4636            locincpth=`echo " $locincpth " | sed "s! $incdir ! !"`
4637        fi
4638     done
4639     $rm -f try try.*
4640 esac
4641
4642 # gcc 4.9 by default does some optimizations that break perl.
4643 # see ticket 121505.
4644 #
4645 # The -fwrapv disables those optimizations (and probably others,) so
4646 # for gcc 4.9 (and later, since the optimizations probably won't go
4647 # away), add -fwrapv unless the user requests -fno-wrapv, which
4648 # disables -fwrapv, or if the user requests -fsanitize=undefined,
4649 # which turns the overflows -fwrapv ignores into runtime errors.
4650 case "$gccversion" in
4651 4.[3-9].*|4.[1-9][0-9]*|[5-9].*|[1-9][0-9]*)
4652     case "$ccflags" in
4653     *-fno-wrapv*|*-fsanitize=undefined*|*-fwrapv*) ;;
4654     *) ccflags="$ccflags -fwrapv" ;;
4655     esac
4656 esac
4657
4658 : What should the include directory be ?
4659 : Use sysroot if set, so findhdr looks in the right place.
4660 echo " "
4661 $echo $n "Hmm...  $c"
4662 dflt="$sysroot/usr/include"
4663 incpath=''
4664 mips_type=''
4665 if $test -f /bin/mips && /bin/mips; then
4666         echo "Looks like a MIPS system..."
4667         $cat >usr.c <<'EOCP'
4668 #ifdef SYSTYPE_BSD43
4669 /bsd43
4670 #endif
4671 EOCP
4672         if $cc $cppflags -E usr.c > usr.out && $contains / usr.out >/dev/null 2>&1; then
4673                 dflt='/bsd43/usr/include'
4674                 incpath='/bsd43'
4675                 mips_type='BSD 4.3'
4676         else
4677                 mips_type='System V'
4678         fi
4679         $rm -f usr.c usr.out
4680         echo "and you're compiling with the $mips_type compiler and libraries."
4681         xxx_prompt=y
4682         echo "exit 0" >mips
4683 else
4684         echo "Doesn't look like a MIPS system."
4685         xxx_prompt=n
4686         echo "exit 1" >mips
4687 fi
4688 chmod +x mips
4689 $eunicefix mips
4690 case "$usrinc" in
4691 '') ;;
4692 *) dflt="$usrinc";;
4693 esac
4694 case "$xxx_prompt" in
4695 y)      fn=d/
4696         echo " "
4697         rp='Where are the include files you want to use?'
4698         . ./getfile
4699         usrinc="$ans"
4700         ;;
4701 *)      usrinc="$dflt"
4702         ;;
4703 esac
4704
4705 : see how we invoke the C preprocessor
4706 echo " "
4707 echo "Now, how can we feed standard input to your C preprocessor..." >&4
4708 cat <<'EOT' >testcpp.c
4709 #define ABC abc
4710 #define XYZ xyz
4711 ABC.XYZ
4712 EOT
4713 cd ..
4714 if test ! -f cppstdin; then
4715         if test "X$osname" = "Xaix" -a "X$gccversion" = X; then
4716                 # AIX cc -E doesn't show the absolute headerfile
4717                 # locations but we'll cheat by using the -M flag.
4718                 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
4719         else
4720                 echo 'cat >.$$.c; '"$cc $cppflags"' -E ${1+"$@"} .$$.c; rm .$$.c' >cppstdin
4721         fi
4722 else
4723         echo "Keeping your $hint cppstdin wrapper."
4724 fi
4725 chmod 755 cppstdin
4726 wrapper=`pwd`/cppstdin
4727 ok='false'
4728 cd UU
4729
4730 if $test "X$cppstdin" != "X" && \
4731         $cppstdin $cppminus <testcpp.c >testcpp.out 2>&1 && \
4732         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1
4733 then
4734         echo "You used to use $cppstdin $cppminus so we'll use that again."
4735         case "$cpprun" in
4736         '') echo "But let's see if we can live without a wrapper..." ;;
4737         *)
4738                 if $cpprun $cpplast <testcpp.c >testcpp.out 2>&1 && \
4739                         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1
4740                 then
4741                         echo "(And we'll use $cpprun $cpplast to preprocess directly.)"
4742                         ok='true'
4743                 else
4744                         echo "(However, $cpprun $cpplast does not work, let's see...)"
4745                 fi
4746                 ;;
4747         esac
4748 else
4749         case "$cppstdin" in
4750         '') ;;
4751         *)
4752                 echo "Good old $cppstdin $cppminus does not seem to be of any help..."
4753                 ;;
4754         esac
4755 fi
4756
4757 if $ok; then
4758         : nothing
4759 elif echo 'Maybe "'"$cc"' -E" will work...'; \
4760         $cc -E <testcpp.c >testcpp.out 2>&1; \
4761         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
4762         echo "Yup, it does."
4763         x_cpp="$cc $cppflags -E"
4764         x_minus='';
4765 elif echo 'Nope...maybe "'"$cc"' -E -" will work...'; \
4766         $cc -E - <testcpp.c >testcpp.out 2>&1; \
4767         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
4768         echo "Yup, it does."
4769         x_cpp="$cc $cppflags -E"
4770         x_minus='-';
4771 elif echo 'Nope...maybe "'"$cc"' -P" will work...'; \
4772         $cc -P <testcpp.c >testcpp.out 2>&1; \
4773         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
4774         echo "Yipee, that works!"
4775         x_cpp="$cc $cppflags -P"
4776         x_minus='';
4777 elif echo 'Nope...maybe "'"$cc"' -P -" will work...'; \
4778         $cc -P - <testcpp.c >testcpp.out 2>&1; \
4779         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
4780         echo "At long last!"
4781         x_cpp="$cc $cppflags -P"
4782         x_minus='-';
4783 elif echo 'No such luck, maybe "'$cpp'" will work...'; \
4784         $cpp <testcpp.c >testcpp.out 2>&1; \
4785         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
4786         echo "It works!"
4787         x_cpp="$cpp $cppflags"
4788         x_minus='';
4789 elif echo 'Nixed again...maybe "'$cpp' -" will work...'; \
4790         $cpp - <testcpp.c >testcpp.out 2>&1; \
4791         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
4792         echo "Hooray, it works!  I was beginning to wonder."
4793         x_cpp="$cpp $cppflags"
4794         x_minus='-';
4795 elif echo 'Uh-uh.  Time to get fancy.  Trying a wrapper...'; \
4796         $wrapper <testcpp.c >testcpp.out 2>&1; \
4797         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
4798         x_cpp="$wrapper"
4799         x_minus=''
4800         echo "Eureka!"
4801 else
4802         dflt=''
4803         rp="No dice.  I can't find a C preprocessor.  Name one:"
4804         . ./myread
4805         x_cpp="$ans"
4806         x_minus=''
4807         $x_cpp <testcpp.c >testcpp.out 2>&1
4808         if $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
4809                 echo "OK, that will do." >&4
4810         else
4811 echo "Sorry, I can't get that to work.  Go find one and rerun Configure." >&4
4812                 exit 1
4813         fi
4814 fi
4815
4816 case "$ok" in
4817 false)
4818         cppstdin="$x_cpp"
4819         cppminus="$x_minus"
4820         cpprun="$x_cpp"
4821         cpplast="$x_minus"
4822         set X $x_cpp
4823         shift
4824         case "$1" in
4825         "$cpp")
4826                 echo "Perhaps can we force $cc -E using a wrapper..."
4827                 if $wrapper <testcpp.c >testcpp.out 2>&1; \
4828                         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1
4829                 then
4830                         echo "Yup, we can."
4831                         cppstdin="$wrapper"
4832                         cppminus='';
4833                 else
4834                         echo "Nope, we'll have to live without it..."
4835                 fi
4836                 ;;
4837         esac
4838         case "$cpprun" in
4839         "$wrapper")
4840                 cpprun=''
4841                 cpplast=''
4842                 ;;
4843         esac
4844         ;;
4845 esac
4846
4847 case "$cppstdin" in
4848 "$wrapper"|'cppstdin') ;;
4849 *) $rm -f $wrapper;;
4850 esac
4851 $rm -f testcpp.c testcpp.out
4852
4853 : Adjust cppfilter for path component separator
4854 case "$osname" in
4855 vos) cppfilter="tr '\\\\>' '/' |" ;; # path component separator is >
4856 os2) cppfilter="sed -e 's|\\\\\\\\|/|g' |" ;; # path component separator is \
4857 *)   cppfilter='' ;;
4858 esac
4859
4860 : Use gcc to determine libpth and incpth
4861 # If using gcc or clang, we can get better values for libpth, incpth
4862 # and usrinc directly from the compiler.
4863 # Note that ccname for clang is also gcc.
4864 case "$ccname" in
4865     gcc)
4866         $echo 'extern int foo;' > try.c
4867         set X `$cppstdin -v try.c 2>&1 | $awk '/^#include </,/^End of search /'|$cppfilter $grep '/include'`
4868         shift
4869         if $test $# -gt 0; then
4870             incpth="$incpth $*"
4871             incpth="`$echo $incpth|$sed 's/^ //'`"
4872             for i in $*; do
4873                 j="`$echo $i|$sed 's,/include$,/lib,'`"
4874                 if $test -d $j; then
4875                     libpth="$libpth $j"
4876                 fi
4877             done
4878             libpth="`$echo $libpth|$sed 's/^ //'`"
4879             for xxx in $libpth $loclibpth $plibpth $glibpth; do
4880                 if $test -d $xxx; then
4881                     case " $libpth " in
4882                     *" $xxx "*) ;;
4883                     *) libpth="$libpth $xxx";;
4884                     esac
4885                 fi
4886             done
4887         fi
4888         $rm -f try.c
4889         case "$usrinc" in
4890         '') for i in $incpth; do
4891                 if $test -f $i/errno.h -a -f $i/stdio.h -a -f $i/time.h; then
4892                     usrinc="$i"
4893                     break
4894                 fi
4895             done
4896             ;;
4897         esac
4898
4899         case "$usecrosscompile" in
4900         $define|true|[yY]*)
4901             case "$incpth" in
4902                 '') echo "Incpth not defined." >&4; croak=y ;;
4903                 *)  echo "Using incpth '$incpth'." >&4 ;;
4904             esac
4905             case "$libpth" in
4906                 '') echo "Libpth not defined." >&4; croak=y ;;
4907                 *)  echo "Using libpth '$libpth'." >&4 ;;
4908             esac
4909             case "$usrinc" in
4910                 '') echo "Usrinc not defined." >&4; croak=y ;;
4911                 *)  echo "Using usrinc $usrinc." >&4 ;;
4912             esac
4913             case "$croak" in
4914                 y)
4915                 if test "X$sysroot" = X; then
4916                     echo "Cannot continue, aborting." >&4; exit 1
4917                 else
4918                     echo "Cross-compiling using sysroot $sysroot, failing to guess inc/lib paths is not fatal" >&4
4919                 fi
4920                 ;;
4921             esac
4922             ;;
4923         esac
4924     ;;
4925 esac
4926
4927 : Default value for incpth is just usrinc
4928 case "$incpth" in
4929 '') incpth="$usrinc";;
4930 esac
4931
4932 : Set private lib path
4933 case "$plibpth" in
4934 '') if ./mips; then
4935         plibpth="$incpath/usr/lib $sysroot/usr/local/lib $sysroot/usr/ccs/lib"
4936     fi;;
4937 esac
4938 case "$libpth" in
4939 ' ') dlist='';;
4940 '') dlist="$loclibpth $plibpth $glibpth";;
4941 *) dlist="$libpth";;
4942 esac
4943
4944 : Now check and see which directories actually exist, avoiding duplicates
4945 for xxx in $dlist
4946 do
4947     if $test -d $xxx; then
4948                 case " $libpth " in
4949                 *" $xxx "*) ;;
4950                 *) libpth="$libpth $xxx";;
4951                 esac
4952     fi
4953 done
4954 $cat <<'EOM'
4955
4956 Some systems have incompatible or broken versions of libraries.  Among
4957 the directories listed in the question below, please remove any you
4958 know not to be holding relevant libraries, and add any that are needed.
4959 Say "none" for none.
4960
4961 EOM
4962
4963 if test "X$sysroot" != X; then
4964     $cat <<EOM
4965 You have set sysroot to $sysroot, please supply the directories excluding sysroot
4966
4967 EOM
4968 fi
4969
4970 case "$libpth" in
4971 '') dflt='none';;
4972 *)
4973         set X $libpth
4974         shift
4975         dflt=${1+"$@"}
4976         ;;
4977 esac
4978 rp="Directories to use for library searches?"
4979 . ./myread
4980 case "$ans" in
4981 none) libpth=' ';;
4982 *) libpth="$ans";;
4983 esac
4984
4985 : compute shared library extension
4986 case "$so" in
4987 '')
4988         if xxx=`./loc libc.sl X $libpth`; $test -f "$xxx"; then
4989                 dflt='sl'
4990         else
4991                 dflt='so'
4992         fi
4993         ;;
4994 *) dflt="$so";;
4995 esac
4996 $cat <<EOM
4997
4998 On some systems, shared libraries may be available.  Answer 'none' if
4999 you want to suppress searching of shared libraries for the remainder
5000 of this configuration.
5001
5002 EOM
5003 rp='What is the file extension used for shared libraries?'
5004 . ./myread
5005 so="$ans"
5006
5007 : Does target system insist that shared library basenames are unique
5008 $cat << EOM
5009
5010 Some dynamic loaders assume that the *basename* of shared library filenames
5011 are globally unique.  We'll default this to undef as we assume your system
5012 is not this weird. Set to defined if you're on one of them.
5013
5014 EOM
5015
5016 dflt='n'
5017 rp='Make shared library basenames unique?'
5018 . ./myread
5019 case "$ans" in
5020 y|Y) val="$define" ;;
5021 *)   val="$undef"  ;;
5022 esac
5023 set d_libname_unique
5024 eval $setvar
5025
5026 : Define several unixisms.
5027 : Hints files or command line option can be used to override them.
5028 : The convoluted testing is in case hints files set either the old
5029 : or the new name.
5030 case "$_exe" in
5031 '')     case "$exe_ext" in
5032         '')     ;;
5033         *)      _exe="$exe_ext" ;;
5034         esac
5035         ;;
5036 esac
5037 case "$_a" in
5038 '')     case "$lib_ext" in
5039     '') _a='.a';;
5040         *)      _a="$lib_ext" ;;
5041         esac
5042         ;;
5043 esac
5044 case "$_o" in
5045 '') case "$obj_ext" in
5046         '')     _o='.o';;
5047         *)      _o="$obj_ext";;
5048         esac
5049         ;;
5050 esac
5051 case "$p_" in
5052 '') case "$path_sep" in
5053         '')     p_=':';;
5054         *)      p_="$path_sep";;
5055         esac
5056         ;;
5057 esac
5058 exe_ext=$_exe
5059 lib_ext=$_a
5060 obj_ext=$_o
5061 path_sep=$p_
5062
5063 rm_try="$rm -f try try$_exe a.out .out try.[cho] try.$_o core core.try* try.core*"
5064
5065 : Which makefile gets called first.  This is used by make depend.
5066 case "$firstmakefile" in
5067 '') firstmakefile='makefile';;
5068 esac
5069
5070 : Check is we will use socks
5071 case "$usesocks" in
5072 $define|true|[yY]*)     dflt='y';;
5073 *) dflt='n';;
5074 esac
5075 cat <<EOM
5076
5077 Perl can be built to use the SOCKS proxy protocol library.  To do so,
5078 Configure must be run with -Dusesocks.  If you use SOCKS you also need
5079 to use the PerlIO abstraction layer, this will be implicitly selected.
5080
5081 If this doesn't make any sense to you, just accept the default '$dflt'.
5082 EOM
5083 rp='Build Perl for SOCKS?'
5084 . ./myread
5085 case "$ans" in
5086 y|Y)    val="$define" ;;
5087 *)      val="$undef" ;;
5088 esac
5089 set usesocks
5090 eval $setvar
5091
5092 : Check for uselongdouble support
5093 case "$ccflags" in
5094 *-DUSE_LONG_DOUBLE*|*-DUSE_MORE_BITS*) uselongdouble="$define" ;;
5095 esac
5096
5097 case "$uselongdouble" in
5098 $define|true|[yY]*)     dflt='y';;
5099 *) dflt='n';;
5100 esac
5101 cat <<EOM
5102
5103 Perl can be built to take advantage of long doubles which
5104 (if available) may give more accuracy and range for floating point numbers.
5105
5106 If this doesn't make any sense to you, just accept the default '$dflt'.
5107 EOM
5108 rp='Try to use long doubles if available?'
5109 . ./myread
5110 case "$ans" in
5111 y|Y)    val="$define"   ;;
5112 *)      val="$undef"    ;;
5113 esac
5114 set uselongdouble
5115 eval $setvar
5116
5117 case "$uselongdouble" in
5118 true|[yY]*) uselongdouble="$define" ;;
5119 esac
5120
5121 : Look for a hint-file generated 'call-back-unit'.  If the
5122 : user has specified that long doubles should be used,
5123 : we may need to set or change some other defaults.
5124 if $test -f uselongdouble.cbu; then
5125     echo "Your platform has some specific hints regarding long doubles, using them..."
5126     . ./uselongdouble.cbu
5127 else
5128     case "$uselongdouble" in
5129         $define)
5130                 $cat <<EOM
5131 (Your platform does not have any specific hints for long doubles.)
5132 EOM
5133         ;;
5134     esac
5135 fi
5136
5137 : Check if quadmath is requested
5138 case "$usequadmath" in
5139 "$define"|true|[yY]*) usequadmath="$define" ;;
5140 *)                    usequadmath="$undef"  ;;
5141 esac
5142
5143 : Fail if both uselongdouble and usequadmath are requested
5144 case "$usequadmath:$uselongdouble" in
5145 define:define)
5146         $cat <<EOM >&4
5147
5148 *** You requested the use of the quadmath library and use
5149 *** of long doubles.
5150 ***
5151 *** Please select one or the other.
5152 EOM
5153         exit 1
5154         ;;
5155 esac
5156
5157 : Looking for optional libraries
5158 echo " "
5159 echo "Checking for optional libraries..." >&4
5160 case "$libs" in
5161 ' '|'') dflt='';;
5162 *) dflt="$libs";;
5163 esac
5164 case "$libswanted" in
5165 '') libswanted='c_s';;
5166 esac
5167 case "$usesocks" in
5168 "$define") libswanted="$libswanted socks5 socks5_sh" ;;
5169 esac
5170 case "$usecbacktrace" in
5171 "$define") libswanted="$libswanted bfd" ;;
5172 esac
5173 case "$usequadmath" in
5174 "$define") libswanted="$libswanted quadmath" ;;
5175 esac
5176 libsfound=''
5177 libsfiles=''
5178 libsdirs=''
5179 libspath=''
5180 for thisdir in $libpth $xlibpth; do
5181   test -d $thisdir && libspath="$libspath $thisdir"
5182 done
5183 for thislib in $libswanted; do
5184         for thisdir in $libspath; do
5185             xxx=''
5186             if $test ! -f "$xxx" -a "X$ignore_versioned_solibs" = "X"; then
5187                 xxx=`ls $thisdir/lib$thislib.$so.[0-9] 2>/dev/null|sed -n '$p'`
5188                 $test -f "$xxx" && eval $libscheck
5189                 $test -f "$xxx" && libstyle=shared
5190                 xxx=`ls $thisdir/lib$thislib.[0-9].$so 2>/dev/null|sed -n '$p'`
5191                 $test -f "$xxx" && eval $libscheck
5192                 $test -f "$xxx" && libstyle=shared
5193             fi
5194             if test ! -f "$xxx"; then
5195                 xxx=$thisdir/lib$thislib.$so
5196                 $test -f "$xxx" && eval $libscheck
5197                 $test -f "$xxx" && libstyle=shared
5198             fi
5199             if test ! -f "$xxx"; then
5200                 xxx=$thisdir/lib$thislib$_a
5201                 $test -f "$xxx" && eval $libscheck
5202                 $test -f "$xxx" && libstyle=static
5203             fi
5204             if test ! -f "$xxx"; then
5205                 xxx=$thisdir/$thislib$_a
5206                 $test -f "$xxx" && eval $libscheck
5207                 $test -f "$xxx" && libstyle=static
5208             fi
5209             if test ! -f "$xxx"; then
5210                 xxx=$thisdir/lib${thislib}_s$_a
5211                 $test -f "$xxx" && eval $libscheck
5212                 $test -f "$xxx" && libstyle=static
5213                 $test -f "$xxx" && thislib=${thislib}_s
5214             fi
5215             if test ! -f "$xxx"; then
5216                 xxx=$thisdir/Slib$thislib$_a
5217                 $test -f "$xxx" && eval $libscheck
5218                 $test -f "$xxx" && libstyle=static
5219             fi
5220             if $test -f "$xxx"; then
5221                 case "$libstyle" in
5222                 shared) echo "Found -l$thislib (shared)." ;;
5223                 static) echo "Found -l$thislib." ;;
5224                 *)      echo "Found -l$thislib ($libstyle)." ;;
5225                 esac
5226                 case " $dflt " in
5227                 *"-l$thislib "*);;
5228                 *) dflt="$dflt -l$thislib"
5229                    libsfound="$libsfound $xxx"
5230                    yyy=`basename $xxx`
5231                    libsfiles="$libsfiles $yyy"
5232                    yyy=`echo $xxx|$sed -e "s%/$yyy\\$%%"`
5233                    case " $libsdirs " in
5234                    *" $yyy "*) ;;
5235                    *) libsdirs="$libsdirs $yyy" ;;
5236                    esac
5237                    ;;
5238                 esac
5239                 break
5240             fi
5241         done
5242         if $test ! -f "$xxx"; then
5243             echo "No -l$thislib."
5244         fi
5245 done
5246 set X $dflt
5247 shift
5248 dflt="$*"
5249 case "$libs" in
5250 '') dflt="$dflt";;
5251 *) dflt="$libs";;
5252 esac
5253 case "$dflt" in
5254 ' '|'') dflt='none';;
5255 esac
5256
5257 $cat <<EOM
5258
5259 In order to compile $package on your machine, a number of libraries
5260 are usually needed.  Include any other special libraries here as well.
5261 Say "none" for none.  The default list is almost always right.
5262 EOM
5263
5264 echo " "
5265 rp="What libraries to use?"
5266 . ./myread
5267 case "$ans" in
5268 none) libs=' ';;
5269 *) libs="$ans";;
5270 esac
5271
5272 : determine optimization, if desired, or use for debug flag also
5273 case "$optimize" in
5274 ' '|$undef) dflt='none';;
5275 '') dflt='-O';;
5276 *) dflt="$optimize";;
5277 esac
5278 $cat <<EOH
5279
5280 By default, $package compiles with the -O flag to use the optimizer.
5281 Alternately, you might want to use the symbolic debugger, which uses
5282 the -g flag (on traditional Unix systems).  Either flag can be
5283 specified here.  To use neither flag, specify the word "none".
5284
5285 EOH
5286 rp="What optimizer/debugger flag should be used?"
5287 . ./myread
5288 optimize="$ans"
5289 case "$optimize" in
5290 'none') optimize=" ";;
5291 esac
5292
5293 : Check what DEBUGGING is required from the command line
5294 : -DEBUGGING      or -DDEBUGGING or
5295 : -DEBUGGING=both                       = -g + -DDEBUGGING
5296 : -DEBUGGING=-g   or -Doptimize=-g      = -g
5297 : -DEBUGGING=none or -UDEBUGGING        =
5298 : -DEBUGGING=old  or -DEBUGGING=default = ? $optimize
5299 case "$EBUGGING" in
5300 '')     ;;
5301 *)      DEBUGGING=$EBUGGING ;;
5302 esac
5303
5304 case "$DEBUGGING" in
5305 -g|both|$define)
5306     case "$optimize" in
5307         *-g*) ;;
5308         *)    optimize="$optimize -g" ;;
5309     esac ;;
5310 none|$undef)
5311     case "$optimize" in
5312         *-g*)   set `echo "X $optimize " | sed 's/ -g / /'`
5313                 shift
5314                 optimize="$*"
5315                 ;;
5316     esac ;;
5317 esac
5318
5319 dflt=''
5320 case "$DEBUGGING" in
5321 both|$define) dflt='-DDEBUGGING'
5322 esac
5323
5324 : argument order is deliberate, as the flag will start with - which set could
5325 : think is an option
5326 checkccflag='check=$1; flag=$2; callback=$3;
5327 echo " ";
5328 echo "Checking if your compiler accepts $flag" 2>&1;
5329 [ "X$sysroot" != "X" ] && echo "For sysroot = $sysroot";
5330 echo "int main(void) { return 0; }" > gcctest.c;
5331 if $cc $_sysroot -O2 $flag -o gcctest gcctest.c 2>gcctest.out && $run ./gcctest; then
5332     echo "Yes, it does." 2>&1;
5333     if $test -s gcctest.out ; then
5334         echo "But your platform does not like it:";
5335         cat gcctest.out;
5336     else
5337         case "$ccflags" in
5338         *$check*)
5339             echo "Leaving current flags $ccflags alone." 2>&1
5340             ;;
5341         *) dflt="$dflt $flag";
5342             eval $callback
5343             ;;
5344         esac
5345     fi
5346 else
5347     echo "Nope, it does not, but that is ok." 2>&1;
5348 fi
5349 '
5350
5351 : We will not override a previous value, but we might want to
5352 : augment a hint file
5353 case "$hint" in
5354 default|recommended)
5355         case "$gccversion" in
5356         1.*) dflt="$dflt -fpcc-struct-return" ;;
5357         esac
5358         case "$optimize:$DEBUGGING" in
5359         *-g*:old) dflt="$dflt -DDEBUGGING";;
5360         esac
5361         case "$gccversion" in
5362         2.*) if $test -d /etc/conf/kconfig.d &&
5363                         $contains _POSIX_VERSION $usrinc/sys/unistd.h >/dev/null 2>&1
5364                 then
5365                         # Interactive Systems (ISC) POSIX mode.
5366                         dflt="$dflt -posix"
5367                 fi
5368                 ;;
5369         esac
5370         case "$gccversion" in
5371         1.*) ;;
5372         2.[0-8]*) ;;
5373         ?*)     set strict-aliasing -fno-strict-aliasing
5374                 eval $checkccflag
5375                 ;;
5376         esac
5377         # For gcc, adding -pipe speeds up compilations for some, but apparently
5378         # some assemblers can't read from stdin.  (It also slows down compilations
5379         # in other cases, but those are apparently rarer these days.)  AD 5/2004.
5380         case "$gccversion" in
5381         ?*)     set pipe -pipe
5382                 eval $checkccflag
5383                 ;;
5384         esac
5385
5386         # on x86_64 (at least) we require an extra library (libssp) in the
5387         # link command line. This library is not named, so I infer that it is
5388         # an implementation detail that may change. Hence the safest approach
5389         # is to add the flag to the flags passed to the compiler at link time,
5390         # as that way the compiler can do the right implementation dependant
5391         # thing. (NWC)
5392         case "$ccflags" in
5393         *-fno-stack-protector*)
5394             echo "Do not add -fstack-protector nor -fstack-protector-strong" 2>&1
5395             ;;
5396         *) case "$gccversion" in
5397            ?*)  set stack-protector-strong -fstack-protector-strong
5398                 eval $checkccflag
5399                 case "$dflt" in
5400                 *-fstack-protector-strong*) ;; # It got added.
5401                 *) # Try the plain/older -fstack-protector.
5402                    set stack-protector -fstack-protector
5403                    eval $checkccflag
5404                    ;;
5405                 esac
5406                 ;;
5407             esac
5408             ;;
5409         esac
5410 esac
5411
5412 case "$mips_type" in
5413 *BSD*|'') inclwanted="$locincpth $usrinc";;
5414 *) inclwanted="$locincpth $inclwanted $usrinc/bsd";;
5415 esac
5416 for thisincl in $inclwanted; do
5417         if $test -d $thisincl; then
5418                 if $test x$thisincl != x$usrinc; then
5419                         case "$dflt" in
5420                         *" -I$thisincl "*);;
5421                         *) dflt="$dflt -I$thisincl ";;
5422                         esac
5423                 fi
5424         fi
5425 done
5426
5427 inctest='if $contains $2 $usrinc/$1 >/dev/null 2>&1; then
5428         xxx=true;
5429 elif $contains $2 $usrinc/sys/$1 >/dev/null 2>&1; then
5430         xxx=true;
5431 else
5432         xxx=false;
5433 fi;
5434 if $xxx; then
5435         case "$dflt" in
5436         *$2*);;
5437         *) dflt="$dflt -D$2";;
5438         esac;
5439 fi'
5440
5441 set signal.h LANGUAGE_C; eval $inctest
5442
5443 case "$usesocks" in
5444 $define)
5445         ccflags="$ccflags -DSOCKS"
5446         ;;
5447 esac
5448
5449 case "$hint" in
5450 default|recommended) dflt="$ccflags $dflt" ;;
5451 *) dflt="$ccflags";;
5452 esac
5453
5454 case "$dflt" in
5455 ''|' ') dflt=none;;
5456 esac
5457
5458 $cat <<EOH
5459
5460 Your C compiler may want other flags.  For this question you should include
5461 -I/whatever and -DWHATEVER flags and any other flags used by the C compiler,
5462 but you should NOT include libraries or ld flags like -lwhatever.  If you
5463 want $package to honor its debug switch, you should include -DDEBUGGING here.
5464 Your C compiler might also need additional flags, such as -D_POSIX_SOURCE.
5465
5466 To use no flags, specify the word "none".
5467
5468 EOH
5469 set X $dflt
5470 shift
5471 dflt=${1+"$@"}
5472 rp="Any additional cc flags?"
5473 . ./myread
5474 case "$ans" in
5475 none) ccflags='';;
5476 *) ccflags="$ans";;
5477 esac
5478
5479 : the following weeds options from ccflags that are of no interest to cpp
5480 case "$cppflags" in
5481 '') cppflags="$ccflags" ;;
5482 *)  set X $ccflags; shift
5483     case " $cppflags " in
5484     *" $1 "*) ;;  # Try to avoid doubling the cppflags.
5485     *) cppflags="$cppflags $ccflags" ;;
5486     esac
5487     ;;
5488 esac
5489 case "$gccversion" in
5490 1.*) cppflags="$cppflags -D__GNUC__"
5491 esac
5492 case "$mips_type" in
5493 '');;
5494 *BSD*) cppflags="$cppflags -DSYSTYPE_BSD43";;
5495 esac
5496 case "$cppflags" in
5497 '');;
5498 *)
5499         echo " "
5500         echo "Let me guess what the preprocessor flags are..." >&4
5501         set X $cppflags
5502         shift
5503         cppflags=''
5504         $cat >cpp.c <<'EOM'
5505 #define BLURFL foo
5506
5507 BLURFL xx LFRULB
5508 EOM
5509         previous=''
5510         for flag in $*
5511         do
5512                 case "$flag" in
5513                 -*) ftry="$flag";;
5514                 *) ftry="$previous $flag";;
5515                 esac
5516                 if $cppstdin -DLFRULB=bar $cppflags $ftry $cppminus <cpp.c \
5517                         >cpp1.out 2>/dev/null && \
5518                         $cpprun -DLFRULB=bar $cppflags $ftry $cpplast <cpp.c \
5519                         >cpp2.out 2>/dev/null && \
5520                         $contains 'foo.*xx.*bar' cpp1.out >/dev/null 2>&1 && \
5521                         $contains 'foo.*xx.*bar' cpp2.out >/dev/null 2>&1
5522                 then
5523                         cppflags="$cppflags $ftry"
5524                         previous=''
5525                 else
5526                         previous="$flag"
5527                 fi
5528         done
5529         set X $cppflags
5530         shift
5531         cppflags=${1+"$@"}
5532         case "$cppflags" in
5533         *-*)  echo "They appear to be: $cppflags";;
5534         esac
5535         $rm -f cpp.c cpp?.out
5536         ;;
5537 esac
5538
5539 : flags used in final linking phase
5540 case "$ldflags" in
5541 '') if ./venix; then
5542                 dflt='-i -z'
5543         else
5544                 dflt=''
5545         fi
5546         case "$ccflags" in
5547         *-posix*) dflt="$dflt -posix" ;;
5548         esac
5549         ;;
5550 *) dflt="$ldflags";;
5551 esac
5552 # See note above about -fstack-protector
5553 case "$ccflags" in
5554 *-fstack-protector-strong*)
5555         case "$dflt" in
5556         *-fstack-protector-strong*) ;; # Don't add it again
5557         *) dflt="$dflt -fstack-protector-strong" ;;
5558         esac
5559         ;;
5560 *-fstack-protector*)
5561         case "$dflt" in
5562         *-fstack-protector*) ;; # Don't add it again
5563         *) dflt="$dflt -fstack-protector" ;;
5564         esac
5565         ;;
5566 esac
5567
5568 : Try to guess additional flags to pick up local libraries.
5569 for thislibdir in $libpth; do
5570         case " $loclibpth " in
5571         *" $thislibdir "*)
5572                 case "$dflt " in
5573                 *"-L$thislibdir "*) ;;
5574                 *)  dflt="$dflt -L$thislibdir" ;;
5575                 esac
5576                 ;;
5577         esac
5578 done
5579
5580 case "$dflt" in
5581 '') dflt='none' ;;
5582 esac
5583
5584 $cat <<EOH
5585
5586 Your C linker may need flags.  For this question you should
5587 include -L/whatever and any other flags used by the C linker, but you
5588 should NOT include libraries like -lwhatever.
5589
5590 Make sure you include the appropriate -L/path flags if your C linker
5591 does not normally search all of the directories you specified above,
5592 namely
5593         $libpth
5594 To use no flags, specify the word "none".
5595
5596 EOH
5597
5598 rp="Any additional ld flags (NOT including libraries)?"
5599 . ./myread
5600 case "$ans" in
5601 none) ldflags='';;
5602 *) ldflags="$ans";;
5603 esac
5604 rmlist="$rmlist pdp11"
5605
5606 : coherency check
5607 echo " "
5608 echo "Checking your choice of C compiler and flags for coherency..." >&4
5609 $cat > try.c <<'EOF'
5610 #include <stdio.h>
5611 int main() { printf("Ok\n"); return(0); }
5612 EOF
5613 set X $cc -o try $optimize $ccflags $ldflags try.c $libs
5614 shift
5615 $cat >try.msg <<'EOM'
5616 I've tried to compile and run the following simple program:
5617
5618 EOM
5619 $cat try.c >> try.msg
5620
5621 $cat >> try.msg <<EOM
5622
5623 I used the command:
5624
5625         $*
5626         $run ./try
5627
5628 and I got the following output:
5629
5630 EOM
5631 dflt=y
5632 if $sh -c "$cc -o try $optimize $ccflags $ldflags try.c $libs" >>try.msg 2>&1; then
5633         if $sh -c "$run ./try " >>try.msg 2>&1; then
5634                 xxx=`$run ./try`
5635                 case "$xxx" in
5636                 "Ok") dflt=n ;;
5637                 *)    echo 'The program compiled OK, but produced no output.' >> try.msg ;;
5638                 esac
5639         else
5640                 echo "The program compiled OK, but exited with status $?." >>try.msg
5641                 rp="You have a problem.  Shall I abort Configure"
5642                 dflt=y
5643         fi
5644 else
5645         echo "I can't compile the test program." >>try.msg
5646         rp="You have a BIG problem.  Shall I abort Configure"
5647         dflt=y
5648 fi
5649 case "$dflt" in
5650 y)
5651         $cat try.msg >&4
5652         case "$knowitall" in
5653         '')
5654                 echo "(The supplied flags or libraries might be incorrect.)"
5655                 ;;
5656         *) dflt=n;;
5657         esac
5658         echo " "
5659         . ./myread
5660         case "$ans" in
5661         n*|N*) ;;
5662         *)      echo "Ok.  Stopping Configure." >&4
5663                 exit 1
5664                 ;;
5665         esac
5666         ;;
5667 n) echo "OK, that should do.";;
5668 esac
5669 $rm_try gcctest gcctest.out
5670
5671 : define a shorthand compile call
5672 compile='
5673 mc_file=$1;
5674 shift;
5675 case "$usedevel" in $define|true|[yY]*) if $test ! -f "${mc_file}.c"; then
5676 echo "Internal Configure script bug - compiler test file ${mc_file}.c is missing. Please report this to https://github.com/Perl/perl5/issues" >&4;
5677 exit 1;
5678 fi;
5679 esac;
5680 $cc -o ${mc_file} $optimize $ccflags $ldflags $* ${mc_file}.c $libs > /dev/null 2>&1;'
5681 : define a shorthand compile call for compilations that should be ok.
5682 compile_ok='
5683 mc_file=$1;
5684 shift;
5685 $cc -o ${mc_file} $optimize $ccflags $ldflags $* ${mc_file}.c $libs > /dev/null 2>&1;'
5686
5687 : stub, used only to satisfy other units
5688 i_stdlib='define'
5689
5690 : check for lengths of integral types
5691 echo " "
5692 case "$intsize" in
5693 '')
5694         echo "Checking to see how big your integers are..." >&4
5695         $cat >try.c <<EOCP
5696 #include <stdio.h>
5697 #$i_stdlib I_STDLIB
5698 #ifdef I_STDLIB
5699 #include <stdlib.h>
5700 #endif
5701 int main()
5702 {
5703         printf("intsize=%d;\n", (int)sizeof(int));
5704         printf("longsize=%d;\n", (int)sizeof(long));
5705         printf("shortsize=%d;\n", (int)sizeof(short));
5706         exit(0);
5707 }
5708 EOCP
5709         set try
5710         if eval $compile_ok && $run ./try > /dev/null; then
5711                 eval `$run ./try`
5712                 echo "Your integers are $intsize bytes long."
5713                 echo "Your long integers are $longsize bytes long."
5714                 echo "Your short integers are $shortsize bytes long."
5715         else
5716                 $cat >&4 <<EOM
5717 !
5718 Help! I can't compile and run the intsize test program: please enlighten me!
5719 (This is probably a misconfiguration in your system or libraries, and
5720 you really ought to fix it.  Still, I'll try anyway.)
5721 !
5722 EOM
5723                 dflt=4
5724                 rp="What is the size of an integer (in bytes)?"
5725                 . ./myread
5726                 intsize="$ans"
5727                 dflt=$intsize
5728                 rp="What is the size of a long integer (in bytes)?"
5729                 . ./myread
5730                 longsize="$ans"
5731                 dflt=2
5732                 rp="What is the size of a short integer (in bytes)?"
5733                 . ./myread
5734                 shortsize="$ans"
5735         fi
5736         ;;
5737 esac
5738 $rm_try
5739
5740 : check for long long
5741 echo " "
5742 echo "Checking to see if you have long long..." >&4
5743 echo 'int main() { long long x = 7; return 0; }' > try.c
5744 set try
5745 if eval $compile; then
5746         val="$define"
5747         echo "You have long long."
5748 else
5749         val="$undef"
5750         echo "You do not have long long."
5751 fi
5752 $rm_try
5753 set d_longlong
5754 eval $setvar
5755
5756 : check for length of long long
5757 case "${d_longlong}${longlongsize}" in
5758 $define)
5759         echo " "
5760         echo "Checking to see how big your long longs are..." >&4
5761         $cat >try.c <<'EOCP'
5762 #include <stdio.h>
5763 int main()
5764 {
5765     printf("%d\n", (int)sizeof(long long));
5766     return(0);
5767 }
5768 EOCP
5769         set try
5770         if eval $compile_ok; then
5771                 longlongsize=`$run ./try`
5772                 echo "Your long longs are $longlongsize bytes long."
5773         else
5774                 dflt='8'
5775                 echo " "
5776                 echo "(I can't seem to compile the test program.  Guessing...)"
5777                 rp="What is the size of a long long (in bytes)?"
5778                 . ./myread
5779                 longlongsize="$ans"
5780         fi
5781         if $test "X$longsize" = "X$longlongsize"; then
5782                 echo "(That isn't any different from an ordinary long.)"
5783         fi
5784         ;;
5785 esac
5786 $rm_try
5787
5788 : determine filename position in cpp output
5789 echo " "
5790 echo "Computing filename position in cpp output for #include directives..." >&4
5791 case "$osname" in
5792 amigaos) fieldn=3 ;;  # Workaround for a bug in abc (pdksh).
5793 esac
5794 case "$fieldn" in
5795 '')
5796 case "$osname" in
5797 vos) testaccess=-e ;;
5798 *)   testaccess=-r ;;
5799 esac
5800 echo '#include <stdio.h>' > foo.c
5801 $cat >fieldn <<EOF
5802 $startsh
5803 $cppstdin $cppflags $cppminus <foo.c 2>/dev/null | \
5804 $grep '^[       ]*#.*stdio\.h' | \
5805 while read cline; do
5806         pos=1
5807         set \$cline
5808         while $test \$# -gt 0; do
5809                 if $test $testaccess \`echo \$1 | $tr -d '"'\`; then
5810                         echo "\$pos"
5811                         exit 0
5812                 fi
5813                 shift
5814                 pos=\`expr \$pos + 1\`
5815         done
5816 done
5817 EOF
5818 chmod +x fieldn
5819 fieldn=`./fieldn`
5820 $rm -f foo.c fieldn
5821 ;;
5822 esac
5823 case $fieldn in
5824 '') pos='???';;
5825 1) pos=first;;
5826 2) pos=second;;
5827 3) pos=third;;
5828 *) pos="${fieldn}th";;
5829 esac
5830 echo "Your cpp writes the filename in the $pos field of the line."
5831
5832 : locate header file
5833 $cat >findhdr <<EOF
5834 $startsh
5835 wanted=\$1
5836 name=''
5837 for usrincdir in $incpth
5838 do
5839         if test -f \$usrincdir/\$wanted;&n