This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Better to have the list of extras in $extras than 'define'.
[perl5.git] / Configure
CommitLineData
2304df62
AD
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. Rather than
15# working with this copy of Configure, you may wish to get metaconfig.
16# The dist-3.0 package (which contains metaconfig) was posted in
dfe9444c
AD
17# comp.sources.misc and is available on CPAN under authors/id/RAM so
18# you may fetch it yourself from your nearest archive site.)
2304df62
AD
19#
20
dfe9444c 21# $Id: Head.U,v 3.0.1.9 1997/02/28 15:02:09 ram Exp $
2304df62 22#
2aabf906 23# Generated on Mon Jul 30 05:36:10 EET DST 2001 [metaconfig 3.0 PL70]
7f2de2d2 24# (with additional metaconfig patches by perlbug@perl.org)
2304df62 25
283fdd21 26cat >c1$$ <<EOF
2304df62
AD
27ARGGGHHHH!!!!!
28
29SCO csh still thinks true is false. Write to SCO today and tell them that next
30year Configure ought to "rm /bin/csh" unless they fix their blasted shell. :-)
31
32(Actually, Configure ought to just patch csh in place. Hmm. Hmmmmm. All
33we'd have to do is go in and swap the && and || tokens, wherever they are.)
34
35[End of diatribe. We now return you to your regularly scheduled programming...]
36EOF
283fdd21 37cat >c2$$ <<EOF
2304df62
AD
38
39OOPS! You naughty creature! You didn't run Configure with sh!
40I will attempt to remedy the situation by running sh for you...
41EOF
42
283fdd21 43true || cat c1$$ c2$$
2304df62
AD
44true || exec sh $0 $argv:q
45
283fdd21 46(exit $?0) || cat c2$$
2304df62 47(exit $?0) || exec sh $0 $argv:q
283fdd21 48rm -f c1$$ c2$$
2304df62 49
a0d0e21e
LW
50: compute my invocation name
51me=$0
52case "$0" in
53*/*)
54 me=`echo $0 | sed -e 's!.*/\(.*\)!\1!' 2>/dev/null`
55 test "$me" || me=$0
56 ;;
57esac
58
dfe9444c 59: Proper separator for the PATH environment variable
8e07c86e
AD
60p_=:
61: On OS/2 this directory should exist if this is not floppy only system :-]
dfe9444c
AD
62if test -d c:/. ; then
63 if test -n "$OS2_SHELL"; then
64 p_=\;
65 PATH=`cmd /c "echo %PATH%" | tr '\\\\' / `
66 OS2_SHELL=`cmd /c "echo %OS2_SHELL%" | tr '\\\\' / | tr '[A-Z]' '[a-z]'`
c4f23d77 67 elif test -n "$DJGPP"; then
dfe9444c
AD
68 p_=\;
69 fi
39e571d4 70fi
a0d0e21e
LW
71
72: Proper PATH setting
73paths='/bin /usr/bin /usr/local/bin /usr/ucb /usr/local /usr/lbin'
16d20bd9 74paths="$paths /opt/bin /opt/local/bin /opt/local /opt/lbin"
232e078e 75paths="$paths /usr/5bin /etc /usr/gnu/bin /usr/new /usr/new/bin /usr/nbin"
16d20bd9 76paths="$paths /opt/gnu/bin /opt/new /opt/new/bin /opt/nbin"
232e078e
AD
77paths="$paths /sys5.3/bin /sys5.3/usr/bin /bsd4.3/bin /bsd4.3/usr/ucb"
78paths="$paths /bsd4.3/usr/bin /usr/bsd /bsd43/bin /usr/ccs/bin"
79paths="$paths /etc /usr/lib /usr/ucblib /lib /usr/ccs/lib"
80paths="$paths /sbin /usr/sbin /usr/libexec"
a0d0e21e
LW
81
82for p in $paths
83do
8e07c86e
AD
84 case "$p_$PATH$p_" in
85 *$p_$p$p_*) ;;
86 *) test -d $p && PATH=$PATH$p_$p ;;
a0d0e21e
LW
87 esac
88done
89
8e07c86e 90PATH=.$p_$PATH
2304df62
AD
91export PATH
92
dfe9444c
AD
93: shall we be using ksh?
94inksh=''
95needksh=''
96avoidksh=''
97newsh=/bin/ksh
98changesh=''
ff0cee69 99if (PATH=.; alias -x) >/dev/null 2>&1; then
dfe9444c
AD
100 inksh=true
101fi
102if test -f /hp-ux -a -f /bin/ksh; then
103 needksh='to avoid sh bug in "here document" expansion'
104fi
105if test -d /usr/lpp -a -f /usr/bin/bsh -a -f /usr/bin/uname; then
106 if test X`/usr/bin/uname -v` = X4; then
107 avoidksh="to avoid AIX 4's /bin/sh"
108 newsh=/usr/bin/bsh
2304df62 109 fi
dfe9444c 110fi
cf04f91f
JH
111if test -f /osf_boot -a -f /usr/sbin/setld; then
112 if test X`/usr/bin/uname -s` = XOSF1; then
113 avoidksh="to avoid Digital UNIX' ksh"
114 newsh=/bin/sh
115 unset BIN_SH # if this is 'xpg4' sh will start up ksh
116 fi
117fi
dfe9444c
AD
118case "$inksh/$needksh" in
119/[a-z]*)
c4f23d77 120 ENV=''
dfe9444c
AD
121 changesh=true
122 reason="$needksh"
123 ;;
124esac
125case "$inksh/$avoidksh" in
126true/[a-z]*)
127 changesh=true
128 reason="$avoidksh"
129 ;;
130esac
131case "$inksh/$needksh-$avoidksh-" in
132true/--)
a0d0e21e
LW
133 cat <<EOM
134(I see you are using the Korn shell. Some ksh's blow up on $me,
dfe9444c 135mainly on older exotic systems. If yours does, try the Bourne shell instead.)
ff0cee69 136EOM
dfe9444c
AD
137 ;;
138esac
139case "$changesh" in
140true)
141 echo "(Feeding myself to $newsh $reason.)"
142 case "$0" in
143 Configure|*/Configure) exec $newsh $0 "$@";;
144 *) exec $newsh Configure "$@";;
145 esac
146 ;;
147esac
2304df62 148
bfb7748a
AD
149: if needed set CDPATH to a harmless value that is not chatty
150: avoid bash 2.02 problems with empty CDPATH.
151case "$CDPATH" in
152'') ;;
153*) case "$SHELL" in
154 *bash*) CDPATH='.' ;;
155 *) CDPATH='' ;;
156 esac
157 ;;
158esac
2304df62
AD
159: Configure runs within the UU subdirectory
160test -d UU || mkdir UU
8e07c86e 161cd UU && rm -f ./*
2304df62 162
6b356c8e
JH
163ccname=''
164ccversion=''
b4eb6b3d
JH
165ccsymbols=''
166cppccsymbols=''
167cppsymbols=''
5440bc8e
JH
168from=''
169run=''
170targetarch=''
171to=''
172usecrosscompile=''
9c839522 173perllibs=''
b4eb6b3d
JH
174dynamic_ext=''
175extensions=''
176known_extensions=''
177nonxs_ext=''
178static_ext=''
179useopcode=''
180useposix=''
6fcddf3b 181extras=''
ecfc5424 182d_bsd=''
40a7a20a 183d_eunice=''
2304df62
AD
184d_xenix=''
185eunicefix=''
186Mcc=''
dfe9444c 187ar=''
2304df62
AD
188awk=''
189bash=''
190bison=''
191byacc=''
192cat=''
193chgrp=''
194chmod=''
195chown=''
ecfc5424 196comm=''
2304df62
AD
197compress=''
198cp=''
199cpio=''
200cpp=''
201csh=''
202date=''
203echo=''
204egrep=''
205emacs=''
206expr=''
207find=''
208flex=''
2304df62 209grep=''
8ff267be 210gzip=''
2304df62
AD
211inews=''
212ksh=''
213less=''
214line=''
215lint=''
216ln=''
217lp=''
218lpr=''
219ls=''
220mail=''
221mailx=''
dfe9444c 222make=''
2304df62
AD
223mkdir=''
224more=''
225mv=''
693762b4 226nm=''
2304df62
AD
227nroff=''
228perl=''
229pg=''
230pmake=''
231pr=''
232rm=''
233rmail=''
234sed=''
235sendmail=''
2304df62
AD
236shar=''
237sleep=''
238smail=''
239sort=''
240submit=''
241tail=''
242tar=''
243tbl=''
693762b4 244tee=''
2304df62
AD
245test=''
246touch=''
247tr=''
248troff=''
249uname=''
250uniq=''
251uuname=''
252vi=''
253zcat=''
8ff267be 254zip=''
b4eb6b3d
JH
255full_ar=''
256full_sed=''
a0d0e21e 257libswanted=''
2304df62
AD
258hint=''
259myuname=''
85e6fe83
LW
260osname=''
261osvers=''
2304df62
AD
262Author=''
263Date=''
264Header=''
265Id=''
266Locker=''
267Log=''
268RCSfile=''
269Revision=''
270Source=''
271State=''
dfe9444c
AD
272_a=''
273_exe=''
274_o=''
4633a7c4
LW
275archobjs=''
276exe_ext=''
277firstmakefile=''
278lib_ext=''
279obj_ext=''
280path_sep=''
b4eb6b3d 281afs=''
a6d26a0d 282afsroot=''
b4eb6b3d
JH
283alignbytes=''
284ansi2knr=''
285archlib=''
286archlibexp=''
287d_archlib=''
288installarchlib=''
289archname=''
290myarchname=''
291d_atolf=''
292d_atoll=''
293baserev=''
294bin=''
295binexp=''
296installbin=''
297bincompat5005=''
298d_bincompat5005=''
299byteorder=''
2304df62 300cc=''
2304df62
AD
301ccflags=''
302cppflags=''
303ldflags=''
304lkflags=''
8e07c86e 305locincpth=''
2304df62 306optimize=''
b4eb6b3d 307cf_email=''
2304df62
AD
308cf_by=''
309cf_time=''
b4eb6b3d 310charsize=''
2304df62 311contains=''
b4eb6b3d 312cpp_stuff=''
2304df62
AD
313cpplast=''
314cppminus=''
315cpprun=''
316cppstdin=''
74cac757 317d__fwalk=''
b4eb6b3d
JH
318d_access=''
319d_accessx=''
320d_alarm=''
321d_attribut=''
322d_bcmp=''
323d_bcopy=''
324d_bzero=''
325d_casti32=''
326castflags=''
327d_castneg=''
328d_chown=''
329d_chroot=''
330d_chsize=''
331d_closedir=''
332d_void_closedir=''
4e0554ec 333d_cmsghdr_s=''
b4eb6b3d
JH
334d_const=''
335cryptlib=''
336d_crypt=''
337d_csh=''
338full_csh=''
339d_cuserid=''
340d_dbl_dig=''
2ef53570 341d_dbminitproto=''
b4eb6b3d
JH
342d_difftime=''
343d_dlerror=''
a0d0e21e 344d_dlopen=''
b4eb6b3d
JH
345d_dlsymun=''
346d_dosuid=''
347d_suidsafe=''
348d_drand48proto=''
349d_dup2=''
350d_eaccess=''
351d_endgrent=''
352d_endhent=''
353d_endnent=''
354d_endpent=''
355d_endpwent=''
356d_endsent=''
b363b713 357d_fchdir=''
b4eb6b3d
JH
358d_fchmod=''
359d_fchown=''
360d_fcntl=''
9d9004a9 361d_fcntl_can_lock=''
b4eb6b3d
JH
362d_fd_macros=''
363d_fd_set=''
364d_fds_bits=''
365d_fgetpos=''
366d_flexfnam=''
367d_flock=''
2ef53570 368d_flockproto=''
b4eb6b3d
JH
369d_fork=''
370d_fpos64_t=''
371d_frexpl=''
372d_fs_data_s=''
373d_fseeko=''
374d_fsetpos=''
375d_fstatfs=''
411ab01c 376d_fsync=''
b4eb6b3d
JH
377d_ftello=''
378d_ftime=''
379d_gettimeod=''
380d_Gconvert=''
381d_getcwd=''
382d_getespwnam=''
383d_getfsstat=''
384d_getgrent=''
385d_getgrps=''
386d_gethbyaddr=''
387d_gethbyname=''
388d_gethent=''
389aphostname=''
390d_gethname=''
391d_phostname=''
392d_uname=''
393d_gethostprotos=''
4e0554ec 394d_getitimer=''
b4eb6b3d
JH
395d_getlogin=''
396d_getmnt=''
397d_getmntent=''
398d_getnbyaddr=''
399d_getnbyname=''
400d_getnent=''
401d_getnetprotos=''
0c0643d0 402d_getpagsz=''
b4eb6b3d
JH
403d_getpent=''
404d_getpgid=''
405d_getpgrp2=''
406d_bsdgetpgrp=''
407d_getpgrp=''
408d_getppid=''
409d_getprior=''
410d_getpbyname=''
411d_getpbynumber=''
412d_getprotoprotos=''
413d_getprpwnam=''
414d_getpwent=''
415d_getsent=''
416d_getservprotos=''
417d_getspnam=''
418d_getsbyname=''
419d_getsbyport=''
a4f3eea9 420d_gnulibc=''
b4eb6b3d
JH
421d_hasmntopt=''
422d_htonl=''
423d_iconv=''
424d_inetaton=''
425d_int64_t=''
426d_isascii=''
427d_isnan=''
428d_isnanl=''
429d_killpg=''
430d_lchown=''
431d_ldbl_dig=''
432d_link=''
433d_locconv=''
434d_lockf=''
435d_longdbl=''
436longdblsize=''
437d_longlong=''
438longlongsize=''
439d_lseekproto=''
440d_lstat=''
441d_madvise=''
442d_mblen=''
443d_mbstowcs=''
444d_mbtowc=''
445d_memchr=''
446d_memcmp=''
447d_memcpy=''
448d_memmove=''
449d_memset=''
450d_mkdir=''
451d_mkdtemp=''
452d_mkfifo=''
453d_mkstemp=''
454d_mkstemps=''
455d_mktime=''
456d_mmap=''
457mmaptype=''
458d_modfl=''
e67aeab1 459d_modfl_pow32_bug=''
b4eb6b3d
JH
460d_mprotect=''
461d_msg=''
462d_msgctl=''
463d_msgget=''
4e0554ec 464d_msghdr_s=''
b4eb6b3d
JH
465d_msgrcv=''
466d_msgsnd=''
467d_msync=''
468d_munmap=''
469d_nice=''
2765b840 470d_nl_langinfo=''
b4eb6b3d
JH
471d_off64_t=''
472d_open3=''
473d_fpathconf=''
474d_pathconf=''
475d_pause=''
476d_pipe=''
477d_poll=''
2304df62 478d_portable=''
b4eb6b3d
JH
479d_old_pthread_create_joinable=''
480old_pthread_create_joinable=''
d6483fcc 481d_pthread_atfork=''
b4eb6b3d
JH
482d_pthread_yield=''
483d_sched_yield=''
484sched_yield=''
485d_qgcvt=''
486d_readdir=''
487d_rewinddir=''
488d_seekdir=''
489d_telldir=''
490d_readlink=''
4e0554ec
JH
491d_readv=''
492d_recvmsg=''
b4eb6b3d
JH
493d_rename=''
494d_rmdir=''
495d_safebcpy=''
496d_safemcpy=''
497d_sanemcmp=''
ef9f17be 498d_sbrkproto=''
b4eb6b3d
JH
499d_select=''
500d_sem=''
501d_semctl=''
502d_semget=''
503d_semop=''
4e0554ec 504d_sendmsg=''
b4eb6b3d
JH
505d_setegid=''
506d_seteuid=''
507d_setgrent=''
508d_setgrps=''
509d_sethent=''
4e0554ec 510d_setitimer=''
b4eb6b3d
JH
511d_setlinebuf=''
512d_setlocale=''
513d_setnent=''
514d_setpent=''
515d_setpgid=''
516d_setpgrp2=''
517d_bsdsetpgrp=''
518d_setpgrp=''
519d_setprior=''
520d_setproctitle=''
521d_setpwent=''
522d_setregid=''
523d_setresgid=''
524d_setresuid=''
525d_setreuid=''
526d_setrgid=''
527d_setruid=''
528d_setsent=''
529d_setsid=''
530d_setvbuf=''
531d_sfio=''
532usesfio=''
533d_shm=''
534d_shmat=''
535d_shmatprototype=''
536shmattype=''
537d_shmctl=''
538d_shmdt=''
539d_shmget=''
540d_sigaction=''
983dbef6 541d_sigprocmask=''
b4eb6b3d 542d_sigsetjmp=''
49a78c82 543d_sockatmark=''
2ef53570 544d_sockatmarkproto=''
b4eb6b3d
JH
545d_msg_ctrunc=''
546d_msg_dontroute=''
547d_msg_oob=''
548d_msg_peek=''
549d_msg_proxy=''
550d_oldsock=''
551d_scm_rights=''
552d_socket=''
553d_sockpair=''
554sockethdr=''
555socketlib=''
556d_socklen_t=''
557d_socks5_init=''
558d_sqrtl=''
eef837ea 559d_sresgproto=''
640374d0 560d_sresuproto=''
b4eb6b3d
JH
561d_statblks=''
562d_statfs_f_flags=''
563d_statfs_s=''
564d_fstatvfs=''
565d_statvfs=''
566d_stdio_cnt_lval=''
567d_stdio_ptr_lval=''
a7ffa9b9
NC
568d_stdio_ptr_lval_nochange_cnt=''
569d_stdio_ptr_lval_sets_cnt=''
b4eb6b3d
JH
570d_stdiobase=''
571d_stdstdio=''
572stdio_base=''
573stdio_bufsiz=''
574stdio_cnt=''
575stdio_filbuf=''
576stdio_ptr=''
577d_index=''
578d_strchr=''
579d_strcoll=''
580d_strctcpy=''
581d_strerrm=''
582d_strerror=''
583d_sysernlst=''
584d_syserrlst=''
b3c85772 585d_strftime=''
b4eb6b3d
JH
586d_strtod=''
587d_strtol=''
588d_strtold=''
589d_strtoll=''
28e5dec8 590d_strtoq=''
b4eb6b3d
JH
591d_strtoul=''
592d_strtoull=''
593d_strtouq=''
594d_strxfrm=''
595d_symlink=''
596d_syscall=''
2ef53570 597d_syscallproto=''
b4eb6b3d
JH
598d_sysconf=''
599d_system=''
600d_tcgetpgrp=''
601d_tcsetpgrp=''
602d_telldirproto=''
603d_time=''
604timetype=''
605clocktype=''
606d_times=''
607d_truncate=''
608d_tzname=''
4e0554ec
JH
609d_u32align=''
610d_ualarm=''
b4eb6b3d
JH
611d_umask=''
612d_semctl_semid_ds=''
613d_semctl_semun=''
614d_union_semun=''
4e0554ec 615d_usleep=''
2ef53570 616d_usleepproto=''
b4eb6b3d
JH
617d_ustat=''
618d_vfork=''
619usevfork=''
620d_voidsig=''
621signal_t=''
622d_volatile=''
623d_charvspr=''
624d_vprintf=''
625d_wait4=''
626d_waitpid=''
627d_wcstombs=''
628d_wctomb=''
4e0554ec 629d_writev=''
b4eb6b3d 630dlext=''
85e6fe83
LW
631cccdlflags=''
632ccdlflags=''
2304df62 633dlsrc=''
232e078e 634ld=''
85e6fe83 635lddlflags=''
2304df62 636usedl=''
b4eb6b3d
JH
637doublesize=''
638ebcdic=''
639fflushNULL=''
640fflushall=''
641fpossize=''
642fpostype=''
5b463ca7 643gccosandvers=''
8a27cf78 644gccversion=''
b4eb6b3d
JH
645gidformat=''
646gidsign=''
647gidsize=''
648gidtype=''
649groupstype=''
650h_fcntl=''
651h_sysfile=''
652i_arpainet=''
653db_hashtype=''
654db_prefixtype=''
640374d0
JH
655db_version_major=''
656db_version_minor=''
657db_version_patch=''
b4eb6b3d
JH
658i_db=''
659i_dbm=''
660i_rpcsvcdbm=''
661d_dirnamlen=''
662direntrytype=''
663i_dirent=''
a0d0e21e 664i_dld=''
b4eb6b3d
JH
665i_dlfcn=''
666i_fcntl=''
667i_float=''
668i_gdbm=''
669d_grpasswd=''
670i_grp=''
671i_iconv=''
672i_ieeefp=''
673i_inttypes=''
2765b840 674i_langinfo=''
b4eb6b3d
JH
675i_libutil=''
676i_limits=''
677i_locale=''
678i_machcthr=''
679i_malloc=''
680i_math=''
681i_memory=''
682i_mntent=''
683i_ndbm=''
684i_netdb=''
685i_neterrno=''
686i_netinettcp=''
687i_niin=''
688i_sysin=''
689i_poll=''
690i_prot=''
691i_pthread=''
692d_pwage=''
693d_pwchange=''
694d_pwclass=''
695d_pwcomment=''
696d_pwexpire=''
697d_pwgecos=''
698d_pwpasswd=''
699d_pwquota=''
700i_pwd=''
701i_sfio=''
702i_shadow=''
703i_socks=''
704i_stddef=''
705i_stdlib=''
706i_string=''
707strings=''
708i_sunmath=''
709i_sysaccess=''
710i_sysdir=''
711i_sysfile=''
712d_voidtty=''
713i_bsdioctl=''
714i_sysfilio=''
715i_sysioctl=''
716i_syssockio=''
717i_syslog=''
718i_sysmman=''
719i_sysmode=''
720i_sysmount=''
721i_sysndir=''
722i_sysparam=''
723i_sysresrc=''
724i_syssecrt=''
725i_sysselct=''
726i_sysstat=''
727i_sysstatfs=''
728i_sysstatvfs=''
729i_systimes=''
730i_systypes=''
731i_sysuio=''
732i_sysun=''
733i_sysutsname=''
734i_sysvfs=''
735i_syswait=''
736i_sgtty=''
737i_termio=''
738i_termios=''
739i_systime=''
740i_systimek=''
741i_time=''
742timeincl=''
743i_unistd=''
744i_ustat=''
745i_utime=''
746i_values=''
747i_stdarg=''
748i_varargs=''
749i_varhdr=''
750i_vfork=''
751inc_version_list=''
752inc_version_list_init=''
753installprefix=''
754installprefixexp=''
755installstyle=''
756installusrbinperl=''
757intsize=''
758longsize=''
759shortsize=''
4b661809 760issymlink=''
2304df62 761libc=''
b4eb6b3d
JH
762ldlibpthname=''
763libperl=''
764shrpenv=''
765useshrplib=''
a0d0e21e 766glibpth=''
2304df62 767libpth=''
8e07c86e 768loclibpth=''
2304df62
AD
769plibpth=''
770xlibpth=''
1cfa4ec7 771ignore_versioned_solibs=''
2304df62 772libs=''
43999f95
JH
773libsdirs=''
774libsfiles=''
775libsfound=''
13b3f787 776libspath=''
85e6fe83 777lns=''
b4eb6b3d
JH
778d_PRIEUldbl=''
779d_PRIFUldbl=''
780d_PRIGUldbl=''
781d_PRIeldbl=''
782d_PRIfldbl=''
783d_PRIgldbl=''
784d_SCNfldbl=''
785sPRIEUldbl=''
786sPRIFUldbl=''
787sPRIGUldbl=''
788sPRIeldbl=''
789sPRIfldbl=''
790sPRIgldbl=''
791sSCNfldbl=''
792lseeksize=''
793lseektype=''
8ff267be 794make_set_make=''
b4eb6b3d
JH
795d_mymalloc=''
796freetype=''
797mallocobj=''
798mallocsrc=''
799malloctype=''
800usemymalloc=''
801installman1dir=''
802man1dir=''
803man1direxp=''
804man1ext=''
805installman3dir=''
806man3dir=''
807man3direxp=''
808man3ext=''
809modetype=''
810multiarch=''
811mydomain=''
812myhostname=''
813phostname=''
2304df62
AD
814c=''
815n=''
b4eb6b3d
JH
816d_eofnblk=''
817eagain=''
818o_nonblock=''
819rd_nodata=''
2cc61e15 820need_va_copy=''
b4eb6b3d
JH
821netdb_hlen_type=''
822netdb_host_type=''
823netdb_name_type=''
824netdb_net_type=''
825groupcat=''
826hostcat=''
827passcat=''
828orderlib=''
829ranlib=''
830d_perl_otherlibdirs=''
831otherlibdirs=''
2304df62
AD
832package=''
833spackage=''
b4eb6b3d
JH
834pager=''
835api_revision=''
836api_subversion=''
837api_version=''
838api_versionstring=''
839patchlevel=''
151e6568 840perl_patchlevel=''
b4eb6b3d
JH
841revision=''
842subversion=''
843version=''
861eb78d 844version_patchlevel_string=''
b4eb6b3d
JH
845perl5=''
846perladmin=''
847perlpath=''
848d_nv_preserves_uv=''
849d_nv_preserves_uv_bits=''
850i16size=''
851i16type=''
852i32size=''
853i32type=''
854i64size=''
855i64type=''
856i8size=''
857i8type=''
858ivsize=''
859ivtype=''
860nvsize=''
861nvtype=''
862u16size=''
863u16type=''
864u32size=''
865u32type=''
866u64size=''
867u64type=''
868u8size=''
869u8type=''
870uvsize=''
871uvtype=''
872ivdformat=''
873nvEUformat=''
874nvFUformat=''
875nvGUformat=''
876nveformat=''
877nvfformat=''
878nvgformat=''
879uvXUformat=''
880uvoformat=''
881uvuformat=''
882uvxformat=''
883pidtype=''
884prefix=''
885prefixexp=''
886installprivlib=''
887privlib=''
888privlibexp=''
889prototype=''
890ptrsize=''
891d_PRIXU64=''
892d_PRId64=''
893d_PRIi64=''
894d_PRIo64=''
895d_PRIu64=''
896d_PRIx64=''
897sPRIXU64=''
898sPRId64=''
899sPRIi64=''
900sPRIo64=''
901sPRIu64=''
902sPRIx64=''
903d_quad=''
904quadkind=''
905quadtype=''
906uquadtype=''
907drand01=''
908randbits=''
909randfunc=''
910randseedtype=''
911seedfunc=''
912installscript=''
913scriptdir=''
914scriptdirexp=''
915selectminbits=''
916selecttype=''
8ff267be 917sh=''
b4eb6b3d
JH
918sig_count=''
919sig_name=''
920sig_name_init=''
921sig_num=''
922sig_num_init=''
76d3c696 923sig_size=''
b4eb6b3d
JH
924installsitearch=''
925sitearch=''
926sitearchexp=''
927installsitebin=''
928sitebin=''
929sitebinexp=''
930installsitelib=''
931sitelib=''
932sitelib_stem=''
933sitelibexp=''
934siteprefix=''
935siteprefixexp=''
936sizesize=''
937sizetype=''
a0d0e21e 938so=''
b4eb6b3d 939socksizetype=''
2304df62
AD
940sharpbang=''
941shsharp=''
942spitshell=''
dfe9444c 943src=''
b4eb6b3d
JH
944ssizetype=''
945startperl=''
2304df62 946startsh=''
b4eb6b3d
JH
947stdchar=''
948d_stdio_stream_array=''
949stdio_stream_array=''
950sysman=''
5ff3f7a4 951trnl=''
b4eb6b3d
JH
952uidformat=''
953uidsign=''
954uidsize=''
955uidtype=''
956archname64=''
957use64bitall=''
958use64bitint=''
959ccflags_uselargefiles=''
960ldflags_uselargefiles=''
961libswanted_uselargefiles=''
962uselargefiles=''
963uselongdouble=''
964usemorebits=''
965usemultiplicity=''
2304df62 966nm_opt=''
40a7a20a 967nm_so_opt=''
2304df62
AD
968runnm=''
969usenm=''
b4eb6b3d 970useperlio=''
29209bc5 971usesocks=''
b4eb6b3d
JH
972d_oldpthreads=''
973use5005threads=''
974useithreads=''
9514c62b 975usereentrant=''
b4eb6b3d 976usethreads=''
2304df62 977incpath=''
2304df62
AD
978mips_type=''
979usrinc=''
b4eb6b3d
JH
980d_vendorarch=''
981installvendorarch=''
982vendorarch=''
983vendorarchexp=''
984d_vendorbin=''
985installvendorbin=''
986vendorbin=''
987vendorbinexp=''
988d_vendorlib=''
989installvendorlib=''
990vendorlib=''
991vendorlib_stem=''
992vendorlibexp=''
993usevendorprefix=''
994vendorprefix=''
995vendorprefixexp=''
d56c5707 996versiononly=''
b4eb6b3d
JH
997defvoidused=''
998voidflags=''
999pm_apiversion=''
1000xs_apiversion=''
3659ebf1
JH
1001yacc=''
1002yaccflags=''
2304df62
AD
1003CONFIG=''
1004
ecfc5424
AD
1005define='define'
1006undef='undef'
1007smallmach='pdp11 i8086 z8000 i80286 iAPX286'
1008rmlist=''
1009
1010: We must find out about Eunice early
1011eunicefix=':'
1012if test -f /etc/unixtovms; then
1013 eunicefix=/etc/unixtovms
1014fi
1015if test -f /etc/unixtovms.exe; then
1016 eunicefix=/etc/unixtovms.exe
1017fi
1018
b4eb6b3d 1019i_whoami=''
6b356c8e
JH
1020ccname=''
1021ccversion=''
9c839522 1022perllibs=''
b4eb6b3d
JH
1023: set useposix=false in your hint file to disable the POSIX extension.
1024useposix=true
1025: set useopcode=false in your hint file to disable the Opcode extension.
1026useopcode=true
dfe9444c 1027: Trailing extension. Override this in a hint file, if needed.
4e2a5f63 1028_exe=''
dfe9444c
AD
1029: Extra object files, if any, needed on this platform.
1030archobjs=''
b4eb6b3d 1031archname=''
ff935051
JH
1032: Possible local include directories to search.
1033: Set locincpth to "" in a hint file to defeat local include searches.
1034locincpth="/usr/local/include /opt/local/include /usr/gnu/include"
1035locincpth="$locincpth /opt/gnu/include /usr/GNU/include /opt/GNU/include"
1036:
1037: no include file wanted by default
1038inclwanted=''
1039
b4eb6b3d 1040groupstype=''
64615a5e 1041libnames=''
732c9516
JH
1042: change the next line if compiling for Xenix/286 on Xenix/386
1043xlibpth='/usr/lib/386 /lib/386'
732c9516
JH
1044: Possible local library directories to search.
1045loclibpth="/usr/local/lib /opt/local/lib /usr/gnu/lib"
1046loclibpth="$loclibpth /opt/gnu/lib /usr/GNU/lib /opt/GNU/lib"
1047
1048: general looking path for locating libraries
5869b1f1 1049glibpth="/lib /usr/lib $xlibpth"
732c9516 1050glibpth="$glibpth /usr/ccs/lib /usr/ucblib /usr/local/lib"
f7dd4e7f
JH
1051test -f /usr/shlib/libc.so && glibpth="/usr/shlib $glibpth"
1052test -f /shlib/libc.so && glibpth="/shlib $glibpth"
732c9516
JH
1053
1054: Private path used by Configure to find libraries. Its value
1055: is prepended to libpth. This variable takes care of special
1056: machines, like the mips. Usually, it should be empty.
1057plibpth=''
1058
1cfa4ec7
GS
1059: default library list
1060libswanted=''
921b2963 1061: some systems want to use only the non-versioned libso:s
1cfa4ec7 1062ignore_versioned_solibs=''
b4eb6b3d
JH
1063archname64=''
1064ccflags_uselargefiles=''
1065ldflags_uselargefiles=''
1066libswanted_uselargefiles=''
1067: set usemultiplicity on the Configure command line to enable multiplicity.
29209bc5 1068: set usesocks on the Configure command line to enable socks.
b4eb6b3d 1069: set usethreads on the Configure command line to enable threads.
cd040c5e 1070usereentrant='undef'
b4eb6b3d
JH
1071: full support for void wanted by default
1072defvoidused=15
1073
ecfc5424 1074: List of libraries we want.
693762b4 1075: If anyone needs -lnet, put it in a hint file.
997d70a2 1076libswanted='sfio socket bind inet nsl nm ndbm gdbm dbm db malloc dl'
69e84d1d 1077libswanted="$libswanted dld ld sun m c cposix posix"
f1066039 1078libswanted="$libswanted ndir dir crypt sec"
0c9177ab 1079libswanted="$libswanted ucb bsd BSD PW x iconv util"
1aef975c 1080: We probably want to search /usr/shlib before most other libraries.
94b6baf5 1081: This is only used by the lib/ExtUtils/MakeMaker.pm routine extliblist.
ecfc5424
AD
1082glibpth=`echo " $glibpth " | sed -e 's! /usr/shlib ! !'`
1083glibpth="/usr/shlib $glibpth"
1084: Do not use vfork unless overridden by a hint file.
1085usevfork=false
1086
8ff267be 1087: Find the basic shell for Bourne shell scripts
1088case "$sh" in
1089'')
8ff267be 1090 case "$SYSTYPE" in
1091 *bsd*|sys5*) xxx="/$SYSTYPE/bin/sh";;
1092 *) xxx='/bin/sh';;
1093 esac
1094 if test -f "$xxx"; then
1095 sh="$xxx"
1096 else
1097 : Build up a list and do a single loop so we can 'break' out.
1098 pth=`echo $PATH | sed -e "s/$p_/ /g"`
1099 for xxx in sh bash ksh pdksh ash; do
1100 for p in $pth; do
1101 try="$try ${p}/${xxx}"
1102 done
1103 done
1104 for xxx in $try; do
1105 if test -f "$xxx"; then
1106 sh="$xxx";
8ff267be 1107 break
1108 elif test -f "$xxx.exe"; then
1109 sh="$xxx";
8ff267be 1110 break
1111 fi
1112 done
1113 fi
1114 ;;
1115esac
1116
1117case "$sh" in
1118'') cat <<EOM >&2
1119$me: Fatal Error: I can't find a Bourne Shell anywhere.
dfe9444c 1120
8ff267be 1121Usually it's in /bin/sh. How did you even get this far?
7f2de2d2 1122Please contact me (Perl Maintainers) at perlbug@perl.org and
dfe9444c 1123we'll try to straighten this all out.
8ff267be 1124EOM
1125 exit 1
1126 ;;
1127esac
1128
760ac839 1129: see if sh knows # comments
73614538 1130if `$sh -c '#' >/dev/null 2>&1`; then
760ac839
LW
1131 shsharp=true
1132 spitshell=cat
760ac839
LW
1133 xcat=/bin/cat
1134 test -f $xcat || xcat=/usr/bin/cat
5440bc8e
JH
1135 echo "#!$xcat" >sharp
1136 $eunicefix sharp
1137 chmod +x sharp
1138 ./sharp > today
760ac839 1139 if test -s today; then
760ac839
LW
1140 sharpbang='#!'
1141 else
5440bc8e
JH
1142 echo "#! $xcat" > sharp
1143 $eunicefix sharp
1144 chmod +x sharp
1145 ./sharp > today
760ac839 1146 if test -s today; then
760ac839
LW
1147 sharpbang='#! '
1148 else
760ac839
LW
1149 sharpbang=': use '
1150 fi
1151 fi
1152else
dfe9444c 1153 echo " "
8ff267be 1154 echo "Your $sh doesn't grok # comments--I will strip them later on."
760ac839
LW
1155 shsharp=false
1156 cd ..
1157 echo "exec grep -v '^[ ]*#'" >spitshell
1158 chmod +x spitshell
1159 $eunicefix spitshell
1160 spitshell=`pwd`/spitshell
1161 cd UU
1162 echo "I presume that if # doesn't work, #! won't work either!"
1163 sharpbang=': use '
1164fi
5440bc8e 1165rm -f sharp today
760ac839
LW
1166
1167: figure out how to guarantee sh startup
8ff267be 1168case "$startsh" in
1169'') startsh=${sharpbang}${sh} ;;
1170*)
760ac839 1171esac
5440bc8e 1172cat >sharp <<EOSS
760ac839
LW
1173$startsh
1174set abc
1175test "$?abc" != 1
1176EOSS
1177
5440bc8e
JH
1178chmod +x sharp
1179$eunicefix sharp
1180if ./sharp; then
8ff267be 1181 : echo "Yup, it does."
760ac839 1182else
dfe9444c
AD
1183 echo "Hmm... '$startsh' does not guarantee sh startup..."
1184 echo "You may have to fix up the shell scripts to make sure $sh runs them."
760ac839 1185fi
5440bc8e 1186rm -f sharp
760ac839 1187
aebf16e7
AD
1188
1189: Save command line options in file UU/cmdline.opt for later use in
1190: generating config.sh.
1191cat > cmdline.opt <<EOSH
1192# Configure command line arguments.
1193config_arg0='$0'
1194config_args='$*'
1195config_argc=$#
1196EOSH
1197argn=1
ee45ea83
IZ
1198args_exp=''
1199args_sep=''
aebf16e7
AD
1200for arg in "$@"; do
1201 cat >>cmdline.opt <<EOSH
1202config_arg$argn='$arg'
1203EOSH
ee45ea83
IZ
1204 # Extreme backslashitis: replace each ' by '"'"'
1205 cat <<EOC | sed -e "s/'/'"'"'"'"'"'"'/g" > cmdl.opt
1206$arg
1207EOC
1208 arg_exp=`cat cmdl.opt`
1209 args_exp="$args_exp$args_sep'$arg_exp'"
aebf16e7 1210 argn=`expr $argn + 1`
ee45ea83 1211 args_sep=' '
aebf16e7 1212done
ee45ea83
IZ
1213# args_exp is good for restarting self: eval "set X $args_exp"; shift; $0 "$@"
1214# used by ./hints/os2.sh
1215rm -f cmdl.opt
aebf16e7 1216
2304df62
AD
1217: produce awk script to parse command line options
1218cat >options.awk <<'EOF'
1219BEGIN {
02e93a22 1220 optstr = "A:dD:eEf:hKOrsSU:V"; # getopt-style specification
2304df62
AD
1221
1222 len = length(optstr);
1223 for (i = 1; i <= len; i++) {
1224 c = substr(optstr, i, 1);
1225 if (i < len) a = substr(optstr, i + 1, 1); else a = "";
1226 if (a == ":") {
1227 arg[c] = 1;
1228 i++;
1229 }
1230 opt[c] = 1;
1231 }
1232}
1233{
1234 expect = 0;
1235 str = $0;
1236 if (substr(str, 1, 1) != "-") {
1237 printf("'%s'\n", str);
1238 next;
1239 }
1240 len = length($0);
1241 for (i = 2; i <= len; i++) {
1242 c = substr(str, i, 1);
1243 if (!opt[c]) {
1244 printf("-%s\n", substr(str, i));
1245 next;
1246 }
1247 printf("-%s\n", c);
1248 if (arg[c]) {
1249 if (i < len)
1250 printf("'%s'\n", substr(str, i + 1));
1251 else
1252 expect = 1;
1253 next;
1254 }
1255 }
1256}
1257END {
1258 if (expect)
1259 print "?";
1260}
1261EOF
1262
1263: process the command line options
4633a7c4
LW
1264set X `for arg in "$@"; do echo "X$arg"; done |
1265 sed -e s/X// | awk -f options.awk`
2304df62
AD
1266eval "set $*"
1267shift
1268rm -f options.awk
1269
1270: set up default values
1271fastread=''
1272reuseval=false
1273config_sh=''
1274alldone=''
1275error=''
1276silent=''
1277extractsh=''
ecfc5424 1278override=''
16d20bd9 1279knowitall=''
02e93a22 1280rm -f optdef.sh posthint.sh
28757baa 1281cat >optdef.sh <<EOS
1282$startsh
1283EOS
2304df62 1284
dfe9444c 1285
2304df62
AD
1286: option parsing
1287while test $# -gt 0; do
1288 case "$1" in
1289 -d) shift; fastread=yes;;
1290 -e) shift; alldone=cont;;
1291 -f)
1292 shift
1293 cd ..
1294 if test -r "$1"; then
1295 config_sh="$1"
1296 else
a0d0e21e 1297 echo "$me: cannot read config file $1." >&2
2304df62
AD
1298 error=true
1299 fi
1300 cd UU
1301 shift;;
1302 -h) shift; error=true;;
1303 -r) shift; reuseval=true;;
dfe9444c 1304 -s) shift; silent=true; realsilent=true;;
2304df62 1305 -E) shift; alldone=exit;;
16d20bd9 1306 -K) shift; knowitall=true;;
ecfc5424 1307 -O) shift; override=true;;
dfe9444c 1308 -S) shift; silent=true; extractsh=true;;
a0d0e21e
LW
1309 -D)
1310 shift
1311 case "$1" in
1312 *=)
1313 echo "$me: use '-U symbol=', not '-D symbol='." >&2
1314 echo "$me: ignoring -D $1" >&2
1315 ;;
ecfc5424 1316 *=*) echo "$1" | \
1aef975c
AD
1317 sed -e "s/'/'\"'\"'/g" -e "s/=\(.*\)/='\1'/" >> optdef.sh;;
1318 *) echo "$1='define'" >> optdef.sh;;
a0d0e21e
LW
1319 esac
1320 shift
1321 ;;
1322 -U)
1323 shift
1324 case "$1" in
1aef975c 1325 *=) echo "$1" >> optdef.sh;;
a0d0e21e
LW
1326 *=*)
1327 echo "$me: use '-D symbol=val', not '-U symbol=val'." >&2
1328 echo "$me: ignoring -U $1" >&2
1329 ;;
1aef975c 1330 *) echo "$1='undef'" >> optdef.sh;;
a0d0e21e
LW
1331 esac
1332 shift
1333 ;;
02e93a22
JH
1334 -A)
1335 shift
1336 xxx=''
1337 yyy="$1"
02e93a22 1338 zzz=''
5f83a3e9 1339 uuu=undef
02e93a22 1340 case "$yyy" in
5f83a3e9
JH
1341 *=*) zzz=`echo $yyy|sed 's!=.*!!'`
1342 case "$zzz" in
1343 *:*) zzz='' ;;
1344 *) xxx=append
1345 zzz=" "`echo $yyy|sed 's!^[^=]*=!!'`
1346 yyy=`echo $yyy|sed 's!=.*!!'` ;;
1347 esac
1348 ;;
1349 esac
1350 case "$xxx" in
1351 '') case "$yyy" in
1352 *:*) xxx=`echo $yyy|sed 's!:.*!!'`
1353 yyy=`echo $yyy|sed 's!^[^:]*:!!'`
1354 zzz=`echo $yyy|sed 's!^[^=]*=!!'`
1355 yyy=`echo $yyy|sed 's!=.*!!'` ;;
1356 *) xxx=`echo $yyy|sed 's!:.*!!'`
1357 yyy=`echo $yyy|sed 's!^[^:]*:!!'` ;;
1358 esac
1359 ;;
1360 esac
02e93a22
JH
1361 case "$xxx" in
1362 append)
5f83a3e9 1363 echo "$yyy=\"\${$yyy}$zzz\"" >> posthint.sh ;;
02e93a22 1364 clear)
5f83a3e9 1365 echo "$yyy=''" >> posthint.sh ;;
02e93a22
JH
1366 define)
1367 case "$zzz" in
1368 '') zzz=define ;;
1369 esac
5f83a3e9 1370 echo "$yyy='$zzz'" >> posthint.sh ;;
02e93a22 1371 eval)
5f83a3e9 1372 echo "eval \"$yyy=$zzz\"" >> posthint.sh ;;
02e93a22 1373 prepend)
5f83a3e9 1374 echo "$yyy=\"$zzz\${$yyy}\"" >> posthint.sh ;;
02e93a22
JH
1375 undef)
1376 case "$zzz" in
1377 '') zzz="$uuu" ;;
1378 esac
5f83a3e9
JH
1379 echo "$yyy=$zzz" >> posthint.sh ;;
1380 *) echo "$me: unknown -A command '$xxx', ignoring -A $1" >&2 ;;
02e93a22 1381 esac
bde6b06b 1382 shift
02e93a22 1383 ;;
dfe9444c 1384 -V) echo "$me generated by metaconfig 3.0 PL70." >&2
5f83a3e9 1385 exit 0;;
2304df62 1386 --) break;;
a0d0e21e 1387 -*) echo "$me: unknown option $1" >&2; shift; error=true;;
2304df62
AD
1388 *) break;;
1389 esac
1390done
1391
1392case "$error" in
1393true)
1394 cat >&2 <<EOM
2afac517 1395Usage: $me [-dehrsEKOSV] [-f config.sh] [-D symbol] [-D symbol=value]
02e93a22 1396 [-U symbol] [-U symbol=] [-A command:symbol...]
2304df62
AD
1397 -d : use defaults for all answers.
1398 -e : go on without questioning past the production of config.sh.
1399 -f : specify an alternate default configuration file.
1400 -h : print this help message and exit (with an error status).
1401 -r : reuse C symbols value if possible (skips costly nm extraction).
1402 -s : silent mode, only echoes questions and essential information.
a0d0e21e
LW
1403 -D : define symbol to have some value:
1404 -D symbol symbol gets the value 'define'
1405 -D symbol=value symbol gets the value 'value'
2304df62 1406 -E : stop at the end of questions, after having produced config.sh.
16d20bd9 1407 -K : do not use unless you know what you are doing.
ecfc5424 1408 -O : let -D and -U override definitions from loaded configuration file.
2304df62 1409 -S : perform variable substitutions on all .SH files (can mix with -f)
a0d0e21e
LW
1410 -U : undefine symbol:
1411 -U symbol symbol gets the value 'undef'
1412 -U symbol= symbol gets completely empty
02e93a22 1413 -A : manipulate symbol after the platform specific hints have been applied:
5f83a3e9 1414 -A symbol=value append " "value to symbol
02e93a22
JH
1415 -A append:symbol=value append value to symbol
1416 -A define:symbol=value define symbol to have value
02e93a22
JH
1417 -A clear:symbol define symbol to be ''
1418 -A define:symbol define symbol to be 'define'
1419 -A eval:symbol=value define symbol to be eval of value
1420 -A prepend:symbol=value prepend value to symbol
1421 -A undef:symbol define symbol to be 'undef'
1422 -A undef:symbol= define symbol to be ''
2304df62
AD
1423 -V : print version number and exit (with a zero status).
1424EOM
1425 exit 1
1426 ;;
1427esac
1428
dfe9444c
AD
1429: Sanity checks
1430case "$fastread$alldone" in
1431yescont|yesexit) ;;
1432*)
aaeb8e51
GS
1433 case "$extractsh" in
1434 true) ;;
1435 *)
1436 if test ! -t 0; then
1437 echo "Say 'sh Configure', not 'sh <Configure'"
1438 exit 1
1439 fi
1440 ;;
1441 esac
dfe9444c
AD
1442 ;;
1443esac
1444
2304df62
AD
1445exec 4>&1
1446case "$silent" in
1447true) exec 1>/dev/null;;
1448esac
1449
ecfc5424 1450: run the defines and the undefines, if any, but leave the file out there...
1aef975c
AD
1451touch optdef.sh
1452. ./optdef.sh
02e93a22
JH
1453: create the posthint manipulation script and leave the file out there...
1454touch posthint.sh
a0d0e21e 1455
2304df62 1456: set package name
85e6fe83 1457package=perl5
b4eb6b3d
JH
1458first=`echo $package | sed -e 's/^\(.\).*/\1/'`
1459last=`echo $package | sed -e 's/^.\(.*\)/\1/'`
1460case "`echo AbyZ | tr '[:lower:]' '[:upper:]' 2>/dev/null`" in
1461ABYZ) spackage=`echo $first | tr '[:lower:]' '[:upper:]'`$last;;
1462*) spackage=`echo $first | tr '[a-z]' '[A-Z]'`$last;;
1463esac
2304df62 1464
2304df62
AD
1465: Some greps do not return status, grrr.
1466echo "grimblepritz" >grimble
1467if grep blurfldyick grimble >/dev/null 2>&1 ; then
1468 contains=contains
1469elif grep grimblepritz grimble >/dev/null 2>&1 ; then
1470 contains=grep
1471else
1472 contains=contains
1473fi
1474rm -f grimble
1475: the following should work in any shell
1476case "$contains" in
1477contains*)
1478 echo " "
1479 echo "AGH! Grep doesn't return a status. Attempting remedial action."
1480 cat >contains <<'EOSS'
1481grep "$1" "$2" >.greptmp && cat .greptmp && test -s .greptmp
1482EOSS
1483chmod +x contains
1484esac
1485
dfe9444c
AD
1486: Find the path to the source tree
1487case "$src" in
1488'') case "$0" in
b233458b
JH
1489 */*) src=`echo $0 | sed -e 's%/[^/][^/]*$%%'`
1490 case "$src" in
1491 /*) ;;
8504afb7 1492 .) ;;
b233458b
JH
1493 *) src=`cd ../$src && pwd` ;;
1494 esac
1495 ;;
dfe9444c
AD
1496 *) src='.';;
1497 esac;;
1498esac
1499case "$src" in
1500'') src=/
1501 rsrc=/
1502 ;;
1503/*) rsrc="$src";;
1504*) rsrc="../$src";;
1505esac
1506if test -f $rsrc/Configure && \
1507 $contains "^package=$package$" $rsrc/Configure >/dev/null 2>&1
1508then
1509 : found it, so we are ok.
1510else
1511 rsrc=''
1512 for src in . .. ../.. ../../.. ../../../..; do
1513 if test -f ../$src/Configure && \
1514 $contains "^package=$package$" ../$src/Configure >/dev/null 2>&1
1515 then
1516 rsrc=../$src
1517 break
1518 fi
1519 done
1520fi
1521case "$rsrc" in
1522'')
1523 cat <<EOM >&4
1524
1525Sorry, I can't seem to locate the source dir for $package. Please start
1526Configure with an explicit path -- i.e. /some/path/Configure.
1527
1528EOM
1529 exit 1
1530 ;;
1531../.) rsrc='..';;
1532*)
1533 echo " "
1534 echo "Sources for $package found in \"$src\"." >&4
1535 ;;
1536esac
1537
1538: script used to extract .SH files with variable substitutions
1539cat >extract <<'EOS'
a02608de 1540PERL_CONFIG_SH=true
dfe9444c 1541echo "Doing variable substitutions on .SH files..."
24ccb310
JH
1542if test -f MANIFEST; then
1543 set x `awk '{print $1}' < MANIFEST | grep '\.SH$'`
dfe9444c
AD
1544else
1545 echo "(Looking for .SH files under the source directory.)"
1546 set x `(cd $src; find . -name "*.SH" -print)`
1547fi
1548shift
1549case $# in
15500) set x `(cd $src; echo *.SH)`; shift;;
1551esac
1552if test ! -f $src/$1; then
1553 shift
1554fi
1555mkdir_p='
1556name=$1;
1557create="";
1558while test $name; do
1559 if test ! -d "$name"; then
1560 create="$name $create";
1561 name=`echo $name | sed -e "s|^[^/]*$||"`;
1562 name=`echo $name | sed -e "s|\(.*\)/.*|\1|"`;
1563 else
1564 name="";
1565 fi;
1566done;
1567for file in $create; do
1568 mkdir $file;
1569done
1570'
1571for file in $*; do
1572 case "$src" in
1573 ".")
1574 case "$file" in
1575 */*)
1576 dir=`expr X$file : 'X\(.*\)/'`
1577 file=`expr X$file : 'X.*/\(.*\)'`
1578 (cd $dir && . ./$file)
1579 ;;
1580 *)
1581 . ./$file
1582 ;;
1583 esac
1584 ;;
1585 *)
1586 case "$file" in
1587 */*)
1588 dir=`expr X$file : 'X\(.*\)/'`
1589 file=`expr X$file : 'X.*/\(.*\)'`
1590 (set x $dir; shift; eval $mkdir_p)
1591 sh <$src/$dir/$file
1592 ;;
1593 *)
1594 sh <$src/$file
1595 ;;
1596 esac
1597 ;;
1598 esac
1599done
1600if test -f $src/config_h.SH; then
1601 if test ! -f config.h; then
1602 : oops, they left it out of MANIFEST, probably, so do it anyway.
1603 . $src/config_h.SH
1604 fi
1605fi
1606EOS
1607
1608: extract files and exit if asked to do so
1609case "$extractsh" in
1610true)
1611 case "$realsilent" in
1612 true) ;;
1613 *) exec 1>&4;;
1614 esac
1615 case "$config_sh" in
1616 '') config_sh='config.sh';;
1617 esac
1618 echo " "
1619 echo "Fetching answers from $config_sh..."
1620 cd ..
1621 . $config_sh
1622 test "$override" && . ./optdef.sh
1623 echo " "
1624 . UU/extract
1625 rm -rf UU
24ccb310 1626 echo "Extraction done."
dfe9444c
AD
1627 exit 0
1628 ;;
1629esac
1630
1631: Eunice requires " " instead of "", can you believe it
1632echo " "
1633: Here we go...
1634echo "Beginning of configuration questions for $package."
1635
1636trap 'echo " "; test -d ../UU && rm -rf X $rmlist; exit 1' 1 2 3 15
1637
2304df62
AD
1638: first determine how to suppress newline on echo command
1639echo " "
1640echo "Checking echo to see how to suppress newlines..."
1641(echo "hi there\c" ; echo " ") >.echotmp
1642if $contains c .echotmp >/dev/null 2>&1 ; then
1643 echo "...using -n."
1644 n='-n'
1645 c=''
1646else
1647 cat <<'EOM'
1648...using \c
1649EOM
1650 n=''
1651 c='\c'
1652fi
1653echo $n "The star should be here-->$c"
1654echo '*'
1655rm -f .echotmp
1656
1657: Now test for existence of everything in MANIFEST
1658echo " "
dfe9444c 1659if test -f $rsrc/MANIFEST; then
2304df62 1660 echo "First let's make sure your kit is complete. Checking..." >&4
dfe9444c 1661 awk '$1 !~ /PACK[A-Z]+/ {print $1}' $rsrc/MANIFEST | split -50
2304df62 1662 rm -f missing
dfe9444c 1663 tmppwd=`pwd`
2304df62 1664 for filelist in x??; do
dfe9444c 1665 (cd $rsrc; ls `cat $tmppwd/$filelist` >/dev/null 2>>$tmppwd/missing)
2304df62
AD
1666 done
1667 if test -s missing; then
1668 cat missing >&4
1669 cat >&4 <<'EOM'
1670
1671THIS PACKAGE SEEMS TO BE INCOMPLETE.
1672
1673You have the option of continuing the configuration process, despite the
1674distinct possibility that your kit is damaged, by typing 'y'es. If you
1675do, don't blame me if something goes wrong. I advise you to type 'n'o
7f2de2d2 1676and contact the author (perlbug@perl.org).
2304df62
AD
1677
1678EOM
1679 echo $n "Continue? [n] $c" >&4
1680 read ans
1681 case "$ans" in
1682 y*)
1683 echo "Continuing..." >&4
1684 rm -f missing
1685 ;;
1686 *)
1687 echo "ABORTING..." >&4
1688 kill $$
1689 ;;
1690 esac
1691 else
dfe9444c 1692 echo "Looks good..."
2304df62
AD
1693 fi
1694else
1695 echo "There is no MANIFEST file. I hope your kit is complete !"
1696fi
1697rm -f missing x??
1698
5ff3f7a4
GS
1699echo " "
1700: Find the appropriate value for a newline for tr
1701if test -n "$DJGPP"; then
1702 trnl='\012'
1703fi
1704if test X"$trnl" = X; then
1705 case "`echo foo|tr '\n' x 2>/dev/null`" in
1706 foox) trnl='\n' ;;
1707 esac
1708fi
1709if test X"$trnl" = X; then
1710 case "`echo foo|tr '\012' x 2>/dev/null`" in
1711 foox) trnl='\012' ;;
1712 esac
1713fi
1714if test X"$trnl" = X; then
1715 cat <<EOM >&2
1716
1717$me: Fatal Error: cannot figure out how to translate newlines with 'tr'.
1718
1719EOM
1720 exit 1
1721fi
1722
2304df62
AD
1723: compute the number of columns on the terminal for proper question formatting
1724case "$COLUMNS" in
1725'') COLUMNS='80';;
1726esac
1727
1728: set up the echo used in my read
1729myecho="case \"\$xxxm\" in
1730'') echo $n \"\$rp $c\" >&4;;
1731*) case \"\$rp\" in
1732 '') echo $n \"[\$xxxm] $c\";;
1733 *)
1734 if test \`echo \"\$rp [\$xxxm] \" | wc -c\` -ge $COLUMNS; then
1735 echo \"\$rp\" >&4
1736 echo $n \"[\$xxxm] $c\" >&4
1737 else
1738 echo $n \"\$rp [\$xxxm] $c\" >&4
1739 fi
1740 ;;
1741 esac;;
1742esac"
1743
1744: now set up to do reads with possible shell escape and default assignment
1745cat <<EOSC >myread
28757baa 1746$startsh
2304df62
AD
1747xxxm=\$dflt
1748$myecho
1749ans='!'
1750case "\$fastread" in
1751yes) case "\$dflt" in
1752 '') ;;
1753 *) ans='';
1754 case "\$silent-\$rp" in
1755 true-) ;;
1756 *) echo " " >&4;;
1757 esac;;
1758 esac;;
1759*) case "\$silent" in
1760 true) case "\$rp" in
1761 '') ans='';;
1762 esac;;
1763 esac;;
1764esac
1765while expr "X\$ans" : "X!" >/dev/null; do
1766 read answ
1767 set x \$xxxm
1768 shift
dfe9444c 1769 aok=''; eval "ans=\\"\$answ\\"" && aok=y
2304df62 1770 case "\$answ" in
dfe9444c
AD
1771 "!")
1772 sh 1>&4
1773 echo " "
1774 $myecho
1775 ;;
1776 !*)
1777 set x \`expr "X\$ans" : "X!\(.*\)\$"\`
1778 shift
1779 sh 1>&4 -c "\$*"
1780 echo " "
1781 $myecho
1782 ;;
2304df62
AD
1783 "\$ans")
1784 case "\$ans" in
ecfc5424
AD
1785 \\&*)
1786 set x \`expr "X\$ans" : "X&\(.*\)\$"\`
1787 shift
1788 case "\$1" in
1789 -d)
1790 fastread=yes
40a7a20a 1791 echo "(OK, I'll run with -d after this question.)" >&4
ecfc5424
AD
1792 ;;
1793 -*)
40a7a20a 1794 echo "*** Sorry, \$1 not supported yet." >&4
ecfc5424
AD
1795 ;;
1796 esac
1797 $myecho
1798 ans=!
1799 ;;
2304df62
AD
1800 esac;;
1801 *)
1802 case "\$aok" in
1803 y)
1804 echo "*** Substitution done -- please confirm."
1805 xxxm="\$ans"
c9795ab7 1806 ans=\`echo $n "\$ans$c" | tr '$trnl' ' '\`
2304df62
AD
1807 xxxm="\$ans"
1808 ans=!
1809 ;;
1810 *)
1811 echo "*** Error -- try again."
1812 ans=!
1813 ;;
1814 esac
1815 $myecho
1816 ;;
1817 esac
1818 case "\$ans\$xxxm\$nostick" in
1819 '')
1820 ans=!
1821 $myecho
1822 ;;
1823 esac
1824done
1825case "\$ans" in
1826'') ans="\$xxxm";;
1827esac
1828EOSC
1829
1830: create .config dir to save info across Configure sessions
1831test -d ../.config || mkdir ../.config
1832cat >../.config/README <<EOF
1833This directory created by Configure to save information that should
dfe9444c 1834persist across sessions for $package.
2304df62
AD
1835
1836You may safely delete it if you wish.
1837EOF
1838
9507cadf 1839xversion=`awk '/define[ ]+PERL_VERSION/ {print $3}' $rsrc/patchlevel.h`
af960fef 1840case "$usedevel" in
0107c034 1841$define|true|[yY]*) ;;
9507cadf 1842*) case "$xversion" in
0107c034
JH
1843 *[13579])
1844 cat >&4 <<EOH
1845*** WHOA THERE!!! ***
1846
1847 This is an UNSTABLE DEVELOPMENT release.
9507cadf
JH
1848 The version of this $package distribution is $xversion, that is, odd,
1849 (as opposed to even) and that signifies a development release.
3d5d58b1 1850 If you want a maintenance release, you want an even-numbered version.
0107c034
JH
1851
1852 Do ***NOT*** install this into production use.
1853 Data corruption and crashes are possible.
1854
1855 It is most seriously suggested that you do not continue any further
1856 unless you want to help in developing and debugging Perl.
1857
6adc6a45
JH
1858 If you *still* want to build perl, you can answer 'y' now,
1859 or pass -Dusedevel to Configure.
1860
0107c034
JH
1861EOH
1862 rp='Do you really want to continue?'
1863 dflt='n'
1864 . ./myread
1865 case "$ans" in
8feeef0e
JH
1866 [yY]) echo >&4 "Okay, continuing."
1867 usedevel="$define" ;;
0107c034
JH
1868 *) echo >&4 "Okay, bye."
1869 exit 1
1870 ;;
1871 esac
1872 ;;
1873 esac
1874 ;;
1875esac
8feeef0e
JH
1876case "$usedevel" in
1877$define|true|[yY]*)
1878 case "$versiononly" in
1879 '') versiononly="$define" ;;
1880 esac
1881 case "$installusrbinperl" in
1882 '') installusrbinperl="$undef" ;;
1883 esac
1884 ;;
1885esac
0107c034 1886
2304df62
AD
1887: general instructions
1888needman=true
1889firsttime=true
760ac839 1890user=`(logname) 2>/dev/null`
dfe9444c
AD
1891case "$user" in
1892'') user=`whoami 2>&1`;;
760ac839 1893esac
2304df62
AD
1894if $contains "^$user\$" ../.config/instruct >/dev/null 2>&1; then
1895 firsttime=false
1896 echo " "
1897 rp='Would you like to see the instructions?'
1898 dflt=n
1899 . ./myread
1900 case "$ans" in
1901 [yY]*) ;;
1902 *) needman=false;;
1903 esac
1904fi
1905if $needman; then
1906 cat <<EOH
4e2a5f63 1907
2304df62 1908This installation shell script will examine your system and ask you questions
a0d0e21e 1909to determine how the perl5 package should be installed. If you get
2304df62
AD
1910stuck on a question, you may use a ! shell escape to start a subshell or
1911execute a command. Many of the questions will have default answers in square
1912brackets; typing carriage return will give you the default.
1913
1914On some of the questions which ask for file or directory names you are allowed
1915to use the ~name construct to specify the login directory belonging to "name",
1916even if you don't have a shell which knows about that. Questions where this is
1917allowed will be marked "(~name ok)".
1918
1919EOH
1920 rp=''
1921 dflt='Type carriage return to continue'
1922 . ./myread
1923 cat <<'EOH'
1924
1925The prompter used in this script allows you to use shell variables and
1926backticks in your answers. You may use $1, $2, etc... to refer to the words
1927in the default answer, as if the default line was a set of arguments given to a
1928script shell. This means you may also use $* to repeat the whole default line,
1929so you do not have to re-type everything to add something to the default.
1930
1931Everytime there is a substitution, you will have to confirm. If there is an
1932error (e.g. an unmatched backtick), the default answer will remain unchanged
1933and you will be prompted again.
1934
1935If you are in a hurry, you may run 'Configure -d'. This will bypass nearly all
1936the questions and use the computed defaults (or the previous answers if there
1937was already a config.sh file). Type 'Configure -h' for a list of options.
ecfc5424 1938You may also start interactively and then answer '& -d' at any prompt to turn
dfe9444c 1939on the non-interactive behaviour for the remainder of the execution.
2304df62
AD
1940
1941EOH
1942 . ./myread
1943 cat <<EOH
1944
1945Much effort has been expended to ensure that this shell script will run on any
1946Unix system. If despite that it blows up on yours, your best bet is to edit
40000a8c
AD
1947Configure and run it again. If you can't run Configure for some reason,
1948you'll have to generate a config.sh file by hand. Whatever problems you
7f2de2d2 1949have, let me (perlbug@perl.org) know how I blew it.
2304df62
AD
1950
1951This installation script affects things in two ways:
1952
19531) it may do direct variable substitutions on some of the files included
1954 in this kit.
19552) it builds a config.h file for inclusion in C programs. You may edit
1956 any of these files as the need arises after running this script.
1957
1958If you make a mistake on a question, there is no easy way to back up to it
1959currently. The easiest thing to do is to edit config.sh and rerun all the SH
1960files. Configure will offer to let you do this before it runs the SH files.
1961
1962EOH
1963 dflt='Type carriage return to continue'
1964 . ./myread
1965 case "$firsttime" in
1966 true) echo $user >>../.config/instruct;;
1967 esac
1968fi
1969
2304df62
AD
1970: find out where common programs are
1971echo " "
1972echo "Locating common programs..." >&4
1973cat <<EOSC >loc
1974$startsh
1975case \$# in
19760) exit 1;;
1977esac
1978thing=\$1
1979shift
1980dflt=\$1
1981shift
1982for dir in \$*; do
1983 case "\$thing" in
1984 .)
1985 if test -d \$dir/\$thing; then
1986 echo \$dir
1987 exit 0
1988 fi
1989 ;;
1990 *)
a0d0e21e 1991 for thisthing in \$dir/\$thing; do
ecfc5424 1992 : just loop through to pick last item
a0d0e21e 1993 done
25f94b33 1994 if test -f \$thisthing; then
a0d0e21e 1995 echo \$thisthing
2304df62
AD
1996 exit 0
1997 elif test -f \$dir/\$thing.exe; then
c4f23d77
AD
1998 if test -n "$DJGPP"; then
1999 echo \$dir/\$thing.exe
2000 else
2001 : on Eunice apparently
2002 echo \$dir/\$thing
2003 fi
2304df62
AD
2004 exit 0
2005 fi
2006 ;;
2007 esac
2008done
2009echo \$dflt
2010exit 1
2011EOSC
2012chmod +x loc
2013$eunicefix loc
2014loclist="
2015awk
2016cat
f8006fac 2017chmod
b4eb6b3d
JH
2018comm
2019cp
2304df62
AD
2020echo
2021expr
2022grep
a0d0e21e 2023ls
dfe9444c 2024make
b4eb6b3d 2025mkdir
2304df62
AD
2026rm
2027sed
b4eb6b3d 2028sort
85e6fe83 2029touch
2304df62 2030tr
b4eb6b3d 2031uniq
2304df62
AD
2032"
2033trylist="
2034Mcc
dfe9444c 2035ar
3659ebf1 2036bison
b4eb6b3d 2037byacc
2304df62 2038cpp
b4eb6b3d 2039csh
2304df62
AD
2040date
2041egrep
8ff267be 2042gzip
b4eb6b3d 2043less
8ff267be 2044ln
b4eb6b3d 2045more
693762b4 2046nm
b4eb6b3d
JH
2047nroff
2048pg
2304df62
AD
2049test
2050uname
8ff267be 2051zip
2304df62 2052"
8e07c86e 2053pth=`echo $PATH | sed -e "s/$p_/ /g"`
2304df62
AD
2054pth="$pth /lib /usr/lib"
2055for file in $loclist; do
dfe9444c
AD
2056 eval xxx=\$$file
2057 case "$xxx" in
2058 /*|?:[\\/]*)
2059 if test -f "$xxx"; then
2060 : ok
2061 else
2062 echo "WARNING: no $xxx -- ignoring your setting for $file." >&4
2063 xxx=`./loc $file $file $pth`
2064 fi
2065 ;;
2066 '') xxx=`./loc $file $file $pth`;;
2067 *) xxx=`./loc $xxx $xxx $pth`;;
2068 esac
2304df62
AD
2069 eval $file=$xxx
2070 eval _$file=$xxx
2071 case "$xxx" in
2072 /*)
2073 echo $file is in $xxx.
2074 ;;
8e07c86e
AD
2075 ?:[\\/]*)
2076 echo $file is in $xxx.
2077 ;;
2304df62 2078 *)
25f94b33
AD
2079 echo "I don't know where '$file' is, and my life depends on it." >&4
2080 echo "Go find a public domain implementation or fix your PATH setting!" >&4
4633a7c4 2081 exit 1
2304df62
AD
2082 ;;
2083 esac
2084done
2085echo " "
2086echo "Don't worry if any of the following aren't found..."
2087say=offhand
2088for file in $trylist; do
dfe9444c
AD
2089 eval xxx=\$$file
2090 case "$xxx" in
2091 /*|?:[\\/]*)
2092 if test -f "$xxx"; then
2093 : ok
2094 else
2095 echo "WARNING: no $xxx -- ignoring your setting for $file." >&4
2096 xxx=`./loc $file $file $pth`
2097 fi
2098 ;;
2099 '') xxx=`./loc $file $file $pth`;;
2100 *) xxx=`./loc $xxx $xxx $pth`;;
2101 esac
2304df62
AD
2102 eval $file=$xxx
2103 eval _$file=$xxx
2104 case "$xxx" in
2105 /*)
2106 echo $file is in $xxx.
2107 ;;
8e07c86e
AD
2108 ?:[\\/]*)
2109 echo $file is in $xxx.
2110 ;;
2304df62
AD
2111 *)
2112 echo "I don't see $file out there, $say."
2113 say=either
2114 ;;
2115 esac
2116done
2117case "$egrep" in
2118egrep)
2119 echo "Substituting grep for egrep."
2120 egrep=$grep
2121 ;;
2122esac
8ff267be 2123case "$ln" in
2124ln)
2125 echo "Substituting cp for ln."
2126 ln=$cp
2127 ;;
2128esac
2304df62
AD
2129case "$test" in
2130test)
2131 echo "Hopefully test is built into your sh."
2132 ;;
2133*)
73614538 2134 if `sh -c "PATH= test true" >/dev/null 2>&1`; then
5d644a95 2135 echo "Using the test built into your sh."
2304df62
AD
2136 test=test
2137 _test=test
2138 fi
2139 ;;
2140esac
2141case "$echo" in
2142echo)
2143 echo "Hopefully echo is built into your sh."
2144 ;;
2145'') ;;
2146*)
2147 echo " "
2148echo "Checking compatibility between $echo and builtin echo (if any)..." >&4
2149 $echo $n "hi there$c" >foo1
2150 echo $n "hi there$c" >foo2
2151 if cmp foo1 foo2 >/dev/null 2>&1; then
2152 echo "They are compatible. In fact, they may be identical."
2153 else
2154 case "$n" in
2155 '-n') n='' c='\c';;
2156 *) n='-n' c='';;
2157 esac
2158 cat <<FOO
2159They are not compatible! You are probably running ksh on a non-USG system.
2160I'll have to use $echo instead of the builtin, since Bourne shell doesn't
2161have echo built in and we may have to run some Bourne shell scripts. That
2162means I'll have to use '$n$c' to suppress newlines now. Life is ridiculous.
2163
2164FOO
2165 $echo $n "The star should be here-->$c"
2166 $echo "*"
2167 fi
2168 $rm -f foo1 foo2
2169 ;;
2170esac
2171
2573c5f9
JH
2172cat <<EOS >checkcc
2173$startsh
2174EOS
2175cat <<'EOSC' >>checkcc
2176case "$cc" in
2177'') ;;
2178*) $rm -f try try.*
2179 $cat >try.c <<EOM
2180int main(int argc, char *argv[]) {
2181 return 0;
2182}
2183EOM
e4778687 2184 if $cc -o try $ccflags $ldflags try.c; then
2573c5f9
JH
2185 :
2186 else
2187 echo "Uh-oh, the C compiler '$cc' doesn't seem to be working." >&4
2188 despair=yes
2189 trygcc=yes
2190 case "$cc" in
2191 *gcc*) trygcc=no ;;
2192 esac
2193 case "`$cc -v -c try.c 2>&1`" in
2194 *gcc*) trygcc=no ;;
2195 esac
2196 if $test X"$trygcc" = Xyes; then
2197 if gcc -o try -c try.c; then
2198 echo " "
2199 echo "You seem to have a working gcc, though." >&4
2200 rp="Would you like to use it?"
2201 dflt=y
2202 if $test -f myread; then
2203 . ./myread
2204 else
2205 if $test -f UU/myread; then
2206 . ./UU/myread
2207 else
2208 echo "Cannot find myread, sorry. Aborting." >&2
2209 exit 1
2210 fi
2211 fi
2212 case "$ans" in
e723fc21 2213 [yY]*) cc=gcc; ccname=gcc; ccflags=''; despair=no ;;
2573c5f9
JH
2214 esac
2215 fi
2216 fi
2217 if $test X"$despair" = Xyes; then
5dd4fbdf
MB
2218 $cat >&4 <<EOM
2219You need to find a working C compiler.
2220Either (purchase and) install the C compiler supplied by your OS vendor,
2221or for a free C compiler try http://gcc.gnu.org/
2222I cannot continue any further, aborting.
2223EOM
2573c5f9
JH
2224 exit 1
2225 fi
2226 fi
2227 $rm -f try try.*
2228 ;;
2229esac
2230EOSC
2231
a0d0e21e
LW
2232: determine whether symbolic links are supported
2233echo " "
2234$touch blurfl
2235if $ln -s blurfl sym > /dev/null 2>&1 ; then
2236 echo "Symbolic links are supported." >&4
2237 lns="$ln -s"
2238else
2239 echo "Symbolic links are NOT supported." >&4
2240 lns="$ln"
2241fi
2242$rm -f blurfl sym
2243
dafca956
JH
2244: determine whether symbolic links are supported
2245echo " "
2246case "$lns" in
2247*"ln -s")
2248 echo "Checking how to test for symbolic links..." >&4
2249 $lns blurfl sym
4b661809 2250 if $test "X$issymlink" = X; then
73614538 2251 sh -c "PATH= test -h sym" >/dev/null 2>&1
5d644a95
MB
2252 if test $? = 0; then
2253 issymlink="test -h"
2254 fi
2255 fi
2256 if $test "X$issymlink" = X; then
73614538 2257 if $test -h >/dev/null 2>&1; then
5d644a95
MB
2258 issymlink="$test -h"
2259 echo "Your builtin 'test -h' may be broken, I'm using external '$test -h'." >&4
2260 fi
dafca956 2261 fi
4b661809 2262 if $test "X$issymlink" = X; then
dafca956 2263 if $test -L sym 2>/dev/null; then
5d644a95 2264 issymlink="$test -L"
dafca956
JH
2265 fi
2266 fi
4b661809 2267 if $test "X$issymlink" != X; then
5d644a95 2268 echo "You can test for symbolic links with '$issymlink'." >&4
dafca956
JH
2269 else
2270 echo "I do not know how you can test for symbolic links." >&4
2271 fi
2272 $rm -f blurfl sym
2273 ;;
2274*) echo "No symbolic links, so not testing for their testing..." >&4
2275 ;;
2276esac
2277echo " "
2278
2279
2280case "$mksymlinks" in
2281$define|true|[yY]*)
2282 case "$src" in
2283 ''|'.') echo "Cannot create symlinks in the original directory." >&4
2284 exit 1
2285 ;;
4b661809 2286 *) case "$lns:$issymlink" in
7a800fca 2287 *"ln -s:"*"test -"?)
dafca956
JH
2288 echo "Creating the symbolic links..." >&4
2289 echo "(First creating the subdirectories...)" >&4
2290 cd ..
2291 awk '{print $1}' $src/MANIFEST | grep / | sed 's:/[^/]*$::' | sort -u | while true; do
2292 read directory
2293 test -z "$directory" && break
2294 mkdir -p $directory
2295 done
2296 # Sanity check 1.
2297 if test ! -d t/base; then
2298 echo "Failed to create the subdirectories. Aborting." >&4
2299 exit 1
2300 fi
2301 echo "(Then creating the symlinks...)" >&4
2302 awk '{print $1}' $src/MANIFEST | while true; do
2303 read filename
2304 test -z "$filename" && break
2305 if test -f $filename; then
5d644a95 2306 if $issymlink $filename; then
dafca956
JH
2307 rm -f $filename
2308 fi
2309 fi
2310 if test -f $filename; then
2311 echo "$filename already exists, not symlinking."
2312 else
2313 ln -s $src/$filename $filename
2314 fi
2315 done
2316 # Sanity check 2.
a0d24b8a
JH
2317 if test ! -f t/base/lex.t; then
2318 echo "Failed to create the symlinks (t/base/lex.t missing). Aborting." >&4
dafca956
JH
2319 exit 1
2320 fi
2321 cd UU
2322 ;;
2323 *) echo "(I cannot figure out how to do symbolic links, ignoring mksymlinks)." >&4
2324 ;;
2325 esac
2326 ;;
2327 esac
2328 ;;
2329esac
2330
5440bc8e
JH
2331
2332case "$usecrosscompile" in
2333$define|true|[yY]*)
93bc48fa 2334 $echo "Cross-compiling..."
5440bc8e
JH
2335 croak=''
2336 case "$cc" in
2337 *-*-gcc) # A cross-compiling gcc, probably.
93bc48fa 2338 targetarch=`$echo $cc|$sed 's/-gcc$//'`
5440bc8e
JH
2339 ar=$targetarch-ar
2340 # leave out ld, choosing it is more complex
2341 nm=$targetarch-nm
2342 ranlib=$targetarch-ranlib
93bc48fa 2343 $echo 'extern int foo;' > try.c
f8006fac 2344 set X `$cc -v -E try.c 2>&1 | $awk '/^#include </,/^End of search /'|$grep '/include'`
93bc48fa
JH
2345 shift
2346 if $test $# -gt 0; then
2347 incpth="$incpth $*"
f8006fac
JH
2348 incpth="`$echo $incpth|$sed 's/^ //'`"
2349 echo "Guessing incpth '$incpth'." >&4
93bc48fa 2350 for i in $*; do
f8006fac 2351 j="`$echo $i|$sed 's,/include$,/lib,'`"
93bc48fa
JH
2352 if $test -d $j; then
2353 libpth="$libpth $j"
2354 fi
2355 done
f8006fac
JH
2356 libpth="`$echo $libpth|$sed 's/^ //'`"
2357 echo "Guessing libpth '$libpth'." >&4
93bc48fa
JH
2358 fi
2359 $rm -f try.c
5440bc8e
JH
2360 ;;
2361 esac
2362 case "$targetarch" in
93bc48fa
JH
2363 '') echo "Targetarch not defined." >&4; croak=y ;;
2364 *) echo "Using targetarch $targetarch." >&4 ;;
5440bc8e
JH
2365 esac
2366 case "$incpth" in
93bc48fa 2367 '') echo "Incpth not defined." >&4; croak=y ;;
f8006fac 2368 *) echo "Using incpth '$incpth'." >&4 ;;
5440bc8e
JH
2369 esac
2370 case "$libpth" in
93bc48fa 2371 '') echo "Libpth not defined." >&4; croak=y ;;
f8006fac 2372 *) echo "Using libpth '$libpth'." >&4 ;;
5440bc8e 2373 esac
93bc48fa
JH
2374 case "$usrinc" in
2375 '') for i in $incpth; do
2376 if $test -f $i/errno.h -a -f $i/stdio.h -a -f $i/time.h; then
2377 usrinc=$i
2378 echo "Guessing usrinc $usrinc." >&4
2379 break
2380 fi
2381 done
2382 case "$usrinc" in
2383 '') echo "Usrinc not defined." >&4; croak=y ;;
2384 esac
2385 ;;
2386 *) echo "Using usrinc $usrinc." >&4 ;;
5440bc8e 2387 esac
93bc48fa
JH
2388 case "$targethost" in
2389 '') echo "Targethost not defined." >&4; croak=y ;;
2390 *) echo "Using targethost $targethost." >&4
5440bc8e 2391 esac
93bc48fa
JH
2392 locincpth=' '
2393 loclibpth=' '
5440bc8e 2394 case "$croak" in
93bc48fa 2395 y) echo "Cannot continue, aborting." >&4; exit 1 ;;
5440bc8e
JH
2396 esac
2397 case "$src" in
2398 /*) run=$src/Cross/run
93c0359c 2399 targetmkdir=$src/Cross/mkdir
5440bc8e
JH
2400 to=$src/Cross/to
2401 from=$src/Cross/from
2402 ;;
93bc48fa 2403 *) pwd=`$test -f ../Configure & cd ..; pwd`
5440bc8e 2404 run=$pwd/Cross/run
f8006fac 2405 targetmkdir=$pwd/Cross/mkdir
5440bc8e
JH
2406 to=$pwd/Cross/to
2407 from=$pwd/Cross/from
2408 ;;
2409 esac
2410 case "$targetrun" in
2411 '') targetrun=ssh ;;
2412 esac
2413 case "$targetto" in
2414 '') targetto=scp ;;
2415 esac
2416 case "$targetfrom" in
2417 '') targetfrom=scp ;;
2418 esac
2419 run=$run-$targetrun
2420 to=$to-$targetto
2421 from=$from-$targetfrom
93bc48fa
JH
2422 case "$targetdir" in
2423 '') targetdir=/tmp
2424 echo "Guessing targetdir $targetdir." >&4
2425 ;;
2426 esac
5440bc8e 2427 case "$targetuser" in
93bc48fa
JH
2428 '') targetuser=root
2429 echo "Guessing targetuser $targetuser." >&4
2430 ;;
5440bc8e
JH
2431 esac
2432 case "$targetfrom" in
2433 scp) q=-q ;;
2434 *) q='' ;;
2435 esac
2436 case "$targetrun" in
2437 ssh|rsh)
2438 cat >$run <<EOF
2439#!/bin/sh
93c0359c
JH
2440case "\$1" in
2441-cwd)
2442 shift
2443 cwd=\$1
2444 shift
2445 ;;
2446esac
2447case "\$cwd" in
2448'') cwd=$targetdir ;;
2449esac
5440bc8e
JH
2450exe=\$1
2451shift
93c0359c
JH
2452if $test ! -f \$exe.xok; then
2453 $to \$exe
2454 $touch \$exe.xok
2455fi
2456$targetrun -l $targetuser $targethost "cd \$cwd && ./\$exe \$@"
5440bc8e
JH
2457EOF
2458 ;;
93bc48fa 2459 *) echo "Unknown targetrun '$targetrun'" >&4
5440bc8e
JH
2460 exit 1
2461 ;;
2462 esac
93c0359c
JH
2463 case "$targetmkdir" in
2464 */Cross/mkdir)
2465 cat >$targetmkdir <<EOF
2466#!/bin/sh
2467$targetrun -l $targetuser $targethost "mkdir -p \$@"
2468EOF
f8006fac 2469 $chmod a+rx $targetmkdir
93c0359c
JH
2470 ;;
2471 *) echo "Unknown targetmkdir '$targetmkdir'" >&4
2472 exit 1
2473 ;;
2474 esac
5440bc8e
JH
2475 case "$targetto" in
2476 scp|rcp)
2477 cat >$to <<EOF
2478#!/bin/sh
2479for f in \$@
2480do
93c0359c
JH
2481 case "\$f" in
2482 /*)
2483 $targetmkdir \`dirname \$f\`
2484 $targetto $q \$f $targetuser@$targethost:\$f || exit 1
2485 ;;
2486 *)
2487 $targetmkdir $targetdir/\`dirname \$f\`
2488 $targetto $q \$f $targetuser@$targethost:$targetdir/\$f || exit 1
2489 ;;
2490 esac
5440bc8e
JH
2491done
2492exit 0
2493EOF
2494 ;;
2495 cp) cat >$to <<EOF
2496#!/bin/sh
93c0359c
JH
2497for f in \$@
2498do
2499 case "\$f" in
2500 /*)
2501 $mkdir -p $targetdir/\`dirname \$f\`
2502 $cp \$f $targetdir/\$f || exit 1
2503 ;;
2504 *)
2505 $targetmkdir $targetdir/\`dirname \$f\`
2506 $cp \$f $targetdir/\$f || exit 1
2507 ;;
2508 esac
2509done
2510exit 0
5440bc8e
JH
2511EOF
2512 ;;
93bc48fa 2513 *) echo "Unknown targetto '$targetto'" >&4
5440bc8e
JH
2514 exit 1
2515 ;;
2516 esac
2517 case "$targetfrom" in
2518 scp|rcp)
2519 cat >$from <<EOF
2520#!/bin/sh
2521for f in \$@
2522do
93c0359c 2523 $rm -f \$f
5440bc8e
JH
2524 $targetfrom $q $targetuser@$targethost:$targetdir/\$f . || exit 1
2525done
2526exit 0
2527EOF
2528 ;;
2529 cp) cat >$from <<EOF
2530#!/bin/sh
2531for f in \$@
2532do
93c0359c 2533 $rm -f \$f
5440bc8e
JH
2534 cp $targetdir/\$f . || exit 1
2535done
2536exit 0
2537EOF
2538 ;;
93bc48fa 2539 *) echo "Unknown targetfrom '$targetfrom'" >&4
5440bc8e
JH
2540 exit 1
2541 ;;
2542 esac
93bc48fa
JH
2543 if $test ! -f $run; then
2544 echo "Target 'run' script '$run' not found." >&4
5440bc8e 2545 else
f8006fac 2546 $chmod a+rx $run
5440bc8e 2547 fi
93bc48fa
JH
2548 if $test ! -f $to; then
2549 echo "Target 'to' script '$to' not found." >&4
5440bc8e 2550 else
f8006fac 2551 $chmod a+rx $to
5440bc8e 2552 fi
93bc48fa
JH
2553 if $test ! -f $from; then
2554 echo "Target 'from' script '$from' not found." >&4
5440bc8e 2555 else
f8006fac 2556 $chmod a+rx $from
5440bc8e 2557 fi
93bc48fa 2558 if $test ! -f $run -o ! -f $to -o ! -f $from; then
5440bc8e
JH
2559 exit 1
2560 fi
2561 cat >&4 <<EOF
f8006fac
JH
2562Using '$run' for remote execution,
2563and '$from' and '$to'
93bc48fa 2564for remote file transfer.
5440bc8e
JH
2565EOF
2566 ;;
2567*) run=''
2568 to=:
2569 from=:
2570 usecrosscompile='undef'
2571 targetarch=''
2572 ;;
2573esac
2574
ecfc5424
AD
2575: see whether [:lower:] and [:upper:] are supported character classes
2576echo " "
ecfc5424
AD
2577case "`echo AbyZ | $tr '[:lower:]' '[:upper:]' 2>/dev/null`" in
2578ABYZ)
2579 echo "Good, your tr supports [:lower:] and [:upper:] to convert case." >&4
2580 up='[:upper:]'
2581 low='[:lower:]'
2582 ;;
28e8609d
JH
2583*) # There is a discontinuity in EBCDIC between 'I' and 'J'
2584 # (0xc9 and 0xd1), therefore that is a nice testing point.
2585 if test "X$up" = X -o "X$low" = X; then
3eaeeeae 2586 case "`echo IJ | $tr '[I-J]' '[i-j]' 2>/dev/null`" in
28e8609d
JH
2587 ij) up='[A-Z]'
2588 low='[a-z]'
2589 ;;
2590 esac
2591 fi
2592 if test "X$up" = X -o "X$low" = X; then
3eaeeeae 2593 case "`echo IJ | $tr I-J i-j 2>/dev/null`" in
28e8609d
JH
2594 ij) up='A-Z'
2595 low='a-z'
2596 ;;
2597 esac
2598 fi
2599 if test "X$up" = X -o "X$low" = X; then
2600 case "`echo IJ | od -x 2>/dev/null`" in
2601 *C9D1*|*c9d1*)
2602 echo "Hey, this might be EBCDIC." >&4
2603 if test "X$up" = X -o "X$low" = X; then
5ff3f7a4 2604 case "`echo IJ | $tr '[A-IJ-RS-Z]' '[a-ij-rs-z]' 2>/dev/null`" in
28e8609d
JH
2605 ij) up='[A-IJ-RS-Z]'
2606 low='[a-ij-rs-z]'
2607 ;;
2608 esac
2609 fi
2610 if test "X$up" = X -o "X$low" = X; then
5ff3f7a4 2611 case "`echo IJ | $tr A-IJ-RS-Z a-ij-rs-z 2>/dev/null`" in
28e8609d
JH
2612 ij) up='A-IJ-RS-Z'
2613 low='a-ij-rs-z'
2614 ;;
2615 esac
2616 fi
2617 ;;
2618 esac
2619 fi
2620esac
3eaeeeae 2621case "`echo IJ | $tr \"$up\" \"$low\" 2>/dev/null`" in
28e8609d
JH
2622ij)
2623 echo "Using $up and $low to convert case." >&4
2624 ;;
ecfc5424 2625*)
28e8609d
JH
2626 echo "I don't know how to translate letters from upper to lower case." >&4
2627 echo "Your tr is not acting any way I know of." >&4
2628 exit 1
2629 ;;
ecfc5424
AD
2630esac
2631: set up the translation script tr, must be called with ./tr of course
2632cat >tr <<EOSC
2633$startsh
2634case "\$1\$2" in
2635'[A-Z][a-z]') exec $tr '$up' '$low';;
2636'[a-z][A-Z]') exec $tr '$low' '$up';;
2637esac
2638exec $tr "\$@"
2639EOSC
2640chmod +x tr
2641$eunicefix tr
2642
2304df62
AD
2643: Try to determine whether config.sh was made on this system
2644case "$config_sh" in
2645'')
43999f95
JH
2646myuname=`$uname -a 2>/dev/null`
2647$test -z "$myuname" && myuname=`hostname 2>/dev/null`
28e8609d
JH
2648# tr '[A-Z]' '[a-z]' would not work in EBCDIC
2649# because the A-Z/a-z are not consecutive.
a0d0e21e 2650myuname=`echo $myuname | $sed -e 's/^[^=]*=//' -e 's/\///g' | \
3eaeeeae 2651 ./tr '[A-Z]' '[a-z]' | $tr $trnl ' '`
1aef975c 2652newmyuname="$myuname"
2304df62 2653dflt=n
16d20bd9
AD
2654case "$knowitall" in
2655'')
2656 if test -f ../config.sh; then
2657 if $contains myuname= ../config.sh >/dev/null 2>&1; then
2658 eval "`grep myuname= ../config.sh`"
2659 fi
2660 if test "X$myuname" = "X$newmyuname"; then
2661 dflt=y
2662 fi
2304df62 2663 fi
16d20bd9
AD
2664 ;;
2665*) dflt=y;;
2666esac
2304df62
AD
2667
2668: Get old answers from old config file if Configure was run on the
2669: same system, otherwise use the hints.
2670hint=default
2671cd ..
2672if test -f config.sh; then
16d20bd9
AD
2673 echo " "
2674 rp="I see a config.sh file. Shall I use it to set the defaults?"
2304df62
AD
2675 . UU/myread
2676 case "$ans" in
f83701cd
AD
2677 n*|N*) echo "OK, I'll ignore it."
2678 mv config.sh config.sh.old
2679 myuname="$newmyuname"
2680 ;;
2304df62 2681 *) echo "Fetching default answers from your old config.sh file..." >&4
ecfc5424
AD
2682 tmp_n="$n"
2683 tmp_c="$c"
85cad39c 2684 tmp_sh="$sh"
2304df62
AD
2685 . ./config.sh
2686 cp config.sh UU
ecfc5424
AD
2687 n="$tmp_n"
2688 c="$tmp_c"
85cad39c 2689 : Older versions did not always set $sh. Catch re-use of such
2690 : an old config.sh.
2691 case "$sh" in
2692 '') sh="$tmp_sh" ;;
2693 esac
2304df62
AD
2694 hint=previous
2695 ;;
2696 esac
2697fi
2573c5f9 2698. ./UU/checkcc
2304df62
AD
2699if test ! -f config.sh; then
2700 $cat <<EOM
2701
4e2a5f63
AD
2702First time through, eh? I have some defaults handy for some systems
2703that need some extra help getting the Configure answers right:
2304df62
AD
2704
2705EOM
dfe9444c 2706 (cd $src/hints; ls -C *.sh) | $sed 's/\.sh/ /g' >&4
2304df62
AD
2707 dflt=''
2708 : Half the following guesses are probably wrong... If you have better
7f2de2d2 2709 : tests or hints, please send them to perlbug@perl.org
2304df62 2710 : The metaconfig authors would also appreciate a copy...
a0d0e21e 2711 $test -f /irix && osname=irix
85e6fe83
LW
2712 $test -f /xenix && osname=sco_xenix
2713 $test -f /dynix && osname=dynix
2714 $test -f /dnix && osname=dnix
5f05dabc 2715 $test -f /lynx.os && osname=lynxos
2716 $test -f /unicos && osname=unicos && osvers=`$uname -r`
c71a9cee 2717 $test -f /unicosmk && osname=unicosmk && osvers=`$uname -r`
7a4c00b4 2718 $test -f /unicosmk.ar && osname=unicosmk && osvers=`$uname -r`
85e6fe83 2719 $test -f /bin/mips && /bin/mips && osname=mips
ecfc5424
AD
2720 $test -d /NextApps && set X `hostinfo | grep 'NeXT Mach.*:' | \
2721 $sed -e 's/://' -e 's/\./_/'` && osname=next && osvers=$4
a0d0e21e
LW
2722 $test -d /usr/apollo/bin && osname=apollo
2723 $test -f /etc/saf/_sactab && osname=svr4
85e6fe83 2724 $test -d /usr/include/minix && osname=minix
e060872b 2725 if $test -d /MachTen -o -d /MachTen_Folder; then
dfe9444c 2726 osname=machten
4633a7c4 2727 if $test -x /sbin/version; then
dfe9444c 2728 osvers=`/sbin/version | $awk '{print $2}' |
4633a7c4
LW
2729 $sed -e 's/[A-Za-z]$//'`
2730 elif $test -x /usr/etc/version; then
dfe9444c 2731 osvers=`/usr/etc/version | $awk '{print $2}' |
4633a7c4
LW
2732 $sed -e 's/[A-Za-z]$//'`
2733 else
2734 osvers="$2.$3"
2735 fi
2736 fi
aaacdc8b
GS
2737
2738 $test -f /sys/posix.dll &&
2739 $test -f /usr/bin/what &&
2740 set X `/usr/bin/what /sys/posix.dll` &&
2741 $test "$3" = UWIN &&
2742 osname=uwin &&
2743 osvers="$5"
2744
2304df62
AD
2745 if $test -f $uname; then
2746 set X $myuname
2747 shift
2748
2304df62 2749 case "$5" in
85e6fe83 2750 fps*) osname=fps ;;
2304df62
AD
2751 mips*)
2752 case "$4" in
85e6fe83
LW
2753 umips) osname=umips ;;
2754 *) osname=mips ;;
2304df62 2755 esac;;
85e6fe83
LW
2756 [23]100) osname=mips ;;
2757 next*) osname=next ;;
ecfc5424 2758 i386*)
c6912327
JH
2759 tmp=`/bin/uname -X 2>/dev/null|awk '/3\.2v[45]/{ print $(NF) }'`
2760 if $test "$tmp" != "" -a "$3" = "3.2" -a -f '/etc/systemid'; then
619ffc2b
JH
2761 osname='sco'
2762 osvers=$tmp
2763 elif $test -f /etc/kconfig; then
ecfc5424 2764 osname=isc
bd628c73 2765 if test "$lns" = "$ln -s"; then
a0d0e21e
LW
2766 osvers=4
2767 elif $contains _SYSV3 /usr/include/stdio.h > /dev/null 2>&1 ; then
2768 osvers=3
2304df62 2769 elif $contains _POSIX_SOURCE /usr/include/stdio.h > /dev/null 2>&1 ; then
a0d0e21e 2770 osvers=2
ecfc5424
AD
2771 fi
2772 fi
2000072c 2773 tmp=''
ecfc5424 2774 ;;
c4f23d77
AD
2775 pc*)
2776 if test -n "$DJGPP"; then
2777 osname=dos
2778 osvers=djgpp
2779 fi
2780 ;;
2304df62
AD
2781 esac
2782
2783 case "$1" in
a0d0e21e
LW
2784 aix) osname=aix
2785 tmp=`( (oslevel) 2>/dev/null || echo "not found") 2>&1`
2786 case "$tmp" in
1aef975c 2787 'not found') osvers="$4"."$3" ;;
a0d0e21e
LW
2788 '<3240'|'<>3240') osvers=3.2.0 ;;
2789 '=3240'|'>3240'|'<3250'|'<>3250') osvers=3.2.4 ;;
2790 '=3250'|'>3250') osvers=3.2.5 ;;
1aef975c 2791 *) osvers=$tmp;;
a0d0e21e
LW
2792 esac
2793 ;;
aaacdc8b
GS
2794 bsd386) osname=bsd386
2795 osvers=`$uname -r`
2796 ;;
2797 cygwin*) osname=cygwin
2798 osvers="$3"
2799 ;;
23f87696
SZ
2800 *dc.osx) osname=dcosx
2801 osvers="$3"
2802 ;;
a0d0e21e
LW
2803 dnix) osname=dnix
2804 osvers="$3"
2805 ;;
2806 domainos) osname=apollo
2807 osvers="$3"
2808 ;;
2809 dgux) osname=dgux
2810 osvers="$3"
2811 ;;
760ac839 2812 dynixptx*) osname=dynixptx
e58e581d 2813 osvers=`echo "$4"|sed 's/^v//'`
760ac839 2814 ;;
a0d0e21e
LW
2815 freebsd) osname=freebsd
2816 osvers="$3" ;;
2817 genix) osname=genix ;;
2818 hp*) osname=hpux
bfb7748a 2819 osvers=`echo "$3" | $sed 's,.*\.\([0-9]*\.[0-9]*\),\1,'`
a0d0e21e 2820 ;;
a78b0d02 2821 irix*) osname=irix
a0d0e21e
LW
2822 case "$3" in
2823 4*) osvers=4 ;;
2824 5*) osvers=5 ;;
ecfc5424 2825 *) osvers="$3" ;;
a0d0e21e
LW
2826 esac
2827 ;;
2828 linux) osname=linux
2829 case "$3" in
a0d0e21e
LW
2830 *) osvers="$3" ;;
2831 esac
2832 ;;
28e8609d
JH
2833 MiNT) osname=mint
2834 ;;
2835 netbsd*) osname=netbsd
ecfc5424
AD
2836 osvers="$3"
2837 ;;
4e81affe
MM
2838 news-os) osvers="$3"
2839 case "$3" in
2840 4*) osname=newsos4 ;;
2841 *) osname=newsos ;;
2842 esac
2843 ;;
aaacdc8b 2844 next*) osname=next ;;
28bb1e2c 2845 nonstop-ux) osname=nonstopux ;;
aaacdc8b
GS
2846 POSIX-BC | posix-bc ) osname=posix-bc
2847 osvers="$3"
a0d0e21e 2848 ;;
ae3afa4e
TH
2849 powerux | power_ux | powermax_os | powermaxos | \
2850 powerunix | power_unix) osname=powerux
2851 osvers="$3"
2852 ;;
aaacdc8b
GS
2853 qnx) osname=qnx
2854 osvers="$4"
2855 ;;
a0d0e21e
LW
2856 solaris) osname=solaris
2857 case "$3" in
2858 5*) osvers=`echo $3 | $sed 's/^5/2/g'` ;;
ecfc5424 2859 *) osvers="$3" ;;
a0d0e21e
LW
2860 esac
2861 ;;
85e6fe83
LW
2862 sunos) osname=sunos
2863 case "$3" in
85e6fe83
LW
2864 5*) osname=solaris
2865 osvers=`echo $3 | $sed 's/^5/2/g'` ;;
a0d0e21e 2866 *) osvers="$3" ;;
2304df62
AD
2867 esac
2868 ;;
a0d0e21e 2869 titanos) osname=titanos
85e6fe83 2870 case "$3" in
a0d0e21e
LW
2871 1*) osvers=1 ;;
2872 2*) osvers=2 ;;
2873 3*) osvers=3 ;;
2874 4*) osvers=4 ;;
ecfc5424 2875 *) osvers="$3" ;;
2304df62
AD
2876 esac
2877 ;;
85e6fe83 2878 ultrix) osname=ultrix
ecfc5424 2879 osvers="$3"
2304df62 2880 ;;
28757baa 2881 osf1|mls+) case "$5" in
fed7345c
AD
2882 alpha)
2883 osname=dec_osf
2aa76180
JH
2884 osvers=`sizer -v | awk '{print $3}' | tr '[A-Z]' '[a-z]' | sed 's/^[xvt]//'`
2885 case "$osvers" in
2886 [1-9].[0-9]*) ;;
2887 *) osvers=`echo "$3" | sed 's/^[xvt]//'` ;;
2888 esac
ecfc5424
AD
2889 ;;
2890 hp*) osname=hp_osf1 ;;
2891 mips) osname=mips_osf1 ;;
85e6fe83
LW
2892 esac
2893 ;;
0337d152
BG
2894 unixware) osname=svr5
2895 osvers="$4"
2896 ;;
2897 uts) osname=uts
a0d0e21e
LW
2898 osvers="$3"
2899 ;;
85e6fe83 2900 $2) case "$osname" in
2304df62 2901 *isc*) ;;
a0d0e21e 2902 *freebsd*) ;;
5f05dabc 2903 svr*)
a0d0e21e
LW
2904 : svr4.x or possibly later
2905 case "svr$3" in
2906 ${osname}*)
2907 osname=svr$3
2908 osvers=$4
2909 ;;
2910 esac
2911 case "$osname" in
2912 svr4.0)
2913 : Check for ESIX
2914 if test -f /stand/boot ; then
2915 eval `grep '^INITPROG=[a-z/0-9]*$' /stand/boot`
ecfc5424
AD
2916 if test -n "$INITPROG" -a -f "$INITPROG"; then
2917 isesix=`strings -a $INITPROG|grep 'ESIX SYSTEM V/386 Release 4.0'`
2918 if test -n "$isesix"; then
a0d0e21e
LW
2919 osname=esix4
2920 fi
2921 fi
2922 fi
2923 ;;
2924 esac
2925 ;;
2304df62 2926 *) if test -f /etc/systemid; then
a0d0e21e
LW
2927 osname=sco
2928 set `echo $3 | $sed 's/\./ /g'` $4
c4f23d77 2929 if $test -f $src/hints/sco_$1_$2_$3.sh; then
85e6fe83 2930 osvers=$1.$2.$3
c4f23d77 2931 elif $test -f $src/hints/sco_$1_$2.sh; then
85e6fe83 2932 osvers=$1.$2
c4f23d77 2933 elif $test -f $src/hints/sco_$1.sh; then
85e6fe83 2934 osvers=$1
2304df62 2935 fi
a0d0e21e
LW
2936 else
2937 case "$osname" in
2938 '') : Still unknown. Probably a generic Sys V.
2939 osname="sysv"
2940 osvers="$3"
2941 ;;
2942 esac
2304df62
AD
2943 fi
2944 ;;
2945 esac
2946 ;;
a0d0e21e
LW
2947 *) case "$osname" in
2948 '') : Still unknown. Probably a generic BSD.
2949 osname="$1"
2950 osvers="$3"
2951 ;;
2952 esac
2953 ;;
2304df62
AD
2954 esac
2955 else
dfe9444c
AD
2956 if test -f /vmunix -a -f $src/hints/news_os.sh; then
2957 (what /vmunix | UU/tr '[A-Z]' '[a-z]') > UU/kernel.what 2>&1
2958 if $contains news-os UU/kernel.what >/dev/null 2>&1; then
2959 osname=news_os
2304df62 2960 fi
dfe9444c 2961 $rm -f UU/kernel.what
8e07c86e
AD
2962 elif test -d c:/.; then
2963 set X $myuname
2964 osname=os2
2965 osvers="$5"
2304df62
AD
2966 fi
2967 fi
85e6fe83 2968
5440bc8e
JH
2969 case "$targetarch" in
2970 '') ;;
2971 *) hostarch=$osname
2972 osname=`echo $targetarch|sed 's,^[^-]*-,,'`
2973 osvers=''
2974 ;;
2975 esac
2976
a0d0e21e
LW
2977 : Now look for a hint file osname_osvers, unless one has been
2978 : specified already.
2979 case "$hintfile" in
2980 ''|' ')
1e127011 2981 file=`echo "${osname}_${osvers}" | $sed -e 's%\.%_%g' -e 's%_$%%'`
a0d0e21e 2982 : Also try without trailing minor version numbers.
1e127011
DD
2983 xfile=`echo $file | $sed -e 's%_[^_]*$%%'`
2984 xxfile=`echo $xfile | $sed -e 's%_[^_]*$%%'`
2985 xxxfile=`echo $xxfile | $sed -e 's%_[^_]*$%%'`
2986 xxxxfile=`echo $xxxfile | $sed -e 's%_[^_]*$%%'`
a0d0e21e
LW
2987 case "$file" in
2988 '') dflt=none ;;
2989 *) case "$osvers" in
2990 '') dflt=$file
2991 ;;
dfe9444c 2992 *) if $test -f $src/hints/$file.sh ; then
a0d0e21e 2993 dflt=$file
dfe9444c 2994 elif $test -f $src/hints/$xfile.sh ; then
a0d0e21e 2995 dflt=$xfile
dfe9444c 2996 elif $test -f $src/hints/$xxfile.sh ; then
a0d0e21e 2997 dflt=$xxfile
dfe9444c 2998 elif $test -f $src/hints/$xxxfile.sh ; then
a0d0e21e 2999 dflt=$xxxfile
dfe9444c 3000 elif $test -f $src/hints/$xxxxfile.sh ; then
a0d0e21e 3001 dflt=$xxxxfile
dfe9444c 3002 elif $test -f "$src/hints/${osname}.sh" ; then
a0d0e21e
LW
3003 dflt="${osname}"
3004 else
3005 dflt=none
3006 fi
3007 ;;
3008 esac
85e6fe83
LW
3009 ;;
3010 esac
4e2a5f63
AD
3011 if $test -f Policy.sh ; then
3012 case "$dflt" in
3013 *Policy*) ;;
3014 none) dflt="Policy" ;;
3015 *) dflt="Policy $dflt" ;;
3016 esac
3017 fi
85e6fe83 3018 ;;
a0d0e21e 3019 *)
ecfc5424 3020 dflt=`echo $hintfile | $sed 's/\.sh$//'`
a0d0e21e 3021 ;;
2304df62 3022 esac
1aef975c 3023
4e2a5f63
AD
3024 if $test -f Policy.sh ; then
3025 $cat <<EOM
3026
3027There's also a Policy hint file available, which should make the
3028site-specific (policy) questions easier to answer.
3029EOM
3030
3031 fi
3032
2304df62
AD
3033 $cat <<EOM
3034
3035You may give one or more space-separated answers, or "none" if appropriate.
4e2a5f63 3036A well-behaved OS will have no hints, so answering "none" or just "Policy"
a3635516 3037is a good thing. DO NOT give a wrong version or a wrong OS.
2304df62
AD
3038
3039EOM
4e2a5f63 3040
2304df62 3041 rp="Which of these apply, if any?"
dfe9444c 3042 . UU/myread
85e6fe83
LW
3043 tans=$ans
3044 for file in $tans; do
4e2a5f63
AD
3045 if $test X$file = XPolicy -a -f Policy.sh; then
3046 . Policy.sh
3047 $cat Policy.sh >> UU/config.sh
3048 elif $test -f $src/hints/$file.sh; then
dfe9444c
AD
3049 . $src/hints/$file.sh
3050 $cat $src/hints/$file.sh >> UU/config.sh
5440bc8e 3051 elif $test X"$tans" = X -o X"$tans" = Xnone ; then
2304df62
AD
3052 : nothing
3053 else
85e6fe83
LW
3054 : Give one chance to correct a possible typo.
3055 echo "$file.sh does not exist"
3056 dflt=$file
3057 rp="hint to use instead?"
dfe9444c 3058 . UU/myread
85e6fe83 3059 for file in $ans; do
dfe9444c
AD
3060 if $test -f "$src/hints/$file.sh"; then
3061 . $src/hints/$file.sh
3062 $cat $src/hints/$file.sh >> UU/config.sh
85e6fe83
LW
3063 elif $test X$ans = X -o X$ans = Xnone ; then
3064 : nothing
3065 else
3066 echo "$file.sh does not exist -- ignored."
3067 fi
3068 done
2304df62
AD
3069 fi
3070 done
85e6fe83 3071
2304df62 3072 hint=recommended
85e6fe83 3073 : Remember our hint file for later.
dfe9444c 3074 if $test -f "$src/hints/$file.sh" ; then
a0d0e21e 3075 hintfile="$file"
85e6fe83 3076 else
a0d0e21e 3077 hintfile=''
85e6fe83 3078 fi
2304df62
AD
3079fi
3080cd UU
3081;;
3082*)
3083 echo " "
3084 echo "Fetching default answers from $config_sh..." >&4
ecfc5424
AD
3085 tmp_n="$n"
3086 tmp_c="$c"
2304df62
AD
3087 cd ..
3088 cp $config_sh config.sh 2>/dev/null
a78b0d02 3089 chmod +w config.sh
2304df62
AD
3090 . ./config.sh
3091 cd UU
3092 cp ../config.sh .
ecfc5424
AD
3093 n="$tmp_n"
3094 c="$tmp_c"
2304df62
AD
3095 hint=previous
3096 ;;
3097esac
1aef975c 3098test "$override" && . ./optdef.sh
2304df62
AD
3099
3100: Restore computed paths
3101for file in $loclist $trylist; do
3102 eval $file="\$_$file"
3103done
3104
85e6fe83 3105cat << EOM
a0d0e21e 3106
85e6fe83 3107Configure uses the operating system name and version to set some defaults.
ecfc5424
AD
3108The default value is probably right if the name rings a bell. Otherwise,
3109since spelling matters for me, either accept the default or answer "none"
3110to leave it blank.
a0d0e21e 3111
85e6fe83 3112EOM
85e6fe83 3113case "$osname" in
a0d0e21e 3114 ''|' ')
85e6fe83 3115 case "$hintfile" in
a0d0e21e 3116 ''|' '|none) dflt=none ;;
ecfc5424 3117 *) dflt=`echo $hintfile | $sed -e 's/\.sh$//' -e 's/_.*$//'` ;;
85e6fe83
LW
3118 esac
3119 ;;
3120 *) dflt="$osname" ;;
3121esac
3122rp="Operating system name?"
3123. ./myread
3124case "$ans" in
ecfc5424
AD
3125none) osname='' ;;
3126*) osname=`echo "$ans" | $sed -e 's/[ ][ ]*/_/g' | ./tr '[A-Z]' '[a-z]'`;;
85e6fe83 3127esac
8ff267be 3128echo " "
3129case "$osvers" in
3130 ''|' ')
3131 case "$hintfile" in
3132 ''|' '|none) dflt=none ;;
3133 *) dflt=`echo $hintfile | $sed -e 's/\.sh$//' -e 's/^[^_]*//'`
3134 dflt=`echo $dflt | $sed -e 's/^_//' -e 's/_/./g'`
3135 case "$dflt" in
3136 ''|' ') dflt=none ;;
3137 esac
3138 ;;
3139 esac
3140 ;;
3141 *) dflt="$osvers" ;;
3142esac
3143rp="Operating system version?"
3144. ./myread
3145case "$ans" in
3146none) osvers='' ;;
3147*) osvers="$ans" ;;
3148esac
3149
02e93a22
JH
3150
3151. ./posthint.sh
3152
2304df62 3153: who configured the system
59b83a6f 3154cf_time=`LC_ALL=C; LANGUAGE=C; export LC_ALL; export LANGUAGE; $date 2>&1`
8ff267be 3155cf_by=`(logname) 2>/dev/null`
dfe9444c
AD
3156case "$cf_by" in
3157"")
8ff267be 3158 cf_by=`(whoami) 2>/dev/null`
dfe9444c
AD
3159 case "$cf_by" in
3160 "") cf_by=unknown ;;
8ff267be 3161 esac ;;
3162esac
2304df62 3163
b4eb6b3d
JH
3164: set up the script used to warn in case of inconsistency
3165cat <<EOS >whoa
3166$startsh
3167EOS
3168cat <<'EOSC' >>whoa
3169dflt=y
3170echo " "
3171echo "*** WHOA THERE!!! ***" >&4
3172echo " The $hint value for \$$var on this machine was \"$was\"!" >&4
3173rp=" Keep the $hint value?"
3174. ./myread
3175case "$ans" in
3176y) td=$was; tu=$was;;
3177esac
3178EOSC
3179
3180: function used to set $1 to $val
3181setvar='var=$1; eval "was=\$$1"; td=$define; tu=$undef;
3182case "$val$was" in
3183$define$undef) . ./whoa; eval "$var=\$td";;
3184$undef$define) . ./whoa; eval "$var=\$tu";;
3185*) eval "$var=$val";;
3186esac'
3187
3188case "$usethreads" in
3189$define|true|[yY]*) dflt='y';;
3190*) dflt='n';;
3191esac
3192cat <<EOM
3193
3194Perl can be built to take advantage of threads on some systems.
3195To do so, Configure can be run with -Dusethreads.
3196
3197Note that threading is a highly experimental feature, and
3198some known race conditions still remain. If you choose to try
3199it, be very sure to not actually deploy it for production
3200purposes. README.threads has more details, and is required
3201reading if you enable threads.
3202
3203If this doesn't make any sense to you, just accept the default '$dflt'.
3204EOM
3205rp='Build a threading Perl?'
3206. ./myread
3207case "$ans" in
3208y|Y) val="$define" ;;
3209*) val="$undef" ;;
3210esac
3211set usethreads
3212eval $setvar
3213
3214case "$usethreads" in
3215$define)
3216 $cat <<EOM
3217
3218As of 5.5.640, Perl has two different internal threading implementations,
3219the 5.005 version (5005threads) and an interpreter-based version
3220(ithreads) that has one interpreter per thread. Both are very
3221experimental. This arrangement exists to help developers work out
3222which one is better.
3223
3224If you're a casual user, you probably don't want interpreter-threads
3225at this time. There doesn't yet exist a way to create threads from
3226within Perl in this model, i.e., "use Thread;" will NOT work.
3227EOM
3228 : Default to ithreads unless overridden on command line or with
3229 : old config.sh
3230 dflt='y'
3231 case "$use5005threads" in
3232 $define|true|[yY]*) dflt='n';;
3233 esac
3234 case "$useithreads" in
3235 $undef|false|[nN]*) dflt='n';;
3236 esac
3237 rp='Use interpreter-based ithreads?'
3238 . ./myread
3239 case "$ans" in
3240 y|Y) val="$define" ;;
3241 *) val="$undef" ;;
3242 esac
3243 set useithreads
3244 eval $setvar
3245 : Now set use5005threads to the opposite value.
3246 case "$useithreads" in
3247 $define) val="$undef" ;;
3248 *) val="$define" ;;
3249 esac
3250 set use5005threads
3251 eval $setvar
3252 ;;
3253*)
3254 useithreads="$undef"
3255 use5005threads="$undef"
3256 ;;
3257esac
3258
c915ce7f
JH
3259case "$useithreads$use5005threads" in
3260"$define$define")
3261 $cat >&4 <<EOM
3262
3263You cannot have both the ithreads and the 5.005 threads enabled
3264at the same time. Disabling the 5.005 threads since they are
3265much less stable than the ithreads.
3266
3267EOM
3268 use5005threads="$undef"
3269 ;;
3270esac
3271
b4eb6b3d
JH
3272case "$d_oldpthreads" in
3273'') : Configure tests would be welcome here. For now, assume undef.
3274 val="$undef" ;;
3275*) val="$d_oldpthreads" ;;
3276esac
3277set d_oldpthreads
3278eval $setvar
3279
3280
3281case "$usethreads" in
3282"$define"|true|[yY]*)
3283: Look for a hint-file generated 'call-back-unit'. If the
3284: user has specified that a threading perl is to be built,
3285: we may need to set or change some other defaults.
3286 if $test -f usethreads.cbu; then
3287 echo "Your platform has some specific hints for threaded builds, using them..."
3288 . ./usethreads.cbu
3289 else
3290 $cat <<EOM
3291(Your platform doesn't have any specific hints for threaded builds.
3292 Assuming POSIX threads, then.)
3293EOM
3294 fi
3295 ;;
3296esac
3297
3298cat <<EOM
3299
3300Perl can be built so that multiple Perl interpreters can coexist
3301within the same Perl executable.
3302EOM
3303
3304case "$useithreads" in
3305$define)
3306 cat <<EOM
3307This multiple interpreter support is required for interpreter-based threads.
3308EOM
3309 val="$define"
3310 ;;
3311*) case "$usemultiplicity" in
3312 $define|true|[yY]*) dflt='y';;
3313 *) dflt='n';;
3314 esac
3315 echo " "
3316 echo "If this doesn't make any sense to you, just accept the default '$dflt'."
3317 rp='Build Perl for multiplicity?'
3318 . ./myread
3319 case "$ans" in
3320 y|Y) val="$define" ;;
3321 *) val="$undef" ;;
3322 esac
3323 ;;
3324esac
3325set usemultiplicity
3326eval $setvar
3327
96056487
JH
3328
3329case "$usemorebits" in
3330"$define"|true|[yY]*)
3331 use64bitint="$define"
3332 uselongdouble="$define"
3333 usemorebits="$define"
3334 ;;
3335*) usemorebits="$undef"
3336 ;;
3337esac
3338
e5e20432
JH
3339: make some quick guesses about what we are up against
3340echo " "
3341$echo $n "Hmm... $c"
3342echo exit 1 >bsd
3343echo exit 1 >usg
3344echo exit 1 >v7
3345echo exit 1 >osf1
3346echo exit 1 >eunice
3347echo exit 1 >xenix
3348echo exit 1 >venix
3349echo exit 1 >os2
3350d_bsd="$undef"
3351$cat /usr/include/signal.h /usr/include/sys/signal.h >foo 2>/dev/null
3352if test -f /osf_boot || $contains 'OSF/1' /usr/include/ctype.h >/dev/null 2>&1
3353then
3354 echo "Looks kind of like an OSF/1 system, but we'll see..."
3355 echo exit 0 >osf1
381aa1ff 3356elif test `echo abc | $tr a-z A-Z` = Abc ; then
e5e20432
JH
3357 xxx=`./loc addbib blurfl $pth`
3358 if $test -f $xxx; then
3359 echo "Looks kind of like a USG system with BSD features, but we'll see..."
3360 echo exit 0 >bsd
3361 echo exit 0 >usg
3362 else
3363 if $contains SIGTSTP foo >/dev/null 2>&1 ; then
3364 echo "Looks kind of like an extended USG system, but we'll see..."
3365 else
3366 echo "Looks kind of like a USG system, but we'll see..."
3367 fi
3368 echo exit 0 >usg
3369 fi
3370elif $contains SIGTSTP foo >/dev/null 2>&1 ; then
3371 echo "Looks kind of like a BSD system, but we'll see..."
3372 d_bsd="$define"
3373 echo exit 0 >bsd
3374else
3375 echo "Looks kind of like a Version 7 system, but we'll see..."
3376 echo exit 0 >v7
3377fi
3378case "$eunicefix" in
3379*unixtovms*)
3380 $cat <<'EOI'
3381There is, however, a strange, musty smell in the air that reminds me of
3382something...hmm...yes...I've got it...there's a VMS nearby, or I'm a Blit.
3383EOI
3384 echo exit 0 >eunice
3385 d_eunice="$define"
3386: it so happens the Eunice I know will not run shell scripts in Unix format
3387 ;;
3388*)
3389 echo " "
3390 echo "Congratulations. You aren't running Eunice."
3391 d_eunice="$undef"
3392 ;;
3393esac
3394: Detect OS2. The p_ variable is set above in the Head.U unit.
3d5d58b1
JH
3395: Note that this also -- wrongly -- detects e.g. dos-djgpp, which also uses
3396: semicolon as a patch separator
e5e20432
JH
3397case "$p_" in
3398:) ;;
3399*)
3400 $cat <<'EOI'
3401I have the feeling something is not exactly right, however...don't tell me...
3402lemme think...does HAL ring a bell?...no, of course, you're only running OS/2!
3d5d58b1 3403(Or you may be running DOS with DJGPP.)
e5e20432
JH
3404EOI
3405 echo exit 0 >os2
3406 ;;
3407esac
3408if test -f /xenix; then
3409 echo "Actually, this looks more like a XENIX system..."
3410 echo exit 0 >xenix
3411 d_xenix="$define"
3412else
3413 echo " "
3414 echo "It's not Xenix..."
3415 d_xenix="$undef"
3416fi
3417chmod +x xenix
3418$eunicefix xenix
3419if test -f /venix; then
3420 echo "Actually, this looks more like a VENIX system..."
3421 echo exit 0 >venix
3422else
3423 echo " "
3424 if ./xenix; then
3425 : null
3426 else
3427 echo "Nor is it Venix..."
3428 fi
3429fi
3430chmod +x bsd usg v7 osf1 eunice xenix venix os2
3431$eunicefix bsd usg v7 osf1 eunice xenix venix os2
3432$rm -f foo
3433
5869b1f1
JH
3434case "$cc" in
3435'') dflt=cc;;
3436*) dflt="$cc";;
3437esac
3438rp="Use which C compiler?"
3439. ./myread
3440cc="$ans"
e5e20432
JH
3441: Look for a hint-file generated 'call-back-unit'. Now that the
3442: user has specified the compiler, we may need to set or change some
3443: other defaults.
3444if $test -f cc.cbu; then
3445 . ./cc.cbu
3446fi
2573c5f9 3447. ./checkcc
8a27cf78 3448
e5e20432
JH
3449echo " "
3450echo "Checking for GNU cc in disguise and/or its version number..." >&4
5440bc8e 3451$cat >try.c <<EOM
e5e20432
JH
3452#include <stdio.h>
3453int main() {
3454#ifdef __GNUC__
3455#ifdef __VERSION__
3456 printf("%s\n", __VERSION__);
3457#else
3458 printf("%s\n", "1");
3459#endif
3460#endif
3461 exit(0);
3462}
3463EOM
5440bc8e
JH
3464if $cc -o try $ccflags $ldflags try.c; then
3465 gccversion=`$run ./try`
e5e20432
JH
3466 case "$gccversion" in
3467 '') echo "You are not using GNU cc." ;;
fc68435e 3468 *) echo "You are using GNU cc $gccversion."
e723fc21 3469 ccname=gcc
fc68435e 3470 ;;
e5e20432
JH
3471 esac
3472else
3473 echo " "
3474 echo "*** WHOA THERE!!! ***" >&4
3475 echo " Your C compiler \"$cc\" doesn't seem to be working!" >&4
3476 case "$knowitall" in
3477 '')
3478 echo " You'd better start hunting for one and let me know about it." >&4
3479 exit 1
3480 ;;
3481 esac
3482fi
5440bc8e 3483$rm -f try try.*
e5e20432
JH
3484case "$gccversion" in
34851*) cpp=`./loc gcc-cpp $cpp $pth` ;;
3486esac
5b463ca7
KS
3487case "$gccversion" in
3488'') gccosandvers='' ;;
10b4ebb5
JH
3489*) gccshortvers=`echo "$gccversion"|sed 's/ .*//'`
3490 gccosandvers=`$cc -v 2>&1|grep '/specs$'|sed "s!.*/[^-/]*-[^-/]*-\([^-/]*\)/$gccshortvers/specs!\1!"`
3491 gccshortvers=''
5b463ca7 3492 case "$gccosandvers" in
02903077
JH
3493 $osname) gccosandvers='' ;; # linux gccs seem to have no linux osvers, grr
3494 $osname$osvers) ;; # looking good
5b463ca7
KS
3495 $osname*) cat <<EOM >&4
3496
3497*** WHOA THERE!!! ***
3498
3499 Your gcc has not been compiled for the exact release of
3500 your operating system ($gccosandvers versus $osname$osvers).
3501
3502 In general it is a good idea to keep gcc synchronized with
3503 the operating system because otherwise serious problems
3504 may ensue when trying to compile software, like Perl.
3505
3506 I'm trying to be optimistic here, though, and will continue.
3507 If later during the configuration and build icky compilation
02903077
JH
3508 problems appear (headerfile conflicts being the most common
3509 manifestation), I suggest reinstalling the gcc to match
5b463ca7
KS
3510 your operating system release.
3511
3512EOM
3513 ;;
81575342 3514 *) gccosandvers='' ;; # failed to parse, better be silent
5b463ca7
KS
3515 esac
3516 ;;
3517esac
e723fc21
JH
3518case "$ccname" in
3519'') ccname="$cc" ;;
3520esac
e5e20432 3521
640374d0
JH
3522case "$gccversion" in
3523'') ;;
3524*) case "$ccflags" in
3525 *-Wall*) ;;
a126002e 3526 *) ccflags="$ccflags -Wall" ;;
640374d0
JH
3527 esac
3528 ;;
3529esac
3530
bd9b35c9
JH
3531: decide how portable to be. Allow command line overrides.
3532case "$d_portable" in
3533"$undef") ;;
3534*) d_portable="$define" ;;
104d25b7 3535esac
85ab1d1d 3536
bd9b35c9
JH
3537: set up shell script to do ~ expansion
3538cat >filexp <<EOSS
3539$startsh
3540: expand filename
3541case "\$1" in
3542 ~/*|~)
3543 echo \$1 | $sed "s|~|\${HOME-\$LOGDIR}|"
3544 ;;
3545 ~*)
3546 if $test -f /bin/csh; then
3547 /bin/csh -f -c "glob \$1"
3548 failed=\$?
3549 echo ""
3550 exit \$failed
e5e20432 3551 else
bd9b35c9
JH
3552 name=\`$expr x\$1 : '..\([^/]*\)'\`
3553 dir=\`$sed -n -e "/^\${name}:/{s/^[^:]*:[^:]*:[^:]*:[^:]*:[^:]*:\([^:]*\).*"'\$'"/\1/" -e p -e q -e '}' </etc/passwd\`
3554 if $test ! -d "\$dir"; then
3555 me=\`basename \$0\`
3556 echo "\$me: can't locate home directory for: \$name" >&2
3557 exit 1
3558 fi
3559 case "\$1" in
3560 */*)
3561 echo \$dir/\`$expr x\$1 : '..[^/]*/\(.*\)'\`
3562 ;;
3563 *)
3564 echo \$dir
e5e20432
JH
3565 ;;
3566 esac
3567 fi
b691c02f 3568 ;;
4633a7c4 3569*)
bd9b35c9 3570 echo \$1
2304df62
AD
3571 ;;
3572esac
4633a7c4
LW
3573EOSS
3574chmod +x filexp
3575$eunicefix filexp
2304df62
AD
3576
3577: now set up to get a file name
28757baa 3578cat <<EOS >getfile
3579$startsh
3580EOS
3581cat <<'EOSC' >>getfile
2304df62
AD
3582tilde=''
3583fullpath=''
3584already=''
3585skip=''
3586none_ok=''
3587exp_file=''
a0d0e21e 3588nopath_ok=''
2304df62
AD
3589orig_rp="$rp"
3590orig_dflt="$dflt"
b233458b
JH
3591case "$gfpth" in
3592'') gfpth='.' ;;
3593esac
2304df62
AD
3594
3595case "$fn" in
ecfc5424 3596*\(*)
381aa1ff 3597 expr $fn : '.*(\(.*\)).*' | $tr ',' $trnl >getfile.ok
ecfc5424
AD
3598 fn=`echo $fn | sed 's/(.*)//'`
3599 ;;
3600esac
3601
3602case "$fn" in
a0d0e21e
LW
3603*:*)
3604 loc_file=`expr $fn : '.*:\(.*\)'`
3605 fn=`expr $fn : '\(.*\):.*'`
3606 ;;
3607esac
3608
3609case "$fn" in
2304df62
AD
3610*~*) tilde=true;;
3611esac
3612case "$fn" in
3613*/*) fullpath=true;;
3614esac
3615case "$fn" in
3616*+*) skip=true;;
3617esac
3618case "$fn" in
3619*n*) none_ok=true;;
3620esac
3621case "$fn" in
3622*e*) exp_file=true;;
3623esac
a0d0e21e
LW
3624case "$fn" in
3625*p*) nopath_ok=true;;
3626esac
2304df62
AD
3627
3628case "$fn" in
3629*f*) type='File';;
3630*d*) type='Directory';;
a0d0e21e 3631*l*) type='Locate';;
2304df62
AD
3632esac
3633
3634what="$type"
3635case "$what" in
3636Locate) what='File';;
3637esac
3638
3639case "$exp_file" in
3640'')
3641 case "$d_portable" in
3642 "$define") ;;
3643 *) exp_file=true;;
3644 esac
3645 ;;
3646esac
3647
3648cd ..
3649while test "$type"; do
3650 redo=''
3651 rp="$orig_rp"
3652 dflt="$orig_dflt"
3653 case "$tilde" in
3654 true) rp="$rp (~name ok)";;
3655 esac
3656 . UU/myread
ecfc5424
AD
3657 if test -f UU/getfile.ok && \
3658 $contains "^$ans\$" UU/getfile.ok >/dev/null 2>&1
3659 then
3660 value="$ans"
3661 ansexp="$ans"
3662 break
3663 fi
2304df62
AD
3664 case "$ans" in
3665 none)
3666 value=''
3667 ansexp=''
3668 case "$none_ok" in
3669 true) type='';;
3670 esac
3671 ;;
3672 *)
3673 case "$tilde" in
3674 '') value="$ans"
3675 ansexp="$ans";;
3676 *)
3677 value=`UU/filexp $ans`
3678 case $? in
3679 0)
3680 if test "$ans" != "$value"; then
ecfc5424 3681 echo "(That expands to $value on this system.)"
2304df62
AD
3682 fi
3683 ;;
3684 *) value="$ans";;
3685 esac
3686 ansexp="$value"
3687 case "$exp_file" in
3688 '') value="$ans";;
3689 esac
3690 ;;
3691 esac
3692 case "$fullpath" in
3693 true)
3694 case "$ansexp" in
3695 /*) value="$ansexp" ;;
23da6c43 3696 [a-zA-Z]:/*) value="$ansexp" ;;
2304df62
AD
3697 *)
3698 redo=true
3699 case "$already" in
3700 true)
3701 echo "I shall only accept a full path name, as in /bin/ls." >&4
3702 echo "Use a ! shell escape if you wish to check pathnames." >&4
3703 ;;
3704 *)
3705 echo "Please give a full path name, starting with slash." >&4
3706 case "$tilde" in
3707 true)
3708 echo "Note that using ~name is ok provided it expands well." >&4
3709 already=true
3710 ;;
3711 esac
3712 esac
3713 ;;
3714 esac
3715 ;;
3716 esac
3717 case "$redo" in
3718 '')
3719 case "$type" in
3720 File)
b233458b
JH
3721 for fp in $gfpth; do
3722 if test "X$fp" = X.; then
3723 pf="$ansexp"
3724 else
3725 pf="$fp/$ansexp"
3726 fi
3727 if test -f "$pf"; then
3728 type=''
3729 elif test -r "$pf" || (test -h "$pf") >/dev/null 2>&1
3730 then
3731 echo "($value is not a plain file, but that's ok.)"
3732 type=''
3733 fi
3734 if test X"$type" = X; then
3735 value="$pf"
3736 break
3737 fi
3738 done
2304df62
AD
3739 ;;
3740 Directory)
b233458b
JH
3741 for fp in $gfpth; do
3742 if test "X$fp" = X.; then
f78bfc9c
JH
3743 dir="$ans"
3744 direxp="$ansexp"
b233458b 3745 else
dd858076 3746 dir="$fp/$ansexp"
f78bfc9c 3747 direxp="$fp/$ansexp"
b233458b 3748 fi
f78bfc9c 3749 if test -d "$direxp"; then
b233458b 3750 type=''
f78bfc9c 3751 value="$dir"
b233458b
JH
3752 break
3753 fi
3754 done
2304df62
AD
3755 ;;
3756 Locate)
40000a8c 3757 if test -d "$ansexp"; then
a0d0e21e
LW
3758 echo "(Looking for $loc_file in directory $value.)"
3759 value="$value/$loc_file"
40000a8c 3760 ansexp="$ansexp/$loc_file"
2304df62 3761 fi
40000a8c 3762 if test -f "$ansexp"; then
2304df62
AD
3763 type=''
3764 fi
a0d0e21e
LW
3765 case "$nopath_ok" in
3766 true) case "$value" in
3767 */*) ;;
3768 *) echo "Assuming $value will be in people's path."
3769 type=''
3770 ;;
3771 esac
3772 ;;
3773 esac
2304df62
AD
3774 ;;
3775 esac
3776
3777 case "$skip" in
3778 true) type='';
3779 esac
3780
3781 case "$type" in
3782 '') ;;
3783 *)
3784 if test "$fastread" = yes; then
3785 dflt=y
3786 else
3787 dflt=n
3788 fi
3789 rp="$what $value doesn't exist. Use that name anyway?"
3790 . UU/myread
3791 dflt=''
3792 case "$ans" in
3793 y*) type='';;
3794 *) echo " ";;
3795 esac
3796 ;;
3797 esac
3798 ;;
3799 esac
3800 ;;
3801 esac
3802done
3803cd UU
3804ans="$value"
3805rp="$orig_rp"
3806dflt="$orig_dflt"
ecfc5424 3807rm -f getfile.ok
b233458b 3808test "X$gfpthkeep" != Xy && gfpth=""
2304df62
AD
3809EOSC
3810
bd9b35c9
JH
3811: What should the include directory be ?
3812echo " "
3813$echo $n "Hmm... $c"
3814dflt='/usr/include'
3815incpath=''
3816mips_type=''
3817if $test -f /bin/mips && /bin/mips; then
3818 echo "Looks like a MIPS system..."
3819 $cat >usr.c <<'EOCP'
3820#ifdef SYSTYPE_BSD43
3821/bsd43
3822#endif
3823EOCP
8a27cf78 3824 if cc -E usr.c > usr.out && $contains / usr.out >/dev/null 2>&1; then
bd9b35c9
JH
3825 dflt='/bsd43/usr/include'
3826 incpath='/bsd43'
3827 mips_type='BSD 4.3'
3828 else
3829 mips_type='System V'
3830 fi
3831 $rm -f usr.c usr.out
3832 echo "and you're compiling with the $mips_type compiler and libraries."
3833 xxx_prompt=y
3834 echo "exit 0" >mips
3835else
3836 echo "Doesn't look like a MIPS system."
3837 xxx_prompt=n
3838 echo "exit 1" >mips
3839fi
3840chmod +x mips
3841$eunicefix mips
3842case "$usrinc" in
3843'') ;;
3844*) dflt="$usrinc";;
3845esac
3846case "$xxx_prompt" in
3847y) fn=d/
3848 echo " "
3849 rp='Where are the include files you want to use?'
3850 . ./getfile
3851 usrinc="$ans"
8e07c86e 3852 ;;
bd9b35c9 3853*) usrinc="$dflt"
8e07c86e
AD
3854 ;;
3855esac
2304df62 3856
96056487
JH
3857: see how we invoke the C preprocessor
3858echo " "
3859echo "Now, how can we feed standard input to your C preprocessor..." >&4
3860cat <<'EOT' >testcpp.c
3861#define ABC abc
3862#define XYZ xyz
3863ABC.XYZ
3864EOT
3865cd ..
3866if test ! -f cppstdin; then
3867 if test "X$osname" = "Xaix" -a "X$gccversion" = X; then
3868 # AIX cc -E doesn't show the absolute headerfile
3869 # locations but we'll cheat by using the -M flag.
3870 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
3871 else
3872 echo 'cat >.$$.c; '"$cc"' -E ${1+"$@"} .$$.c; rm .$$.c' >cppstdin
3873 fi
3874else
3875 echo "Keeping your $hint cppstdin wrapper."
3876fi
3877chmod 755 cppstdin
3878wrapper=`pwd`/cppstdin
3879ok='false'
3880cd UU
3881
3882if $test "X$cppstdin" != "X" && \
3883 $cppstdin $cppminus <testcpp.c >testcpp.out 2>&1 && \
3884 $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1
3885then
3886 echo "You used to use $cppstdin $cppminus so we'll use that again."
3887 case "$cpprun" in
3888 '') echo "But let's see if we can live without a wrapper..." ;;
3889 *)
3890 if $cpprun $cpplast <testcpp.c >testcpp.out 2>&1 && \
3891 $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1
3892 then
3893 echo "(And we'll use $cpprun $cpplast to preprocess directly.)"
3894 ok='true'
3895 else
3896 echo "(However, $cpprun $cpplast does not work, let's see...)"
3897 fi
3898 ;;
3899 esac
3900else
3901 case "$cppstdin" in
3902 '') ;;
3903 *)
3904 echo "Good old $cppstdin $cppminus does not seem to be of any help..."
3905 ;;
3906 esac
3907fi
3908
3909if $ok; then
3910 : nothing
3911elif echo 'Maybe "'"$cc"' -E" will work...'; \
3912 $cc -E <testcpp.c >testcpp.out 2>&1; \
3913 $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3914 echo "Yup, it does."
3915 x_cpp="$cc -E"
3916 x_minus='';
3917elif echo 'Nope...maybe "'"$cc"' -E -" will work...'; \
3918 $cc -E - <testcpp.c >testcpp.out 2>&1; \
3919 $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3920 echo "Yup, it does."
3921 x_cpp="$cc -E"
3922 x_minus='-';
3923elif echo 'Nope...maybe "'"$cc"' -P" will work...'; \
3924 $cc -P <testcpp.c >testcpp.out 2>&1; \
3925 $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3926 echo "Yipee, that works!"
3927 x_cpp="$cc -P"
3928 x_minus='';
3929elif echo 'Nope...maybe "'"$cc"' -P -" will work...'; \
3930 $cc -P - <testcpp.c >testcpp.out 2>&1; \
3931 $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3932 echo "At long last!"
3933 x_cpp="$cc -P"
3934 x_minus='-';
3935elif echo 'No such luck, maybe "'$cpp'" will work...'; \
3936 $cpp <testcpp.c >testcpp.out 2>&1; \
3937 $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3938 echo "It works!"
3939 x_cpp="$cpp"
3940 x_minus='';
3941elif echo 'Nixed again...maybe "'$cpp' -" will work...'; \
3942 $cpp - <testcpp.c >testcpp.out 2>&1; \
3943 $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3944 echo "Hooray, it works! I was beginning to wonder."
3945 x_cpp="$cpp"
3946 x_minus='-';
3947elif echo 'Uh-uh. Time to get fancy. Trying a wrapper...'; \
3948 $wrapper <testcpp.c >testcpp.out 2>&1; \
3949 $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3950 x_cpp="$wrapper"
3951 x_minus=''
3952 echo "Eureka!"
3953else
3954 dflt=''
3955 rp="No dice. I can't find a C preprocessor. Name one:"
3956 . ./myread
3957 x_cpp="$ans"
3958 x_minus=''
3959 $x_cpp <testcpp.c >testcpp.out 2>&1
3960 if $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3961 echo "OK, that will do." >&4
3962 else
3963echo "Sorry, I can't get that to work. Go find one and rerun Configure." >&4
3964 exit 1
3965 fi
3966fi
3967
3968case "$ok" in
3969false)
3970 cppstdin="$x_cpp"
3971 cppminus="$x_minus"
3972 cpprun="$x_cpp"
3973 cpplast="$x_minus"
3974 set X $x_cpp
3975 shift
3976 case "$1" in
3977 "$cpp")
3978 echo "Perhaps can we force $cc -E using a wrapper..."
3979 if $wrapper <testcpp.c >testcpp.out 2>&1; \
3980 $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1
3981 then
3982 echo "Yup, we can."
3983 cppstdin="$wrapper"
3984 cppminus='';
3985 else
3986 echo "Nope, we'll have to live without it..."
3987 fi
3988 ;;
3989 esac
3990 case "$cpprun" in
3991 "$wrapper")
3992 cpprun=''
3993 cpplast=''
3994 ;;
3995 esac
3996 ;;
3997esac
3998
3999case "$cppstdin" in
4000"$wrapper"|'cppstdin') ;;
4001*) $rm -f $wrapper;;
4002esac
4003$rm -f testcpp.c testcpp.out
4004
bd9b35c9
JH
4005: Set private lib path
4006case "$plibpth" in
4007'') if ./mips; then
4008 plibpth="$incpath/usr/lib /usr/local/lib /usr/ccs/lib"
4009 fi;;
4010esac
4011case "$libpth" in
4012' ') dlist='';;
4013'') dlist="$loclibpth $plibpth $glibpth";;
4014*) dlist="$libpth";;
4015esac
4016
4017: Now check and see which directories actually exist, avoiding duplicates
4018libpth=''
4019for xxx in $dlist
4020do
4021 if $test -d $xxx; then
4022 case " $libpth " in
4023 *" $xxx "*) ;;
4024 *) libpth="$libpth $xxx";;
4025 esac
4026 fi
4027done
4028$cat <<'EOM'
4029
4030Some systems have incompatible or broken versions of libraries. Among
4031the directories listed in the question below, please remove any you
4032know not to be holding relevant libraries, and add any that are needed.
4033Say "none" for none.
8e07c86e
AD
4034
4035EOM
bd9b35c9
JH
4036case "$libpth" in
4037'') dflt='none';;
8e07c86e 4038*)
bd9b35c9
JH
4039 set X $libpth
4040 shift
4041 dflt=${1+"$@"}
8e07c86e 4042 ;;
a0d0e21e 4043esac
bd9b35c9
JH
4044rp="Directories to use for library searches?"
4045. ./myread
4046case "$ans" in
4047none) libpth=' ';;
4048*) libpth="$ans";;
4049esac
a0d0e21e 4050
bd9b35c9
JH
4051: compute shared library extension
4052case "$so" in
4053'')
4054 if xxx=`./loc libc.sl X $libpth`; $test -f "$xxx"; then
4055 dflt='sl'
dd4e71fd 4056 else
bd9b35c9 4057 dflt='so'
dd4e71fd
JH
4058 fi
4059 ;;
bd9b35c9 4060*) dflt="$so";;
dd4e71fd 4061esac
dd4e71fd
JH
4062$cat <<EOM
4063
bd9b35c9 4064On some systems, shared libraries may be available. Answer 'none' if
7f95ee77 4065you want to suppress searching of shared libraries for the remainder
bd9b35c9 4066of this configuration.
dd4e71fd
JH
4067
4068EOM
bd9b35c9
JH
4069rp='What is the file extension used for shared libraries?'
4070. ./myread
4071so="$ans"
dd4e71fd 4072
bd9b35c9
JH
4073: Define several unixisms.
4074: Hints files or command line option can be used to override them.
4075: The convoluted testing is in case hints files set either the old
4076: or the new name.
4077case "$_exe" in
4078'') case "$exe_ext" in
4079 '') ;;
4080 *) _exe="$exe_ext" ;;
dd4e71fd 4081 esac
bd9b35c9 4082 ;;
bfb7748a 4083esac
bd9b35c9
JH
4084case "$_a" in
4085'') case "$lib_ext" in
4086 '') _a='.a';;
4087 *) _a="$lib_ext" ;;
dd4e71fd
JH
4088 esac
4089 ;;
dd4e71fd 4090esac
bd9b35c9
JH
4091case "$_o" in
4092'') case "$obj_ext" in
4093 '') _o='.o';;
4094 *) _o="$obj_ext";;
4095 esac
4096 ;;
4097esac
4098case "$p_" in
4099'') case "$path_sep" in
4100 '') p_=':';;
4101 *) p_="$path_sep";;
4102 esac
4103 ;;
4104esac
4105exe_ext=$_exe
4106lib_ext=$_a
4107obj_ext=$_o
4108path_sep=$p_
dd4e71fd 4109
b4eb6b3d
JH
4110: Which makefile gets called first. This is used by make depend.
4111case "$firstmakefile" in
4112'') firstmakefile='makefile';;
4633a7c4 4113esac
4633a7c4 4114
0f0995ae
JH
4115case "$usesocks" in
4116$define|true|[yY]*) dflt='y';;
4117*) dflt='n';;
4118esac
bd9b35c9 4119cat <<EOM
4633a7c4 4120
bd9b35c9 4121Perl can be built to use the SOCKS proxy protocol library. To do so,
cf829ab0
JH
4122Configure must be run with -Dusesocks. If you use SOCKS you also need
4123to use the PerlIO abstraction layer, this will be implicitly selected.
4633a7c4 4124
0f0995ae 4125If this doesn't make any sense to you, just accept the default '$dflt'.
bd9b35c9 4126EOM
bd9b35c9
JH
4127rp='Build Perl for SOCKS?'
4128. ./myread
4129case "$ans" in
4130y|Y) val="$define" ;;
4131*) val="$undef" ;;
4132esac
4133set usesocks
4134eval $setvar
4135
cf829ab0
JH
4136case "$usesocks" in
4137$define|true|[yY]*) useperlio="$define";;
4138esac
4139
bd9b35c9
JH
4140: Looking for optional libraries
4141echo " "
4142echo "Checking for optional libraries..." >&4
4143case "$libs" in
4144' '|'') dflt='';;
4145*) dflt="$libs";;
4146esac
4147case "$libswanted" in
4148'') libswanted='c_s';;
4149esac
4150case "$usesocks" in
923fc586 4151"$define") libswanted="$libswanted socks5 socks5_sh" ;;
8e07c86e 4152esac
68435ea7
JH
4153libsfound=''
4154libsfiles=''
4155libsdirs=''
13b3f787
JH
4156libspath=''
4157for thisdir in $libpth $xlibpth; do
4158 test -d $thisdir && libspath="$libspath $thisdir"
4159done
bd9b35c9 4160for thislib in $libswanted; do
13b3f787 4161 for thisdir in $libspath; do
f7dd4e7f
JH
4162 xxx=''
4163 if $test ! -f "$xxx" -a "X$ignore_versioned_solibs" = "X"; then
4164 xxx=`ls $thisdir/lib$thislib.$so.[0-9] 2>/dev/null|tail -1`
4165 $test -f "$xxx" && eval $libscheck
4166 $test -f "$xxx" && libstyle=shared
4167 fi
4168 if test ! -f "$xxx"; then
4169 xxx=$thisdir/lib$thislib.$so
4170 $test -f "$xxx" && eval $libscheck
4171 $test -f "$xxx" && libstyle=shared
4172 fi
4173 if test ! -f "$xxx"; then
4174 xxx=$thisdir/lib$thislib$_a
4175 $test -f "$xxx" && eval $libscheck
4176 $test -f "$xxx" && libstyle=static
4177 fi
4178 if test ! -f "$xxx"; then
4179 xxx=$thisdir/$thislib$_a
4180 $test -f "$xxx" && eval $libscheck
4181 $test -f "$xxx" && libstyle=static
4182 fi
4183 if test ! -f "$xxx"; then
4184 xxx=$thisdir/lib${thislib}_s$_a
4185 $test -f "$xxx" && eval $libscheck
4186 $test -f "$xxx" && libstyle=static
09ea5ba9 4187 $test -f "$xxx" && thislib=${thislib}_s
f7dd4e7f
JH
4188 fi
4189 if test ! -f "$xxx"; then
4190 xxx=$thisdir/Slib$thislib$_a
4191 $test -f "$xxx" && eval $libscheck
4192 $test -f "$xxx" && libstyle=static
4193 fi
4194 if $test -f "$xxx"; then
43999f95 4195 case "$libstyle" in
f7dd4e7f
JH
4196 shared) echo "Found -l$thislib (shared)." ;;
4197 static) echo "Found -l$thislib." ;;
4198 *) echo "Found -l$thislib ($libstyle)." ;;
43999f95 4199 esac
bd9b35c9
JH
4200 case " $dflt " in
4201 *"-l$thislib "*);;
f7dd4e7f 4202 *) dflt="$dflt -l$thislib"
43999f95
JH
4203 libsfound="$libsfound $xxx"
4204 yyy=`basename $xxx`
4205 libsfiles="$libsfiles $yyy"
1e127011 4206 yyy=`echo $xxx|$sed -e "s%/$yyy\\$%%"`
43999f95
JH
4207 case " $libsdirs " in
4208 *" $yyy "*) ;;
4209 *) libsdirs="$libsdirs $yyy" ;;
4210 esac
4211 ;;
bd9b35c9 4212 esac
f7dd4e7f
JH
4213 break
4214 fi
4215 done
4216 if $test ! -f "$xxx"; then
4217 echo "No -l$thislib."
bd9b35c9
JH
4218 fi
4219done
4220set X $dflt
4221shift
4222dflt="$*"
4223case "$libs" in
4224'') dflt="$dflt";;
4225*) dflt="$libs";;
4226esac
4227case "$dflt" in
4228' '|'') dflt='none';;
4229esac
4633a7c4 4230
bd9b35c9 4231$cat <<EOM
4633a7c4 4232
bd9b35c9
JH
4233In order to compile $package on your machine, a number of libraries
4234are usually needed. Include any other special libraries here as well.
4235Say "none" for none. The default list is almost always right.
8e07c86e 4236EOM
8e07c86e 4237
bd9b35c9
JH
4238echo " "
4239rp="What libraries to use?"
4240. ./myread
4241case "$ans" in
4242none) libs=' ';;
4243*) libs="$ans";;
4244esac
d71b2b6b 4245
bd9b35c9
JH
4246: determine optimization, if desired, or use for debug flag also
4247case "$optimize" in
4248' '|$undef) dflt='none';;
4249'') dflt='-O';;
4250*) dflt="$optimize";;
4251esac
4252$cat <<EOH
d71b2b6b 4253
bd9b35c9
JH
4254By default, $package compiles with the -O flag to use the optimizer.
4255Alternately, you might want to use the symbolic debugger, which uses
4256the -g flag (on traditional Unix systems). Either flag can be
4257specified here. To use neither flag, specify the word "none".
d71b2b6b 4258
bd9b35c9
JH
4259EOH
4260rp="What optimizer/debugger flag should be used?"
4261. ./myread
4262optimize="$ans"
4263case "$optimize" in
4264'none') optimize=" ";;
4265esac
4266
4267dflt=''
4268: We will not override a previous value, but we might want to
4269: augment a hint file
4270case "$hint" in
4271default|recommended)
4272 case "$gccversion" in
4273 1*) dflt='-fpcc-struct-return' ;;
d71b2b6b 4274 esac
bd9b35c9
JH
4275 case "$optimize" in
4276 *-g*) dflt="$dflt -DDEBUGGING";;
d71b2b6b 4277 esac
bd9b35c9
JH
4278 case "$gccversion" in
4279 2*) if test -d /etc/conf/kconfig.d &&
4280 $contains _POSIX_VERSION $usrinc/sys/unistd.h >/dev/null 2>&1
4281 then
4282 dflt="$dflt -posix"
4283 fi
f0d04425 4284 ;;
bd9b35c9
JH
4285 esac
4286 case "$gccversion" in
4287 1*) ;;
4288 2.[0-8]*) ;;
4289 ?*) echo " "
4290 echo "Checking if your compiler accepts -fno-strict-aliasing" 2>&1
4291 echo 'int main(void) { return 0; }' > gcctest.c
4292 if $cc -O2 -fno-strict-aliasing -o gcctest gcctest.c; then
4293 echo "Yes, it does." 2>&1
4294 case "$ccflags" in
4295 *strict-aliasing*)
4296 echo "Leaving current flags $ccflags alone." 2>&1
4297 ;;
4298 *) dflt="$dflt -fno-strict-aliasing" ;;
4299 esac
4300 else
4301 echo "Nope, it doesn't, but that's ok." 2>&1
4302 fi
f0d04425 4303 ;;
e5e20432
JH
4304 esac
4305 ;;
4306esac
4307
bd9b35c9
JH
4308case "$mips_type" in
4309*BSD*|'') inclwanted="$locincpth $usrinc";;
4310*) inclwanted="$locincpth $inclwanted $usrinc/bsd";;
4311esac
4312for thisincl in $inclwanted; do
4313 if $test -d $thisincl; then
4314 if $test x$thisincl != x$usrinc; then
4315 case "$dflt" in
422af00a
LC
4316 *" -I$thisincl "*);;
4317 *) dflt="$dflt -I$thisincl ";;
bd9b35c9
JH
4318 esac
4319 fi
4320 fi
4321done
40a7a20a 4322
bd9b35c9
JH
4323inctest='if $contains $2 $usrinc/$1 >/dev/null 2>&1; then
4324 xxx=true;
4325elif $contains $2 $usrinc/sys/$1 >/dev/null 2>&1; then
4326 xxx=true;
4327else
4328 xxx=false;
4329fi;
4330if $xxx; then
4331 case "$dflt" in
4332 *$2*);;
4333 *) dflt="$dflt -D$2";;
4334 esac;
4335fi'
40a7a20a 4336
bd9b35c9 4337set signal.h LANGUAGE_C; eval $inctest
40a7a20a 4338
bd9b35c9
JH
4339case "$usesocks" in
4340$define)
4341 ccflags="$ccflags -DSOCKS"
4342 ;;
4343esac
40a7a20a 4344
bd9b35c9
JH
4345case "$hint" in
4346default|recommended) dflt="$ccflags $dflt" ;;
4347*) dflt="$ccflags";;
4348esac
40a7a20a 4349
bd9b35c9
JH
4350case "$dflt" in
4351''|' ') dflt=none;;
4352esac
422af00a 4353
bd9b35c9 4354$cat <<EOH
40a7a20a 4355
bd9b35c9
JH
4356Your C compiler may want other flags. For this question you should include
4357-I/whatever and -DWHATEVER flags and any other flags used by the C compiler,
4358but you should NOT include libraries or ld flags like -lwhatever. If you
4359want $package to honor its debug switch, you should include -DDEBUGGING here.
4360Your C compiler might also need additional flags, such as -D_POSIX_SOURCE.
40a7a20a 4361
bd9b35c9 4362To use no flags, specify the word "none".
40a7a20a 4363
bd9b35c9
JH
4364EOH
4365set X $dflt
4366shift
4367dflt=${1+"$@"}
4368rp="Any additional cc flags?"
4369. ./myread
4370case "$ans" in
4371none) ccflags='';;
4372*) ccflags="$ans";;
4373esac
8e07c86e 4374
bd9b35c9 4375: the following weeds options from ccflags that are of no interest to cpp
58e77565
JH
4376case "$cppflags" in
4377'') cppflags="$ccflags" ;;
4378*) cppflags="$cppflags $ccflags" ;;
4379esac
bd9b35c9
JH
4380case "$gccversion" in
43811*) cppflags="$cppflags -D__GNUC__"
4633a7c4 4382esac
bd9b35c9
JH
4383case "$mips_type" in
4384'');;
4385*BSD*) cppflags="$cppflags -DSYSTYPE_BSD43";;
4386esac
4387case "$cppflags" in
4388'');;
4389*)
4390 echo " "
4391 echo "Let me guess what the preprocessor flags are..." >&4
4392 set X $cppflags
4393 shift
4394 cppflags=''
4395 $cat >cpp.c <<'EOM'
4396#define BLURFL foo
8e07c86e 4397
bd9b35c9
JH
4398BLURFL xx LFRULB
4399EOM
4400 previous=''
4401 for flag in $*
4402 do
4403 case "$flag" in
4404 -*) ftry="$flag";;
4405 *) ftry="$previous $flag";;
4406 esac
4407 if $cppstdin -DLFRULB=bar $cppflags $ftry $cppminus <cpp.c \
4408 >cpp1.out 2>/dev/null && \
4409 $cpprun -DLFRULB=bar $cppflags $ftry $cpplast <cpp.c \
4410 >cpp2.out 2>/dev/null && \
4411 $contains 'foo.*xx.*bar' cpp1.out >/dev/null 2>&1 && \
4412 $contains 'foo.*xx.*bar' cpp2.out >/dev/null 2>&1
4413 then
4414 cppflags="$cppflags $ftry"
4415 previous=''
4416 else
4417 previous="$flag"
4418 fi
4419 done
4420 set X $cppflags
4421 shift
4422 cppflags=${1+"$@"}
4423 case "$cppflags" in
4424 *-*) echo "They appear to be: $cppflags";;
4425 esac
4426 $rm -f cpp.c cpp?.out
2afac517 4427 ;;
4428esac
8e07c86e 4429
bd9b35c9
JH
4430: flags used in final linking phase
4431case "$ldflags" in
4432'') if ./venix; then
4433 dflt='-i -z'
10a23457 4434 else
bd9b35c9 4435 dflt=''
10a23457 4436 fi
bd9b35c9
JH
4437 case "$ccflags" in
4438 *-posix*) dflt="$dflt -posix" ;;
c4f23d77 4439 esac
bd9b35c9
JH
4440 ;;
4441*) dflt="$ldflags";;
4442esac
4443
4444: Try to guess additional flags to pick up local libraries.
4445for thislibdir in $libpth; do
4446 case " $loclibpth " in
4447 *" $thislibdir "*)
4448 case "$dflt " in
4449 *"-L$thislibdir "*) ;;
4450 *) dflt="$dflt -L$thislibdir" ;;
4451 esac
c4f23d77
AD
4452 ;;
4453 esac
bd9b35c9 4454done
c4f23d77 4455
bd9b35c9
JH
4456case "$dflt" in
4457'') dflt='none' ;;
4458esac
c4f23d77 4459
bd9b35c9
JH
4460$cat <<EOH
4461
4462Your C linker may need flags. For this question you should
4463include -L/whatever and any other flags used by the C linker, but you
4464should NOT include libraries like -lwhatever.
4465
4466Make sure you include the appropriate -L/path flags if your C linker
4467does not normally search all of the directories you specified above,
4468namely
4469 $libpth
4470To use no flags, specify the word "none".
4471
4472EOH
4473
4474rp="Any additional ld flags (NOT including libraries)?"
4475. ./myread
4476case "$ans" in
4477none) ldflags='';;
4478*) ldflags="$ans";;
4479esac
4480rmlist="$rmlist pdp11"
4481
4482: coherency check
4483echo " "
4484echo "Checking your choice of C compiler and flags for coherency..." >&4
4485$cat > try.c <<'EOF'
4486#include <stdio.h>
4487int main() { printf("Ok\n"); exit(0); }
4488EOF
7a282f6d 4489set X $cc -o try $optimize $ccflags $ldflags try.c $libs
bd9b35c9
JH
4490shift
4491$cat >try.msg <<'EOM'
4492I've tried to compile and run the following simple program:
4493
4494EOM
4495$cat try.c >> try.msg
4496
4497$cat >> try.msg <<EOM
4498
4499I used the command:
4500
4501 $*
5440bc8e 4502 $run ./try
bd9b35c9
JH
4503
4504and I got the following output:
4505
4506EOM
4507dflt=y
73614538 4508if $sh -c "$cc -o try $optimize $ccflags $ldflags try.c $libs" >>try.msg 2>&1; then
5440bc8e
JH
4509 if $sh -c "$run ./try" >>try.msg 2>&1; then
4510 xxx=`$run ./try`
bd9b35c9
JH
4511 case "$xxx" in
4512 "Ok") dflt=n ;;
4513 *) echo 'The program compiled OK, but produced no output.' >> try.msg
4514 case " $libs " in
4515 *" -lsfio "*)
4516 cat >> try.msg <<'EOQS'
4517If $libs contains -lsfio, and sfio is mis-configured, then it
4518sometimes (apparently) runs and exits with a 0 status, but with no
4519output! It may have to do with sfio's use of _exit vs. exit.
4520
4521EOQS
4522 rp="You have a big problem. Shall I abort Configure"
4523 dflt=y
4524 ;;
4525 esac
4526 ;;
4527 esac
4528 else
4529 echo "The program compiled OK, but exited with status $?." >>try.msg
4530 rp="You have a problem. Shall I abort Configure"
4531 dflt=y
4532 fi
4533else
4534 echo "I can't compile the test program." >>try.msg
4535 rp="You have a BIG problem. Shall I abort Configure"
4536 dflt=y
4537fi
4538case "$dflt" in
4539y)
4540 $cat try.msg >&4
4541 case "$knowitall" in
4542 '')
4543 echo "(The supplied flags or libraries might be incorrect.)"
c4f23d77 4544 ;;
bd9b35c9 4545 *) dflt=n;;
c4f23d77 4546 esac
bd9b35c9
JH
4547 echo " "
4548 . ./myread
4549 case "$ans" in
4550 n*|N*) ;;
4551 *) echo "Ok. Stopping Configure." >&4
4552 exit 1
c4f23d77
AD
4553 ;;
4554 esac
4555 ;;
bd9b35c9 4556n) echo "OK, that should do.";;
c4f23d77 4557esac
bd9b35c9 4558$rm -f try try.* core
c4f23d77 4559
bd9b35c9
JH
4560: define a shorthand compile call
4561compile='
4562mc_file=$1;
4563shift;
08413ebc 4564$cc -o ${mc_file} $optimize $ccflags $ldflags $* ${mc_file}.c $libs > /dev/null 2>&1;'
bd9b35c9
JH
4565: define a shorthand compile call for compilations that should be ok.
4566compile_ok='
4567mc_file=$1;
4568shift;
7a282f6d 4569$cc -o ${mc_file} $optimize $ccflags $ldflags $* ${mc_file}.c $libs;'
8e07c86e 4570
b4eb6b3d 4571: check for lengths of integral types
bd9b35c9 4572echo " "
b4eb6b3d
JH
4573case "$intsize" in
4574'')
4575 echo "Checking to see how big your integers are..." >&4
5440bc8e 4576 $cat >try.c <<'EOCP'
bd9b35c9
JH
4577#include <stdio.h>
4578int main()
4579{
b4eb6b3d
JH
4580 printf("intsize=%d;\n", (int)sizeof(int));
4581 printf("longsize=%d;\n", (int)sizeof(long));
4582 printf("shortsize=%d;\n", (int)sizeof(short));
4583 exit(0);
bd9b35c9 4584}
b4eb6b3d 4585EOCP
5440bc8e
JH
4586 set try
4587 if eval $compile_ok && $run ./try > /dev/null; then
4588 eval `$run ./try`
b4eb6b3d
JH
4589 echo "Your integers are $intsize bytes long."
4590 echo "Your long integers are $longsize bytes long."
4591 echo "Your short integers are $shortsize bytes long."
4592 else
4593 $cat >&4 <<EOM
4594!
4595Help! I can't compile and run the intsize test program: please enlighten me!
4596(This is probably a misconfiguration in your system or libraries, and
4597you really ought to fix it. Still, I'll try anyway.)
4598!
bd9b35c9 4599EOM
b4eb6b3d
JH
4600 dflt=4
4601 rp="What is the size of an integer (in bytes)?"
96056487
JH
4602 . ./myread
4603 intsize="$ans"
4604 dflt=$intsize
4605 rp="What is the size of a long integer (in bytes)?"
4606 . ./myread
4607 longsize="$ans"
4608 dflt=2
4609 rp="What is the size of a short integer (in bytes)?"
4610 . ./myread
4611 shortsize="$ans"
b4eb6b3d
JH
4612 fi
4613 ;;
4614esac
96056487 4615$rm -f try try.*
b4eb6b3d 4616
8dfa8df9
JH
4617: check for void type
4618echo " "
4619echo "Checking to see how well your C compiler groks the void type..." >&4
4620case "$voidflags" in
4621'')
4622 $cat >try.c <<'EOCP'
4623#if TRY & 1
4624void sub() {
4625#else
4626sub() {
4627#endif
4628 extern void moo(); /* function returning void */
4629 void (*goo)(); /* ptr to func returning void */
4630#if TRY & 8
4631 void *hue; /* generic ptr */
4632#endif
4633#if TRY & 2
4634 void (*foo[10])();
4635#endif
4636
4637#if TRY & 4
4638 if(goo == moo) {
4639 exit(0);
4640 }
4641#endif
4642 exit(0);
4643}
4644int main() { sub(); }
4645EOCP
4646 if $cc $ccflags -c -DTRY=$defvoidused try.c >.out 2>&1 ; then
4647 voidflags=$defvoidused
4648 echo "Good. It appears to support void to the level $package wants.">&4
4649 if $contains warning .out >/dev/null 2>&1; then
4650 echo "However, you might get some warnings that look like this:"
4651 $cat .out
4652 fi
4653 else
4654echo "Hmm, your compiler has some difficulty with void. Checking further..." >&4
4655 if $cc $ccflags -c -DTRY=1 try.c >/dev/null 2>&1; then
4656 echo "It supports 1..."
4657 if $cc $ccflags -c -DTRY=3 try.c >/dev/null 2>&1; then
4658 echo "It also supports 2..."
4659 if $cc $ccflags -c -DTRY=7 try.c >/dev/null 2>&1; then
4660 voidflags=7
4661 echo "And it supports 4 but not 8 definitely."
4662 else
4663 echo "It doesn't support 4..."
4664 if $cc $ccflags -c -DTRY=11 try.c >/dev/null 2>&1; then
4665 voidflags=11
4666 echo "But it supports 8."
4667 else
4668 voidflags=3
4669 echo "Neither does it support 8."
4670 fi
4671 fi
4672 else
4673 echo "It does not support 2..."
4674 if $cc $ccflags -c -DTRY=13 try.c >/dev/null 2>&1; then
4675 voidflags=13
4676 echo "But it supports 4 and 8."
4677 else
4678 if $cc $ccflags -c -DTRY=5 try.c >/dev/null 2>&1; then
4679 voidflags=5
4680 echo "And it supports 4 but has not heard about 8."
4681 else
4682 echo "However it supports 8 but not 4."
4683 fi
4684 fi
4685 fi
4686 else
4687 echo "There is no support at all for void."
4688 voidflags=0
4689 fi
4690 fi
4691esac
4692case "$voidflags" in
4693"$defvoidused") ;;
4694*) $cat >&4 <<'EOM'
4695 Support flag bits are:
4696 1: basic void declarations.
4697 2: arrays of pointers to functions returning void.
4698 4: operations between pointers to and addresses of void functions.
4699 8: generic void pointers.
4700EOM
4701 dflt="$voidflags";
4702 rp="Your void support flags add up to what?"
4703 . ./myread
4704 voidflags="$ans"
4705 ;;
4706esac
4707$rm -f try.* .out
4708
4709: check for length of pointer
4710echo " "
4711case "$ptrsize" in
4712'')
4713 echo "Checking to see how big your pointers are..." >&4
4714 if test "$voidflags" -gt 7; then
4715 echo '#define VOID_PTR char *' > try.c
4716 else
4717 echo '#define VOID_PTR void *' > try.c
4718 fi
4719 $cat >>try.c <<'EOCP'
4720#include <stdio.h>
4721int main()
4722{
4723 printf("%d\n", (int)sizeof(VOID_PTR));
4724 exit(0);
4725}
4726EOCP
4727 set try
4728 if eval $compile_ok; then
5440bc8e 4729 ptrsize=`$run ./try`
8dfa8df9
JH
4730 echo "Your pointers are $ptrsize bytes long."
4731 else
4732 dflt='4'
4733 echo "(I can't seem to compile the test program. Guessing...)" >&4
4734 rp="What is the size of a pointer (in bytes)?"
4735 . ./myread
4736 ptrsize="$ans"
4737 fi
4738 ;;
4739esac
4740$rm -f try.c try
4741
4742: check for long long
4743echo " "
4744echo "Checking to see if you have long long..." >&4
4745echo 'int main() { long long x = 7; return 0; }' > try.c
4746set try
4747if eval $compile; then
4748 val="$define"
4749 echo "You have long long."
4750else
4751 val="$undef"
4752 echo "You do not have long long."
4753fi
4754$rm try.*
4755set d_longlong
4756eval $setvar
4757
4758: check for length of long long
4759case "${d_longlong}${longlongsize}" in
4760$define)
4761 echo " "
4762 echo "Checking to see how big your long longs are..." >&4
4763 $cat >try.c <<'EOCP'
4764#include <stdio.h>
4765int main()
4766{
4767 printf("%d\n", (int)sizeof(long long));
4768 return(0);
4769}
4770EOCP
4771 set try
4772 if eval $compile_ok; then
5440bc8e 4773 longlongsize=`$run ./try`
8dfa8df9
JH
4774 echo "Your long longs are $longlongsize bytes long."
4775 else
4776 dflt='8'
4777 echo " "
4778 echo "(I can't seem to compile the test program. Guessing...)"
4779 rp="What is the size of a long long (in bytes)?"
4780 . ./myread
4781 longlongsize="$ans"
4782 fi
4783 if $test "X$longsize" = "X$longlongsize"; then
4784 echo "(That isn't any different from an ordinary long.)"
4785 fi
4786 ;;
4787esac
4788$rm -f try.* try
4789
4790: determine filename position in cpp output
4791echo " "
4792echo "Computing filename position in cpp output for #include directives..." >&4
4793echo '#include <stdio.h>' > foo.c
4794$cat >fieldn <<EOF
4795$startsh
4796$cppstdin $cppflags $cppminus <foo.c 2>/dev/null | \
4797$grep '^[ ]*#.*stdio\.h' | \
4798while read cline; do
4799 pos=1
4800 set \$cline
4801 while $test \$# -gt 0; do
4802 if $test -r \`echo \$1 | $tr -d '"'\`; then
4803 echo "\$pos"
4804 exit 0
4805 fi
4806 shift
4807 pos=\`expr \$pos + 1\`
4808 done
4809done
4810EOF
4811chmod +x fieldn
4812fieldn=`./fieldn`
4813$rm -f foo.c fieldn
4814case $fieldn in
4815'') pos='???';;
48161) pos=first;;
48172) pos=second;;
48183) pos=third;;
4819*) pos="${fieldn}th";;
4820esac
4821echo "Your cpp writes the filename in the $pos field of the line."
4822
4823: locate header file
4824$cat >findhdr <<EOF
4825$startsh
4826wanted=\$1
4827name=''
4828for usrincdir in $usrinc
4829do
4830 if test -f \$usrincdir/\$wanted; then
4831 echo "\$usrincdir/\$wanted"
4832 exit 0
4833 fi
4834done
4835awkprg='{ print \$$fieldn }'
4836echo "#include <\$wanted>" > foo\$\$.c
4837$cppstdin $cppminus $cppflags < foo\$\$.c 2>/dev/null | \
4838$grep "^[ ]*#.*\$wanted" | \
4839while read cline; do
4840 name=\`echo \$cline | $awk "\$awkprg" | $tr -d '"'\`
4841 case "\$name" in
4842 *[/\\\\]\$wanted) echo "\$name"; exit 1;;
4843 *[\\\\/]\$wanted) echo "\$name"; exit 1;;
4844 *) exit 2;;
4845 esac;
4846done;
4847#
4848# status = 0: grep returned 0 lines, case statement not executed
4849# status = 1: headerfile found
4850# status = 2: while loop executed, no headerfile found
4851#
4852status=\$?
4853$rm -f foo\$\$.c;
4854if test \$status -eq 1; then
4855 exit 0;
4856fi
4857exit 1
4858EOF
4859chmod +x findhdr
4860
4861: define an alternate in-header-list? function
4862inhdr='echo " "; td=$define; tu=$undef; yyy=$@;
4863cont=true; xxf="echo \"<\$1> found.\" >&4";
4864case $# in 2) xxnf="echo \"<\$1> NOT found.\" >&4";;
4865*) xxnf="echo \"<\$1> NOT found, ...\" >&4";;
4866esac;
4867case $# in 4) instead=instead;; *) instead="at last";; esac;
4868while $test "$cont"; do
4869 xxx=`./findhdr $1`
4870 var=$2; eval "was=\$$2";
4871 if $test "$xxx" && $test -r "$xxx";
4872 then eval $xxf;
4873 eval "case \"\$$var\" in $undef) . ./whoa; esac"; eval "$var=\$td";
4874 cont="";
4875 else eval $xxnf;
4876 eval "case \"\$$var\" in $define) . ./whoa; esac"; eval "$var=\$tu"; fi;
4877 set $yyy; shift; shift; yyy=$@;
4878 case $# in 0) cont="";;
4879 2) xxf="echo \"but I found <\$1> $instead.\" >&4";
4880 xxnf="echo \"and I did not find <\$1> either.\" >&4";;
4881 *) xxf="echo \"but I found <\$1\> instead.\" >&4";
4882 xxnf="echo \"there is no <\$1>, ...\" >&4";;
4883 esac;
4884done;
4885while $test "$yyy";
4886do set $yyy; var=$2; eval "was=\$$2";
4887 eval "case \"\$$var\" in $define) . ./whoa; esac"; eval "$var=\$tu";
4888 set $yyy; shift; shift; yyy=$@;
4889done'
4890
4891: see if inttypes.h is available
4892: we want a real compile instead of Inhdr because some systems
4893: have an inttypes.h which includes non-existent headers
4894echo " "
4895$cat >try.c <<EOCP
4896#include <inttypes.h>
4897int main() {
4898 static int32_t foo32 = 0x12345678;
4899}
4900EOCP
4901set try
4902if eval $compile; then
4903 echo "<inttypes.h> found." >&4
4904 val="$define"
4905else
4906 echo "<inttypes.h> NOT found." >&4
4907 val="$undef"
4908fi
4909$rm -f try.c try
4910set i_inttypes
4911eval $setvar
4912
4913: check for int64_t
4914echo " "
4915echo "Checking to see if you have int64_t..." >&4
4916$cat >try.c <<EOCP
4917#include <sys/types.h>
4918#$i_inttypes I_INTTYPES
4919#ifdef I_INTTYPES
4920#include <inttypes.h>
4921#endif
4922int main() { int64_t x = 7; }
4923EOCP
4924set try
4925if eval $compile; then
4926 val="$define"
4927 echo "You have int64_t."
4928else
4929 val="$undef"
4930 echo "You do not have int64_t."
4931fi
4932$rm -f try try.*
4933set d_int64_t
4934eval $setvar
4935
4936
4937echo " "
4938echo "Checking which 64-bit integer type we could use..." >&4
4939
4940case "$intsize" in
49418) val=int
4942 set quadtype
4943 eval $setvar
4944 val='"unsigned int"'
4945 set uquadtype
4946 eval $setvar
4947 quadkind=1
4948 ;;
4949*) case "$longsize" in
4950 8) val=long
4951 set quadtype
4952 eval $setvar
4953 val='"unsigned long"'
4954 set uquadtype
4955 eval $setvar
4956 quadkind=2
4957 ;;
4958 *) case "$d_longlong:$longlongsize" in
4959 define:8)
4960 val='"long long"'
4961 set quadtype
4962 eval $setvar
4963 val='"unsigned long long"'
4964 set uquadtype
4965 eval $setvar
4966 quadkind=3
4967 ;;
4968 *) case "$d_int64_t" in
4969 define)
4970 val=int64_t
4971 set quadtype
4972 eval $setvar
4973 val=uint64_t
4974 set uquadtype
4975 eval $setvar
4976 quadkind=4
4977 ;;
4978 esac
4979 ;;
4980 esac
4981 ;;
4982 esac
4983 ;;
4984esac
4985
4986case "$quadtype" in
4987'') echo "Alas, no 64-bit integer types in sight." >&4
4988 d_quad="$undef"
4989 ;;
4990*) echo "We could use '$quadtype' for 64-bit integers." >&4
4991 d_quad="$define"
4992 ;;
4993esac
4994
b4eb6b3d
JH
4995
4996case "$uselonglong" in
4997"$define"|true|[yY]*)
4998 cat <<EOM >&4
4999
5000*** Configure -Duselonglong is deprecated, using -Duse64bitint instead.
5001EOM
5002 use64bitint="$define"
5003 ;;
5004esac
5005case "$use64bits" in
5006"$define"|true|[yY]*)
5007 cat <<EOM >&4
5008
5009*** Configure -Duse64bits is deprecated, using -Duse64bitint instead.
5010EOM
5011 use64bitint="$define"
5012 ;;
5013esac
5014case "$use64bitints" in
5015"$define"|true|[yY]*)
5016 cat <<EOM >&4
5017
5018*** There is no Configure -Duse64bitints, using -Duse64bitint instead.
5019EOM
5020 use64bitint="$define"
5021 ;;
5022esac
5023case "$use64bitsint" in
5024"$define"|true|[yY]*)
5025 cat <<EOM >&4
5026
5027*** There is no Configure -Duse64bitsint, using -Duse64bitint instead.
5028EOM
5029 use64bitint="$define"
5030 ;;
5031esac
5032case "$uselonglongs" in
5033"$define"|true|[yY]*)
5034 cat <<EOM >&4
5035
5036*** There is no Configure -Duselonglongs, using -Duse64bitint instead.
5037EOM
5038 use64bitint="$define"
5039 ;;
5040esac
5041case "$use64bitsall" in
5042"$define"|true|[yY]*)
5043 cat <<EOM >&4
5044
5045*** There is no Configure -Duse64bitsall, using -Duse64bitall instead.
5046EOM
5047 use64bitall="$define"
5048 ;;
5049esac
5050
5051case "$ccflags" in
5052*-DUSE_LONG_LONG*|*-DUSE_64_BIT_INT*|*-DUSE_64_BIT_ALL*) use64bitint="$define";;
5053esac
5054case "$use64bitall" in
5055"$define"|true|[yY]*) use64bitint="$define" ;;
5056esac
5057
5058case "$longsize" in
50598) cat <<EOM
5060
5061You have natively 64-bit long integers.
5062EOM
5063 val="$define"
5064 ;;
5065*) case "$use64bitint" in
5066 "$define"|true|[yY]*) dflt='y';;
5067 *) dflt='n';;
5068 esac
8dfa8df9
JH
5069 case "$d_quad" in
5070 "$define") ;;
5071 *) dflt='n' ;;
5072 esac
b4eb6b3d
JH
5073 cat <<EOM
5074
5075Perl can be built to take advantage of 64-bit integer types
5076on some systems. To do so, Configure can be run with -Duse64bitint.
5077Choosing this option will most probably introduce binary incompatibilities.
5078
5079If this doesn't make any sense to you, just accept the default '$dflt'.
8dfa8df9 5080(The default has been chosen based on your configuration.)
b4eb6b3d
JH
5081EOM
5082 rp='Try to use 64-bit integers, if available?'
5083 . ./myread
5084 case "$ans" in
5085 [yY]*) val="$define" ;;
5086 *) val="$undef" ;;
5087 esac
5088 ;;
5089esac
5090set use64bitint
5091eval $setvar
5092
5093case "$use64bitall" in
5094"$define"|true|[yY]*) dflt='y' ;;
5095*) case "$longsize" in
5096 8) dflt='y' ;;
5097 *) dflt='n' ;;
5098 esac
5099 ;;
5100esac
5101cat <<EOM
5102
5103You may also choose to try maximal 64-bitness. It means using as much
510464-bitness as possible on the platform. This in turn means even more
5105binary incompatibilities. On the other hand, your platform may not
5106have any more 64-bitness available than what you already have chosen.
5107
5108If this doesn't make any sense to you, just accept the default '$dflt'.
8dfa8df9 5109(The default has been chosen based on your configuration.)
b4eb6b3d
JH
5110EOM
5111rp='Try to use maximal 64-bit support, if available?'
5112. ./myread
5113case "$ans" in
5114[yY]*) val="$define" ;;
5115*) val="$undef" ;;
5116esac
5117set use64bitall
5118eval $setvar
5119case "$use64bitall" in
5120"$define")
5121 case "$use64bitint" in
5122 "$undef")
5123 cat <<EOM
5124
5125Since you have chosen a maximally 64-bit build, I'm also turning on
5126the use of 64-bit integers.
5127EOM
5128 use64bitint="$define" ;;
5129 esac
5130 ;;
5131esac
5132
8dfa8df9
JH
5133case "$use64bitall" in
5134"$define"|true|[yY]*)
5135 case "$ptrsize" in
5136 4) cat <<EOM >&4
5137
5138*** You have chosen a maximally 64-bit build, but your pointers
5139*** are only 4 bytes wide, disabling maximal 64-bitness.
5140
5141EOM
5142 use64bitall="$undef"
5143 case "$use64bitint" in
5144 "$define"|true|[yY]*) ;;
5145 *) cat <<EOM >&4
5146
5147*** Downgrading from maximal 64-bitness to using 64-bit integers.
5148
5149EOM
5150 use64bitint="$define"
5151 ;;
5152 esac
5153 ;;
5154 esac
5155 ;;
5156esac
5157
b4eb6b3d
JH
5158case "$use64bitint" in
5159"$define"|true|[yY]*)
5160: Look for a hint-file generated 'call-back-unit'. If the
5161: user has specified that a 64-bit perl is to be built,
5162: we may need to set or change some other defaults.
5163 if $test -f use64bitint.cbu; then
5164 echo "Your platform has some specific hints for 64-bit integers, using them..."
5165 . ./use64bitint.cbu
5166 fi
5167 case "$longsize" in
5168 4) case "$archname64" in
5169 '') archname64=64int ;;
5170 esac
5171 ;;
5172 esac
5173 ;;
5174esac
5175
5176case "$use64bitall" in
5177"$define"|true|[yY]*)
5178: Look for a hint-file generated 'call-back-unit'. If the
5179: user has specified that a maximally 64-bit perl is to be built,
5180: we may need to set or change some other defaults.
5181 if $test -f use64bitall.cbu; then
5182 echo "Your platform has some specific hints for 64-bit builds, using them..."
5183 . ./use64bitall.cbu
5184 fi
5185 case "$longsize" in
5186 4) case "$archname64" in
5187 ''|64int) archname64=64all ;;
5188 esac
5189 ;;
5190 esac
5191 ;;
5192esac
5193
5194echo " "
5195echo "Checking for GNU C Library..." >&4
5440bc8e 5196cat >try.c <<EOM
b4eb6b3d
JH
5197#include <stdio.h>
5198int main()
5199{
5200#ifdef __GLIBC__
5201 exit(0);
5202#else
5203 exit(1);
5204#endif
5205}
5206EOM
5440bc8e
JH
5207set try
5208if eval $compile_ok && $run ./try; then
b4eb6b3d
JH
5209 val="$define"
5210 echo "You are using the GNU C Library"
5211else
5212 val="$undef"
5213 echo "You are not using the GNU C Library"
5214fi
5440bc8e 5215$rm -f try try.*
b4eb6b3d
JH
5216set d_gnulibc
5217eval $setvar
5218
5219: see if nm is to be used to determine whether a symbol is defined or not
5220case "$usenm" in
5221'')
5222 dflt=''
c1a7f87b
JH
5223 case "$d_gnulibc" in
5224 "$define")
5225 echo " "
5226 echo "nm probably won't work on the GNU C Library." >&4
5227 dflt=n
bd9b35c9 5228 ;;
c1a7f87b
JH
5229 esac
5230 case "$dflt" in
5231 '')
5232 if $test "$osname" = aix -a ! -f /lib/syscalls.exp; then
5233 echo " "
5234 echo "Whoops! This is an AIX system without /lib/syscalls.exp!" >&4
5235 echo "'nm' won't be sufficient on this sytem." >&4
5236 dflt=n
5237 fi
5238 ;;
5239 esac
5240 case "$dflt" in
5241 '') dflt=`$egrep 'inlibc|csym' $rsrc/Configure | wc -l 2>/dev/null`
5242 if $test $dflt -gt 20; then
5243 dflt=y
5244 else
5245 dflt=n
5246 fi
bd9b35c9
JH
5247 ;;
5248 esac
bd9b35c9
JH
5249 ;;
5250*)
c1a7f87b
JH
5251 case "$usenm" in
5252 true|$define) dflt=y;;
5253 *) dflt=n;;
5254 esac
bd9b35c9
JH
5255 ;;
5256esac
5257$cat <<EOM
5258
c1a7f87b
JH
5259I can use $nm to extract the symbols from your C libraries. This
5260is a time consuming task which may generate huge output on the disk (up
5261to 3 megabytes) but that should make the symbols extraction faster. The
5262alternative is to skip the 'nm' extraction part and to compile a small
5263test program instead to determine whether each symbol is present. If
5264you have a fast C compiler and/or if your 'nm' output cannot be parsed,
5265this may be the best solution.
5266
5267You probably shouldn't let me use 'nm' if you are using the GNU C Library.
bd9b35c9
JH
5268
5269EOM
c1a7f87b
JH
5270rp="Shall I use $nm to extract C symbols from the libraries?"
5271. ./myread
5272case "$ans" in
5273[Nn]*) usenm=false;;
5274*) usenm=true;;
bd9b35c9 5275esac
bd9b35c9 5276
c1a7f87b
JH
5277runnm=$usenm
5278case "$reuseval" in
5279true) runnm=false;;
8e07c86e 5280esac
29209bc5 5281
c1a7f87b
JH
5282: nm options which may be necessary
5283case "$nm_opt" in
5284'') if $test -f /mach_boot; then
5285 nm_opt='' # Mach
5286 elif $test -d /usr/ccs/lib; then
5287 nm_opt='-p' # Solaris (and SunOS?)
5288 elif $test -f /dgux; then
5289 nm_opt='-p' # DG-UX
5290 elif $test -f /lib64/rld; then
5291 nm_opt='-p' # 64-bit Irix
5292 else
5293 nm_opt=''
5294 fi;;
5295esac
bd9b35c9 5296
c1a7f87b
JH
5297: nm options which may be necessary for shared libraries but illegal
5298: for archive libraries. Thank you, Linux.
5299case "$nm_so_opt" in
5300'') case "$myuname" in
5301 *linux*)
5302 if $nm --help | $grep 'dynamic' > /dev/null 2>&1; then
5303 nm_so_opt='--dynamic'
5304 fi
5305 ;;
bd9b35c9 5306 esac
c1a7f87b
JH
5307 ;;
5308esac
8e07c86e 5309
c1a7f87b
JH
5310case "$runnm" in
5311true)
5312: get list of predefined functions in a handy place
5313echo " "
5314case "$libc" in
5315'') libc=unknown
5316 case "$libs" in
5317 *-lc_s*) libc=`./loc libc_s$_a $libc $libpth`
bd9b35c9 5318 esac
ff935051
JH
5319 ;;
5320esac
c1a7f87b
JH
5321case "$libs" in
5322'') ;;
5323*) for thislib in $libs; do
5324 case "$thislib" in
5325 -lc|-lc_s)
5326 : Handle C library specially below.
5327 ;;
5328 -l*)
5329 thislib=`echo $thislib | $sed -e 's/^-l//'`
5330 if try=`./loc lib$thislib.$so.'*' X $libpth`; $test -f "$try"; then
5331 :
5332 elif try=`./loc lib$thislib.$so X $libpth`; $test -f "$try"; then
5333 :
5334 elif try=`./loc lib$thislib$_a X $libpth`; $test -f "$try"; then
5335 :
5336 elif try=`./loc $thislib$_a X $libpth`; $test -f "$try"; then
5337 :
5338 elif try=`./loc lib$thislib X $libpth`; $test -f "$try"; then
5339 :
5340 elif try=`./loc $thislib X $libpth`; $test -f "$try"; then
5341 :
5342 elif try=`./loc Slib$thislib$_a X $xlibpth`; $test -f "$try"; then
5343 :
5344 else
5345 try=''
5346 fi
5347 libnames="$libnames $try"
5348 ;;
5349 *) libnames="$libnames $thislib" ;;
34d1710f 5350 esac
c1a7f87b 5351 done
4633a7c4
LW
5352 ;;
5353esac
c1a7f87b
JH
5354xxx=normal
5355case "$libc" in
5356unknown)
5357 set /lib/libc.$so
5358 for xxx in $libpth; do
5359 $test -r $1 || set $xxx/libc.$so
5360 : The messy sed command sorts on library version numbers.
5361 $test -r $1 || \
5362 set `echo blurfl; echo $xxx/libc.$so.[0-9]* | \
5363 tr ' ' $trnl | egrep -v '\.[A-Za-z]*$' | $sed -e '
5364 h
5365 s/[0-9][0-9]*/0000&/g
5366 s/0*\([0-9][0-9][0-9][0-9][0-9]\)/\1/g
5367 G
5368 s/\n/ /' | \
381aa1ff 5369 $sort | $sed -e 's/^.* //'`
c1a7f87b
JH
5370 eval set \$$#
5371 done
5372 $test -r $1 || set /usr/ccs/lib/libc.$so
5373 $test -r $1 || set /lib/libsys_s$_a
5374 ;;
5375*)
5376 set blurfl
5377 ;;
a4f3eea9 5378esac
c1a7f87b
JH
5379if $test -r "$1"; then
5380 echo "Your (shared) C library seems to be in $1."
5381 libc="$1"
5382elif $test -r /lib/libc && $test -r /lib/clib; then
5383 echo "Your C library seems to be in both /lib/clib and /lib/libc."
5384 xxx=apollo
5385 libc='/lib/clib /lib/libc'
5386 if $test -r /lib/syslib; then
5387 echo "(Your math library is in /lib/syslib.)"
5388 libc="$libc /lib/syslib"
5389 fi
5390elif $test -r "$libc" || (test -h "$libc") >/dev/null 2>&1; then
5391 echo "Your C library seems to be in $libc, as you said before."
5392elif $test -r $incpath/usr/lib/libc$_a; then
5393 libc=$incpath/usr/lib/libc$_a;
5394 echo "Your C library seems to be in $libc. That's fine."
5395elif $test -r /lib/libc$_a; then
5396 libc=/lib/libc$_a;
5397 echo "Your C library seems to be in $libc. You're normal."
5398else
5399 if tans=`./loc libc$_a blurfl/dyick $libpth`; $test -r "$tans"; then
5400 :
5401 elif tans=`./loc libc blurfl/dyick $libpth`; $test -r "$tans"; then
5402 libnames="$libnames "`./loc clib blurfl/dyick $libpth`
5403 elif tans=`./loc clib blurfl/dyick $libpth`; $test -r "$tans"; then
5404 :
5405 elif tans=`./loc Slibc$_a blurfl/dyick $xlibpth`; $test -r "$tans"; then
5406 :
5407 elif tans=`./loc Mlibc$_a blurfl/dyick $xlibpth`; $test -r "$tans"; then
5408 :
5409 else
5410 tans=`./loc Llibc$_a blurfl/dyick $xlibpth`
5411 fi
5412 if $test -r "$tans"; then
5413 echo "Your C library seems to be in $tans, of all places."
5414 libc=$tans
5415 else
5416 libc='blurfl'
5417 fi
5418fi
5419if $test $xxx = apollo -o -r "$libc" || (test -h "$libc") >/dev/null 2>&1; then
5420 dflt="$libc"
5421 cat <<EOM
a4f3eea9 5422
c1a7f87b
JH
5423If the guess above is wrong (which it might be if you're using a strange
5424compiler, or your machine supports multiple models), you can override it here.
bd9b35c9
JH
5425
5426EOM
a4f3eea9 5427else
c1a7f87b 5428 dflt=''
381aa1ff 5429 echo $libpth | $tr ' ' $trnl | $sort | $uniq > libpath
c1a7f87b
JH
5430 cat >&4 <<EOM
5431I can't seem to find your C library. I've looked in the following places:
a4f3eea9 5432
c1a7f87b
JH
5433EOM
5434 $sed 's/^/ /' libpath
5435 cat <<EOM
29209bc5 5436
c1a7f87b 5437None of these seems to contain your C library. I need to get its name...
a4f3eea9 5438
bd9b35c9 5439EOM
bd9b35c9 5440fi
c1a7f87b
JH
5441fn=f
5442rp='Where is your C library?'
5443. ./getfile
5444libc="$ans"
a4f3eea9 5445
c1a7f87b 5446echo " "
381aa1ff 5447echo $libc $libnames | $tr ' ' $trnl | $sort | $uniq > libnames
c1a7f87b
JH
5448set X `cat libnames`
5449shift
5450xxx=files
5451case $# in 1) xxx=file; esac
5452echo "Extracting names from the following $xxx for later perusal:" >&4
5453echo " "
5454$sed 's/^/ /' libnames >&4
5455echo " "
5456$echo $n "This may take a while...$c" >&4
a4f3eea9 5457
c1a7f87b
JH
5458for file in $*; do
5459 case $file in
5460 *$so*) $nm $nm_so_opt $nm_opt $file 2>/dev/null;;
5461 *) $nm $nm_opt $file 2>/dev/null;;
a4f3eea9 5462 esac
c1a7f87b 5463done >libc.tmp
a4f3eea9 5464
c1a7f87b
JH
5465$echo $n ".$c"
5466$grep fprintf libc.tmp > libc.ptf
5467xscan='eval "<libc.ptf $com >libc.list"; $echo $n ".$c" >&4'
5468xrun='eval "<libc.tmp $com >libc.list"; echo "done" >&4'
5469xxx='[ADTSIW]'
5470if com="$sed -n -e 's/__IO//' -e 's/^.* $xxx *_[_.]*//p' -e 's/^.* $xxx *//p'";\
5471 eval $xscan;\
5472 $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5473 eval $xrun
5474elif com="$sed -n -e 's/^__*//' -e 's/^\([a-zA-Z_0-9$]*\).*xtern.*/\1/p'";\
5475 eval $xscan;\
5476 $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5477 eval $xrun
5478elif com="$sed -n -e '/|UNDEF/d' -e '/FUNC..GL/s/^.*|__*//p'";\
5479 eval $xscan;\
5480 $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5481 eval $xrun
5482elif com="$sed -n -e 's/^.* D __*//p' -e 's/^.* D //p'";\
5483 eval $xscan;\
5484 $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5485 eval $xrun
5486elif com="$sed -n -e 's/^_//' -e 's/^\([a-zA-Z_0-9]*\).*xtern.*text.*/\1/p'";\
5487 eval $xscan;\
5488 $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5489 eval $xrun
5490elif com="$sed -n -e 's/^.*|FUNC |GLOB .*|//p'";\
5491 eval $xscan;\
5492 $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5493 eval $xrun
5494elif com="$grep '|' | $sed -n -e '/|COMMON/d' -e '/|DATA/d' \
5495 -e '/ file/d' -e 's/^\([^ ]*\).*/\1/p'";\
5496 eval $xscan;\
5497 $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5498 eval $xrun
5499elif com="$sed -n -e 's/^.*|FUNC |GLOB .*|//p' -e 's/^.*|FUNC |WEAK .*|//p'";\
5500 eval $xscan;\
5501 $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5502 eval $xrun
5503elif com="$sed -n -e 's/^__//' -e '/|Undef/d' -e '/|Proc/s/ .*//p'";\
5504 eval $xscan;\
5505 $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5506 eval $xrun
5507elif com="$sed -n -e 's/^.*|Proc .*|Text *| *//p'";\
5508 eval $xscan;\
5509 $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5510 eval $xrun
5511elif com="$sed -n -e '/Def. Text/s/.* \([^ ]*\)\$/\1/p'";\
5512 eval $xscan;\
5513 $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5514 eval $xrun
5515elif com="$sed -n -e 's/^[-0-9a-f ]*_\(.*\)=.*/\1/p'";\
5516 eval $xscan;\
5517 $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5518 eval $xrun
5519elif com="$sed -n -e 's/.*\.text n\ \ \ \.//p'";\
5520 eval $xscan;\
5521 $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5522 eval $xrun
5523elif com="sed -n -e 's/^__.*//' -e 's/[ ]*D[ ]*[0-9]*.*//p'";\
5524 eval $xscan;\
5525 $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5526 eval $xrun
5527else
5528 $nm -p $* 2>/dev/null >libc.tmp
5529 $grep fprintf libc.tmp > libc.ptf
5530 if com="$sed -n -e 's/^.* [ADTSIW] *_[_.]*//p' -e 's/^.* [ADTSIW] //p'";\
5531 eval $xscan; $contains '^fprintf$' libc.list >/dev/null 2>&1
5532 then
5533 nm_opt='-p'
5534 eval $xrun
bd9b35c9 5535 else
c1a7f87b
JH
5536 echo " "
5537 echo "$nm didn't seem to work right. Trying $ar instead..." >&4
5538 com=''
5539 if $ar t $libc > libc.tmp && $contains '^fprintf$' libc.tmp >/dev/null 2>&1; then
5540 for thisname in $libnames $libc; do
5541 $ar t $thisname >>libc.tmp
5542 done
5543 $sed -e "s/\\$_o\$//" < libc.tmp > libc.list
5544 echo "Ok." >&4
5545 elif test "X$osname" = "Xos2" && $ar tv $libc > libc.tmp; then
5546 # Repeat libc to extract forwarders to DLL entries too
5547 for thisname in $libnames $libc; do
5548 $ar tv $thisname >>libc.tmp
5549 # Revision 50 of EMX has bug in $ar.
5550 # it will not extract forwarders to DLL entries
5551 # Use emximp which will extract exactly them.
5552 emximp -o tmp.imp $thisname \
5553 2>/dev/null && \
5554 $sed -e 's/^\([_a-zA-Z0-9]*\) .*$/\1/p' \
5555 < tmp.imp >>libc.tmp
5556 $rm tmp.imp
5557 done
5558 $sed -e "s/\\$_o\$//" -e 's/^ \+//' < libc.tmp > libc.list
5559 echo "Ok." >&4
5560 else
5561 echo "$ar didn't seem to work right." >&4
5562 echo "Maybe this is a Cray...trying bld instead..." >&4
5563 if bld t $libc | $sed -e 's/.*\///' -e "s/\\$_o:.*\$//" > libc.list
5564 then
5565 for thisname in $libnames; do
5566 bld t $libnames | \
5567 $sed -e 's/.*\///' -e "s/\\$_o:.*\$//" >>libc.list
5568 $ar t $thisname >>libc.tmp
5569 done
5570 echo "Ok." >&4
bd9b35c9 5571 else
c1a7f87b
JH
5572 echo "That didn't work either. Giving up." >&4
5573 exit 1
bd9b35c9 5574 fi
c1a7f87b 5575 fi
a4f3eea9 5576 fi
a4f3eea9 5577fi
c1a7f87b
JH
5578nm_extract="$com"
5579if $test -f /lib/syscalls.exp; then
5580 echo " "
5581 echo "Also extracting names from /lib/syscalls.exp for good ole AIX..." >&4
a8c676c6 5582 $sed -n 's/^\([^ ]*\)[ ]*syscall[0-9]*[ ]*$/\1/p' /lib/syscalls.exp >>libc.list
c1a7f87b
JH
5583fi
5584;;
5585esac
5586$rm -f libnames libpath
bd9b35c9 5587
c1a7f87b
JH
5588: is a C symbol defined?
5589csym='tlook=$1;
5590case "$3" in
5591-v) tf=libc.tmp; tc=""; tdc="";;
5592-a) tf=libc.tmp; tc="[0]"; tdc="[]";;
5593*) tlook="^$1\$"; tf=libc.list; tc="()"; tdc="()";;
5594esac;
5595tx=yes;
5596case "$reuseval-$4" in
5597true-) ;;
5598true-*) tx=no; eval "tval=\$$4"; case "$tval" in "") tx=yes;; esac;;
5599esac;
5600case "$tx" in
5601yes)
5602 case "$runnm" in
5603 true)
5604 if $contains $tlook $tf >/dev/null 2>&1;
5605 then tval=true;
5606 else tval=false;
5607 fi;;
5608 *)
5609 echo "int main() { extern short $1$tdc; printf(\"%hd\", $1$tc); }" > t.c;
7a282f6d 5610 if $cc -o t $optimize $ccflags $ldflags t.c $libs >/dev/null 2>&1;
c1a7f87b
JH
5611 then tval=true;
5612 else tval=false;
5613 fi;
5614 $rm -f t t.c;;
5615 esac;;
5616*)
5617 case "$tval" in
5618 $define) tval=true;;
5619 *) tval=false;;
5620 esac;;
5621esac;
5622eval "$2=$tval"'
bd9b35c9 5623
c1a7f87b
JH
5624: define an is-in-libc? function
5625inlibc='echo " "; td=$define; tu=$undef;
5626sym=$1; var=$2; eval "was=\$$2";
5627tx=yes;
5628case "$reuseval$was" in
5629true) ;;
5630true*) tx=no;;
5631esac;
5632case "$tx" in
5633yes)
5634 set $sym tres -f;
5635 eval $csym;
5636 case "$tres" in
5637 true)
5638 echo "$sym() found." >&4;
5639 case "$was" in $undef) . ./whoa; esac; eval "$var=\$td";;
5640 *)
5641 echo "$sym() NOT found." >&4;
5642 case "$was" in $define) . ./whoa; esac; eval "$var=\$tu";;
5643 esac;;
bd9b35c9 5644*)
c1a7f87b
JH
5645 case "$was" in
5646 $define) echo "$sym() found." >&4;;
5647 *) echo "$sym() NOT found." >&4;;
5648 esac;;
5649esac'
5650
b4eb6b3d
JH
5651: see if sqrtl exists
5652set sqrtl d_sqrtl
c1a7f87b
JH
5653eval $inlibc
5654
b4eb6b3d
JH
5655case "$ccflags" in
5656*-DUSE_LONG_DOUBLE*|*-DUSE_MORE_BITS*) uselongdouble="$define" ;;
c1a7f87b 5657esac
b4eb6b3d
JH
5658
5659case "$uselongdouble" in
5660$define|true|[yY]*) dflt='y';;
5661*) dflt='n';;
5662esac
5663cat <<EOM
5664
5665Perl can be built to take advantage of long doubles which
5666(if available) may give more accuracy and range for floating point numbers.
5667
5668If this doesn't make any sense to you, just accept the default '$dflt'.
5669EOM
5670rp='Try to use long doubles if available?'
c1a7f87b
JH
5671. ./myread
5672case "$ans" in
b4eb6b3d
JH
5673y|Y) val="$define" ;;
5674*) val="$undef" ;;
5675esac
5676set uselongdouble
5677eval $setvar
bfb7748a 5678
b4eb6b3d
JH
5679case "$uselongdouble" in
5680true|[yY]*) uselongdouble="$define" ;;
5681esac
bfb7748a 5682
b4eb6b3d
JH
5683case "$uselongdouble" in
5684$define)
5685: Look for a hint-file generated 'call-back-unit'. If the
5686: user has specified that long doubles should be used,
5687: we may need to set or change some other defaults.
5688 if $test -f uselongdouble.cbu; then
5689 echo "Your platform has some specific hints for long doubles, using them..."
5690 . ./uselongdouble.cbu
5691 else
5692 $cat <<EOM
5693(Your platform doesn't have any specific hints for long doubles.)
c1a7f87b 5694EOM
b4eb6b3d
JH
5695 fi
5696 ;;
5697esac
5698
5699case "$uselongdouble:$d_sqrtl" in
5700$define:$undef)
5701 $cat <<EOM >&4
5702
5703*** You requested the use of long doubles but you do not seem to have
5704*** the mathematic functions for long doubles. I'm disabling the use
5705*** of long doubles.
5706
5707EOM
5708 uselongdouble=$undef
5709 ;;
5710esac
5711
5712: check for length of double
5713echo " "
5714case "$doublesize" in
5715'')
5716 echo "Checking to see how big your double precision numbers are..." >&4
5717 $cat >try.c <<'EOCP'
5718#include <stdio.h>
5719int main()
5720{
5721 printf("%d\n", (int)sizeof(double));
5722 exit(0);
5723}
5724EOCP
5725 set try
5726 if eval $compile_ok; then
5440bc8e 5727 doublesize=`$run ./try`
b4eb6b3d
JH
5728 echo "Your double is $doublesize bytes long."
5729 else
5730 dflt='8'
5731 echo "(I can't seem to compile the test program. Guessing...)"
5732 rp="What is the size of a double precision number (in bytes)?"
5733 . ./myread
5734 doublesize="$ans"
5735 fi
5736 ;;
5737esac
5738$rm -f try.c try
5739
5740: check for long doubles
5741echo " "
5742echo "Checking to see if you have long double..." >&4
5743echo 'int main() { long double x = 7.0; }' > try.c
5744set try
5745if eval $compile; then
5746 val="$define"
5747 echo "You have long double."
5748else
5749 val="$undef"
5750 echo "You do not have long double."
5751fi
5752$rm try.*
5753set d_longdbl
5754eval $setvar
5755
5756: check for length of long double
5757case "${d_longdbl}${longdblsize}" in
5758$define)
5759 echo " "
5760 echo "Checking to see how big your long doubles are..." >&4
5761 $cat >try.c <<'EOCP'
5762#include <stdio.h>
5763int main()
5764{
5765 printf("%d\n", sizeof(long double));
5766}
5767EOCP
5768 set try
5769 set try
5770 if eval $compile; then
5440bc8e 5771 longdblsize=`$run ./try`
b4eb6b3d
JH
5772 echo "Your long doubles are $longdblsize bytes long."
5773 else
5774 dflt='8'
5775 echo " "
5776 echo "(I can't seem to compile the test program. Guessing...)" >&4
5777 rp="What is the size of a long double (in bytes)?"
5778 . ./myread
5779 longdblsize="$ans"
5780 fi
5781 if $test "X$doublesize" = "X$longdblsize"; then
5782 echo "(That isn't any different from an ordinary double.)"
5783 fi
5784 ;;
5785esac
5786$rm -f try.* try
5787
51de783f 5788case "$useperlio" in
5a3a8a02 5789$define|true|[yY]*|'') dflt='y';;
51de783f
JH
5790*) dflt='n';;
5791esac
5792cat <<EOM
5793
5794Previous version of $package used the standard IO mechanisms as
5a3a8a02 5795defined in <stdio.h>. Versions 5.003_02 and later of $package allow
51de783f 5796alternate IO mechanisms via the PerlIO abstraction layer, but the
5a3a8a02
JH
5797stdio mechanism is still available if needed. The abstraction layer
5798can use AT&T's sfio (if you already have sfio installed) or regular stdio.
51de783f
JH
5799Using PerlIO with sfio may cause problems with some extension modules.
5800
5801If this doesn't make any sense to you, just accept the default '$dflt'.
5802EOM
5a3a8a02 5803rp='Use the PerlIO abstraction layer?'
51de783f
JH
5804. ./myread
5805case "$ans" in
5806y|Y)
5807 val="$define"
5a3a8a02 5808 ;;
51de783f
JH
5809*)
5810 echo "Ok, doing things the stdio way."
5811 val="$undef"
5812 ;;
5813esac
5814set useperlio
5815eval $setvar
5816
5817case "$usesocks" in
5818$define|true|[yY]*)
5819 case "$useperlio" in
5820 $define|true|[yY]*) ;;
5821 *) cat >&4 <<EOM
5822
5823You are using the SOCKS proxy protocol library which means that you
5824should also use the PerlIO layer. You may be headed for trouble.
5825
5826EOM
5827 ;;
5828 esac
5829 ;;
5830esac
5831
5832
b4eb6b3d
JH
5833: determine the architecture name
5834echo " "
5835if xxx=`./loc arch blurfl $pth`; $test -f "$xxx"; then
5836 tarch=`arch`"-$osname"
5837elif xxx=`./loc uname blurfl $pth`; $test -f "$xxx" ; then
5838 if uname -m > tmparch 2>&1 ; then
5839 tarch=`$sed -e 's/ *$//' -e 's/ /_/g' \
5840 -e 's/$/'"-$osname/" tmparch`
5841 else
5842 tarch="$osname"
5843 fi
5844 $rm -f tmparch
5845else
5846 tarch="$osname"
5847fi
5848case "$myarchname" in
5849''|"$tarch") ;;
5850*)
5851 echo "(Your architecture name used to be $myarchname.)"
5852 archname=''
5853 ;;
5854esac
5440bc8e
JH
5855case "$targetarch" in
5856'') ;;
5857*) archname=`echo $targetarch|sed 's,^[^-]*-,,'` ;;
5858esac
b4eb6b3d
JH
5859myarchname="$tarch"
5860case "$archname" in
5861'') dflt="$tarch";;
5862*) dflt="$archname";;
5863esac
5864rp='What is your architecture name'
5865. ./myread
5866archname="$ans"
5867case "$usethreads" in
5868$define)
5869 echo "Threads selected." >&4
5870 case "$archname" in
5871 *-thread*) echo "...and architecture name already has -thread." >&4
5872 ;;
5873 *) archname="$archname-thread"
5874 echo "...setting architecture name to $archname." >&4
5875 ;;
5876 esac
5877 ;;
5878esac
5879case "$usemultiplicity" in
5880$define)
5881 echo "Multiplicity selected." >&4
5882 case "$archname" in
5883 *-multi*) echo "...and architecture name already has -multi." >&4
5884 ;;
5885 *) archname="$archname-multi"
5886 echo "...setting architecture name to $archname." >&4
5887 ;;
5888 esac
5889 ;;
5890esac
5891case "$use64bitint$use64bitall" in
5892*"$define"*)
5893 case "$archname64" in
5894 '')
5895 echo "This architecture is naturally 64-bit, not changing architecture name." >&4
5896 ;;
5897 *)
5898 case "$use64bitint" in
5899 "$define") echo "64 bit integers selected." >&4 ;;
5900 esac
5901 case "$use64bitall" in
5902 "$define") echo "Maximal 64 bitness selected." >&4 ;;
5903 esac
5904 case "$archname" in
5905 *-$archname64*) echo "...and architecture name already has $archname64." >&4
5906 ;;
5907 *) archname="$archname-$archname64"
5908 echo "...setting architecture name to $archname." >&4
5909 ;;
5910 esac
5911 ;;
5912 esac
5913esac
5914case "$uselongdouble" in
5915$define)
5916 echo "Long doubles selected." >&4
5917 case "$longdblsize" in
5918 $doublesize)
5919 "...but long doubles are equal to doubles, not changing architecture name." >&4
5920 ;;
5921 *)
5922 case "$archname" in
5923 *-ld*) echo "...and architecture name already has -ld." >&4
5924 ;;
5925 *) archname="$archname-ld"
5926 echo "...setting architecture name to $archname." >&4
5927 ;;
5928 esac
5929 ;;
5930 esac
5931 ;;
5932esac
51de783f
JH
5933case "$useperlio" in
5934$define)
5935 echo "Perlio selected." >&4
d46c9a2d
JH
5936 ;;
5937*)
5938 echo "Perlio not selected, using stdio." >&4
51de783f 5939 case "$archname" in
d46c9a2d 5940 *-stdio*) echo "...and architecture name already has -stdio." >&4
51de783f 5941 ;;
d46c9a2d 5942 *) archname="$archname-stdio"
51de783f
JH
5943 echo "...setting architecture name to $archname." >&4
5944 ;;
5945 esac
5946 ;;
5947esac
b4eb6b3d
JH
5948
5949: determine root of directory hierarchy where package will be installed.
5950case "$prefix" in
5951'')
5952 dflt=`./loc . /usr/local /usr/local /local /opt /usr`
5953 ;;
5954*)
5955 dflt="$prefix"
5956 ;;
5957esac
5958$cat <<EOM
5959
5960By default, $package will be installed in $dflt/bin, manual pages
5961under $dflt/man, etc..., i.e. with $dflt as prefix for all
5962installation directories. Typically this is something like /usr/local.
5963If you wish to have binaries under /usr/bin but other parts of the
5964installation under /usr/local, that's ok: you will be prompted
5965separately for each of the installation directories, the prefix being
5966only used to set the defaults.
5967
5968EOM
5969fn=d~
5970rp='Installation prefix to use?'
5971. ./getfile
5972oldprefix=''
5973case "$prefix" in
5974'') ;;
5975*)
5976 case "$ans" in
5977 "$prefix") ;;
5978 *) oldprefix="$prefix";;
5979 esac
5980 ;;
5981esac
5982prefix="$ans"
5983prefixexp="$ansexp"
5984
a6d26a0d
JH
5985case "$afsroot" in
5986'') afsroot=/afs ;;
5987*) afsroot=$afsroot ;;
5988esac
5989
b4eb6b3d
JH
5990: is AFS running?
5991echo " "
5992case "$afs" in
5993$define|true) afs=true ;;
5994$undef|false) afs=false ;;
a6d26a0d 5995*) if test -d $afsroot; then
b4eb6b3d
JH
5996 afs=true
5997 else
5998 afs=false
5999 fi
6000 ;;
6001esac
6002if $afs; then
6003 echo "AFS may be running... I'll be extra cautious then..." >&4
6004else
6005 echo "AFS does not seem to be running..." >&4
6006fi
6007
6008: determine installation prefix for where package is to be installed.
6009if $afs; then
6010$cat <<EOM
6011
6012Since you are running AFS, I need to distinguish the directory in which
6013files will reside from the directory in which they are installed (and from
6014which they are presumably copied to the former directory by occult means).
6015
6016EOM
6017 case "$installprefix" in
6018 '') dflt=`echo $prefix | sed 's#^/afs/#/afs/.#'`;;
6019 *) dflt="$installprefix";;
6020 esac
6021else
6022$cat <<EOM
6023
6024In some special cases, particularly when building $package for distribution,
6025it is convenient to distinguish between the directory in which files should
6026be installed from the directory ($prefix) in which they
6027will eventually reside. For most users, these two directories are the same.
6028
6029EOM
6030 case "$installprefix" in
6031 '') dflt=$prefix ;;
6032 *) dflt=$installprefix;;
6033 esac
6034fi
6035fn=d~
6036rp='What installation prefix should I use for installing files?'
6037. ./getfile
6038installprefix="$ans"
6039installprefixexp="$ansexp"
6040
6041: set the prefixit variable, to compute a suitable default value
6042prefixit='case "$3" in
6043""|none)
6044 case "$oldprefix" in
6045 "") eval "$1=\"\$$2\"";;
6046 *)
6047 case "$3" in
6048 "") eval "$1=";;
6049 none)
6050 eval "tp=\"\$$2\"";
6051 case "$tp" in
6052 ""|" ") eval "$1=\"\$$2\"";;
6053 *) eval "$1=";;
6054 esac;;
6055 esac;;
6056 esac;;
6057*)
6058 eval "tp=\"$oldprefix-\$$2-\""; eval "tp=\"$tp\"";
6059 case "$tp" in
6060 --|/*--|\~*--) eval "$1=\"$prefix/$3\"";;
6061 /*-$oldprefix/*|\~*-$oldprefix/*)
6062 eval "$1=\`echo \$$2 | sed \"s,^$oldprefix,$prefix,\"\`";;
6063 *) eval "$1=\"\$$2\"";;
6064 esac;;
6065esac'
6066
b4eb6b3d
JH
6067: get the patchlevel
6068echo " "
6069echo "Getting the current patchlevel..." >&4
6070if $test -r $rsrc/patchlevel.h;then
6071 revision=`awk '/define[ ]+PERL_REVISION/ {print $3}' $rsrc/patchlevel.h`
6072 patchlevel=`awk '/define[ ]+PERL_VERSION/ {print $3}' $rsrc/patchlevel.h`
6073 subversion=`awk '/define[ ]+PERL_SUBVERSION/ {print $3}' $rsrc/patchlevel.h`
6074 api_revision=`awk '/define[ ]+PERL_API_REVISION/ {print $3}' $rsrc/patchlevel.h`
6075 api_version=`awk '/define[ ]+PERL_API_VERSION/ {print $3}' $rsrc/patchlevel.h`
6076 api_subversion=`awk '/define[ ]+PERL_API_SUBVERSION/ {print $3}' $rsrc/patchlevel.h`
151e6568 6077 perl_patchlevel=`grep ',"DEVEL[0-9][0-9]*"' $rsrc/patchlevel.h|sed 's/[^0-9]//g'`
b4eb6b3d
JH
6078else
6079 revision=0
6080 patchlevel=0
6081 subversion=0
6082 api_revision=0
6083 api_version=0
6084 api_subversion=0
151e6568
MB
6085 perl_patchlevel=0
6086 $echo "(You do not have patchlevel.h. Eek.)"
b4eb6b3d 6087fi
151e6568
MB
6088if $test -r $rsrc/.patch ; then
6089 if $test "`cat $rsrc/.patch`" -gt "$perl_patchlevel" ; then
6090 perl_patchlevel=`cat $rsrc/.patch`
6091 fi
6092fi
861eb78d
AD
6093: Define a handy string here to avoid duplication in myconfig.SH and configpm.
6094version_patchlevel_string="version $patchlevel subversion $subversion"
151e6568 6095case "$perl_patchlevel" in
861eb78d
AD
60960|'') ;;
6097*) version_patchlevel_string="$version_patchlevel_string patch $perl_patchlevel" ;;
151e6568 6098esac
861eb78d
AD
6099
6100$echo "(You have $package $version_patchlevel_string.)"
6101
b4eb6b3d
JH
6102case "$osname" in
6103dos|vms)
6104 : XXX Should be a Configure test for double-dots in filenames.
6105 version=`echo $revision $patchlevel $subversion | \
6106 $awk '{ printf "%d_%d_%d\n", $1, $2, $3 }'`
6107 api_versionstring=`echo $api_revision $api_version $api_subversion | \
6108 $awk '{ printf "%d_%d_%d\n", $1, $2, $3 }'`
6109 ;;
6110*)
6111 version=`echo $revision $patchlevel $subversion | \
6112 $awk '{ printf "%d.%d.%d\n", $1, $2, $3 }'`
6113 api_versionstring=`echo $api_revision $api_version $api_subversion | \
6114 $awk '{ printf "%d.%d.%d\n", $1, $2, $3 }'`
6115 ;;
6116esac
6117: Special case the 5.005_xx maintenance series, which used 5.005
6118: without any subversion label as a subdirectory in $sitelib
6119if test "${api_revision}${api_version}${api_subversion}" = "550"; then
6120 api_versionstring='5.005'
6121fi
6122
6123: determine installation style
6124: For now, try to deduce it from prefix unless it is already set.
6125: Reproduce behavior of 5.005 and earlier, maybe drop that in 5.7.
6126case "$installstyle" in
6127'') case "$prefix" in
6128 *perl*) dflt='lib';;
6129 *) dflt='lib/perl5' ;;
6130 esac
6131 ;;
6132*) dflt="$installstyle" ;;
6133esac
6134: Probably not worth prompting for this since we prompt for all
6135: the directories individually, and the prompt would be too long and
6136: confusing anyway.
6137installstyle=$dflt
6138
6139: determine where private library files go
6140: Usual default is /usr/local/lib/perl5/$version.
6141: Also allow things like /opt/perl/lib/$version, since
6142: /opt/perl/lib/perl5... would be redundant.
6143: The default "style" setting is made in installstyle.U
6144case "$installstyle" in
6145*lib/perl5*) set dflt privlib lib/$package/$version ;;
6146*) set dflt privlib lib/$version ;;
6147esac
6148eval $prefixit
6149$cat <<EOM
6150
6151There are some auxiliary files for $package that need to be put into a
6152private library directory that is accessible by everyone.
6153
6154EOM
6155fn=d~+
6156rp='Pathname where the private library files will reside?'
6157. ./getfile
6158privlib="$ans"
6159privlibexp="$ansexp"
6160: Change installation prefix, if necessary.
6161if $test X"$prefix" != X"$installprefix"; then
6162 installprivlib=`echo $privlibexp | sed "s#^$prefix#$installprefix#"`
6163else
6164 installprivlib="$privlibexp"
6165fi
6166
6167: set the prefixup variable, to restore leading tilda escape
6168prefixup='case "$prefixexp" in
6169"$prefix") ;;
6170*) eval "$1=\`echo \$$1 | sed \"s,^$prefixexp,$prefix,\"\`";;
6171esac'
6172
6173: determine where public architecture dependent libraries go
6174set archlib archlib
6175eval $prefixit
6176: privlib default is /usr/local/lib/$package/$version
6177: archlib default is /usr/local/lib/$package/$version/$archname
6178: privlib may have an optional trailing /share.
6179tdflt=`echo $privlib | $sed 's,/share$,,'`
6180tdflt=$tdflt/$archname
6181case "$archlib" in
6182'') dflt=$tdflt
6183 ;;
6184*) dflt="$archlib"
6185 ;;
6186esac
6187$cat <<EOM
6188
6189$spackage contains architecture-dependent library files. If you are
6190sharing libraries in a heterogeneous environment, you might store
6191these files in a separate location. Otherwise, you can just include
6192them with the rest of the public library files.
6193
6194EOM
6195fn=d+~
6196rp='Where do you want to put the public architecture-dependent libraries?'
6197. ./getfile
6198archlib="$ans"
6199archlibexp="$ansexp"
6200if $test X"$archlib" = X"$privlib"; then
6201 d_archlib="$undef"
6202else
6203 d_archlib="$define"
6204fi
6205: Change installation prefix, if necessary.
6206if $test X"$prefix" != X"$installprefix"; then
6207 installarchlib=`echo $archlibexp | sed "s#^$prefix#$installprefix#"`
6208else
6209 installarchlib="$archlibexp"
6210fi
6211
6212
6213: Binary compatibility with 5.005 is not possible for builds
6214: with advanced features
6215case "$usethreads$usemultiplicity" in
6216*define*)
6217 bincompat5005="$undef"
6218 d_bincompat5005="$undef"
6219 ;;
6220*) $cat <<EOM
6221
6222This version of Perl can be compiled for binary compatibility with 5.005.
6223If you decide to do so, you will be able to continue using most of the
6224extensions that were compiled for Perl 5.005.
6225
6226EOM
6227 case "$bincompat5005$d_bincompat5005" in
6228 *"$undef"*) dflt=n ;;
6229 *) dflt=y ;;
6230 esac
6231 rp='Binary compatibility with Perl 5.005?'
6232 . ./myread
6233 case "$ans" in
6234 y*) val="$define" ;;
6235 *) val="$undef" ;;
6236 esac
6237 set d_bincompat5005
6238 eval $setvar
6239 case "$d_bincompat5005" in
6240 "$define")
6241 bincompat5005="$define"
6242 ;;
6243 *) bincompat5005="$undef"
6244 d_bincompat5005="$undef"
6245 ;;
6246 esac
6247 ;;
6248esac
6249
6250
6251: see if setuid scripts can be secure
6252$cat <<EOM
6253
6254Some kernels have a bug that prevents setuid #! scripts from being
6255secure. Some sites have disabled setuid #! scripts because of this.
6256
6257First let's decide if your kernel supports secure setuid #! scripts.
6258(If setuid #! scripts would be secure but have been disabled anyway,
6259don't say that they are secure if asked.)
6260
6261EOM
6262
6263val="$undef"
6264if $test -d /dev/fd; then
6265 echo "#!$ls" >reflect
6266 chmod +x,u+s reflect
6267 ./reflect >flect 2>&1
6268 if $contains "/dev/fd" flect >/dev/null; then
6269 echo "Congratulations, your kernel has secure setuid scripts!" >&4
6270 val="$define"
6271 else
6272 $cat <<EOM
6273If you are not sure if they are secure, I can check but I'll need a
6274username and password different from the one you are using right now.
6275If you don't have such a username or don't want me to test, simply
6276enter 'none'.
6277
6278EOM
6279 rp='Other username to test security of setuid scripts with?'
6280 dflt='none'
6281 . ./myread
6282 case "$ans" in
6283 n|none)
6284 case "$d_suidsafe" in
6285 '') echo "I'll assume setuid scripts are *not* secure." >&4
6286 dflt=n;;
6287 "$undef")
6288 echo "Well, the $hint value is *not* secure." >&4
6289 dflt=n;;
6290 *) echo "Well, the $hint value *is* secure." >&4
6291 dflt=y;;
6292 esac
c1a7f87b 6293 ;;
b4eb6b3d
JH
6294 *)
6295 $rm -f reflect flect
6296 echo "#!$ls" >reflect
6297 chmod +x,u+s reflect
6298 echo >flect
6299 chmod a+w flect
6300 echo '"su" will (probably) prompt you for '"$ans's password."
6301 su $ans -c './reflect >flect'
6302 if $contains "/dev/fd" flect >/dev/null; then
6303 echo "Okay, it looks like setuid scripts are secure." >&4
6304 dflt=y
6305 else
6306 echo "I don't think setuid scripts are secure." >&4
6307 dflt=n
6308 fi
6309 ;;
6310 esac
6311 rp='Does your kernel have *secure* setuid scripts?'
6312 . ./myread
6313 case "$ans" in
6314 [yY]*) val="$define";;
6315 *) val="$undef";;
6316 esac
6317 fi
6318else
6319 echo "I don't think setuid scripts are secure (no /dev/fd directory)." >&4
6320 echo "(That's for file descriptors, not floppy disks.)"
6321 val="$undef"
6322fi
6323set d_suidsafe
6324eval $setvar
6325
6326$rm -f reflect flect
6327
6328: now see if they want to do setuid emulation
6329echo " "
6330val="$undef"
6331case "$d_suidsafe" in
6332"$define")
6333 val="$undef"
6334 echo "No need to emulate SUID scripts since they are secure here." >& 4
6335 ;;
6336*)
6337 $cat <<EOM
6338Some systems have disabled setuid scripts, especially systems where
6339setuid scripts cannot be secure. On systems where setuid scripts have
6340been disabled, the setuid/setgid bits on scripts are currently
6341useless. It is possible for $package to detect those bits and emulate
6342setuid/setgid in a secure fashion. This emulation will only work if
6343setuid scripts have been disabled in your kernel.
6344
6345EOM
6346 case "$d_dosuid" in
6347 "$define") dflt=y ;;
6348 *) dflt=n ;;
6349 esac
6350 rp="Do you want to do setuid/setgid emulation?"
6351 . ./myread
6352 case "$ans" in
6353 [yY]*) val="$define";;
6354 *) val="$undef";;
6355 esac
6356 ;;
6357esac
6358set d_dosuid
6359eval $setvar
6360
b4eb6b3d
JH
6361: see if this is a malloc.h system
6362set malloc.h i_malloc
6363eval $inhdr
6364
6365: see if stdlib is available
6366set stdlib.h i_stdlib
6367eval $inhdr
6368
6369: determine which malloc to compile in
6370echo " "
6371case "$usemymalloc" in
c4163172
JH
6372[yY]*|true|$define) dflt='y' ;;
6373[nN]*|false|$undef) dflt='n' ;;
6374*) case "$ptrsize" in
6375 4) dflt='y' ;;
6376 *) dflt='n' ;;
6377 esac
6378 ;;
8dfa8df9 6379esac
b4eb6b3d
JH
6380rp="Do you wish to attempt to use the malloc that comes with $package?"
6381. ./myread
6382usemymalloc="$ans"
6383case "$ans" in
6384y*|true)
6385 usemymalloc='y'
6386 mallocsrc='malloc.c'
6387 mallocobj="malloc$_o"
6388 d_mymalloc="$define"
6389 case "$libs" in
6390 *-lmalloc*)
6391 : Remove malloc from list of libraries to use
6392 echo "Removing unneeded -lmalloc from library list" >&4
6393 set `echo X $libs | $sed -e 's/-lmalloc / /' -e 's/-lmalloc$//'`
6394 shift
6395 libs="$*"
6396 echo "libs = $libs" >&4
6397 ;;
6398 esac
6399 ;;
6400*)
6401 usemymalloc='n'
6402 mallocsrc=''
6403 mallocobj=''
6404 d_mymalloc="$undef"
6405 ;;
6406esac
6407
6408: compute the return types of malloc and free
6409echo " "
6410$cat >malloc.c <<END
6411#$i_malloc I_MALLOC
6412#$i_stdlib I_STDLIB
6413#include <stdio.h>
6414#include <sys/types.h>
6415#ifdef I_MALLOC
6416#include <malloc.h>
6417#endif
6418#ifdef I_STDLIB
6419#include <stdlib.h>
6420#endif
6421#ifdef TRY_MALLOC
6422void *malloc();
6423#endif
6424#ifdef TRY_FREE
6425void free();
6426#endif
6427END
6428case "$malloctype" in
6429'')
6430 if $cc $ccflags -c -DTRY_MALLOC malloc.c >/dev/null 2>&1; then
6431 malloctype='void *'
6432 else
6433 malloctype='char *'
6434 fi
6435 ;;
6436esac
6437echo "Your system wants malloc to return '$malloctype', it would seem." >&4
6438
6439case "$freetype" in
6440'')
6441 if $cc $ccflags -c -DTRY_FREE malloc.c >/dev/null 2>&1; then
6442 freetype='void'
6443 else
6444 freetype='int'
6445 fi
6446 ;;
6447esac
6448echo "Your system uses $freetype free(), it would seem." >&4
6449$rm -f malloc.[co]
6450$cat <<EOM
6451
6452After $package is installed, you may wish to install various
6453add-on modules and utilities. Typically, these add-ons will
6454be installed under $prefix with the rest
6455of this package. However, you may wish to install such add-ons
6456elsewhere under a different prefix.
6457
6458If you do not wish to put everything under a single prefix, that's
6459ok. You will be prompted for the individual locations; this siteprefix
6460is only used to suggest the defaults.
6461
6462The default should be fine for most people.
6463
6464EOM
6465fn=d~+
6466rp='Installation prefix to use for add-on modules and utilities?'
6467: XXX Here might be another good place for an installstyle setting.
6468case "$siteprefix" in
6469'') dflt=$prefix ;;
6470*) dflt=$siteprefix ;;
6471esac
6472. ./getfile
6473: XXX Prefixit unit does not yet support siteprefix and vendorprefix
6474oldsiteprefix=''
6475case "$siteprefix" in
6476'') ;;
6477*) case "$ans" in
6478 "$prefix") ;;
6479 *) oldsiteprefix="$prefix";;
6480 esac
6481 ;;
6482esac
6483siteprefix="$ans"
6484siteprefixexp="$ansexp"
6485
6486: determine where site specific libraries go.
6487: Usual default is /usr/local/lib/perl5/site_perl/$version
6488: The default "style" setting is made in installstyle.U
6489: XXX No longer works with Prefixit stuff.
6490prog=`echo $package | $sed 's/-*[0-9.]*$//'`
6491case "$sitelib" in
6492'') case "$installstyle" in
6493 *lib/perl5*) dflt=$siteprefix/lib/$package/site_$prog/$version ;;
6494 *) dflt=$siteprefix/lib/site_$prog/$version ;;
6495 esac
6496 ;;
6497*) dflt="$sitelib"
6498 ;;
6499esac
6500$cat <<EOM
6501
6502The installation process will create a directory for
6503site-specific extensions and modules. Most users find it convenient
6504to place all site-specific files in this directory rather than in the
6505main distribution directory.
6506
6507EOM
6508fn=d~+
6509rp='Pathname for the site-specific library files?'
6510. ./getfile
6511sitelib="$ans"
6512sitelibexp="$ansexp"
6513sitelib_stem=`echo "$sitelibexp" | sed "s,/$version$,,"`
6514: Change installation prefix, if necessary.
6515if $test X"$prefix" != X"$installprefix"; then
6516 installsitelib=`echo $sitelibexp | $sed "s#^$prefix#$installprefix#"`
6517else
6518 installsitelib="$sitelibexp"
6519fi
6520
6521: determine where site specific architecture-dependent libraries go.
6522: sitelib default is /usr/local/lib/perl5/site_perl/$version
6523: sitearch default is /usr/local/lib/perl5/site_perl/$version/$archname
6524: sitelib may have an optional trailing /share.
6525case "$sitearch" in
6526'') dflt=`echo $sitelib | $sed 's,/share$,,'`
6527 dflt="$dflt/$archname"
6528 ;;
6529*) dflt="$sitearch"
6530 ;;
6531esac
6532set sitearch sitearch none
6533eval $prefixit
6534$cat <<EOM
6535
6536The installation process will also create a directory for
6537architecture-dependent site-specific extensions and modules.
6538
6539EOM
6540fn=d~+
6541rp='Pathname for the site-specific architecture-dependent library files?'
6542. ./getfile
6543sitearch="$ans"
6544sitearchexp="$ansexp"
6545: Change installation prefix, if necessary.
6546if $test X"$prefix" != X"$installprefix"; then
6547 installsitearch=`echo $sitearchexp | sed "s#^$prefix#$installprefix#"`
6548else
6549 installsitearch="$sitearchexp"
6550fi
6551
6552$cat <<EOM
6553
6554The installation process will also create a directory for
6555vendor-supplied add-ons. Vendors who supply perl with their system
6556may find it convenient to place all vendor-supplied files in this
6557directory rather than in the main distribution directory. This will
6558ease upgrades between binary-compatible maintenance versions of perl.
6559
6560Of course you may also use these directories in whatever way you see
6561fit. For example, you might use them to access modules shared over a
6562company-wide network.
6563
6564The default answer should be fine for most people.
6565This causes further questions about vendor add-ons to be skipped
6566and no vendor-specific directories will be configured for perl.
6567
6568EOM
6569rp='Do you want to configure vendor-specific add-on directories?'
6570case "$usevendorprefix" in
6571define|true|[yY]*) dflt=y ;;
6572*) : User may have set vendorprefix directly on Configure command line.
6573 case "$vendorprefix" in
6574 ''|' ') dflt=n ;;
6575 *) dflt=y ;;
6576 esac
6577 ;;
6578esac
6579. ./myread
6580case "$ans" in
6581[yY]*) fn=d~+
6582 rp='Installation prefix to use for vendor-supplied add-ons?'
6583 case "$vendorprefix" in
6584 '') dflt='' ;;
6585 *) dflt=$vendorprefix ;;
6586 esac
6587 . ./getfile
6588 : XXX Prefixit unit does not yet support siteprefix and vendorprefix
6589 oldvendorprefix=''
6590 case "$vendorprefix" in
6591 '') ;;
6592 *) case "$ans" in
6593 "$prefix") ;;
6594 *) oldvendorprefix="$prefix";;
6595 esac
6596 ;;
6597 esac
6598 usevendorprefix="$define"
6599 vendorprefix="$ans"
6600 vendorprefixexp="$ansexp"
6601 ;;
6602*) usevendorprefix="$undef"
6603 vendorprefix=''
6604 vendorprefixexp=''
6605 ;;
6606esac
6607
6608case "$vendorprefix" in
6609'') d_vendorlib="$undef"
6610 vendorlib=''
6611 vendorlibexp=''
6612 ;;
6613*) d_vendorlib="$define"
6614 : determine where vendor-supplied modules go.
6615 : Usual default is /usr/local/lib/perl5/vendor_perl/$version
6616 case "$vendorlib" in
6617 '')
6618 prog=`echo $package | $sed 's/-*[0-9.]*$//'`
6619 case "$installstyle" in
6620 *lib/perl5*) dflt=$vendorprefix/lib/$package/vendor_$prog/$version ;;
6621 *) dflt=$vendorprefix/lib/vendor_$prog/$version ;;
6622 esac
6623 ;;
6624 *) dflt="$vendorlib"
6625 ;;
6626 esac
6627 fn=d~+
6628 rp='Pathname for the vendor-supplied library files?'
6629 . ./getfile
6630 vendorlib="$ans"
6631 vendorlibexp="$ansexp"
6632 ;;
6633esac
6634vendorlib_stem=`echo "$vendorlibexp" | sed "s,/$version$,,"`
6635: Change installation prefix, if necessary.
6636if $test X"$prefix" != X"$installprefix"; then
6637 installvendorlib=`echo $vendorlibexp | $sed "s#^$prefix#$installprefix#"`
6638else
6639 installvendorlib="$vendorlibexp"
6640fi
6641
6642case "$vendorprefix" in
6643'') d_vendorarch="$undef"
6644 vendorarch=''
6645 vendorarchexp=''
6646 ;;
6647*) d_vendorarch="$define"
6648 : determine where vendor-supplied architecture-dependent libraries go.
6649 : vendorlib default is /usr/local/lib/perl5/vendor_perl/$version
6650 : vendorarch default is /usr/local/lib/perl5/vendor_perl/$version/$archname
6651 : vendorlib may have an optional trailing /share.
6652 case "$vendorarch" in
6653 '') dflt=`echo $vendorlib | $sed 's,/share$,,'`
6654 dflt="$dflt/$archname"
6655 ;;
6656 *) dflt="$vendorarch" ;;
6657 esac
6658 fn=d~+
6659 rp='Pathname for vendor-supplied architecture-dependent files?'
6660 . ./getfile
6661 vendorarch="$ans"
6662 vendorarchexp="$ansexp"
6663 ;;
6664esac
6665: Change installation prefix, if necessary.
6666if $test X"$prefix" != X"$installprefix"; then
6667 installvendorarch=`echo $vendorarchexp | sed "s#^$prefix#$installprefix#"`
6668else
6669 installvendorarch="$vendorarchexp"
6670fi
6671
6672: Final catch-all directories to search
6673$cat <<EOM
6674
6675Lastly, you can have perl look in other directories for extensions and
6676modules in addition to those already specified.
6677These directories will be searched after
6678 $sitearch
6679 $sitelib
6680EOM
6681test X"$vendorlib" != "X" && echo ' ' $vendorlib
6682test X"$vendorarch" != "X" && echo ' ' $vendorarch
6683echo ' '
6684case "$otherlibdirs" in
6685''|' ') dflt='none' ;;
6686*) dflt="$otherlibdirs" ;;
6687esac
6688$cat <<EOM
6689Enter a colon-separated set of extra paths to include in perl's @INC
6690search path, or enter 'none' for no extra paths.
6691
6692EOM
6693
6694rp='Colon-separated list of additional directories for perl to search?'
6695. ./myread
6696case "$ans" in
6697' '|''|none) otherlibdirs=' ' ;;
6698*) otherlibdirs="$ans" ;;
6699esac
6700case "$otherlibdirs" in
6701' ') val=$undef ;;
6702*) val=$define ;;
6703esac
6704set d_perl_otherlibdirs
6705eval $setvar
6706
6707: Cruising for prototypes
6708echo " "
6709echo "Checking out function prototypes..." >&4
6710$cat >prototype.c <<'EOCP'
6711int main(int argc, char *argv[]) {
6712 exit(0);}
6713EOCP
6714if $cc $ccflags -c prototype.c >prototype.out 2>&1 ; then
6715 echo "Your C compiler appears to support function prototypes."
6716 val="$define"
6717else
6718 echo "Your C compiler doesn't seem to understand function prototypes."
6719 val="$undef"
6720fi
6721set prototype
6722eval $setvar
6723$rm -f prototype*
6724
6725case "$prototype" in
6726"$define") ;;
6727*) ansi2knr='ansi2knr'
6728 echo " "
6729 cat <<EOM >&4
6730
6731$me: FATAL ERROR:
6732This version of $package can only be compiled by a compiler that
6733understands function prototypes. Unfortunately, your C compiler
6734 $cc $ccflags
6735doesn't seem to understand them. Sorry about that.
6736
6737If GNU cc is available for your system, perhaps you could try that instead.
6738
6739Eventually, we hope to support building Perl with pre-ANSI compilers.
6740If you would like to help in that effort, please contact <perlbug@perl.org>.
6741
6742Aborting Configure now.
6743EOM
6744 exit 2
6745 ;;
6746esac
6747
6748: determine where public executables go
6749echo " "
6750set dflt bin bin
6751eval $prefixit
6752fn=d~
6753rp='Pathname where the public executables will reside?'
6754. ./getfile
6755if $test "X$ansexp" != "X$binexp"; then
6756 installbin=''
6757fi
6758bin="$ans"
6759binexp="$ansexp"
6760: Change installation prefix, if necessary.
6761: XXX Bug? -- ignores Configure -Dinstallprefix setting.
6762if $test X"$prefix" != X"$installprefix"; then
6763 installbin=`echo $binexp | sed "s#^$prefix#$installprefix#"`
6764else
6765 installbin="$binexp"
6766fi
6767
6fcddf3b
JH
6768echo " "
6769echo "Any extra modules..." >&4
6770case "$extras" in
6771'') dflt='y';;
6772*) dflt='n';;
6773esac
6774cat <<EOM
6775Perl can be built with extra modules or bundles of modules which
6776will be fetched from the CPAN and installed alongside Perl.
6777
6778Notice that you will need access to the CPAN; either via the Internet,
6779or a local copy, for example a CD-ROM or a local CPAN mirror. (You will
6780be asked later to configure the CPAN.pm module which will in turn do
6781the installation of the rest of the extra modules or bundles.)
6782
6783Notice also that if the modules require any external software such as
6784libraries (the libz library for the Compress::Zlib module, for example)
6785you *NEED* to have any such external software already installed, this
6786configuration process will not install such things for you.
6787
6788If this doesn't make any sense to you, just accept the default '$dflt'.
6789EOM
6790rp='Install any extra modules (y or n) ?'
6791. ./myread
6792case "$ans" in
6793y|Y)
6794 cat <<EOM
6795
6796Please list any extra modules or bundles to be installed from CPAN,
6797with spaces between the names. The names can be in any format the
6798'install' command of CPAN.pm will understand. (Answer 'none' the
6799quotes, to install no extra modules or bundles.)
6800EOM
6801 rp='Extras?'
6802 dflt="$extras"
6803 . ./myread
6804 extras="$ans"
6805esac
6806case "$extras" in
6807''|'none')
6808 val=''
6809 $rm -f ../extras.lst
6810 ;;
6811*) echo "(Saving the list of extras for later...)"
6812 echo $extras > ../extras.lst
2aabf906 6813 val="$extras"
6fcddf3b
JH
6814 ;;
6815esac
6816set extras
6817eval $setvar
6818echo " "
6819
b4eb6b3d
JH
6820: Find perl5.005 or later.
6821echo "Looking for a previously installed perl5.005 or later... "
6822case "$perl5" in
a938a3bb 6823'') for tdir in `echo "$binexp$path_sep$PATH" | $sed "s/$path_sep/ /g"`; do
b4eb6b3d 6824 : Check if this perl is recent and can load a simple module
a938a3bb 6825 if $test -x $tdir/perl$exe_ext && $tdir/perl -Mless -e 'use 5.005;' >/dev/null 2>&1; then
b4eb6b3d
JH
6826 perl5=$tdir/perl
6827 break;
a938a3bb
IZ
6828 elif $test -x $tdir/perl5$exe_ext && $tdir/perl5 -Mless -e 'use 5.005;' >/dev/null 2>&1; then
6829 perl5=$tdir/perl5
b4eb6b3d
JH
6830 break;
6831 fi
6832 done
6833 ;;
6834*) perl5="$perl5"
6835 ;;
6836esac
6837case "$perl5" in
6838'') echo "None found. That's ok.";;
6839*) echo "Using $perl5." ;;
6840esac
6841
6842: Determine list of previous versions to include in @INC
6843$cat > getverlist <<EOPL
6844#!$perl5 -w
6845use File::Basename;
6846\$api_versionstring = "$api_versionstring";
6847\$version = "$version";
6848\$stem = "$sitelib_stem";
6849\$archname = "$archname";
6850EOPL
6851 $cat >> getverlist <<'EOPL'
6852# Can't have leading @ because metaconfig interprets it as a command!
6853;@inc_version_list=();
6854# XXX Redo to do opendir/readdir?
6855if (-d $stem) {
6856 chdir($stem);
6857 ;@candidates = glob("5.*");
6858}
6859else {
6860 ;@candidates = ();
6861}
6862
6863# XXX ToDo: These comparisons must be reworked when two-digit
6864# subversions come along, so that 5.7.10 compares as greater than
6865# 5.7.3! By that time, hope that 5.6.x is sufficiently
6866# widespread that we can use the built-in version vectors rather
6867# than reinventing them here. For 5.6.0, however, we must
6868# assume this script will likely be run by 5.005_0x. --AD 1/2000.
6869foreach $d (@candidates) {
6870 if ($d lt $version) {
6871 if ($d ge $api_versionstring) {
6872 unshift(@inc_version_list, grep { -d } "$d/$archname", $d);
6873 }
6874 elsif ($d ge "5.005") {
6875 unshift(@inc_version_list, grep { -d } $d);
6876 }
6877 }
6878 else {
6879 # Skip newer version. I.e. don't look in
6880 # 5.7.0 if we're installing 5.6.1.
6881 }
6882}
6883
6884if (@inc_version_list) {
6885 print join(' ', @inc_version_list);
6886}
6887else {
6888 # Blank space to preserve value for next Configure run.
6889 print " ";
6890}
6891EOPL
6892chmod +x getverlist
6893case "$inc_version_list" in
a938a3bb 6894'') if test -x "$perl5$exe_ext"; then
b4eb6b3d
JH
6895 dflt=`$perl5 getverlist`
6896 else
6897 dflt='none'
6898 fi
6899 ;;
6900$undef) dflt='none' ;;
6d1a7737 6901*) eval dflt=\"$inc_version_list\" ;;
b4eb6b3d
JH
6902esac
6903case "$dflt" in
6904''|' ') dflt=none ;;
6905esac
6906case "$dflt" in
69075.005) case "$bincompat5005" in
6908 $define|true|[yY]*) ;;
6909 *) dflt=none ;;
6910 esac
6911 ;;
6912esac
6913$cat <<'EOM'
6914
6915In order to ease the process of upgrading, this version of perl
6916can be configured to use modules built and installed with earlier
6917versions of perl that were installed under $prefix. Specify here
6918the list of earlier versions that this version of perl should check.
6919If Configure detected no earlier versions of perl installed under
6920$prefix, then the list will be empty. Answer 'none' to tell perl
6921to not search earlier versions.
6922
6923The default should almost always be sensible, so if you're not sure,
6924just accept the default.
6925EOM
6926
6927rp='List of earlier versions to include in @INC?'
6928. ./myread
6929case "$ans" in
6930[Nn]one|''|' ') inc_version_list=' ' ;;
6931*) inc_version_list="$ans" ;;
6932esac
6933case "$inc_version_list" in
6934''|' ')
6935 inc_version_list_init='0';;
6936*) inc_version_list_init=`echo $inc_version_list |
6937 $sed -e 's/^/"/' -e 's/ /","/g' -e 's/$/",0/'`
6938 ;;
6939esac
6940$rm -f getverlist
6941
6942: determine whether to install perl also as /usr/bin/perl
6943
6944echo " "
6945if $test -d /usr/bin -a "X$installbin" != X/usr/bin; then
6946 $cat <<EOM
6947Many scripts expect perl to be installed as /usr/bin/perl.
6948I can install the perl you are about to compile also as /usr/bin/perl
6949(in addition to $installbin/perl).
6950EOM
6951 case "$installusrbinperl" in
6952 "$undef"|[nN]*) dflt='n';;
6953 *) dflt='y';;
6954 esac
6955 rp="Do you want to install perl as /usr/bin/perl?"
6956 . ./myread
6957 case "$ans" in
6958 [yY]*) val="$define";;
6959 *) val="$undef" ;;
6960 esac
6961else
6962 val="$undef"
6963fi
6964set installusrbinperl
6965eval $setvar
6966
6967: see if dld is available
6968set dld.h i_dld
6969eval $inhdr
6970
6971: see if dlopen exists
6972xxx_runnm="$runnm"
6973runnm=false
6974set dlopen d_dlopen
6975eval $inlibc
6976runnm="$xxx_runnm"
6977
6978: determine which dynamic loading, if any, to compile in
6979echo " "
6980dldir="ext/DynaLoader"
6981case "$usedl" in
6982$define|y|true)
6983 dflt='y'
6984 usedl="$define"
6985 ;;
6986$undef|n|false)
6987 dflt='n'
6988 usedl="$undef"
6989 ;;
6990*)
6991 dflt='n'
6992 case "$d_dlopen" in
6993 $define) dflt='y' ;;
6994 esac
6995 case "$i_dld" in
6996 $define) dflt='y' ;;
6997 esac
6998 : Does a dl_xxx.xs file exist for this operating system
6999 $test -f $rsrc/$dldir/dl_${osname}.xs && dflt='y'
7000 ;;
7001esac
7002rp="Do you wish to use dynamic loading?"
7003. ./myread
7004usedl="$ans"
7005case "$ans" in
7006y*) usedl="$define"
7007 case "$dlsrc" in
7008 '')
7009 if $test -f $rsrc/$dldir/dl_${osname}.xs ; then
7010 dflt="$dldir/dl_${osname}.xs"
7011 elif $test "$d_dlopen" = "$define" ; then
7012 dflt="$dldir/dl_dlopen.xs"
7013 elif $test "$i_dld" = "$define" ; then
7014 dflt="$dldir/dl_dld.xs"
7015 else
7016 dflt=''
7017 fi
7018 ;;
7019 *) dflt="$dldir/$dlsrc"
7020 ;;
7021 esac
7022 echo "The following dynamic loading files are available:"
7023 : Can not go over to $dldir because getfile has path hard-coded in.
7024 tdir=`pwd`; cd $rsrc; $ls -C $dldir/dl*.xs; cd $tdir
7025 rp="Source file to use for dynamic loading"
7026 fn="fne"
7027 gfpth="$src"
7028 . ./getfile
7029 usedl="$define"
7030 : emulate basename
7031 dlsrc=`echo $ans | $sed -e 's%.*/\([^/]*\)$%\1%'`
7032
7033 $cat << EOM
7034
7035Some systems may require passing special flags to $cc -c to
7036compile modules that will be used to create a shared library.
7037To use no flags, say "none".
7038
7039EOM
7040 case "$cccdlflags" in
7041 '') case "$gccversion" in
7042 '') case "$osname" in
7043 hpux) dflt='+z' ;;
7044 next) dflt='none' ;;
7045 irix*) dflt='-KPIC' ;;
48bcfe03 7046 svr4*|esix*|solaris|nonstopux) dflt='-KPIC' ;;
b4eb6b3d
JH
7047 sunos) dflt='-pic' ;;
7048 *) dflt='none' ;;
7049 esac
7050 ;;
7051 *) case "$osname" in
b6cc0f4c 7052 darwin) dflt='none' ;;
48bcfe03 7053 svr4*|esix*|solaris|nonstopux) dflt='-fPIC' ;;
b4eb6b3d
JH
7054 *) dflt='-fpic' ;;
7055 esac ;;
7056 esac ;;
7057 ' ') dflt='none' ;;
7058 *) dflt="$cccdlflags" ;;
7059 esac
7060 rp="Any special flags to pass to $cc -c to compile shared library modules?"
7061 . ./myread
7062 case "$ans" in
7063 none) cccdlflags=' ' ;;
7064 *) cccdlflags="$ans" ;;
7065 esac
7066
7067 cat << EOM
7068
7069Some systems use ld to create libraries that can be dynamically loaded,
7070while other systems (such as those using ELF) use $cc.
7071
7072EOM
7073 case "$ld" in
7074 '') $cat >try.c <<'EOM'
7075/* Test for whether ELF binaries are produced */
7076#include <fcntl.h>
7077#include <stdlib.h>
7078int main() {
7079 char b[4];
7080 int i = open("a.out",O_RDONLY);
7081 if(i == -1)
7082 exit(1); /* fail */
7083 if(read(i,b,4)==4 && b[0]==127 && b[1]=='E' && b[2]=='L' && b[3]=='F')
7084 exit(0); /* succeed (yes, it's ELF) */
7085 else
7086 exit(1); /* fail */
7087}
7088EOM
5440bc8e 7089 if $cc $ccflags $ldflags try.c >/dev/null 2>&1 && $run ./a.out; then
b4eb6b3d
JH
7090 cat <<EOM
7091You appear to have ELF support. I'll use $cc to build dynamic libraries.
7092EOM
7093 dflt="$cc"
7094 else
7095 echo "I'll use ld to build dynamic libraries."
7096 dflt='ld'
7097 fi
7098 rm -f try.c a.out
7099 ;;
7100 *) dflt="$ld"
7101 ;;
7102 esac
7103
7104 rp="What command should be used to create dynamic libraries?"
7105 . ./myread
7106 ld="$ans"
7107
7108 cat << EOM
7109
7110Some systems may require passing special flags to $ld to create a
7111library that can be dynamically loaded. If your ld flags include
7112-L/other/path options to locate libraries outside your loader's normal
7113search path, you may need to specify those -L options here as well. To
7114use no flags, say "none".
7115
7116EOM
7117 case "$lddlflags" in
7118 '') case "$osname" in
7119 beos) dflt='-nostart' ;;
7120 hpux) dflt='-b';
7121 case "$gccversion" in
7122 '') dflt="$dflt +vnocompatwarnings" ;;
7123 esac
7124 ;;
7125 linux|irix*) dflt='-shared' ;;
7126 next) dflt='none' ;;
7127 solaris) dflt='-G' ;;
7128 sunos) dflt='-assert nodefinitions' ;;
48bcfe03 7129 svr4*|esix*|nonstopux) dflt="-G $ldflags" ;;
b4eb6b3d
JH
7130 *) dflt='none' ;;
7131 esac
7132 ;;
7133 *) dflt="$lddlflags" ;;
7134 esac
7135
7136 : Try to guess additional flags to pick up local libraries.
7137 : Be careful not to append to a plain 'none'
7138 case "$dflt" in
7139 none) dflt='' ;;
7140 esac
7141 for thisflag in $ldflags; do
7142 case "$thisflag" in
7143 -L*|-R*)
7144 case " $dflt " in
7145 *" $thisflag "*) ;;
7146 *) dflt="$dflt $thisflag" ;;
7147 esac
7148 ;;
7149 esac
7150 done
7151
7152 case "$dflt" in
7153 ''|' ') dflt='none' ;;
7154 esac
7155
7156 rp="Any special flags to pass to $ld to create a dynamically loaded library?"
7157 . ./myread
7158 case "$ans" in
7159 none) lddlflags=' ' ;;
7160 *) lddlflags="$ans" ;;
7161 esac
7162
7163 cat <<EOM
7164
7165Some systems may require passing special flags to $cc to indicate that
7166the resulting executable will use dynamic linking. To use no flags,
7167say "none".
7168
7169EOM
7170 case "$ccdlflags" in
7171 '') case "$osname" in
7172 hpux) dflt='-Wl,-E' ;;
7173 linux) dflt='-rdynamic' ;;
7174 next) dflt='none' ;;
7175 sunos) dflt='none' ;;
7176 *) dflt='none' ;;
7177 esac ;;
7178 ' ') dflt='none' ;;
7179 *) dflt="$ccdlflags" ;;
7180 esac
7181 rp="Any special flags to pass to $cc to use dynamic linking?"
7182 . ./myread
7183 case "$ans" in
7184 none) ccdlflags=' ' ;;
7185 *) ccdlflags="$ans" ;;
7186 esac
7187 ;;
7188*) usedl="$undef"
7189 ld='ld'
7190 dlsrc='dl_none.xs'
7191 lddlflags=''
7192 ccdlflags=''
7193 ;;
7194esac
7195
7196also=''
7197case "$usedl" in
7198$undef)
7199 # No dynamic loading being used, so don't bother even to prompt.
7200 useshrplib='false'
7201 ;;
7202*) case "$useshrplib" in
7203 '') case "$osname" in
48bcfe03 7204 svr4*|nonstopux|dgux|dynixptx|esix|powerux|beos|cygwin*)
b4eb6b3d
JH
7205 dflt=y
7206 also='Building a shared libperl is required for dynamic loading to work on your system.'
7207 ;;
7208 next*)
7209 case "$osvers" in
7210 4*) dflt=y
7211 also='Building a shared libperl is needed for MAB support.'
7212 ;;
7213 *) dflt=n
7214 ;;
7215 esac
7216 ;;
7217 *) dflt=n
7218 ;;
7219 esac
7220 ;;
7221 $define|true|[Yy]*)
7222 dflt=y
7223 ;;
7224 *) dflt=n
7225 ;;
7226 esac
7227 $cat << EOM
7228
7229The perl executable is normally obtained by linking perlmain.c with
7230libperl${_a}, any static extensions (usually just DynaLoader), and
7231any other libraries needed on this system (such as -lm, etc.). Since
7232your system supports dynamic loading, it is probably possible to build
7233a shared libperl.$so. If you will have more than one executable linked
7234to libperl.$so, this will significantly reduce the size of each
7235executable, but it may have a noticeable affect on performance. The
7236default is probably sensible for your system.
7237$also
7238
7239EOM
7240 rp="Build a shared libperl.$so (y/n)"
7241 . ./myread
7242 case "$ans" in
7243 true|$define|[Yy]*)
7244 useshrplib='true' ;;
7245 *) useshrplib='false' ;;
7246 esac
7247 ;;
7248esac
7249
7250case "$useshrplib" in
7251true)
7252 case "$libperl" in
7253 '')
7254 # Figure out a good name for libperl.so. Since it gets stored in
7255 # a version-specific architecture-dependent library, the version
7256 # number isn't really that important, except for making cc/ld happy.
7257 #
7258 # A name such as libperl.so.3.1
7259 majmin="libperl.$so.$patchlevel.$subversion"
7260 # A name such as libperl.so.301
7261 majonly=`echo $patchlevel $subversion |
7262 $awk '{printf "%d%02d", $1, $2}'`
7263 majonly=libperl.$so.$majonly
7264 # I'd prefer to keep the os-specific stuff here to a minimum, and
7265 # rely on figuring it out from the naming of libc.
7266 case "${osname}${osvers}" in
7267 next4*)
7268 dflt=libperl.5.$so
7269 # XXX How handle the --version stuff for MAB?
7270 ;;
7271 linux*) # ld won't link with a bare -lperl otherwise.
7272 dflt=libperl.$so
7273 ;;
7274 cygwin*) # include version
7275 dflt=`echo libperl$version | sed -e 's/\./_/g'`$lib_ext
7276 ;;
7277 *) # Try to guess based on whether libc has major.minor.
7278 case "$libc" in
7279 *libc.$so.[0-9]*.[0-9]*) dflt=$majmin ;;
7280 *libc.$so.[0-9]*) dflt=$majonly ;;
7281 *) dflt=libperl.$so ;;
7282 esac
7283 ;;
7284 esac
7285 ;;
7286 *) dflt=$libperl
7287 ;;
7288 esac
7289 cat << EOM
7290
7291I need to select a good name for the shared libperl. If your system uses
7292library names with major and minor numbers, then you might want something
7293like $majmin. Alternatively, if your system uses a single version
7294number for shared libraries, then you might want to use $majonly.
7295Or, your system might be quite happy with a simple libperl.$so.
7296
7297Since the shared libperl will get installed into a version-specific
7298architecture-dependent directory, the version number of the shared perl
7299library probably isn't important, so the default should be o.k.
7300
7301EOM
7302 rp='What name do you want to give to the shared libperl?'
7303 . ./myread
7304 libperl=$ans
7305 echo "Ok, I'll use $libperl"
7306 ;;
7307*)
7308 libperl="libperl${_a}"
7309 ;;
7310esac
7311
7312# Detect old use of shrpdir via undocumented Configure -Dshrpdir
7313case "$shrpdir" in
7314'') ;;
7315*) $cat >&4 <<EOM
7316WARNING: Use of the shrpdir variable for the installation location of
7317the shared $libperl is not supported. It was never documented and
7318will not work in this version. Let me (perlbug@perl.org)
7319know of any problems this may cause.
7320
7321EOM
7322 case "$shrpdir" in
7323 "$archlibexp/CORE")
7324 $cat >&4 <<EOM
7325But your current setting of $shrpdir is
7326the default anyway, so it's harmless.
7327EOM
7328 ;;
7329 *)
7330 $cat >&4 <<EOM
7331Further, your current attempted setting of $shrpdir
7332conflicts with the value of $archlibexp/CORE
7333that installperl will use.
7334EOM
7335 ;;
7336 esac
7337 ;;
7338esac
7339
7340# How will the perl executable find the installed shared $libperl?
7341# Add $xxx to ccdlflags.
7342# If we can't figure out a command-line option, use $shrpenv to
7343# set env LD_RUN_PATH. The main perl makefile uses this.
7344shrpdir=$archlibexp/CORE
7345xxx=''
7346tmp_shrpenv=''
7347if "$useshrplib"; then
7348 case "$osname" in
7349 aix)
7350 # We'll set it in Makefile.SH...
7351 ;;
7352 solaris|netbsd)
7353 xxx="-R $shrpdir"
7354 ;;
7355 freebsd)
7356 xxx="-Wl,-R$shrpdir"
7357 ;;
7358 linux|irix*|dec_osf)
7359 xxx="-Wl,-rpath,$shrpdir"
7360 ;;
7361 next)
7362 # next doesn't like the default...
7363 ;;
7364 beos)
7365 # beos doesn't like the default, either.
7366 ;;
7367 hpux*)
7368 # hpux doesn't like the default, either.
7369 tmp_shrpenv="env LDOPTS=\"+s +b${shrpdir}\""
7370 ;;
7371 *)
7372 tmp_shrpenv="env LD_RUN_PATH=$shrpdir"
7373 ;;
7374 esac
7375 case "$xxx" in
7376 '') ;;
7377 *)
7378 # Only add $xxx if it isn't already in ccdlflags.
7379 case " $ccdlflags " in
7380 *" $xxx "*) ;;
7381 *) ccdlflags="$ccdlflags $xxx"
7382 cat <<EOM >&4
7383
7384Adding $xxx to the flags
7385passed to $ld so that the perl executable will find the
7386installed shared $libperl.
7387
7388EOM
7389 ;;
7390 esac
7391 ;;
7392 esac
7393fi
7394# Fix ccdlflags in AIX for building external extensions.
7395# (For building Perl itself bare -bE:perl.exp is needed,
7396# Makefile.SH takes care of this.)
7397case "$osname" in
7398aix) ccdlflags="$ccdlflags -bE:$installarchlib/CORE/perl.exp" ;;
7399esac
7400# Respect a hint or command-line value.
7401case "$shrpenv" in
7402'') shrpenv="$tmp_shrpenv" ;;
7403esac
7404case "$ldlibpthname" in
7405'') ldlibpthname=LD_LIBRARY_PATH ;;
7406none) ldlibpthname='' ;;
7407esac
7408
7409: determine where manual pages are on this system
7410echo " "
7411case "$sysman" in
7412'')
7413 syspath='/usr/man/man1 /usr/man/mann /usr/man/manl /usr/man/local/man1'
7414 syspath="$syspath /usr/man/u_man/man1 /usr/share/man/man1"
7415 syspath="$syspath /usr/catman/u_man/man1 /usr/man/l_man/man1"
7416 syspath="$syspath /usr/local/man/u_man/man1 /usr/local/man/l_man/man1"
7417 syspath="$syspath /usr/man/man.L /local/man/man1 /usr/local/man/man1"
7418 sysman=`./loc . /usr/man/man1 $syspath`
7419 ;;
7420esac
7421if $test -d "$sysman"; then
7422 echo "System manual is in $sysman." >&4
7423else
7424 echo "Could not find manual pages in source form." >&4
7425fi
7426
7427: determine where manual pages go
7428set man1dir man1dir none
7429eval $prefixit
7430$cat <<EOM
7431
7432$spackage has manual pages available in source form.
7433EOM
7434case "$nroff" in
7435nroff)
7436 echo "However, you don't have nroff, so they're probably useless to you."
7437 case "$man1dir" in
7438 '') man1dir="none";;
7439 esac;;
7440esac
7441echo "If you don't want the manual sources installed, answer 'none'."
7442case "$man1dir" in
7443' ') dflt=none
7444 ;;
7445'')
7446 lookpath="$prefixexp/man/man1 $prefixexp/man/l_man/man1"
7447 lookpath="$lookpath $prefixexp/man/p_man/man1"
7448 lookpath="$lookpath $prefixexp/man/u_man/man1"
7449 lookpath="$lookpath $prefixexp/man/man.1"
7450 case "$sysman" in
7451 */?_man*) dflt=`./loc . $prefixexp/l_man/man1 $lookpath` ;;
7452 *) dflt=`./loc . $prefixexp/man/man1 $lookpath` ;;
7453 esac
7454 set dflt
7455 eval $prefixup
7456 ;;
7457*) dflt="$man1dir"
7458 ;;
7459esac
7460echo " "
7461fn=dn+~
7462rp="Where do the main $spackage manual pages (source) go?"
7463. ./getfile
7464if $test "X$man1direxp" != "X$ansexp"; then
7465 installman1dir=''
7466fi
7467man1dir="$ans"
7468man1direxp="$ansexp"
7469case "$man1dir" in
7470'') man1dir=' '
7471 installman1dir='';;
7472esac
7473
7474: Change installation prefix, if necessary.
7475if $test X"$prefix" != X"$installprefix"; then
7476 installman1dir=`echo $man1direxp | $sed "s#^$prefix#$installprefix#"`
7477else
7478 installman1dir="$man1direxp"
7479fi
7480
7481: What suffix to use on installed man pages
7482
7483case "$man1dir" in
7484' ')
7485 man1ext='0'
7486 ;;
7487*)
7488 rp="What suffix should be used for the main $spackage man pages?"
7489 case "$man1ext" in
7490 '') case "$man1dir" in
7491 *1) dflt=1 ;;
7492 *1p) dflt=1p ;;
7493 *1pm) dflt=1pm ;;
7494 *l) dflt=l;;
7495 *n) dflt=n;;
7496 *o) dflt=o;;
7497 *p) dflt=p;;
7498 *C) dflt=C;;
7499 *L) dflt=L;;
7500 *L1) dflt=L1;;
7501 *) dflt=1;;
7502 esac
7503 ;;
7504 *) dflt="$man1ext";;
7505 esac
7506 . ./myread
7507 man1ext="$ans"
7508 ;;
7509esac
7510
7511: see if we can have long filenames
7512echo " "
7513first=123456789abcdef
7514$rm -f $first
7515if (echo hi >$first) 2>/dev/null; then
7516 if $test -f 123456789abcde; then
7517 echo 'You cannot have filenames longer than 14 characters. Sigh.' >&4
7518 val="$undef"
7519 else
7520 echo 'You can have filenames longer than 14 characters.'>&4
7521 val="$define"
7522 fi
7523else
7524 $cat <<'EOM'
7525You can't have filenames longer than 14 chars.
7526You can't even think about them!
7527EOM
7528 val="$undef"
7529fi
7530set d_flexfnam
7531eval $setvar
7532$rm -rf 123456789abcde*
7533
7534: determine where library module manual pages go
7535set man3dir man3dir none
7536eval $prefixit
7537$cat <<EOM
7538
7539$spackage has manual pages for many of the library modules.
7540EOM
7541
7542case "$nroff" in
7543nroff)
7544 $cat <<'EOM'
7545However, you don't have nroff, so they're probably useless to you.
7546EOM
7547 case "$man3dir" in
7548 '') man3dir="none";;
7549 esac;;
7550esac
7551
7552case "$d_flexfnam" in
7553undef)
7554 $cat <<'EOM'
7555However, your system can't handle the long file names like File::Basename.3.
7556EOM
7557 case "$man3dir" in
7558 '') man3dir="none";;
7559 esac;;
7560esac
7561
7562echo "If you don't want the manual sources installed, answer 'none'."
7563prog=`echo $package | $sed 's/-*[0-9.]*$//'`
7564case "$man3dir" in
7565'') dflt=`echo "$man1dir" | $sed -e 's/man1/man3/g' -e 's/man\.1/man\.3/g'`
7566 if $test -d "$privlib/man/man3"; then
7567 cat <<EOM >&4
7568
7569WARNING: Previous versions of perl installed man3 pages into
7570$privlib/man/man3. This version will suggest a
7571new default of $dflt.
7572EOM
7573 tdflt=$dflt
7574 dflt='n'
7575 rp='Do you wish to preserve the old behavior?(y/n)'
7576 . ./myread
7577 case "$ans" in
7578 y*) dflt="$privlib/man/man3" ;;
7579 *) dflt=$tdflt ;;
7580 esac
7581 fi
7582 ;;
7583*) dflt="$man3dir" ;;
7584esac
7585case "$dflt" in
7586' ') dflt=none ;;
7587esac
7588echo " "
7589fn=dn+~
7590rp="Where do the $package library man pages (source) go?"
7591. ./getfile
7592man3dir="$ans"
7593man3direxp="$ansexp"
7594case "$man3dir" in
7595'') man3dir=' '
7596 installman3dir='';;
7597esac
7598
7599: Change installation prefix, if necessary.
7600if $test X"$prefix" != X"$installprefix"; then
7601 installman3dir=`echo $man3direxp | $sed "s#^$prefix#$installprefix#"`
7602else
7603 installman3dir="$man3direxp"
7604fi
7605
7606: What suffix to use on installed man pages
7607case "$man3dir" in
7608' ')
7609 man3ext='0'
7610 ;;
7611*)
7612 rp="What suffix should be used for the $package library man pages?"
7613 case "$man3ext" in
7614 '') case "$man3dir" in
7615 *3) dflt=3 ;;
7616 *3p) dflt=3p ;;
7617 *3pm) dflt=3pm ;;
7618 *l) dflt=l;;
7619 *n) dflt=n;;
7620 *o) dflt=o;;
7621 *p) dflt=p;;
7622 *C) dflt=C;;
7623 *L) dflt=L;;
7624 *L3) dflt=L3;;
7625 *) dflt=3;;
7626 esac
7627 ;;
7628 *) dflt="$man3ext";;
7629 esac
7630 . ./myread
7631 man3ext="$ans"
7632 ;;
7633esac
7634
7635: see if we have to deal with yellow pages, now NIS.
7636if $test -d /usr/etc/yp || $test -d /etc/yp; then
7637 if $test -f /usr/etc/nibindd; then
7638 echo " "
7639 echo "I'm fairly confident you're on a NeXT."
7640 echo " "
7641 rp='Do you get the hosts file via NetInfo?'
7642 dflt=y
7643 case "$hostcat" in
7644 nidump*) ;;
7645 '') ;;
7646 *) dflt=n;;
7647 esac
7648 . ./myread
7649 case "$ans" in
7650 y*) hostcat='nidump hosts .';;
7651 *) case "$hostcat" in
7652 nidump*) hostcat='';;
7653 esac
7654 ;;
7655 esac
7656 fi
7657 case "$hostcat" in
7658 nidump*) ;;
7659 *)
7660 case "$hostcat" in
7661 *ypcat*) dflt=y;;
7662 '') if $contains '^\+' /etc/passwd >/dev/null 2>&1; then
7663 dflt=y
7664 else
7665 dflt=n
7666 fi;;
7667 *) dflt=n;;
7668 esac
7669 echo " "
7670 rp='Are you getting the hosts file via yellow pages?'
7671 . ./myread
7672 case "$ans" in
7673 y*) hostcat='ypcat hosts';;
7674 *) hostcat='cat /etc/hosts';;
7675 esac
7676 ;;
7677 esac
7678fi
7679case "$hostcat" in
7680'') test -f /etc/hosts && hostcat='cat /etc/hosts';;
7681esac
7682case "$groupcat" in
7683'') test -f /etc/group && groupcat='cat /etc/group';;
7684esac
7685case "$passcat" in
7686'') test -f /etc/passwd && passcat='cat /etc/passwd';;
7687esac
7688
7689: now get the host name
7690echo " "
7691echo "Figuring out host name..." >&4
7692case "$myhostname" in
7693'') cont=true
7694 echo 'Maybe "hostname" will work...'
73614538 7695 if tans=`sh -c hostname 2>&1` ; then
b4eb6b3d
JH
7696 myhostname=$tans
7697 phostname=hostname
7698 cont=''
7699 fi
7700 ;;
7701*) cont='';;
7702esac
7703if $test "$cont"; then
7704 if ./xenix; then
7705 echo 'Oh, dear. Maybe "/etc/systemid" is the key...'
7706 if tans=`cat /etc/systemid 2>&1` ; then
7707 myhostname=$tans
7708 phostname='cat /etc/systemid'
7709 echo "Whadyaknow. Xenix always was a bit strange..."
7710 cont=''
7711 fi
7712 elif $test -r /etc/systemid; then
7713 echo "(What is a non-Xenix system doing with /etc/systemid?)"
7714 fi
7715fi
7716if $test "$cont"; then
7717 echo 'No, maybe "uuname -l" will work...'
73614538 7718 if tans=`sh -c 'uuname -l' 2>&1` ; then
b4eb6b3d
JH
7719 myhostname=$tans
7720 phostname='uuname -l'
7721 else
7722 echo 'Strange. Maybe "uname -n" will work...'
73614538 7723 if tans=`sh -c 'uname -n' 2>&1` ; then
b4eb6b3d
JH
7724 myhostname=$tans
7725 phostname='uname -n'
7726 else
7727 echo 'Oh well, maybe I can mine it out of whoami.h...'
73614538 7728 if tans=`sh -c $contains' sysname $usrinc/whoami.h' 2>&1` ; then
b4eb6b3d
JH
7729 myhostname=`echo "$tans" | $sed 's/^.*"\(.*\)"/\1/'`
7730 phostname="sed -n -e '"'/sysname/s/^.*\"\\(.*\\)\"/\1/{'"' -e p -e q -e '}' <$usrinc/whoami.h"
7731 else
7732 case "$myhostname" in
7733 '') echo "Does this machine have an identity crisis or something?"
7734 phostname='';;
7735 *)
7736 echo "Well, you said $myhostname before..."
7737 phostname='echo $myhostname';;
7738 esac
7739 fi
7740 fi
7741 fi
7742fi
7743: you do not want to know about this
7744set $myhostname
7745myhostname=$1
7746
7747: verify guess
7748if $test "$myhostname" ; then
7749 dflt=y
7750 rp='Your host name appears to be "'$myhostname'".'" Right?"
7751 . ./myread
7752 case "$ans" in
7753 y*) ;;
7754 *) myhostname='';;
7755 esac
7756fi
7757
7758: bad guess or no guess
7759while $test "X$myhostname" = X ; do
7760 dflt=''
7761 rp="Please type the (one word) name of your host:"
7762 . ./myread
7763 myhostname="$ans"
7764done
7765
7766: translate upper to lower if necessary
7767case "$myhostname" in
7768*[A-Z]*)
7769 echo "(Normalizing case in your host name)"
7770 myhostname=`echo $myhostname | ./tr '[A-Z]' '[a-z]'`
7771 ;;
7772esac
7773
7774case "$myhostname" in
7775*.*)
7776 dflt=`expr "X$myhostname" : "X[^.]*\(\..*\)"`
7777 myhostname=`expr "X$myhostname" : "X\([^.]*\)\."`
7778 echo "(Trimming domain name from host name--host name is now $myhostname)"
7779 ;;
7780*) case "$mydomain" in
7781 '')
7782 {
7783 test "X$hostcat" = "Xypcat hosts" &&
7784 ypmatch "$myhostname" hosts 2>/dev/null |\
7785 $sed -e 's/[ ]*#.*//; s/$/ /' > hosts && \
7786 $test -s hosts
7787 } || {
7788 test "X$hostcat" != "X" &&
7789 $hostcat | $sed -n -e "s/[ ]*#.*//; s/\$/ /
7790 /[ ]$myhostname[ . ]/p" > hosts
7791 }
7792 tmp_re="[ . ]"
f08cbdd1
PP
7793 if $test -f hosts; then
7794 $test x`$awk "/[0-9].*[ ]$myhostname$tmp_re/ { sum++ }
b4eb6b3d 7795 END { print sum }" hosts` = x1 || tmp_re="[ ]"
f08cbdd1
PP
7796 dflt=.`$awk "/[0-9].*[ ]$myhostname$tmp_re/ {for(i=2; i<=NF;i++) print \\\$i}" \
7797 hosts | $sort | $uniq | \
7798 $sed -n -e "s/$myhostname\.\([-a-zA-Z0-9_.]\)/\1/p"`
7799 case `$echo X$dflt` in
7800 X*\ *) echo "(Several hosts in the database matched hostname)"
7801 dflt=.
7802 ;;
7803 X.) echo "(You do not have fully-qualified names in the hosts database)"
7804 ;;
7805 esac
7806 else
7807 echo "(I cannot locate a hosts database anywhere)"
b4eb6b3d 7808 dflt=.
f08cbdd1 7809 fi
b4eb6b3d
JH
7810 case "$dflt" in
7811 .)
7812 tans=`./loc resolv.conf X /etc /usr/etc`
7813 if $test -f "$tans"; then
7814 echo "(Attempting domain name extraction from $tans)"
7815 dflt=.`$sed -n -e 's/ / /g' \
7816 -e 's/^search *\([^ ]*\).*/\1/p' $tans \
7817 | ./tr '[A-Z]' '[a-z]' 2>/dev/null`
7818 case "$dflt" in
7819 .) dflt=.`$sed -n -e 's/ / /g' \
7820 -e 's/^domain *\([^ ]*\).*/\1/p' $tans \
7821 | ./tr '[A-Z]' '[a-z]' 2>/dev/null`
7822 ;;
7823 esac
7824 fi
7825 ;;
7826 esac
7827 case "$dflt" in
7828 .) echo "(No help from resolv.conf either -- attempting clever guess)"
73614538 7829 dflt=.`sh -c domainname 2>/dev/null`
b4eb6b3d
JH
7830 case "$dflt" in
7831 '') dflt='.';;
7832 .nis.*|.yp.*|.main.*) dflt=`echo $dflt | $sed -e 's/^\.[^.]*//'`;;
7833 esac
7834 ;;
7835 esac
59c9e5d6
PP
7836 case "$dflt$osname" in
7837 .os390) echo "(Attempting domain name extraction from //'SYS1.TCPPARMS(TCPDATA)')"
caf85fe8 7838 dflt=.`awk '/^DOMAINORIGIN/ {print $2}' "//'SYS1.TCPPARMS(TCPDATA)'" 2>/dev/null`
59c9e5d6
PP
7839 ;;
7840 esac
b4eb6b3d
JH
7841 case "$dflt" in
7842 .) echo "(Lost all hope -- silly guess then)"
7843 dflt='.uucp'
7844 ;;
7845 esac
7846 $rm -f hosts
7847 ;;
7848 *) dflt="$mydomain";;
7849 esac;;
7850esac
7851echo " "
7852rp="What is your domain name?"
7853. ./myread
7854tans="$ans"
7855case "$ans" in
7856'') ;;
7857.*) ;;
7858*) tans=".$tans";;
7859esac
7860mydomain="$tans"
7861
7862: translate upper to lower if necessary
7863case "$mydomain" in
7864*[A-Z]*)
7865 echo "(Normalizing case in your domain name)"
7866 mydomain=`echo $mydomain | ./tr '[A-Z]' '[a-z]'`
7867 ;;
7868esac
7869
7870: a little sanity check here
7871case "$phostname" in
7872'') ;;
7873*)
7874 case `$phostname | ./tr '[A-Z]' '[a-z]'` in
7875 $myhostname$mydomain|$myhostname) ;;
7876 *)
7877 case "$phostname" in
7878 sed*)
7879 echo "(That doesn't agree with your whoami.h file, by the way.)"
7880 ;;
7881 *)
7882 echo "(That doesn't agree with your $phostname command, by the way.)"
7883 ;;
7884 esac
7885 ;;
7886 esac
7887 ;;
7888esac
7889
7890$cat <<EOM
7891
7892I need to get your e-mail address in Internet format if possible, i.e.
7893something like user@host.domain. Please answer accurately since I have
7894no easy means to double check it. The default value provided below
7895is most probably close to reality but may not be valid from outside
7896your organization...
7897
7898EOM
7899cont=x
7900while test "$cont"; do
7901 case "$cf_email" in
7902 '') dflt="$cf_by@$myhostname$mydomain";;
7903 *) dflt="$cf_email";;
7904 esac
7905 rp='What is your e-mail address?'
7906 . ./myread
7907 cf_email="$ans"
7908 case "$cf_email" in
7909 *@*.*) cont='' ;;
7910 *)
7911 rp='Address does not look like an Internet one. Use it anyway?'
7912 case "$fastread" in
7913 yes) dflt=y ;;
7914 *) dflt=n ;;
7915 esac
7916 . ./myread
7917 case "$ans" in
7918 y*) cont='' ;;
7919 *) echo " " ;;
7920 esac
7921 ;;
7922 esac
7923done
7924
7925$cat <<EOM
7926
7927If you or somebody else will be maintaining perl at your site, please
7928fill in the correct e-mail address here so that they may be contacted
7929if necessary. Currently, the "perlbug" program included with perl
7930will send mail to this address in addition to perlbug@perl.org. You may
7931enter "none" for no administrator.
7932
7933EOM
7934case "$perladmin" in
7935'') dflt="$cf_email";;
7936*) dflt="$perladmin";;
7937esac
7938rp='Perl administrator e-mail address'
7939. ./myread
7940perladmin="$ans"
7941
674912d7
RB
7942: determine whether to only install version-specific parts.
7943echo " "
7944$cat <<EOM
7945Do you want to install only the version-specific parts of the perl
7946distribution? Usually you do *not* want to do this.
7947EOM
7948case "$versiononly" in
7949"$define"|[Yy]*|true) dflt='y' ;;
7950*) dflt='n';
7951esac
7952rp="Do you want to install only the version-specific parts of perl?"
7953. ./myread
7954case "$ans" in
7955[yY]*) val="$define";;
7956*) val="$undef" ;;
7957esac
7958set versiononly
7959eval $setvar
7960
b4eb6b3d
JH
7961: figure out how to guarantee perl startup
7962case "$startperl" in
7963'')
7964 case "$sharpbang" in
7965 *!)
7966 $cat <<EOH
7967
7968I can use the #! construct to start perl on your system. This will
7969make startup of perl scripts faster, but may cause problems if you
7970want to share those scripts and perl is not in a standard place
7971($binexp/perl) on all your platforms. The alternative is to force
7972a shell by starting the script with a single ':' character.
7973
7974EOH
674912d7
RB
7975 case "$versiononly" in
7976 "$define") dflt="$binexp/perl$version";;
7977 *) dflt="$binexp/perl";;
7978 esac
b4eb6b3d
JH
7979 rp='What shall I put after the #! to start up perl ("none" to not use #!)?'
7980 . ./myread
7981 case "$ans" in
7982 none) startperl=": # use perl";;
7983 *) startperl="#!$ans"
7984 if $test 30 -lt `echo "$ans" | wc -c`; then
7985 $cat >&4 <<EOM
7986
7987WARNING: Some systems limit the #! command to 32 characters.
7988If you experience difficulty running Perl scripts with #!, try
7989installing Perl in a directory with a shorter pathname.
7990
7991EOM
7992 fi ;;
7993 esac
7994 ;;
7995 *) startperl=": # use perl"
7996 ;;
7997 esac
7998 ;;
7999esac
8000echo "I'll use $startperl to start perl scripts."
8001
8002: figure best path for perl in scripts
8003case "$perlpath" in
8004'')
8005 perlpath="$binexp/perl"
8006 case "$startperl" in
8007 *!*) ;;
8008 *)
8009 $cat <<EOH
8010
8011I will use the "eval 'exec'" idiom to start Perl on your system.
8012I can use the full path of your Perl binary for this purpose, but
8013doing so may cause problems if you want to share those scripts and
8014Perl is not always in a standard place ($binexp/perl).
8015
8016EOH
8017 dflt="$binexp/perl"
8018 rp="What path shall I use in \"eval 'exec'\"?"
8019 . ./myread
8020 perlpath="$ans"
8021 ;;
8022 esac
8023 ;;
8024esac
8025case "$startperl" in
8026*!*) ;;
8027*) echo "I'll use $perlpath in \"eval 'exec'\"" ;;
8028esac
8029
8030: determine where public executable scripts go
8031set scriptdir scriptdir
8032eval $prefixit
8033case "$scriptdir" in
8034'')
8035 dflt="$bin"
8036 : guess some guesses
8037 $test -d /usr/share/scripts && dflt=/usr/share/scripts
8038 $test -d /usr/share/bin && dflt=/usr/share/bin
8039 $test -d /usr/local/script && dflt=/usr/local/script
8040 $test -d /usr/local/scripts && dflt=/usr/local/scripts
8041 $test -d $prefixexp/script && dflt=$prefixexp/script
8042 set dflt
8043 eval $prefixup
8044 ;;
8045*) dflt="$scriptdir"
8046 ;;
8047esac
8048$cat <<EOM
8049
8050Some installations have a separate directory just for executable scripts so
8051that they can mount it across multiple architectures but keep the scripts in
8052one spot. You might, for example, have a subdirectory of /usr/share for this.
8053Or you might just lump your scripts in with all your other executables.
8054
8055EOM
8056fn=d~
8057rp='Where do you keep publicly executable scripts?'
8058. ./getfile
8059if $test "X$ansexp" != "X$scriptdirexp"; then
8060 installscript=''
8061fi
8062scriptdir="$ans"
8063scriptdirexp="$ansexp"
8064: Change installation prefix, if necessary.
8065if $test X"$prefix" != X"$installprefix"; then
8066 installscript=`echo $scriptdirexp | sed "s#^$prefix#$installprefix#"`
8067else
8068 installscript="$scriptdirexp"
8069fi
8070
8071: determine where add-on public executables go
8072case "$sitebin" in
8073'') dflt=$siteprefix/bin ;;
8074*) dflt=$sitebin ;;
8075esac
8076fn=d~
8077rp='Pathname where the add-on public executables should be installed?'
8078. ./getfile
8079sitebin="$ans"
8080sitebinexp="$ansexp"
8081: Change installation prefix, if necessary.
8082if $test X"$prefix" != X"$installprefix"; then
8083 installsitebin=`echo $sitebinexp | sed "s#^$prefix#$installprefix#"`
8084else
8085 installsitebin="$sitebinexp"
8086fi
8087
96056487
JH
8088: define an is-a-typedef? function
8089typedef='type=$1; var=$2; def=$3; shift; shift; shift; inclist=$@;
8090case "$inclist" in
8091"") inclist="sys/types.h";;
8092esac;
8093eval "varval=\$$var";
8094case "$varval" in
8095"")
8096 $rm -f temp.c;
8097 for inc in $inclist; do
8098 echo "#include <$inc>" >>temp.c;
8099 done;
8100 echo "#ifdef $type" >> temp.c;
8101 echo "printf(\"We have $type\");" >> temp.c;
8102 echo "#endif" >> temp.c;
8103 $cppstdin $cppflags $cppminus < temp.c >temp.E 2>/dev/null;
8104 if $contains $type temp.E >/dev/null 2>&1; then
8105 eval "$var=\$type";
8106 else
8107 eval "$var=\$def";
8108 fi;
8109 $rm -f temp.?;;
8110*) eval "$var=\$varval";;
8111esac'
8112
8113: define an is-a-typedef? function that prompts if the type is not available.
8114typedef_ask='type=$1; var=$2; def=$3; shift; shift; shift; inclist=$@;
8115case "$inclist" in
8116"") inclist="sys/types.h";;
8117esac;
8118eval "varval=\$$var";
8119case "$varval" in
8120"")
8121 $rm -f temp.c;
8122 for inc in $inclist; do
8123 echo "#include <$inc>" >>temp.c;
8124 done;
8125 echo "#ifdef $type" >> temp.c;
8126 echo "printf(\"We have $type\");" >> temp.c;
8127 echo "#endif" >> temp.c;
8128 $cppstdin $cppflags $cppminus < temp.c >temp.E 2>/dev/null;
8129 echo " " ;
8130 echo "$rp" | $sed -e "s/What is/Looking for/" -e "s/?/./";
8131 if $contains $type temp.E >/dev/null 2>&1; then
8132 echo "$type found." >&4;
8133 eval "$var=\$type";
8134 else
8135 echo "$type NOT found." >&4;
8136 dflt="$def";
8137 . ./myread ;
8138 eval "$var=\$ans";
8139 fi;
8140 $rm -f temp.?;;
8141*) eval "$var=\$varval";;
8142esac'
8143
8144: see what type lseek is declared as in the kernel
8145rp="What is the type used for lseek's offset on this system?"
8146set off_t lseektype long stdio.h sys/types.h
8147eval $typedef_ask
8148
8149echo " "
8150echo "Checking to see how big your file offsets are..." >&4
8151$cat >try.c <<EOCP
8152#include <sys/types.h>
8153#include <stdio.h>
8154int main()
8155{
8156 printf("%d\n", (int)sizeof($lseektype));
8157 return(0);
8158}
8159EOCP
8160set try
8161if eval $compile_ok; then
8162 lseeksize=`$run ./try`
8163 echo "Your file offsets are $lseeksize bytes long."
8164else
8165 dflt=$longsize
8166 echo " "
8167 echo "(I can't seem to compile the test program. Guessing...)"
8168 rp="What is the size of your file offsets (in bytes)?"
8169 . ./myread
8170 lseeksize="$ans"
8171fi
8172$rm -f try.c try
8173
8174: see what type file positions are declared as in the library
8175rp="What is the type for file position used by fsetpos()?"
8176set fpos_t fpostype long stdio.h sys/types.h
8177eval $typedef_ask
8178
8179echo " "
8180case "$fpostype" in
8181*_t) zzz="$fpostype" ;;
8182*) zzz="fpos_t" ;;
8183esac
8184echo "Checking the size of $zzz..." >&4
8185cat > try.c <<EOCP
8186#include <sys/types.h>
8187#include <stdio.h>
8188int main() {
8189 printf("%d\n", (int)sizeof($fpostype));
8190 exit(0);
8191}
8192EOCP
8193set try
8194if eval $compile_ok; then
8195 yyy=`$run ./try`
8196 case "$yyy" in
8197 '') fpossize=4
8198 echo "(I can't execute the test program--guessing $fpossize.)" >&4
8199 ;;
8200 *) fpossize=$yyy
8201 echo "Your $zzz is $fpossize bytes long."
8202 ;;
8203 esac
8204else
8205 dflt="$longsize"
8206 echo " " >&4
8207 echo "(I can't compile the test program. Guessing...)" >&4
8208 rp="What is the size of your file positions (in bytes)?"
8209 . ./myread
8210 fpossize="$ans"
8211fi
8212
8213
8214
8215# Backward compatibility (uselfs is deprecated).
8216case "$uselfs" in
8217"$define"|true|[yY]*)
8218 cat <<EOM >&4
8219
8220*** Configure -Duselfs is deprecated, using -Duselargefiles instead.
8221EOM
8222 uselargefiles="$define"
8223 ;;
8224esac
8225
8226case "$lseeksize:$fpossize" in
82278:8) cat <<EOM
8228
8229You can have files larger than 2 gigabytes.
8230EOM
8231 val="$define" ;;
8232*) case "$uselargefiles" in
8233 "$undef"|false|[nN]*) dflt='n' ;;
8234 *) dflt='y' ;;
8235 esac
8236 cat <<EOM
8237
8238Perl can be built to understand large files (files larger than 2 gigabytes)
8239on some systems. To do so, Configure can be run with -Duselargefiles.
8240
8241If this doesn't make any sense to you, just accept the default '$dflt'.
8242EOM
8243 rp='Try to understand large files, if available?'
8244 . ./myread
8245 case "$ans" in
8246 y|Y) val="$define" ;;
8247 *) val="$undef" ;;
8248 esac
8249 ;;
8250esac
8251set uselargefiles
8252eval $setvar
8253case "$uselargefiles" in
8254"$define")
8255: Look for a hint-file generated 'call-back-unit'. If the
8256: user has specified that a large files perl is to be built,
8257: we may need to set or change some other defaults.
8258 if $test -f uselargefiles.cbu; then
8259 echo "Your platform has some specific hints for large file builds, using them..."
8260 . ./uselargefiles.cbu
8261 echo " "
8262 echo "Rechecking to see how big your file offsets are..." >&4
8263 $cat >try.c <<EOCP
8264#include <sys/types.h>
8265#include <stdio.h>
8266int main()
8267{
8268 printf("%d\n", (int)sizeof($lseektype));
8269 return(0);
8270}
8271EOCP
8272 set try
8273 if eval $compile_ok; then
8274 lseeksize=`$run ./try`
8275 $echo "Your file offsets are now $lseeksize bytes long."
8276 else
8277 dflt="$lseeksize"
8278 echo " "
8279 echo "(I can't seem to compile the test program. Guessing...)"
8280 rp="What is the size of your file offsets (in bytes)?"
8281 . ./myread
8282 lseeksize="$ans"
8283 fi
8284 case "$fpostype" in
8285 *_t) zzz="$fpostype" ;;
8286 *) zzz="fpos_t" ;;
8287 esac
8288 $echo $n "Rechecking the size of $zzz...$c" >&4
8289 $cat > try.c <<EOCP
8290#include <sys/types.h>
8291#include <stdio.h>
8292int main() {
8293 printf("%d\n", (int)sizeof($fpostype));
8294 exit(0);
8295}
8296EOCP
8297 set try
8298 if eval $compile_ok; then
8299 yyy=`$run ./try`
8300 dflt="$lseeksize"
8301 case "$yyy" in
8302 '') echo " "
8303 echo "(I can't execute the test program--guessing $fpossize.)" >&4
8304 ;;
8305 *) fpossize=$yyy
8306 echo " $fpossize bytes." >&4
8307 ;;
8308 esac
8309 else
8310 dflt="$fpossize"
8311 echo " "
8312 echo "(I can't compile the test program. Guessing...)" >&4
8313 rp="What is the size of your file positions (in bytes)?"
8314 . ./myread
8315 fpossize="$ans"
8316 fi
8317 $rm -f try.c try
8318 fi
8319 ;;
8320esac
8321
b4eb6b3d
JH
8322case "$vendorprefix" in
8323'') d_vendorbin="$undef"
8324 vendorbin=''
8325 vendorbinexp=''
8326 ;;
8327*) d_vendorbin="$define"
8328 : determine where vendor-supplied executables go.
8329 case "$vendorbin" in
8330 '') dflt=$vendorprefix/bin ;;
8331 *) dflt="$vendorbin" ;;
8332 esac
8333 fn=d~+
8334 rp='Pathname for the vendor-supplied executables directory?'
8335 . ./getfile
8336 vendorbin="$ans"
8337 vendorbinexp="$ansexp"
8338 ;;
8339esac
8340: Change installation prefix, if necessary.
8341if $test X"$prefix" != X"$installprefix"; then
8342 installvendorbin=`echo $vendorbinexp | $sed "s#^$prefix#$installprefix#"`
8343else
8344 installvendorbin="$vendorbinexp"
8345fi
8346
8347: see if qgcvt exists
8348set qgcvt d_qgcvt
8349eval $inlibc
8350
8351echo " "
8352
8353if $test X"$d_longdbl" = X"$define"; then
8354
8355echo "Checking how to print long doubles..." >&4
8356
8357if $test X"$sPRIfldbl" = X -a X"$doublesize" = X"$longdblsize"; then
8358 $cat >try.c <<'EOCP'
8359#include <sys/types.h>
8360#include <stdio.h>
8361int main() {
8362 double d = 123.456;
8363 printf("%.3f\n", d);
8364}
8365EOCP
8366 set try
8367 if eval $compile; then
5440bc8e 8368 yyy=`$run ./try`
b4eb6b3d
JH
8369 case "$yyy" in
8370 123.456)
8371 sPRIfldbl='"f"'; sPRIgldbl='"g"'; sPRIeldbl='"e"';
8372 sPRIFUldbl='"F"'; sPRIGUldbl='"G"'; sPRIEUldbl='"E"';
8373 echo "We will use %f."
8374 ;;
8375 esac
8376 fi
8377fi
8378
8379if $test X"$sPRIfldbl" = X; then
8380 $cat >try.c <<'EOCP'
8381#include <sys/types.h>
8382#include <stdio.h>
8383int main() {
8384 long double d = 123.456;
2ef53570 8385 printf("%.3Lf\n", d);
b4eb6b3d
JH
8386}
8387EOCP
8388 set try
8389 if eval $compile; then
5440bc8e 8390 yyy=`$run ./try`
b4eb6b3d
JH
8391 case "$yyy" in
8392 123.456)
2ef53570
JH
8393 sPRIfldbl='"Lf"'; sPRIgldbl='"Lg"'; sPRIeldbl='"Le"';
8394 sPRIFUldbl='"LF"'; sPRIGUldbl='"LG"'; sPRIEUldbl='"LE"';
8395 echo "We will use %Lf."
b4eb6b3d
JH
8396 ;;
8397 esac
8398 fi
8399fi
8400
8401if $test X"$sPRIfldbl" = X; then
8402 $cat >try.c <<'EOCP'
8403#include <sys/types.h>
8404#include <stdio.h>
8405int main() {
8406 long double d = 123.456;
2ef53570 8407 printf("%.3llf\n", d);
b4eb6b3d
JH
8408}
8409EOCP
8410 set try
8411 if eval $compile; then
5440bc8e 8412 yyy=`$run ./try`
b4eb6b3d
JH
8413 case "$yyy" in
8414 123.456)
2ef53570
JH
8415 sPRIfldbl='"llf"'; sPRIgldbl='"llg"'; sPRIeldbl='"lle"';
8416 sPRIFUldbl='"llF"'; sPRIGUldbl='"llG"'; sPRIEUldbl='"llE"';
8417 echo "We will use %llf."
b4eb6b3d
JH
8418 ;;
8419 esac
8420 fi
8421fi
8422
8423if $test X"$sPRIfldbl" = X; then
8424 $cat >try.c <<'EOCP'
8425#include <sys/types.h>
8426#include <stdio.h>
8427int main() {
8428 long double d = 123.456;
8429 printf("%.3lf\n", d);
8430}
8431EOCP
8432 set try
8433 if eval $compile; then
5440bc8e 8434 yyy=`$run ./try`
b4eb6b3d
JH
8435 case "$yyy" in
8436 123.456)
8437 sPRIfldbl='"lf"'; sPRIgldbl='"lg"'; sPRIeldbl='"le"';
8438 sPRIFUldbl='"lF"'; sPRIGUldbl='"lG"'; sPRIEUldbl='"lE"';
8439 echo "We will use %lf."
8440 ;;
8441 esac
8442 fi
8443fi
8444
8445if $test X"$sPRIfldbl" = X; then
8446 echo "Cannot figure out how to print long doubles." >&4
8447else
8448 sSCNfldbl=$sPRIfldbl # expect consistency
8449fi
8450
8451$rm -f try try.*
8452
8453fi # d_longdbl
8454
8455case "$sPRIfldbl" in
8456'') d_PRIfldbl="$undef"; d_PRIgldbl="$undef"; d_PRIeldbl="$undef";
8457 d_PRIFUldbl="$undef"; d_PRIGUldbl="$undef"; d_PRIEUldbl="$undef";
8458 d_SCNfldbl="$undef";
8459 ;;
8460*) d_PRIfldbl="$define"; d_PRIgldbl="$define"; d_PRIeldbl="$define";
8461 d_PRIFUldbl="$define"; d_PRIGUldbl="$define"; d_PRIEUldbl="$define";
8462 d_SCNfldbl="$define";
8463 ;;
8464esac
8465
8466: Check how to convert floats to strings.
8467echo " "
8468echo "Checking for an efficient way to convert floats to strings."
8469echo " " > try.c
8470case "$uselongdouble" in
8471"$define") echo "#define USE_LONG_DOUBLE" >>try.c ;;
8472esac
8473case "$d_longdbl" in
8474"$define") echo "#define HAS_LONG_DOUBLE" >>try.c ;;
8475esac
8476case "$d_PRIgldbl" in
8477"$define") echo "#define HAS_PRIgldbl" >>try.c ;;
8478esac
8479$cat >>try.c <<EOP
8480#ifdef TRY_gconvert
8481#define Gconvert(x,n,t,b) gconvert((x),(n),(t),(b))
8482char *myname = "gconvert";
8483#endif
8484#ifdef TRY_gcvt
8485#define Gconvert(x,n,t,b) gcvt((x),(n),(b))
8486char *myname = "gcvt";
8487#endif
8488#ifdef TRY_qgcvt
8489#define Gconvert(x,n,t,b) qgcvt((x),(n),(b))
8490char *myname = "qgcvt";
8491#define DOUBLETYPE long double
8492#endif
8493#ifdef TRY_sprintf
8494#if defined(USE_LONG_DOUBLE) && defined(HAS_LONG_DOUBLE) && defined(HAS_PRIgldbl)
8495#define Gconvert(x,n,t,b) sprintf((b),"%.*"$sPRIgldbl,(n),(x))
8496#else
8497#define Gconvert(x,n,t,b) sprintf((b),"%.*g",(n),(x))
8498#endif
8499char *myname = "sprintf";
8500#endif
8501
8502#ifndef DOUBLETYPE
8503#if defined(USE_LONG_DOUBLE) && defined(HAS_LONG_DOUBLE)
8504#define DOUBLETYPE long double
8505#else
8506#define DOUBLETYPE double
8507#endif
8508#endif
8509
8510#include <stdio.h>
8511
8512#define I_STDLIB $i_stdlib
8513#ifdef I_STDLIB
8514#include <stdlib.h>
8515#endif
8516
8517int
8518checkit(expect, got)
8519char *expect;
8520char *got;
8521{
8522 if (strcmp(expect, got)) {
8523 printf("%s oddity: Expected %s, got %s\n",
8524 myname, expect, got);
8525 exit(1);
8526 }
8527}
8528
8529int main()
8530{
8531 char buf[64];
8532 buf[63] = '\0';
8533
8534 /* This must be 1st test on (which?) platform */
8535 /* Alan Burlison <AlanBurlsin@unn.unisys.com> */
8536 Gconvert((DOUBLETYPE)0.1, 8, 0, buf);
8537 checkit("0.1", buf);
8538
8539 Gconvert((DOUBLETYPE)1.0, 8, 0, buf);
8540 checkit("1", buf);
8541
8542 Gconvert((DOUBLETYPE)1.1, 8, 0, buf);
8543 checkit("1.1", buf);
8544
8545 Gconvert((DOUBLETYPE)1.01, 8, 0, buf);
8546 checkit("1.01", buf);
8547
8548 Gconvert((DOUBLETYPE)1.001, 8, 0, buf);
8549 checkit("1.001", buf);
8550
8551 Gconvert((DOUBLETYPE)1.0001, 8, 0, buf);
8552 checkit("1.0001", buf);
8553
8554 Gconvert((DOUBLETYPE)1.00001, 8, 0, buf);
8555 checkit("1.00001", buf);
8556
8557 Gconvert((DOUBLETYPE)1.000001, 8, 0, buf);
8558 checkit("1.000001", buf);
8559
8560 Gconvert((DOUBLETYPE)0.0, 8, 0, buf);
8561 checkit("0", buf);
8562
8563 Gconvert((DOUBLETYPE)-1.0, 8, 0, buf);
8564 checkit("-1", buf);
8565
8566 /* Some Linux gcvt's give 1.e+5 here. */
8567 Gconvert((DOUBLETYPE)100000.0, 8, 0, buf);
8568 checkit("100000", buf);
8569
8570 /* Some Linux gcvt's give -1.e+5 here. */
8571 Gconvert((DOUBLETYPE)-100000.0, 8, 0, buf);
8572 checkit("-100000", buf);
8573
8574 Gconvert((DOUBLETYPE)123.456, 8, 0, buf);
8575 checkit("123.456", buf);
8576
8e2a5ede
SB
8577 /* Testing of 1e+129 in bigintpm.t must not get extra '.' here. */
8578 Gconvert((DOUBLETYPE)1e30, 8, 0, buf);
8579 if (strlen(buf) > 5)
8580 checkit("1e+030", buf); /* for Microsoft */
8581 else
8582 checkit("1e+30", buf);
8583
b4eb6b3d
JH
8584 exit(0);
8585}
8586EOP
8587case "$d_Gconvert" in
8588gconvert*) xxx_list='gconvert gcvt sprintf' ;;
8589gcvt*) xxx_list='gcvt gconvert sprintf' ;;
8590sprintf*) xxx_list='sprintf gconvert gcvt' ;;
8591*) xxx_list='gconvert gcvt sprintf' ;;
8592esac
8593
8594case "$d_longdbl$uselongdouble$d_PRIgldbl" in
8595"$define$define$define")
8596 # for long doubles prefer first qgcvt, then sprintf
8597 xxx_list="`echo $xxx_list|sed s/sprintf//`"
8598 xxx_list="sprintf $xxx_list"
8599 case "$d_qgcvt" in
8600 "$define") xxx_list="qgcvt $xxx_list" ;;
8601 esac
8602 ;;
8603esac
8604
8605for xxx_convert in $xxx_list; do
8606 echo "Trying $xxx_convert..."
8607 $rm -f try try$_o
8608 set try -DTRY_$xxx_convert
8609 if eval $compile; then
8610 echo "$xxx_convert() found." >&4
5440bc8e 8611 if $run ./try; then
b4eb6b3d
JH
8612 echo "I'll use $xxx_convert to convert floats into a string." >&4
8613 break;
8614 else
8615 echo "...But $xxx_convert didn't work as I expected."
8616 fi
8617 else
8618 echo "$xxx_convert NOT found." >&4
8619 fi
8620done
8621
8622case "$xxx_convert" in
8623gconvert) d_Gconvert='gconvert((x),(n),(t),(b))' ;;
8624gcvt) d_Gconvert='gcvt((x),(n),(b))' ;;
8625qgcvt) d_Gconvert='qgcvt((x),(n),(b))' ;;
8626*) case "$uselongdouble$d_longdbl$d_PRIgldbl" in
8627 "$define$define$define")
8628 d_Gconvert="sprintf((b),\"%.*\"$sPRIgldbl,(n),(x))" ;;
8629 *) d_Gconvert='sprintf((b),"%.*g",(n),(x))' ;;
8630 esac
8631 ;;
8632esac
8633
74cac757
JH
8634: see if _fwalk exists
8635set fwalk d__fwalk
8636eval $inlibc
8637
b4eb6b3d
JH
8638: Initialize h_fcntl
8639h_fcntl=false
8640
8641: Initialize h_sysfile
8642h_sysfile=false
8643
8644: access call always available on UNIX
8645set access d_access
8646eval $inlibc
8647
8648: locate the flags for 'access()'
8649case "$d_access" in
8650"$define")
8651 echo " "
8652 $cat >access.c <<'EOCP'
8653#include <sys/types.h>
8654#ifdef I_FCNTL
8655#include <fcntl.h>
8656#endif
8657#ifdef I_SYS_FILE
8658#include <sys/file.h>
8659#endif
8660#ifdef I_UNISTD
8661#include <unistd.h>
8662#endif
8663int main() {
8664 exit(R_OK);
8665}
8666EOCP
8667 : check sys/file.h first, no particular reason here
8668 if $test `./findhdr sys/file.h` && \
7a282f6d 8669 $cc -o access $cppflags -DI_SYS_FILE access.c >/dev/null 2>&1 ; then
b4eb6b3d
JH
8670 h_sysfile=true;
8671 echo "<sys/file.h> defines the *_OK access constants." >&4
8672 elif $test `./findhdr fcntl.h` && \
7a282f6d 8673 $cc -o access $cppflags -DI_FCNTL access.c >/dev/null 2>&1 ; then
b4eb6b3d
JH
8674 h_fcntl=true;
8675 echo "<fcntl.h> defines the *_OK access constants." >&4
8676 elif $test `./findhdr unistd.h` && \
7a282f6d 8677 $cc -o access $cppflags -DI_UNISTD access.c >/dev/null 2>&1 ; then
b4eb6b3d
JH
8678 echo "<unistd.h> defines the *_OK access constants." >&4
8679 else
8680 echo "I can't find the four *_OK access constants--I'll use mine." >&4
8681 fi
8682 ;;
8683esac
8684$rm -f access*
8685
8686: see if accessx exists
8687set accessx d_accessx
8688eval $inlibc
8689
8690: see if alarm exists
8691set alarm d_alarm
8692eval $inlibc
8693
8694: see if atolf exists
8695set atolf d_atolf
8696eval $inlibc
8697
8698: see if atoll exists
8699set atoll d_atoll
8700eval $inlibc
8701
8702: Look for GNU-cc style attribute checking
8703echo " "
8704echo "Checking whether your compiler can handle __attribute__ ..." >&4
8705$cat >attrib.c <<'EOCP'
8706#include <stdio.h>
8707void croak (char* pat,...) __attribute__((format(printf,1,2),noreturn));
8708EOCP
8709if $cc $ccflags -c attrib.c >attrib.out 2>&1 ; then
8710 if $contains 'warning' attrib.out >/dev/null 2>&1; then
8711 echo "Your C compiler doesn't fully support __attribute__."
8712 val="$undef"
8713 else
8714 echo "Your C compiler supports __attribute__."
8715 val="$define"
8716 fi
8717else
8718 echo "Your C compiler doesn't seem to understand __attribute__ at all."
8719 val="$undef"
8720fi
8721set d_attribut
8722eval $setvar
8723$rm -f attrib*
8724
8725: see if bcmp exists
8726set bcmp d_bcmp
8727eval $inlibc
8728
8729: see if bcopy exists
8730set bcopy d_bcopy
8731eval $inlibc
8732
8733: see if this is a unistd.h system
8734set unistd.h i_unistd
8735eval $inhdr
8736
8737: see if getpgrp exists
8738set getpgrp d_getpgrp
8739eval $inlibc
8740
8741case "$d_getpgrp" in
8742"$define")
8743 echo " "
8744 echo "Checking to see which flavor of getpgrp is in use..."
5440bc8e 8745 $cat >try.c <<EOP
b4eb6b3d
JH
8746#$i_unistd I_UNISTD
8747#include <sys/types.h>
8748#ifdef I_UNISTD
8749# include <unistd.h>
8750#endif
8751int main()
8752{
8753 if (getuid() == 0) {
8754 printf("(I see you are running Configure as super-user...)\n");
8755 setuid(1);
8756 }
8757#ifdef TRY_BSD_PGRP
8758 if (getpgrp(1) == 0)
8759 exit(0);
8760#else
8761 if (getpgrp() > 0)
8762 exit(0);
8763#endif
8764 exit(1);
8765}
8766EOP
5440bc8e 8767 if $cc -o try -DTRY_BSD_PGRP $ccflags $ldflags try.c $libs >/dev/null 2>&1 && $run ./try; then
b4eb6b3d
JH
8768 echo "You have to use getpgrp(pid) instead of getpgrp()." >&4
8769 val="$define"
5440bc8e 8770 elif $cc -o try $ccflags $ldflags try.c $libs >/dev/null 2>&1 && $run ./try; then
b4eb6b3d
JH
8771 echo "You have to use getpgrp() instead of getpgrp(pid)." >&4
8772 val="$undef"
8773 else
8774 echo "I can't seem to compile and run the test program."
8775 if ./usg; then
8776 xxx="a USG one, i.e. you use getpgrp()."
8777 else
8778 # SVR4 systems can appear rather BSD-ish.
8779 case "$i_unistd" in
8780 $undef)
8781 xxx="a BSD one, i.e. you use getpgrp(pid)."
8782 val="$define"
8783 ;;
8784 $define)
8785 xxx="probably a USG one, i.e. you use getpgrp()."
8786 val="$undef"
8787 ;;
8788 esac
8789 fi
8790 echo "Assuming your getpgrp is $xxx" >&4
8791 fi
8792 ;;
8793*) val="$undef";;
8794esac
8795set d_bsdgetpgrp
8796eval $setvar
5440bc8e 8797$rm -f try try.*
b4eb6b3d
JH
8798
8799: see if setpgrp exists
8800set setpgrp d_setpgrp
8801eval $inlibc
8802
8803case "$d_setpgrp" in
8804"$define")
8805 echo " "
8806 echo "Checking to see which flavor of setpgrp is in use..."
5440bc8e 8807 $cat >try.c <<EOP
b4eb6b3d
JH
8808#$i_unistd I_UNISTD
8809#include <sys/types.h>
8810#ifdef I_UNISTD
8811# include <unistd.h>
8812#endif
8813int main()
8814{
8815 if (getuid() == 0) {
8816 printf("(I see you are running Configure as super-user...)\n");
8817 setuid(1);
8818 }
8819#ifdef TRY_BSD_PGRP
8820 if (-1 == setpgrp(1, 1))
8821 exit(0);
8822#else
8823 if (setpgrp() != -1)
8824 exit(0);
8825#endif
8826 exit(1);
8827}
8828EOP
5440bc8e 8829 if $cc -o try -DTRY_BSD_PGRP $ccflags $ldflags try.c $libs >/dev/null 2>&1 && $run ./try; then
b4eb6b3d
JH
8830 echo 'You have to use setpgrp(pid,pgrp) instead of setpgrp().' >&4
8831 val="$define"
5440bc8e 8832 elif $cc -o try $ccflags $ldflags try.c $libs >/dev/null 2>&1 && $run ./try; then
b4eb6b3d
JH
8833 echo 'You have to use setpgrp() instead of setpgrp(pid,pgrp).' >&4
8834 val="$undef"
8835 else
8836 echo "(I can't seem to compile and run the test program.)"
8837 if ./usg; then
8838 xxx="a USG one, i.e. you use setpgrp()."
8839 else
8840 # SVR4 systems can appear rather BSD-ish.
8841 case "$i_unistd" in
8842 $undef)
8843 xxx="a BSD one, i.e. you use setpgrp(pid,pgrp)."
8844 val="$define"
8845 ;;
8846 $define)
8847 xxx="probably a USG one, i.e. you use setpgrp()."
8848 val="$undef"
8849 ;;
8850 esac
8851 fi
8852 echo "Assuming your setpgrp is $xxx" >&4
8853 fi
8854 ;;
8855*) val="$undef";;
8856esac
8857set d_bsdsetpgrp
8858eval $setvar
5440bc8e 8859$rm -f try try.*
b4eb6b3d
JH
8860: see if bzero exists
8861set bzero d_bzero
8862eval $inlibc
8863
8864: see if signal is declared as pointer to function returning int or void
8865echo " "
8866xxx=`./findhdr signal.h`
8867$test "$xxx" && $cppstdin $cppminus $cppflags < $xxx >$$.tmp 2>/dev/null
8868if $contains 'int.*\*[ ]*signal' $$.tmp >/dev/null 2>&1 ; then
8869 echo "You have int (*signal())() instead of void." >&4
8870 val="$undef"
8871elif $contains 'void.*\*[ ]*signal' $$.tmp >/dev/null 2>&1 ; then
8872 echo "You have void (*signal())()." >&4
8873 val="$define"
8874elif $contains 'extern[ ]*[(\*]*signal' $$.tmp >/dev/null 2>&1 ; then
8875 echo "You have int (*signal())() instead of void." >&4
8876 val="$undef"
8877elif $contains 'void.*\*.*sig' $$.tmp >/dev/null 2>&1 ; then
8878 echo "You have void (*signal())()." >&4
8879 val="$define"
8880else
8881 case "$d_voidsig" in
8882 '')
8883 echo "I can't determine whether signal handler returns void or int..." >&4
8884 dflt=void
8885 rp="What type does your signal handler return?"
8886 . ./myread
8887 case "$ans" in
8888 v*) val="$define";;
8889 *) val="$undef";;
8890 esac;;
8891 "$define")
8892 echo "As you already told me, signal handler returns void." >&4
8893 val="$define"
8894 ;;
8895 *) echo "As you already told me, signal handler returns int." >&4
8896 val="$undef"
8897 ;;
8898 esac
8899fi
8900set d_voidsig
8901eval $setvar
8902case "$d_voidsig" in
8903"$define") signal_t="void";;
8904*) signal_t="int";;
8905esac
8906$rm -f $$.tmp
8907
8908: check for ability to cast large floats to 32-bit ints.
8909echo " "
8910echo 'Checking whether your C compiler can cast large floats to int32.' >&4
8911if $test "$intsize" -ge 4; then
8912 xxx=int
8913else
8914 xxx=long
8915fi
8916$cat >try.c <<EOCP
8917#include <stdio.h>
8918#include <sys/types.h>
8919#include <signal.h>
8920$signal_t blech(s) int s; { exit(3); }
8921int main()
8922{
8923 $xxx i32;
8924 double f, g;
8925 int result = 0;
8926 char str[16];
8927 signal(SIGFPE, blech);
8928
8929 /* Don't let compiler optimize the test away. Store the number
8930 in a writable string for gcc to pass to sscanf under HP/UX.
8931 */
8932 sprintf(str, "2147483647");
8933 sscanf(str, "%lf", &f); /* f = (double) 0x7fffffff; */
8934 g = 10 * f;
8935 i32 = ($xxx) g;
8936
8937 /* x86 processors will probably give 0x8000 0000, which is a
8938 sign change. We don't want that. We want to mimic SPARC
8939 behavior here, which is to preserve the sign and give
8940 back 0x7fff ffff.
8941 */
8942 if (i32 != ($xxx) f)
8943 result |= 1;
8944 exit(result);
8945}
8946EOCP
8947set try
8948if eval $compile_ok; then
5440bc8e 8949 $run ./try
b4eb6b3d
JH
8950 yyy=$?
8951else
8952 echo "(I can't seem to compile the test program--assuming it can't)"
8953 yyy=1
8954fi
8955case "$yyy" in
89560) val="$define"
8957 echo "Yup, it can."
8958 ;;
8959*) val="$undef"
8960 echo "Nope, it can't."
8961 ;;
8962esac
8963set d_casti32
8964eval $setvar
8965$rm -f try try.*
8966
8967: check for ability to cast negative floats to unsigned
8968echo " "
8969echo 'Checking whether your C compiler can cast negative float to unsigned.' >&4
8970$cat >try.c <<EOCP
8971#include <stdio.h>
8972#include <sys/types.h>
8973#include <signal.h>
8974$signal_t blech(s) int s; { exit(7); }
8975$signal_t blech_in_list(s) int s; { exit(4); }
8976unsigned long dummy_long(p) unsigned long p; { return p; }
8977unsigned int dummy_int(p) unsigned int p; { return p; }
8978unsigned short dummy_short(p) unsigned short p; { return p; }
8979int main()
8980{
8981 double f;
8982 unsigned long along;
8983 unsigned int aint;
8984 unsigned short ashort;
8985 int result = 0;
8986 char str[16];
8987
8988 /* Frustrate gcc-2.7.2's optimizer which failed this test with
8989 a direct f = -123. assignment. gcc-2.8.0 reportedly
8990 optimized the whole file away
8991 */
8992 /* Store the number in a writable string for gcc to pass to
8993 sscanf under HP/UX.
8994 */
8995 sprintf(str, "-123");
8996 sscanf(str, "%lf", &f); /* f = -123.; */
8997
8998 signal(SIGFPE, blech);
8999 along = (unsigned long)f;
9000 aint = (unsigned int)f;
9001 ashort = (unsigned short)f;
9002 if (along != (unsigned long)-123)
9003 result |= 1;
9004 if (aint != (unsigned int)-123)
9005 result |= 1;
9006 if (ashort != (unsigned short)-123)
9007 result |= 1;
9008 sprintf(str, "1073741824.");
9009 sscanf(str, "%lf", &f); /* f = (double)0x40000000; */
9010 f = f + f;
9011 along = 0;
9012 along = (unsigned long)f;
9013 if (along != 0x80000000)
9014 result |= 2;
9015 f -= 1.;
9016 along = 0;
9017 along = (unsigned long)f;
9018 if (along != 0x7fffffff)
9019 result |= 1;
9020 f += 2.;
9021 along = 0;
9022 along = (unsigned long)f;
9023 if (along != 0x80000001)
9024 result |= 2;
9025 if (result)
9026 exit(result);
9027 signal(SIGFPE, blech_in_list);
9028 sprintf(str, "123.");
9029 sscanf(str, "%lf", &f); /* f = 123.; */
9030 along = dummy_long((unsigned long)f);
9031 aint = dummy_int((unsigned int)f);
9032 ashort = dummy_short((unsigned short)f);
9033 if (along != (unsigned long)123)
9034 result |= 4;
9035 if (aint != (unsigned int)123)
9036 result |= 4;
9037 if (ashort != (unsigned short)123)
9038 result |= 4;
9039 exit(result);
9040
9041}
9042EOCP
9043set try
9044if eval $compile_ok; then
5440bc8e 9045 $run ./try
b4eb6b3d
JH
9046 castflags=$?
9047else
9048 echo "(I can't seem to compile the test program--assuming it can't)"
9049 castflags=7
9050fi
9051case "$castflags" in
90520) val="$define"
9053 echo "Yup, it can."
9054 ;;
9055*) val="$undef"
9056 echo "Nope, it can't."
9057 ;;
9058esac
9059set d_castneg
9060eval $setvar
9061$rm -f try.*
9062
9063: see if vprintf exists
9064echo " "
9065if set vprintf val -f d_vprintf; eval $csym; $val; then
9066 echo 'vprintf() found.' >&4
9067 val="$define"
5440bc8e 9068 $cat >try.c <<'EOF'
b4eb6b3d
JH
9069#include <varargs.h>
9070
9071int main() { xxx("foo"); }
9072
9073xxx(va_alist)
9074va_dcl
9075{
9076 va_list args;
9077 char buf[10];
9078
9079 va_start(args);
9080 exit((unsigned long)vsprintf(buf,"%s",args) > 10L);
9081}
9082EOF
5440bc8e
JH
9083 set try
9084 if eval $compile && $run ./try; then
b4eb6b3d
JH
9085 echo "Your vsprintf() returns (int)." >&4
9086 val2="$undef"
9087 else
9088 echo "Your vsprintf() returns (char*)." >&4
9089 val2="$define"
9090 fi
9091else
9092 echo 'vprintf() NOT found.' >&4
9093 val="$undef"
9094 val2="$undef"
9095fi
5440bc8e 9096$rm -f try try.*
b4eb6b3d
JH
9097set d_vprintf
9098eval $setvar
9099val=$val2
9100set d_charvspr
9101eval $setvar
9102
9103: see if chown exists
9104set chown d_chown
9105eval $inlibc
9106
9107: see if chroot exists
9108set chroot d_chroot
9109eval $inlibc
9110
9111: see if chsize exists
9112set chsize d_chsize
9113eval $inlibc
9114
4e0554ec
JH
9115hasstruct='varname=$1; struct=$2; shift; shift;
9116while $test $# -ge 2; do
9117 case "$1" in
9118 $define) echo "#include <$2>";;
9119 esac ;
9120 shift 2;
9121done > try.c;
9122echo "int main () { struct $struct foo; }" >> try.c;
9123set try;
9124if eval $compile; then
9125 val="$define";
9126else
9127 val="$undef";
9128fi;
9129set $varname;
9130eval $setvar;
9131$rm -f try.c try.o'
9132
9133: see if sys/types.h has to be included
9134set sys/types.h i_systypes
9135eval $inhdr
9136
9137hasfield='varname=$1; struct=$2; field=$3; shift; shift; shift;
9138while $test $# -ge 2; do
9139 case "$1" in
9140 $define) echo "#include <$2>";;
9141 esac ;
9142 shift 2;
9143done > try.c;
9144echo "int main () { struct $struct foo; char* bar; bar = (char*)foo.$field; }" >> try.c;
9145set try;
9146if eval $compile; then
9147 val="$define";
9148else
9149 val="$undef";
9150fi;
9151set $varname;
9152eval $setvar;
9153$rm -f try.c try.o'
9154
9155socketlib=''
9156sockethdr=''
9157: see whether socket exists
9158echo " "
9159$echo $n "Hmm... $c" >&4
9160if set socket val -f d_socket; eval $csym; $val; then
9161 echo "Looks like you have Berkeley networking support." >&4
9162 d_socket="$define"
9163 if set setsockopt val -f; eval $csym; $val; then
9164 d_oldsock="$undef"
9165 else
9166 echo "...but it uses the old BSD 4.1c interface, rather than 4.2." >&4
9167 d_oldsock="$define"
9168 fi
9169else
9170 if $contains socklib libc.list >/dev/null 2>&1; then
9171 echo "Looks like you have Berkeley networking support." >&4
9172 d_socket="$define"
9173 : we will have to assume that it supports the 4.2 BSD interface
9174 d_oldsock="$undef"
9175 else
9176 echo "You don't have Berkeley networking in libc$_a..." >&4
9177 if test "X$d_socket" = "X$define"; then
9178 echo "...but you seem to believe that you have sockets." >&4
9179 else
9180 for net in net socket
9181 do
9182 if test -f /usr/lib/lib$net$_a; then
9183 ( ($nm $nm_opt /usr/lib/lib$net$_a | eval $nm_extract) || \
9184 $ar t /usr/lib/lib$net$_a) 2>/dev/null >> libc.list
9185 if $contains socket libc.list >/dev/null 2>&1; then
9186 d_socket="$define"
9187 socketlib="-l$net"
9188 case "$net" in
9189 net)
9190 echo "...but the Wollongong group seems to have hacked it in." >&4
9191 sockethdr="-I/usr/netinclude"
9192 ;;
9193 esac
9194 echo "Found Berkeley sockets interface in lib$net." >& 4
9195 if $contains setsockopt libc.list >/dev/null 2>&1; then
9196 d_oldsock="$undef"
9197 else
9198 echo "...using the old BSD 4.1c interface, rather than 4.2." >&4
9199 d_oldsock="$define"
9200 fi
9201 break
9202 fi
9203 fi
9204 done
9205 if test "X$d_socket" != "X$define"; then
9206 echo "or anywhere else I see." >&4
9207 d_socket="$undef"
9208 d_oldsock="$undef"
9209 fi
9210 fi
9211 fi
9212fi
9213
9214: see if socketpair exists
9215set socketpair d_sockpair
9216eval $inlibc
9217
9218
9219echo " "
9220echo "Checking the availability of certain socket constants..." >& 4
9221for ENUM in MSG_CTRUNC MSG_DONTROUTE MSG_OOB MSG_PEEK MSG_PROXY SCM_RIGHTS; do
9222 enum=`$echo $ENUM|./tr '[A-Z]' '[a-z]'`
9223 $cat >try.c <<EOF
9224#include <sys/types.h>
9225#include <sys/socket.h>
9226int main() {
9227 int i = $ENUM;
9228}
9229EOF
9230 val="$undef"
9231 set try; if eval $compile; then
9232 val="$define"
9233 fi
9234 set d_${enum}; eval $setvar
9235 $rm -f try.c try
9236done
9237
9238: see if this is a sys/uio.h system
9239set sys/uio.h i_sysuio
9240eval $inhdr
9241
9242
9243echo " "
9244echo "Checking to see if your system supports struct cmsghdr..." >&4
9245set d_cmsghdr_s cmsghdr $i_systypes sys/types.h $d_socket sys/socket.h $i_sysuio sys/uio.h
9246eval $hasstruct
9247case "$d_cmsghdr_s" in
9248"$define") echo "Yes, it does." ;;
9249*) echo "No, it doesn't." ;;
9250esac
9251
9252
b4eb6b3d
JH
9253: check for const keyword
9254echo " "
9255echo 'Checking to see if your C compiler knows about "const"...' >&4
9256$cat >const.c <<'EOCP'
9257typedef struct spug { int drokk; } spug;
9258int main()
9259{
9260 const char *foo;
9261 const spug y;
9262}
9263EOCP
9264if $cc -c $ccflags const.c >/dev/null 2>&1 ; then
9265 val="$define"
9266 echo "Yup, it does."
9267else
9268 val="$undef"
9269 echo "Nope, it doesn't."
9270fi
9271set d_const
9272eval $setvar
9273
9274: see if crypt exists
9275echo " "
9276if set crypt val -f d_crypt; eval $csym; $val; then
9277 echo 'crypt() found.' >&4
9278 val="$define"
9279 cryptlib=''
9280else
9281 cryptlib=`./loc Slibcrypt$_a "" $xlibpth`
9282 if $test -z "$cryptlib"; then
9283 cryptlib=`./loc Mlibcrypt$_a "" $xlibpth`
9284 else
9285 cryptlib=-lcrypt
9286 fi
9287 if $test -z "$cryptlib"; then
9288 cryptlib=`./loc Llibcrypt$_a "" $xlibpth`
9289 else
9290 cryptlib=-lcrypt
9291 fi
9292 if $test -z "$cryptlib"; then
9293 cryptlib=`./loc libcrypt$_a "" $libpth`
9294 else
9295 cryptlib=-lcrypt
9296 fi
9297 if $test -z "$cryptlib"; then
9298 echo 'crypt() NOT found.' >&4
9299 val="$undef"
9300 else
9301 val="$define"
9302 fi
9303fi
9304set d_crypt
9305eval $setvar
9306
9307: get csh whereabouts
9308case "$csh" in
9309'csh') val="$undef" ;;
9310*) val="$define" ;;
9311esac
9312set d_csh
9313eval $setvar
9314: Respect a hint or command line value for full_csh.
9315case "$full_csh" in
9316'') full_csh=$csh ;;
9317esac
9318
9319: see if cuserid exists
9320set cuserid d_cuserid
9321eval $inlibc
9322
9323: see if this is a limits.h system
9324set limits.h i_limits
9325eval $inhdr
9326
9327: see if this is a float.h system
9328set float.h i_float
9329eval $inhdr
9330
9331: See if number of significant digits in a double precision number is known
9332echo " "
9333$cat >dbl_dig.c <<EOM
9334#$i_limits I_LIMITS
9335#$i_float I_FLOAT
9336#ifdef I_LIMITS
9337#include <limits.h>
9338#endif
9339#ifdef I_FLOAT
9340#include <float.h>
9341#endif
9342#ifdef DBL_DIG
9343printf("Contains DBL_DIG");
9344#endif
9345EOM
9346$cppstdin $cppflags $cppminus < dbl_dig.c >dbl_dig.E 2>/dev/null
9347if $contains 'DBL_DIG' dbl_dig.E >/dev/null 2>&1; then
9348 echo "DBL_DIG found." >&4
9349 val="$define"
9350else
9351 echo "DBL_DIG NOT found." >&4
9352 val="$undef"
9353fi
9354$rm -f dbl_dig.?
9355set d_dbl_dig
9356eval $setvar
9357
2ef53570
JH
9358hasproto='varname=$1; func=$2; shift; shift;
9359while $test $# -ge 2; do
9360 case "$1" in
9361 $define) echo "#include <$2>";;
9362 esac ;
9363 shift 2;
9364done > try.c;
9365$cppstdin $cppflags $cppminus < try.c > tryout.c 2>/dev/null;
9366if $contains "$func.*(" tryout.c >/dev/null 2>&1; then
9367 echo "$func() prototype found.";
9368 val="$define";
9369else
9370 echo "$func() prototype NOT found.";
9371 val="$undef";
9372fi;
9373set $varname;
9374eval $setvar;
9375$rm -f try.c tryout.c'
9376
9377: see if dbm.h is available
9378: see if dbmclose exists
9379set dbmclose d_dbmclose
9380eval $inlibc
9381
9382case "$d_dbmclose" in
9383$define)
9384 set dbm.h i_dbm
9385 eval $inhdr
9386 case "$i_dbm" in
9387 $define)
9388 val="$undef"
9389 set i_rpcsvcdbm
9390 eval $setvar
9391 ;;
9392 *) set rpcsvc/dbm.h i_rpcsvcdbm
9393 eval $inhdr
9394 ;;
9395 esac
9396 ;;
9397*) echo "We won't be including <dbm.h>"
9398 val="$undef"
9399 set i_dbm
9400 eval $setvar
9401 val="$undef"
9402 set i_rpcsvcdbm
9403 eval $setvar
9404 ;;
9405esac
9406
9407: see if prototype for dbminit is available
9408echo " "
9409set d_dbminitproto dbminit $i_dbm dbm.h
9410eval $hasproto
9411
b4eb6b3d
JH
9412: see if difftime exists
9413set difftime d_difftime
9414eval $inlibc
9415
9416: see if this is a dirent system
9417echo " "
9418if xinc=`./findhdr dirent.h`; $test "$xinc"; then
9419 val="$define"
9420 echo "<dirent.h> found." >&4
9421else
9422 val="$undef"
9423 if xinc=`./findhdr sys/dir.h`; $test "$xinc"; then
9424 echo "<sys/dir.h> found." >&4
9425 echo " "
9426 else
9427 xinc=`./findhdr sys/ndir.h`
9428 fi
9429 echo "<dirent.h> NOT found." >&4
9430fi
9431set i_dirent
9432eval $setvar
9433
9434: Look for type of directory structure.
9435echo " "
9436$cppstdin $cppflags $cppminus < "$xinc" > try.c
9437
9438case "$direntrytype" in
9439''|' ')
9440 case "$i_dirent" in
9441 $define) guess1='struct dirent' ;;
9442 *) guess1='struct direct' ;;
9443 esac
9444 ;;
9445*) guess1="$direntrytype"
9446 ;;
9447esac
9448
9449case "$guess1" in
9450'struct dirent') guess2='struct direct' ;;
9451*) guess2='struct dirent' ;;
9452esac
9453
9454if $contains "$guess1" try.c >/dev/null 2>&1; then
9455 direntrytype="$guess1"
9456 echo "Your directory entries are $direntrytype." >&4
9457elif $contains "$guess2" try.c >/dev/null 2>&1; then
9458 direntrytype="$guess2"
9459 echo "Your directory entries seem to be $direntrytype." >&4
9460else
9461 echo "I don't recognize your system's directory entries." >&4
9462 rp="What type is used for directory entries on this system?"
9463 dflt="$guess1"
9464 . ./myread
9465 direntrytype="$ans"
9466fi
9467$rm -f try.c
9468
9469
9470: see if the directory entry stores field length
9471echo " "
9472$cppstdin $cppflags $cppminus < "$xinc" > try.c
9473if $contains 'd_namlen' try.c >/dev/null 2>&1; then
9474 echo "Good, your directory entry keeps length information in d_namlen." >&4
9475 val="$define"
9476else
9477 echo "Your directory entry does not know about the d_namlen field." >&4
9478 val="$undef"
9479fi
9480set d_dirnamlen
9481eval $setvar
9482$rm -f try.c
9483
9484: see if dlerror exists
9485xxx_runnm="$runnm"
9486runnm=false
9487set dlerror d_dlerror
9488eval $inlibc
9489runnm="$xxx_runnm"
9490
9491: see if dlfcn is available
9492set dlfcn.h i_dlfcn
9493eval $inhdr
9494
9495case "$usedl" in
9496$define|y|true)
9497 $cat << EOM
9498
9499On a few systems, the dynamically loaded modules that perl generates and uses
9500will need a different extension than shared libs. The default will probably
9501be appropriate.
9502
9503EOM
9504 case "$dlext" in
9505 '') dflt="$so" ;;
9506 *) dflt="$dlext" ;;
9507 esac
9508 rp='What is the extension of dynamically loaded modules'
9509 . ./myread
9510 dlext="$ans"
9511 ;;
9512*)
9513 dlext="none"
9514 ;;
9515esac
9516
9517: Check if dlsym need a leading underscore
9518echo " "
9519val="$undef"
9520
9521case "$dlsrc" in
9522dl_dlopen.xs)
9523 echo "Checking whether your dlsym() needs a leading underscore ..." >&4
9524 $cat >dyna.c <<'EOM'
9525fred () { }
9526EOM
9527
9528$cat >fred.c<<EOM
9529
9530#include <stdio.h>
9531#$i_dlfcn I_DLFCN
9532#ifdef I_DLFCN
5440bc8e 9533#include <dlfcn.h> /* the dynamic linker include file for SunOS/Solaris */
b4eb6b3d
JH
9534#else
9535#include <sys/types.h>
9536#include <nlist.h>
9537#include <link.h>
9538#endif
9539
9540extern int fred() ;
9541
9542int main()
9543{
9544 void * handle ;
9545 void * symbol ;
9546#ifndef RTLD_LAZY
9547 int mode = 1 ;
9548#else
9549 int mode = RTLD_LAZY ;
9550#endif
9551 handle = dlopen("./dyna.$dlext", mode) ;
9552 if (handle == NULL) {
9553 printf ("1\n") ;
9554 fflush (stdout) ;
9555 exit(0);
9556 }
9557 symbol = dlsym(handle, "fred") ;
9558 if (symbol == NULL) {
9559 /* try putting a leading underscore */
9560 symbol = dlsym(handle, "_fred") ;
9561 if (symbol == NULL) {
9562 printf ("2\n") ;
9563 fflush (stdout) ;
9564 exit(0);
9565 }
9566 printf ("3\n") ;
9567 }
9568 else
9569 printf ("4\n") ;
9570 fflush (stdout) ;
9571 exit(0);
9572}
9573EOM
9574 : Call the object file tmp-dyna.o in case dlext=o.
9575 if $cc $ccflags $cccdlflags -c dyna.c > /dev/null 2>&1 &&
9576 mv dyna${_o} tmp-dyna${_o} > /dev/null 2>&1 &&
e4778687 9577 $ld -o dyna.$dlext $ldflags $lddlflags tmp-dyna${_o} > /dev/null 2>&1 &&
5440bc8e
JH
9578 $cc -o fred $ccflags $ldflags $cccdlflags $ccdlflags fred.c $libs > /dev/null 2>&1 && $to dyna.$dlext; then
9579 xxx=`$run ./fred`
b4eb6b3d
JH
9580 case $xxx in
9581 1) echo "Test program failed using dlopen." >&4
9582 echo "Perhaps you should not use dynamic loading." >&4;;
9583 2) echo "Test program failed using dlsym." >&4
9584 echo "Perhaps you should not use dynamic loading." >&4;;
9585 3) echo "dlsym needs a leading underscore" >&4
9586 val="$define" ;;
9587 4) echo "dlsym doesn't need a leading underscore." >&4;;
9588 esac
9589 else
9590 echo "I can't compile and run the test program." >&4
9591 echo "I'm guessing that dlsym doesn't need a leading underscore." >&4
9592 fi
9593 ;;
9594esac
9595
9596$rm -f fred fred.? dyna.$dlext dyna.? tmp-dyna.?
9597
9598set d_dlsymun
9599eval $setvar
9600
b4eb6b3d
JH
9601: see if prototype for drand48 is available
9602echo " "
9603set d_drand48proto drand48 $i_stdlib stdlib.h $i_unistd unistd.h
9604eval $hasproto
9605
9606: see if dup2 exists
9607set dup2 d_dup2
9608eval $inlibc
9609
9610: see if eaccess exists
9611set eaccess d_eaccess
9612eval $inlibc
9613
9614: see if endgrent exists
9615set endgrent d_endgrent
9616eval $inlibc
9617
9618: see if endhostent exists
9619set endhostent d_endhent
9620eval $inlibc
9621
9622: see if endnetent exists
9623set endnetent d_endnent
9624eval $inlibc
9625
9626: see if endprotoent exists
9627set endprotoent d_endpent
9628eval $inlibc
9629
9630: see if endpwent exists
9631set endpwent d_endpwent
9632eval $inlibc
9633
9634: see if endservent exists
9635set endservent d_endsent
9636eval $inlibc
9637
9638: Locate the flags for 'open()'
9639echo " "
5440bc8e 9640$cat >try.c <<'EOCP'
b4eb6b3d
JH
9641#include <sys/types.h>
9642#ifdef I_FCNTL
9643#include <fcntl.h>
9644#endif
9645#ifdef I_SYS_FILE
9646#include <sys/file.h>
9647#endif
9648int main() {
9649 if(O_RDONLY);
9650#ifdef O_TRUNC
9651 exit(0);
9652#else
9653 exit(1);
9654#endif
9655}
9656EOCP
9657: check sys/file.h first to get FREAD on Sun
9658if $test `./findhdr sys/file.h` && \
5440bc8e 9659 set try -DI_SYS_FILE && eval $compile; then
b4eb6b3d
JH
9660 h_sysfile=true;
9661 echo "<sys/file.h> defines the O_* constants..." >&4
5440bc8e 9662 if $run ./try; then
b4eb6b3d
JH
9663 echo "and you have the 3 argument form of open()." >&4
9664 val="$define"
9665 else
9666 echo "but not the 3 argument form of open(). Oh, well." >&4
9667 val="$undef"
9668 fi
9669elif $test `./findhdr fcntl.h` && \
5440bc8e 9670 set try -DI_FCNTL && eval $compile; then
b4eb6b3d
JH
9671 h_fcntl=true;
9672 echo "<fcntl.h> defines the O_* constants..." >&4
5440bc8e 9673 if $run ./try; then
b4eb6b3d
JH
9674 echo "and you have the 3 argument form of open()." >&4
9675 val="$define"
9676 else
9677 echo "but not the 3 argument form of open(). Oh, well." >&4
9678 val="$undef"
9679 fi
9680else
9681 val="$undef"
9682 echo "I can't find the O_* constant definitions! You got problems." >&4
9683fi
9684set d_open3
9685eval $setvar
5440bc8e 9686$rm -f try try.*
b4eb6b3d
JH
9687
9688: see which of string.h or strings.h is needed
9689echo " "
9690strings=`./findhdr string.h`
9691if $test "$strings" && $test -r "$strings"; then
9692 echo "Using <string.h> instead of <strings.h>." >&4
9693 val="$define"
9694else
9695 val="$undef"
9696 strings=`./findhdr strings.h`
9697 if $test "$strings" && $test -r "$strings"; then
9698 echo "Using <strings.h> instead of <string.h>." >&4
9699 else
9700 echo "No string header found -- You'll surely have problems." >&4
9701 fi
9702fi
9703set i_string
9704eval $setvar
9705case "$i_string" in
9706"$undef") strings=`./findhdr strings.h`;;
9707*) strings=`./findhdr string.h`;;
9708esac
9709
9710: check for non-blocking I/O stuff
9711case "$h_sysfile" in
a0acbdc3
JH
9712true) echo "#include <sys/file.h>" > head.c;;
9713*)
9714 case "$h_fcntl" in
9715 true) echo "#include <fcntl.h>" > head.c;;
9716 *) echo "#include <sys/fcntl.h>" > head.c;;
9717 esac
9718 ;;
b4eb6b3d
JH
9719esac
9720echo " "
9721echo "Figuring out the flag used by open() for non-blocking I/O..." >&4
9722case "$o_nonblock" in
9723'')
9724 $cat head.c > try.c
9725 $cat >>try.c <<'EOCP'
9726#include <stdio.h>
80b3ef99 9727#include <stdlib.h>
b4eb6b3d
JH
9728int main() {
9729#ifdef O_NONBLOCK
9730 printf("O_NONBLOCK\n");
9731 exit(0);
9732#endif
9733#ifdef O_NDELAY
9734 printf("O_NDELAY\n");
9735 exit(0);
9736#endif
9737#ifdef FNDELAY
9738 printf("FNDELAY\n");
9739 exit(0);
9740#endif
9741 exit(0);
9742}
9743EOCP
9744 set try
9745 if eval $compile_ok; then
5440bc8e 9746 o_nonblock=`$run ./try`
b4eb6b3d
JH
9747 case "$o_nonblock" in
9748 '') echo "I can't figure it out, assuming O_NONBLOCK will do.";;
9749 *) echo "Seems like we can use $o_nonblock.";;
9750 esac
9751 else
9752 echo "(I can't compile the test program; pray O_NONBLOCK is right!)"
9753 fi
9754 ;;
9755*) echo "Using $hint value $o_nonblock.";;
9756esac
9757$rm -f try try.* .out core
9758
9759echo " "
9760echo "Let's see what value errno gets from read() on a $o_nonblock file..." >&4
9761case "$eagain" in
9762'')
9763 $cat head.c > try.c
9764 $cat >>try.c <<EOCP
9765#include <errno.h>
9766#include <sys/types.h>
9767#include <signal.h>
9768#include <stdio.h>
80b3ef99 9769#include <stdlib.h>
b4eb6b3d
JH
9770#define MY_O_NONBLOCK $o_nonblock
9771#ifndef errno /* XXX need better Configure test */
9772extern int errno;
9773#endif
9774#$i_unistd I_UNISTD
9775#ifdef I_UNISTD
9776#include <unistd.h>
9777#endif
9778#$i_string I_STRING
9779#ifdef I_STRING
9780#include <string.h>
9781#else
9782#include <strings.h>
9783#endif
9784$signal_t blech(x) int x; { exit(3); }
9785EOCP
9786 $cat >> try.c <<'EOCP'
9787int main()
9788{
9789 int pd[2];
9790 int pu[2];
9791 char buf[1];
9792 char string[100];
9793
9794 pipe(pd); /* Down: child -> parent */
9795 pipe(pu); /* Up: parent -> child */
9796 if (0 != fork()) {
9797 int ret;
9798 close(pd[1]); /* Parent reads from pd[0] */
9799 close(pu[0]); /* Parent writes (blocking) to pu[1] */
a0acbdc3 9800#ifdef F_SETFL
b4eb6b3d
JH
9801 if (-1 == fcntl(pd[0], F_SETFL, MY_O_NONBLOCK))
9802 exit(1);
a0acbdc3
JH
9803#else
9804 exit(4);
9805#endif
b4eb6b3d
JH
9806 signal(SIGALRM, blech);
9807 alarm(5);
9808 if ((ret = read(pd[0], buf, 1)) > 0) /* Nothing to read! */
9809 exit(2);
9810 sprintf(string, "%d\n", ret);
9811 write(2, string, strlen(string));
9812 alarm(0);
9813#ifdef EAGAIN
9814 if (errno == EAGAIN) {
9815 printf("EAGAIN\n");
9816 goto ok;
9817 }
9818#endif
9819#ifdef EWOULDBLOCK
9820 if (errno == EWOULDBLOCK)
9821 printf("EWOULDBLOCK\n");
9822#endif
9823 ok:
9824 write(pu[1], buf, 1); /* Unblocks child, tell it to close our pipe */
9825 sleep(2); /* Give it time to close our pipe */
9826 alarm(5);
9827 ret = read(pd[0], buf, 1); /* Should read EOF */
9828 alarm(0);
9829 sprintf(string, "%d\n", ret);
9830 write(3, string, strlen(string));
9831 exit(0);
9832 }
9833
9834 close(pd[0]); /* We write to pd[1] */
9835 close(pu[1]); /* We read from pu[0] */
9836 read(pu[0], buf, 1); /* Wait for parent to signal us we may continue */
9837 close(pd[1]); /* Pipe pd is now fully closed! */
9838 exit(0); /* Bye bye, thank you for playing! */
9839}
9840EOCP
9841 set try
9842 if eval $compile_ok; then
9843 echo "$startsh" >mtry
5440bc8e 9844 echo "$run ./try >try.out 2>try.ret 3>try.err || exit 4" >>mtry
b4eb6b3d
JH
9845 chmod +x mtry
9846 ./mtry >/dev/null 2>&1
9847 case $? in
9848 0) eagain=`$cat try.out`;;
9849 1) echo "Could not perform non-blocking setting!";;
9850 2) echo "I did a successful read() for something that was not there!";;
9851 3) echo "Hmm... non-blocking I/O does not seem to be working!";;
a0acbdc3 9852 4) echo "Could not find F_SETFL!";;
b4eb6b3d
JH
9853 *) echo "Something terribly wrong happened during testing.";;
9854 esac
9855 rd_nodata=`$cat try.ret`
9856 echo "A read() system call with no data present returns $rd_nodata."
9857 case "$rd_nodata" in
9858 0|-1) ;;
9859 *)
9860 echo "(That's peculiar, fixing that to be -1.)"
9861 rd_nodata=-1
9862 ;;
9863 esac
9864 case "$eagain" in
9865 '')
9866 echo "Forcing errno EAGAIN on read() with no data available."
9867 eagain=EAGAIN
9868 ;;
9869 *)
9870 echo "Your read() sets errno to $eagain when no data is available."
9871 ;;
9872 esac
9873 status=`$cat try.err`
9874 case "$status" in
9875 0) echo "And it correctly returns 0 to signal EOF.";;
9876 -1) echo "But it also returns -1 to signal EOF, so be careful!";;
9877 *) echo "However, your read() returns '$status' on EOF??";;
9878 esac
9879 val="$define"
9880 if test "$status" = "$rd_nodata"; then
9881 echo "WARNING: you can't distinguish between EOF and no data!"
9882 val="$undef"
9883 fi
9884 else
9885 echo "I can't compile the test program--assuming errno EAGAIN will do."
9886 eagain=EAGAIN
9887 fi
9888 set d_eofnblk
9889 eval $setvar
9890 ;;
9891*)
9892 echo "Using $hint value $eagain."
9893 echo "Your read() returns $rd_nodata when no data is present."
9894 case "$d_eofnblk" in
9895 "$define") echo "And you can see EOF because read() returns 0.";;
9896 "$undef") echo "But you can't see EOF status from read() returned value.";;
9897 *)
9898 echo "(Assuming you can't see EOF status from read anyway.)"
9899 d_eofnblk=$undef
9900 ;;
9901 esac
9902 ;;
9903esac
9904$rm -f try try.* .out core head.c mtry
9905
b363b713
JH
9906: see if fchdir exists
9907set fchdir d_fchdir
9908eval $inlibc
9909
b4eb6b3d
JH
9910: see if fchmod exists
9911set fchmod d_fchmod
9912eval $inlibc
9913
9914: see if fchown exists
9915set fchown d_fchown
9916eval $inlibc
9917
9918: see if this is an fcntl system
9919set fcntl d_fcntl
9920eval $inlibc
9921
9d9004a9
AD
9922echo " "
9923: See if fcntl-based locking works.
832492ee 9924$cat >try.c <<EOCP
9d9004a9
AD
9925#include <stdlib.h>
9926#include <unistd.h>
9927#include <fcntl.h>
832492ee 9928#include <signal.h>
832492ee 9929$signal_t blech(x) int x; { exit(3); }
9d9004a9
AD
9930int main() {
9931#if defined(F_SETLK) && defined(F_SETLKW)
9932 struct flock flock;
9933 int retval, fd;
9934 fd = open("try.c", O_RDONLY);
9935 flock.l_type = F_RDLCK;
9936 flock.l_whence = SEEK_SET;
9937 flock.l_start = flock.l_len = 0;
832492ee
JH
9938 signal(SIGALRM, blech);
9939 alarm(10);
9d9004a9
AD
9940 retval = fcntl(fd, F_SETLK, &flock);
9941 close(fd);
9942 (retval < 0 ? exit(2) : exit(0));
9943#else
9944 exit(2);
9945#endif
9946}
9947EOCP
9948echo "Checking if fcntl-based file locking works... "
9949case "$d_fcntl" in
9950"$define")
9951 set try
9952 if eval $compile_ok; then
5440bc8e 9953 if $run ./try; then
9d9004a9
AD
9954 echo "Yes, it seems to work."
9955 val="$define"
9956 else
9957 echo "Nope, it didn't work."
9958 val="$undef"
832492ee
JH
9959 case "$?" in
9960 3) $cat >&4 <<EOM
9961***
9962*** I had to forcibly timeout from fcntl(..., F_SETLK, ...).
9963*** This is (almost) impossible.
9964*** If your NFS lock daemons are not feeling well, something like
9965*** this may happen, please investigate. Cannot continue, aborting.
9966***
9967EOM
9968 exit 1
9969 ;;
9970 esac
9d9004a9
AD
9971 fi
9972 else
9973 echo "I'm unable to compile the test program, so I'll assume not."
9974 val="$undef"
9975 fi
9976 ;;
9977*) val="$undef";
9978 echo "Nope, since you don't even have fcntl()."
9979 ;;
9980esac
9981set d_fcntl_can_lock
9982eval $setvar
9983$rm -f try*
9984
9985
b4eb6b3d
JH
9986: see if sys/select.h has to be included
9987set sys/select.h i_sysselct
9988eval $inhdr
9989
9990: see if we should include time.h, sys/time.h, or both
9991echo " "
9992if test "X$timeincl" = X; then
9993 echo "Testing to see if we should include <time.h>, <sys/time.h> or both." >&4
9994 $echo $n "I'm now running the test program...$c"
9995 $cat >try.c <<'EOCP'
9996#include <sys/types.h>
9997#ifdef I_TIME
9998#include <time.h>
9999#endif
10000#ifdef I_SYSTIME
10001#ifdef SYSTIMEKERNEL
10002#define KERNEL
10003#endif
10004#include <sys/time.h>
10005#endif
10006#ifdef I_SYSSELECT
10007#include <sys/select.h>
10008#endif
10009int main()
10010{
10011 struct tm foo;
10012#ifdef S_TIMEVAL
10013 struct timeval bar;
10014#endif
10015#ifdef S_TIMEZONE
10016 struct timezone tzp;
10017#endif
10018 if (foo.tm_sec == foo.tm_sec)
10019 exit(0);
10020#ifdef S_TIMEVAL
10021 if (bar.tv_sec == bar.tv_sec)
10022 exit(0);
10023#endif
10024 exit(1);
10025}
10026EOCP
10027 flags=''
10028 for s_timezone in '-DS_TIMEZONE' ''; do
10029 sysselect=''
10030 for s_timeval in '-DS_TIMEVAL' ''; do
10031 for i_systimek in '' '-DSYSTIMEKERNEL'; do
10032 for i_time in '' '-DI_TIME'; do
10033 for i_systime in '-DI_SYSTIME' ''; do
10034 case "$flags" in
10035 '') $echo $n ".$c"
10036 set try $i_time $i_systime $i_systimek $sysselect $s_timeval $s_timezone
10037 if eval $compile; then
10038 set X $i_time $i_systime $i_systimek $sysselect $s_timeval
10039 shift
10040 flags="$*"
10041 echo " "
10042 $echo $n "Succeeded with $flags$c"
10043 fi
10044 ;;
10045 esac
10046 done
10047 done
10048 done
10049 done
10050 done
10051 timeincl=''
10052 echo " "
10053 case "$flags" in
10054 *SYSTIMEKERNEL*) i_systimek="$define"
10055 timeincl=`./findhdr sys/time.h`
10056 echo "We'll include <sys/time.h> with KERNEL defined." >&4;;
10057 *) i_systimek="$undef";;
10058 esac
10059 case "$flags" in
10060 *I_TIME*) i_time="$define"
10061 timeincl=`./findhdr time.h`" $timeincl"
10062 echo "We'll include <time.h>." >&4;;
10063 *) i_time="$undef";;
10064 esac
10065 case "$flags" in
10066 *I_SYSTIME*) i_systime="$define"
10067 timeincl=`./findhdr sys/time.h`" $timeincl"
10068 echo "We'll include <sys/time.h>." >&4;;
10069 *) i_systime="$undef";;
10070 esac
10071 $rm -f try.c try
10072fi
10073
10074: check for fd_set items
10075$cat <<EOM
10076
10077Checking to see how well your C compiler handles fd_set and friends ...
10078EOM
5440bc8e 10079$cat >try.c <<EOCP
b4eb6b3d
JH
10080#$i_systime I_SYS_TIME
10081#$i_sysselct I_SYS_SELECT
10082#$d_socket HAS_SOCKET
10083#include <sys/types.h>
10084#ifdef HAS_SOCKET
10085#include <sys/socket.h> /* Might include <sys/bsdtypes.h> */
10086#endif
10087#ifdef I_SYS_TIME
10088#include <sys/time.h>
10089#endif
10090#ifdef I_SYS_SELECT
10091#include <sys/select.h>
10092#endif
10093int main() {
10094 fd_set fds;
10095
10096#ifdef TRYBITS
10097 if(fds.fds_bits);
10098#endif
10099
10100#if defined(FD_SET) && defined(FD_CLR) && defined(FD_ISSET) && defined(FD_ZERO)
10101 exit(0);
10102#else
10103 exit(1);
10104#endif
10105}
10106EOCP
5440bc8e 10107set try -DTRYBITS
b4eb6b3d
JH
10108if eval $compile; then
10109 d_fds_bits="$define"
10110 d_fd_set="$define"
10111 echo "Well, your system knows about the normal fd_set typedef..." >&4
5440bc8e 10112 if $run ./try; then
b4eb6b3d
JH
10113 echo "and you have the normal fd_set macros (just as I'd expect)." >&4
10114 d_fd_macros="$define"
10115 else
10116 $cat >&4 <<'EOM'
10117but not the normal fd_set macros! Gaaack! I'll have to cover for you.
10118EOM
10119 d_fd_macros="$undef"
10120 fi
10121else
10122 $cat <<'EOM'
10123Hmm, your compiler has some difficulty with fd_set. Checking further...
10124EOM
5440bc8e 10125 set try
b4eb6b3d
JH
10126 if eval $compile; then
10127 d_fds_bits="$undef"
10128 d_fd_set="$define"
10129 echo "Well, your system has some sort of fd_set available..." >&4
5440bc8e 10130 if $run ./try; then
b4eb6b3d
JH
10131 echo "and you have the normal fd_set macros." >&4
10132 d_fd_macros="$define"
10133 else
10134 $cat <<'EOM'
10135but not the normal fd_set macros! Gross! More work for me...
10136EOM
10137 d_fd_macros="$undef"
10138 fi
10139 else
10140 echo "Well, you got zip. That's OK, I can roll my own fd_set stuff." >&4
10141 d_fd_set="$undef"
10142 d_fds_bits="$undef"
10143 d_fd_macros="$undef"
10144 fi
10145fi
5440bc8e 10146$rm -f try try.*
b4eb6b3d
JH
10147
10148: see if fgetpos exists
10149set fgetpos d_fgetpos
10150eval $inlibc
10151
10152: see if flock exists
10153set flock d_flock
10154eval $inlibc
10155
2ef53570
JH
10156: see if this is a sys/file.h system
10157val=''
10158set sys/file.h val
10159eval $inhdr
10160
10161: do we need to include sys/file.h ?
10162case "$val" in
10163"$define")
10164 echo " "
10165 if $h_sysfile; then
10166 val="$define"
10167 echo "We'll be including <sys/file.h>." >&4
10168 else
10169 val="$undef"
10170 echo "We won't be including <sys/file.h>." >&4
10171 fi
10172 ;;
10173*)
10174 h_sysfile=false
10175 ;;
10176esac
10177set i_sysfile
10178eval $setvar
10179
10180: see if prototype for flock is available
10181echo " "
10182set d_flockproto flock $i_sysfile sys/file.h
10183eval $hasproto
10184
b4eb6b3d
JH
10185: see if fork exists
10186set fork d_fork
10187eval $inlibc
10188
10189: see if pathconf exists
10190set pathconf d_pathconf
10191eval $inlibc
10192
10193: see if fpathconf exists
10194set fpathconf d_fpathconf
10195eval $inlibc
10196
10197
10198: check for fpos64_t
10199echo " "
10200echo "Checking to see if you have fpos64_t..." >&4
10201$cat >try.c <<EOCP
10202#include <stdio.h>
10203int main() { fpos64_t x = 7; }
10204EOCP
10205set try
10206if eval $compile; then
10207 val="$define"
10208 echo "You have fpos64_t."
10209else
10210 val="$undef"
10211 echo "You do not have fpos64_t."
10212 case "$fpossize" in
10213 8) echo "(Your fpos_t is 64 bits, so you could use that.)" ;;
10214 esac
10215fi
10216$rm -f try.* try
10217set d_fpos64_t
10218eval $setvar
10219
10220: see if frexpl exists
10221set frexpl d_frexpl
10222eval $inlibc
10223
b4eb6b3d
JH
10224: see if this is a sys/param system
10225set sys/param.h i_sysparam
10226eval $inhdr
10227
10228: see if this is a sys/mount.h system
10229set sys/mount.h i_sysmount
10230eval $inhdr
10231
b4eb6b3d
JH
10232
10233echo " "
10234echo "Checking to see if your system supports struct fs_data..." >&4
10235set d_fs_data_s fs_data $i_systypes sys/types.h $i_sysparam sys/param.h $i_sysmount sys/mount.h
10236eval $hasstruct
10237case "$d_fs_data_s" in
10238"$define") echo "Yes, it does." ;;
10239*) echo "No, it doesn't." ;;
10240esac
10241
10242: see if fseeko exists
10243set fseeko d_fseeko
10244eval $inlibc
10245case "$longsize" in
102468) echo "(Your long is 64 bits, so you could use fseek.)" ;;
10247esac
10248
10249: see if fsetpos exists
10250set fsetpos d_fsetpos
10251eval $inlibc
10252
10253
10254: see if fstatfs exists
10255set fstatfs d_fstatfs
10256eval $inlibc
10257
10258
10259: see if statvfs exists
10260set statvfs d_statvfs
10261eval $inlibc
10262
10263: see if fstatvfs exists
10264set fstatvfs d_fstatvfs
10265eval $inlibc
10266
10267
411ab01c
JH
10268: see if fsync exists
10269set fsync d_fsync
10270eval $inlibc
10271
b4eb6b3d
JH
10272: see if ftello exists
10273set ftello d_ftello
10274eval $inlibc
10275case "$longsize" in
102768) echo "(Your long is 64 bits, so you could use ftell.)" ;;
10277esac
10278
10279: see if getcwd exists
10280set getcwd d_getcwd
10281eval $inlibc
10282
10283: see if getespwnam exists
10284set getespwnam d_getespwnam
10285eval $inlibc
10286
10287
10288: see if getfsstat exists
10289set getfsstat d_getfsstat
10290eval $inlibc
10291
10292: see if getgrent exists
10293set getgrent d_getgrent
10294eval $inlibc
10295
10296: see if gethostbyaddr exists
10297set gethostbyaddr d_gethbyaddr
10298eval $inlibc
10299
10300: see if gethostbyname exists
10301set gethostbyname d_gethbyname
10302eval $inlibc
10303
10304: see if gethostent exists
10305set gethostent d_gethent
10306eval $inlibc
10307
10308: see how we will look up host name
10309echo " "
10310call=''
10311if set gethostname val -f d_gethname; eval $csym; $val; then
10312 echo 'gethostname() found.' >&4
10313 d_gethname="$define"
10314 call=gethostname
10315fi
10316if set uname val -f d_uname; eval $csym; $val; then
10317 if ./xenix; then
10318 $cat <<'EOM'
10319uname() was found, but you're running xenix, and older versions of xenix
10320have a broken uname(). If you don't really know whether your xenix is old
10321enough to have a broken system call, use the default answer.
10322
10323EOM
10324 dflt=y
10325 case "$d_uname" in
10326 "$define") dflt=n;;
10327 esac
10328 rp='Is your uname() broken?'
10329 . ./myread
10330 case "$ans" in
10331 n*) d_uname="$define"; call=uname;;
10332 esac
10333 else
10334 echo 'uname() found.' >&4
10335 d_uname="$define"
10336 case "$call" in
10337 '') call=uname ;;
10338 esac
10339 fi
10340fi
10341case "$d_gethname" in
10342'') d_gethname="$undef";;
10343esac
10344case "$d_uname" in
10345'') d_uname="$undef";;
10346esac
10347case "$d_uname$d_gethname" in
10348*define*)
10349 dflt=n
10350 cat <<EOM
10351
10352Every now and then someone has a $call() that lies about the hostname
10353but can't be fixed for political or economic reasons. If you wish, I can
10354pretend $call() isn't there and maybe compute hostname at run-time
10355thanks to the '$phostname' command.
10356
10357EOM
10358 rp="Shall I ignore $call() from now on?"
10359 . ./myread
10360 case "$ans" in
10361 y*) d_uname="$undef" d_gethname="$undef"; $echo $n "Okay...$c";;
10362 esac;;
10363esac
10364case "$phostname" in
10365'') aphostname='';;
10366*) case "$aphostname" in
10367 /*) ;;
10368 *) set X $phostname
10369 shift
10370 file=$1
10371 shift
10372 file=`./loc $file $file $pth`
10373 aphostname=`echo $file $*`
10374 ;;
10375 esac
10376 ;;
10377esac
10378case "$d_uname$d_gethname" in
10379*define*) ;;
10380*)
10381 case "$phostname" in
10382 '')
10383 echo "There will be no way for $package to get your hostname." >&4;;
10384 *)
10385 echo "I'll use 'popen("'"'$aphostname'", "r")'"' to get your hostname." >&4
10386 ;;
10387 esac;;
10388esac
10389case "$d_phostname" in
10390'') d_phostname="$undef";;
10391esac
10392
10393: see if this is a netdb.h system
10394set netdb.h i_netdb
10395eval $inhdr
10396
10397: see if prototypes for various gethostxxx netdb.h functions are available
10398echo " "
10399set d_gethostprotos gethostent $i_netdb netdb.h
10400eval $hasproto
10401
4e0554ec
JH
10402: see if getitimer exists
10403set getitimer d_getitimer
10404eval $inlibc
10405
b4eb6b3d
JH
10406: see if getlogin exists
10407set getlogin d_getlogin
10408eval $inlibc
10409
10410: see if getmnt exists
10411set getmnt d_getmnt
10412eval $inlibc
10413
10414: see if getmntent exists
10415set getmntent d_getmntent
10416eval $inlibc
10417
10418: see if getnetbyaddr exists
10419set getnetbyaddr d_getnbyaddr
10420eval $inlibc
10421
10422: see if getnetbyname exists
10423set getnetbyname d_getnbyname
10424eval $inlibc
10425
10426: see if getnetent exists
10427set getnetent d_getnent
10428eval $inlibc
10429
10430: see if prototypes for various getnetxxx netdb.h functions are available
10431echo " "
10432set d_getnetprotos getnetent $i_netdb netdb.h
10433eval $hasproto
10434
0c0643d0
JH
10435: see if getpagesize exists
10436set getpagesize d_getpagsz
10437eval $inlibc
10438
b4eb6b3d
JH
10439
10440: see if getprotobyname exists
10441set getprotobyname d_getpbyname
10442eval $inlibc
10443
10444: see if getprotobynumber exists
10445set getprotobynumber d_getpbynumber
10446eval $inlibc
10447
10448: see if getprotoent exists
10449set getprotoent d_getpent
10450eval $inlibc
10451
10452: see if getpgid exists
10453set getpgid d_getpgid
10454eval $inlibc
10455
10456: see if getpgrp2 exists
10457set getpgrp2 d_getpgrp2
10458eval $inlibc
10459
10460: see if getppid exists
10461set getppid d_getppid
10462eval $inlibc
10463
10464: see if getpriority exists
10465set getpriority d_getprior
10466eval $inlibc
10467
10468: see if prototypes for various getprotoxxx netdb.h functions are available
10469echo " "
10470set d_getprotoprotos getprotoent $i_netdb netdb.h
10471eval $hasproto
10472
10473: see if getprpwnam exists
10474set getprpwnam d_getprpwnam
10475eval $inlibc
10476
10477: see if getpwent exists
10478set getpwent d_getpwent
10479eval $inlibc
10480
10481
10482: see if getservbyname exists
10483set getservbyname d_getsbyname
10484eval $inlibc
10485
10486: see if getservbyport exists
10487set getservbyport d_getsbyport
10488eval $inlibc
10489
10490: see if getservent exists
10491set getservent d_getsent
10492eval $inlibc
10493
10494: see if prototypes for various getservxxx netdb.h functions are available
10495echo " "
10496set d_getservprotos getservent $i_netdb netdb.h
10497eval $hasproto
10498
10499: see if getspnam exists
10500set getspnam d_getspnam
10501eval $inlibc
10502
10503: see if gettimeofday or ftime exists
10504set gettimeofday d_gettimeod
10505eval $inlibc
10506case "$d_gettimeod" in
10507"$undef")
10508 set ftime d_ftime
10509 eval $inlibc
10510 ;;
10511*)
10512 val="$undef"; set d_ftime; eval $setvar
10513 ;;
10514esac
10515case "$d_gettimeod$d_ftime" in
10516"$undef$undef")
10517 echo " "
10518 echo 'No ftime() nor gettimeofday() -- timing may be less accurate.' >&4
10519 ;;
10520esac
10521
10522: see if this is an grp system
10523set grp.h i_grp
10524eval $inhdr
10525
10526case "$i_grp" in
10527$define)
10528 xxx=`./findhdr grp.h`
10529 $cppstdin $cppflags $cppminus < $xxx >$$.h
10530
10531 if $contains 'gr_passwd' $$.h >/dev/null 2>&1; then
10532 val="$define"
10533 else
10534 val="$undef"
10535 fi
10536 set d_grpasswd
10537 eval $setvar
10538
10539 $rm -f $$.h
10540 ;;
10541*)
10542 val="$undef";
10543 set d_grpasswd; eval $setvar
10544 ;;
10545esac
10546
10547: see if hasmntopt exists
10548set hasmntopt d_hasmntopt
10549eval $inlibc
10550
10551: see if this is a netinet/in.h or sys/in.h system
10552set netinet/in.h i_niin sys/in.h i_sysin
10553eval $inhdr
10554
10555: see if arpa/inet.h has to be included
10556set arpa/inet.h i_arpainet
10557eval $inhdr
10558
10559: see if htonl --and friends-- exists
10560val=''
10561set htonl val
10562eval $inlibc
10563
10564: Maybe they are macros.
10565case "$val" in
10566$undef)
10567 $cat >htonl.c <<EOM
10568#include <stdio.h>
10569#include <sys/types.h>
10570#$i_niin I_NETINET_IN
10571#$i_sysin I_SYS_IN
10572#$i_arpainet I_ARPA_INET
10573#ifdef I_NETINET_IN
10574#include <netinet/in.h>
10575#endif
10576#ifdef I_SYS_IN
10577#include <sys/in.h>
10578#endif
10579#ifdef I_ARPA_INET
10580#include <arpa/inet.h>
10581#endif
10582#ifdef htonl
10583printf("Defined as a macro.");
10584#endif
10585EOM
10586 $cppstdin $cppflags $cppminus < htonl.c >htonl.E 2>/dev/null
10587 if $contains 'Defined as a macro' htonl.E >/dev/null 2>&1; then
10588 val="$define"
10589 echo "But it seems to be defined as a macro." >&4
10590 fi
10591 $rm -f htonl.?
10592 ;;
10593esac
10594set d_htonl
10595eval $setvar
10596
10597: see if iconv exists
10598set iconv d_iconv
10599eval $inlibc
10600
10601: index or strchr
10602echo " "
10603if set index val -f; eval $csym; $val; then
10604 if set strchr val -f d_strchr; eval $csym; $val; then
10605 if $contains strchr "$strings" >/dev/null 2>&1 ; then
10606 val="$define"
10607 vali="$undef"
10608 echo "strchr() found." >&4
10609 else
10610 val="$undef"
10611 vali="$define"
10612 echo "index() found." >&4
10613 fi
10614 else
10615 val="$undef"
10616 vali="$define"
8dfa8df9
JH
10617 echo "index() found." >&4
10618 fi
b4eb6b3d 10619else
8dfa8df9
JH
10620 if set strchr val -f d_strchr; eval $csym; $val; then
10621 val="$define"
10622 vali="$undef"
10623 echo "strchr() found." >&4
10624 else
10625 echo "No index() or strchr() found!" >&4
10626 val="$undef"
10627 vali="$undef"
10628 fi
b4eb6b3d 10629fi
8dfa8df9
JH
10630set d_strchr; eval $setvar
10631val="$vali"
10632set d_index; eval $setvar
10633
10634: check whether inet_aton exists
10635set inet_aton d_inetaton
10636eval $inlibc
b4eb6b3d
JH
10637
10638: Look for isascii
10639echo " "
10640$cat >isascii.c <<'EOCP'
10641#include <stdio.h>
10642#include <ctype.h>
10643int main() {
10644 int c = 'A';
10645 if (isascii(c))
10646 exit(0);
10647 else
10648 exit(1);
10649}
10650EOCP
10651set isascii
10652if eval $compile; then
10653 echo "isascii() found." >&4
10654 val="$define"
10655else
10656 echo "isascii() NOT found." >&4
10657 val="$undef"
10658fi
10659set d_isascii
10660eval $setvar
10661$rm -f isascii*
10662
10663: see if isnan exists
10664set isnan d_isnan
10665eval $inlibc
10666
10667: see if isnanl exists
10668set isnanl d_isnanl
10669eval $inlibc
10670
10671: see if killpg exists
10672set killpg d_killpg
10673eval $inlibc
10674
10675: see if lchown exists
10676echo " "
10677$cat > try.c <<'EOCP'
10678/* System header to define __stub macros and hopefully few prototypes,
10679 which can conflict with char lchown(); below. */
10680#include <assert.h>
10681/* Override any gcc2 internal prototype to avoid an error. */
10682/* We use char because int might match the return type of a gcc2
10683 builtin and then its argument prototype would still apply. */
10684char lchown();
10685int main() {
10686 /* The GNU C library defines this for functions which it implements
10687 to always fail with ENOSYS. Some functions are actually named
10688 something starting with __ and the normal name is an alias. */
10689#if defined (__stub_lchown) || defined (__stub___lchown)
10690choke me
10691#else
10692lchown();
10693#endif
10694; return 0; }
10695EOCP
10696set try
10697if eval $compile; then
10698 $echo "lchown() found." >&4
10699 val="$define"
10700else
10701 $echo "lchown() NOT found." >&4
10702 val="$undef"
10703fi
10704set d_lchown
10705eval $setvar
10706
10707: See if number of significant digits in a double precision number is known
10708echo " "
10709$cat >ldbl_dig.c <<EOM
10710#$i_limits I_LIMITS
10711#$i_float I_FLOAT
10712#ifdef I_LIMITS
10713#include <limits.h>
10714#endif
10715#ifdef I_FLOAT
10716#include <float.h>
10717#endif
10718#ifdef LDBL_DIG
10719printf("Contains LDBL_DIG");
10720#endif
10721EOM
10722$cppstdin $cppflags $cppminus < ldbl_dig.c >ldbl_dig.E 2>/dev/null
10723if $contains 'LDBL_DIG' ldbl_dig.E >/dev/null 2>&1; then
10724 echo "LDBL_DIG found." >&4
10725 val="$define"
10726else
10727 echo "LDBL_DIG NOT found." >&4
10728 val="$undef"
10729fi
10730$rm -f ldbl_dig.?
10731set d_ldbl_dig
10732eval $setvar
10733
10734: see if link exists
10735set link d_link
10736eval $inlibc
10737
10738: see if localeconv exists
10739set localeconv d_locconv
10740eval $inlibc
10741
10742: see if lockf exists
10743set lockf d_lockf
10744eval $inlibc
10745
b4eb6b3d
JH
10746: see if prototype for lseek is available
10747echo " "
10748set d_lseekproto lseek $i_systypes sys/types.h $i_unistd unistd.h
10749eval $hasproto
10750
10751: see if lstat exists
10752set lstat d_lstat
10753eval $inlibc
10754
10755: see if madvise exists
10756set madvise d_madvise
10757eval $inlibc
10758
10759: see if mblen exists
10760set mblen d_mblen
10761eval $inlibc
10762
10763: see if mbstowcs exists
10764set mbstowcs d_mbstowcs
10765eval $inlibc
10766
10767: see if mbtowc exists
10768set mbtowc d_mbtowc
10769eval $inlibc
10770
10771: see if memchr exists
10772set memchr d_memchr
10773eval $inlibc
10774
10775: see if memcmp exists
10776set memcmp d_memcmp
10777eval $inlibc
10778
10779: see if memcpy exists
10780set memcpy d_memcpy
10781eval $inlibc
10782
10783: see if memmove exists
10784set memmove d_memmove
10785eval $inlibc
10786
10787: see if memset exists
10788set memset d_memset
10789eval $inlibc
10790
10791: see if mkdir exists
10792set mkdir d_mkdir
10793eval $inlibc
10794
10795: see if mkdtemp exists
10796set mkdtemp d_mkdtemp
10797eval $inlibc
10798
10799: see if mkfifo exists
10800set mkfifo d_mkfifo
10801eval $inlibc
10802
10803: see if mkstemp exists
10804set mkstemp d_mkstemp
10805eval $inlibc
10806
10807: see if mkstemps exists
10808set mkstemps d_mkstemps
10809eval $inlibc
10810
10811: see if mktime exists
10812set mktime d_mktime
10813eval $inlibc
10814
10815: see if this is a sys/mman.h system
10816set sys/mman.h i_sysmman
10817eval $inhdr
10818
10819: see if mmap exists
10820set mmap d_mmap
10821eval $inlibc
10822: see what shmat returns
10823: default to something harmless
10824mmaptype='void *'
10825case "$i_sysmman$d_mmap" in
10826"$define$define")
10827 $cat >mmap.c <<'END'
10828#include <sys/mman.h>
10829void *mmap();
10830END
10831 if $cc $ccflags -c mmap.c >/dev/null 2>&1; then
10832 mmaptype='void *'
10833 else
10834 mmaptype='caddr_t'
10835 fi
10836 echo "and it returns ($mmaptype)." >&4
10837 ;;
10838esac
10839
10840
10841
10842: see if modfl exists
10843set modfl d_modfl
10844eval $inlibc
10845
e67aeab1
JH
10846d_modfl_pow32_bug="$undef"
10847
2b2cdb4d
HS
10848case "$d_longdbl$d_modfl" in
10849$define$define)
10850 $cat <<EOM
10851Checking to see whether your modfl() is okay for large values...
10852EOM
10853$cat >try.c <<EOCP
10854#include <math.h>
10855#include <stdio.h>
10856int main() {
10857 long double nv = 4294967303.15;
10858 long double v, w;
10859 v = modfl(nv, &w);
10860#ifdef __GLIBC__
10861 printf("glibc");
10862#endif
10863 printf(" %"$sPRIfldbl" %"$sPRIfldbl" %"$sPRIfldbl"\n", nv, v, w);
10864 return 0;
10865}
10866EOCP
27f9615e
JH
10867 case "$osname:$gccversion" in
10868 aix:) saveccflags="$ccflags"
10869 ccflags="$ccflags -qlongdouble" ;; # to avoid core dump
10870 esac
2b2cdb4d
HS
10871 set try
10872 if eval $compile; then
5440bc8e 10873 foo=`$run ./try`
2b2cdb4d
HS
10874 case "$foo" in
10875 *" 4294967303.150000 1.150000 4294967302.000000")
10876 echo >&4 "Your modfl() is broken for large values."
e67aeab1 10877 d_modfl_pow32_bug="$define"
2b2cdb4d
HS
10878 case "$foo" in
10879 glibc) echo >&4 "You should upgrade your glibc to at least 2.2.2 to get a fixed modfl()."
10880 ;;
10881 esac
10882 ;;
10883 *" 4294967303.150000 0.150000 4294967303.000000")
10884 echo >&4 "Your modfl() seems okay for large values."
10885 ;;
10886 *) echo >&4 "I don't understand your modfl() at all."
10887 d_modfl="$undef"
10888 ;;
10889 esac
10890 $rm -f try.* try core core.try.*
10891 else
10892 echo "I cannot figure out whether your modfl() is okay, assuming it isn't."
10893 d_modfl="$undef"
10894 fi
27f9615e 10895 case "$osname:$gccversion" in
abcf653a 10896 aix:) ccflags="$saveccflags" ;; # restore
27f9615e 10897 esac
2b2cdb4d
HS
10898 ;;
10899esac
10900
b4eb6b3d
JH
10901: see if mprotect exists
10902set mprotect d_mprotect
10903eval $inlibc
10904
10905: see if msgctl exists
10906set msgctl d_msgctl
10907eval $inlibc
10908
10909: see if msgget exists
10910set msgget d_msgget
10911eval $inlibc
10912
10913: see if msgsnd exists
10914set msgsnd d_msgsnd
10915eval $inlibc
10916
10917: see if msgrcv exists
10918set msgrcv d_msgrcv
10919eval $inlibc
10920
10921: see how much of the 'msg*(2)' library is present.
10922h_msg=true
10923echo " "
10924case "$d_msgctl$d_msgget$d_msgsnd$d_msgrcv" in
10925*"$undef"*) h_msg=false;;
10926esac
10927case "$osname" in
10928freebsd)
10929 case "`ipcs 2>&1`" in
10930 "SVID messages"*"not configured"*)
10931 echo "Your $osname does not have the msg*(2) configured." >&4
10932 h_msg=false
10933 val="$undef"
10934 set msgctl d_msgctl
10935 eval $setvar
10936 set msgget d_msgget
10937 eval $setvar
10938 set msgsnd d_msgsnd
10939 eval $setvar
10940 set msgrcv d_msgrcv
10941 eval $setvar
10942 ;;
10943 esac
10944 ;;
10945esac
10946: we could also check for sys/ipc.h ...
10947if $h_msg && $test `./findhdr sys/msg.h`; then
10948 echo "You have the full msg*(2) library." >&4
10949 val="$define"
10950else
10951 echo "You don't have the full msg*(2) library." >&4
10952 val="$undef"
10953fi
10954set d_msg
10955eval $setvar
10956
4e0554ec
JH
10957
10958echo " "
10959echo "Checking to see if your system supports struct msghdr..." >&4
10960set d_msghdr_s msghdr $i_systypes sys/types.h $d_socket sys/socket.h $i_sysuio sys/uio.h
10961eval $hasstruct
10962case "$d_msghdr_s" in
10963"$define") echo "Yes, it does." ;;
10964*) echo "No, it doesn't." ;;
10965esac
10966
10967
b4eb6b3d
JH
10968: see if msync exists
10969set msync d_msync
10970eval $inlibc
10971
10972: see if munmap exists
10973set munmap d_munmap
10974eval $inlibc
10975
10976: see if nice exists
10977set nice d_nice
10978eval $inlibc
10979
2765b840
JH
10980: see if this is a langinfo.h system
10981set langinfo.h i_langinfo
10982eval $inhdr
10983
10984: see if nl_langinfo exists
10985set nl_langinfo d_nl_langinfo
10986eval $inlibc
10987
b4eb6b3d
JH
10988: check for length of character
10989echo " "
10990case "$charsize" in
10991'')
10992 echo "Checking to see how big your characters are (hey, you never know)..." >&4
10993 $cat >try.c <<'EOCP'
10994#include <stdio.h>
10995int main()
10996{
10997 printf("%d\n", (int)sizeof(char));
10998 exit(0);
10999}
11000EOCP
11001 set try
11002 if eval $compile_ok; then
5440bc8e 11003 dflt=`$run ./try`
b4eb6b3d
JH
11004 else
11005 dflt='1'
11006 echo "(I can't seem to compile the test program. Guessing...)"
11007 fi
11008 ;;
11009*)
11010 dflt="$charsize"
11011 ;;
11012esac
11013rp="What is the size of a character (in bytes)?"
11014. ./myread
11015charsize="$ans"
11016$rm -f try.c try
11017
1d1be0dc
NC
11018: check for volatile keyword
11019echo " "
11020echo 'Checking to see if your C compiler knows about "volatile"...' >&4
11021$cat >try.c <<'EOCP'
11022int main()
11023{
11024 typedef struct _goo_struct goo_struct;
11025 goo_struct * volatile goo = ((goo_struct *)0);
11026 struct _goo_struct {
11027 long long_int;
11028 int reg_int;
11029 char char_var;
11030 };
11031 typedef unsigned short foo_t;
11032 char *volatile foo;
11033 volatile int bar;
11034 volatile foo_t blech;
11035 foo = foo;
11036}
11037EOCP
11038if $cc -c $ccflags try.c >/dev/null 2>&1 ; then
11039 val="$define"
11040 echo "Yup, it does."
11041else
11042 val="$undef"
11043 echo "Nope, it doesn't."
11044fi
11045set d_volatile
11046eval $setvar
11047$rm -f try.*
11048
b4eb6b3d
JH
11049
11050echo " "
11051$echo "Choosing the C types to be used for Perl's internal types..." >&4
11052
11053case "$use64bitint:$d_quad:$quadtype" in
11054define:define:?*)
11055 ivtype="$quadtype"
11056 uvtype="$uquadtype"
11057 ivsize=8
11058 uvsize=8
11059 ;;
11060*) ivtype="long"
11061 uvtype="unsigned long"
11062 ivsize=$longsize
11063 uvsize=$longsize
11064 ;;
11065esac
11066
11067case "$uselongdouble:$d_longdbl" in
11068define:define)
11069 nvtype="long double"
11070 nvsize=$longdblsize
11071 ;;
11072*) nvtype=double
11073 nvsize=$doublesize
11074 ;;
11075esac
11076
11077$echo "(IV will be "$ivtype", $ivsize bytes)"
11078$echo "(UV will be "$uvtype", $uvsize bytes)"
11079$echo "(NV will be "$nvtype", $nvsize bytes)"
11080
11081$cat >try.c <<EOCP
11082#$i_inttypes I_INTTYPES
11083#ifdef I_INTTYPES
11084#include <inttypes.h>
11085#endif
11086#include <stdio.h>
11087int main() {
11088#ifdef INT8
11089 int8_t i = INT8_MAX;
11090 uint8_t u = UINT8_MAX;
11091 printf("int8_t\n");
11092#endif
11093#ifdef INT16
11094 int16_t i = INT16_MAX;
11095 uint16_t i = UINT16_MAX;
11096 printf("int16_t\n");
11097#endif
11098#ifdef INT32
11099 int32_t i = INT32_MAX;
11100 uint32_t u = UINT32_MAX;
11101 printf("int32_t\n");
11102#endif
11103}
11104EOCP
11105
11106case "$i8type" in
11107'') case "$charsize" in
11108 1) i8type=char
11109 u8type="unsigned char"
11110 i8size=$charsize
11111 u8size=$charsize
11112 ;;
11113 esac
11114 ;;
11115esac
11116case "$i8type" in
11117'') set try -DINT8
11118 if eval $compile; then
5440bc8e 11119 case "`$run ./try`" in
b4eb6b3d
JH
11120 int8_t) i8type=int8_t
11121 u8type=uint8_t
11122 i8size=1
11123 u8size=1
11124 ;;
11125 esac
11126 fi
11127 ;;
11128esac
11129case "$i8type" in
11130'') if $test $charsize -ge 1; then
11131 i8type=char
11132 u8type="unsigned char"
11133 i8size=$charsize
11134 u8size=$charsize
11135 fi
11136 ;;
11137esac
11138
11139case "$i16type" in
11140'') case "$shortsize" in
11141 2) i16type=short
11142 u16type="unsigned short"
11143 i16size=$shortsize
11144 u16size=$shortsize
11145 ;;
11146 esac
11147 ;;
11148esac
11149case "$i16type" in
11150'') set try -DINT16
11151 if eval $compile; then
5440bc8e 11152 case "`$run ./try`" in
b4eb6b3d
JH
11153 int16_t)
11154 i16type=int16_t
11155 u16type=uint16_t
11156 i16size=2
11157 u16size=2
11158 ;;
11159 esac
11160 fi
11161 ;;
11162esac
11163case "$i16type" in
11164'') if $test $shortsize -ge 2; then
11165 i16type=short
11166 u16type="unsigned short"
11167 i16size=$shortsize
11168 u16size=$shortsize
11169 fi
11170 ;;
11171esac
11172
11173case "$i32type" in
11174'') case "$longsize" in
11175 4) i32type=long
11176 u32type="unsigned long"
11177 i32size=$longsize
11178 u32size=$longsize
11179 ;;
11180 *) case "$intsize" in
11181 4) i32type=int
11182 u32type="unsigned int"
11183 i32size=$intsize
11184 u32size=$intsize
11185 ;;
11186 esac
11187 ;;
11188 esac
11189 ;;
11190esac
11191case "$i32type" in
11192'') set try -DINT32
11193 if eval $compile; then
5440bc8e 11194 case "`$run ./try`" in
b4eb6b3d
JH
11195 int32_t)
11196 i32type=int32_t
11197 u32type=uint32_t
11198 i32size=4
11199 u32size=4
11200 ;;
11201 esac
11202 fi
11203 ;;
11204esac
11205case "$i32type" in
11206'') if $test $intsize -ge 4; then
11207 i32type=int
11208 u32type="unsigned int"
11209 i32size=$intsize
11210 u32size=$intsize
11211 fi
11212 ;;
11213esac
11214
11215case "$i64type" in
11216'') case "$d_quad:$quadtype" in
11217 define:?*)
11218 i64type="$quadtype"
11219 u64type="$uquadtype"
11220 i64size=8
11221 u64size=8
11222 ;;
11223 esac
11224 ;;
11225esac
11226
1d1be0dc
NC
11227$echo "Checking how many bits of your UVs your NVs can preserve..." >&4
11228: volatile so that the compiler has to store it out to memory.
11229if test X"$d_volatile" = X"$define"; then
11230 volatile=volatile
11231fi
b4eb6b3d
JH
11232$cat <<EOP >try.c
11233#include <stdio.h>
1d1be0dc
NC
11234#include <sys/types.h>
11235#include <signal.h>
11236#ifdef SIGFPE
11237$volatile int bletched = 0;
11238$signal_t blech(s) int s; { bletched = 1; }
11239#endif
b4eb6b3d
JH
11240int main() {
11241 $uvtype u = 0;
1d1be0dc 11242 $nvtype d;
b4eb6b3d
JH
11243 int n = 8 * $uvsize;
11244 int i;
1d1be0dc
NC
11245#ifdef SIGFPE
11246 signal(SIGFPE, blech);
11247#endif
11248
b4eb6b3d
JH
11249 for (i = 0; i < n; i++) {
11250 u = u << 1 | ($uvtype)1;
1d1be0dc
NC
11251 d = ($nvtype)u;
11252 if (($uvtype)d != u)
b4eb6b3d 11253 break;
1d1be0dc
NC
11254 if (d <= 0)
11255 break;
11256 d = ($nvtype)(u - 1);
11257 if (($uvtype)d != (u - 1))
11258 break;
11259#ifdef SIGFPE
11260 if (bletched) {
11261 break;
11262#endif
11263 }
b4eb6b3d 11264 }
efd1522b 11265 printf("%d\n", ((i == n) ? -n : i));
b4eb6b3d
JH
11266 exit(0);
11267}
11268EOP
1d1be0dc
NC
11269set try
11270
11271d_nv_preserves_uv="$undef"
11272if eval $compile; then
5440bc8e 11273 d_nv_preserves_uv_bits="`$run ./try`"
1d1be0dc
NC
11274fi
11275case "$d_nv_preserves_uv_bits" in
11276\-[1-9]*)
11277 d_nv_preserves_uv_bits=`expr 0 - $d_nv_preserves_uv_bits`
11278 $echo "Your NVs can preserve all $d_nv_preserves_uv_bits bits of your UVs." 2>&1
11279 d_nv_preserves_uv="$define"
b4eb6b3d 11280 ;;
1d1be0dc
NC
11281[1-9]*) $echo "Your NVs can preserve only $d_nv_preserves_uv_bits bits of your UVs." 2>&1
11282 d_nv_preserves_uv="$undef" ;;
11283*) $echo "Can't figure out how many bits your NVs preserve." 2>&1
11284 d_nv_preserves_uv_bits="$undef" ;;
b4eb6b3d
JH
11285esac
11286
1d1be0dc
NC
11287$rm -f try.* try
11288
b4eb6b3d
JH
11289
11290: check for off64_t
11291echo " "
11292echo "Checking to see if you have off64_t..." >&4
11293$cat >try.c <<EOCP
11294#include <sys/types.h>
11295#include <unistd.h>
11296int main() { off64_t x = 7; }
11297EOCP
11298set try
11299if eval $compile; then
11300 val="$define"
11301 echo "You have off64_t."
11302else
11303 val="$undef"
11304 echo "You do not have off64_t."
11305 case "$lseeksize" in
11306 8) echo "(Your off_t is 64 bits, so you could use that.)" ;;
11307 esac
11308fi
11309$rm -f try.* try
11310set d_off64_t
11311eval $setvar
11312
11313: see if POSIX threads are available
11314set pthread.h i_pthread
11315eval $inhdr
11316
11317
11318
11319
11320: how to create joinable pthreads
11321if test "X$usethreads" = "X$define" -a "X$i_pthread" = "X$define"; then
11322 echo " "
11323 echo "Checking what constant to use for creating joinable pthreads..." >&4
11324 $cat >try.c <<'EOCP'
11325#include <pthread.h>
11326int main() {
11327 int detachstate = JOINABLE;
11328}
11329EOCP
11330 set try -DJOINABLE=PTHREAD_CREATE_JOINABLE
11331 if eval $compile; then
11332 echo "You seem to use PTHREAD_CREATE_JOINABLE." >&4
11333 val="$undef" # Yes, undef.
11334 set d_old_pthread_create_joinable
11335 eval $setvar
11336 val=""
11337 set old_pthread_create_joinable
11338 eval $setvar
11339 else
11340 set try -DJOINABLE=PTHREAD_CREATE_UNDETACHED
11341 if eval $compile; then
11342 echo "You seem to use PTHREAD_CREATE_UNDETACHED." >&4
11343 val="$define"
11344 set d_old_pthread_create_joinable
11345 eval $setvar
11346 val=PTHREAD_CREATE_UNDETACHED
11347 set old_pthread_create_joinable
11348 eval $setvar
11349 else
11350 set try -DJOINABLE=__UNDETACHED
11351 if eval $compile; then
11352 echo "You seem to use __UNDETACHED." >&4
11353 val="$define"
11354 set d_old_pthread_create_joinable
11355 eval $setvar
11356 val=__UNDETACHED
11357 set old_pthread_create_joinable
11358 eval $setvar
11359 else
11360 echo "Egads, nothing obvious found. Guessing that you use 0." >&4
11361 val="$define"
11362 set d_old_pthread_create_joinable
11363 eval $setvar
11364 val=0
11365 set old_pthread_create_joinable
11366 eval $setvar
11367 fi
11368 fi
11369 fi
11370 $rm -f try try.*
11371else
11372 d_old_pthread_create_joinable="$undef"
11373 old_pthread_create_joinable=""
11374fi
11375
11376: see if pause exists
11377set pause d_pause
11378eval $inlibc
11379
11380: see if pipe exists
11381set pipe d_pipe
11382eval $inlibc
11383
11384: see if poll exists
11385set poll d_poll
11386eval $inlibc
11387
d6483fcc
JH
11388: see if pthread_atfork exists
11389set pthread_atfork d_pthread_atfork
11390eval $inlibc
11391
b4eb6b3d
JH
11392
11393: see whether the various POSIXish _yields exist
11394$cat >try.c <<EOP
11395#include <pthread.h>
11396#include <stdio.h>
11397int main() {
11398#ifdef SCHED_YIELD
11399 sched_yield();
11400#else
11401#ifdef PTHREAD_YIELD
11402 pthread_yield();
11403#else
11404#ifdef PTHREAD_YIELD_NULL
11405 pthread_yield(NULL);
11406#endif
11407#endif
11408#endif
11409}
11410EOP
11411: see if sched_yield exists
11412set try -DSCHED_YIELD
11413if eval $compile; then
11414 val="$define"
11415 sched_yield='sched_yield()'
11416else
11417 val="$undef"
11418fi
11419case "$usethreads" in
11420$define)
11421 case "$val" in
11422 $define) echo 'sched_yield() found.' >&4 ;;
11423 *) echo 'sched_yield() NOT found.' >&4 ;;
11424 esac
11425esac
11426set d_sched_yield
11427eval $setvar
11428
11429: see if pthread_yield exists
11430set try -DPTHREAD_YIELD
11431if eval $compile; then
11432 val="$define"
11433 case "$sched_yield" in
11434 '') sched_yield='pthread_yield()' ;;
11435 esac
11436else
11437 set try -DPTHREAD_YIELD_NULL
11438 if eval $compile; then
11439 val="$define"
11440 case "$sched_yield" in
11441 '') sched_yield='pthread_yield(NULL)' ;;
11442 esac
11443 else
11444 val="$undef"
11445 fi
11446fi
11447case "$usethreads" in
11448$define)
11449 case "$val" in
11450 $define) echo 'pthread_yield() found.' >&4 ;;
11451 *) echo 'pthread_yield() NOT found.' >&4 ;;
11452 esac
11453 ;;
11454esac
11455set d_pthread_yield
11456eval $setvar
11457
11458case "$sched_yield" in
11459'') sched_yield=undef ;;
11460esac
11461
11462$rm -f try try.*
11463
11464: see if this is a pwd.h system
11465set pwd.h i_pwd
11466eval $inhdr
11467
11468case "$i_pwd" in
11469$define)
11470 xxx=`./findhdr pwd.h`
11471 $cppstdin $cppflags $cppminus < $xxx >$$.h
11472
11473 if $contains 'pw_quota' $$.h >/dev/null 2>&1; then
11474 val="$define"
11475 else
11476 val="$undef"
11477 fi
11478 set d_pwquota
11479 eval $setvar
11480
11481 if $contains 'pw_age' $$.h >/dev/null 2>&1; then
11482 val="$define"
11483 else
11484 val="$undef"
11485 fi
11486 set d_pwage
11487 eval $setvar
11488
11489 if $contains 'pw_change' $$.h >/dev/null 2>&1; then
11490 val="$define"
11491 else
11492 val="$undef"
11493 fi
11494 set d_pwchange
11495 eval $setvar
11496
11497 if $contains 'pw_class' $$.h >/dev/null 2>&1; then
11498 val="$define"
11499 else
11500 val="$undef"
11501 fi
11502 set d_pwclass
11503 eval $setvar
11504
11505 if $contains 'pw_expire' $$.h >/dev/null 2>&1; then
11506 val="$define"
11507 else
11508 val="$undef"
11509 fi
11510 set d_pwexpire
11511 eval $setvar
11512
11513 if $contains 'pw_comment' $$.h >/dev/null 2>&1; then
11514 val="$define"
11515 else
11516 val="$undef"
11517 fi
11518 set d_pwcomment
11519 eval $setvar
11520
11521 if $contains 'pw_gecos' $$.h >/dev/null 2>&1; then
11522 val="$define"
11523 else
11524 val="$undef"
11525 fi
11526 set d_pwgecos
11527 eval $setvar
11528
11529 if $contains 'pw_passwd' $$.h >/dev/null 2>&1; then
11530 val="$define"
11531 else
11532 val="$undef"
11533 fi
11534 set d_pwpasswd
11535 eval $setvar
11536
11537 $rm -f $$.h
11538 ;;
11539*)
11540 val="$undef";
11541 set d_pwquota; eval $setvar
11542 set d_pwage; eval $setvar
11543 set d_pwchange; eval $setvar
11544 set d_pwclass; eval $setvar
11545 set d_pwexpire; eval $setvar
11546 set d_pwcomment; eval $setvar
11547 set d_pwgecos; eval $setvar
11548 set d_pwpasswd; eval $setvar
11549 ;;
11550esac
11551
11552: see if readdir and friends exist
11553set readdir d_readdir
11554eval $inlibc
11555set seekdir d_seekdir
11556eval $inlibc
11557set telldir d_telldir
11558eval $inlibc
11559set rewinddir d_rewinddir
11560eval $inlibc
11561
11562: see if readlink exists
11563set readlink d_readlink
11564eval $inlibc
11565
4e0554ec
JH
11566: see if readv exists
11567set readv d_readv
11568eval $inlibc
11569
11570: see if recvmsg exists
11571set recvmsg d_recvmsg
11572eval $inlibc
11573
b4eb6b3d
JH
11574: see if rename exists
11575set rename d_rename
11576eval $inlibc
11577
11578: see if rmdir exists
11579set rmdir d_rmdir
11580eval $inlibc
11581
11582: see if memory.h is available.
11583val=''
11584set memory.h val
11585eval $inhdr
11586
11587: See if it conflicts with string.h
11588case "$val" in
11589$define)
11590 case "$strings" in
11591 '') ;;
11592 *)
11593 $cppstdin $cppflags $cppminus < $strings > mem.h
11594 if $contains 'memcpy' mem.h >/dev/null 2>&1; then
11595 echo " "
11596 echo "We won't be including <memory.h>."
11597 val="$undef"
11598 fi
11599 $rm -f mem.h
11600 ;;
11601 esac
11602esac
11603set i_memory
11604eval $setvar
11605
11606: can bcopy handle overlapping blocks?
b6cc3bc4 11607echo " "
b4eb6b3d 11608val="$undef"
b6cc3bc4
AD
11609case "$d_memmove" in
11610"$define") echo "I'll use memmove() instead of bcopy() for overlapping copies." ;;
11611*) case "$d_bcopy" in
11612 "$define")
11613 echo "Checking to see if bcopy() can do overlapping copies..." >&4
11614 $cat >try.c <<EOCP
b4eb6b3d
JH
11615#$i_memory I_MEMORY
11616#$i_stdlib I_STDLIB
11617#$i_string I_STRING
11618#$i_unistd I_UNISTD
11619EOCP
11620 $cat >>try.c <<'EOCP'
11621#include <stdio.h>
11622#ifdef I_MEMORY
11623# include <memory.h>
11624#endif
11625#ifdef I_STDLIB
11626# include <stdlib.h>
11627#endif
11628#ifdef I_STRING
11629# include <string.h>
11630#else
11631# include <strings.h>
11632#endif
11633#ifdef I_UNISTD
11634# include <unistd.h> /* Needed for NetBSD */
11635#endif
11636int main()
11637{
11638char buf[128], abc[128];
11639char *b;
11640int len;
11641int off;
11642int align;
11643
b6cc3bc4
AD
11644/* Copy "abcde..." string to char abc[] so that gcc doesn't
11645 try to store the string in read-only memory. */
b4eb6b3d
JH
11646bcopy("abcdefghijklmnopqrstuvwxyz0123456789", abc, 36);
11647
11648for (align = 7; align >= 0; align--) {
11649 for (len = 36; len; len--) {
11650 b = buf+align;
11651 bcopy(abc, b, len);
11652 for (off = 1; off <= len; off++) {
11653 bcopy(b, b+off, len);
11654 bcopy(b+off, b, len);
11655 if (bcmp(b, abc, len))
11656 exit(1);
11657 }
11658 }
11659}
11660exit(0);
11661}
11662EOCP
b6cc3bc4
AD
11663 set try
11664 if eval $compile_ok; then
11665 if ./try 2>/dev/null; then
11666 echo "Yes, it can."
11667 val="$define"
11668 else
11669 echo "It can't, sorry."
11670 fi
b4eb6b3d 11671 else
b6cc3bc4 11672 echo "(I can't compile the test program, so we'll assume not...)"
b4eb6b3d 11673 fi
b6cc3bc4
AD
11674 ;;
11675 esac
11676 $rm -f try.* try core
b4eb6b3d
JH
11677 ;;
11678esac
b4eb6b3d
JH
11679set d_safebcpy
11680eval $setvar
11681
11682: can memcpy handle overlapping blocks?
b6cc3bc4 11683echo " "
b4eb6b3d 11684val="$undef"
b6cc3bc4
AD
11685case "$d_memmove" in
11686"$define") echo "I'll use memmove() instead of memcpy() for overlapping copies." ;;
11687*) case "$d_memcpy" in
11688 "$define")
11689 echo "Checking to see if memcpy() can do overlapping copies..." >&4
11690 $cat >try.c <<EOCP
b4eb6b3d
JH
11691#$i_memory I_MEMORY
11692#$i_stdlib I_STDLIB
11693#$i_string I_STRING
11694#$i_unistd I_UNISTD
11695EOCP
11696 $cat >>try.c <<'EOCP'
11697#include <stdio.h>
11698#ifdef I_MEMORY
11699# include <memory.h>
11700#endif
11701#ifdef I_STDLIB
11702# include <stdlib.h>
11703#endif
11704#ifdef I_STRING
11705# include <string.h>
11706#else
11707# include <strings.h>
11708#endif
11709#ifdef I_UNISTD
11710# include <unistd.h> /* Needed for NetBSD */
11711#endif
11712int main()
11713{
11714char buf[128], abc[128];
11715char *b;
11716int len;
11717int off;
11718int align;
11719
11720/* Copy "abcde..." string to char abc[] so that gcc doesn't
11721 try to store the string in read-only memory. */
11722memcpy(abc, "abcdefghijklmnopqrstuvwxyz0123456789", 36);
11723
11724for (align = 7; align >= 0; align--) {
11725 for (len = 36; len; len--) {
11726 b = buf+align;
11727 memcpy(b, abc, len);
11728 for (off = 1; off <= len; off++) {
11729 memcpy(b+off, b, len);
11730 memcpy(b, b+off, len);
11731 if (memcmp(b, abc, len))
11732 exit(1);
11733 }
11734 }
11735}
11736exit(0);
11737}
11738EOCP
b6cc3bc4
AD
11739 set try
11740 if eval $compile_ok; then
11741 if ./try 2>/dev/null; then
11742 echo "Yes, it can."
11743 val="$define"
11744 else
11745 echo "It can't, sorry."
11746 fi
b4eb6b3d 11747 else
b6cc3bc4 11748 echo "(I can't compile the test program, so we'll assume not...)"
b4eb6b3d 11749 fi
b6cc3bc4
AD
11750 ;;
11751 esac
11752 $rm -f try.* try core
b4eb6b3d
JH
11753 ;;
11754esac
b4eb6b3d
JH
11755set d_safemcpy
11756eval $setvar
11757
11758: can memcmp be trusted to compare relative magnitude?
11759val="$undef"
11760case "$d_memcmp" in
11761"$define")
11762 echo " "
11763 echo "Checking if your memcmp() can compare relative magnitude..." >&4
11764 $cat >try.c <<EOCP
11765#$i_memory I_MEMORY
11766#$i_stdlib I_STDLIB
11767#$i_string I_STRING
11768#$i_unistd I_UNISTD
11769EOCP
11770 $cat >>try.c <<'EOCP'
11771#include <stdio.h>
11772#ifdef I_MEMORY
11773# include <memory.h>
11774#endif
11775#ifdef I_STDLIB
11776# include <stdlib.h>
11777#endif
11778#ifdef I_STRING
11779# include <string.h>
11780#else
11781# include <strings.h>
11782#endif
11783#ifdef I_UNISTD
11784# include <unistd.h> /* Needed for NetBSD */
11785#endif
11786int main()
11787{
11788char a = -1;
11789char b = 0;
11790if ((a < b) && memcmp(&a, &b, 1) < 0)
11791 exit(1);
11792exit(0);
11793}
11794EOCP
11795 set try
11796 if eval $compile_ok; then
5440bc8e 11797 if $run ./try 2>/dev/null; then
b4eb6b3d
JH
11798 echo "Yes, it can."
11799 val="$define"
11800 else
11801 echo "No, it can't (it uses signed chars)."
11802 fi
11803 else
11804 echo "(I can't compile the test program, so we'll assume not...)"
11805 fi
11806 ;;
11807esac
11808$rm -f try.* try core
11809set d_sanemcmp
11810eval $setvar
11811
ef9f17be
JH
11812: see if prototype for sbrk is available
11813echo " "
11814set d_sbrkproto sbrk $i_unistd unistd.h
11815eval $hasproto
11816
b4eb6b3d
JH
11817: see if select exists
11818set select d_select
11819eval $inlibc
11820
11821: see if semctl exists
11822set semctl d_semctl
11823eval $inlibc
11824
11825: see if semget exists
11826set semget d_semget
11827eval $inlibc
11828
11829: see if semop exists
11830set semop d_semop
11831eval $inlibc
11832
11833: see how much of the 'sem*(2)' library is present.
11834h_sem=true
11835echo " "
11836case "$d_semctl$d_semget$d_semop" in
11837*"$undef"*) h_sem=false;;
11838esac
11839case "$osname" in
11840freebsd)
11841 case "`ipcs 2>&1`" in
11842 "SVID messages"*"not configured"*)
11843 echo "Your $osname does not have the sem*(2) configured." >&4
11844 h_sem=false
11845 val="$undef"
11846 set semctl d_semctl
11847 eval $setvar
11848 set semget d_semget
11849 eval $setvar
11850 set semop d_semop
11851 eval $setvar
11852 ;;
11853 esac
11854 ;;
11855esac
11856: we could also check for sys/ipc.h ...
11857if $h_sem && $test `./findhdr sys/sem.h`; then
11858 echo "You have the full sem*(2) library." >&4
11859 val="$define"
11860else
11861 echo "You don't have the full sem*(2) library." >&4
11862 val="$undef"
11863fi
11864set d_sem
11865eval $setvar
11866
11867: see whether sys/sem.h defines union semun
11868echo " "
11869$cat > try.c <<'END'
11870#include <sys/types.h>
11871#include <sys/ipc.h>
11872#include <sys/sem.h>
11873int main () { union semun semun; semun.buf = 0; }
11874END
11875set try
11876if eval $compile; then
11877 echo "You have union semun in <sys/sem.h>." >&4
11878 val="$define"
11879else
11880 echo "You do not have union semun in <sys/sem.h>." >&4
11881 val="$undef"
11882fi
11883$rm -f try try.c try.h
11884set d_union_semun
11885eval $setvar
11886
11887: see how to do semctl IPC_STAT
11888case "$d_sem" in
11889$define)
11890 : see whether semctl IPC_STAT can use union semun
11891 echo " "
11892 $cat > try.h <<END
11893#ifndef S_IRUSR
11894# ifdef S_IREAD
11895# define S_IRUSR S_IREAD
11896# define S_IWUSR S_IWRITE
11897# define S_IXUSR S_IEXEC
11898# else
11899# define S_IRUSR 0400
11900# define S_IWUSR 0200
11901# define S_IXUSR 0100
11902# endif
11903# define S_IRGRP (S_IRUSR>>3)
11904# define S_IWGRP (S_IWUSR>>3)
11905# define S_IXGRP (S_IXUSR>>3)
11906# define S_IROTH (S_IRUSR>>6)
11907# define S_IWOTH (S_IWUSR>>6)
11908# define S_IXOTH (S_IXUSR>>6)
11909#endif
11910#ifndef S_IRWXU
11911# define S_IRWXU (S_IRUSR|S_IWUSR|S_IXUSR)
11912# define S_IRWXG (S_IRGRP|S_IWGRP|S_IXGRP)
11913# define S_IRWXO (S_IROTH|S_IWOTH|S_IXOTH)
11914#endif
11915END
11916
11917 $cat > try.c <<END
11918#include <sys/types.h>
11919#include <sys/ipc.h>
11920#include <sys/sem.h>
11921#include <sys/stat.h>
11922#include <stdio.h>
11923#include <errno.h>
11924#include "try.h"
11925#ifndef errno
11926extern int errno;
11927#endif
11928#$d_union_semun HAS_UNION_SEMUN
11929int main() {
11930 union semun
11931#ifndef HAS_UNION_SEMUN
11932 {
11933 int val;
11934 struct semid_ds *buf;
11935 unsigned short *array;
11936 }
11937#endif
11938 arg;
11939 int sem, st;
11940
11941#if defined(IPC_PRIVATE) && defined(S_IRWXU) && defined(S_IRWXG) && defined(S_IRWXO) && defined(IPC_CREAT)
11942 sem = semget(IPC_PRIVATE, 1, S_IRWXU|S_IRWXG|S_IRWXO|IPC_CREAT);
11943 if (sem > -1) {
11944 struct semid_ds argbuf;
11945 arg.buf = &argbuf;
11946# ifdef IPC_STAT
11947 st = semctl(sem, 0, IPC_STAT, arg);
11948 if (st == 0)
11949 printf("semun\n");
11950 else
11951# endif /* IPC_STAT */
11952 printf("semctl IPC_STAT failed: errno = %d\n", errno);
11953# ifdef IPC_RMID
11954 if (semctl(sem, 0, IPC_RMID, arg) != 0)
11955# endif /* IPC_RMID */
11956 printf("semctl IPC_RMID failed: errno = %d\n", errno);
11957 } else
11958#endif /* IPC_PRIVATE && ... */
11959 printf("semget failed: errno = %d\n", errno);
11960 return 0;
11961}
11962END
11963 val="$undef"
11964 set try
11965 if eval $compile; then
5440bc8e 11966 xxx=`$run ./try`
b4eb6b3d
JH
11967 case "$xxx" in
11968 semun) val="$define" ;;
11969 esac
11970 fi
11971 $rm -f try try.c
11972 set d_semctl_semun
11973 eval $setvar
11974 case "$d_semctl_semun" in
11975 $define)
11976 echo "You can use union semun for semctl IPC_STAT." >&4
11977 also='also'
11978 ;;
11979 *) echo "You cannot use union semun for semctl IPC_STAT." >&4
11980 also=''
11981 ;;
11982 esac
11983
11984 : see whether semctl IPC_STAT can use struct semid_ds pointer
11985 $cat > try.c <<'END'
11986#include <sys/types.h>
11987#include <sys/ipc.h>
11988#include <sys/sem.h>
11989#include <sys/stat.h>
11990#include "try.h"
11991#include <stdio.h>
11992#include <errno.h>
11993#ifndef errno
11994extern int errno;
11995#endif
11996int main() {
11997 struct semid_ds arg;
11998 int sem, st;
11999
12000#if defined(IPC_PRIVATE) && defined(S_IRWXU) && defined(S_IRWXG) && defined(S_IRWXO) && defined(IPC_CREAT)
12001 sem = semget(IPC_PRIVATE, 1, S_IRWXU|S_IRWXG|S_IRWXO|IPC_CREAT);
12002 if (sem > -1) {
12003# ifdef IPC_STAT
12004 st = semctl(sem, 0, IPC_STAT, &arg);
12005 if (st == 0)
12006 printf("semid_ds\n");
12007 else
12008# endif /* IPC_STAT */
12009 printf("semctl IPC_STAT failed: errno = %d\n", errno);
12010# ifdef IPC_RMID
12011 if (semctl(sem, 0, IPC_RMID, &arg) != 0)
12012# endif /* IPC_RMID */
12013 printf("semctl IPC_RMID failed: errno = %d\n", errno);
12014 } else
12015#endif /* IPC_PRIVATE && ... */
12016 printf("semget failed: errno = %d\n", errno);
12017
12018 return 0;
12019}
12020END
12021 val="$undef"
12022 set try
12023 if eval $compile; then
5440bc8e 12024 xxx=`$run ./try`
b4eb6b3d
JH
12025 case "$xxx" in
12026 semid_ds) val="$define" ;;
12027 esac
12028 fi
12029 $rm -f try try.c
12030 set d_semctl_semid_ds
12031 eval $setvar
12032 case "$d_semctl_semid_ds" in
12033 $define)
12034 echo "You can $also use struct semid_ds* for semctl IPC_STAT." >&4
12035 ;;
12036 *) echo "You cannot use struct semid_ds* for semctl IPC_STAT." >&4
12037 ;;
12038 esac
12039 $rm -f try.h
12040 ;;
12041*) val="$undef"
12042
12043 # We do not have the full sem*(2) library, so assume we can not
12044 # use either.
12045
12046 set d_semctl_semun
12047 eval $setvar
12048
12049 set d_semctl_semid_ds
12050 eval $setvar
12051 ;;
12052esac
12053
4e0554ec
JH
12054: see if sendmsg exists
12055set sendmsg d_sendmsg
12056eval $inlibc
12057
b4eb6b3d
JH
12058: see if setegid exists
12059set setegid d_setegid
12060eval $inlibc
12061
12062: see if seteuid exists
12063set seteuid d_seteuid
12064eval $inlibc
12065
12066: see if setgrent exists
12067set setgrent d_setgrent
12068eval $inlibc
12069
12070: see if sethostent exists
12071set sethostent d_sethent
12072eval $inlibc
12073
4e0554ec
JH
12074: see if setitimer exists
12075set setitimer d_setitimer
12076eval $inlibc
12077
b4eb6b3d
JH
12078: see if setlinebuf exists
12079set setlinebuf d_setlinebuf
12080eval $inlibc
12081
12082: see if setlocale exists
12083set setlocale d_setlocale
12084eval $inlibc
12085
12086: see if setnetent exists
12087set setnetent d_setnent
12088eval $inlibc
12089
12090: see if setprotoent exists
12091set setprotoent d_setpent
12092eval $inlibc
12093
12094: see if setpgid exists
12095set setpgid d_setpgid
12096eval $inlibc
12097
12098: see if setpgrp2 exists
12099set setpgrp2 d_setpgrp2
12100eval $inlibc
12101
12102: see if setpriority exists
12103set setpriority d_setprior
12104eval $inlibc
12105
12106: see if setproctitle exists
12107set setproctitle d_setproctitle
12108eval $inlibc
12109
12110: see if setpwent exists
12111set setpwent d_setpwent
12112eval $inlibc
12113
12114: see if setregid exists
12115set setregid d_setregid
12116eval $inlibc
12117set setresgid d_setresgid
12118eval $inlibc
12119
12120: see if setreuid exists
12121set setreuid d_setreuid
12122eval $inlibc
12123set setresuid d_setresuid
12124eval $inlibc
12125
12126: see if setrgid exists
12127set setrgid d_setrgid
12128eval $inlibc
12129
12130: see if setruid exists
12131set setruid d_setruid
12132eval $inlibc
12133
12134: see if setservent exists
12135set setservent d_setsent
12136eval $inlibc
12137
12138: see if setsid exists
12139set setsid d_setsid
12140eval $inlibc
12141
12142: see if setvbuf exists
12143set setvbuf d_setvbuf
12144eval $inlibc
12145
12146: see if sfio.h is available
12147set sfio.h i_sfio
12148eval $inhdr
12149
12150
12151: see if sfio library is available
12152case "$i_sfio" in
12153$define)
12154 val=''
12155 set sfreserve val
12156 eval $inlibc
12157 ;;
12158*)
12159 val="$undef"
12160 ;;
12161esac
12162: Ok, but do we want to use it.
12163case "$val" in
12164$define)
12165 case "$usesfio" in
12166 true|$define|[yY]*) dflt='y';;
12167 *) dflt='n';;
12168 esac
12169 echo "$package can use the sfio library, but it is experimental."
12170 case "$useperlio" in
12171 "$undef")
12172 echo "For sfio also the PerlIO abstraction layer is needed."
12173 echo "Earlier you said you wouldn't want that."
12174 ;;
12175 esac
12176 rp="You seem to have sfio available, do you want to try using it?"
12177 . ./myread
12178 case "$ans" in
12179 y|Y) echo "Ok, turning on both sfio and PerlIO, then."
12180 useperlio="$define"
12181 val="$define"
12182 ;;
12183 *) echo "Ok, avoiding sfio this time. I'll use stdio instead."
12184 val="$undef"
b4eb6b3d
JH
12185 ;;
12186 esac
12187 ;;
12188*) case "$usesfio" in
12189 true|$define|[yY]*)
12190 echo "Sorry, cannot find sfio on this machine." >&4
12191 echo "Ignoring your setting of usesfio=$usesfio." >&4
12192 val="$undef"
12193 ;;
12194 esac
12195 ;;
12196esac
12197set d_sfio
12198eval $setvar
12199case "$d_sfio" in
12200$define) usesfio='true';;
12201*) usesfio='false';;
12202esac
3659ebf1
JH
12203case "$d_sfio" in
12204$define) ;;
12205*) : Remove sfio from list of libraries to use
7483f793
JH
12206 case "$libs" in
12207 *-lsfio*)
12208 echo "Removing unneeded -lsfio from library list" >&4
12209 set `echo X $libs | $sed -e 's/-lsfio / /' -e 's/-lsfio$//'`
12210 shift
12211 libs="$*"
12212 echo "libs = $libs" >&4
12213 ;;
12214 esac
3659ebf1
JH
12215;;
12216esac
12217
b4eb6b3d
JH
12218
12219: see if shmctl exists
12220set shmctl d_shmctl
12221eval $inlibc
12222
12223: see if shmget exists
12224set shmget d_shmget
12225eval $inlibc
12226
12227: see if shmat exists
12228set shmat d_shmat
12229eval $inlibc
12230: see what shmat returns
12231case "$d_shmat" in
12232"$define")
12233 $cat >shmat.c <<'END'
12234#include <sys/shm.h>
12235void *shmat();
12236END
12237 if $cc $ccflags -c shmat.c >/dev/null 2>&1; then
12238 shmattype='void *'
12239 else
12240 shmattype='char *'
12241 fi
12242 echo "and it returns ($shmattype)." >&4
12243 : see if a prototype for shmat is available
12244 xxx=`./findhdr sys/shm.h`
12245 $cppstdin $cppflags $cppminus < $xxx > shmat.c 2>/dev/null
12246 if $contains 'shmat.*(' shmat.c >/dev/null 2>&1; then
12247 val="$define"
12248 else
12249 val="$undef"
12250 fi
12251 $rm -f shmat.[co]
12252 ;;
12253*)
12254 val="$undef"
12255 ;;
12256esac
12257set d_shmatprototype
12258eval $setvar
12259
12260: see if shmdt exists
12261set shmdt d_shmdt
12262eval $inlibc
12263
12264: see how much of the 'shm*(2)' library is present.
12265h_shm=true
12266echo " "
12267case "$d_shmctl$d_shmget$d_shmat$d_shmdt" in
12268*"$undef"*) h_shm=false;;
12269esac
12270case "$osname" in
12271freebsd)
12272 case "`ipcs 2>&1`" in
12273 "SVID shared memory"*"not configured"*)
12274 echo "Your $osname does not have the shm*(2) configured." >&4
12275 h_shm=false
12276 val="$undef"
12277 set shmctl d_shmctl
12278 evat $setvar
12279 set shmget d_shmget
12280 evat $setvar
12281 set shmat d_shmat
12282 evat $setvar
12283 set shmdt d_shmdt
12284 evat $setvar
12285 ;;
12286 esac
12287 ;;
12288esac
12289: we could also check for sys/ipc.h ...
12290if $h_shm && $test `./findhdr sys/shm.h`; then
12291 echo "You have the full shm*(2) library." >&4
12292 val="$define"
12293else
12294 echo "You don't have the full shm*(2) library." >&4
12295 val="$undef"
12296fi
12297set d_shm
12298eval $setvar
12299
12300echo " "
12301: see if we have sigaction
12302if set sigaction val -f d_sigaction; eval $csym; $val; then
12303 echo 'sigaction() found.' >&4
12304 $cat > try.c <<'EOP'
12305#include <stdio.h>
12306#include <sys/types.h>
12307#include <signal.h>
12308int main()
12309{
12310 struct sigaction act, oact;
12311 act.sa_flags = 0;
12312 oact.sa_handler = 0;
12313 /* so that act and oact are used */
12314 exit(act.sa_flags == 0 && oact.sa_handler == 0);
12315}
12316EOP
12317 set try
12318 if eval $compile_ok; then
12319 val="$define"
12320 else
12321 echo "But you don't seem to have a useable struct sigaction." >&4
12322 val="$undef"
12323 fi
12324else
12325 echo 'sigaction NOT found.' >&4
12326 val="$undef"
12327fi
12328set d_sigaction; eval $setvar
12329$rm -f try try$_o try.c
12330
983dbef6
JH
12331: see if sigprocmask exists
12332set sigprocmask d_sigprocmask
12333eval $inlibc
12334
b4eb6b3d
JH
12335: see if sigsetjmp exists
12336echo " "
12337case "$d_sigsetjmp" in
12338'')
12339 $cat >try.c <<'EOP'
12340#include <setjmp.h>
12341sigjmp_buf env;
12342int set = 1;
12343int main()
12344{
12345 if (sigsetjmp(env,1))
12346 exit(set);
12347 set = 0;
12348 siglongjmp(env, 1);
12349 exit(1);
12350}
12351EOP
12352 set try
12353 if eval $compile; then
5440bc8e 12354 if $run ./try >/dev/null 2>&1; then
b4eb6b3d
JH
12355 echo "POSIX sigsetjmp found." >&4
12356 val="$define"
12357 else
12358 $cat >&4 <<EOM
12359Uh-Oh! You have POSIX sigsetjmp and siglongjmp, but they do not work properly!!
12360I'll ignore them.
12361EOM
12362 val="$undef"
12363 fi
12364 else
12365 echo "sigsetjmp not found." >&4
12366 val="$undef"
12367 fi
12368 ;;
12369*) val="$d_sigsetjmp"
12370 case "$d_sigsetjmp" in
12371 $define) echo "POSIX sigsetjmp found." >&4;;
12372 $undef) echo "sigsetjmp not found." >&4;;
12373 esac
12374 ;;
12375esac
12376set d_sigsetjmp
12377eval $setvar
12378$rm -f try.c try
12379
49a78c82
JH
12380: see if sockatmark exists
12381set sockatmark d_sockatmark
12382eval $inlibc
12383
2ef53570
JH
12384: see if prototype for sockatmark is available
12385echo " "
12386set d_sockatmarkproto sockatmark $d_socket sys/socket.h
12387eval $hasproto
12388
b4eb6b3d
JH
12389: see if socks5_init exists
12390set socks5_init d_socks5_init
12391eval $inlibc
12392
eef837ea
JH
12393: see if prototype for setresgid is available
12394echo " "
12395set d_sresgproto setresgid $i_unistd unistd.h
12396eval $hasproto
12397
640374d0
JH
12398: see if prototype for setresuid is available
12399echo " "
12400set d_sresuproto setresuid $i_unistd unistd.h
12401eval $hasproto
12402
b4eb6b3d
JH
12403: see if sys/stat.h is available
12404set sys/stat.h i_sysstat
12405eval $inhdr
12406
12407
12408: see if stat knows about block sizes
12409echo " "
12410echo "Checking to see if your struct stat has st_blocks field..." >&4
12411set d_statblks stat st_blocks $i_sysstat sys/stat.h
12412eval $hasfield
12413
12414
12415: see if this is a sys/vfs.h system
12416set sys/vfs.h i_sysvfs
12417eval $inhdr
12418
12419
12420: see if this is a sys/statfs.h system
12421set sys/statfs.h i_sysstatfs
12422eval $inhdr
12423
12424
12425echo " "
12426echo "Checking to see if your system supports struct statfs..." >&4
12427set d_statfs_s statfs $i_systypes sys/types.h $i_sysparam sys/param.h $i_sysmount sys/mount.h $i_sysvfs sys/vfs.h $i_sysstatfs sys/statfs.h
12428eval $hasstruct
12429case "$d_statfs_s" in
12430"$define") echo "Yes, it does." ;;
12431*) echo "No, it doesn't." ;;
12432esac
12433
12434
12435
12436: see if struct statfs knows about f_flags
12437case "$d_statfs_s" in
12438define)
12439 echo " "
12440 echo "Checking to see if your struct statfs has f_flags field..." >&4
12441 set d_statfs_f_flags statfs f_flags $i_systypes sys/types.h $i_sysparam sys/param.h $i_sysmount sys/mount.h $i_sysvfs sys/vfs.h $i_sysstatfs sys/statfs.h
12442 eval $hasfield
12443 ;;
12444*) val="$undef"
12445 set d_statfs_f_flags
12446 eval $setvar
12447 ;;
12448esac
12449case "$d_statfs_f_flags" in
12450"$define") echo "Yes, it does." ;;
12451*) echo "No, it doesn't." ;;
12452esac
12453
12454: see if _ptr and _cnt from stdio act std
12455echo " "
80f36755
NC
12456
12457if $contains '_lbfsize' `./findhdr stdio.h` >/dev/null 2>&1 ; then
12458 echo "(Looks like you have stdio.h from BSD.)"
12459 case "$stdio_ptr" in
12460 '') stdio_ptr='((fp)->_p)'
12461 ptr_lval=$define
12462 ;;
12463 *) ptr_lval=$d_stdio_ptr_lval;;
12464 esac
12465 case "$stdio_cnt" in
12466 '') stdio_cnt='((fp)->_r)'
12467 cnt_lval=$define
12468 ;;
12469 *) cnt_lval=$d_stdio_cnt_lval;;
12470 esac
12471 case "$stdio_base" in
12472 '') stdio_base='((fp)->_ub._base ? (fp)->_ub._base : (fp)->_bf._base)';;
12473 esac
12474 case "$stdio_bufsiz" in
12475 '') stdio_bufsiz='((fp)->_ub._base ? (fp)->_ub._size : (fp)->_bf._size)';;
12476 esac
12477elif $contains '_IO_fpos_t' `./findhdr stdio.h` `./findhdr libio.h` >/dev/null 2>&1 ; then
b4eb6b3d
JH
12478 echo "(Looks like you have stdio.h from Linux.)"
12479 case "$stdio_ptr" in
12480 '') stdio_ptr='((fp)->_IO_read_ptr)'
12481 ptr_lval=$define
12482 ;;
12483 *) ptr_lval=$d_stdio_ptr_lval;;
12484 esac
12485 case "$stdio_cnt" in
12486 '') stdio_cnt='((fp)->_IO_read_end - (fp)->_IO_read_ptr)'
12487 cnt_lval=$undef
12488 ;;
12489 *) cnt_lval=$d_stdio_cnt_lval;;
12490 esac
12491 case "$stdio_base" in
12492 '') stdio_base='((fp)->_IO_read_base)';;
12493 esac
12494 case "$stdio_bufsiz" in
12495 '') stdio_bufsiz='((fp)->_IO_read_end - (fp)->_IO_read_base)';;
12496 esac
12497else
12498 case "$stdio_ptr" in
12499 '') stdio_ptr='((fp)->_ptr)'
12500 ptr_lval=$define
12501 ;;
12502 *) ptr_lval=$d_stdio_ptr_lval;;
12503 esac
12504 case "$stdio_cnt" in
12505 '') stdio_cnt='((fp)->_cnt)'
12506 cnt_lval=$define
12507 ;;
12508 *) cnt_lval=$d_stdio_cnt_lval;;
12509 esac
12510 case "$stdio_base" in
12511 '') stdio_base='((fp)->_base)';;
12512 esac
12513 case "$stdio_bufsiz" in
12514 '') stdio_bufsiz='((fp)->_cnt + (fp)->_ptr - (fp)->_base)';;
12515 esac
12516fi
80f36755 12517
b4eb6b3d
JH
12518: test whether _ptr and _cnt really work
12519echo "Checking how std your stdio is..." >&4
12520$cat >try.c <<EOP
12521#include <stdio.h>
12522#define FILE_ptr(fp) $stdio_ptr
12523#define FILE_cnt(fp) $stdio_cnt
12524int main() {
12525 FILE *fp = fopen("try.c", "r");
12526 char c = getc(fp);
12527 if (
12528 18 <= FILE_cnt(fp) &&
12529 strncmp(FILE_ptr(fp), "include <stdio.h>\n", 18) == 0
12530 )
12531 exit(0);
12532 exit(1);
12533}
12534EOP
12535val="$undef"
12536set try
5440bc8e
JH
12537if eval $compile && $to try.c; then
12538 if $run ./try; then
b4eb6b3d
JH
12539 echo "Your stdio acts pretty std."
12540 val="$define"
12541 else
12542 echo "Your stdio isn't very std."
12543 fi
12544else
12545 echo "Your stdio doesn't appear very std."
12546fi
12547$rm -f try.c try
12548set d_stdstdio
12549eval $setvar
12550
12551: Can _ptr be used as an lvalue?
12552case "$d_stdstdio$ptr_lval" in
12553$define$define) val=$define ;;
12554*) val=$undef ;;
12555esac
12556set d_stdio_ptr_lval
12557eval $setvar
12558
12559: Can _cnt be used as an lvalue?
12560case "$d_stdstdio$cnt_lval" in
12561$define$define) val=$define ;;
12562*) val=$undef ;;
12563esac
12564set d_stdio_cnt_lval
12565eval $setvar
12566
a7ffa9b9
NC
12567
12568: test whether setting _ptr sets _cnt as a side effect
12569d_stdio_ptr_lval_sets_cnt="$undef"
12570d_stdio_ptr_lval_nochange_cnt="$undef"
12571case "$d_stdio_ptr_lval$d_stdstdio" in
12572$define$define)
12573 echo "Checking to see what happens if we set the stdio ptr..." >&4
12574$cat >try.c <<EOP
12575#include <stdio.h>
12576/* Can we scream? */
12577/* Eat dust sed :-) */
c1d9e6fa 12578/* In the buffer space, no one can hear you scream. */
0bbfc344
JH
12579#define FILE_ptr(fp) $stdio_ptr
12580#define FILE_cnt(fp) $stdio_cnt
c1d9e6fa 12581#include <sys/types.h>
a7ffa9b9
NC
12582int main() {
12583 FILE *fp = fopen("try.c", "r");
c1d9e6fa 12584 int c;
a7ffa9b9
NC
12585 char *ptr;
12586 size_t cnt;
c1d9e6fa
JH
12587 if (!fp) {
12588 puts("Fail even to read");
12589 exit(1);
12590 }
12591 c = getc(fp); /* Read away the first # */
12592 if (c == EOF) {
12593 puts("Fail even to read");
12594 exit(1);
12595 }
a7ffa9b9
NC
12596 if (!(
12597 18 <= FILE_cnt(fp) &&
12598 strncmp(FILE_ptr(fp), "include <stdio.h>\n", 18) == 0
12599 )) {
12600 puts("Fail even to read");
12601 exit (1);
12602 }
c1d9e6fa
JH
12603 ptr = (char*) FILE_ptr(fp);
12604 cnt = (size_t)FILE_cnt(fp);
a7ffa9b9 12605
c1d9e6fa 12606 FILE_ptr(fp) += 42;
a7ffa9b9 12607
c1d9e6fa 12608 if ((char*)FILE_ptr(fp) != (ptr + 42)) {
a7ffa9b9
NC
12609 printf("Fail ptr check %p != %p", FILE_ptr(fp), (ptr + 42));
12610 exit (1);
12611 }
12612 if (FILE_cnt(fp) <= 20) {
12613 printf ("Fail (<20 chars to test)");
12614 exit (1);
12615 }
12616 if (strncmp(FILE_ptr(fp), "Eat dust sed :-) */\n", 20) != 0) {
12617 puts("Fail compare");
12618 exit (1);
12619 }
12620 if (cnt == FILE_cnt(fp)) {
12621 puts("Pass_unchanged");
12622 exit (0);
12623 }
12624 if (FILE_cnt(fp) == (cnt - 42)) {
12625 puts("Pass_changed");
12626 exit (0);
12627 }
12628 printf("Fail count was %d now %d\n", cnt, FILE_cnt(fp));
12629 return 1;
12630
12631}
12632EOP
12633 set try
5440bc8e
JH
12634 if eval $compile && $to try.c; then
12635 case `$run ./try` in
a7ffa9b9 12636 Pass_changed)
2e32dcfe 12637 echo "Increasing ptr in your stdio decreases cnt by the same amount. Good." >&4
a7ffa9b9
NC
12638 d_stdio_ptr_lval_sets_cnt="$define" ;;
12639 Pass_unchanged)
12640 echo "Increasing ptr in your stdio leaves cnt unchanged. Good." >&4
12641 d_stdio_ptr_lval_nochange_cnt="$define" ;;
12642 Fail*)
12643 echo "Increasing ptr in your stdio didn't do exactly what I expected. We'll not be doing that then." >&4 ;;
12644 *)
12645 echo "It appears attempting to set ptr in your stdio is a bad plan." >&4 ;;
12646 esac
12647 else
12648 echo "It seems we can't set ptr in your stdio. Nevermind." >&4
12649 fi
12650 $rm -f try.c try
12651 ;;
12652esac
12653
b4eb6b3d
JH
12654: see if _base is also standard
12655val="$undef"
12656case "$d_stdstdio" in
12657$define)
12658 $cat >try.c <<EOP
12659#include <stdio.h>
12660#define FILE_base(fp) $stdio_base
12661#define FILE_bufsiz(fp) $stdio_bufsiz
12662int main() {
12663 FILE *fp = fopen("try.c", "r");
12664 char c = getc(fp);
12665 if (
12666 19 <= FILE_bufsiz(fp) &&
12667 strncmp(FILE_base(fp), "#include <stdio.h>\n", 19) == 0
12668 )
12669 exit(0);
12670 exit(1);
12671}
12672EOP
12673 set try
5440bc8e
JH
12674 if eval $compile && $to try.c; then
12675 if $run ./try; then
b4eb6b3d
JH
12676 echo "And its _base field acts std."
12677 val="$define"
12678 else
12679 echo "But its _base field isn't std."
12680 fi
12681 else
12682 echo "However, it seems to be lacking the _base field."
12683 fi
12684 $rm -f try.c try
12685 ;;
12686esac
12687set d_stdiobase
12688eval $setvar
12689
12690$cat >&4 <<EOM
12691Checking how to access stdio streams by file descriptor number...
12692EOM
12693case "$stdio_stream_array" in
12694'') $cat >try.c <<EOCP
12695#include <stdio.h>
12696int main() {
12697 if (&STDIO_STREAM_ARRAY[fileno(stdin)] == stdin)
12698 printf("yes\n");
12699}
12700EOCP
12701 for s in _iob __iob __sF
12702 do
12703 set try -DSTDIO_STREAM_ARRAY=$s
12704 if eval $compile; then
5440bc8e 12705 case "`$run ./try`" in
b4eb6b3d
JH
12706 yes) stdio_stream_array=$s; break ;;
12707 esac
12708 fi
12709 done
12710 $rm -f try.* try$exe_ext
12711esac
12712case "$stdio_stream_array" in
12713'') $cat >&4 <<EOM
12714I can't figure out how to access stdio streams by file descriptor number.
12715EOM
12716 d_stdio_stream_array="$undef"
12717 ;;
12718*) $cat >&4 <<EOM
12719You can access stdio streams by file descriptor number by the $stdio_stream_array array.
12720EOM
12721 d_stdio_stream_array="$define"
12722 ;;
12723esac
12724
12725: see if strcoll exists
12726set strcoll d_strcoll
12727eval $inlibc
12728
12729: check for structure copying
12730echo " "
12731echo "Checking to see if your C compiler can copy structs..." >&4
12732$cat >try.c <<'EOCP'
12733int main()
12734{
12735 struct blurfl {
12736 int dyick;
12737 } foo, bar;
12738
12739 foo = bar;
12740}
12741EOCP
12742if $cc -c try.c >/dev/null 2>&1 ; then
12743 val="$define"
12744 echo "Yup, it can."
12745else
12746 val="$undef"
12747 echo "Nope, it can't."
12748fi
12749set d_strctcpy
12750eval $setvar
12751$rm -f try.*
12752
12753: see if strerror and/or sys_errlist[] exist
12754echo " "
12755if test "X$d_strerror" = X -o "X$d_syserrlst" = X; then
12756 if set strerror val -f d_strerror; eval $csym; $val; then
12757 echo 'strerror() found.' >&4
12758 d_strerror="$define"
12759 d_strerrm='strerror(e)'
12760 if set sys_errlist val -a d_syserrlst; eval $csym; $val; then
12761 echo "(You also have sys_errlist[], so we could roll our own strerror.)"
12762 d_syserrlst="$define"
12763 else
12764 echo "(Since you don't have sys_errlist[], sterror() is welcome.)"
12765 d_syserrlst="$undef"
12766 fi
12767 elif xxx=`./findhdr string.h`; test "$xxx" || xxx=`./findhdr strings.h`; \
12768 $contains '#[ ]*define.*strerror' "$xxx" >/dev/null 2>&1; then
12769 echo 'strerror() found in string header.' >&4
12770 d_strerror="$define"
12771 d_strerrm='strerror(e)'
12772 if set sys_errlist val -a d_syserrlst; eval $csym; $val; then
12773 echo "(Most probably, strerror() uses sys_errlist[] for descriptions.)"
12774 d_syserrlst="$define"
12775 else
12776 echo "(You don't appear to have any sys_errlist[], how can this be?)"
12777 d_syserrlst="$undef"
12778 fi
12779 elif set sys_errlist val -a d_syserrlst; eval $csym; $val; then
12780 echo "strerror() not found, but you have sys_errlist[] so we'll use that." >&4
12781 d_strerror="$undef"
12782 d_syserrlst="$define"
12783 d_strerrm='((e)<0||(e)>=sys_nerr?"unknown":sys_errlist[e])'
12784 else
12785 echo 'strerror() and sys_errlist[] NOT found.' >&4
12786 d_strerror="$undef"
12787 d_syserrlst="$undef"
12788 d_strerrm='"unknown"'
12789 fi
12790fi
12791
b3c85772
JH
12792: see if strftime exists
12793set strftime d_strftime
12794eval $inlibc
12795
b4eb6b3d
JH
12796: see if strtod exists
12797set strtod d_strtod
12798eval $inlibc
12799
12800: see if strtol exists
12801set strtol d_strtol
12802eval $inlibc
12803
12804: see if strtold exists
12805set strtold d_strtold
12806eval $inlibc
12807
12808: see if strtoll exists
12809set strtoll d_strtoll
12810eval $inlibc
12811
12812case "$d_longlong-$d_strtoll" in
12813"$define-$define")
12814 $cat <<EOM
12815Checking whether your strtoll() works okay...
12816EOM
12817 $cat >try.c <<'EOCP'
12818#include <errno.h>
12819#ifdef __hpux
12820#define strtoll __strtoll
12821#endif
e75931a7
YST
12822#ifdef __EMX__
12823#define strtoll _strtoll
12824#endif
b4eb6b3d
JH
12825#include <stdio.h>
12826extern long long int strtoll(char *s, char **, int);
12827static int bad = 0;
12828int check(char *s, long long ell, int een) {
12829 long long gll;
12830 errno = 0;
12831 gll = strtoll(s, 0, 10);
12832 if (!((gll == ell) && (errno == een)))
12833 bad++;
12834}
12835int main() {
12836 check(" 1", 1LL, 0);
12837 check(" 0", 0LL, 0);
12838 check("-1", -1LL, 0);
12839 check("-9223372036854775808", -9223372036854775808LL, 0);
12840 check("-9223372036854775808", -9223372036854775808LL, 0);
12841 check(" 9223372036854775807", 9223372036854775807LL, 0);
12842 check("-9223372036854775808", -9223372036854775808LL, 0);
12843 check(" 9223372036854775808", 9223372036854775807LL, ERANGE);
12844 check("-9223372036854775809", -9223372036854775808LL, ERANGE);
12845 if (!bad)
12846 printf("ok\n");
12847}
12848EOCP
12849 set try
12850 if eval $compile; then
5440bc8e 12851 yyy=`$run ./try`
e75931a7 12852 case "$yyy" in
b4eb6b3d
JH
12853 ok) echo "Your strtoll() seems to be working okay." ;;
12854 *) cat <<EOM >&4
12855Your strtoll() doesn't seem to be working okay.
12856EOM
12857 d_strtoll="$undef"
12858 ;;
69eadf66 12859 esac
e75931a7
YST
12860 else
12861 echo "(I can't seem to compile the test program--assuming it doesn't)"
12862 d_strtoll="$undef"
b4eb6b3d
JH
12863 fi
12864 ;;
12865esac
12866
28e5dec8
JH
12867: see if strtoq exists
12868set strtoq d_strtoq
12869eval $inlibc
12870
b4eb6b3d
JH
12871: see if strtoul exists
12872set strtoul d_strtoul
12873eval $inlibc
12874
d0e6d399
NC
12875case "$d_strtoul" in
12876"$define")
12877 $cat <<EOM
12878Checking whether your strtoul() works okay...
12879EOM
12880 $cat >try.c <<'EOCP'
12881#include <errno.h>
12882#include <stdio.h>
12883extern unsigned long int strtoul(char *s, char **, int);
12884static int bad = 0;
12885void check(char *s, unsigned long eul, int een) {
12886 unsigned long gul;
12887 errno = 0;
12888 gul = strtoul(s, 0, 10);
12889 if (!((gul == eul) && (errno == een)))
12890 bad++;
12891}
12892int main() {
12893 check(" 1", 1L, 0);
12894 check(" 0", 0L, 0);
12895EOCP
12896 case "$longsize" in
12897 8)
12898 $cat >>try.c <<'EOCP'
09c0d2c4
JH
12899 check("18446744073709551615", 18446744073709551615UL, 0);
12900 check("18446744073709551616", 18446744073709551615UL, ERANGE);
c11ecd62 12901#if 0 /* strtoul() for /^-/ strings is undefined. */
09c0d2c4 12902 check("-1", 18446744073709551615UL, 0);
d0e6d399
NC
12903 check("-18446744073709551614", 2, 0);
12904 check("-18446744073709551615", 1, 0);
09c0d2c4
JH
12905 check("-18446744073709551616", 18446744073709551615UL, ERANGE);
12906 check("-18446744073709551617", 18446744073709551615UL, ERANGE);
c11ecd62 12907#endif
d0e6d399
NC
12908EOCP
12909 ;;
12910 4)
12911 $cat >>try.c <<'EOCP'
12912 check("4294967295", 4294967295UL, 0);
12913 check("4294967296", 4294967295UL, ERANGE);
c11ecd62 12914#if 0 /* strtoul() for /^-/ strings is undefined. */
d0e6d399
NC
12915 check("-1", 4294967295UL, 0);
12916 check("-4294967294", 2, 0);
12917 check("-4294967295", 1, 0);
12918 check("-4294967296", 4294967295UL, ERANGE);
12919 check("-4294967297", 4294967295UL, ERANGE);
c11ecd62 12920#endif
d0e6d399
NC
12921EOCP
12922 ;;
12923 *)
12924: Should we write these tests to be more portable by sprintf-ing
12925: ~0 and then manipulating that char string as input for strtol?
12926 ;;
12927 esac
12928 $cat >>try.c <<'EOCP'
12929 if (!bad)
12930 printf("ok\n");
12931 return 0;
12932}
12933EOCP
12934 set try
12935 if eval $compile; then
5440bc8e 12936 case "`$run ./try`" in
d0e6d399
NC
12937 ok) echo "Your strtoul() seems to be working okay." ;;
12938 *) cat <<EOM >&4
12939Your strtoul() doesn't seem to be working okay.
12940EOM
12941 d_strtoul="$undef"
12942 ;;
12943 esac
12944 fi
12945 ;;
12946esac
12947
b4eb6b3d
JH
12948: see if strtoull exists
12949set strtoull d_strtoull
12950eval $inlibc
12951
12952case "$d_longlong-$d_strtoull" in
12953"$define-$define")
12954 $cat <<EOM
12955Checking whether your strtoull() works okay...
12956EOM
12957 $cat >try.c <<'EOCP'
12958#include <errno.h>
12959#ifdef __hpux
12960#define strtoull __strtoull
12961#endif
12962#include <stdio.h>
12963extern unsigned long long int strtoull(char *s, char **, int);
12964static int bad = 0;
12965int check(char *s, long long eull, int een) {
12966 long long gull;
12967 errno = 0;
12968 gull = strtoull(s, 0, 10);
12969 if (!((gull == eull) && (errno == een)))
12970 bad++;
12971}
12972int main() {
d0e6d399
NC
12973 check(" 1", 1LL, 0);
12974 check(" 0", 0LL, 0);
12975 check("18446744073709551615", 18446744073709551615ULL, 0);
12976 check("18446744073709551616", 18446744073709551615ULL, ERANGE);
c11ecd62 12977#if 0 /* strtoull() for /^-/ strings is undefined. */
d0e6d399
NC
12978 check("-1", 18446744073709551615ULL, 0);
12979 check("-18446744073709551614", 2LL, 0);
12980 check("-18446744073709551615", 1LL, 0);
12981 check("-18446744073709551616", 18446744073709551615ULL, ERANGE);
12982 check("-18446744073709551617", 18446744073709551615ULL, ERANGE);
c11ecd62 12983#endif
b4eb6b3d
JH
12984 if (!bad)
12985 printf("ok\n");
12986}
12987EOCP
12988 set try
12989 if eval $compile; then
5440bc8e 12990 case "`$run ./try`" in
b4eb6b3d
JH
12991 ok) echo "Your strtoull() seems to be working okay." ;;
12992 *) cat <<EOM >&4
12993Your strtoull() doesn't seem to be working okay.
12994EOM
12995 d_strtoull="$undef"
12996 ;;
12997 esac
12998 fi
12999 ;;
13000esac
13001
13002: see if strtouq exists
13003set strtouq d_strtouq
13004eval $inlibc
13005
d0e6d399
NC
13006case "$d_strtouq" in
13007"$define")
13008 $cat <<EOM
13009Checking whether your strtouq() works okay...
13010EOM
13011 $cat >try.c <<'EOCP'
13012#include <errno.h>
13013#include <stdio.h>
13014extern unsigned long long int strtouq(char *s, char **, int);
13015static int bad = 0;
13016void check(char *s, unsigned long long eull, int een) {
13017 unsigned long long gull;
13018 errno = 0;
13019 gull = strtouq(s, 0, 10);
13020 if (!((gull == eull) && (errno == een)))
13021 bad++;
13022}
13023int main() {
13024 check(" 1", 1LL, 0);
13025 check(" 0", 0LL, 0);
13026 check("18446744073709551615", 18446744073709551615ULL, 0);
13027 check("18446744073709551616", 18446744073709551615ULL, ERANGE);
c11ecd62 13028#if 0 /* strtouq() for /^-/ strings is undefined. */
d0e6d399
NC
13029 check("-1", 18446744073709551615ULL, 0);
13030 check("-18446744073709551614", 2LL, 0);
13031 check("-18446744073709551615", 1LL, 0);
13032 check("-18446744073709551616", 18446744073709551615ULL, ERANGE);
13033 check("-18446744073709551617", 18446744073709551615ULL, ERANGE);
c11ecd62 13034#endif
d0e6d399
NC
13035 if (!bad)
13036 printf("ok\n");
13037 return 0;
13038}
13039EOCP
13040 set try
13041 if eval $compile; then
5440bc8e 13042 case "`$run ./try`" in
d0e6d399
NC
13043 ok) echo "Your strtouq() seems to be working okay." ;;
13044 *) cat <<EOM >&4
13045Your strtouq() doesn't seem to be working okay.
13046EOM
13047 d_strtouq="$undef"
13048 ;;
13049 esac
13050 fi
13051 ;;
13052esac
13053
b4eb6b3d
JH
13054: see if strxfrm exists
13055set strxfrm d_strxfrm
13056eval $inlibc
13057
13058: see if symlink exists
13059set symlink d_symlink
13060eval $inlibc
13061
13062: see if syscall exists
13063set syscall d_syscall
13064eval $inlibc
13065
2ef53570
JH
13066: see if prototype for syscall is available
13067echo " "
13068set d_syscallproto syscall $i_unistd unistd.h
13069eval $hasproto
13070
b4eb6b3d
JH
13071: see if sysconf exists
13072set sysconf d_sysconf
13073eval $inlibc
13074
13075: see if system exists
13076set system d_system
13077eval $inlibc
13078
13079: see if tcgetpgrp exists
13080set tcgetpgrp d_tcgetpgrp
13081eval $inlibc
13082
13083: see if tcsetpgrp exists
13084set tcsetpgrp d_tcsetpgrp
13085eval $inlibc
13086
13087: see if prototype for telldir is available
13088echo " "
13089set d_telldirproto telldir $i_systypes sys/types.h $i_dirent dirent.h
13090eval $hasproto
13091
13092: see if this is a sys/times.h system
13093set sys/times.h i_systimes
13094eval $inhdr
13095
13096: see if times exists
13097echo " "
13098if set times val -f d_times; eval $csym; $val; then
13099 echo 'times() found.' >&4
13100 d_times="$define"
13101 inc=''
13102 case "$i_systimes" in
13103 "$define") inc='sys/times.h';;
13104 esac
13105 rp="What is the type returned by times() on this system?"
13106 set clock_t clocktype long stdio.h sys/types.h $inc
13107 eval $typedef_ask
13108else
13109 echo 'times() NOT found, hope that will do.' >&4
13110 d_times="$undef"
13111 clocktype='int'
13112fi
13113
13114: see if truncate exists
13115set truncate d_truncate
13116eval $inlibc
13117
13118: see if tzname[] exists
13119echo " "
13120if set tzname val -a d_tzname; eval $csym; $val; then
13121 val="$define"
13122 echo 'tzname[] found.' >&4
13123else
13124 val="$undef"
13125 echo 'tzname[] NOT found.' >&4
13126fi
13127set d_tzname
13128eval $setvar
13129
4e0554ec
JH
13130case "$osname" in
13131next|rhapsody|darwin) multiarch="$define" ;;
13132esac
13133case "$multiarch" in
13134''|[nN]*) multiarch="$undef" ;;
13135esac
13136
13137: check for ordering of bytes in a long
13138echo " "
5440bc8e 13139case "$usecrosscompile$multiarch" in
4e0554ec
JH
13140*$define*)
13141 $cat <<EOM
13142You seem to be either cross-compiling or doing a multiarchitecture build,
13143skipping the byteorder check.
13144
13145EOM
5440bc8e 13146 byteorder='ffff'
4e0554ec
JH
13147 ;;
13148*)
13149 case "$byteorder" in
13150 '')
13151 $cat <<'EOM'
13152In the following, larger digits indicate more significance. A big-endian
13153machine like a Pyramid or a Motorola 680?0 chip will come out to 4321. A
13154little-endian machine like a Vax or an Intel 80?86 chip would be 1234. Other
13155machines may have weird orders like 3412. A Cray will report 87654321,
13156an Alpha will report 12345678. If the test program works the default is
13157probably right.
13158I'm now running the test program...
13159EOM
13160 $cat >try.c <<'EOCP'
13161#include <stdio.h>
13162int main()
13163{
13164 int i;
13165 union {
13166 unsigned long l;
13167 char c[sizeof(long)];
13168 } u;
13169
13170 if (sizeof(long) > 4)
13171 u.l = (0x08070605L << 32) | 0x04030201L;
13172 else
13173 u.l = 0x04030201L;
13174 for (i = 0; i < sizeof(long); i++)
13175 printf("%c", u.c[i]+'0');
13176 printf("\n");
13177 exit(0);
13178}
13179EOCP
13180 xxx_prompt=y
13181 set try
13182 if eval $compile && ./try > /dev/null; then
5440bc8e 13183 dflt=`$run ./try`
4e0554ec
JH
13184 case "$dflt" in
13185 [1-4][1-4][1-4][1-4]|12345678|87654321)
13186 echo "(The test program ran ok.)"
13187 echo "byteorder=$dflt"
13188 xxx_prompt=n
13189 ;;
13190 ????|????????) echo "(The test program ran ok.)" ;;
13191 *) echo "(The test program didn't run right for some reason.)" ;;
13192 esac
13193 else
13194 dflt='4321'
13195 cat <<'EOM'
13196(I can't seem to compile the test program. Guessing big-endian...)
13197EOM
13198 fi
13199 case "$xxx_prompt" in
13200 y)
13201 rp="What is the order of bytes in a long?"
13202 . ./myread
13203 byteorder="$ans"
13204 ;;
13205 *) byteorder=$dflt
13206 ;;
13207 esac
13208 ;;
13209 esac
13210 $rm -f try.c try
13211 ;;
13212esac
13213
13214
13215$cat <<EOM
13216
13217Checking to see whether you can access character data unalignedly...
13218EOM
13219$cat >try.c <<EOCP
13220#include <stdio.h>
13221#define U32 $u32type
13222#define BYTEORDER $byteorder
13223int main() {
13224#if BYTEORDER == 0x1234 || BYTEORDER == 0x4321
13225 U8 buf[] = "\0\0\0\1\0\0\0\0";
13226 U32 *up;
13227 int i;
13228
13229 if (sizeof(U32) != 4) {
13230 printf("sizeof(U32) is not 4, but %d\n", sizeof(U32));
13231 exit(1);
13232 }
13233
13234 fflush(stdout);
13235
13236 for (i = 0; i < 4; i++) {
13237 up = (U32*)(buf + i);
13238 if (! ((*up == 1 << (8*i)) || /* big-endian */
13239 (*up == 1 << (8*(3-i))) /* little-endian */
13240 )
13241 )
13242 {
13243 printf("read failed (%x)\n", *up);
13244 exit(2);
13245 }
13246 }
13247
13248 /* write test */
13249 for (i = 0; i < 4; i++) {
13250 up = (U32*)(buf + i);
13251 *up = 0xBeef;
13252 if (*up != 0xBeef) {
13253 printf("write failed (%x)\n", *up);
13254 exit(3);
13255 }
13256 }
13257
13258 exit(0);
13259#else
13260 printf("1\n");
13261 exit(1);
13262#endif
13263 return 0;
13264}
13265EOCP
13266set try
13267if eval $compile_ok; then
5440bc8e
JH
13268 echo "(Testing for character data alignment may dump core.)" >&4
13269 $run ./try 2>&1 >/dev/null
4e0554ec
JH
13270 case "$?" in
13271 0) cat >&4 <<EOM
13272You can access character data pretty unalignedly.
13273EOM
13274 d_u32align="$undef"
13275 ;;
13276 *) cat >&4 <<EOM
13277It seems that you must access character data in an aligned manner.
13278EOM
13279 d_u32align="$define"
13280 ;;
13281 esac
13282 $rm -f core core.try.* try.core
13283else
13284 rp='Can you access character data at unaligned addresses?'
13285 dflt='n'
13286 . ./myread
13287 case "$ans" in
13288 [yY]*) d_u32align="$undef" ;;
13289 *) d_u32align="$define" ;;
13290 esac
13291fi
13292
13293: see if ualarm exists
13294set ualarm d_ualarm
13295eval $inlibc
13296
b4eb6b3d
JH
13297: see if umask exists
13298set umask d_umask
13299eval $inlibc
13300
4e0554ec
JH
13301: see if usleep exists
13302set usleep d_usleep
13303eval $inlibc
13304
2ef53570
JH
13305: see if prototype for usleep is available
13306echo " "
13307set d_usleepproto usleep $i_unistd unistd.h
13308eval $hasproto
13309
b4eb6b3d
JH
13310: see if ustat exists
13311set ustat d_ustat
13312eval $inlibc
13313
13314: backward compatibility for d_hvfork
13315if test X$d_hvfork != X; then
13316 d_vfork="$d_hvfork"
13317 d_hvfork=''
13318fi
13319: see if there is a vfork
13320val=''
13321set vfork val
13322eval $inlibc
13323
13324: Ok, but do we want to use it. vfork is reportedly unreliable in
13325: perl on Solaris 2.x, and probably elsewhere.
13326case "$val" in
13327$define)
13328 echo " "
13329 case "$usevfork" in
13330 false) dflt='n';;
13331 *) dflt='y';;
13332 esac
13333 cat <<'EOM'
13334
13335Perl can only use a vfork() that doesn't suffer from strict
13336restrictions on calling functions or modifying global data in
13337the child. For example, glibc-2.1 contains such a vfork()
13338that is unsuitable. If your system provides a proper fork()
13339call, chances are that you do NOT want perl to use vfork().
13340
13341EOM
13342 rp="Do you still want to use vfork()?"
13343 . ./myread
13344 case "$ans" in
13345 y|Y) ;;
13346 *)
13347 echo "Ok, we won't use vfork()."
13348 val="$undef"
13349 ;;
13350 esac
13351 ;;
13352esac
13353set d_vfork
13354eval $setvar
13355case "$d_vfork" in
13356$define) usevfork='true';;
13357*) usevfork='false';;
13358esac
13359
13360: see if this is an sysdir system
13361set sys/dir.h i_sysdir
13362eval $inhdr
13363
13364: see if this is an sysndir system
13365set sys/ndir.h i_sysndir
13366eval $inhdr
13367
13368: see if closedir exists
13369set closedir d_closedir
13370eval $inlibc
13371
13372case "$d_closedir" in
13373"$define")
13374 echo " "
13375 echo "Checking whether closedir() returns a status..." >&4
5440bc8e 13376 cat > try.c <<EOM
b4eb6b3d
JH
13377#$i_dirent I_DIRENT /**/
13378#$i_sysdir I_SYS_DIR /**/
13379#$i_sysndir I_SYS_NDIR /**/
13380#$i_systypes I_SYS_TYPES /**/
13381
13382#if defined(I_SYS_TYPES)
13383#include <sys/types.h>
13384#endif
13385#if defined(I_DIRENT)
13386#include <dirent.h>
13387#if defined(NeXT) && defined(I_SYS_DIR) /* NeXT needs dirent + sys/dir.h */
13388#include <sys/dir.h>
13389#endif
13390#else
13391#ifdef I_SYS_NDIR
13392#include <sys/ndir.h>
13393#else
13394#ifdef I_SYS_DIR
13395#ifdef hp9000s500
13396#include <ndir.h> /* may be wrong in the future */
13397#else
13398#include <sys/dir.h>
13399#endif
13400#endif
13401#endif
13402#endif
13403int main() { return closedir(opendir(".")); }
13404EOM
5440bc8e 13405 set try
b4eb6b3d 13406 if eval $compile_ok; then
5440bc8e 13407 if $run ./try > /dev/null 2>&1 ; then
b4eb6b3d
JH
13408 echo "Yes, it does."
13409 val="$undef"
13410 else
13411 echo "No, it doesn't."
13412 val="$define"
13413 fi
13414 else
13415 echo "(I can't seem to compile the test program--assuming it doesn't)"
13416 val="$define"
13417 fi
13418 ;;
13419*)
13420 val="$undef";
13421 ;;
13422esac
13423set d_void_closedir
13424eval $setvar
5440bc8e 13425$rm -f try try.*
b4eb6b3d
JH
13426: see if there is a wait4
13427set wait4 d_wait4
13428eval $inlibc
13429
13430: see if waitpid exists
13431set waitpid d_waitpid
13432eval $inlibc
13433
13434: see if wcstombs exists
13435set wcstombs d_wcstombs
13436eval $inlibc
13437
13438: see if wctomb exists
13439set wctomb d_wctomb
13440eval $inlibc
13441
4e0554ec
JH
13442: see if writev exists
13443set writev d_writev
13444eval $inlibc
13445
b4eb6b3d
JH
13446: preserve RCS keywords in files with variable substitution, grrr
13447Date='$Date'
13448Id='$Id'
13449Log='$Log'
13450RCSfile='$RCSfile'
13451Revision='$Revision'
13452
b4eb6b3d
JH
13453: check for alignment requirements
13454echo " "
5440bc8e 13455case "$usecrosscompile$multiarch" in
b4eb6b3d
JH
13456*$define*)
13457 $cat <<EOM
13458You seem to be either cross-compiling or doing a multiarchitecture build,
13459skipping the memory alignment check.
13460
13461EOM
13462 case "$alignbytes" in
13463 '') alignbytes=8 ;;
13464 esac
13465 ;;
13466*)
13467 case "$alignbytes" in
13468 '') echo "Checking alignment constraints..." >&4
13469 if $test "X$uselongdouble" = Xdefine -a "X$d_longdbl" = Xdefine; then
13470 $cat >try.c <<'EOCP'
13471typedef long double NV;
13472EOCP
13473 else
13474 $cat >try.c <<'EOCP'
13475typedef double NV;
13476EOCP
13477 fi
13478 $cat >>try.c <<'EOCP'
13479#include <stdio.h>
13480struct foobar {
13481 char foo;
13482 NV bar;
13483} try_algn;
13484int main()
13485{
13486 printf("%d\n", (int)((char *)&try_algn.bar - (char *)&try_algn.foo));
13487 return(0);
13488}
13489EOCP
13490 set try
13491 if eval $compile_ok; then
5440bc8e 13492 dflt=`$run ./try`
b4eb6b3d
JH
13493 else
13494 dflt='8'
13495 echo "(I can't seem to compile the test program...)"
13496 fi
13497 ;;
13498 *) dflt="$alignbytes"
13499 ;;
13500 esac
13501 rp="Doubles must be aligned on a how-many-byte boundary?"
13502 . ./myread
13503 alignbytes="$ans"
13504 $rm -f try.c try
13505 ;;
13506esac
13507
13508
13509: set the base revision
13510baserev=5.0
13511
b4eb6b3d
JH
13512: how do we catenate cpp tokens here?
13513echo " "
13514echo "Checking to see how your cpp does stuff like catenate tokens..." >&4
13515$cat >cpp_stuff.c <<'EOCP'
13516#define RCAT(a,b)a/**/b
13517#define ACAT(a,b)a ## b
13518RCAT(Rei,ser)
13519ACAT(Cir,cus)
13520EOCP
13521$cppstdin $cppflags $cppminus <cpp_stuff.c >cpp_stuff.out 2>&1
13522if $contains 'Circus' cpp_stuff.out >/dev/null 2>&1; then
13523 echo "Oh! Smells like ANSI's been here." >&4
13524 echo "We can catify or stringify, separately or together!"
13525 cpp_stuff=42
13526elif $contains 'Reiser' cpp_stuff.out >/dev/null 2>&1; then
13527 echo "Ah, yes! The good old days!" >&4
13528 echo "However, in the good old days we don't know how to stringify and"
13529 echo "catify at the same time."
13530 cpp_stuff=1
13531else
13532 $cat >&4 <<EOM
13533Hmm, I don't seem to be able to catenate tokens with your cpp. You're going
13534to have to edit the values of CAT[2-5] in config.h...
13535EOM
13536 cpp_stuff="/* Help! How do we handle cpp_stuff? */*/"
13537fi
13538$rm -f cpp_stuff.*
13539
13540: see if this is a db.h system
13541set db.h i_db
13542eval $inhdr
13543
13544case "$i_db" in
13545$define)
13546 : Check db version.
13547 echo " "
13548 echo "Checking Berkeley DB version ..." >&4
13549 $cat >try.c <<EOCP
13550#$d_const HASCONST
13551#ifndef HASCONST
13552#define const
13553#endif
13554#include <sys/types.h>
13555#include <stdio.h>
13556#include <db.h>
640374d0 13557int main(int argc, char *argv[])
b4eb6b3d
JH
13558{
13559#ifdef DB_VERSION_MAJOR /* DB version >= 2 */
13560 int Major, Minor, Patch ;
13561 unsigned long Version ;
13562 (void)db_version(&Major, &Minor, &Patch) ;
640374d0
JH
13563 if (argc == 2) {
13564 printf("%d %d %d %d %d %d\n",
13565 DB_VERSION_MAJOR, DB_VERSION_MINOR, DB_VERSION_PATCH,
13566 Major, Minor, Patch);
13567 exit(0);
13568 }
13569 printf("You have Berkeley DB Version 2 or greater.\n");
b4eb6b3d
JH
13570
13571 printf("db.h is from Berkeley DB Version %d.%d.%d\n",
13572 DB_VERSION_MAJOR, DB_VERSION_MINOR, DB_VERSION_PATCH);
13573 printf("libdb is from Berkeley DB Version %d.%d.%d\n",
13574 Major, Minor, Patch) ;
13575
13576 /* check that db.h & libdb are compatible */
13577 if (DB_VERSION_MAJOR != Major || DB_VERSION_MINOR != Minor || DB_VERSION_PATCH != Patch) {
640374d0 13578 printf("db.h and libdb are incompatible.\n") ;
b4eb6b3d
JH
13579 exit(3);
13580 }
13581
640374d0 13582 printf("db.h and libdb are compatible.\n") ;
b4eb6b3d
JH
13583
13584 Version = DB_VERSION_MAJOR * 1000000 + DB_VERSION_MINOR * 1000
13585 + DB_VERSION_PATCH ;
13586
13587 /* needs to be >= 2.3.4 */
13588 if (Version < 2003004) {
13589 /* if (DB_VERSION_MAJOR == 2 && DB_VERSION_MINOR == 0 && DB_VERSION_PATCH < 5) { */
640374d0 13590 printf("Perl needs Berkeley DB 2.3.4 or greater.\n") ;
b4eb6b3d
JH
13591 exit(2);
13592 }
13593
13594 exit(0);
13595#else
13596#if defined(_DB_H_) && defined(BTREEMAGIC) && defined(HASHMAGIC)
640374d0
JH
13597 if (argc == 2) {
13598 printf("1 0 0\n");
13599 exit(0);
13600 }
13601 printf("You have Berkeley DB Version 1.\n");
b4eb6b3d
JH
13602 exit(0); /* DB version < 2: the coast is clear. */
13603#else
13604 exit(1); /* <db.h> not Berkeley DB? */
13605#endif
13606#endif
13607}
13608EOCP
13609 set try
5440bc8e 13610 if eval $compile_ok && $run ./try; then
b4eb6b3d 13611 echo 'Looks OK.' >&4
5440bc8e 13612 set `$run ./try 1`
640374d0
JH
13613 db_version_major=$1
13614 db_version_minor=$2
13615 db_version_patch=$3
b4eb6b3d
JH
13616 else
13617 echo "I can't use Berkeley DB with your <db.h>. I'll disable Berkeley DB." >&4
13618 i_db=$undef
13619 case " $libs " in
13620 *"-ldb "*)
13621 : Remove db from list of libraries to use
13622 echo "Removing unusable -ldb from library list" >&4
13623 set `echo X $libs | $sed -e 's/-ldb / /' -e 's/-ldb$//'`
13624 shift
13625 libs="$*"
13626 echo "libs = $libs" >&4
13627 ;;
13628 esac
13629 fi
13630 $rm -f try.*
13631 ;;
13632esac
13633
13634case "$i_db" in
13635define)
13636 : Check the return type needed for hash
13637 echo " "
13638 echo "Checking return type needed for hash for Berkeley DB ..." >&4
13639 $cat >try.c <<EOCP
13640#$d_const HASCONST
13641#ifndef HASCONST
13642#define const
13643#endif
13644#include <sys/types.h>
13645#include <db.h>
13646
13647#ifndef DB_VERSION_MAJOR
13648u_int32_t hash_cb (ptr, size)
13649const void *ptr;
13650size_t size;
13651{
13652}
13653HASHINFO info;
13654int main()
13655{
13656 info.hash = hash_cb;
13657}
13658#endif
13659EOCP
13660 if $cc $ccflags -c try.c >try.out 2>&1 ; then
13661 if $contains warning try.out >>/dev/null 2>&1 ; then
13662 db_hashtype='int'
13663 else
13664 db_hashtype='u_int32_t'
13665 fi
13666 else
13667 : XXX Maybe we should just give up here.
13668 db_hashtype=u_int32_t
13669 $cat try.out >&4
13670 echo "Help: I can't seem to compile the db test program." >&4
13671 echo "Something's wrong, but I'll assume you use $db_hashtype." >&4
13672 fi
13673 $rm -f try.*
13674 echo "Your version of Berkeley DB uses $db_hashtype for hash."
13675 ;;
13676*) db_hashtype=u_int32_t
13677 ;;
13678esac
13679case "$i_db" in
13680define)
13681 : Check the return type needed for prefix
13682 echo " "
13683 echo "Checking return type needed for prefix for Berkeley DB ..." >&4
13684 cat >try.c <<EOCP
13685#$d_const HASCONST
13686#ifndef HASCONST
13687#define const
13688#endif
13689#include <sys/types.h>
13690#include <db.h>
13691
13692#ifndef DB_VERSION_MAJOR
13693size_t prefix_cb (key1, key2)
13694const DBT *key1;
13695const DBT *key2;
13696{
13697}
13698BTREEINFO info;
13699int main()
13700{
13701 info.prefix = prefix_cb;
13702}
13703#endif
13704EOCP
13705 if $cc $ccflags -c try.c >try.out 2>&1 ; then
13706 if $contains warning try.out >>/dev/null 2>&1 ; then
13707 db_prefixtype='int'
13708 else
13709 db_prefixtype='size_t'
13710 fi
13711 else
13712 db_prefixtype='size_t'
13713 : XXX Maybe we should just give up here.
13714 $cat try.out >&4
13715 echo "Help: I can't seem to compile the db test program." >&4
13716 echo "Something's wrong, but I'll assume you use $db_prefixtype." >&4
13717 fi
13718 $rm -f try.*
13719 echo "Your version of Berkeley DB uses $db_prefixtype for prefix."
13720 ;;
13721*) db_prefixtype='size_t'
13722 ;;
13723esac
13724
b4eb6b3d
JH
13725
13726: How can we generate normalized random numbers ?
13727echo " "
13728echo "Looking for a random number function..." >&4
13729case "$randfunc" in
13730'')
13731 if set drand48 val -f; eval $csym; $val; then
13732 dflt="drand48"
13733 echo "Good, found drand48()." >&4
13734 elif set random val -f; eval $csym; $val; then
13735 dflt="random"
13736 echo "OK, found random()." >&4
13737 else
13738 dflt="rand"
13739 echo "Yick, looks like I have to use rand()." >&4
13740 fi
13741 echo " "
13742 ;;
13743*)
13744 dflt="$randfunc"
13745 ;;
13746esac
13747cont=true
13748
13749case "$ccflags" in
13750*-Dmy_rand=*|*-Dmy_srand=*)
13751 echo "Removing obsolete -Dmy_rand, -Dmy_srand, and -Drandbits from ccflags." >&4
13752 ccflags="`echo $ccflags | sed -e 's/-Dmy_rand=random/ /'`"
13753 ccflags="`echo $ccflags | sed -e 's/-Dmy_srand=srandom/ /'`"
13754 ccflags="`echo $ccflags | sed -e 's/-Drandbits=[0-9][0-9]*/ /'`"
13755 ;;
13756esac
13757
13758while $test "$cont"; do
13759 rp="Use which function to generate random numbers?"
13760 . ./myread
13761 if $test "$ans" = "$dflt"; then
13762 : null
13763 else
13764 randbits=''
13765 fi
13766 randfunc="$ans"
13767 if set $ans val -f; eval $csym; $val; then
13768 cont=''
13769 else
13770 dflt=y
13771 rp="I cannot find function $ans. Use that name anyway?"
13772 . ./myread
13773 dflt=rand
13774 case "$ans" in
13775 [yY]*) cont='';;
13776 esac
13777 fi
13778 case "$cont" in
13779 '')
13780 case "$randfunc" in
13781 drand48)
13782 drand01="drand48()"
13783 seedfunc="srand48"
13784 randbits=48
13785 randseedtype=long
13786 ;;
13787 rand|random)
13788 case "$randbits" in
13789 '')
13790echo "Checking to see how many bits your $randfunc() function produces..." >&4
13791 $cat >try.c <<EOCP
13792#$i_unistd I_UNISTD
13793#$i_stdlib I_STDLIB
13794#include <stdio.h>
13795#ifdef I_UNISTD
13796# include <unistd.h>
13797#endif
13798#ifdef I_STDLIB
13799# include <stdlib.h>
13800#endif
13801int main()
13802{
13803 register int i;
13804 register unsigned long tmp;
13805 register unsigned long max = 0L;
13806
13807 for (i = 1000; i; i--) {
13808 tmp = (unsigned long) $randfunc();
13809 if (tmp > max) max = tmp;
13810 }
13811 for (i = 0; max; i++)
13812 max /= 2;
13813 printf("%d\n",i);
13814}
13815EOCP
13816 set try
13817 if eval $compile_ok; then
13818 dflt=`try`
13819 else
13820 dflt='?'
13821 echo "(I can't seem to compile the test program...)"
13822 fi
13823 ;;
13824 *)
13825 dflt="$randbits"
13826 ;;
13827 esac
13828 rp="How many bits does your $randfunc() function produce?"
13829 . ./myread
13830 randbits="$ans"
13831 $rm -f try.c try
13832 drand01="($randfunc() / (double) ((unsigned long)1 << $randbits))"
13833 seedfunc="s$randfunc"
13834 randseedtype=unsigned
13835 ;;
13836 *)
13837 dflt="31"
13838 rp="How many bits does your $randfunc() function produce?"
13839 . ./myread
13840 randbits="$ans"
13841 seedfunc="s$randfunc"
13842 drand01="($randfunc() / (double) ((unsigned long)1 << $randbits))"
13843 if set $seedfunc val -f; eval $csym; $val; then
13844 echo "(Using $seedfunc() to seed random generator)"
13845 else
13846 echo "(Warning: no $seedfunc() to seed random generator)"
13847 seedfunc=rand
13848 fi
13849 randseedtype=unsigned
13850 ;;
13851 esac
13852 ;;
13853 esac
13854done
13855
13856echo " "
13857echo "Determining whether or not we are on an EBCDIC system..." >&4
5440bc8e 13858$cat >try.c <<'EOM'
b4eb6b3d
JH
13859int main()
13860{
13861 if ('M'==0xd4) return 0;
13862 return 1;
13863}
13864EOM
13865
13866val=$undef
5440bc8e 13867set try
b4eb6b3d 13868if eval $compile_ok; then
5440bc8e 13869 if $run ./try; then
b4eb6b3d
JH
13870 echo "You seem to speak EBCDIC." >&4
13871 val="$define"
13872 else
5440bc8e 13873 echo "Nope, no EBCDIC, probably ASCII or some ISO Latin. Or UTF-8." >&4
b4eb6b3d
JH
13874 fi
13875else
13876 echo "I'm unable to compile the test program." >&4
13877 echo "I'll assume ASCII or some ISO Latin. Or UTF8." >&4
13878fi
5440bc8e 13879$rm -f try try.*
b4eb6b3d
JH
13880set ebcdic
13881eval $setvar
13882
13883echo " "
13884$cat >&4 <<EOM
13885Checking how to flush all pending stdio output...
13886EOM
13887# I only know how to find the first 32 possibly open files on SunOS.
13888# See also hints/sunos_4_1.sh and util.c --AD
13889case "$osname" in
13890sunos) $echo '#define PERL_FFLUSH_ALL_FOPEN_MAX 32' > try.c ;;
13891esac
13892$cat >>try.c <<EOCP
13893#include <stdio.h>
13894#$i_unistd I_UNISTD
13895#ifdef I_UNISTD
13896# include <unistd.h>
13897#endif
13898#$d_sysconf HAS_SYSCONF
13899#$d_stdio_stream_array HAS_STDIO_STREAM_ARRAY
13900#ifdef HAS_STDIO_STREAM_ARRAY
13901# define STDIO_STREAM_ARRAY $stdio_stream_array
13902#endif
13903int main() {
5440bc8e
JH
13904 FILE* p;
13905 unlink("try.out");
13906 p = fopen("try.out", "w");
b4eb6b3d
JH
13907#ifdef TRY_FPUTC
13908 fputc('x', p);
13909#else
13910# ifdef TRY_FPRINTF
13911 fprintf(p, "x");
13912# endif
13913#endif
13914#ifdef TRY_FFLUSH_NULL
13915 fflush(NULL);
13916#endif
13917#ifdef TRY_FFLUSH_ALL
13918 {
13919 long open_max = -1;
13920# ifdef PERL_FFLUSH_ALL_FOPEN_MAX
13921 open_max = PERL_FFLUSH_ALL_FOPEN_MAX;
13922# else
13923# if defined(HAS_SYSCONF) && defined(_SC_OPEN_MAX)
13924 open_max = sysconf(_SC_OPEN_MAX);
13925# else
13926# ifdef FOPEN_MAX
13927 open_max = FOPEN_MAX;
13928# else
13929# ifdef OPEN_MAX
13930 open_max = OPEN_MAX;
13931# else
13932# ifdef _NFILE
13933 open_max = _NFILE;
13934# endif
13935# endif
13936# endif
13937# endif
13938# endif
13939# ifdef HAS_STDIO_STREAM_ARRAY
13940 if (open_max > 0) {
13941 long i;
13942 for (i = 0; i < open_max; i++)
13943 if (STDIO_STREAM_ARRAY[i]._file >= 0 &&
13944 STDIO_STREAM_ARRAY[i]._file < open_max &&
13945 STDIO_STREAM_ARRAY[i]._flag)
13946 fflush(&STDIO_STREAM_ARRAY[i]);
13947 }
13948 }
13949# endif
13950#endif
13951 _exit(42);
13952}
13953EOCP
13954: first we have to find out how _not_ to flush
5440bc8e 13955$to try.c
b4eb6b3d
JH
13956if $test "X$fflushNULL" = X -o "X$fflushall" = X; then
13957 output=''
13958 set try -DTRY_FPUTC
13959 if eval $compile; then
fbe73d74 13960 $run ./try 2>/dev/null
28f5ac64 13961 code="$?"
5440bc8e 13962 $from try.out
28f5ac64 13963 if $test ! -s try.out -a "X$code" = X42; then
b4eb6b3d
JH
13964 output=-DTRY_FPUTC
13965 fi
13966 fi
13967 case "$output" in
13968 '')
13969 set try -DTRY_FPRINTF
b4eb6b3d 13970 if eval $compile; then
fbe73d74 13971 $run ./try 2>/dev/null
28f5ac64 13972 code="$?"
5440bc8e 13973 $from try.out
28f5ac64 13974 if $test ! -s try.out -a "X$code" = X42; then
b4eb6b3d
JH
13975 output=-DTRY_FPRINTF
13976 fi
13977 fi
13978 ;;
13979 esac
13980fi
13981: check for fflush NULL behaviour
13982case "$fflushNULL" in
13983'') set try -DTRY_FFLUSH_NULL $output
13984 if eval $compile; then
5440bc8e 13985 $run ./try 2>/dev/null
b4eb6b3d 13986 code="$?"
5440bc8e 13987 $from try.out
b4eb6b3d
JH
13988 if $test -s try.out -a "X$code" = X42; then
13989 fflushNULL="`$cat try.out`"
13990 else
13991 if $test "X$code" != X42; then
13992 $cat >&4 <<EOM
13993(If this test failed, don't worry, we'll try another method shortly.)
13994EOM
13995 fi
13996 fi
13997 fi
13998 $rm -f core try.core core.try.*
13999 case "$fflushNULL" in
14000 x) $cat >&4 <<EOM
14001Your fflush(NULL) works okay for output streams.
14002Let's see if it clobbers input pipes...
14003EOM
14004# As of mid-March 2000 all versions of Solaris appear to have a stdio
14005# bug that improperly flushes the input end of pipes. So we avoid the
14006# autoflush on fork/system/exec support for now. :-(
14007$cat >tryp.c <<EOCP
14008#include <stdio.h>
14009int
14010main(int argc, char **argv)
14011{
14012 char buf[1024];
14013 int i;
14014 char *bp = buf;
14015 while (1) {
14016 while ((i = getc(stdin)) != -1
14017 && (*bp++ = i) != '\n'
14018 && bp < &buf[1024])
14019 /* DO NOTHING */ ;
14020 *bp = '\0';
14021 fprintf(stdout, "%s", buf);
14022 fflush(NULL);
14023 if (i == -1)
14024 return 0;
14025 bp = buf;
14026 }
14027}
14028EOCP
14029 fflushNULL="$define"
14030 set tryp
14031 if eval $compile; then
14032 $rm -f tryp.out
5440bc8e 14033 $cat tryp.c | $run ./tryp 2>/dev/null > tryp.out
b4eb6b3d
JH
14034 if cmp tryp.c tryp.out >/dev/null 2>&1; then
14035 $cat >&4 <<EOM
14036fflush(NULL) seems to behave okay with input streams.
14037EOM
14038 fflushNULL="$define"
14039 else
14040 $cat >&4 <<EOM
14041Ouch, fflush(NULL) clobbers input pipes! We will not use it.
14042EOM
14043 fflushNULL="$undef"
14044 fi
14045 fi
14046 $rm -f core tryp.c tryp.core core.tryp.*
14047 ;;
14048 '') $cat >&4 <<EOM
14049Your fflush(NULL) isn't working (contrary to ANSI C).
14050EOM
14051 fflushNULL="$undef"
14052 ;;
14053 *) $cat >&4 <<EOM
14054Cannot figure out whether your fflush(NULL) works or not.
14055I'm assuming it doesn't (contrary to ANSI C).
14056EOM
14057 fflushNULL="$undef"
14058 ;;
14059 esac
14060 ;;
14061$define|true|[yY]*)
14062 fflushNULL="$define"
14063 ;;
14064*)
14065 fflushNULL="$undef"
14066 ;;
14067esac
14068: check explicit looping only if NULL did not work, and if the pipe
14069: bug does not show up on an explicit flush too
14070case "$fflushNULL" in
14071"$undef")
14072 $cat >tryp.c <<EOCP
14073#include <stdio.h>
14074int
14075main(int argc, char **argv)
14076{
14077 char buf[1024];
14078 int i;
14079 char *bp = buf;
14080 while (1) {
14081 while ((i = getc(stdin)) != -1
14082 && (*bp++ = i) != '\n'
14083 && bp < &buf[1024])
14084 /* DO NOTHING */ ;
14085 *bp = '\0';
14086 fprintf(stdout, "%s", buf);
14087 fflush(stdin);
14088 if (i == -1)
14089 return 0;
14090 bp = buf;
14091 }
14092}
14093EOCP
14094 set tryp
14095 if eval $compile; then
14096 $rm -f tryp.out
5440bc8e 14097 $cat tryp.c | $run ./tryp 2>/dev/null > tryp.out
b4eb6b3d
JH
14098 if cmp tryp.c tryp.out >/dev/null 2>&1; then
14099 $cat >&4 <<EOM
14100Good, at least fflush(stdin) seems to behave okay when stdin is a pipe.
14101EOM
14102 : now check for fflushall behaviour
14103 case "$fflushall" in
14104 '') set try -DTRY_FFLUSH_ALL $output
14105 if eval $compile; then
14106 $cat >&4 <<EOM
14107(Now testing the other method--but note that this also may fail.)
14108EOM
5440bc8e 14109 $run ./try 2>/dev/null
28f5ac64 14110 code=$?
fbe73d74 14111 $from try.out
28f5ac64 14112 if $test -s try.out -a "X$code" = X42; then
b4eb6b3d
JH
14113 fflushall="`$cat try.out`"
14114 fi
14115 fi
14116 $rm -f core try.core core.try.*
14117 case "$fflushall" in
14118 x) $cat >&4 <<EOM
14119Whew. Flushing explicitly all the stdio streams works.
14120EOM
14121 fflushall="$define"
14122 ;;
14123 '') $cat >&4 <<EOM
14124Sigh. Flushing explicitly all the stdio streams doesn't work.
14125EOM
14126 fflushall="$undef"
14127 ;;
14128 *) $cat >&4 <<EOM
14129Cannot figure out whether flushing stdio streams explicitly works or not.
14130I'm assuming it doesn't.
14131EOM
14132 fflushall="$undef"
14133 ;;
14134 esac
14135 ;;
14136 "$define"|true|[yY]*)
14137 fflushall="$define"
14138 ;;
14139 *)
14140 fflushall="$undef"
14141 ;;
14142 esac
14143 else
14144 $cat >&4 <<EOM
14145All is futile. Even fflush(stdin) clobbers input pipes!
14146EOM
14147 fflushall="$undef"
14148 fi
14149 else
14150 fflushall="$undef"
14151 fi
14152 $rm -f core tryp.c tryp.core core.tryp.*
14153 ;;
14154*) fflushall="$undef"
14155 ;;
14156esac
14157
14158case "$fflushNULL$fflushall" in
14159undefundef)
14160 $cat <<EOM
14161OK, I give up. I cannot figure out how to flush pending stdio output.
14162We won't be flushing handles at all before fork/exec/popen.
14163EOM
14164 ;;
14165esac
14166$rm -f try.* try$exe_ext
14167
14168: Store the full pathname to the ar program for use in the C program
14169: Respect a hint or command line value for full_ar.
14170case "$full_ar" in
14171'') full_ar=$ar ;;
14172esac
14173
14174: Store the full pathname to the sed program for use in the C program
14175full_sed=$sed
14176
14177: see what type gids are declared as in the kernel
14178echo " "
14179echo "Looking for the type for group ids returned by getgid()."
14180set gid_t gidtype xxx stdio.h sys/types.h
14181eval $typedef
14182case "$gidtype" in
14183xxx)
14184 xxx=`./findhdr sys/user.h`
14185 set `grep 'groups\[NGROUPS\];' "$xxx" 2>/dev/null` unsigned short
14186 case $1 in
14187 unsigned) dflt="$1 $2" ;;
14188 *) dflt="$1" ;;
14189 esac
14190 ;;
14191*) dflt="$gidtype";;
14192esac
14193case "$gidtype" in
14194gid_t) echo "gid_t found." ;;
14195*) rp="What is the type for group ids returned by getgid()?"
14196 . ./myread
14197 gidtype="$ans"
14198 ;;
14199esac
14200
14201echo " "
14202case "$gidtype" in
14203*_t) zzz="$gidtype" ;;
14204*) zzz="gid" ;;
14205esac
14206echo "Checking the size of $zzz..." >&4
14207cat > try.c <<EOCP
14208#include <sys/types.h>
14209#include <stdio.h>
14210int main() {
14211 printf("%d\n", (int)sizeof($gidtype));
14212 exit(0);
14213}
14214EOCP
14215set try
14216if eval $compile_ok; then
5440bc8e 14217 yyy=`$run ./try`
b4eb6b3d
JH
14218 case "$yyy" in
14219 '') gidsize=4
14220 echo "(I can't execute the test program--guessing $gidsize.)" >&4
14221 ;;
14222 *) gidsize=$yyy
14223 echo "Your $zzz is $gidsize bytes long."
14224 ;;
14225 esac
14226else
14227 gidsize=4
14228 echo "(I can't compile the test program--guessing $gidsize.)" >&4
14229fi
14230
14231
14232echo " "
14233case "$gidtype" in
14234*_t) zzz="$gidtype" ;;
14235*) zzz="gid" ;;
14236esac
14237echo "Checking the sign of $zzz..." >&4
14238cat > try.c <<EOCP
14239#include <sys/types.h>
14240#include <stdio.h>
14241int main() {
14242 $gidtype foo = -1;
14243 if (foo < 0)
14244 printf("-1\n");
14245 else
14246 printf("1\n");
14247}
14248EOCP
14249set try
14250if eval $compile; then
5440bc8e 14251 yyy=`$run ./try`
b4eb6b3d
JH
14252 case "$yyy" in
14253 '') gidsign=1
14254 echo "(I can't execute the test program--guessing unsigned.)" >&4
14255 ;;
14256 *) gidsign=$yyy
14257 case "$gidsign" in
14258 1) echo "Your $zzz is unsigned." ;;
14259 -1) echo "Your $zzz is signed." ;;
14260 esac
14261 ;;
14262 esac
14263else
14264 gidsign=1
14265 echo "(I can't compile the test program--guessing unsigned.)" >&4
14266fi
14267
14268
14269echo " "
14270
14271if $test X"$quadtype" != X; then
14272
14273echo "Checking how to print 64-bit integers..." >&4
14274
14275if $test X"$sPRId64" = X -a X"$quadtype" = Xint; then
14276 $cat >try.c <<'EOCP'
14277#include <sys/types.h>
14278#include <stdio.h>
14279int main() {
14280 int q = 12345678901;
14281 printf("%ld\n", q);
14282}
14283EOCP
14284 set try
14285 if eval $compile; then
5440bc8e 14286 yyy=`$run ./try`
b4eb6b3d
JH
14287 case "$yyy" in
14288 12345678901)
14289 sPRId64='"d"'; sPRIi64='"i"'; sPRIu64='"u"';
14290 sPRIo64='"o"'; sPRIx64='"x"'; sPRIXU64='"X"';
14291 echo "We will use %d."
14292 ;;
14293 esac
14294 fi
14295fi
14296
14297if $test X"$sPRId64" = X -a X"$quadtype" = Xlong; then
14298 $cat >try.c <<'EOCP'
14299#include <sys/types.h>
14300#include <stdio.h>
14301int main() {
14302 long q = 12345678901;
14303 printf("%ld\n", q);
14304}
14305EOCP
14306 set try
14307 if eval $compile; then
5440bc8e 14308 yyy=`$run ./try`
b4eb6b3d
JH
14309 case "$yyy" in
14310 12345678901)
14311 sPRId64='"ld"'; sPRIi64='"li"'; sPRIu64='"lu"';
14312 sPRIo64='"lo"'; sPRIx64='"lx"'; sPRIXU64='"lX"';
14313 echo "We will use %ld."
14314 ;;
14315 esac
14316 fi
14317fi
14318
14319if $test X"$sPRId64" = X -a X"$i_inttypes" = X"$define" -a X"$quadtype" = Xint64_t; then
14320 $cat >try.c <<'EOCP'
14321#include <sys/types.h>
14322#include <inttypes.h>
14323#include <stdio.h>
14324int main() {
14325 int64_t q = 12345678901;
14326 printf("%" PRId64 "\n", q);
14327}
14328EOCP
14329 set try
14330 if eval $compile; then
5440bc8e 14331 yyy=`$run ./try`
b4eb6b3d
JH
14332 case "$yyy" in
14333 12345678901)
14334 sPRId64=PRId64; sPRIi64=PRIi64; sPRIu64=PRIu64;
14335 sPRIo64=PRIo64; sPRIx64=PRIx64; sPRIXU64=PRIXU64;
14336 echo "We will use the C9X style."
14337 ;;
14338 esac
14339 fi
14340fi
14341
2ef53570
JH
14342if $test X"$sPRId64" = X -a X"$quadtype" != X; then
14343 $cat >try.c <<EOCP
b4eb6b3d
JH
14344#include <sys/types.h>
14345#include <stdio.h>
14346int main() {
2ef53570
JH
14347 $quadtype q = 12345678901;
14348 printf("%Ld\n", q);
b4eb6b3d
JH
14349}
14350EOCP
14351 set try
14352 if eval $compile; then
5440bc8e 14353 yyy=`$run ./try`
b4eb6b3d
JH
14354 case "$yyy" in
14355 12345678901)
2ef53570
JH
14356 sPRId64='"Ld"'; sPRIi64='"Li"'; sPRIu64='"Lu"';
14357 sPRIo64='"Lo"'; sPRIx64='"Lx"'; sPRIXU64='"LX"';
14358 echo "We will use %Ld."
b4eb6b3d
JH
14359 ;;
14360 esac
14361 fi
14362fi
14363
2ef53570
JH
14364if $test X"$sPRId64" = X -a X"$quadtype" = X"long long"; then
14365 $cat >try.c <<'EOCP'
b4eb6b3d
JH
14366#include <sys/types.h>
14367#include <stdio.h>
14368int main() {
2ef53570
JH
14369 long long q = 12345678901LL; /* AIX cc requires the LL suffix. */
14370 printf("%lld\n", q);
b4eb6b3d
JH
14371}
14372EOCP
14373 set try
14374 if eval $compile; then
5440bc8e 14375 yyy=`$run ./try`
b4eb6b3d
JH
14376 case "$yyy" in
14377 12345678901)
2ef53570
JH
14378 sPRId64='"lld"'; sPRIi64='"lli"'; sPRIu64='"llu"';
14379 sPRIo64='"llo"'; sPRIx64='"llx"'; sPRIXU64='"llX"';
14380 echo "We will use the %lld style."
b4eb6b3d
JH
14381 ;;
14382 esac
14383 fi
14384fi
14385
14386if $test X"$sPRId64" = X -a X"$quadtype" != X; then
14387 $cat >try.c <<EOCP
14388#include <sys/types.h>
14389#include <stdio.h>
14390int main() {
14391 $quadtype q = 12345678901;
14392 printf("%qd\n", q);
14393}
14394EOCP
14395 set try
14396 if eval $compile; then
5440bc8e 14397 yyy=`$run ./try`
b4eb6b3d
JH
14398 case "$yyy" in
14399 12345678901)
14400 sPRId64='"qd"'; sPRIi64='"qi"'; sPRIu64='"qu"';
14401 sPRIo64='"qo"'; sPRIx64='"qx"'; sPRIXU64='"qX"';
14402 echo "We will use %qd."
14403 ;;
14404 esac
14405 fi
14406fi
14407
14408if $test X"$sPRId64" = X; then
14409 echo "Cannot figure out how to print 64-bit integers." >&4
14410fi
14411
14412$rm -f try try.*
14413
14414fi
14415
14416case "$sPRId64" in
14417'') d_PRId64="$undef"; d_PRIi64="$undef"; d_PRIu64="$undef";
14418 d_PRIo64="$undef"; d_PRIx64="$undef"; d_PRIXU64="$undef";
14419 ;;
14420*) d_PRId64="$define"; d_PRIi64="$define"; d_PRIu64="$define";
14421 d_PRIo64="$define"; d_PRIx64="$define"; d_PRIXU64="$define";
14422 ;;
14423esac
14424
14425
14426echo " "
14427$echo "Checking the format strings to be used for Perl's internal types..." >&4
14428
14429if $test X"$ivsize" = X8; then
14430 ivdformat="$sPRId64"
14431 uvuformat="$sPRIu64"
14432 uvoformat="$sPRIo64"
14433 uvxformat="$sPRIx64"
14434 uvXUformat="$sPRIXU64"
14435else
14436 if $test X"$ivsize" = X"$longsize"; then
14437 ivdformat='"ld"'
14438 uvuformat='"lu"'
14439 uvoformat='"lo"'
14440 uvxformat='"lx"'
14441 uvXUformat='"lX"'
14442 else
14443 if $test X"$ivsize" = X"$intsize"; then
14444 ivdformat='"d"'
14445 uvuformat='"u"'
14446 uvoformat='"o"'
14447 uvxformat='"x"'
14448 uvXUformat='"X"'
14449 else
14450 : far out
14451 if $test X"$ivsize" = X"$shortsize"; then
14452 ivdformat='"hd"'
14453 uvuformat='"hu"'
14454 uvoformat='"ho"'
14455 uvxformat='"hx"'
14456 uvXUformat='"hX"'
14457 fi
14458 fi
14459 fi
14460fi
14461
14462if $test X"$uselongdouble" = X"$define" -a X"$d_longdbl" = X"$define" -a X"$d_PRIgldbl" = X"$define"; then
14463 nveformat="$sPRIeldbl"
14464 nvfformat="$sPRIfldbl"
14465 nvgformat="$sPRIgldbl"
14466 nvEUformat="$sPRIEUldbl"
14467 nvFUformat="$sPRIFUldbl"
14468 nvGUformat="$sPRIGUldbl"
14469else
14470 nveformat='"e"'
14471 nvfformat='"f"'
14472 nvgformat='"g"'
14473 nvEUformat='"E"'
14474 nvFUformat='"F"'
14475 nvGUformat='"G"'
14476fi
14477
14478case "$ivdformat" in
14479'') echo "$0: Fatal: failed to find format strings, cannot continue." >& 4
14480 exit 1
14481 ;;
14482esac
14483
14484
14485echo " "
14486$echo "Checking the format string to be used for gids..." >&4
14487
14488case "$gidsign" in
14489-1) if $test X"$gidsize" = X"$ivsize"; then
14490 gidformat="$ivdformat"
14491 else
14492 if $test X"$gidsize" = X"$longsize"; then
14493 gidformat='"ld"'
14494 else
14495 if $test X"$gidsize" = X"$intsize"; then
14496 gidformat='"d"'
14497 else
14498 if $test X"$gidsize" = X"$shortsize"; then
14499 gidformat='"hd"'
14500 fi
14501 fi
14502 fi
14503 fi
14504 ;;
14505*) if $test X"$gidsize" = X"$uvsize"; then
14506 gidformat="$uvuformat"
14507 else
14508 if $test X"$gidsize" = X"$longsize"; then
14509 gidformat='"lu"'
14510 else
14511 if $test X"$gidsize" = X"$intsize"; then
14512 gidformat='"u"'
14513 else
14514 if $test X"$gidsize" = X"$shortsize"; then
14515 gidformat='"hu"'
14516 fi
14517 fi
14518 fi
14519 fi
14520 ;;
14521esac
14522
14523: see if getgroups exists
14524set getgroups d_getgrps
14525eval $inlibc
14526
14527: see if setgroups exists
14528set setgroups d_setgrps
14529eval $inlibc
14530
14531
14532: Find type of 2nd arg to 'getgroups()' and 'setgroups()'
14533echo " "
14534case "$d_getgrps$d_setgrps" in
14535*define*)
14536 case "$groupstype" in
14537 '') dflt="$gidtype" ;;
14538 *) dflt="$groupstype" ;;
14539 esac
14540 $cat <<EOM
14541What type of pointer is the second argument to getgroups() and setgroups()?
14542Usually this is the same as group ids, $gidtype, but not always.
14543
14544EOM
14545 rp='What type pointer is the second argument to getgroups() and setgroups()?'
14546 . ./myread
14547 groupstype="$ans"
14548 ;;
14549*) groupstype="$gidtype";;
14550esac
14551
14552echo " "
14553echo "Checking if your $make program sets \$(MAKE)..." >&4
14554case "$make_set_make" in
14555'')
14556 $sed 's/^X //' > testmake.mak << 'EOF'
14557Xall:
14558X @echo 'maketemp="$(MAKE)"'
14559EOF
14560 case "`$make -f testmake.mak 2>/dev/null`" in
14561 *maketemp=*) make_set_make='#' ;;
14562 *) make_set_make="MAKE=$make" ;;
14563 esac
14564 $rm -f testmake.mak
14565 ;;
14566esac
14567case "$make_set_make" in
14568'#') echo "Yup, it does.";;
14569*) echo "Nope, it doesn't.";;
14570esac
14571
14572: see what type is used for mode_t
14573rp="What is the type used for file modes for system calls (e.g. fchmod())?"
14574set mode_t modetype int stdio.h sys/types.h
14575eval $typedef_ask
14576
2cc61e15
DD
14577: see if stdarg is available
14578echo " "
14579if $test `./findhdr stdarg.h`; then
14580 echo "<stdarg.h> found." >&4
14581 valstd="$define"
14582else
14583 echo "<stdarg.h> NOT found." >&4
14584 valstd="$undef"
14585fi
14586
14587: see if varags is available
14588echo " "
14589if $test `./findhdr varargs.h`; then
14590 echo "<varargs.h> found." >&4
14591else
14592 echo "<varargs.h> NOT found, but that's ok (I hope)." >&4
14593fi
14594
14595: set up the varargs testing programs
14596$cat > varargs.c <<EOP
14597#ifdef I_STDARG
14598#include <stdarg.h>
14599#endif
14600#ifdef I_VARARGS
14601#include <varargs.h>
14602#endif
14603
14604#ifdef I_STDARG
14605int f(char *p, ...)
14606#else
14607int f(va_alist)
14608va_dcl
14609#endif
14610{
14611 va_list ap;
14612#ifndef I_STDARG
14613 char *p;
14614#endif
14615#ifdef I_STDARG
14616 va_start(ap,p);
14617#else
14618 va_start(ap);
14619 p = va_arg(ap, char *);
14620#endif
14621 va_end(ap);
14622}
14623EOP
14624$cat > varargs <<EOP
14625$startsh
14626if $cc -c $ccflags -D\$1 varargs.c >/dev/null 2>&1; then
14627 echo "true"
14628else
14629 echo "false"
14630fi
14631$rm -f varargs$_o
14632EOP
14633chmod +x varargs
14634
14635: now check which varargs header should be included
14636echo " "
14637i_varhdr=''
14638case "$valstd" in
14639"$define")
14640 if `./varargs I_STDARG`; then
14641 val='stdarg.h'
14642 elif `./varargs I_VARARGS`; then
14643 val='varargs.h'
14644 fi
14645 ;;
14646*)
14647 if `./varargs I_VARARGS`; then
14648 val='varargs.h'
14649 fi
14650 ;;
14651esac
14652case "$val" in
14653'')
14654echo "I could not find the definition for va_dcl... You have problems..." >&4
14655 val="$undef"; set i_stdarg; eval $setvar
14656 val="$undef"; set i_varargs; eval $setvar
14657 ;;
14658*)
14659 set i_varhdr
14660 eval $setvar
14661 case "$i_varhdr" in
14662 stdarg.h)
14663 val="$define"; set i_stdarg; eval $setvar
14664 val="$undef"; set i_varargs; eval $setvar
14665 ;;
14666 varargs.h)
14667 val="$undef"; set i_stdarg; eval $setvar
14668 val="$define"; set i_varargs; eval $setvar
14669 ;;
14670 esac
14671 echo "We'll include <$i_varhdr> to get va_dcl definition." >&4;;
14672esac
14673$rm -f varargs*
14674
14675: see if we need va_copy
14676echo " "
14677case "$i_stdarg" in
14678"$define")
14679 $cat >try.c <<EOCP
14680#include <stdarg.h>
14681#include <stdio.h>
85c8a686
DD
14682#$i_stdlib I_STDLIB
14683#ifdef I_STDLIB
14684#include <stdlib.h>
14685#endif
14686#include <signal.h>
2cc61e15
DD
14687
14688int
14689ivfprintf(FILE *f, const char *fmt, va_list *valp)
14690{
14691 return vfprintf(f, fmt, *valp);
14692}
14693
14694int
14695myvfprintf(FILE *f, const char *fmt, va_list val)
14696{
14697 return ivfprintf(f, fmt, &val);
14698}
14699
14700int
14701myprintf(char *fmt, ...)
14702{
14703 va_list val;
14704 va_start(val, fmt);
14705 return myvfprintf(stdout, fmt, val);
14706}
14707
14708int
14709main(int ac, char **av)
14710{
85c8a686
DD
14711 signal(SIGSEGV, exit);
14712
2cc61e15
DD
14713 myprintf("%s%cs all right, then\n", "that", '\'');
14714 exit(0);
14715}
14716EOCP
14717 set try
5440bc8e
JH
14718 if eval $compile && $run ./try 2>&1 >/dev/null; then
14719 case "`$run ./try`" in
2cc61e15
DD
14720 "that's all right, then")
14721 okay=yes
14722 ;;
14723 esac
14724 fi
14725 case "$okay" in
14726 yes) echo "It seems that you don't need va_copy()." >&4
14727 need_va_copy="$undef"
14728 ;;
14729 *) echo "It seems that va_copy() or similar will be needed." >&4
14730 need_va_copy="$define"
14731 ;;
14732 esac
14733 $rm -f try.* core core.* *.core *.core.*
14734 ;;
14735*) echo "You don't have <stdarg.h>, not checking for va_copy()." >&4
14736 ;;
14737esac
14738
b4eb6b3d
JH
14739: define a fucntion to check prototypes
14740$cat > protochk <<EOSH
14741$startsh
14742cc="$cc"
14743optimize="$optimize"
14744ccflags="$ccflags"
14745prototype="$prototype"
14746define="$define"
14747rm=$rm
14748EOSH
14749
14750$cat >> protochk <<'EOSH'
14751
14752$rm -f try.c
14753foo="$1"
14754shift
14755while test $# -ge 2; do
14756 case "$1" in
14757 $define) echo "#include <$2>" >> try.c ;;
14758 literal) echo "$2" >> try.c ;;
14759 esac
14760 shift 2
14761done
14762test "$prototype" = "$define" && echo '#define CAN_PROTOTYPE' >> try.c
14763cat >> try.c <<'EOCP'
14764#ifdef CAN_PROTOTYPE
14765#define _(args) args
14766#else
14767#define _(args) ()
14768#endif
14769EOCP
14770echo "$foo" >> try.c
14771echo 'int no_real_function_has_this_name _((void)) { return 0; }' >> try.c
14772$cc $optimize $ccflags -c try.c > /dev/null 2>&1
14773status=$?
14774$rm -f try.[co]
14775exit $status
14776EOSH
14777chmod +x protochk
14778$eunicefix protochk
14779
14780: see what type is used for size_t
14781rp="What is the type used for the length parameter for string functions?"
14782set size_t sizetype 'unsigned int' stdio.h sys/types.h
14783eval $typedef_ask
14784
14785: check for type of arguments to gethostbyaddr.
14786if test "X$netdb_host_type" = X -o "X$netdb_hlen_type" = X; then
14787 case "$d_gethbyaddr" in
14788 $define)
14789 $cat <<EOM
14790
14791Checking to see what type of arguments are accepted by gethostbyaddr().
14792EOM
14793 hdrs="$define sys/types.h
14794 $d_socket sys/socket.h
14795 $i_niin netinet/in.h
14796 $i_netdb netdb.h
14797 $i_unistd unistd.h"
14798 : The first arg can 'char *' or 'void *'
14799 : The second arg is some of integral type
14800 for xxx in in_addr_t 'const void *' 'const char *' 'void *' 'char *'; do
14801 for yyy in size_t long int; do
14802 case "$netdb_host_type" in
14803 '') try="extern struct hostent *gethostbyaddr($xxx, $yyy, int);"
14804 if ./protochk "$try" $hdrs; then
14805 echo "Your system accepts $xxx for the first arg."
14806 echo "...and $yyy for the second arg."
14807 netdb_host_type="$xxx"
14808 netdb_hlen_type="$yyy"
14809 fi
14810 ;;
14811 esac
14812 done
14813 done
14814 : In case none of those worked, prompt the user.
14815 case "$netdb_host_type" in
14816 '') rp='What is the type for the 1st argument to gethostbyaddr?'
14817 dflt='char *'
14818 . ./myread
14819 netdb_host_type=$ans
14820 rp='What is the type for the 2nd argument to gethostbyaddr?'
14821 dflt="$sizetype"
14822 . ./myread
14823 netdb_hlen_type=$ans
14824 ;;
14825 esac
14826 ;;
14827 *) : no gethostbyaddr, so pick harmless defaults
14828 netdb_host_type='char *'
14829 netdb_hlen_type="$sizetype"
14830 ;;
14831 esac
14832 # Remove the "const" if needed. -- but then we'll have a
14833 # prototype clash!
14834 # netdb_host_type=`echo "$netdb_host_type" | sed 's/^const //'`
14835fi
14836
14837: check for type of argument to gethostbyname.
14838if test "X$netdb_name_type" = X ; then
14839 case "$d_gethbyname" in
14840 $define)
14841 $cat <<EOM
14842
14843Checking to see what type of argument is accepted by gethostbyname().
14844EOM
14845 hdrs="$define sys/types.h
14846 $d_socket sys/socket.h
14847 $i_niin netinet/in.h
14848 $i_netdb netdb.h
14849 $i_unistd unistd.h"
14850 for xxx in "const char *" "char *"; do
14851 case "$netdb_name_type" in
14852 '') try="extern struct hostent *gethostbyname($xxx);"
14853 if ./protochk "$try" $hdrs; then
14854 echo "Your system accepts $xxx."
14855 netdb_name_type="$xxx"
14856 fi
14857 ;;
14858 esac
14859 done
14860 : In case none of those worked, prompt the user.
14861 case "$netdb_name_type" in
14862 '') rp='What is the type for the 1st argument to gethostbyname?'
14863 dflt='char *'
14864 . ./myread
14865 netdb_name_type=$ans
14866 ;;
14867 esac
14868 ;;
14869 *) : no gethostbyname, so pick harmless default
14870 netdb_name_type='char *'
14871 ;;
14872 esac
14873fi
14874
14875: check for type of 1st argument to getnetbyaddr.
14876if test "X$netdb_net_type" = X ; then
14877 case "$d_getnbyaddr" in
14878 $define)
14879 $cat <<EOM
14880
14881Checking to see what type of 1st argument is accepted by getnetbyaddr().
14882EOM
14883 hdrs="$define sys/types.h
14884 $d_socket sys/socket.h
14885 $i_niin netinet/in.h
14886 $i_netdb netdb.h
14887 $i_unistd unistd.h"
14888 for xxx in in_addr_t "unsigned long" long "unsigned int" int; do
14889 case "$netdb_net_type" in
14890 '') try="extern struct netent *getnetbyaddr($xxx, int);"
14891 if ./protochk "$try" $hdrs; then
14892 echo "Your system accepts $xxx."
14893 netdb_net_type="$xxx"
14894 fi
14895 ;;
14896 esac
14897 done
14898 : In case none of those worked, prompt the user.
14899 case "$netdb_net_type" in
14900 '') rp='What is the type for the 1st argument to getnetbyaddr?'
14901 dflt='long'
14902 . ./myread
14903 netdb_net_type=$ans
14904 ;;
14905 esac
14906 ;;
14907 *) : no getnetbyaddr, so pick harmless default
14908 netdb_net_type='long'
14909 ;;
14910 esac
14911fi
14912: locate the preferred pager for this system
14913case "$pager" in
14914'')
14915 dflt=''
14916 case "$pg" in
14917 /*) dflt=$pg;;
14918 [a-zA-Z]:/*) dflt=$pg;;
14919 esac
14920 case "$more" in
14921 /*) dflt=$more;;
14922 [a-zA-Z]:/*) dflt=$more;;
14923 esac
14924 case "$less" in
14925 /*) dflt=$less;;
14926 [a-zA-Z]:/*) dflt=$less;;
14927 esac
14928 case "$dflt" in
14929 '') dflt=/usr/ucb/more;;
14930 esac
14931 ;;
14932*) dflt="$pager";;
14933esac
14934echo " "
14935fn=f/
14936rp='What pager is used on your system?'
14937. ./getfile
14938pager="$ans"
14939
14940: see what type pids are declared as in the kernel
14941rp="What is the type of process ids on this system?"
14942set pid_t pidtype int stdio.h sys/types.h
14943eval $typedef_ask
14944
14945: Find earliest binary compatible site_perl subdirectory perl can use.
14946case "$bincompat5005" in
14947"$define") xs_apiversion='5.005' ;;
14948*) xs_apiversion=$version ;; # The current site_perl version.
14949esac
14950: Find earliest pure perl site_perl subdirectory perl can use.
14951: The versioned directories started at 5.005.
14952pm_apiversion='5.005'
14953
b4eb6b3d
JH
14954: see if ar generates random libraries by itself
14955echo " "
14956echo "Checking how to generate random libraries on your machine..." >&4
14957echo 'int bar1() { return bar2(); }' > bar1.c
14958echo 'int bar2() { return 2; }' > bar2.c
14959$cat > foo.c <<'EOP'
14960int main() { printf("%d\n", bar1()); exit(0); }
14961EOP
14962$cc $ccflags -c bar1.c >/dev/null 2>&1
14963$cc $ccflags -c bar2.c >/dev/null 2>&1
14964$cc $ccflags -c foo.c >/dev/null 2>&1
14965$ar rc bar$_a bar2$_o bar1$_o >/dev/null 2>&1
7a282f6d 14966if $cc -o foobar $ccflags $ldflags foo$_o bar$_a $libs > /dev/null 2>&1 &&
5440bc8e 14967 $run ./foobar >/dev/null 2>&1; then
b4eb6b3d
JH
14968 echo "$ar appears to generate random libraries itself."
14969 orderlib=false
14970 ranlib=":"
14971elif $ar ts bar$_a >/dev/null 2>&1 &&
7a282f6d 14972 $cc -o foobar $ccflags $ldflags foo$_o bar$_a $libs > /dev/null 2>&1 &&
5440bc8e 14973 $run ./foobar >/dev/null 2>&1; then
b4eb6b3d
JH
14974 echo "a table of contents needs to be added with '$ar ts'."
14975 orderlib=false
14976 ranlib="$ar ts"
14977else
14978 case "$ranlib" in
14979 :) ranlib='';;
14980 '')
14981 ranlib=`./loc ranlib X /usr/bin /bin /usr/local/bin`
14982 $test -f $ranlib || ranlib=''
14983 ;;
14984 esac
14985 if $test -n "$ranlib"; then
14986 echo "your system has '$ranlib'; we'll use that."
14987 orderlib=false
14988 else
14989 echo "your system doesn't seem to support random libraries"
14990 echo "so we'll use lorder and tsort to order the libraries."
14991 orderlib=true
14992 ranlib=":"
14993 fi
14994fi
14995$rm -f foo* bar*
14996
14997: check for type of arguments to select.
14998case "$selecttype" in
14999'') case "$d_select" in
15000 $define)
15001 echo " "
15002 $cat <<EOM
15003Checking to see what type of arguments are accepted by select().
15004EOM
15005 hdrs="$define sys/types.h
15006 $i_systime sys/time.h
15007 $i_sysselct sys/select.h
15008 $d_socket sys/socket.h"
15009 : The first arg can be int, unsigned, or size_t
15010 : The last arg may or may not be 'const'
15011 val=''
15012 : void pointer has been seen but using that
15013 : breaks the selectminbits test
15014 for xxx in 'fd_set *' 'int *'; do
15015 for nfd in 'int' 'size_t' 'unsigned long' 'unsigned' ; do
15016 for tmo in 'struct timeval *' 'const struct timeval *'; do
15017 case "$val" in
15018 '') try="extern select _(($nfd, $xxx, $xxx, $xxx, $tmo));"
15019 if ./protochk "$try" $hdrs; then
15020 echo "Your system accepts $xxx."
15021 val="$xxx"
15022 fi
15023 ;;
15024 esac
15025 done
15026 done
15027 done
15028 case "$val" in
15029 '') rp='What is the type for the 2nd, 3rd, and 4th arguments to select?'
15030 case "$d_fd_set" in
15031 $define) dflt="fd_set *" ;;
15032 *) dflt="int *" ;;
15033 esac
15034 . ./myread
15035 val=$ans
15036 ;;
15037 esac
15038 selecttype="$val"
15039 ;;
15040 *) : no select, so pick a harmless default
15041 selecttype='int *'
15042 ;;
15043 esac
15044 ;;
15045esac
15046
15047: check for the select 'width'
15048case "$selectminbits" in
15049'') case "$d_select" in
15050 $define)
15051 $cat <<EOM
15052
15053Checking to see on how many bits at a time your select() operates...
15054EOM
15055 $cat >try.c <<EOCP
15056#include <sys/types.h>
15057#$i_time I_TIME
15058#$i_systime I_SYS_TIME
15059#$i_systimek I_SYS_TIME_KERNEL
15060#ifdef I_TIME
15061# include <time.h>
15062#endif
15063#ifdef I_SYS_TIME
15064# ifdef I_SYS_TIME_KERNEL
15065# define KERNEL
15066# endif
15067# include <sys/time.h>
15068# ifdef I_SYS_TIME_KERNEL
15069# undef KERNEL
15070# endif
15071#endif
15072#$i_sysselct I_SYS_SELECT
15073#ifdef I_SYS_SELECT
15074#include <sys/select.h>
15075#endif
15076#$d_socket HAS_SOCKET
15077#ifdef HAS_SOCKET
15078# include <sys/socket.h> /* Might include <sys/bsdtypes.h> */
15079#endif
15080#include <stdio.h>
15081$selecttype b;
15082#define S sizeof(*(b))
15083#define MINBITS 64
15084#define NBYTES (S * 8 > MINBITS ? S : MINBITS/8)
15085#define NBITS (NBYTES * 8)
15086int main() {
15087 char s[NBYTES];
15088 struct timeval t;
15089 int i;
15090 FILE* fp;
15091 int fd;
15092
15093 fclose(stdin);
15094 fp = fopen("try.c", "r");
15095 if (fp == 0)
15096 exit(1);
15097 fd = fileno(fp);
15098 if (fd < 0)
15099 exit(2);
15100 b = ($selecttype)s;
15101 for (i = 0; i < NBITS; i++)
15102 FD_SET(i, b);
15103 t.tv_sec = 0;
15104 t.tv_usec = 0;
15105 select(fd + 1, b, 0, 0, &t);
15106 for (i = NBITS - 1; i > fd && FD_ISSET(i, b); i--);
15107 printf("%d\n", i + 1);
15108 return 0;
15109}
15110EOCP
15111 set try
15112 if eval $compile_ok; then
5440bc8e 15113 selectminbits=`$run ./try`
b4eb6b3d
JH
15114 case "$selectminbits" in
15115 '') cat >&4 <<EOM
15116Cannot figure out on how many bits at a time your select() operates.
15117I'll play safe and guess it is 32 bits.
15118EOM
15119 selectminbits=32
15120 bits="32 bits"
15121 ;;
15122 1) bits="1 bit" ;;
15123 *) bits="$selectminbits bits" ;;
15124 esac
15125 echo "Your select() operates on $bits at a time." >&4
15126 else
15127 rp='What is the minimum number of bits your select() operates on?'
15128 case "$byteorder" in
15129 1234|12345678) dflt=32 ;;
15130 *) dflt=1 ;;
15131 esac
15132 . ./myread
15133 val=$ans
15134 selectminbits="$val"
15135 fi
15136 $rm -f try.* try
15137 ;;
15138 *) : no select, so pick a harmless default
15139 selectminbits='32'
15140 ;;
15141 esac
15142 ;;
15143esac
15144
15145: Trace out the files included by signal.h, then look for SIGxxx names.
15146: Remove SIGARRAYSIZE used by HPUX.
15147: Remove SIGSTKSIZE used by Linux.
15148: Remove SIGSTKSZ used by Posix.
15149: Remove SIGTYP void lines used by OS2.
15150: Some cpps, like os390, dont give the file name anywhere
15151if [ "X$fieldn" = X ]; then
15152 : Just make some guesses. We check them later.
15153 xxx='/usr/include/signal.h /usr/include/sys/signal.h'
15154else
15155 xxx=`echo '#include <signal.h>' |
15156 $cppstdin $cppminus $cppflags 2>/dev/null |
15157 $grep '^[ ]*#.*include' |
a938a3bb 15158 $awk "{print \\$$fieldn}" | $sed 's!"!!g' | $sed 's!\\\\\\\\!/!g' | $sort | $uniq`
b4eb6b3d
JH
15159fi
15160: Check this list of files to be sure we have parsed the cpp output ok.
15161: This will also avoid potentially non-existent files, such
15162: as ../foo/bar.h
15163xxxfiles=''
15164for xx in $xxx /dev/null ; do
15165 $test -f "$xx" && xxxfiles="$xxxfiles $xx"
15166done
15167: If we have found no files, at least try signal.h
15168case "$xxxfiles" in
15169'') xxxfiles=`./findhdr signal.h` ;;
15170esac
15171xxx=`awk '
15172$1 ~ /^#define$/ && $2 ~ /^SIG[A-Z0-9]*$/ && $2 !~ /SIGARRAYSIZE/ && $2 !~ /SIGSTKSIZE/ && $2 !~ /SIGSTKSZ/ && $3 !~ /void/ {
15173 print substr($2, 4, 20)
15174}
15175$1 == "#" && $2 ~ /^define$/ && $3 ~ /^SIG[A-Z0-9]*$/ && $3 !~ /SIGARRAYSIZE/ && $4 !~ /void/ {
15176 print substr($3, 4, 20)
15177}' $xxxfiles`
15178: Append some common names just in case the awk scan failed.
15179xxx="$xxx ABRT ALRM BUS CANCEL CHLD CLD CONT DIL EMT FPE"
15180xxx="$xxx FREEZE HUP ILL INT IO IOT KILL LOST LWP PHONE"
15181xxx="$xxx PIPE POLL PROF PWR QUIT RTMAX RTMIN SEGV STKFLT STOP"
15182xxx="$xxx SYS TERM THAW TRAP TSTP TTIN TTOU URG USR1 USR2"
15183xxx="$xxx USR3 USR4 VTALRM WAITING WINCH WIND WINDOW XCPU XFSZ"
15184
15185: generate a few handy files for later
15186$cat > signal.c <<'EOCP'
15187#include <sys/types.h>
15188#include <signal.h>
15189#include <stdio.h>
15190int main() {
15191
15192/* Strange style to avoid deeply-nested #if/#else/#endif */
15193#ifndef NSIG
15194# ifdef _NSIG
15195# define NSIG (_NSIG)
15196# endif
15197#endif
15198
15199#ifndef NSIG
15200# ifdef SIGMAX
15201# define NSIG (SIGMAX+1)
15202# endif
15203#endif
15204
15205#ifndef NSIG
15206# ifdef SIG_MAX
15207# define NSIG (SIG_MAX+1)
15208# endif
15209#endif
15210
15211#ifndef NSIG
15212# ifdef MAXSIG
15213# define NSIG (MAXSIG+1)
15214# endif
15215#endif
15216
15217#ifndef NSIG
15218# ifdef MAX_SIG
15219# define NSIG (MAX_SIG+1)
15220# endif
15221#endif
15222
15223#ifndef NSIG
15224# ifdef SIGARRAYSIZE
15225# define NSIG (SIGARRAYSIZE+1) /* Not sure of the +1 */
15226# endif
15227#endif
15228
15229#ifndef NSIG
15230# ifdef _sys_nsig
15231# define NSIG (_sys_nsig) /* Solaris 2.5 */
15232# endif
15233#endif
15234
15235/* Default to some arbitrary number that's big enough to get most
15236 of the common signals.
15237*/
15238#ifndef NSIG
15239# define NSIG 50
15240#endif
15241
15242printf("NSIG %d\n", NSIG);
15243
15244#ifndef JUST_NSIG
15245
15246EOCP
15247
15248echo $xxx | $tr ' ' $trnl | $sort | $uniq | $awk '
15249{
15250 printf "#ifdef SIG"; printf $1; printf "\n"
15251 printf "printf(\""; printf $1; printf " %%d\\n\",SIG";
15252 printf $1; printf ");\n"
15253 printf "#endif\n"
15254}
15255END {
15256 printf "#endif /* JUST_NSIG */\n";
15257 printf "exit(0);\n}\n";
15258}
15259' >>signal.c
15260$cat >signal.awk <<'EOP'
15261BEGIN { ndups = 0 }
15262$1 ~ /^NSIG$/ { nsig = $2 }
15263($1 !~ /^NSIG$/) && (NF == 2) {
15264 if ($2 > maxsig) { maxsig = $2 }
15265 if (sig_name[$2]) {
15266 dup_name[ndups] = $1
15267 dup_num[ndups] = $2
15268 ndups++
15269 }
15270 else {
15271 sig_name[$2] = $1
15272 sig_num[$2] = $2
15273 }
15274}
15275END {
15276 if (nsig == 0) {
15277 nsig = maxsig + 1
15278 }
15279 printf("NSIG %d\n", nsig);
15280 for (n = 1; n < nsig; n++) {
15281 if (sig_name[n]) {
15282 printf("%s %d\n", sig_name[n], sig_num[n])
15283 }
15284 else {
15285 printf("NUM%d %d\n", n, n)
15286 }
15287 }
15288 for (n = 0; n < ndups; n++) {
15289 printf("%s %d\n", dup_name[n], dup_num[n])
15290 }
15291}
15292EOP
15293$cat >signal_cmd <<EOS
15294$startsh
15295if $test -s signal.lst; then
15296 echo "Using your existing signal.lst file"
15297 exit 0
15298fi
15299xxx="$xxx"
15300EOS
15301$cat >>signal_cmd <<'EOS'
15302
15303set signal
15304if eval $compile_ok; then
5440bc8e 15305 $run ./signal$_exe | $sort -n +1 | $uniq | $awk -f signal.awk >signal.lst
b4eb6b3d
JH
15306else
15307 echo "(I can't seem be able to compile the whole test program)" >&4
15308 echo "(I'll try it in little pieces.)" >&4
15309 set signal -DJUST_NSIG
15310 if eval $compile_ok; then
5440bc8e 15311 $run ./signal$_exe > signal.nsg
b4eb6b3d
JH
15312 $cat signal.nsg
15313 else
15314 echo "I can't seem to figure out how many signals you have." >&4
15315 echo "Guessing 50." >&4
15316 echo 'NSIG 50' > signal.nsg
15317 fi
15318 : Now look at all the signal names, one at a time.
15319 for xx in `echo $xxx | $tr ' ' $trnl | $sort | $uniq`; do
15320 $cat > signal.c <<EOCP
15321#include <sys/types.h>
15322#include <signal.h>
15323#include <stdio.h>
15324int main() {
15325printf("$xx %d\n", SIG${xx});
15326return 0;
15327}
15328EOCP
15329 set signal
15330 if eval $compile; then
15331 echo "SIG${xx} found."
5440bc8e 15332 $run ./signal$_exe >> signal.ls1
b4eb6b3d
JH
15333 else
15334 echo "SIG${xx} NOT found."
15335 fi
15336 done
15337 if $test -s signal.ls1; then
15338 $cat signal.nsg signal.ls1 |
15339 $sort -n +1 | $uniq | $awk -f signal.awk >signal.lst
15340 fi
15341
15342fi
15343if $test -s signal.lst; then
15344 :
15345else
15346 echo "(AAK! I can't compile the test programs -- Guessing)" >&4
15347 echo 'kill -l' >signal
15348 set X `csh -f <signal`
15349 $rm -f signal
15350 shift
15351 case $# in
15352 0) set HUP INT QUIT ILL TRAP ABRT EMT FPE KILL BUS SEGV SYS PIPE ALRM TERM;;
15353 esac
15354 echo $@ | $tr ' ' $trnl | \
15355 $awk '{ printf "%s %d\n", $1, ++s; }
15356 END { printf "NSIG %d\n", ++s }' >signal.lst
15357fi
15358$rm -f signal.c signal$_exe signal$_o signal.nsg signal.ls1
15359EOS
15360chmod a+x signal_cmd
15361$eunicefix signal_cmd
15362
15363: generate list of signal names
15364echo " "
15365case "$sig_name_init" in
15366'') doinit=yes ;;
15367*) case "$sig_num_init" in
15368 ''|*,*) doinit=yes ;;
15369 esac ;;
15370esac
15371case "$doinit" in
15372yes)
15373 echo "Generating a list of signal names and numbers..." >&4
15374 . ./signal_cmd
15375 sig_count=`$awk '/^NSIG/ { printf "%d", $2 }' signal.lst`
15376 sig_name=`$awk 'BEGIN { printf "ZERO " }
15377 !/^NSIG/ { printf "%s ", $1 }' signal.lst`
15378 sig_num=`$awk 'BEGIN { printf "0 " }
15379 !/^NSIG/ { printf "%d ", $2 }' signal.lst`
15380 sig_name_init=`$awk 'BEGIN { printf "\"ZERO\", " }
15381 !/^NSIG/ { printf "\"%s\", ", $1 }
15382 END { printf "0\n" }' signal.lst`
15383 sig_num_init=`$awk 'BEGIN { printf "0, " }
15384 !/^NSIG/ { printf "%d, ", $2}
15385 END { printf "0\n"}' signal.lst`
15386 ;;
15387esac
15388echo "The following $sig_count signals are available:"
15389echo " "
15390echo $sig_name | $awk \
15391'BEGIN { linelen = 0 }
15392{
15393 for (i = 1; i <= NF; i++) {
15394 name = "SIG" $i " "
15395 linelen = linelen + length(name)
15396 if (linelen > 70) {
15397 printf "\n"
15398 linelen = length(name)
15399 }
15400 printf "%s", name
15401 }
15402 printf "\n"
15403}'
76d3c696 15404sig_size=`echo $sig_name | awk '{print NF}'`
b4eb6b3d
JH
15405$rm -f signal signal.c signal.awk signal.lst signal_cmd
15406
15407echo " "
15408case "$sizetype" in
15409*_t) zzz="$sizetype" ;;
15410*) zzz="filesize" ;;
15411esac
15412echo "Checking the size of $zzz..." >&4
15413cat > try.c <<EOCP
15414#include <sys/types.h>
15415#include <stdio.h>
15416int main() {
15417 printf("%d\n", (int)sizeof($sizetype));
15418 exit(0);
15419}
15420EOCP
15421set try
15422if eval $compile_ok; then
5440bc8e 15423 yyy=`$run ./try`
b4eb6b3d
JH
15424 case "$yyy" in
15425 '') sizesize=4
15426 echo "(I can't execute the test program--guessing $sizesize.)" >&4
15427 ;;
15428 *) sizesize=$yyy
15429 echo "Your $zzz size is $sizesize bytes."
15430 ;;
15431 esac
15432else
15433 sizesize=4
15434 echo "(I can't compile the test program--guessing $sizesize.)" >&4
15435fi
15436
15437
15438: check for socklen_t
15439echo " "
15440echo "Checking to see if you have socklen_t..." >&4
15441$cat >try.c <<EOCP
15442#include <sys/types.h>
15443#$d_socket HAS_SOCKET
15444#ifdef HAS_SOCKET
15445#include <sys/socket.h>
15446#endif
15447int main() { socklen_t x = 16; }
15448EOCP
15449set try
15450if eval $compile; then
15451 val="$define"
15452 echo "You have socklen_t."
15453else
15454 val="$undef"
15455 echo "You do not have socklen_t."
15456 case "$sizetype" in
15457 size_t) echo "(You do have size_t, that might work. Some people are happy with just an int.)" ;;
15458 esac
15459fi
15460$rm -f try try.*
15461set d_socklen_t
15462eval $setvar
15463
a7710f8d
JH
15464: see if this is a socks.h system
15465set socks.h i_socks
15466eval $inhdr
15467
b4eb6b3d
JH
15468: check for type of the size argument to socket calls
15469case "$d_socket" in
15470"$define")
15471 $cat <<EOM
15472
15473Checking to see what type is the last argument of accept().
15474EOM
b4eb6b3d
JH
15475 yyy=''
15476 case "$d_socklen_t" in
15477 "$define") yyy="$yyy socklen_t"
15478 esac
15479 yyy="$yyy $sizetype int long unsigned"
15480 for xxx in $yyy; do
15481 case "$socksizetype" in
15482 '') try="extern int accept(int, struct sockaddr *, $xxx *);"
a7710f8d
JH
15483 case "$usesocks" in
15484 "$define")
15485 if ./protochk "$try" $i_systypes sys/types.h $d_socket sys/socket.h literal '#define INCLUDE_PROTOTYPES' $i_socks socks.h.; then
15486 echo "Your system accepts '$xxx *' for the last argument of accept()."
15487 socksizetype="$xxx"
15488 fi
15489 ;;
15490 *) if ./protochk "$try" $i_systypes sys/types.h $d_socket sys/socket.h; then
15491 echo "Your system accepts '$xxx *' for the last argument of accept()."
15492 socksizetype="$xxx"
15493 fi
15494 ;;
15495 esac
b4eb6b3d
JH
15496 ;;
15497 esac
15498 done
15499: In case none of those worked, prompt the user.
15500 case "$socksizetype" in
15501 '') rp='What is the type for socket address structure sizes?'
15502 dflt='int'
15503 . ./myread
15504 socksizetype=$ans
15505 ;;
15506 esac
15507 ;;
15508*) : no sockets, so pick relatively harmless default
15509 socksizetype='int'
15510 ;;
15511esac
15512
15513: see what type is used for signed size_t
15514set ssize_t ssizetype int stdio.h sys/types.h
15515eval $typedef
15516dflt="$ssizetype"
5440bc8e 15517$cat > try.c <<EOM
b4eb6b3d
JH
15518#include <stdio.h>
15519#include <sys/types.h>
15520#define Size_t $sizetype
15521#define SSize_t $dflt
15522int main()
15523{
15524 if (sizeof(Size_t) == sizeof(SSize_t))
15525 printf("$dflt\n");
15526 else if (sizeof(Size_t) == sizeof(int))
15527 printf("int\n");
15528 else
15529 printf("long\n");
15530 exit(0);
15531}
15532EOM
15533echo " "
5440bc8e
JH
15534set try
15535if eval $compile_ok && $run ./try > /dev/null; then
15536 ssizetype=`$run ./try`
b4eb6b3d
JH
15537 echo "I'll be using $ssizetype for functions returning a byte count." >&4
15538else
15539 $cat >&4 <<EOM
15540Help! I can't compile and run the ssize_t test program: please enlighten me!
15541(This is probably a misconfiguration in your system or libraries, and
15542you really ought to fix it. Still, I'll try anyway.)
15543
15544I need a type that is the same size as $sizetype, but is guaranteed to
15545be signed. Common values are ssize_t, int and long.
15546
15547EOM
15548 rp="What signed type is the same size as $sizetype?"
15549 . ./myread
15550 ssizetype="$ans"
15551fi
5440bc8e 15552$rm -f try try.*
b4eb6b3d
JH
15553
15554: see what type of char stdio uses.
15555echo " "
aa517f50
JH
15556echo '#include <stdio.h>' | $cppstdin $cppminus > stdioh
15557if $contains 'unsigned.*char.*_ptr;' stdioh >/dev/null 2>&1 ; then
b4eb6b3d
JH
15558 echo "Your stdio uses unsigned chars." >&4
15559 stdchar="unsigned char"
15560else
aa517f50
JH
15561 echo "Your stdio uses signed chars." >&4
15562 stdchar="char"
b4eb6b3d 15563fi
aa517f50
JH
15564$rm -f stdioh
15565
15566
b4eb6b3d
JH
15567
15568: see if time exists
15569echo " "
15570if test "X$d_time" = X -o X"$timetype" = X; then
15571 if set time val -f d_time; eval $csym; $val; then
15572 echo 'time() found.' >&4
15573 val="$define"
15574 rp="What is the type returned by time() on this system?"
15575 set time_t timetype long stdio.h sys/types.h
15576 eval $typedef_ask
15577 else
15578 echo 'time() not found, hope that will do.' >&4
15579 val="$undef"
15580 timetype='int';
15581 fi
15582 set d_time
15583 eval $setvar
15584fi
15585
15586: see what type uids are declared as in the kernel
15587echo " "
15588echo "Looking for the type for user ids returned by getuid()."
15589set uid_t uidtype xxx stdio.h sys/types.h
15590eval $typedef
15591case "$uidtype" in
15592xxx)
15593 xxx=`./findhdr sys/user.h`
15594 set `grep '_ruid;' "$xxx" 2>/dev/null` unsigned short
15595 case $1 in
15596 unsigned) dflt="$1 $2" ;;
15597 *) dflt="$1" ;;
15598 esac
15599 ;;
15600*) dflt="$uidtype";;
15601esac
15602case "$uidtype" in
15603uid_t) echo "uid_t found." ;;
15604*) rp="What is the type for user ids returned by getuid()?"
15605 . ./myread
15606 uidtype="$ans"
15607 ;;
15608esac
15609
15610echo " "
15611case "$uidtype" in
15612*_t) zzz="$uidtype" ;;
15613*) zzz="uid" ;;
15614esac
15615echo "Checking the size of $zzz..." >&4
15616cat > try.c <<EOCP
15617#include <sys/types.h>
15618#include <stdio.h>
15619int main() {
15620 printf("%d\n", (int)sizeof($uidtype));
15621 exit(0);
15622}
15623EOCP
15624set try
15625if eval $compile_ok; then
5440bc8e 15626 yyy=`$run ./try`
b4eb6b3d
JH
15627 case "$yyy" in
15628 '') uidsize=4
15629 echo "(I can't execute the test program--guessing $uidsize.)" >&4
15630 ;;
15631 *) uidsize=$yyy
15632 echo "Your $zzz is $uidsize bytes long."
15633 ;;
15634 esac
15635else
15636 uidsize=4
15637 echo "(I can't compile the test program--guessing $uidsize.)" >&4
15638fi
15639
15640echo " "
15641case "$uidtype" in
15642*_t) zzz="$uidtype" ;;
15643*) zzz="uid" ;;
15644esac
15645echo "Checking the sign of $zzz..." >&4
15646cat > try.c <<EOCP
15647#include <sys/types.h>
15648#include <stdio.h>
15649int main() {
15650 $uidtype foo = -1;
15651 if (foo < 0)
15652 printf("-1\n");
15653 else
15654 printf("1\n");
15655}
15656EOCP
15657set try
15658if eval $compile; then
5440bc8e 15659 yyy=`$run ./try`
b4eb6b3d
JH
15660 case "$yyy" in
15661 '') uidsign=1
15662 echo "(I can't execute the test program--guessing unsigned.)" >&4
15663 ;;
15664 *) uidsign=$yyy
15665 case "$uidsign" in
15666 1) echo "Your $zzz is unsigned." ;;
15667 -1) echo "Your $zzz is signed." ;;
15668 esac
15669 ;;
15670 esac
15671else
15672 uidsign=1
15673 echo "(I can't compile the test program--guessing unsigned.)" >&4
15674fi
15675
15676
15677
15678echo " "
15679$echo "Checking the format string to be used for uids..." >&4
15680
15681case "$uidsign" in
15682-1) if $test X"$uidsize" = X"$ivsize"; then
15683 uidformat="$ivdformat"
15684 else
15685 if $test X"$uidsize" = X"$longsize"; then
15686 uidformat='"ld"'
15687 else
15688 if $test X"$uidsize" = X"$intsize"; then
15689 uidformat='"d"'
15690 else
15691 if $test X"$uidsize" = X"$shortsize"; then
15692 uidformat='"hd"'
15693 fi
15694 fi
15695 fi
15696 fi
15697 ;;
15698*) if $test X"$uidsize" = X"$uvsize"; then
15699 uidformat="$uvuformat"
15700 else
15701 if $test X"$uidsize" = X"$longsize"; then
15702 uidformat='"lu"'
15703 else
15704 if $test X"$uidsize" = X"$intsize"; then
15705 uidformat='"u"'
15706 else
15707 if $test X"$uidsize" = X"$shortsize"; then
15708 uidformat='"hu"'
15709 fi
15710 fi
15711 fi
15712 fi
15713 ;;
15714esac
15715
3659ebf1
JH
15716: determine compiler compiler
15717case "$yacc" in
15718'')
15719 dflt=yacc;;
15720*)
15721 dflt="$yacc";;
15722esac
15723echo " "
15724comp='yacc'
15725if $test -f "$byacc"; then
15726 dflt="$byacc"
15727 comp="byacc or $comp"
15728fi
15729if $test -f "$bison"; then
15730 comp="$comp or bison -y"
15731fi
15732rp="Which compiler compiler ($comp) shall I use?"
15733. ./myread
15734yacc="$ans"
15735case "$yacc" in
15736*bis*)
15737 case "$yacc" in
15738 *-y*) ;;
15739 *)
15740 yacc="$yacc -y"
15741 echo "(Adding -y option to bison to get yacc-compatible behaviour.)"
15742 ;;
15743 esac
15744 ;;
15745esac
15746
b4eb6b3d
JH
15747: see if fcntl.h is there
15748val=''
15749set fcntl.h val
15750eval $inhdr
15751
15752: see if we can include fcntl.h
15753case "$val" in
15754"$define")
15755 echo " "
15756 if $h_fcntl; then
15757 val="$define"
15758 echo "We'll be including <fcntl.h>." >&4
15759 else
15760 val="$undef"
15761 if $h_sysfile; then
15762 echo "We don't need to include <fcntl.h> if we include <sys/file.h>." >&4
15763 else
15764 echo "We won't be including <fcntl.h>." >&4
15765 fi
15766 fi
15767 ;;
15768*)
15769 h_fcntl=false
15770 val="$undef"
15771 ;;
15772esac
15773set i_fcntl
15774eval $setvar
15775
15776: see if this is a iconv.h system
15777set iconv.h i_iconv
15778eval $inhdr
15779
15780: see if this is a ieeefp.h system
15781set ieeefp.h i_ieeefp
15782eval $inhdr
15783
15784: see if this is a libutil.h system
15785set libutil.h i_libutil
15786eval $inhdr
15787
15788: see if locale.h is available
15789set locale.h i_locale
15790eval $inhdr
15791
15792: see if mach cthreads are available
15793if test "X$usethreads" = "X$define"; then
15794 set mach/cthreads.h i_machcthr
15795 eval $inhdr
15796else
15797 i_machcthr="$undef"
15798fi
15799
15800
15801
15802: see if this is a math.h system
15803set math.h i_math
15804eval $inhdr
15805
15806: see if this is a mntent.h system
15807set mntent.h i_mntent
15808eval $inhdr
15809
15810: see if ndbm.h is available
15811set ndbm.h t_ndbm
15812eval $inhdr
15813case "$t_ndbm" in
15814$define)
15815 : see if dbm_open exists
15816 set dbm_open d_dbm_open
15817 eval $inlibc
15818 case "$d_dbm_open" in
15819 $undef)
15820 t_ndbm="$undef"
15821 echo "We won't be including <ndbm.h>"
15822 ;;
15823 esac
15824 ;;
15825esac
15826val="$t_ndbm"
15827set i_ndbm
15828eval $setvar
15829
15830: see if net/errno.h is available
15831val=''
15832set net/errno.h val
15833eval $inhdr
15834
15835: Unfortunately, it causes problems on some systems. Arrgh.
15836case "$val" in
15837$define)
15838 cat > try.c <<'EOM'
15839#include <stdio.h>
15840#include <errno.h>
15841#include <net/errno.h>
15842int func()
15843{
15844 return ENOTSOCK;
15845}
15846EOM
15847 if $cc $ccflags -c try.c >/dev/null 2>&1; then
15848 echo "We'll be including <net/errno.h>." >&4
15849 else
15850 echo "We won't be including <net/errno.h>." >&4
15851 val="$undef"
15852 fi
15853 $rm -f try.* try
15854 ;;
15855esac
15856set i_neterrno
15857eval $setvar
15858
15859: see if netinet/tcp.h is available
15860set netinet/tcp.h i_netinettcp
15861eval $inhdr
15862
15863: see if this is a poll.h system
15864set poll.h i_poll
15865eval $inhdr
15866
15867: see if this is a prot.h system
15868set prot.h i_prot
15869eval $inhdr
15870
15871echo " "
15872$echo "Guessing which symbols your C compiler and preprocessor define..." >&4
15873$cat <<'EOSH' > Cppsym.know
15874a29k ABI64 aegis AES_SOURCE AIX AIX32 AIX370
15875AIX41 AIX42 AIX43 AIX_SOURCE aixpc ALL_SOURCE
d46c9a2d
JH
15876alliant alpha am29000 AM29000 AMD64 amiga AMIGAOS AMIX
15877ansi ANSI_C_SOURCE apollo ardent ARM32 atarist att386 att3b
15878BeOS BIG_ENDIAN BIT_MSF bsd BSD bsd43 bsd4_2 bsd4_3 BSD4_3 bsd4_4
b4eb6b3d
JH
15879BSD_4_3 BSD_4_4 BSD_NET2 BSD_TIME BSD_TYPES BSDCOMPAT bsdi
15880bull c cadmus clipper CMU COFF COMPILER_VERSION
15881concurrent convex cpu cray CRAY CRAYMPP ctix CX_UX
15882CYGWIN DGUX DGUX_SOURCE DJGPP dmert DOLPHIN DPX2 DSO
15883Dynix DynixPTX ELF encore EPI EXTENSIONS FILE_OFFSET_BITS
15884FreeBSD GCC_NEW_VARARGS gcos gcx gimpel
15885GNU_SOURCE GNUC GNUC_MINOR GO32 gould GOULD_PN
15886H3050R H3050RX hbullx20 hcx host_mips
15887hp200 hp300 hp700 HP700 hp800 hp9000
15888hp9000s200 hp9000s300 hp9000s400 hp9000s500
15889hp9000s700 hp9000s800 hp9k8 hp_osf hppa hpux HPUX_SOURCE
15890i186 i286 i386 i486 i586 i686 i8086 i80960 i860 I960
d46c9a2d 15891IA64 iAPX286 ibm ibm032 ibmesa IBMR2 ibmrt ILP32 ILP64
b4eb6b3d
JH
15892INLINE_INTRINSICS INTRINSICS INT64 interdata is68k ksr1
15893LANGUAGE_C LARGE_FILE_API LARGEFILE64_SOURCE
15894LARGEFILE_SOURCE LFS64_LARGEFILE LFS_LARGEFILE
15895Linux LITTLE_ENDIAN LONG64 LONG_DOUBLE LONG_LONG
15896LONGDOUBLE LONGLONG LP64 luna luna88k Lynx
15897M68000 m68k m88100 m88k M88KBCS_TARGET M_COFF
15898M_I186 M_I286 M_I386 M_I8086 M_I86 M_I86SM M_SYS3
15899M_SYS5 M_SYSIII M_SYSV M_UNIX M_XENIX MACH machine MachTen
15900MATH_HAS_NO_SIDE_EFFECTS
15901mc300 mc500 mc68000 mc68010 mc68020 mc68030 mc68040
15902mc68060 mc68k mc68k32 mc700 mc88000 mc88100 merlin
15903mert MiNT mips MIPS_FPSET MIPS_ISA MIPS_SIM MIPS_SZINT
15904MIPS_SZLONG MIPS_SZPTR MIPSEB MIPSEL MODERN_C motorola
15905mpeix MSDOS MTXINU MULTIMAX mvs MVS n16 ncl_el ncl_mr
15906NetBSD news1500 news1700 news1800 news1900 news3700
48bcfe03 15907news700 news800 news900 NeXT NLS nonstopux ns16000 ns32000
b4eb6b3d
JH
15908ns32016 ns32332 ns32k nsc32000
15909OCS88 OEMVS OpenBSD os OS2 OS390 osf OSF1 OSF_SOURCE
15910pa_risc PA_RISC1_1 PA_RISC2_0 PARAGON parisc
15911pc532 pdp11 PGC PIC plexus PORTAR posix
15912POSIX1B_SOURCE POSIX2_SOURCE POSIX4_SOURCE
15913POSIX_C_SOURCE POSIX_SOURCE POWER
15914PROTOTYPES PWB pyr QNX R3000 REENTRANT RES Rhapsody RISC6000
d46c9a2d 15915riscix riscos RT S390 SA110 scs SCO sequent sgi SGI_SOURCE SH3 sinix
b4eb6b3d
JH
15916SIZE_INT SIZE_LONG SIZE_PTR SOCKET_SOURCE SOCKETS_SOURCE
15917sony sony_news sonyrisc sparc sparclite spectrum
15918stardent stdc STDC_EXT stratos sun sun3 sun386
15919Sun386i svr3 svr4 SVR4_2 SVR4_SOURCE svr5
15920SX system SYSTYPE_BSD SYSTYPE_BSD43 SYSTYPE_BSD44
15921SYSTYPE_SVR4 SYSTYPE_SVR5 SYSTYPE_SYSV SYSV SYSV3 SYSV4 SYSV5
15922sysV68 sysV88 Tek4132 Tek4300 titan
d46c9a2d 15923TM3200 TM5400 TM5600
b4eb6b3d
JH
15924tower tower32 tower32_200 tower32_600 tower32_700
15925tower32_800 tower32_850 tss
15926u370 u3b u3b2 u3b20 u3b200 u3b20d u3b5
15927ultrix UMAXV UnicomPBB UnicomPBD UNICOS UNICOSMK
15928unix UNIX95 UNIX99 unixpc unos USGr4 USGr4_2
15929Utek UTek UTS UWIN uxpm uxps vax venix VMESA vms xenix Xenix286
15930XOPEN_SOURCE XOPEN_SOURCE_EXTENDED XPG2 XPG2_EXTENDED
15931XPG3 XPG3_EXTENDED XPG4 XPG4_EXTENDED
15932z8000
15933EOSH
15934# Maybe put other stuff here too.
15935cat <<EOSH >>Cppsym.know
15936$osname
15937EOSH
15938./tr '[a-z]' '[A-Z]' < Cppsym.know > Cppsym.a
15939./tr '[A-Z]' '[a-z]' < Cppsym.know > Cppsym.b
15940$cat Cppsym.know > Cppsym.c
381aa1ff 15941$cat Cppsym.a Cppsym.b Cppsym.c | $tr ' ' $trnl | $sort | $uniq > Cppsym.know
b4eb6b3d
JH
15942$rm -f Cppsym.a Cppsym.b Cppsym.c
15943cat <<EOSH > Cppsym
15944$startsh
15945if $test \$# -gt 0; then
15946 echo \$* | $tr " " "$trnl" | ./Cppsym.try > Cppsym.got
15947 if $test -s Cppsym.got; then
15948 $rm -f Cppsym.got
15949 exit 0
15950 fi
15951 $rm -f Cppsym.got
15952 exit 1
15953else
15954 $tr " " "$trnl" | ./Cppsym.try
15955 exit 0
15956fi
15957EOSH
15958chmod +x Cppsym
15959$eunicefix Cppsym
15960cat <<EOSH > Cppsym.try
15961$startsh
15962cat <<'EOCP' > try.c
15963#include <stdio.h>
15964int main() {
15965EOCP
15966$awk \\
15967EOSH
15968cat <<'EOSH' >> Cppsym.try
15969'length($1) > 0 {
2ef53570
JH
15970 printf "#ifdef %s\n#if %s+0\nprintf(\"%s=%%ld\\n\", (long)%s);\n#else\nprintf(\"%s\\n\");\n#endif\n#endif\n", $1, $1, $1, $1, $1
15971 printf "#ifdef _%s\n#if _%s+0\nprintf(\"_%s=%%ld\\n\", (long)_%s);\n#else\nprintf(\"_%s\\n\");\n#endif\n#endif\n", $1, $1, $1, $1, $1
15972 printf "#ifdef __%s\n#if __%s+0\nprintf(\"__%s=%%ld\\n\", (long)__%s);\n#else\nprintf(\"__%s\\n\");\n#endif\n#endif\n", $1, $1, $1, $1, $1
15973 printf "#ifdef __%s__\n#if __%s__+0\nprintf(\"__%s__=%%ld\\n\", (long)__%s__);\n#else\nprintf(\"__%s__\\n\");\n#endif\n#endif\n", $1, $1, $1, $1, $1
b4eb6b3d 15974}' >> try.c
2ef53570 15975echo 'return 0;}' >> try.c
b4eb6b3d
JH
15976EOSH
15977cat <<EOSH >> Cppsym.try
15978ccflags="$ccflags"
15979case "$osname-$gccversion" in
15980irix-) ccflags="\$ccflags -woff 1178" ;;
15981os2-*) ccflags="\$ccflags -Zlinker /PM:VIO" ;;
15982esac
5440bc8e 15983$cc -o try $optimize \$ccflags $ldflags try.c $libs && $run ./try
b4eb6b3d
JH
15984EOSH
15985chmod +x Cppsym.try
15986$eunicefix Cppsym.try
15987./Cppsym < Cppsym.know > Cppsym.true
15988: now check the C compiler for additional symbols
15989postprocess_cc_v=''
15990case "$osname" in
15991aix) postprocess_cc_v="|$tr , ' '" ;;
15992esac
15993$cat >ccsym <<EOS
15994$startsh
15995$cat >tmp.c <<EOF
15996extern int foo;
15997EOF
15998for i in \`$cc -v -c tmp.c 2>&1 $postprocess_cc_v\`
15999do
16000 case "\$i" in
16001 -D*) echo "\$i" | $sed 's/^-D//';;
16002 -A*) $test "$gccversion" && echo "\$i" | $sed 's/^-A\(.*\)(\(.*\))/\1=\2/';;
16003 esac
16004done
16005$rm -f try.c
16006EOS
16007postprocess_cc_v=''
16008chmod +x ccsym
16009$eunicefix ccsym
16010./ccsym > ccsym1.raw
16011if $test -s ccsym1.raw; then
16012 $sort ccsym1.raw | $uniq >ccsym.raw
16013else
16014 mv ccsym1.raw ccsym.raw
16015fi
16016
16017$awk '/\=/ { print $0; next }
16018 { print $0"=1" }' ccsym.raw >ccsym.list
16019$awk '/\=/ { print $0; next }
16020 { print $0"=1" }' Cppsym.true >ccsym.true
16021$comm -13 ccsym.true ccsym.list >ccsym.own
16022$comm -12 ccsym.true ccsym.list >ccsym.com
16023$comm -23 ccsym.true ccsym.list >ccsym.cpp
16024also=''
16025if $test -z ccsym.raw; then
16026 echo "Your C compiler doesn't seem to define any symbols!" >&4
16027 echo " "
16028 echo "However, your C preprocessor defines the following symbols:"
16029 $cat Cppsym.true
16030 ccsymbols=''
16031 cppsymbols=`$cat Cppsym.true`
16032 cppsymbols=`echo $cppsymbols`
16033 cppccsymbols="$cppsymbols"
16034else
16035 if $test -s ccsym.com; then
16036 echo "Your C compiler and pre-processor define these symbols:"
16037 $sed -e 's/\(..*\)=.*/\1/' ccsym.com
16038 also='also '
16039 symbols='ones'
16040 cppccsymbols=`$cat ccsym.com`
16041 cppccsymbols=`echo $cppccsymbols`
16042 $test "$silent" || sleep 1
16043 fi
16044 if $test -s ccsym.cpp; then
16045 $test "$also" && echo " "
16046 echo "Your C pre-processor ${also}defines the following symbols:"
16047 $sed -e 's/\(..*\)=.*/\1/' ccsym.cpp
16048 also='further '
16049 cppsymbols=`$cat ccsym.cpp`
16050 cppsymbols=`echo $cppsymbols`
16051 $test "$silent" || sleep 1
16052 fi
16053 if $test -s ccsym.own; then
16054 $test "$also" && echo " "
16055 echo "Your C compiler ${also}defines the following cpp symbols:"
16056 $sed -e 's/\(..*\)=1/\1/' ccsym.own
16057 $sed -e 's/\(..*\)=.*/\1/' ccsym.own | $uniq >>Cppsym.true
16058 ccsymbols=`$cat ccsym.own`
16059 ccsymbols=`echo $ccsymbols`
16060 $test "$silent" || sleep 1
16061 fi
16062fi
b4eb6b3d
JH
16063
16064: see if this is a termio system
16065val="$undef"
16066val2="$undef"
16067val3="$undef"
16068if $test `./findhdr termios.h`; then
16069 set tcsetattr i_termios
16070 eval $inlibc
16071 val3="$i_termios"
16072fi
16073echo " "
16074case "$val3" in
16075"$define") echo "You have POSIX termios.h... good!" >&4;;
16076*) if ./Cppsym pyr; then
16077 case "`/bin/universe`" in
16078 ucb) if $test `./findhdr sgtty.h`; then
16079 val2="$define"
16080 echo "<sgtty.h> found." >&4
16081 else
16082 echo "System is pyramid with BSD universe."
16083 echo "<sgtty.h> not found--you could have problems." >&4
16084 fi;;
16085 *) if $test `./findhdr termio.h`; then
16086 val="$define"
16087 echo "<termio.h> found." >&4
16088 else
16089 echo "System is pyramid with USG universe."
16090 echo "<termio.h> not found--you could have problems." >&4
16091 fi;;
16092 esac
16093 elif ./usg; then
16094 if $test `./findhdr termio.h`; then
16095 echo "<termio.h> found." >&4
16096 val="$define"
16097 elif $test `./findhdr sgtty.h`; then
16098 echo "<sgtty.h> found." >&4
16099 val2="$define"
16100 else
16101echo "Neither <termio.h> nor <sgtty.h> found--you could have problems." >&4
16102 fi
16103 else
16104 if $test `./findhdr sgtty.h`; then
16105 echo "<sgtty.h> found." >&4
16106 val2="$define"
16107 elif $test `./findhdr termio.h`; then
16108 echo "<termio.h> found." >&4
16109 val="$define"
16110 else
16111echo "Neither <sgtty.h> nor <termio.h> found--you could have problems." >&4
16112 fi
16113 fi;;
16114esac
16115set i_termio; eval $setvar
16116val=$val2; set i_sgtty; eval $setvar
16117val=$val3; set i_termios; eval $setvar
16118
16119: see if this is a shadow.h system
16120set shadow.h i_shadow
16121eval $inhdr
16122
b4eb6b3d
JH
16123: see if stddef is available
16124set stddef.h i_stddef
16125eval $inhdr
923fc586 16126
b4eb6b3d
JH
16127: see if this is a sunmath.h system
16128set sunmath.h i_sunmath
16129eval $inhdr
5f80c64f 16130
b4eb6b3d
JH
16131: see if sys/access.h is available
16132set sys/access.h i_sysaccess
16133eval $inhdr
16134
16135: see if ioctl defs are in sgtty, termio, sys/filio or sys/ioctl
16136set sys/filio.h i_sysfilio
16137eval $inhdr
16138echo " "
16139if $test `./findhdr sys/ioctl.h`; then
16140 val="$define"
16141 echo '<sys/ioctl.h> found.' >&4
16142else
16143 val="$undef"
16144 if $test $i_sysfilio = "$define"; then
16145 echo '<sys/ioctl.h> NOT found.' >&4
5f80c64f 16146 else
b4eb6b3d
JH
16147 $test $i_sgtty = "$define" && xxx="sgtty.h"
16148 $test $i_termio = "$define" && xxx="termio.h"
16149 $test $i_termios = "$define" && xxx="termios.h"
16150echo "No <sys/ioctl.h> found, assuming ioctl args are defined in <$xxx>." >&4
16151 fi
16152fi
16153set i_sysioctl
16154eval $setvar
16155
49a78c82
JH
16156: see if socket ioctl defs are in sys/sockio.h
16157echo " "
16158xxx=`./findhdr sys/sockio.h`
16159if $test "$xxx"; then
16160 if $contains SIOCATMARK $xxx >/dev/null 2>&1; then
16161 val="$define"
16162 echo "You have socket ioctls defined in <sys/sockio.h>." >&4
16163 else
16164 val="$undef"
16165 echo "No socket ioctls found in <sys/sockio.h>." >&4
16166 fi
16167else
16168 val="$undef"
16169 $cat <<EOM
16170<sys/sockio.h> not found, assuming socket ioctls are in <sys/ioctl.h>.
16171EOM
16172fi
16173set i_syssockio
16174eval $setvar
16175
b4eb6b3d
JH
16176
16177: see if this is a syslog.h system
16178set syslog.h i_syslog
16179eval $inhdr
16180
16181
16182: see if this is a sys/mode.h system
16183set sys/mode.h i_sysmode
16184eval $inhdr
16185
16186: see if sys/resource.h has to be included
16187set sys/resource.h i_sysresrc
16188eval $inhdr
16189
16190: see if sys/security.h is available
16191set sys/security.h i_syssecrt
16192eval $inhdr
16193
16194: see if this is a sys/statvfs.h system
16195set sys/statvfs.h i_sysstatvfs
16196eval $inhdr
16197
b4eb6b3d
JH
16198: see if this is a sys/un.h system
16199set sys/un.h i_sysun
16200eval $inhdr
16201
16202
16203: see if this is a sys/utsname.h system
16204set sys/utsname.h i_sysutsname
16205eval $inhdr
16206
16207: see if this is a syswait system
16208set sys/wait.h i_syswait
16209eval $inhdr
16210
16211: see if this is a ustat.h system
16212set ustat.h i_ustat
16213eval $inhdr
16214
16215: see if this is an utime system
16216set utime.h i_utime
16217eval $inhdr
16218
16219: see if this is a values.h system
16220set values.h i_values
16221eval $inhdr
16222
16223: see if this is a vfork system
16224case "$d_vfork" in
16225"$define")
16226 set vfork.h i_vfork
16227 eval $inhdr
16228 ;;
16229*)
16230 i_vfork="$undef"
16231 ;;
16232esac
16233
16234: see if gdbm.h is available
16235set gdbm.h t_gdbm
16236eval $inhdr
16237case "$t_gdbm" in
16238$define)
16239 : see if gdbm_open exists
16240 set gdbm_open d_gdbm_open
16241 eval $inlibc
16242 case "$d_gdbm_open" in
16243 $undef)
16244 t_gdbm="$undef"
16245 echo "We won't be including <gdbm.h>"
5f80c64f 16246 ;;
b4eb6b3d
JH
16247 esac
16248 ;;
16249esac
16250val="$t_gdbm"
16251set i_gdbm
16252eval $setvar
16253
16254echo " "
16255echo "Looking for extensions..." >&4
16256: If we are using the old config.sh, known_extensions may contain
16257: old or inaccurate or duplicate values.
16258known_extensions=''
16259nonxs_extensions=''
16260: We do not use find because it might not be available.
16261: We do not just use MANIFEST because the user may have dropped
16262: some additional extensions into the source tree and expect them
16263: to be built.
16264
16265: Function to recursively find available extensions, ignoring DynaLoader
16266: NOTE: recursion limit of 10 to prevent runaway in case of symlink madness
16267find_extensions='
16268 for xxx in *; do
16269 case "$xxx" in
16270 DynaLoader|dynaload) ;;
16271 *)
16272 if $test -f $xxx/$xxx.xs; then
16273 known_extensions="$known_extensions $1$xxx";
16274 elif $test -f $xxx/Makefile.PL; then
16275 nonxs_extensions="$nonxs_extensions $1$xxx";
16276 else
16277 if $test -d $xxx -a $# -lt 10; then
16278 set $1$xxx/ $*;
16279 cd $xxx;
16280 eval $find_extensions;
16281 cd ..;
16282 shift;
16283 fi;
16284 fi
16285 ;;
16286 esac;
16287 done'
16288tdir=`pwd`
16289cd $rsrc/ext
16290set X
16291shift
16292eval $find_extensions
16293set X $nonxs_extensions
16294shift
16295nonxs_extensions="$*"
16296set X $known_extensions
16297shift
16298known_extensions="$*"
16299cd $tdir
16300
16301: Now see which are supported on this system.
16302avail_ext=''
16303for xxx in $known_extensions ; do
16304 case "$xxx" in
16305 DB_File|db_file)
16306 case "$i_db" in
16307 $define) avail_ext="$avail_ext $xxx" ;;
16308 esac
16309 ;;
16310 GDBM_File|gdbm_fil)
16311 case "$i_gdbm" in
16312 $define) avail_ext="$avail_ext $xxx" ;;
16313 esac
16314 ;;
1d59c593 16315 I18N/Langinfo|i18n_lan)
4bbcc6e8
JH
16316 case "$i_langinfo$d_nl_langinfo" in
16317 $define$define) avail_ext="$avail_ext $xxx" ;;
16318 esac
16319 ;;
b4eb6b3d
JH
16320 NDBM_File|ndbm_fil)
16321 case "$i_ndbm" in
16322 $define)
16323 case "$osname-$use64bitint" in
252f4fb1 16324 cygwin-*|hpux-define)
b4eb6b3d
JH
16325 case "$libs" in
16326 *-lndbm*) avail_ext="$avail_ext $xxx" ;;
16327 esac
16328 ;;
16329 *) avail_ext="$avail_ext $xxx" ;;
16330 esac
16331 ;;
16332 esac
16333 ;;
16334 ODBM_File|odbm_fil)
16335 case "${i_dbm}${i_rpcsvcdbm}" in
16336 *"${define}"*)
16337 case "$osname-$use64bitint" in
252f4fb1 16338 cygwin-*|hpux-define)
b4eb6b3d
JH
16339 case "$libs" in
16340 *-ldbm*) avail_ext="$avail_ext $xxx" ;;
16341 esac
16342 ;;
16343 *) avail_ext="$avail_ext $xxx" ;;
16344 esac
16345 ;;
16346 esac
16347 ;;
16348 POSIX|posix)
16349 case "$useposix" in
16350 true|define|y) avail_ext="$avail_ext $xxx" ;;
16351 esac
16352 ;;
16353 Opcode|opcode)
16354 case "$useopcode" in
16355 true|define|y) avail_ext="$avail_ext $xxx" ;;
16356 esac
16357 ;;
16358 Socket|socket)
16359 case "$d_socket" in
16360 true|$define|y) avail_ext="$avail_ext $xxx" ;;
16361 esac
16362 ;;
16363 Sys/Syslog|sys/syslog)
16364 : XXX syslog requires socket
16365 case "$d_socket" in
16366 true|$define|y) avail_ext="$avail_ext $xxx" ;;
16367 esac
16368 ;;
16369 Thread|thread)
b00ec89b
AB
16370 case "$usethreads" in
16371 true|$define|y)
16372 case "$useithreads" in
16373 $undef|false|[nN]*) avail_ext="$avail_ext $xxx" ;;
16374 esac
b4eb6b3d
JH
16375 esac
16376 ;;
16377 IPC/SysV|ipc/sysv)
16378 : XXX Do we need a useipcsysv variable here
16379 case "${d_msg}${d_sem}${d_shm}" in
16380 *"${define}"*) avail_ext="$avail_ext $xxx" ;;
16381 esac
16382 ;;
16383 *) avail_ext="$avail_ext $xxx"
5f80c64f
JH
16384 ;;
16385 esac
b4eb6b3d 16386done
5f80c64f 16387
b4eb6b3d
JH
16388set X $avail_ext
16389shift
16390avail_ext="$*"
5f80c64f 16391
b4eb6b3d
JH
16392: Now see which nonxs extensions are supported on this system.
16393: For now assume all are.
16394nonxs_ext=''
16395for xxx in $nonxs_extensions ; do
16396 case "$xxx" in
16397 *) nonxs_ext="$nonxs_ext $xxx"
16398 ;;
16399 esac
16400done
5f80c64f 16401
b4eb6b3d
JH
16402set X $nonxs_ext
16403shift
16404nonxs_ext="$*"
16405
16406case $usedl in
16407$define)
16408 $cat <<EOM
16409A number of extensions are supplied with $package. You may choose to
16410compile these extensions for dynamic loading (the default), compile
16411them into the $package executable (static loading), or not include
16412them at all. Answer "none" to include no extensions.
16413Note that DynaLoader is always built and need not be mentioned here.
5f80c64f
JH
16414
16415EOM
b4eb6b3d
JH
16416 case "$dynamic_ext" in
16417 '') dflt="$avail_ext" ;;
16418 *) dflt="$dynamic_ext"
16419 # Perhaps we are reusing an old out-of-date config.sh.
16420 case "$hint" in
16421 previous)
16422 if test X"$dynamic_ext" != X"$avail_ext"; then
16423 $cat <<EOM
16424NOTICE: Your previous config.sh list may be incorrect.
16425The extensions now available to you are
16426 ${avail_ext}
16427but the default list from your previous config.sh is
16428 ${dynamic_ext}
9c839522 16429
b4eb6b3d
JH
16430EOM
16431 fi
9c839522
PM
16432 ;;
16433 esac
b4eb6b3d
JH
16434 ;;
16435 esac
5f80c64f 16436 case "$dflt" in
b4eb6b3d
JH
16437 '') dflt=none;;
16438 esac
16439 rp="What extensions do you wish to load dynamically?"
16440 . ./myread
16441 case "$ans" in
16442 none) dynamic_ext=' ' ;;
16443 *) dynamic_ext="$ans" ;;
5f80c64f 16444 esac
5f80c64f 16445
b4eb6b3d
JH
16446 case "$static_ext" in
16447 '')
16448 : Exclude those already listed in dynamic linking
16449 dflt=''
16450 for xxx in $avail_ext; do
16451 case " $dynamic_ext " in
16452 *" $xxx "*) ;;
16453 *) dflt="$dflt $xxx" ;;
16454 esac
16455 done
16456 set X $dflt
16457 shift
16458 dflt="$*"
16459 ;;
16460 *) dflt="$static_ext"
16461 ;;
16462 esac
9c839522 16463
b4eb6b3d
JH
16464 case "$dflt" in
16465 '') dflt=none;;
16466 esac
16467 rp="What extensions do you wish to load statically?"
16468 . ./myread
16469 case "$ans" in
16470 none) static_ext=' ' ;;
16471 *) static_ext="$ans" ;;
16472 esac
16473 ;;
16474*)
16475 $cat <<EOM
16476A number of extensions are supplied with $package. Answer "none"
16477to include no extensions.
16478Note that DynaLoader is always built and need not be mentioned here.
9c839522 16479
b4eb6b3d
JH
16480EOM
16481 case "$static_ext" in
16482 '') dflt="$avail_ext" ;;
16483 *) dflt="$static_ext"
16484 # Perhaps we are reusing an old out-of-date config.sh.
16485 case "$hint" in
16486 previous)
16487 if test X"$static_ext" != X"$avail_ext"; then
16488 $cat <<EOM
16489NOTICE: Your previous config.sh list may be incorrect.
16490The extensions now available to you are
16491 ${avail_ext}
16492but the default list from your previous config.sh is
16493 ${static_ext}
5f80c64f
JH
16494
16495EOM
b4eb6b3d
JH
16496 fi
16497 ;;
16498 esac
16499 ;;
16500 esac
16501 : Exclude those that are not xs extensions
16502 case "$dflt" in
16503 '') dflt=none;;
16504 esac
16505 rp="What extensions do you wish to include?"
16506 . ./myread
16507 case "$ans" in
16508 none) static_ext=' ' ;;
16509 *) static_ext="$ans" ;;
16510 esac
16511 ;;
5f80c64f
JH
16512esac
16513
b4eb6b3d
JH
16514set X $dynamic_ext $static_ext $nonxs_ext
16515shift
16516extensions="$*"
16517
9c839522
PM
16518: Remove libraries needed only for extensions
16519: The appropriate ext/Foo/Makefile.PL will add them back in, if necessary.
eedaba54
PM
16520: The exception is SunOS 4.x, which needs them.
16521case "${osname}X${osvers}" in
16522sunos*X4*)
16523 perllibs="$libs"
16524 ;;
16525*) case "$usedl" in
16526 $define|true|[yY]*)
16527 set X `echo " $libs " | sed -e 's@ -lndbm @ @' -e 's@ -lgdbm @ @' -e 's@ -ldbm @ @' -e 's@ -ldb @ @'`
16528 shift
16529 perllibs="$*"
16530 ;;
16531 *) perllibs="$libs"
16532 ;;
16533 esac
16534 ;;
9c839522 16535esac
5f80c64f
JH
16536
16537: Remove build directory name from cppstdin so it can be used from
16538: either the present location or the final installed location.
16539echo " "
16540: Get out of the UU directory to get correct path name.
16541cd ..
16542case "$cppstdin" in
16543`pwd`/cppstdin)
16544 echo "Stripping down cppstdin path name"
16545 cppstdin=cppstdin
16546 ;;
16547esac
16548cd UU
16549
16550: end of configuration questions
16551echo " "
16552echo "End of configuration questions."
16553echo " "
16554
16555: back to where it started
16556if test -d ../UU; then
16557 cd ..
16558fi
16559
16560: configuration may be patched via a 'config.over' file
16561if $test -f config.over; then
16562 echo " "
16563 dflt=y
16564 rp='I see a config.over file. Do you wish to load it?'
16565 . UU/myread
16566 case "$ans" in
16567 n*) echo "OK, I'll ignore it.";;
16568 *) . ./config.over
16569 echo "Configuration override changes have been loaded."
16570 ;;
16571 esac
16572fi
16573
16574: in case they want portability, strip down executable paths
16575case "$d_portable" in
16576"$define")
16577 echo " "
16578 echo "Stripping down executable paths..." >&4
16579 for file in $loclist $trylist; do
534ac15a
JH
16580 eval temp=\$$file
16581 eval $file=`basename $temp`
5f80c64f
JH
16582 done
16583 ;;
16584esac
16585
16586: create config.sh file
16587echo " "
16588echo "Creating config.sh..." >&4
16589$spitshell <<EOT >config.sh
16590$startsh
16591#
16592# This file was produced by running the Configure script. It holds all the
16593# definitions figured out by Configure. Should you modify one of these values,
16594# do not forget to propagate your changes by running "Configure -der". You may
16595# instead choose to run each of the .SH files by yourself, or "Configure -S".
16596#
16597
16598# Package name : $package
16599# Source directory : $src
16600# Configuration time: $cf_time
16601# Configured by : $cf_by
16602# Target system : $myuname
16603
16604Author='$Author'
16605Date='$Date'
16606Header='$Header'
16607Id='$Id'
16608Locker='$Locker'
16609Log='$Log'
16610Mcc='$Mcc'
16611RCSfile='$RCSfile'
16612Revision='$Revision'
16613Source='$Source'
16614State='$State'
16615_a='$_a'
16616_exe='$_exe'
16617_o='$_o'
b4eb6b3d 16618afs='$afs'
a6d26a0d 16619afsroot='$afsroot'
b4eb6b3d
JH
16620alignbytes='$alignbytes'
16621ansi2knr='$ansi2knr'
16622aphostname='$aphostname'
16623api_revision='$api_revision'
16624api_subversion='$api_subversion'
16625api_version='$api_version'
16626api_versionstring='$api_versionstring'
5f80c64f 16627ar='$ar'
b4eb6b3d
JH
16628archlib='$archlib'
16629archlibexp='$archlibexp'
16630archname64='$archname64'
16631archname='$archname'
5f80c64f
JH
16632archobjs='$archobjs'
16633awk='$awk'
b4eb6b3d 16634baserev='$baserev'
5f80c64f 16635bash='$bash'
b4eb6b3d
JH
16636bin='$bin'
16637bincompat5005='$bincompat5005'
16638binexp='$binexp'
5f80c64f
JH
16639bison='$bison'
16640byacc='$byacc'
b4eb6b3d 16641byteorder='$byteorder'
5f80c64f 16642c='$c'
b4eb6b3d 16643castflags='$castflags'
5f80c64f
JH
16644cat='$cat'
16645cc='$cc'
16646cccdlflags='$cccdlflags'
16647ccdlflags='$ccdlflags'
16648ccflags='$ccflags'
b4eb6b3d 16649ccflags_uselargefiles='$ccflags_uselargefiles'
e723fc21 16650ccname='$ccname'
b4eb6b3d 16651ccsymbols='$ccsymbols'
6b356c8e 16652ccversion='$ccversion'
5f80c64f 16653cf_by='$cf_by'
b4eb6b3d 16654cf_email='$cf_email'
5f80c64f 16655cf_time='$cf_time'
b4eb6b3d 16656charsize='$charsize'
5f80c64f
JH
16657chgrp='$chgrp'
16658chmod='$chmod'
16659chown='$chown'
b4eb6b3d 16660clocktype='$clocktype'
5f80c64f
JH
16661comm='$comm'
16662compress='$compress'
16663contains='$contains'
16664cp='$cp'
16665cpio='$cpio'
16666cpp='$cpp'
b4eb6b3d
JH
16667cpp_stuff='$cpp_stuff'
16668cppccsymbols='$cppccsymbols'
5f80c64f
JH
16669cppflags='$cppflags'
16670cpplast='$cpplast'
16671cppminus='$cppminus'
16672cpprun='$cpprun'
16673cppstdin='$cppstdin'
b4eb6b3d 16674cppsymbols='$cppsymbols'
b4eb6b3d 16675cryptlib='$cryptlib'
5f80c64f 16676csh='$csh'
b4eb6b3d
JH
16677d_Gconvert='$d_Gconvert'
16678d_PRIEUldbl='$d_PRIEUldbl'
16679d_PRIFUldbl='$d_PRIFUldbl'
16680d_PRIGUldbl='$d_PRIGUldbl'
16681d_PRIXU64='$d_PRIXU64'
16682d_PRId64='$d_PRId64'
16683d_PRIeldbl='$d_PRIeldbl'
16684d_PRIfldbl='$d_PRIfldbl'
16685d_PRIgldbl='$d_PRIgldbl'
16686d_PRIi64='$d_PRIi64'
16687d_PRIo64='$d_PRIo64'
16688d_PRIu64='$d_PRIu64'
16689d_PRIx64='$d_PRIx64'
16690d_SCNfldbl='$d_SCNfldbl'
74cac757 16691d__fwalk='$d__fwalk'
b4eb6b3d
JH
16692d_access='$d_access'
16693d_accessx='$d_accessx'
16694d_alarm='$d_alarm'
16695d_archlib='$d_archlib'
16696d_atolf='$d_atolf'
16697d_atoll='$d_atoll'
16698d_attribut='$d_attribut'
16699d_bcmp='$d_bcmp'
16700d_bcopy='$d_bcopy'
16701d_bincompat5005='$d_bincompat5005'
5f80c64f 16702d_bsd='$d_bsd'
b4eb6b3d
JH
16703d_bsdgetpgrp='$d_bsdgetpgrp'
16704d_bsdsetpgrp='$d_bsdsetpgrp'
16705d_bzero='$d_bzero'
16706d_casti32='$d_casti32'
16707d_castneg='$d_castneg'
16708d_charvspr='$d_charvspr'
16709d_chown='$d_chown'
16710d_chroot='$d_chroot'
16711d_chsize='$d_chsize'
16712d_closedir='$d_closedir'
4e0554ec 16713d_cmsghdr_s='$d_cmsghdr_s'
b4eb6b3d
JH
16714d_const='$d_const'
16715d_crypt='$d_crypt'
16716d_csh='$d_csh'
16717d_cuserid='$d_cuserid'
16718d_dbl_dig='$d_dbl_dig'
2ef53570 16719d_dbminitproto='$d_dbminitproto'
b4eb6b3d
JH
16720d_difftime='$d_difftime'
16721d_dirnamlen='$d_dirnamlen'
16722d_dlerror='$d_dlerror'
5f80c64f 16723d_dlopen='$d_dlopen'
b4eb6b3d
JH
16724d_dlsymun='$d_dlsymun'
16725d_dosuid='$d_dosuid'
16726d_drand48proto='$d_drand48proto'
16727d_dup2='$d_dup2'
16728d_eaccess='$d_eaccess'
16729d_endgrent='$d_endgrent'
16730d_endhent='$d_endhent'
16731d_endnent='$d_endnent'
16732d_endpent='$d_endpent'
16733d_endpwent='$d_endpwent'
16734d_endsent='$d_endsent'
16735d_eofnblk='$d_eofnblk'
5f80c64f 16736d_eunice='$d_eunice'
b363b713 16737d_fchdir='$d_fchdir'
b4eb6b3d
JH
16738d_fchmod='$d_fchmod'
16739d_fchown='$d_fchown'
16740d_fcntl='$d_fcntl'
9d9004a9 16741d_fcntl_can_lock='$d_fcntl_can_lock'
b4eb6b3d
JH
16742d_fd_macros='$d_fd_macros'
16743d_fd_set='$d_fd_set'
16744d_fds_bits='$d_fds_bits'
16745d_fgetpos='$d_fgetpos'
16746d_flexfnam='$d_flexfnam'
16747d_flock='$d_flock'
2ef53570 16748d_flockproto='$d_flockproto'
b4eb6b3d
JH
16749d_fork='$d_fork'
16750d_fpathconf='$d_fpathconf'
16751d_fpos64_t='$d_fpos64_t'
16752d_frexpl='$d_frexpl'
16753d_fs_data_s='$d_fs_data_s'
16754d_fseeko='$d_fseeko'
16755d_fsetpos='$d_fsetpos'
16756d_fstatfs='$d_fstatfs'
16757d_fstatvfs='$d_fstatvfs'
411ab01c 16758d_fsync='$d_fsync'
b4eb6b3d
JH
16759d_ftello='$d_ftello'
16760d_ftime='$d_ftime'
16761d_getcwd='$d_getcwd'
16762d_getespwnam='$d_getespwnam'
16763d_getfsstat='$d_getfsstat'
16764d_getgrent='$d_getgrent'
16765d_getgrps='$d_getgrps'
16766d_gethbyaddr='$d_gethbyaddr'
16767d_gethbyname='$d_gethbyname'
16768d_gethent='$d_gethent'
16769d_gethname='$d_gethname'
16770d_gethostprotos='$d_gethostprotos'
4e0554ec 16771d_getitimer='$d_getitimer'
b4eb6b3d
JH
16772d_getlogin='$d_getlogin'
16773d_getmnt='$d_getmnt'
16774d_getmntent='$d_getmntent'
16775d_getnbyaddr='$d_getnbyaddr'
16776d_getnbyname='$d_getnbyname'
16777d_getnent='$d_getnent'
16778d_getnetprotos='$d_getnetprotos'
0c0643d0 16779d_getpagsz='$d_getpagsz'
b4eb6b3d
JH
16780d_getpbyname='$d_getpbyname'
16781d_getpbynumber='$d_getpbynumber'
16782d_getpent='$d_getpent'
16783d_getpgid='$d_getpgid'
16784d_getpgrp2='$d_getpgrp2'
16785d_getpgrp='$d_getpgrp'
16786d_getppid='$d_getppid'
16787d_getprior='$d_getprior'
16788d_getprotoprotos='$d_getprotoprotos'
16789d_getprpwnam='$d_getprpwnam'
16790d_getpwent='$d_getpwent'
16791d_getsbyname='$d_getsbyname'
16792d_getsbyport='$d_getsbyport'
16793d_getsent='$d_getsent'
16794d_getservprotos='$d_getservprotos'
16795d_getspnam='$d_getspnam'
16796d_gettimeod='$d_gettimeod'
5f80c64f 16797d_gnulibc='$d_gnulibc'
b4eb6b3d
JH
16798d_grpasswd='$d_grpasswd'
16799d_hasmntopt='$d_hasmntopt'
16800d_htonl='$d_htonl'
16801d_iconv='$d_iconv'
16802d_index='$d_index'
16803d_inetaton='$d_inetaton'
16804d_int64_t='$d_int64_t'
16805d_isascii='$d_isascii'
16806d_isnan='$d_isnan'
16807d_isnanl='$d_isnanl'
16808d_killpg='$d_killpg'
16809d_lchown='$d_lchown'
16810d_ldbl_dig='$d_ldbl_dig'
16811d_link='$d_link'
16812d_locconv='$d_locconv'
16813d_lockf='$d_lockf'
16814d_longdbl='$d_longdbl'
16815d_longlong='$d_longlong'
16816d_lseekproto='$d_lseekproto'
16817d_lstat='$d_lstat'
16818d_madvise='$d_madvise'
16819d_mblen='$d_mblen'
16820d_mbstowcs='$d_mbstowcs'
16821d_mbtowc='$d_mbtowc'
16822d_memchr='$d_memchr'
16823d_memcmp='$d_memcmp'
16824d_memcpy='$d_memcpy'
16825d_memmove='$d_memmove'
16826d_memset='$d_memset'
16827d_mkdir='$d_mkdir'
16828d_mkdtemp='$d_mkdtemp'
16829d_mkfifo='$d_mkfifo'
16830d_mkstemp='$d_mkstemp'
16831d_mkstemps='$d_mkstemps'
16832d_mktime='$d_mktime'
16833d_mmap='$d_mmap'
16834d_modfl='$d_modfl'
e67aeab1 16835d_modfl_pow32_bug='$d_modfl_pow32_bug'
b4eb6b3d
JH
16836d_mprotect='$d_mprotect'
16837d_msg='$d_msg'
16838d_msg_ctrunc='$d_msg_ctrunc'
16839d_msg_dontroute='$d_msg_dontroute'
16840d_msg_oob='$d_msg_oob'
16841d_msg_peek='$d_msg_peek'
16842d_msg_proxy='$d_msg_proxy'
16843d_msgctl='$d_msgctl'
16844d_msgget='$d_msgget'
4e0554ec 16845d_msghdr_s='$d_msghdr_s'
b4eb6b3d
JH
16846d_msgrcv='$d_msgrcv'
16847d_msgsnd='$d_msgsnd'
16848d_msync='$d_msync'
16849d_munmap='$d_munmap'
16850d_mymalloc='$d_mymalloc'
16851d_nice='$d_nice'
2765b840 16852d_nl_langinfo='$d_nl_langinfo'
b4eb6b3d
JH
16853d_nv_preserves_uv='$d_nv_preserves_uv'
16854d_nv_preserves_uv_bits='$d_nv_preserves_uv_bits'
16855d_off64_t='$d_off64_t'
16856d_old_pthread_create_joinable='$d_old_pthread_create_joinable'
16857d_oldpthreads='$d_oldpthreads'
16858d_oldsock='$d_oldsock'
16859d_open3='$d_open3'
16860d_pathconf='$d_pathconf'
16861d_pause='$d_pause'
16862d_perl_otherlibdirs='$d_perl_otherlibdirs'
16863d_phostname='$d_phostname'
16864d_pipe='$d_pipe'
16865d_poll='$d_poll'
5f80c64f 16866d_portable='$d_portable'
d6483fcc 16867d_pthread_atfork='$d_pthread_atfork'
b4eb6b3d
JH
16868d_pthread_yield='$d_pthread_yield'
16869d_pwage='$d_pwage'
16870d_pwchange='$d_pwchange'
16871d_pwclass='$d_pwclass'
16872d_pwcomment='$d_pwcomment'
16873d_pwexpire='$d_pwexpire'
16874d_pwgecos='$d_pwgecos'
16875d_pwpasswd='$d_pwpasswd'
16876d_pwquota='$d_pwquota'
16877d_qgcvt='$d_qgcvt'
16878d_quad='$d_quad'
16879d_readdir='$d_readdir'
16880d_readlink='$d_readlink'
4e0554ec
JH
16881d_readv='$d_readv'
16882d_recvmsg='$d_recvmsg'
b4eb6b3d
JH
16883d_rename='$d_rename'
16884d_rewinddir='$d_rewinddir'
16885d_rmdir='$d_rmdir'
16886d_safebcpy='$d_safebcpy'
16887d_safemcpy='$d_safemcpy'
16888d_sanemcmp='$d_sanemcmp'
ef9f17be 16889d_sbrkproto='$d_sbrkproto'
b4eb6b3d
JH
16890d_sched_yield='$d_sched_yield'
16891d_scm_rights='$d_scm_rights'
16892d_seekdir='$d_seekdir'
16893d_select='$d_select'
16894d_sem='$d_sem'
16895d_semctl='$d_semctl'
16896d_semctl_semid_ds='$d_semctl_semid_ds'
16897d_semctl_semun='$d_semctl_semun'
16898d_semget='$d_semget'
16899d_semop='$d_semop'
4e0554ec 16900d_sendmsg='$d_sendmsg'
b4eb6b3d
JH
16901d_setegid='$d_setegid'
16902d_seteuid='$d_seteuid'
16903d_setgrent='$d_setgrent'
16904d_setgrps='$d_setgrps'
16905d_sethent='$d_sethent'
4e0554ec 16906d_setitimer='$d_setitimer'
b4eb6b3d
JH
16907d_setlinebuf='$d_setlinebuf'
16908d_setlocale='$d_setlocale'
16909d_setnent='$d_setnent'
16910d_setpent='$d_setpent'
16911d_setpgid='$d_setpgid'
16912d_setpgrp2='$d_setpgrp2'
16913d_setpgrp='$d_setpgrp'
16914d_setprior='$d_setprior'
16915d_setproctitle='$d_setproctitle'
16916d_setpwent='$d_setpwent'
16917d_setregid='$d_setregid'
16918d_setresgid='$d_setresgid'
16919d_setresuid='$d_setresuid'
16920d_setreuid='$d_setreuid'
16921d_setrgid='$d_setrgid'
16922d_setruid='$d_setruid'
16923d_setsent='$d_setsent'
16924d_setsid='$d_setsid'
16925d_setvbuf='$d_setvbuf'
16926d_sfio='$d_sfio'
16927d_shm='$d_shm'
16928d_shmat='$d_shmat'
16929d_shmatprototype='$d_shmatprototype'
16930d_shmctl='$d_shmctl'
16931d_shmdt='$d_shmdt'
16932d_shmget='$d_shmget'
16933d_sigaction='$d_sigaction'
983dbef6 16934d_sigprocmask='$d_sigprocmask'
b4eb6b3d 16935d_sigsetjmp='$d_sigsetjmp'
49a78c82 16936d_sockatmark='$d_sockatmark'
2ef53570 16937d_sockatmarkproto='$d_sockatmarkproto'
b4eb6b3d
JH
16938d_socket='$d_socket'
16939d_socklen_t='$d_socklen_t'
16940d_sockpair='$d_sockpair'
16941d_socks5_init='$d_socks5_init'
16942d_sqrtl='$d_sqrtl'
eef837ea 16943d_sresgproto='$d_sresgproto'
640374d0 16944d_sresuproto='$d_sresuproto'
b4eb6b3d
JH
16945d_statblks='$d_statblks'
16946d_statfs_f_flags='$d_statfs_f_flags'
16947d_statfs_s='$d_statfs_s'
16948d_statvfs='$d_statvfs'
16949d_stdio_cnt_lval='$d_stdio_cnt_lval'
16950d_stdio_ptr_lval='$d_stdio_ptr_lval'
a7ffa9b9
NC
16951d_stdio_ptr_lval_nochange_cnt='$d_stdio_ptr_lval_nochange_cnt'
16952d_stdio_ptr_lval_sets_cnt='$d_stdio_ptr_lval_sets_cnt'
b4eb6b3d
JH
16953d_stdio_stream_array='$d_stdio_stream_array'
16954d_stdiobase='$d_stdiobase'
16955d_stdstdio='$d_stdstdio'
16956d_strchr='$d_strchr'
16957d_strcoll='$d_strcoll'
16958d_strctcpy='$d_strctcpy'
16959d_strerrm='$d_strerrm'
16960d_strerror='$d_strerror'
b3c85772 16961d_strftime='$d_strftime'
b4eb6b3d
JH
16962d_strtod='$d_strtod'
16963d_strtol='$d_strtol'
16964d_strtold='$d_strtold'
16965d_strtoll='$d_strtoll'
28e5dec8 16966d_strtoq='$d_strtoq'
b4eb6b3d
JH
16967d_strtoul='$d_strtoul'
16968d_strtoull='$d_strtoull'
16969d_strtouq='$d_strtouq'
16970d_strxfrm='$d_strxfrm'
16971d_suidsafe='$d_suidsafe'
16972d_symlink='$d_symlink'
16973d_syscall='$d_syscall'
2ef53570 16974d_syscallproto='$d_syscallproto'
b4eb6b3d
JH
16975d_sysconf='$d_sysconf'
16976d_sysernlst='$d_sysernlst'
16977d_syserrlst='$d_syserrlst'
16978d_system='$d_system'
16979d_tcgetpgrp='$d_tcgetpgrp'
16980d_tcsetpgrp='$d_tcsetpgrp'
16981d_telldir='$d_telldir'
16982d_telldirproto='$d_telldirproto'
16983d_time='$d_time'
16984d_times='$d_times'
16985d_truncate='$d_truncate'
16986d_tzname='$d_tzname'
4e0554ec
JH
16987d_u32align='$d_u32align'
16988d_ualarm='$d_ualarm'
b4eb6b3d
JH
16989d_umask='$d_umask'
16990d_uname='$d_uname'
16991d_union_semun='$d_union_semun'
4e0554ec 16992d_usleep='$d_usleep'
2ef53570 16993d_usleepproto='$d_usleepproto'
b4eb6b3d
JH
16994d_ustat='$d_ustat'
16995d_vendorarch='$d_vendorarch'
16996d_vendorbin='$d_vendorbin'
16997d_vendorlib='$d_vendorlib'
16998d_vfork='$d_vfork'
16999d_void_closedir='$d_void_closedir'
17000d_voidsig='$d_voidsig'
17001d_voidtty='$d_voidtty'
17002d_volatile='$d_volatile'
17003d_vprintf='$d_vprintf'
17004d_wait4='$d_wait4'
17005d_waitpid='$d_waitpid'
17006d_wcstombs='$d_wcstombs'
17007d_wctomb='$d_wctomb'
4e0554ec 17008d_writev='$d_writev'
5f80c64f
JH
17009d_xenix='$d_xenix'
17010date='$date'
b4eb6b3d
JH
17011db_hashtype='$db_hashtype'
17012db_prefixtype='$db_prefixtype'
640374d0
JH
17013db_version_major='$db_version_major'
17014db_version_minor='$db_version_minor'
17015db_version_patch='$db_version_patch'
b4eb6b3d
JH
17016defvoidused='$defvoidused'
17017direntrytype='$direntrytype'
17018dlext='$dlext'
5f80c64f 17019dlsrc='$dlsrc'
b4eb6b3d
JH
17020doublesize='$doublesize'
17021drand01='$drand01'
17022dynamic_ext='$dynamic_ext'
17023eagain='$eagain'
17024ebcdic='$ebcdic'
5f80c64f
JH
17025echo='$echo'
17026egrep='$egrep'
17027emacs='$emacs'
17028eunicefix='$eunicefix'
17029exe_ext='$exe_ext'
17030expr='$expr'
b4eb6b3d 17031extensions='$extensions'
6fcddf3b 17032extras='$extras'
b4eb6b3d
JH
17033fflushNULL='$fflushNULL'
17034fflushall='$fflushall'
5f80c64f
JH
17035find='$find'
17036firstmakefile='$firstmakefile'
17037flex='$flex'
b4eb6b3d
JH
17038fpossize='$fpossize'
17039fpostype='$fpostype'
17040freetype='$freetype'
5440bc8e 17041from='$from'
b4eb6b3d
JH
17042full_ar='$full_ar'
17043full_csh='$full_csh'
17044full_sed='$full_sed'
5b463ca7 17045gccosandvers='$gccosandvers'
5f80c64f 17046gccversion='$gccversion'
b4eb6b3d
JH
17047gidformat='$gidformat'
17048gidsign='$gidsign'
17049gidsize='$gidsize'
17050gidtype='$gidtype'
5f80c64f
JH
17051glibpth='$glibpth'
17052grep='$grep'
b4eb6b3d
JH
17053groupcat='$groupcat'
17054groupstype='$groupstype'
5f80c64f 17055gzip='$gzip'
b4eb6b3d
JH
17056h_fcntl='$h_fcntl'
17057h_sysfile='$h_sysfile'
5f80c64f 17058hint='$hint'
b4eb6b3d
JH
17059hostcat='$hostcat'
17060i16size='$i16size'
17061i16type='$i16type'
17062i32size='$i32size'
17063i32type='$i32type'
17064i64size='$i64size'
17065i64type='$i64type'
17066i8size='$i8size'
17067i8type='$i8type'
17068i_arpainet='$i_arpainet'
17069i_bsdioctl='$i_bsdioctl'
17070i_db='$i_db'
17071i_dbm='$i_dbm'
17072i_dirent='$i_dirent'
5f80c64f 17073i_dld='$i_dld'
b4eb6b3d
JH
17074i_dlfcn='$i_dlfcn'
17075i_fcntl='$i_fcntl'
17076i_float='$i_float'
17077i_gdbm='$i_gdbm'
17078i_grp='$i_grp'
17079i_iconv='$i_iconv'
17080i_ieeefp='$i_ieeefp'
17081i_inttypes='$i_inttypes'
2765b840 17082i_langinfo='$i_langinfo'
b4eb6b3d
JH
17083i_libutil='$i_libutil'
17084i_limits='$i_limits'
17085i_locale='$i_locale'
17086i_machcthr='$i_machcthr'
17087i_malloc='$i_malloc'
17088i_math='$i_math'
17089i_memory='$i_memory'
17090i_mntent='$i_mntent'
17091i_ndbm='$i_ndbm'
17092i_netdb='$i_netdb'
17093i_neterrno='$i_neterrno'
17094i_netinettcp='$i_netinettcp'
17095i_niin='$i_niin'
17096i_poll='$i_poll'
17097i_prot='$i_prot'
17098i_pthread='$i_pthread'
17099i_pwd='$i_pwd'
17100i_rpcsvcdbm='$i_rpcsvcdbm'
17101i_sfio='$i_sfio'
17102i_sgtty='$i_sgtty'
17103i_shadow='$i_shadow'
17104i_socks='$i_socks'
17105i_stdarg='$i_stdarg'
17106i_stddef='$i_stddef'
17107i_stdlib='$i_stdlib'
17108i_string='$i_string'
17109i_sunmath='$i_sunmath'
17110i_sysaccess='$i_sysaccess'
17111i_sysdir='$i_sysdir'
17112i_sysfile='$i_sysfile'
17113i_sysfilio='$i_sysfilio'
17114i_sysin='$i_sysin'
17115i_sysioctl='$i_sysioctl'
17116i_syslog='$i_syslog'
17117i_sysmman='$i_sysmman'
17118i_sysmode='$i_sysmode'
17119i_sysmount='$i_sysmount'
17120i_sysndir='$i_sysndir'
17121i_sysparam='$i_sysparam'
17122i_sysresrc='$i_sysresrc'
17123i_syssecrt='$i_syssecrt'
17124i_sysselct='$i_sysselct'
17125i_syssockio='$i_syssockio'
17126i_sysstat='$i_sysstat'
17127i_sysstatfs='$i_sysstatfs'
17128i_sysstatvfs='$i_sysstatvfs'
17129i_systime='$i_systime'
17130i_systimek='$i_systimek'
17131i_systimes='$i_systimes'
17132i_systypes='$i_systypes'
17133i_sysuio='$i_sysuio'
17134i_sysun='$i_sysun'
17135i_sysutsname='$i_sysutsname'
17136i_sysvfs='$i_sysvfs'
17137i_syswait='$i_syswait'
17138i_termio='$i_termio'
17139i_termios='$i_termios'
17140i_time='$i_time'
17141i_unistd='$i_unistd'
17142i_ustat='$i_ustat'
17143i_utime='$i_utime'
17144i_values='$i_values'
17145i_varargs='$i_varargs'
17146i_varhdr='$i_varhdr'
17147i_vfork='$i_vfork'
5f80c64f 17148ignore_versioned_solibs='$ignore_versioned_solibs'
b4eb6b3d
JH
17149inc_version_list='$inc_version_list'
17150inc_version_list_init='$inc_version_list_init'
5f80c64f
JH
17151incpath='$incpath'
17152inews='$inews'
b4eb6b3d
JH
17153installarchlib='$installarchlib'
17154installbin='$installbin'
17155installman1dir='$installman1dir'
17156installman3dir='$installman3dir'
17157installprefix='$installprefix'
17158installprefixexp='$installprefixexp'
17159installprivlib='$installprivlib'
17160installscript='$installscript'
17161installsitearch='$installsitearch'
17162installsitebin='$installsitebin'
17163installsitelib='$installsitelib'
17164installstyle='$installstyle'
17165installusrbinperl='$installusrbinperl'
17166installvendorarch='$installvendorarch'
17167installvendorbin='$installvendorbin'
17168installvendorlib='$installvendorlib'
17169intsize='$intsize'
4b661809 17170issymlink='$issymlink'
b4eb6b3d
JH
17171ivdformat='$ivdformat'
17172ivsize='$ivsize'
17173ivtype='$ivtype'
17174known_extensions='$known_extensions'
5f80c64f 17175ksh='$ksh'
5f80c64f
JH
17176ld='$ld'
17177lddlflags='$lddlflags'
17178ldflags='$ldflags'
b4eb6b3d
JH
17179ldflags_uselargefiles='$ldflags_uselargefiles'
17180ldlibpthname='$ldlibpthname'
5f80c64f
JH
17181less='$less'
17182lib_ext='$lib_ext'
17183libc='$libc'
b4eb6b3d 17184libperl='$libperl'
5f80c64f
JH
17185libpth='$libpth'
17186libs='$libs'
43999f95
JH
17187libsdirs='$libsdirs'
17188libsfiles='$libsfiles'
17189libsfound='$libsfound'
13b3f787 17190libspath='$libspath'
5f80c64f 17191libswanted='$libswanted'
b4eb6b3d 17192libswanted_uselargefiles='$libswanted_uselargefiles'
5f80c64f
JH
17193line='$line'
17194lint='$lint'
17195lkflags='$lkflags'
17196ln='$ln'
17197lns='$lns'
17198locincpth='$locincpth'
17199loclibpth='$loclibpth'
b4eb6b3d
JH
17200longdblsize='$longdblsize'
17201longlongsize='$longlongsize'
17202longsize='$longsize'
5f80c64f
JH
17203lp='$lp'
17204lpr='$lpr'
17205ls='$ls'
b4eb6b3d
JH
17206lseeksize='$lseeksize'
17207lseektype='$lseektype'
5f80c64f
JH
17208mail='$mail'
17209mailx='$mailx'
17210make='$make'
17211make_set_make='$make_set_make'
b4eb6b3d
JH
17212mallocobj='$mallocobj'
17213mallocsrc='$mallocsrc'
17214malloctype='$malloctype'
17215man1dir='$man1dir'
17216man1direxp='$man1direxp'
17217man1ext='$man1ext'
17218man3dir='$man3dir'
17219man3direxp='$man3direxp'
17220man3ext='$man3ext'
5f80c64f
JH
17221mips_type='$mips_type'
17222mkdir='$mkdir'
b4eb6b3d
JH
17223mmaptype='$mmaptype'
17224modetype='$modetype'
5f80c64f 17225more='$more'
b4eb6b3d 17226multiarch='$multiarch'
5f80c64f 17227mv='$mv'
b4eb6b3d
JH
17228myarchname='$myarchname'
17229mydomain='$mydomain'
17230myhostname='$myhostname'
5f80c64f
JH
17231myuname='$myuname'
17232n='$n'
2cc61e15 17233need_va_copy='$need_va_copy'
b4eb6b3d
JH
17234netdb_hlen_type='$netdb_hlen_type'
17235netdb_host_type='$netdb_host_type'
17236netdb_name_type='$netdb_name_type'
17237netdb_net_type='$netdb_net_type'
5f80c64f
JH
17238nm='$nm'
17239nm_opt='$nm_opt'
17240nm_so_opt='$nm_so_opt'
b4eb6b3d 17241nonxs_ext='$nonxs_ext'
5f80c64f 17242nroff='$nroff'
b4eb6b3d
JH
17243nvEUformat='$nvEUformat'
17244nvFUformat='$nvFUformat'
17245nvGUformat='$nvGUformat'
17246nveformat='$nveformat'
17247nvfformat='$nvfformat'
17248nvgformat='$nvgformat'
17249nvsize='$nvsize'
17250nvtype='$nvtype'
17251o_nonblock='$o_nonblock'
5f80c64f 17252obj_ext='$obj_ext'
b4eb6b3d 17253old_pthread_create_joinable='$old_pthread_create_joinable'
5f80c64f 17254optimize='$optimize'
b4eb6b3d 17255orderlib='$orderlib'
5f80c64f
JH
17256osname='$osname'
17257osvers='$osvers'
b4eb6b3d 17258otherlibdirs='$otherlibdirs'
5f80c64f 17259package='$package'
b4eb6b3d
JH
17260pager='$pager'
17261passcat='$passcat'
17262patchlevel='$patchlevel'
5f80c64f 17263path_sep='$path_sep'
b4eb6b3d 17264perl5='$perl5'
5f80c64f 17265perl='$perl'
151e6568 17266perl_patchlevel='$perl_patchlevel'
b4eb6b3d 17267perladmin='$perladmin'
9c839522 17268perllibs='$perllibs'
b4eb6b3d 17269perlpath='$perlpath'
5f80c64f 17270pg='$pg'
b4eb6b3d
JH
17271phostname='$phostname'
17272pidtype='$pidtype'
5f80c64f 17273plibpth='$plibpth'
b4eb6b3d 17274pm_apiversion='$pm_apiversion'
5f80c64f
JH
17275pmake='$pmake'
17276pr='$pr'
b4eb6b3d
JH
17277prefix='$prefix'
17278prefixexp='$prefixexp'
17279privlib='$privlib'
17280privlibexp='$privlibexp'
17281prototype='$prototype'
17282ptrsize='$ptrsize'
17283quadkind='$quadkind'
17284quadtype='$quadtype'
17285randbits='$randbits'
17286randfunc='$randfunc'
17287randseedtype='$randseedtype'
17288ranlib='$ranlib'
17289rd_nodata='$rd_nodata'
17290revision='$revision'
5f80c64f
JH
17291rm='$rm'
17292rmail='$rmail'
5440bc8e 17293run='$run'
5f80c64f 17294runnm='$runnm'
b4eb6b3d
JH
17295sPRIEUldbl='$sPRIEUldbl'
17296sPRIFUldbl='$sPRIFUldbl'
17297sPRIGUldbl='$sPRIGUldbl'
17298sPRIXU64='$sPRIXU64'
17299sPRId64='$sPRId64'
17300sPRIeldbl='$sPRIeldbl'
17301sPRIfldbl='$sPRIfldbl'
17302sPRIgldbl='$sPRIgldbl'
17303sPRIi64='$sPRIi64'
17304sPRIo64='$sPRIo64'
17305sPRIu64='$sPRIu64'
17306sPRIx64='$sPRIx64'
17307sSCNfldbl='$sSCNfldbl'
17308sched_yield='$sched_yield'
17309scriptdir='$scriptdir'
17310scriptdirexp='$scriptdirexp'
5f80c64f 17311sed='$sed'
b4eb6b3d
JH
17312seedfunc='$seedfunc'
17313selectminbits='$selectminbits'
17314selecttype='$selecttype'
5f80c64f
JH
17315sendmail='$sendmail'
17316sh='$sh'
17317shar='$shar'
17318sharpbang='$sharpbang'
b4eb6b3d
JH
17319shmattype='$shmattype'
17320shortsize='$shortsize'
17321shrpenv='$shrpenv'
5f80c64f 17322shsharp='$shsharp'
b4eb6b3d
JH
17323sig_count='$sig_count'
17324sig_name='$sig_name'
17325sig_name_init='$sig_name_init'
17326sig_num='$sig_num'
17327sig_num_init='$sig_num_init'
76d3c696 17328sig_size='$sig_size'
b4eb6b3d
JH
17329signal_t='$signal_t'
17330sitearch='$sitearch'
17331sitearchexp='$sitearchexp'
17332sitebin='$sitebin'
17333sitebinexp='$sitebinexp'
17334sitelib='$sitelib'
17335sitelib_stem='$sitelib_stem'
17336sitelibexp='$sitelibexp'
17337siteprefix='$siteprefix'
17338siteprefixexp='$siteprefixexp'
17339sizesize='$sizesize'
17340sizetype='$sizetype'
5f80c64f
JH
17341sleep='$sleep'
17342smail='$smail'
5f80c64f 17343so='$so'
b4eb6b3d
JH
17344sockethdr='$sockethdr'
17345socketlib='$socketlib'
17346socksizetype='$socksizetype'
5f80c64f
JH
17347sort='$sort'
17348spackage='$spackage'
17349spitshell='$spitshell'
5f80c64f 17350src='$src'
b4eb6b3d
JH
17351ssizetype='$ssizetype'
17352startperl='$startperl'
5f80c64f 17353startsh='$startsh'
b4eb6b3d
JH
17354static_ext='$static_ext'
17355stdchar='$stdchar'
17356stdio_base='$stdio_base'
17357stdio_bufsiz='$stdio_bufsiz'
17358stdio_cnt='$stdio_cnt'
17359stdio_filbuf='$stdio_filbuf'
17360stdio_ptr='$stdio_ptr'
17361stdio_stream_array='$stdio_stream_array'
17362strings='$strings'
5f80c64f 17363submit='$submit'
b4eb6b3d
JH
17364subversion='$subversion'
17365sysman='$sysman'
5f80c64f
JH
17366tail='$tail'
17367tar='$tar'
5440bc8e 17368targetarch='$targetarch'
5f80c64f
JH
17369tbl='$tbl'
17370tee='$tee'
17371test='$test'
b4eb6b3d
JH
17372timeincl='$timeincl'
17373timetype='$timetype'
5440bc8e 17374to='$to'
5f80c64f
JH
17375touch='$touch'
17376tr='$tr'
17377trnl='$trnl'
17378troff='$troff'
b4eb6b3d
JH
17379u16size='$u16size'
17380u16type='$u16type'
17381u32size='$u32size'
17382u32type='$u32type'
17383u64size='$u64size'
17384u64type='$u64type'
17385u8size='$u8size'
17386u8type='$u8type'
17387uidformat='$uidformat'
17388uidsign='$uidsign'
17389uidsize='$uidsize'
17390uidtype='$uidtype'
5f80c64f
JH
17391uname='$uname'
17392uniq='$uniq'
b4eb6b3d
JH
17393uquadtype='$uquadtype'
17394use5005threads='$use5005threads'
17395use64bitall='$use64bitall'
17396use64bitint='$use64bitint'
5440bc8e 17397usecrosscompile='$usecrosscompile'
5f80c64f 17398usedl='$usedl'
b4eb6b3d
JH
17399useithreads='$useithreads'
17400uselargefiles='$uselargefiles'
17401uselongdouble='$uselongdouble'
17402usemorebits='$usemorebits'
17403usemultiplicity='$usemultiplicity'
17404usemymalloc='$usemymalloc'
5f80c64f 17405usenm='$usenm'
b4eb6b3d
JH
17406useopcode='$useopcode'
17407useperlio='$useperlio'
17408useposix='$useposix'
9514c62b 17409usereentrant='$usereentrant'
b4eb6b3d
JH
17410usesfio='$usesfio'
17411useshrplib='$useshrplib'
29209bc5 17412usesocks='$usesocks'
b4eb6b3d
JH
17413usethreads='$usethreads'
17414usevendorprefix='$usevendorprefix'
17415usevfork='$usevfork'
5f80c64f
JH
17416usrinc='$usrinc'
17417uuname='$uuname'
b4eb6b3d
JH
17418uvXUformat='$uvXUformat'
17419uvoformat='$uvoformat'
17420uvsize='$uvsize'
17421uvtype='$uvtype'
17422uvuformat='$uvuformat'
17423uvxformat='$uvxformat'
17424vendorarch='$vendorarch'
17425vendorarchexp='$vendorarchexp'
17426vendorbin='$vendorbin'
17427vendorbinexp='$vendorbinexp'
17428vendorlib='$vendorlib'
17429vendorlib_stem='$vendorlib_stem'
17430vendorlibexp='$vendorlibexp'
17431vendorprefix='$vendorprefix'
17432vendorprefixexp='$vendorprefixexp'
17433version='$version'
861eb78d 17434version_patchlevel_string='$version_patchlevel_string'
d56c5707 17435versiononly='$versiononly'
5f80c64f 17436vi='$vi'
b4eb6b3d 17437voidflags='$voidflags'
5f80c64f 17438xlibpth='$xlibpth'
b4eb6b3d 17439xs_apiversion='$xs_apiversion'
3659ebf1
JH
17440yacc='$yacc'
17441yaccflags='$yaccflags'
5f80c64f
JH
17442zcat='$zcat'
17443zip='$zip'
17444EOT
17445
17446: Add in command line options if available
17447$test -f UU/cmdline.opt && $cat UU/cmdline.opt >> config.sh
17448
17449: add special variables
17450$test -f $src/patchlevel.h && \
d00b958f 17451awk '/^#define[ ]+PERL_/ {printf "%s=%s\n",$2,$3}' $src/patchlevel.h >>config.sh
151e6568 17452echo "PERL_PATCHLEVEL=$perl_patchlevel" >>config.sh
a02608de 17453echo "PERL_CONFIG_SH=true" >>config.sh
5f80c64f
JH
17454
17455: propagate old symbols
17456if $test -f UU/config.sh; then
381aa1ff 17457 <UU/config.sh $sort | $uniq >UU/oldconfig.sh
5f80c64f 17458 sed -n 's/^\([a-zA-Z_0-9]*\)=.*/\1/p' config.sh config.sh UU/oldconfig.sh |\
aef7654c 17459 $sort | $uniq -u >UU/oldsyms
5f80c64f
JH
17460 set X `cat UU/oldsyms`
17461 shift
17462 case $# in
17463 0) ;;
17464 *)
17465 cat <<EOM
17466Hmm...You had some extra variables I don't know about...I'll try to keep 'em...
17467EOM
17468 echo "# Variables propagated from previous config.sh file." >>config.sh
17469 for sym in `cat UU/oldsyms`; do
17470 echo " Propagating $hint variable "'$'"$sym..."
17471 eval 'tmp="$'"${sym}"'"'
17472 echo "$tmp" | \
17473 sed -e "s/'/'\"'\"'/g" -e "s/^/$sym='/" -e "s/$/'/" >>config.sh
17474 done
17475 ;;
17476 esac
17477fi
17478
17479: Finish up by extracting the .SH files
17480case "$alldone" in
17481exit)
17482 $rm -rf UU
24ccb310 17483 echo "Extraction done."
5f80c64f
JH
17484 exit 0
17485 ;;
17486cont)
17487 ;;
17488'')
17489 dflt=''
17490 nostick=true
17491 $cat <<EOM
17492
17493If you'd like to make any changes to the config.sh file before I begin
17494to configure things, do it as a shell escape now (e.g. !vi config.sh).
17495
17496EOM
17497 rp="Press return or use a shell escape to edit config.sh:"
17498 . UU/myread
17499 nostick=''
17500 case "$ans" in
17501 '') ;;
17502 *) : in case they cannot read
17503 sh 1>&4 -c "$ans";;
17504 esac
17505 ;;
17506esac
17507
17508: if this fails, just run all the .SH files by hand
17509. ./config.sh
17510
17511echo " "
17512exec 1>&4
a43e8593 17513pwd=`pwd`
5f80c64f 17514. ./UU/extract
a43e8593 17515cd $pwd
5f80c64f
JH
17516
17517if $contains '^depend:' [Mm]akefile >/dev/null 2>&1; then
17518 dflt=y
17519 case "$silent" in
17520 true) ;;
17521 *)
17522 $cat <<EOM
17523
17524Now you need to generate make dependencies by running "$make depend".
17525You might prefer to run it in background: "$make depend > makedepend.out &"
17526It can take a while, so you might not want to run it right now.
17527
17528EOM
17529 ;;
17530 esac
17531 rp="Run $make depend now?"
17532 . UU/myread
17533 case "$ans" in
17534 y*)
3d5d58b1 17535 $make depend && echo "Now you must run '$make'."
5f80c64f
JH
17536 ;;
17537 *)
17538 echo "You must run '$make depend' then '$make'."
17539 ;;
17540 esac
17541elif test -f [Mm]akefile; then
17542 echo " "
17543 echo "Now you must run a $make."
17544else
24ccb310 17545 echo "Configure done."
5f80c64f
JH
17546fi
17547
17548if $test -f Policy.sh; then
17549 $cat <<EOM
17550
17551If you compile $package on a different machine or from a different object
17552directory, copy the Policy.sh file from this object directory to the
17553new one before you run Configure -- this will help you with most of
17554the policy defaults.
17555
17556EOM
17557fi
17558if $test -f config.msg; then
17559 echo "Hmm. I also noted the following information while running:"
17560 echo " "
17561 $cat config.msg >&4
17562 $rm -f config.msg
17563fi
17564$rm -f kit*isdone ark*isdone
17565$rm -rf UU
17566
17567: End of Configure
17568