This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Upgrade to Math::BigInt 1.40.
[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#
dd2de242 23# Generated on Wed Aug 1 02:58:53 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 3522
bd9b35c9
JH
3523: decide how portable to be. Allow command line overrides.
3524case "$d_portable" in
3525"$undef") ;;
3526*) d_portable="$define" ;;
104d25b7 3527esac
85ab1d1d 3528
bd9b35c9
JH
3529: set up shell script to do ~ expansion
3530cat >filexp <<EOSS
3531$startsh
3532: expand filename
3533case "\$1" in
3534 ~/*|~)
3535 echo \$1 | $sed "s|~|\${HOME-\$LOGDIR}|"
3536 ;;
3537 ~*)
3538 if $test -f /bin/csh; then
3539 /bin/csh -f -c "glob \$1"
3540 failed=\$?
3541 echo ""
3542 exit \$failed
e5e20432 3543 else
bd9b35c9
JH
3544 name=\`$expr x\$1 : '..\([^/]*\)'\`
3545 dir=\`$sed -n -e "/^\${name}:/{s/^[^:]*:[^:]*:[^:]*:[^:]*:[^:]*:\([^:]*\).*"'\$'"/\1/" -e p -e q -e '}' </etc/passwd\`
3546 if $test ! -d "\$dir"; then
3547 me=\`basename \$0\`
3548 echo "\$me: can't locate home directory for: \$name" >&2
3549 exit 1
3550 fi
3551 case "\$1" in
3552 */*)
3553 echo \$dir/\`$expr x\$1 : '..[^/]*/\(.*\)'\`
3554 ;;
3555 *)
3556 echo \$dir
e5e20432
JH
3557 ;;
3558 esac
3559 fi
b691c02f 3560 ;;
4633a7c4 3561*)
bd9b35c9 3562 echo \$1
2304df62
AD
3563 ;;
3564esac
4633a7c4
LW
3565EOSS
3566chmod +x filexp
3567$eunicefix filexp
2304df62
AD
3568
3569: now set up to get a file name
28757baa 3570cat <<EOS >getfile
3571$startsh
3572EOS
3573cat <<'EOSC' >>getfile
2304df62
AD
3574tilde=''
3575fullpath=''
3576already=''
3577skip=''
3578none_ok=''
3579exp_file=''
a0d0e21e 3580nopath_ok=''
2304df62
AD
3581orig_rp="$rp"
3582orig_dflt="$dflt"
b233458b
JH
3583case "$gfpth" in
3584'') gfpth='.' ;;
3585esac
2304df62
AD
3586
3587case "$fn" in
ecfc5424 3588*\(*)
381aa1ff 3589 expr $fn : '.*(\(.*\)).*' | $tr ',' $trnl >getfile.ok
ecfc5424
AD
3590 fn=`echo $fn | sed 's/(.*)//'`
3591 ;;
3592esac
3593
3594case "$fn" in
a0d0e21e
LW
3595*:*)
3596 loc_file=`expr $fn : '.*:\(.*\)'`
3597 fn=`expr $fn : '\(.*\):.*'`
3598 ;;
3599esac
3600
3601case "$fn" in
2304df62
AD
3602*~*) tilde=true;;
3603esac
3604case "$fn" in
3605*/*) fullpath=true;;
3606esac
3607case "$fn" in
3608*+*) skip=true;;
3609esac
3610case "$fn" in
3611*n*) none_ok=true;;
3612esac
3613case "$fn" in
3614*e*) exp_file=true;;
3615esac
a0d0e21e
LW
3616case "$fn" in
3617*p*) nopath_ok=true;;
3618esac
2304df62
AD
3619
3620case "$fn" in
3621*f*) type='File';;
3622*d*) type='Directory';;
a0d0e21e 3623*l*) type='Locate';;
2304df62
AD
3624esac
3625
3626what="$type"
3627case "$what" in
3628Locate) what='File';;
3629esac
3630
3631case "$exp_file" in
3632'')
3633 case "$d_portable" in
3634 "$define") ;;
3635 *) exp_file=true;;
3636 esac
3637 ;;
3638esac
3639
3640cd ..
3641while test "$type"; do
3642 redo=''
3643 rp="$orig_rp"
3644 dflt="$orig_dflt"
3645 case "$tilde" in
3646 true) rp="$rp (~name ok)";;
3647 esac
3648 . UU/myread
ecfc5424
AD
3649 if test -f UU/getfile.ok && \
3650 $contains "^$ans\$" UU/getfile.ok >/dev/null 2>&1
3651 then
3652 value="$ans"
3653 ansexp="$ans"
3654 break
3655 fi
2304df62
AD
3656 case "$ans" in
3657 none)
3658 value=''
3659 ansexp=''
3660 case "$none_ok" in
3661 true) type='';;
3662 esac
3663 ;;
3664 *)
3665 case "$tilde" in
3666 '') value="$ans"
3667 ansexp="$ans";;
3668 *)
3669 value=`UU/filexp $ans`
3670 case $? in
3671 0)
3672 if test "$ans" != "$value"; then
ecfc5424 3673 echo "(That expands to $value on this system.)"
2304df62
AD
3674 fi
3675 ;;
3676 *) value="$ans";;
3677 esac
3678 ansexp="$value"
3679 case "$exp_file" in
3680 '') value="$ans";;
3681 esac
3682 ;;
3683 esac
3684 case "$fullpath" in
3685 true)
3686 case "$ansexp" in
3687 /*) value="$ansexp" ;;
23da6c43 3688 [a-zA-Z]:/*) value="$ansexp" ;;
2304df62
AD
3689 *)
3690 redo=true
3691 case "$already" in
3692 true)
3693 echo "I shall only accept a full path name, as in /bin/ls." >&4
3694 echo "Use a ! shell escape if you wish to check pathnames." >&4
3695 ;;
3696 *)
3697 echo "Please give a full path name, starting with slash." >&4
3698 case "$tilde" in
3699 true)
3700 echo "Note that using ~name is ok provided it expands well." >&4
3701 already=true
3702 ;;
3703 esac
3704 esac
3705 ;;
3706 esac
3707 ;;
3708 esac
3709 case "$redo" in
3710 '')
3711 case "$type" in
3712 File)
b233458b
JH
3713 for fp in $gfpth; do
3714 if test "X$fp" = X.; then
3715 pf="$ansexp"
3716 else
3717 pf="$fp/$ansexp"
3718 fi
3719 if test -f "$pf"; then
3720 type=''
3721 elif test -r "$pf" || (test -h "$pf") >/dev/null 2>&1
3722 then
3723 echo "($value is not a plain file, but that's ok.)"
3724 type=''
3725 fi
3726 if test X"$type" = X; then
3727 value="$pf"
3728 break
3729 fi
3730 done
2304df62
AD
3731 ;;
3732 Directory)
b233458b
JH
3733 for fp in $gfpth; do
3734 if test "X$fp" = X.; then
f78bfc9c
JH
3735 dir="$ans"
3736 direxp="$ansexp"
b233458b 3737 else
dd858076 3738 dir="$fp/$ansexp"
f78bfc9c 3739 direxp="$fp/$ansexp"
b233458b 3740 fi
f78bfc9c 3741 if test -d "$direxp"; then
b233458b 3742 type=''
f78bfc9c 3743 value="$dir"
b233458b
JH
3744 break
3745 fi
3746 done
2304df62
AD
3747 ;;
3748 Locate)
40000a8c 3749 if test -d "$ansexp"; then
a0d0e21e
LW
3750 echo "(Looking for $loc_file in directory $value.)"
3751 value="$value/$loc_file"
40000a8c 3752 ansexp="$ansexp/$loc_file"
2304df62 3753 fi
40000a8c 3754 if test -f "$ansexp"; then
2304df62
AD
3755 type=''
3756 fi
a0d0e21e
LW
3757 case "$nopath_ok" in
3758 true) case "$value" in
3759 */*) ;;
3760 *) echo "Assuming $value will be in people's path."
3761 type=''
3762 ;;
3763 esac
3764 ;;
3765 esac
2304df62
AD
3766 ;;
3767 esac
3768
3769 case "$skip" in
3770 true) type='';
3771 esac
3772
3773 case "$type" in
3774 '') ;;
3775 *)
3776 if test "$fastread" = yes; then
3777 dflt=y
3778 else
3779 dflt=n
3780 fi
3781 rp="$what $value doesn't exist. Use that name anyway?"
3782 . UU/myread
3783 dflt=''
3784 case "$ans" in
3785 y*) type='';;
3786 *) echo " ";;
3787 esac
3788 ;;
3789 esac
3790 ;;
3791 esac
3792 ;;
3793 esac
3794done
3795cd UU
3796ans="$value"
3797rp="$orig_rp"
3798dflt="$orig_dflt"
ecfc5424 3799rm -f getfile.ok
b233458b 3800test "X$gfpthkeep" != Xy && gfpth=""
2304df62
AD
3801EOSC
3802
bd9b35c9
JH
3803: What should the include directory be ?
3804echo " "
3805$echo $n "Hmm... $c"
3806dflt='/usr/include'
3807incpath=''
3808mips_type=''
3809if $test -f /bin/mips && /bin/mips; then
3810 echo "Looks like a MIPS system..."
3811 $cat >usr.c <<'EOCP'
3812#ifdef SYSTYPE_BSD43
3813/bsd43
3814#endif
3815EOCP
8a27cf78 3816 if cc -E usr.c > usr.out && $contains / usr.out >/dev/null 2>&1; then
bd9b35c9
JH
3817 dflt='/bsd43/usr/include'
3818 incpath='/bsd43'
3819 mips_type='BSD 4.3'
3820 else
3821 mips_type='System V'
3822 fi
3823 $rm -f usr.c usr.out
3824 echo "and you're compiling with the $mips_type compiler and libraries."
3825 xxx_prompt=y
3826 echo "exit 0" >mips
3827else
3828 echo "Doesn't look like a MIPS system."
3829 xxx_prompt=n
3830 echo "exit 1" >mips
3831fi
3832chmod +x mips
3833$eunicefix mips
3834case "$usrinc" in
3835'') ;;
3836*) dflt="$usrinc";;
3837esac
3838case "$xxx_prompt" in
3839y) fn=d/
3840 echo " "
3841 rp='Where are the include files you want to use?'
3842 . ./getfile
3843 usrinc="$ans"
8e07c86e 3844 ;;
bd9b35c9 3845*) usrinc="$dflt"
8e07c86e
AD
3846 ;;
3847esac
2304df62 3848
96056487
JH
3849: see how we invoke the C preprocessor
3850echo " "
3851echo "Now, how can we feed standard input to your C preprocessor..." >&4
3852cat <<'EOT' >testcpp.c
3853#define ABC abc
3854#define XYZ xyz
3855ABC.XYZ
3856EOT
3857cd ..
3858if test ! -f cppstdin; then
3859 if test "X$osname" = "Xaix" -a "X$gccversion" = X; then
3860 # AIX cc -E doesn't show the absolute headerfile
3861 # locations but we'll cheat by using the -M flag.
3862 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
3863 else
3864 echo 'cat >.$$.c; '"$cc"' -E ${1+"$@"} .$$.c; rm .$$.c' >cppstdin
3865 fi
3866else
3867 echo "Keeping your $hint cppstdin wrapper."
3868fi
3869chmod 755 cppstdin
3870wrapper=`pwd`/cppstdin
3871ok='false'
3872cd UU
3873
3874if $test "X$cppstdin" != "X" && \
3875 $cppstdin $cppminus <testcpp.c >testcpp.out 2>&1 && \
3876 $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1
3877then
3878 echo "You used to use $cppstdin $cppminus so we'll use that again."
3879 case "$cpprun" in
3880 '') echo "But let's see if we can live without a wrapper..." ;;
3881 *)
3882 if $cpprun $cpplast <testcpp.c >testcpp.out 2>&1 && \
3883 $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1
3884 then
3885 echo "(And we'll use $cpprun $cpplast to preprocess directly.)"
3886 ok='true'
3887 else
3888 echo "(However, $cpprun $cpplast does not work, let's see...)"
3889 fi
3890 ;;
3891 esac
3892else
3893 case "$cppstdin" in
3894 '') ;;
3895 *)
3896 echo "Good old $cppstdin $cppminus does not seem to be of any help..."
3897 ;;
3898 esac
3899fi
3900
3901if $ok; then
3902 : nothing
3903elif echo 'Maybe "'"$cc"' -E" will work...'; \
3904 $cc -E <testcpp.c >testcpp.out 2>&1; \
3905 $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3906 echo "Yup, it does."
3907 x_cpp="$cc -E"
3908 x_minus='';
3909elif echo 'Nope...maybe "'"$cc"' -E -" will work...'; \
3910 $cc -E - <testcpp.c >testcpp.out 2>&1; \
3911 $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3912 echo "Yup, it does."
3913 x_cpp="$cc -E"
3914 x_minus='-';
3915elif echo 'Nope...maybe "'"$cc"' -P" will work...'; \
3916 $cc -P <testcpp.c >testcpp.out 2>&1; \
3917 $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3918 echo "Yipee, that works!"
3919 x_cpp="$cc -P"
3920 x_minus='';
3921elif echo 'Nope...maybe "'"$cc"' -P -" will work...'; \
3922 $cc -P - <testcpp.c >testcpp.out 2>&1; \
3923 $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3924 echo "At long last!"
3925 x_cpp="$cc -P"
3926 x_minus='-';
3927elif echo 'No such luck, maybe "'$cpp'" will work...'; \
3928 $cpp <testcpp.c >testcpp.out 2>&1; \
3929 $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3930 echo "It works!"
3931 x_cpp="$cpp"
3932 x_minus='';
3933elif echo 'Nixed again...maybe "'$cpp' -" will work...'; \
3934 $cpp - <testcpp.c >testcpp.out 2>&1; \
3935 $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3936 echo "Hooray, it works! I was beginning to wonder."
3937 x_cpp="$cpp"
3938 x_minus='-';
3939elif echo 'Uh-uh. Time to get fancy. Trying a wrapper...'; \
3940 $wrapper <testcpp.c >testcpp.out 2>&1; \
3941 $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3942 x_cpp="$wrapper"
3943 x_minus=''
3944 echo "Eureka!"
3945else
3946 dflt=''
3947 rp="No dice. I can't find a C preprocessor. Name one:"
3948 . ./myread
3949 x_cpp="$ans"
3950 x_minus=''
3951 $x_cpp <testcpp.c >testcpp.out 2>&1
3952 if $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3953 echo "OK, that will do." >&4
3954 else
3955echo "Sorry, I can't get that to work. Go find one and rerun Configure." >&4
3956 exit 1
3957 fi
3958fi
3959
3960case "$ok" in
3961false)
3962 cppstdin="$x_cpp"
3963 cppminus="$x_minus"
3964 cpprun="$x_cpp"
3965 cpplast="$x_minus"
3966 set X $x_cpp
3967 shift
3968 case "$1" in
3969 "$cpp")
3970 echo "Perhaps can we force $cc -E using a wrapper..."
3971 if $wrapper <testcpp.c >testcpp.out 2>&1; \
3972 $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1
3973 then
3974 echo "Yup, we can."
3975 cppstdin="$wrapper"
3976 cppminus='';
3977 else
3978 echo "Nope, we'll have to live without it..."
3979 fi
3980 ;;
3981 esac
3982 case "$cpprun" in
3983 "$wrapper")
3984 cpprun=''
3985 cpplast=''
3986 ;;
3987 esac
3988 ;;
3989esac
3990
3991case "$cppstdin" in
3992"$wrapper"|'cppstdin') ;;
3993*) $rm -f $wrapper;;
3994esac
3995$rm -f testcpp.c testcpp.out
3996
bd9b35c9
JH
3997: Set private lib path
3998case "$plibpth" in
3999'') if ./mips; then
4000 plibpth="$incpath/usr/lib /usr/local/lib /usr/ccs/lib"
4001 fi;;
4002esac
4003case "$libpth" in
4004' ') dlist='';;
4005'') dlist="$loclibpth $plibpth $glibpth";;
4006*) dlist="$libpth";;
4007esac
4008
4009: Now check and see which directories actually exist, avoiding duplicates
4010libpth=''
4011for xxx in $dlist
4012do
4013 if $test -d $xxx; then
4014 case " $libpth " in
4015 *" $xxx "*) ;;
4016 *) libpth="$libpth $xxx";;
4017 esac
4018 fi
4019done
4020$cat <<'EOM'
4021
4022Some systems have incompatible or broken versions of libraries. Among
4023the directories listed in the question below, please remove any you
4024know not to be holding relevant libraries, and add any that are needed.
4025Say "none" for none.
8e07c86e
AD
4026
4027EOM
bd9b35c9
JH
4028case "$libpth" in
4029'') dflt='none';;
8e07c86e 4030*)
bd9b35c9
JH
4031 set X $libpth
4032 shift
4033 dflt=${1+"$@"}
8e07c86e 4034 ;;
a0d0e21e 4035esac
bd9b35c9
JH
4036rp="Directories to use for library searches?"
4037. ./myread
4038case "$ans" in
4039none) libpth=' ';;
4040*) libpth="$ans";;
4041esac
a0d0e21e 4042
bd9b35c9
JH
4043: compute shared library extension
4044case "$so" in
4045'')
4046 if xxx=`./loc libc.sl X $libpth`; $test -f "$xxx"; then
4047 dflt='sl'
dd4e71fd 4048 else
bd9b35c9 4049 dflt='so'
dd4e71fd
JH
4050 fi
4051 ;;
bd9b35c9 4052*) dflt="$so";;
dd4e71fd 4053esac
dd4e71fd
JH
4054$cat <<EOM
4055
bd9b35c9 4056On some systems, shared libraries may be available. Answer 'none' if
7f95ee77 4057you want to suppress searching of shared libraries for the remainder
bd9b35c9 4058of this configuration.
dd4e71fd
JH
4059
4060EOM
bd9b35c9
JH
4061rp='What is the file extension used for shared libraries?'
4062. ./myread
4063so="$ans"
dd4e71fd 4064
bd9b35c9
JH
4065: Define several unixisms.
4066: Hints files or command line option can be used to override them.
4067: The convoluted testing is in case hints files set either the old
4068: or the new name.
4069case "$_exe" in
4070'') case "$exe_ext" in
4071 '') ;;
4072 *) _exe="$exe_ext" ;;
dd4e71fd 4073 esac
bd9b35c9 4074 ;;
bfb7748a 4075esac
bd9b35c9
JH
4076case "$_a" in
4077'') case "$lib_ext" in
4078 '') _a='.a';;
4079 *) _a="$lib_ext" ;;
dd4e71fd
JH
4080 esac
4081 ;;
dd4e71fd 4082esac
bd9b35c9
JH
4083case "$_o" in
4084'') case "$obj_ext" in
4085 '') _o='.o';;
4086 *) _o="$obj_ext";;
4087 esac
4088 ;;
4089esac
4090case "$p_" in
4091'') case "$path_sep" in
4092 '') p_=':';;
4093 *) p_="$path_sep";;
4094 esac
4095 ;;
4096esac
4097exe_ext=$_exe
4098lib_ext=$_a
4099obj_ext=$_o
4100path_sep=$p_
dd4e71fd 4101
b4eb6b3d
JH
4102: Which makefile gets called first. This is used by make depend.
4103case "$firstmakefile" in
4104'') firstmakefile='makefile';;
4633a7c4 4105esac
4633a7c4 4106
0f0995ae
JH
4107case "$usesocks" in
4108$define|true|[yY]*) dflt='y';;
4109*) dflt='n';;
4110esac
bd9b35c9 4111cat <<EOM
4633a7c4 4112
bd9b35c9 4113Perl can be built to use the SOCKS proxy protocol library. To do so,
cf829ab0
JH
4114Configure must be run with -Dusesocks. If you use SOCKS you also need
4115to use the PerlIO abstraction layer, this will be implicitly selected.
4633a7c4 4116
0f0995ae 4117If this doesn't make any sense to you, just accept the default '$dflt'.
bd9b35c9 4118EOM
bd9b35c9
JH
4119rp='Build Perl for SOCKS?'
4120. ./myread
4121case "$ans" in
4122y|Y) val="$define" ;;
4123*) val="$undef" ;;
4124esac
4125set usesocks
4126eval $setvar
4127
cf829ab0
JH
4128case "$usesocks" in
4129$define|true|[yY]*) useperlio="$define";;
4130esac
4131
bd9b35c9
JH
4132: Looking for optional libraries
4133echo " "
4134echo "Checking for optional libraries..." >&4
4135case "$libs" in
4136' '|'') dflt='';;
4137*) dflt="$libs";;
4138esac
4139case "$libswanted" in
4140'') libswanted='c_s';;
4141esac
4142case "$usesocks" in
923fc586 4143"$define") libswanted="$libswanted socks5 socks5_sh" ;;
8e07c86e 4144esac
68435ea7
JH
4145libsfound=''
4146libsfiles=''
4147libsdirs=''
13b3f787
JH
4148libspath=''
4149for thisdir in $libpth $xlibpth; do
4150 test -d $thisdir && libspath="$libspath $thisdir"
4151done
bd9b35c9 4152for thislib in $libswanted; do
13b3f787 4153 for thisdir in $libspath; do
f7dd4e7f
JH
4154 xxx=''
4155 if $test ! -f "$xxx" -a "X$ignore_versioned_solibs" = "X"; then
4156 xxx=`ls $thisdir/lib$thislib.$so.[0-9] 2>/dev/null|tail -1`
4157 $test -f "$xxx" && eval $libscheck
4158 $test -f "$xxx" && libstyle=shared
4159 fi
4160 if test ! -f "$xxx"; then
4161 xxx=$thisdir/lib$thislib.$so
4162 $test -f "$xxx" && eval $libscheck
4163 $test -f "$xxx" && libstyle=shared
4164 fi
4165 if test ! -f "$xxx"; then
4166 xxx=$thisdir/lib$thislib$_a
4167 $test -f "$xxx" && eval $libscheck
4168 $test -f "$xxx" && libstyle=static
4169 fi
4170 if test ! -f "$xxx"; then
4171 xxx=$thisdir/$thislib$_a
4172 $test -f "$xxx" && eval $libscheck
4173 $test -f "$xxx" && libstyle=static
4174 fi
4175 if test ! -f "$xxx"; then
4176 xxx=$thisdir/lib${thislib}_s$_a
4177 $test -f "$xxx" && eval $libscheck
4178 $test -f "$xxx" && libstyle=static
09ea5ba9 4179 $test -f "$xxx" && thislib=${thislib}_s
f7dd4e7f
JH
4180 fi
4181 if test ! -f "$xxx"; then
4182 xxx=$thisdir/Slib$thislib$_a
4183 $test -f "$xxx" && eval $libscheck
4184 $test -f "$xxx" && libstyle=static
4185 fi
4186 if $test -f "$xxx"; then
43999f95 4187 case "$libstyle" in
f7dd4e7f
JH
4188 shared) echo "Found -l$thislib (shared)." ;;
4189 static) echo "Found -l$thislib." ;;
4190 *) echo "Found -l$thislib ($libstyle)." ;;
43999f95 4191 esac
bd9b35c9
JH
4192 case " $dflt " in
4193 *"-l$thislib "*);;
f7dd4e7f 4194 *) dflt="$dflt -l$thislib"
43999f95
JH
4195 libsfound="$libsfound $xxx"
4196 yyy=`basename $xxx`
4197 libsfiles="$libsfiles $yyy"
1e127011 4198 yyy=`echo $xxx|$sed -e "s%/$yyy\\$%%"`
43999f95
JH
4199 case " $libsdirs " in
4200 *" $yyy "*) ;;
4201 *) libsdirs="$libsdirs $yyy" ;;
4202 esac
4203 ;;
bd9b35c9 4204 esac
f7dd4e7f
JH
4205 break
4206 fi
4207 done
4208 if $test ! -f "$xxx"; then
4209 echo "No -l$thislib."
bd9b35c9
JH
4210 fi
4211done
4212set X $dflt
4213shift
4214dflt="$*"
4215case "$libs" in
4216'') dflt="$dflt";;
4217*) dflt="$libs";;
4218esac
4219case "$dflt" in
4220' '|'') dflt='none';;
4221esac
4633a7c4 4222
bd9b35c9 4223$cat <<EOM
4633a7c4 4224
bd9b35c9
JH
4225In order to compile $package on your machine, a number of libraries
4226are usually needed. Include any other special libraries here as well.
4227Say "none" for none. The default list is almost always right.
8e07c86e 4228EOM
8e07c86e 4229
bd9b35c9
JH
4230echo " "
4231rp="What libraries to use?"
4232. ./myread
4233case "$ans" in
4234none) libs=' ';;
4235*) libs="$ans";;
4236esac
d71b2b6b 4237
bd9b35c9
JH
4238: determine optimization, if desired, or use for debug flag also
4239case "$optimize" in
4240' '|$undef) dflt='none';;
4241'') dflt='-O';;
4242*) dflt="$optimize";;
4243esac
4244$cat <<EOH
d71b2b6b 4245
bd9b35c9
JH
4246By default, $package compiles with the -O flag to use the optimizer.
4247Alternately, you might want to use the symbolic debugger, which uses
4248the -g flag (on traditional Unix systems). Either flag can be
4249specified here. To use neither flag, specify the word "none".
d71b2b6b 4250
bd9b35c9
JH
4251EOH
4252rp="What optimizer/debugger flag should be used?"
4253. ./myread
4254optimize="$ans"
4255case "$optimize" in
4256'none') optimize=" ";;
4257esac
4258
4259dflt=''
4260: We will not override a previous value, but we might want to
4261: augment a hint file
4262case "$hint" in
4263default|recommended)
4264 case "$gccversion" in
4265 1*) dflt='-fpcc-struct-return' ;;
d71b2b6b 4266 esac
bd9b35c9
JH
4267 case "$optimize" in
4268 *-g*) dflt="$dflt -DDEBUGGING";;
d71b2b6b 4269 esac
bd9b35c9
JH
4270 case "$gccversion" in
4271 2*) if test -d /etc/conf/kconfig.d &&
4272 $contains _POSIX_VERSION $usrinc/sys/unistd.h >/dev/null 2>&1
4273 then
4274 dflt="$dflt -posix"
4275 fi
f0d04425 4276 ;;
bd9b35c9
JH
4277 esac
4278 case "$gccversion" in
4279 1*) ;;
4280 2.[0-8]*) ;;
4281 ?*) echo " "
4282 echo "Checking if your compiler accepts -fno-strict-aliasing" 2>&1
4283 echo 'int main(void) { return 0; }' > gcctest.c
4284 if $cc -O2 -fno-strict-aliasing -o gcctest gcctest.c; then
4285 echo "Yes, it does." 2>&1
4286 case "$ccflags" in
4287 *strict-aliasing*)
4288 echo "Leaving current flags $ccflags alone." 2>&1
4289 ;;
4290 *) dflt="$dflt -fno-strict-aliasing" ;;
4291 esac
4292 else
4293 echo "Nope, it doesn't, but that's ok." 2>&1
4294 fi
f0d04425 4295 ;;
e5e20432
JH
4296 esac
4297 ;;
4298esac
4299
bd9b35c9
JH
4300case "$mips_type" in
4301*BSD*|'') inclwanted="$locincpth $usrinc";;
4302*) inclwanted="$locincpth $inclwanted $usrinc/bsd";;
4303esac
4304for thisincl in $inclwanted; do
4305 if $test -d $thisincl; then
4306 if $test x$thisincl != x$usrinc; then
4307 case "$dflt" in
422af00a
LC
4308 *" -I$thisincl "*);;
4309 *) dflt="$dflt -I$thisincl ";;
bd9b35c9
JH
4310 esac
4311 fi
4312 fi
4313done
40a7a20a 4314
bd9b35c9
JH
4315inctest='if $contains $2 $usrinc/$1 >/dev/null 2>&1; then
4316 xxx=true;
4317elif $contains $2 $usrinc/sys/$1 >/dev/null 2>&1; then
4318 xxx=true;
4319else
4320 xxx=false;
4321fi;
4322if $xxx; then
4323 case "$dflt" in
4324 *$2*);;
4325 *) dflt="$dflt -D$2";;
4326 esac;
4327fi'
40a7a20a 4328
bd9b35c9 4329set signal.h LANGUAGE_C; eval $inctest
40a7a20a 4330
bd9b35c9
JH
4331case "$usesocks" in
4332$define)
4333 ccflags="$ccflags -DSOCKS"
4334 ;;
4335esac
40a7a20a 4336
bd9b35c9
JH
4337case "$hint" in
4338default|recommended) dflt="$ccflags $dflt" ;;
4339*) dflt="$ccflags";;
4340esac
40a7a20a 4341
bd9b35c9
JH
4342case "$dflt" in
4343''|' ') dflt=none;;
4344esac
422af00a 4345
bd9b35c9 4346$cat <<EOH
40a7a20a 4347
bd9b35c9
JH
4348Your C compiler may want other flags. For this question you should include
4349-I/whatever and -DWHATEVER flags and any other flags used by the C compiler,
4350but you should NOT include libraries or ld flags like -lwhatever. If you
4351want $package to honor its debug switch, you should include -DDEBUGGING here.
4352Your C compiler might also need additional flags, such as -D_POSIX_SOURCE.
40a7a20a 4353
bd9b35c9 4354To use no flags, specify the word "none".
40a7a20a 4355
bd9b35c9
JH
4356EOH
4357set X $dflt
4358shift
4359dflt=${1+"$@"}
4360rp="Any additional cc flags?"
4361. ./myread
4362case "$ans" in
4363none) ccflags='';;
4364*) ccflags="$ans";;
4365esac
8e07c86e 4366
bd9b35c9 4367: the following weeds options from ccflags that are of no interest to cpp
58e77565
JH
4368case "$cppflags" in
4369'') cppflags="$ccflags" ;;
4370*) cppflags="$cppflags $ccflags" ;;
4371esac
bd9b35c9
JH
4372case "$gccversion" in
43731*) cppflags="$cppflags -D__GNUC__"
4633a7c4 4374esac
bd9b35c9
JH
4375case "$mips_type" in
4376'');;
4377*BSD*) cppflags="$cppflags -DSYSTYPE_BSD43";;
4378esac
4379case "$cppflags" in
4380'');;
4381*)
4382 echo " "
4383 echo "Let me guess what the preprocessor flags are..." >&4
4384 set X $cppflags
4385 shift
4386 cppflags=''
4387 $cat >cpp.c <<'EOM'
4388#define BLURFL foo
8e07c86e 4389
bd9b35c9
JH
4390BLURFL xx LFRULB
4391EOM
4392 previous=''
4393 for flag in $*
4394 do
4395 case "$flag" in
4396 -*) ftry="$flag";;
4397 *) ftry="$previous $flag";;
4398 esac
4399 if $cppstdin -DLFRULB=bar $cppflags $ftry $cppminus <cpp.c \
4400 >cpp1.out 2>/dev/null && \
4401 $cpprun -DLFRULB=bar $cppflags $ftry $cpplast <cpp.c \
4402 >cpp2.out 2>/dev/null && \
4403 $contains 'foo.*xx.*bar' cpp1.out >/dev/null 2>&1 && \
4404 $contains 'foo.*xx.*bar' cpp2.out >/dev/null 2>&1
4405 then
4406 cppflags="$cppflags $ftry"
4407 previous=''
4408 else
4409 previous="$flag"
4410 fi
4411 done
4412 set X $cppflags
4413 shift
4414 cppflags=${1+"$@"}
4415 case "$cppflags" in
4416 *-*) echo "They appear to be: $cppflags";;
4417 esac
4418 $rm -f cpp.c cpp?.out
2afac517 4419 ;;
4420esac
8e07c86e 4421
bd9b35c9
JH
4422: flags used in final linking phase
4423case "$ldflags" in
4424'') if ./venix; then
4425 dflt='-i -z'
10a23457 4426 else
bd9b35c9 4427 dflt=''
10a23457 4428 fi
bd9b35c9
JH
4429 case "$ccflags" in
4430 *-posix*) dflt="$dflt -posix" ;;
c4f23d77 4431 esac
bd9b35c9
JH
4432 ;;
4433*) dflt="$ldflags";;
4434esac
4435
4436: Try to guess additional flags to pick up local libraries.
4437for thislibdir in $libpth; do
4438 case " $loclibpth " in
4439 *" $thislibdir "*)
4440 case "$dflt " in
4441 *"-L$thislibdir "*) ;;
4442 *) dflt="$dflt -L$thislibdir" ;;
4443 esac
c4f23d77
AD
4444 ;;
4445 esac
bd9b35c9 4446done
c4f23d77 4447
bd9b35c9
JH
4448case "$dflt" in
4449'') dflt='none' ;;
4450esac
c4f23d77 4451
bd9b35c9
JH
4452$cat <<EOH
4453
4454Your C linker may need flags. For this question you should
4455include -L/whatever and any other flags used by the C linker, but you
4456should NOT include libraries like -lwhatever.
4457
4458Make sure you include the appropriate -L/path flags if your C linker
4459does not normally search all of the directories you specified above,
4460namely
4461 $libpth
4462To use no flags, specify the word "none".
4463
4464EOH
4465
4466rp="Any additional ld flags (NOT including libraries)?"
4467. ./myread
4468case "$ans" in
4469none) ldflags='';;
4470*) ldflags="$ans";;
4471esac
4472rmlist="$rmlist pdp11"
4473
4474: coherency check
4475echo " "
4476echo "Checking your choice of C compiler and flags for coherency..." >&4
4477$cat > try.c <<'EOF'
4478#include <stdio.h>
4479int main() { printf("Ok\n"); exit(0); }
4480EOF
7a282f6d 4481set X $cc -o try $optimize $ccflags $ldflags try.c $libs
bd9b35c9
JH
4482shift
4483$cat >try.msg <<'EOM'
4484I've tried to compile and run the following simple program:
4485
4486EOM
4487$cat try.c >> try.msg
4488
4489$cat >> try.msg <<EOM
4490
4491I used the command:
4492
4493 $*
5440bc8e 4494 $run ./try
bd9b35c9
JH
4495
4496and I got the following output:
4497
4498EOM
4499dflt=y
73614538 4500if $sh -c "$cc -o try $optimize $ccflags $ldflags try.c $libs" >>try.msg 2>&1; then
5440bc8e
JH
4501 if $sh -c "$run ./try" >>try.msg 2>&1; then
4502 xxx=`$run ./try`
bd9b35c9
JH
4503 case "$xxx" in
4504 "Ok") dflt=n ;;
4505 *) echo 'The program compiled OK, but produced no output.' >> try.msg
4506 case " $libs " in
4507 *" -lsfio "*)
4508 cat >> try.msg <<'EOQS'
4509If $libs contains -lsfio, and sfio is mis-configured, then it
4510sometimes (apparently) runs and exits with a 0 status, but with no
4511output! It may have to do with sfio's use of _exit vs. exit.
4512
4513EOQS
4514 rp="You have a big problem. Shall I abort Configure"
4515 dflt=y
4516 ;;
4517 esac
4518 ;;
4519 esac
4520 else
4521 echo "The program compiled OK, but exited with status $?." >>try.msg
4522 rp="You have a problem. Shall I abort Configure"
4523 dflt=y
4524 fi
4525else
4526 echo "I can't compile the test program." >>try.msg
4527 rp="You have a BIG problem. Shall I abort Configure"
4528 dflt=y
4529fi
4530case "$dflt" in
4531y)
4532 $cat try.msg >&4
4533 case "$knowitall" in
4534 '')
4535 echo "(The supplied flags or libraries might be incorrect.)"
c4f23d77 4536 ;;
bd9b35c9 4537 *) dflt=n;;
c4f23d77 4538 esac
bd9b35c9
JH
4539 echo " "
4540 . ./myread
4541 case "$ans" in
4542 n*|N*) ;;
4543 *) echo "Ok. Stopping Configure." >&4
4544 exit 1
c4f23d77
AD
4545 ;;
4546 esac
4547 ;;
bd9b35c9 4548n) echo "OK, that should do.";;
c4f23d77 4549esac
bd9b35c9 4550$rm -f try try.* core
c4f23d77 4551
bd9b35c9
JH
4552: define a shorthand compile call
4553compile='
4554mc_file=$1;
4555shift;
08413ebc 4556$cc -o ${mc_file} $optimize $ccflags $ldflags $* ${mc_file}.c $libs > /dev/null 2>&1;'
bd9b35c9
JH
4557: define a shorthand compile call for compilations that should be ok.
4558compile_ok='
4559mc_file=$1;
4560shift;
7a282f6d 4561$cc -o ${mc_file} $optimize $ccflags $ldflags $* ${mc_file}.c $libs;'
8e07c86e 4562
b4eb6b3d 4563: check for lengths of integral types
bd9b35c9 4564echo " "
b4eb6b3d
JH
4565case "$intsize" in
4566'')
4567 echo "Checking to see how big your integers are..." >&4
5440bc8e 4568 $cat >try.c <<'EOCP'
bd9b35c9
JH
4569#include <stdio.h>
4570int main()
4571{
b4eb6b3d
JH
4572 printf("intsize=%d;\n", (int)sizeof(int));
4573 printf("longsize=%d;\n", (int)sizeof(long));
4574 printf("shortsize=%d;\n", (int)sizeof(short));
4575 exit(0);
bd9b35c9 4576}
b4eb6b3d 4577EOCP
5440bc8e
JH
4578 set try
4579 if eval $compile_ok && $run ./try > /dev/null; then
4580 eval `$run ./try`
b4eb6b3d
JH
4581 echo "Your integers are $intsize bytes long."
4582 echo "Your long integers are $longsize bytes long."
4583 echo "Your short integers are $shortsize bytes long."
4584 else
4585 $cat >&4 <<EOM
4586!
4587Help! I can't compile and run the intsize test program: please enlighten me!
4588(This is probably a misconfiguration in your system or libraries, and
4589you really ought to fix it. Still, I'll try anyway.)
4590!
bd9b35c9 4591EOM
b4eb6b3d
JH
4592 dflt=4
4593 rp="What is the size of an integer (in bytes)?"
96056487
JH
4594 . ./myread
4595 intsize="$ans"
4596 dflt=$intsize
4597 rp="What is the size of a long integer (in bytes)?"
4598 . ./myread
4599 longsize="$ans"
4600 dflt=2
4601 rp="What is the size of a short integer (in bytes)?"
4602 . ./myread
4603 shortsize="$ans"
b4eb6b3d
JH
4604 fi
4605 ;;
4606esac
96056487 4607$rm -f try try.*
b4eb6b3d 4608
8dfa8df9
JH
4609: check for void type
4610echo " "
4611echo "Checking to see how well your C compiler groks the void type..." >&4
4612case "$voidflags" in
4613'')
4614 $cat >try.c <<'EOCP'
4615#if TRY & 1
4616void sub() {
4617#else
4618sub() {
4619#endif
4620 extern void moo(); /* function returning void */
4621 void (*goo)(); /* ptr to func returning void */
4622#if TRY & 8
4623 void *hue; /* generic ptr */
4624#endif
4625#if TRY & 2
4626 void (*foo[10])();
4627#endif
4628
4629#if TRY & 4
4630 if(goo == moo) {
4631 exit(0);
4632 }
4633#endif
4634 exit(0);
4635}
4636int main() { sub(); }
4637EOCP
4638 if $cc $ccflags -c -DTRY=$defvoidused try.c >.out 2>&1 ; then
4639 voidflags=$defvoidused
4640 echo "Good. It appears to support void to the level $package wants.">&4
4641 if $contains warning .out >/dev/null 2>&1; then
4642 echo "However, you might get some warnings that look like this:"
4643 $cat .out
4644 fi
4645 else
4646echo "Hmm, your compiler has some difficulty with void. Checking further..." >&4
4647 if $cc $ccflags -c -DTRY=1 try.c >/dev/null 2>&1; then
4648 echo "It supports 1..."
4649 if $cc $ccflags -c -DTRY=3 try.c >/dev/null 2>&1; then
4650 echo "It also supports 2..."
4651 if $cc $ccflags -c -DTRY=7 try.c >/dev/null 2>&1; then
4652 voidflags=7
4653 echo "And it supports 4 but not 8 definitely."
4654 else
4655 echo "It doesn't support 4..."
4656 if $cc $ccflags -c -DTRY=11 try.c >/dev/null 2>&1; then
4657 voidflags=11
4658 echo "But it supports 8."
4659 else
4660 voidflags=3
4661 echo "Neither does it support 8."
4662 fi
4663 fi
4664 else
4665 echo "It does not support 2..."
4666 if $cc $ccflags -c -DTRY=13 try.c >/dev/null 2>&1; then
4667 voidflags=13
4668 echo "But it supports 4 and 8."
4669 else
4670 if $cc $ccflags -c -DTRY=5 try.c >/dev/null 2>&1; then
4671 voidflags=5
4672 echo "And it supports 4 but has not heard about 8."
4673 else
4674 echo "However it supports 8 but not 4."
4675 fi
4676 fi
4677 fi
4678 else
4679 echo "There is no support at all for void."
4680 voidflags=0
4681 fi
4682 fi
4683esac
4684case "$voidflags" in
4685"$defvoidused") ;;
4686*) $cat >&4 <<'EOM'
4687 Support flag bits are:
4688 1: basic void declarations.
4689 2: arrays of pointers to functions returning void.
4690 4: operations between pointers to and addresses of void functions.
4691 8: generic void pointers.
4692EOM
4693 dflt="$voidflags";
4694 rp="Your void support flags add up to what?"
4695 . ./myread
4696 voidflags="$ans"
4697 ;;
4698esac
4699$rm -f try.* .out
4700
4701: check for length of pointer
4702echo " "
4703case "$ptrsize" in
4704'')
4705 echo "Checking to see how big your pointers are..." >&4
4706 if test "$voidflags" -gt 7; then
4707 echo '#define VOID_PTR char *' > try.c
4708 else
4709 echo '#define VOID_PTR void *' > try.c
4710 fi
4711 $cat >>try.c <<'EOCP'
4712#include <stdio.h>
4713int main()
4714{
4715 printf("%d\n", (int)sizeof(VOID_PTR));
4716 exit(0);
4717}
4718EOCP
4719 set try
4720 if eval $compile_ok; then
5440bc8e 4721 ptrsize=`$run ./try`
8dfa8df9
JH
4722 echo "Your pointers are $ptrsize bytes long."
4723 else
4724 dflt='4'
4725 echo "(I can't seem to compile the test program. Guessing...)" >&4
4726 rp="What is the size of a pointer (in bytes)?"
4727 . ./myread
4728 ptrsize="$ans"
4729 fi
4730 ;;
4731esac
4732$rm -f try.c try
4733
4734: check for long long
4735echo " "
4736echo "Checking to see if you have long long..." >&4
4737echo 'int main() { long long x = 7; return 0; }' > try.c
4738set try
4739if eval $compile; then
4740 val="$define"
4741 echo "You have long long."
4742else
4743 val="$undef"
4744 echo "You do not have long long."
4745fi
4746$rm try.*
4747set d_longlong
4748eval $setvar
4749
4750: check for length of long long
4751case "${d_longlong}${longlongsize}" in
4752$define)
4753 echo " "
4754 echo "Checking to see how big your long longs are..." >&4
4755 $cat >try.c <<'EOCP'
4756#include <stdio.h>
4757int main()
4758{
4759 printf("%d\n", (int)sizeof(long long));
4760 return(0);
4761}
4762EOCP
4763 set try
4764 if eval $compile_ok; then
5440bc8e 4765 longlongsize=`$run ./try`
8dfa8df9
JH
4766 echo "Your long longs are $longlongsize bytes long."
4767 else
4768 dflt='8'
4769 echo " "
4770 echo "(I can't seem to compile the test program. Guessing...)"
4771 rp="What is the size of a long long (in bytes)?"
4772 . ./myread
4773 longlongsize="$ans"
4774 fi
4775 if $test "X$longsize" = "X$longlongsize"; then
4776 echo "(That isn't any different from an ordinary long.)"
4777 fi
4778 ;;
4779esac
4780$rm -f try.* try
4781
4782: determine filename position in cpp output
4783echo " "
4784echo "Computing filename position in cpp output for #include directives..." >&4
4785echo '#include <stdio.h>' > foo.c
4786$cat >fieldn <<EOF
4787$startsh
4788$cppstdin $cppflags $cppminus <foo.c 2>/dev/null | \
4789$grep '^[ ]*#.*stdio\.h' | \
4790while read cline; do
4791 pos=1
4792 set \$cline
4793 while $test \$# -gt 0; do
4794 if $test -r \`echo \$1 | $tr -d '"'\`; then
4795 echo "\$pos"
4796 exit 0
4797 fi
4798 shift
4799 pos=\`expr \$pos + 1\`
4800 done
4801done
4802EOF
4803chmod +x fieldn
4804fieldn=`./fieldn`
4805$rm -f foo.c fieldn
4806case $fieldn in
4807'') pos='???';;
48081) pos=first;;
48092) pos=second;;
48103) pos=third;;
4811*) pos="${fieldn}th";;
4812esac
4813echo "Your cpp writes the filename in the $pos field of the line."
4814
4815: locate header file
4816$cat >findhdr <<EOF
4817$startsh
4818wanted=\$1
4819name=''
4820for usrincdir in $usrinc
4821do
4822 if test -f \$usrincdir/\$wanted; then
4823 echo "\$usrincdir/\$wanted"
4824 exit 0
4825 fi
4826done
4827awkprg='{ print \$$fieldn }'
4828echo "#include <\$wanted>" > foo\$\$.c
4829$cppstdin $cppminus $cppflags < foo\$\$.c 2>/dev/null | \
4830$grep "^[ ]*#.*\$wanted" | \
4831while read cline; do
4832 name=\`echo \$cline | $awk "\$awkprg" | $tr -d '"'\`
4833 case "\$name" in
4834 *[/\\\\]\$wanted) echo "\$name"; exit 1;;
4835 *[\\\\/]\$wanted) echo "\$name"; exit 1;;
4836 *) exit 2;;
4837 esac;
4838done;
4839#
4840# status = 0: grep returned 0 lines, case statement not executed
4841# status = 1: headerfile found
4842# status = 2: while loop executed, no headerfile found
4843#
4844status=\$?
4845$rm -f foo\$\$.c;
4846if test \$status -eq 1; then
4847 exit 0;
4848fi
4849exit 1
4850EOF
4851chmod +x findhdr
4852
4853: define an alternate in-header-list? function
4854inhdr='echo " "; td=$define; tu=$undef; yyy=$@;
4855cont=true; xxf="echo \"<\$1> found.\" >&4";
4856case $# in 2) xxnf="echo \"<\$1> NOT found.\" >&4";;
4857*) xxnf="echo \"<\$1> NOT found, ...\" >&4";;
4858esac;
4859case $# in 4) instead=instead;; *) instead="at last";; esac;
4860while $test "$cont"; do
4861 xxx=`./findhdr $1`
4862 var=$2; eval "was=\$$2";
4863 if $test "$xxx" && $test -r "$xxx";
4864 then eval $xxf;
4865 eval "case \"\$$var\" in $undef) . ./whoa; esac"; eval "$var=\$td";
4866 cont="";
4867 else eval $xxnf;
4868 eval "case \"\$$var\" in $define) . ./whoa; esac"; eval "$var=\$tu"; fi;
4869 set $yyy; shift; shift; yyy=$@;
4870 case $# in 0) cont="";;
4871 2) xxf="echo \"but I found <\$1> $instead.\" >&4";
4872 xxnf="echo \"and I did not find <\$1> either.\" >&4";;
4873 *) xxf="echo \"but I found <\$1\> instead.\" >&4";
4874 xxnf="echo \"there is no <\$1>, ...\" >&4";;
4875 esac;
4876done;
4877while $test "$yyy";
4878do set $yyy; var=$2; eval "was=\$$2";
4879 eval "case \"\$$var\" in $define) . ./whoa; esac"; eval "$var=\$tu";
4880 set $yyy; shift; shift; yyy=$@;
4881done'
4882
4883: see if inttypes.h is available
4884: we want a real compile instead of Inhdr because some systems
4885: have an inttypes.h which includes non-existent headers
4886echo " "
4887$cat >try.c <<EOCP
4888#include <inttypes.h>
4889int main() {
4890 static int32_t foo32 = 0x12345678;
4891}
4892EOCP
4893set try
4894if eval $compile; then
4895 echo "<inttypes.h> found." >&4
4896 val="$define"
4897else
4898 echo "<inttypes.h> NOT found." >&4
4899 val="$undef"
4900fi
4901$rm -f try.c try
4902set i_inttypes
4903eval $setvar
4904
4905: check for int64_t
4906echo " "
4907echo "Checking to see if you have int64_t..." >&4
4908$cat >try.c <<EOCP
4909#include <sys/types.h>
4910#$i_inttypes I_INTTYPES
4911#ifdef I_INTTYPES
4912#include <inttypes.h>
4913#endif
4914int main() { int64_t x = 7; }
4915EOCP
4916set try
4917if eval $compile; then
4918 val="$define"
4919 echo "You have int64_t."
4920else
4921 val="$undef"
4922 echo "You do not have int64_t."
4923fi
4924$rm -f try try.*
4925set d_int64_t
4926eval $setvar
4927
4928
4929echo " "
4930echo "Checking which 64-bit integer type we could use..." >&4
4931
4932case "$intsize" in
49338) val=int
4934 set quadtype
4935 eval $setvar
4936 val='"unsigned int"'
4937 set uquadtype
4938 eval $setvar
4939 quadkind=1
4940 ;;
4941*) case "$longsize" in
4942 8) val=long
4943 set quadtype
4944 eval $setvar
4945 val='"unsigned long"'
4946 set uquadtype
4947 eval $setvar
4948 quadkind=2
4949 ;;
4950 *) case "$d_longlong:$longlongsize" in
4951 define:8)
4952 val='"long long"'
4953 set quadtype
4954 eval $setvar
4955 val='"unsigned long long"'
4956 set uquadtype
4957 eval $setvar
4958 quadkind=3
4959 ;;
4960 *) case "$d_int64_t" in
4961 define)
4962 val=int64_t
4963 set quadtype
4964 eval $setvar
4965 val=uint64_t
4966 set uquadtype
4967 eval $setvar
4968 quadkind=4
4969 ;;
4970 esac
4971 ;;
4972 esac
4973 ;;
4974 esac
4975 ;;
4976esac
4977
4978case "$quadtype" in
4979'') echo "Alas, no 64-bit integer types in sight." >&4
4980 d_quad="$undef"
4981 ;;
4982*) echo "We could use '$quadtype' for 64-bit integers." >&4
4983 d_quad="$define"
4984 ;;
4985esac
4986
b4eb6b3d
JH
4987
4988case "$uselonglong" in
4989"$define"|true|[yY]*)
4990 cat <<EOM >&4
4991
4992*** Configure -Duselonglong is deprecated, using -Duse64bitint instead.
4993EOM
4994 use64bitint="$define"
4995 ;;
4996esac
4997case "$use64bits" in
4998"$define"|true|[yY]*)
4999 cat <<EOM >&4
5000
5001*** Configure -Duse64bits is deprecated, using -Duse64bitint instead.
5002EOM
5003 use64bitint="$define"
5004 ;;
5005esac
5006case "$use64bitints" in
5007"$define"|true|[yY]*)
5008 cat <<EOM >&4
5009
5010*** There is no Configure -Duse64bitints, using -Duse64bitint instead.
5011EOM
5012 use64bitint="$define"
5013 ;;
5014esac
5015case "$use64bitsint" in
5016"$define"|true|[yY]*)
5017 cat <<EOM >&4
5018
5019*** There is no Configure -Duse64bitsint, using -Duse64bitint instead.
5020EOM
5021 use64bitint="$define"
5022 ;;
5023esac
5024case "$uselonglongs" in
5025"$define"|true|[yY]*)
5026 cat <<EOM >&4
5027
5028*** There is no Configure -Duselonglongs, using -Duse64bitint instead.
5029EOM
5030 use64bitint="$define"
5031 ;;
5032esac
5033case "$use64bitsall" in
5034"$define"|true|[yY]*)
5035 cat <<EOM >&4
5036
5037*** There is no Configure -Duse64bitsall, using -Duse64bitall instead.
5038EOM
5039 use64bitall="$define"
5040 ;;
5041esac
5042
5043case "$ccflags" in
5044*-DUSE_LONG_LONG*|*-DUSE_64_BIT_INT*|*-DUSE_64_BIT_ALL*) use64bitint="$define";;
5045esac
5046case "$use64bitall" in
5047"$define"|true|[yY]*) use64bitint="$define" ;;
5048esac
5049
5050case "$longsize" in
50518) cat <<EOM
5052
5053You have natively 64-bit long integers.
5054EOM
5055 val="$define"
5056 ;;
5057*) case "$use64bitint" in
5058 "$define"|true|[yY]*) dflt='y';;
5059 *) dflt='n';;
5060 esac
8dfa8df9
JH
5061 case "$d_quad" in
5062 "$define") ;;
5063 *) dflt='n' ;;
5064 esac
b4eb6b3d
JH
5065 cat <<EOM
5066
5067Perl can be built to take advantage of 64-bit integer types
5068on some systems. To do so, Configure can be run with -Duse64bitint.
5069Choosing this option will most probably introduce binary incompatibilities.
5070
5071If this doesn't make any sense to you, just accept the default '$dflt'.
8dfa8df9 5072(The default has been chosen based on your configuration.)
b4eb6b3d
JH
5073EOM
5074 rp='Try to use 64-bit integers, if available?'
5075 . ./myread
5076 case "$ans" in
5077 [yY]*) val="$define" ;;
5078 *) val="$undef" ;;
5079 esac
5080 ;;
5081esac
5082set use64bitint
5083eval $setvar
5084
5085case "$use64bitall" in
5086"$define"|true|[yY]*) dflt='y' ;;
5087*) case "$longsize" in
5088 8) dflt='y' ;;
5089 *) dflt='n' ;;
5090 esac
5091 ;;
5092esac
5093cat <<EOM
5094
5095You may also choose to try maximal 64-bitness. It means using as much
509664-bitness as possible on the platform. This in turn means even more
5097binary incompatibilities. On the other hand, your platform may not
5098have any more 64-bitness available than what you already have chosen.
5099
5100If this doesn't make any sense to you, just accept the default '$dflt'.
8dfa8df9 5101(The default has been chosen based on your configuration.)
b4eb6b3d
JH
5102EOM
5103rp='Try to use maximal 64-bit support, if available?'
5104. ./myread
5105case "$ans" in
5106[yY]*) val="$define" ;;
5107*) val="$undef" ;;
5108esac
5109set use64bitall
5110eval $setvar
5111case "$use64bitall" in
5112"$define")
5113 case "$use64bitint" in
5114 "$undef")
5115 cat <<EOM
5116
5117Since you have chosen a maximally 64-bit build, I'm also turning on
5118the use of 64-bit integers.
5119EOM
5120 use64bitint="$define" ;;
5121 esac
5122 ;;
5123esac
5124
8dfa8df9
JH
5125case "$use64bitall" in
5126"$define"|true|[yY]*)
5127 case "$ptrsize" in
5128 4) cat <<EOM >&4
5129
5130*** You have chosen a maximally 64-bit build, but your pointers
5131*** are only 4 bytes wide, disabling maximal 64-bitness.
5132
5133EOM
5134 use64bitall="$undef"
5135 case "$use64bitint" in
5136 "$define"|true|[yY]*) ;;
5137 *) cat <<EOM >&4
5138
5139*** Downgrading from maximal 64-bitness to using 64-bit integers.
5140
5141EOM
5142 use64bitint="$define"
5143 ;;
5144 esac
5145 ;;
5146 esac
5147 ;;
5148esac
5149
b4eb6b3d
JH
5150case "$use64bitint" in
5151"$define"|true|[yY]*)
5152: Look for a hint-file generated 'call-back-unit'. If the
5153: user has specified that a 64-bit perl is to be built,
5154: we may need to set or change some other defaults.
5155 if $test -f use64bitint.cbu; then
5156 echo "Your platform has some specific hints for 64-bit integers, using them..."
5157 . ./use64bitint.cbu
5158 fi
5159 case "$longsize" in
5160 4) case "$archname64" in
5161 '') archname64=64int ;;
5162 esac
5163 ;;
5164 esac
5165 ;;
5166esac
5167
5168case "$use64bitall" in
5169"$define"|true|[yY]*)
5170: Look for a hint-file generated 'call-back-unit'. If the
5171: user has specified that a maximally 64-bit perl is to be built,
5172: we may need to set or change some other defaults.
5173 if $test -f use64bitall.cbu; then
5174 echo "Your platform has some specific hints for 64-bit builds, using them..."
5175 . ./use64bitall.cbu
5176 fi
5177 case "$longsize" in
5178 4) case "$archname64" in
5179 ''|64int) archname64=64all ;;
5180 esac
5181 ;;
5182 esac
5183 ;;
5184esac
5185
5186echo " "
5187echo "Checking for GNU C Library..." >&4
5440bc8e 5188cat >try.c <<EOM
b4eb6b3d
JH
5189#include <stdio.h>
5190int main()
5191{
5192#ifdef __GLIBC__
5193 exit(0);
5194#else
5195 exit(1);
5196#endif
5197}
5198EOM
5440bc8e
JH
5199set try
5200if eval $compile_ok && $run ./try; then
b4eb6b3d
JH
5201 val="$define"
5202 echo "You are using the GNU C Library"
5203else
5204 val="$undef"
5205 echo "You are not using the GNU C Library"
5206fi
5440bc8e 5207$rm -f try try.*
b4eb6b3d
JH
5208set d_gnulibc
5209eval $setvar
5210
5211: see if nm is to be used to determine whether a symbol is defined or not
5212case "$usenm" in
5213'')
5214 dflt=''
c1a7f87b
JH
5215 case "$d_gnulibc" in
5216 "$define")
5217 echo " "
5218 echo "nm probably won't work on the GNU C Library." >&4
5219 dflt=n
bd9b35c9 5220 ;;
c1a7f87b
JH
5221 esac
5222 case "$dflt" in
5223 '')
5224 if $test "$osname" = aix -a ! -f /lib/syscalls.exp; then
5225 echo " "
5226 echo "Whoops! This is an AIX system without /lib/syscalls.exp!" >&4
5227 echo "'nm' won't be sufficient on this sytem." >&4
5228 dflt=n
5229 fi
5230 ;;
5231 esac
5232 case "$dflt" in
5233 '') dflt=`$egrep 'inlibc|csym' $rsrc/Configure | wc -l 2>/dev/null`
5234 if $test $dflt -gt 20; then
5235 dflt=y
5236 else
5237 dflt=n
5238 fi
bd9b35c9
JH
5239 ;;
5240 esac
bd9b35c9
JH
5241 ;;
5242*)
c1a7f87b
JH
5243 case "$usenm" in
5244 true|$define) dflt=y;;
5245 *) dflt=n;;
5246 esac
bd9b35c9
JH
5247 ;;
5248esac
5249$cat <<EOM
5250
c1a7f87b
JH
5251I can use $nm to extract the symbols from your C libraries. This
5252is a time consuming task which may generate huge output on the disk (up
5253to 3 megabytes) but that should make the symbols extraction faster. The
5254alternative is to skip the 'nm' extraction part and to compile a small
5255test program instead to determine whether each symbol is present. If
5256you have a fast C compiler and/or if your 'nm' output cannot be parsed,
5257this may be the best solution.
5258
5259You probably shouldn't let me use 'nm' if you are using the GNU C Library.
bd9b35c9
JH
5260
5261EOM
c1a7f87b
JH
5262rp="Shall I use $nm to extract C symbols from the libraries?"
5263. ./myread
5264case "$ans" in
5265[Nn]*) usenm=false;;
5266*) usenm=true;;
bd9b35c9 5267esac
bd9b35c9 5268
c1a7f87b
JH
5269runnm=$usenm
5270case "$reuseval" in
5271true) runnm=false;;
8e07c86e 5272esac
29209bc5 5273
c1a7f87b
JH
5274: nm options which may be necessary
5275case "$nm_opt" in
5276'') if $test -f /mach_boot; then
5277 nm_opt='' # Mach
5278 elif $test -d /usr/ccs/lib; then
5279 nm_opt='-p' # Solaris (and SunOS?)
5280 elif $test -f /dgux; then
5281 nm_opt='-p' # DG-UX
5282 elif $test -f /lib64/rld; then
5283 nm_opt='-p' # 64-bit Irix
5284 else
5285 nm_opt=''
5286 fi;;
5287esac
bd9b35c9 5288
c1a7f87b
JH
5289: nm options which may be necessary for shared libraries but illegal
5290: for archive libraries. Thank you, Linux.
5291case "$nm_so_opt" in
5292'') case "$myuname" in
5293 *linux*)
5294 if $nm --help | $grep 'dynamic' > /dev/null 2>&1; then
5295 nm_so_opt='--dynamic'
5296 fi
5297 ;;
bd9b35c9 5298 esac
c1a7f87b
JH
5299 ;;
5300esac
8e07c86e 5301
c1a7f87b
JH
5302case "$runnm" in
5303true)
5304: get list of predefined functions in a handy place
5305echo " "
5306case "$libc" in
5307'') libc=unknown
5308 case "$libs" in
5309 *-lc_s*) libc=`./loc libc_s$_a $libc $libpth`
bd9b35c9 5310 esac
ff935051
JH
5311 ;;
5312esac
c1a7f87b
JH
5313case "$libs" in
5314'') ;;
5315*) for thislib in $libs; do
5316 case "$thislib" in
5317 -lc|-lc_s)
5318 : Handle C library specially below.
5319 ;;
5320 -l*)
5321 thislib=`echo $thislib | $sed -e 's/^-l//'`
5322 if try=`./loc lib$thislib.$so.'*' X $libpth`; $test -f "$try"; then
5323 :
5324 elif try=`./loc lib$thislib.$so X $libpth`; $test -f "$try"; then
5325 :
5326 elif try=`./loc lib$thislib$_a X $libpth`; $test -f "$try"; then
5327 :
5328 elif try=`./loc $thislib$_a X $libpth`; $test -f "$try"; then
5329 :
5330 elif try=`./loc lib$thislib X $libpth`; $test -f "$try"; then
5331 :
5332 elif try=`./loc $thislib X $libpth`; $test -f "$try"; then
5333 :
5334 elif try=`./loc Slib$thislib$_a X $xlibpth`; $test -f "$try"; then
5335 :
5336 else
5337 try=''
5338 fi
5339 libnames="$libnames $try"
5340 ;;
5341 *) libnames="$libnames $thislib" ;;
34d1710f 5342 esac
c1a7f87b 5343 done
4633a7c4
LW
5344 ;;
5345esac
c1a7f87b
JH
5346xxx=normal
5347case "$libc" in
5348unknown)
5349 set /lib/libc.$so
5350 for xxx in $libpth; do
5351 $test -r $1 || set $xxx/libc.$so
5352 : The messy sed command sorts on library version numbers.
5353 $test -r $1 || \
5354 set `echo blurfl; echo $xxx/libc.$so.[0-9]* | \
5355 tr ' ' $trnl | egrep -v '\.[A-Za-z]*$' | $sed -e '
5356 h
5357 s/[0-9][0-9]*/0000&/g
5358 s/0*\([0-9][0-9][0-9][0-9][0-9]\)/\1/g
5359 G
5360 s/\n/ /' | \
381aa1ff 5361 $sort | $sed -e 's/^.* //'`
c1a7f87b
JH
5362 eval set \$$#
5363 done
5364 $test -r $1 || set /usr/ccs/lib/libc.$so
5365 $test -r $1 || set /lib/libsys_s$_a
5366 ;;
5367*)
5368 set blurfl
5369 ;;
a4f3eea9 5370esac
c1a7f87b
JH
5371if $test -r "$1"; then
5372 echo "Your (shared) C library seems to be in $1."
5373 libc="$1"
5374elif $test -r /lib/libc && $test -r /lib/clib; then
5375 echo "Your C library seems to be in both /lib/clib and /lib/libc."
5376 xxx=apollo
5377 libc='/lib/clib /lib/libc'
5378 if $test -r /lib/syslib; then
5379 echo "(Your math library is in /lib/syslib.)"
5380 libc="$libc /lib/syslib"
5381 fi
5382elif $test -r "$libc" || (test -h "$libc") >/dev/null 2>&1; then
5383 echo "Your C library seems to be in $libc, as you said before."
5384elif $test -r $incpath/usr/lib/libc$_a; then
5385 libc=$incpath/usr/lib/libc$_a;
5386 echo "Your C library seems to be in $libc. That's fine."
5387elif $test -r /lib/libc$_a; then
5388 libc=/lib/libc$_a;
5389 echo "Your C library seems to be in $libc. You're normal."
5390else
5391 if tans=`./loc libc$_a blurfl/dyick $libpth`; $test -r "$tans"; then
5392 :
5393 elif tans=`./loc libc blurfl/dyick $libpth`; $test -r "$tans"; then
5394 libnames="$libnames "`./loc clib blurfl/dyick $libpth`
5395 elif tans=`./loc clib blurfl/dyick $libpth`; $test -r "$tans"; then
5396 :
5397 elif tans=`./loc Slibc$_a blurfl/dyick $xlibpth`; $test -r "$tans"; then
5398 :
5399 elif tans=`./loc Mlibc$_a blurfl/dyick $xlibpth`; $test -r "$tans"; then
5400 :
5401 else
5402 tans=`./loc Llibc$_a blurfl/dyick $xlibpth`
5403 fi
5404 if $test -r "$tans"; then
5405 echo "Your C library seems to be in $tans, of all places."
5406 libc=$tans
5407 else
5408 libc='blurfl'
5409 fi
5410fi
5411if $test $xxx = apollo -o -r "$libc" || (test -h "$libc") >/dev/null 2>&1; then
5412 dflt="$libc"
5413 cat <<EOM
a4f3eea9 5414
c1a7f87b
JH
5415If the guess above is wrong (which it might be if you're using a strange
5416compiler, or your machine supports multiple models), you can override it here.
bd9b35c9
JH
5417
5418EOM
a4f3eea9 5419else
c1a7f87b 5420 dflt=''
381aa1ff 5421 echo $libpth | $tr ' ' $trnl | $sort | $uniq > libpath
c1a7f87b
JH
5422 cat >&4 <<EOM
5423I can't seem to find your C library. I've looked in the following places:
a4f3eea9 5424
c1a7f87b
JH
5425EOM
5426 $sed 's/^/ /' libpath
5427 cat <<EOM
29209bc5 5428
c1a7f87b 5429None of these seems to contain your C library. I need to get its name...
a4f3eea9 5430
bd9b35c9 5431EOM
bd9b35c9 5432fi
c1a7f87b
JH
5433fn=f
5434rp='Where is your C library?'
5435. ./getfile
5436libc="$ans"
a4f3eea9 5437
c1a7f87b 5438echo " "
381aa1ff 5439echo $libc $libnames | $tr ' ' $trnl | $sort | $uniq > libnames
c1a7f87b
JH
5440set X `cat libnames`
5441shift
5442xxx=files
5443case $# in 1) xxx=file; esac
5444echo "Extracting names from the following $xxx for later perusal:" >&4
5445echo " "
5446$sed 's/^/ /' libnames >&4
5447echo " "
5448$echo $n "This may take a while...$c" >&4
a4f3eea9 5449
c1a7f87b
JH
5450for file in $*; do
5451 case $file in
5452 *$so*) $nm $nm_so_opt $nm_opt $file 2>/dev/null;;
5453 *) $nm $nm_opt $file 2>/dev/null;;
a4f3eea9 5454 esac
c1a7f87b 5455done >libc.tmp
a4f3eea9 5456
c1a7f87b
JH
5457$echo $n ".$c"
5458$grep fprintf libc.tmp > libc.ptf
5459xscan='eval "<libc.ptf $com >libc.list"; $echo $n ".$c" >&4'
5460xrun='eval "<libc.tmp $com >libc.list"; echo "done" >&4'
5461xxx='[ADTSIW]'
5462if com="$sed -n -e 's/__IO//' -e 's/^.* $xxx *_[_.]*//p' -e 's/^.* $xxx *//p'";\
5463 eval $xscan;\
5464 $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5465 eval $xrun
5466elif com="$sed -n -e 's/^__*//' -e 's/^\([a-zA-Z_0-9$]*\).*xtern.*/\1/p'";\
5467 eval $xscan;\
5468 $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5469 eval $xrun
5470elif com="$sed -n -e '/|UNDEF/d' -e '/FUNC..GL/s/^.*|__*//p'";\
5471 eval $xscan;\
5472 $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5473 eval $xrun
5474elif com="$sed -n -e 's/^.* D __*//p' -e 's/^.* D //p'";\
5475 eval $xscan;\
5476 $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5477 eval $xrun
5478elif com="$sed -n -e 's/^_//' -e 's/^\([a-zA-Z_0-9]*\).*xtern.*text.*/\1/p'";\
5479 eval $xscan;\
5480 $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5481 eval $xrun
5482elif com="$sed -n -e 's/^.*|FUNC |GLOB .*|//p'";\
5483 eval $xscan;\
5484 $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5485 eval $xrun
5486elif com="$grep '|' | $sed -n -e '/|COMMON/d' -e '/|DATA/d' \
5487 -e '/ file/d' -e 's/^\([^ ]*\).*/\1/p'";\
5488 eval $xscan;\
5489 $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5490 eval $xrun
5491elif com="$sed -n -e 's/^.*|FUNC |GLOB .*|//p' -e 's/^.*|FUNC |WEAK .*|//p'";\
5492 eval $xscan;\
5493 $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5494 eval $xrun
5495elif com="$sed -n -e 's/^__//' -e '/|Undef/d' -e '/|Proc/s/ .*//p'";\
5496 eval $xscan;\
5497 $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5498 eval $xrun
5499elif com="$sed -n -e 's/^.*|Proc .*|Text *| *//p'";\
5500 eval $xscan;\
5501 $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5502 eval $xrun
5503elif com="$sed -n -e '/Def. Text/s/.* \([^ ]*\)\$/\1/p'";\
5504 eval $xscan;\
5505 $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5506 eval $xrun
5507elif com="$sed -n -e 's/^[-0-9a-f ]*_\(.*\)=.*/\1/p'";\
5508 eval $xscan;\
5509 $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5510 eval $xrun
5511elif com="$sed -n -e 's/.*\.text n\ \ \ \.//p'";\
5512 eval $xscan;\
5513 $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5514 eval $xrun
5515elif com="sed -n -e 's/^__.*//' -e 's/[ ]*D[ ]*[0-9]*.*//p'";\
5516 eval $xscan;\
5517 $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5518 eval $xrun
5519else
5520 $nm -p $* 2>/dev/null >libc.tmp
5521 $grep fprintf libc.tmp > libc.ptf
5522 if com="$sed -n -e 's/^.* [ADTSIW] *_[_.]*//p' -e 's/^.* [ADTSIW] //p'";\
5523 eval $xscan; $contains '^fprintf$' libc.list >/dev/null 2>&1
5524 then
5525 nm_opt='-p'
5526 eval $xrun
bd9b35c9 5527 else
c1a7f87b
JH
5528 echo " "
5529 echo "$nm didn't seem to work right. Trying $ar instead..." >&4
5530 com=''
5531 if $ar t $libc > libc.tmp && $contains '^fprintf$' libc.tmp >/dev/null 2>&1; then
5532 for thisname in $libnames $libc; do
5533 $ar t $thisname >>libc.tmp
5534 done
5535 $sed -e "s/\\$_o\$//" < libc.tmp > libc.list
5536 echo "Ok." >&4
5537 elif test "X$osname" = "Xos2" && $ar tv $libc > libc.tmp; then
5538 # Repeat libc to extract forwarders to DLL entries too
5539 for thisname in $libnames $libc; do
5540 $ar tv $thisname >>libc.tmp
5541 # Revision 50 of EMX has bug in $ar.
5542 # it will not extract forwarders to DLL entries
5543 # Use emximp which will extract exactly them.
5544 emximp -o tmp.imp $thisname \
5545 2>/dev/null && \
5546 $sed -e 's/^\([_a-zA-Z0-9]*\) .*$/\1/p' \
5547 < tmp.imp >>libc.tmp
5548 $rm tmp.imp
5549 done
5550 $sed -e "s/\\$_o\$//" -e 's/^ \+//' < libc.tmp > libc.list
5551 echo "Ok." >&4
5552 else
5553 echo "$ar didn't seem to work right." >&4
5554 echo "Maybe this is a Cray...trying bld instead..." >&4
5555 if bld t $libc | $sed -e 's/.*\///' -e "s/\\$_o:.*\$//" > libc.list
5556 then
5557 for thisname in $libnames; do
5558 bld t $libnames | \
5559 $sed -e 's/.*\///' -e "s/\\$_o:.*\$//" >>libc.list
5560 $ar t $thisname >>libc.tmp
5561 done
5562 echo "Ok." >&4
bd9b35c9 5563 else
c1a7f87b
JH
5564 echo "That didn't work either. Giving up." >&4
5565 exit 1
bd9b35c9 5566 fi
c1a7f87b 5567 fi
a4f3eea9 5568 fi
a4f3eea9 5569fi
c1a7f87b
JH
5570nm_extract="$com"
5571if $test -f /lib/syscalls.exp; then
5572 echo " "
5573 echo "Also extracting names from /lib/syscalls.exp for good ole AIX..." >&4
a8c676c6 5574 $sed -n 's/^\([^ ]*\)[ ]*syscall[0-9]*[ ]*$/\1/p' /lib/syscalls.exp >>libc.list
c1a7f87b
JH
5575fi
5576;;
5577esac
5578$rm -f libnames libpath
bd9b35c9 5579
c1a7f87b
JH
5580: is a C symbol defined?
5581csym='tlook=$1;
5582case "$3" in
5583-v) tf=libc.tmp; tc=""; tdc="";;
5584-a) tf=libc.tmp; tc="[0]"; tdc="[]";;
5585*) tlook="^$1\$"; tf=libc.list; tc="()"; tdc="()";;
5586esac;
5587tx=yes;
5588case "$reuseval-$4" in
5589true-) ;;
5590true-*) tx=no; eval "tval=\$$4"; case "$tval" in "") tx=yes;; esac;;
5591esac;
5592case "$tx" in
5593yes)
5594 case "$runnm" in
5595 true)
5596 if $contains $tlook $tf >/dev/null 2>&1;
5597 then tval=true;
5598 else tval=false;
5599 fi;;
5600 *)
5601 echo "int main() { extern short $1$tdc; printf(\"%hd\", $1$tc); }" > t.c;
7a282f6d 5602 if $cc -o t $optimize $ccflags $ldflags t.c $libs >/dev/null 2>&1;
c1a7f87b
JH
5603 then tval=true;
5604 else tval=false;
5605 fi;
5606 $rm -f t t.c;;
5607 esac;;
5608*)
5609 case "$tval" in
5610 $define) tval=true;;
5611 *) tval=false;;
5612 esac;;
5613esac;
5614eval "$2=$tval"'
bd9b35c9 5615
c1a7f87b
JH
5616: define an is-in-libc? function
5617inlibc='echo " "; td=$define; tu=$undef;
5618sym=$1; var=$2; eval "was=\$$2";
5619tx=yes;
5620case "$reuseval$was" in
5621true) ;;
5622true*) tx=no;;
5623esac;
5624case "$tx" in
5625yes)
5626 set $sym tres -f;
5627 eval $csym;
5628 case "$tres" in
5629 true)
5630 echo "$sym() found." >&4;
5631 case "$was" in $undef) . ./whoa; esac; eval "$var=\$td";;
5632 *)
5633 echo "$sym() NOT found." >&4;
5634 case "$was" in $define) . ./whoa; esac; eval "$var=\$tu";;
5635 esac;;
bd9b35c9 5636*)
c1a7f87b
JH
5637 case "$was" in
5638 $define) echo "$sym() found." >&4;;
5639 *) echo "$sym() NOT found." >&4;;
5640 esac;;
5641esac'
5642
b4eb6b3d
JH
5643: see if sqrtl exists
5644set sqrtl d_sqrtl
c1a7f87b
JH
5645eval $inlibc
5646
b4eb6b3d
JH
5647case "$ccflags" in
5648*-DUSE_LONG_DOUBLE*|*-DUSE_MORE_BITS*) uselongdouble="$define" ;;
c1a7f87b 5649esac
b4eb6b3d
JH
5650
5651case "$uselongdouble" in
5652$define|true|[yY]*) dflt='y';;
5653*) dflt='n';;
5654esac
5655cat <<EOM
5656
5657Perl can be built to take advantage of long doubles which
5658(if available) may give more accuracy and range for floating point numbers.
5659
5660If this doesn't make any sense to you, just accept the default '$dflt'.
5661EOM
5662rp='Try to use long doubles if available?'
c1a7f87b
JH
5663. ./myread
5664case "$ans" in
b4eb6b3d
JH
5665y|Y) val="$define" ;;
5666*) val="$undef" ;;
5667esac
5668set uselongdouble
5669eval $setvar
bfb7748a 5670
b4eb6b3d
JH
5671case "$uselongdouble" in
5672true|[yY]*) uselongdouble="$define" ;;
5673esac
bfb7748a 5674
b4eb6b3d
JH
5675case "$uselongdouble" in
5676$define)
5677: Look for a hint-file generated 'call-back-unit'. If the
5678: user has specified that long doubles should be used,
5679: we may need to set or change some other defaults.
5680 if $test -f uselongdouble.cbu; then
5681 echo "Your platform has some specific hints for long doubles, using them..."
5682 . ./uselongdouble.cbu
5683 else
5684 $cat <<EOM
5685(Your platform doesn't have any specific hints for long doubles.)
c1a7f87b 5686EOM
b4eb6b3d
JH
5687 fi
5688 ;;
5689esac
5690
5691case "$uselongdouble:$d_sqrtl" in
5692$define:$undef)
5693 $cat <<EOM >&4
5694
5695*** You requested the use of long doubles but you do not seem to have
5696*** the mathematic functions for long doubles. I'm disabling the use
5697*** of long doubles.
5698
5699EOM
5700 uselongdouble=$undef
5701 ;;
5702esac
5703
5704: check for length of double
5705echo " "
5706case "$doublesize" in
5707'')
5708 echo "Checking to see how big your double precision numbers are..." >&4
5709 $cat >try.c <<'EOCP'
5710#include <stdio.h>
5711int main()
5712{
5713 printf("%d\n", (int)sizeof(double));
5714 exit(0);
5715}
5716EOCP
5717 set try
5718 if eval $compile_ok; then
5440bc8e 5719 doublesize=`$run ./try`
b4eb6b3d
JH
5720 echo "Your double is $doublesize bytes long."
5721 else
5722 dflt='8'
5723 echo "(I can't seem to compile the test program. Guessing...)"
5724 rp="What is the size of a double precision number (in bytes)?"
5725 . ./myread
5726 doublesize="$ans"
5727 fi
5728 ;;
5729esac
5730$rm -f try.c try
5731
5732: check for long doubles
5733echo " "
5734echo "Checking to see if you have long double..." >&4
5735echo 'int main() { long double x = 7.0; }' > try.c
5736set try
5737if eval $compile; then
5738 val="$define"
5739 echo "You have long double."
5740else
5741 val="$undef"
5742 echo "You do not have long double."
5743fi
5744$rm try.*
5745set d_longdbl
5746eval $setvar
5747
5748: check for length of long double
5749case "${d_longdbl}${longdblsize}" in
5750$define)
5751 echo " "
5752 echo "Checking to see how big your long doubles are..." >&4
5753 $cat >try.c <<'EOCP'
5754#include <stdio.h>
5755int main()
5756{
5757 printf("%d\n", sizeof(long double));
5758}
5759EOCP
5760 set try
5761 set try
5762 if eval $compile; then
5440bc8e 5763 longdblsize=`$run ./try`
b4eb6b3d
JH
5764 echo "Your long doubles are $longdblsize bytes long."
5765 else
5766 dflt='8'
5767 echo " "
5768 echo "(I can't seem to compile the test program. Guessing...)" >&4
5769 rp="What is the size of a long double (in bytes)?"
5770 . ./myread
5771 longdblsize="$ans"
5772 fi
5773 if $test "X$doublesize" = "X$longdblsize"; then
5774 echo "(That isn't any different from an ordinary double.)"
5775 fi
5776 ;;
5777esac
5778$rm -f try.* try
5779
51de783f 5780case "$useperlio" in
5a3a8a02 5781$define|true|[yY]*|'') dflt='y';;
51de783f
JH
5782*) dflt='n';;
5783esac
5784cat <<EOM
5785
5786Previous version of $package used the standard IO mechanisms as
5a3a8a02 5787defined in <stdio.h>. Versions 5.003_02 and later of $package allow
51de783f 5788alternate IO mechanisms via the PerlIO abstraction layer, but the
5a3a8a02
JH
5789stdio mechanism is still available if needed. The abstraction layer
5790can use AT&T's sfio (if you already have sfio installed) or regular stdio.
51de783f
JH
5791Using PerlIO with sfio may cause problems with some extension modules.
5792
5793If this doesn't make any sense to you, just accept the default '$dflt'.
5794EOM
5a3a8a02 5795rp='Use the PerlIO abstraction layer?'
51de783f
JH
5796. ./myread
5797case "$ans" in
5798y|Y)
5799 val="$define"
5a3a8a02 5800 ;;
51de783f
JH
5801*)
5802 echo "Ok, doing things the stdio way."
5803 val="$undef"
5804 ;;
5805esac
5806set useperlio
5807eval $setvar
5808
5809case "$usesocks" in
5810$define|true|[yY]*)
5811 case "$useperlio" in
5812 $define|true|[yY]*) ;;
5813 *) cat >&4 <<EOM
5814
5815You are using the SOCKS proxy protocol library which means that you
5816should also use the PerlIO layer. You may be headed for trouble.
5817
5818EOM
5819 ;;
5820 esac
5821 ;;
5822esac
5823
5824
b4eb6b3d
JH
5825: determine the architecture name
5826echo " "
5827if xxx=`./loc arch blurfl $pth`; $test -f "$xxx"; then
5828 tarch=`arch`"-$osname"
5829elif xxx=`./loc uname blurfl $pth`; $test -f "$xxx" ; then
5830 if uname -m > tmparch 2>&1 ; then
5831 tarch=`$sed -e 's/ *$//' -e 's/ /_/g' \
5832 -e 's/$/'"-$osname/" tmparch`
5833 else
5834 tarch="$osname"
5835 fi
5836 $rm -f tmparch
5837else
5838 tarch="$osname"
5839fi
5840case "$myarchname" in
5841''|"$tarch") ;;
5842*)
5843 echo "(Your architecture name used to be $myarchname.)"
5844 archname=''
5845 ;;
5846esac
5440bc8e
JH
5847case "$targetarch" in
5848'') ;;
5849*) archname=`echo $targetarch|sed 's,^[^-]*-,,'` ;;
5850esac
b4eb6b3d
JH
5851myarchname="$tarch"
5852case "$archname" in
5853'') dflt="$tarch";;
5854*) dflt="$archname";;
5855esac
5856rp='What is your architecture name'
5857. ./myread
5858archname="$ans"
5859case "$usethreads" in
5860$define)
5861 echo "Threads selected." >&4
5862 case "$archname" in
5863 *-thread*) echo "...and architecture name already has -thread." >&4
5864 ;;
5865 *) archname="$archname-thread"
5866 echo "...setting architecture name to $archname." >&4
5867 ;;
5868 esac
5869 ;;
5870esac
5871case "$usemultiplicity" in
5872$define)
5873 echo "Multiplicity selected." >&4
5874 case "$archname" in
5875 *-multi*) echo "...and architecture name already has -multi." >&4
5876 ;;
5877 *) archname="$archname-multi"
5878 echo "...setting architecture name to $archname." >&4
5879 ;;
5880 esac
5881 ;;
5882esac
5883case "$use64bitint$use64bitall" in
5884*"$define"*)
5885 case "$archname64" in
5886 '')
5887 echo "This architecture is naturally 64-bit, not changing architecture name." >&4
5888 ;;
5889 *)
5890 case "$use64bitint" in
5891 "$define") echo "64 bit integers selected." >&4 ;;
5892 esac
5893 case "$use64bitall" in
5894 "$define") echo "Maximal 64 bitness selected." >&4 ;;
5895 esac
5896 case "$archname" in
5897 *-$archname64*) echo "...and architecture name already has $archname64." >&4
5898 ;;
5899 *) archname="$archname-$archname64"
5900 echo "...setting architecture name to $archname." >&4
5901 ;;
5902 esac
5903 ;;
5904 esac
5905esac
5906case "$uselongdouble" in
5907$define)
5908 echo "Long doubles selected." >&4
5909 case "$longdblsize" in
5910 $doublesize)
5911 "...but long doubles are equal to doubles, not changing architecture name." >&4
5912 ;;
5913 *)
5914 case "$archname" in
5915 *-ld*) echo "...and architecture name already has -ld." >&4
5916 ;;
5917 *) archname="$archname-ld"
5918 echo "...setting architecture name to $archname." >&4
5919 ;;
5920 esac
5921 ;;
5922 esac
5923 ;;
5924esac
51de783f
JH
5925case "$useperlio" in
5926$define)
5927 echo "Perlio selected." >&4
d46c9a2d
JH
5928 ;;
5929*)
5930 echo "Perlio not selected, using stdio." >&4
51de783f 5931 case "$archname" in
d46c9a2d 5932 *-stdio*) echo "...and architecture name already has -stdio." >&4
51de783f 5933 ;;
d46c9a2d 5934 *) archname="$archname-stdio"
51de783f
JH
5935 echo "...setting architecture name to $archname." >&4
5936 ;;
5937 esac
5938 ;;
5939esac
b4eb6b3d
JH
5940
5941: determine root of directory hierarchy where package will be installed.
5942case "$prefix" in
5943'')
5944 dflt=`./loc . /usr/local /usr/local /local /opt /usr`
5945 ;;
5946*)
5947 dflt="$prefix"
5948 ;;
5949esac
5950$cat <<EOM
5951
5952By default, $package will be installed in $dflt/bin, manual pages
5953under $dflt/man, etc..., i.e. with $dflt as prefix for all
5954installation directories. Typically this is something like /usr/local.
5955If you wish to have binaries under /usr/bin but other parts of the
5956installation under /usr/local, that's ok: you will be prompted
5957separately for each of the installation directories, the prefix being
5958only used to set the defaults.
5959
5960EOM
5961fn=d~
5962rp='Installation prefix to use?'
5963. ./getfile
5964oldprefix=''
5965case "$prefix" in
5966'') ;;
5967*)
5968 case "$ans" in
5969 "$prefix") ;;
5970 *) oldprefix="$prefix";;
5971 esac
5972 ;;
5973esac
5974prefix="$ans"
5975prefixexp="$ansexp"
5976
a6d26a0d
JH
5977case "$afsroot" in
5978'') afsroot=/afs ;;
5979*) afsroot=$afsroot ;;
5980esac
5981
b4eb6b3d
JH
5982: is AFS running?
5983echo " "
5984case "$afs" in
5985$define|true) afs=true ;;
5986$undef|false) afs=false ;;
a6d26a0d 5987*) if test -d $afsroot; then
b4eb6b3d
JH
5988 afs=true
5989 else
5990 afs=false
5991 fi
5992 ;;
5993esac
5994if $afs; then
5995 echo "AFS may be running... I'll be extra cautious then..." >&4
5996else
5997 echo "AFS does not seem to be running..." >&4
5998fi
5999
6000: determine installation prefix for where package is to be installed.
6001if $afs; then
6002$cat <<EOM
6003
6004Since you are running AFS, I need to distinguish the directory in which
6005files will reside from the directory in which they are installed (and from
6006which they are presumably copied to the former directory by occult means).
6007
6008EOM
6009 case "$installprefix" in
6010 '') dflt=`echo $prefix | sed 's#^/afs/#/afs/.#'`;;
6011 *) dflt="$installprefix";;
6012 esac
6013else
6014$cat <<EOM
6015
6016In some special cases, particularly when building $package for distribution,
6017it is convenient to distinguish between the directory in which files should
6018be installed from the directory ($prefix) in which they
6019will eventually reside. For most users, these two directories are the same.
6020
6021EOM
6022 case "$installprefix" in
6023 '') dflt=$prefix ;;
6024 *) dflt=$installprefix;;
6025 esac
6026fi
6027fn=d~
6028rp='What installation prefix should I use for installing files?'
6029. ./getfile
6030installprefix="$ans"
6031installprefixexp="$ansexp"
6032
6033: set the prefixit variable, to compute a suitable default value
6034prefixit='case "$3" in
6035""|none)
6036 case "$oldprefix" in
6037 "") eval "$1=\"\$$2\"";;
6038 *)
6039 case "$3" in
6040 "") eval "$1=";;
6041 none)
6042 eval "tp=\"\$$2\"";
6043 case "$tp" in
6044 ""|" ") eval "$1=\"\$$2\"";;
6045 *) eval "$1=";;
6046 esac;;
6047 esac;;
6048 esac;;
6049*)
6050 eval "tp=\"$oldprefix-\$$2-\""; eval "tp=\"$tp\"";
6051 case "$tp" in
6052 --|/*--|\~*--) eval "$1=\"$prefix/$3\"";;
6053 /*-$oldprefix/*|\~*-$oldprefix/*)
6054 eval "$1=\`echo \$$2 | sed \"s,^$oldprefix,$prefix,\"\`";;
6055 *) eval "$1=\"\$$2\"";;
6056 esac;;
6057esac'
6058
b4eb6b3d
JH
6059: get the patchlevel
6060echo " "
6061echo "Getting the current patchlevel..." >&4
6062if $test -r $rsrc/patchlevel.h;then
6063 revision=`awk '/define[ ]+PERL_REVISION/ {print $3}' $rsrc/patchlevel.h`
6064 patchlevel=`awk '/define[ ]+PERL_VERSION/ {print $3}' $rsrc/patchlevel.h`
6065 subversion=`awk '/define[ ]+PERL_SUBVERSION/ {print $3}' $rsrc/patchlevel.h`
6066 api_revision=`awk '/define[ ]+PERL_API_REVISION/ {print $3}' $rsrc/patchlevel.h`
6067 api_version=`awk '/define[ ]+PERL_API_VERSION/ {print $3}' $rsrc/patchlevel.h`
6068 api_subversion=`awk '/define[ ]+PERL_API_SUBVERSION/ {print $3}' $rsrc/patchlevel.h`
151e6568 6069 perl_patchlevel=`grep ',"DEVEL[0-9][0-9]*"' $rsrc/patchlevel.h|sed 's/[^0-9]//g'`
b4eb6b3d
JH
6070else
6071 revision=0
6072 patchlevel=0
6073 subversion=0
6074 api_revision=0
6075 api_version=0
6076 api_subversion=0
151e6568
MB
6077 perl_patchlevel=0
6078 $echo "(You do not have patchlevel.h. Eek.)"
b4eb6b3d 6079fi
151e6568
MB
6080if $test -r $rsrc/.patch ; then
6081 if $test "`cat $rsrc/.patch`" -gt "$perl_patchlevel" ; then
6082 perl_patchlevel=`cat $rsrc/.patch`
6083 fi
6084fi
861eb78d
AD
6085: Define a handy string here to avoid duplication in myconfig.SH and configpm.
6086version_patchlevel_string="version $patchlevel subversion $subversion"
151e6568 6087case "$perl_patchlevel" in
861eb78d
AD
60880|'') ;;
6089*) version_patchlevel_string="$version_patchlevel_string patch $perl_patchlevel" ;;
151e6568 6090esac
861eb78d
AD
6091
6092$echo "(You have $package $version_patchlevel_string.)"
6093
b4eb6b3d
JH
6094case "$osname" in
6095dos|vms)
6096 : XXX Should be a Configure test for double-dots in filenames.
6097 version=`echo $revision $patchlevel $subversion | \
6098 $awk '{ printf "%d_%d_%d\n", $1, $2, $3 }'`
6099 api_versionstring=`echo $api_revision $api_version $api_subversion | \
6100 $awk '{ printf "%d_%d_%d\n", $1, $2, $3 }'`
6101 ;;
6102*)
6103 version=`echo $revision $patchlevel $subversion | \
6104 $awk '{ printf "%d.%d.%d\n", $1, $2, $3 }'`
6105 api_versionstring=`echo $api_revision $api_version $api_subversion | \
6106 $awk '{ printf "%d.%d.%d\n", $1, $2, $3 }'`
6107 ;;
6108esac
6109: Special case the 5.005_xx maintenance series, which used 5.005
6110: without any subversion label as a subdirectory in $sitelib
6111if test "${api_revision}${api_version}${api_subversion}" = "550"; then
6112 api_versionstring='5.005'
6113fi
6114
6115: determine installation style
6116: For now, try to deduce it from prefix unless it is already set.
6117: Reproduce behavior of 5.005 and earlier, maybe drop that in 5.7.
6118case "$installstyle" in
6119'') case "$prefix" in
6120 *perl*) dflt='lib';;
6121 *) dflt='lib/perl5' ;;
6122 esac
6123 ;;
6124*) dflt="$installstyle" ;;
6125esac
6126: Probably not worth prompting for this since we prompt for all
6127: the directories individually, and the prompt would be too long and
6128: confusing anyway.
6129installstyle=$dflt
6130
6131: determine where private library files go
6132: Usual default is /usr/local/lib/perl5/$version.
6133: Also allow things like /opt/perl/lib/$version, since
6134: /opt/perl/lib/perl5... would be redundant.
6135: The default "style" setting is made in installstyle.U
6136case "$installstyle" in
6137*lib/perl5*) set dflt privlib lib/$package/$version ;;
6138*) set dflt privlib lib/$version ;;
6139esac
6140eval $prefixit
6141$cat <<EOM
6142
6143There are some auxiliary files for $package that need to be put into a
6144private library directory that is accessible by everyone.
6145
6146EOM
6147fn=d~+
6148rp='Pathname where the private library files will reside?'
6149. ./getfile
6150privlib="$ans"
6151privlibexp="$ansexp"
6152: Change installation prefix, if necessary.
6153if $test X"$prefix" != X"$installprefix"; then
6154 installprivlib=`echo $privlibexp | sed "s#^$prefix#$installprefix#"`
6155else
6156 installprivlib="$privlibexp"
6157fi
6158
6159: set the prefixup variable, to restore leading tilda escape
6160prefixup='case "$prefixexp" in
6161"$prefix") ;;
6162*) eval "$1=\`echo \$$1 | sed \"s,^$prefixexp,$prefix,\"\`";;
6163esac'
6164
6165: determine where public architecture dependent libraries go
6166set archlib archlib
6167eval $prefixit
6168: privlib default is /usr/local/lib/$package/$version
6169: archlib default is /usr/local/lib/$package/$version/$archname
6170: privlib may have an optional trailing /share.
6171tdflt=`echo $privlib | $sed 's,/share$,,'`
6172tdflt=$tdflt/$archname
6173case "$archlib" in
6174'') dflt=$tdflt
6175 ;;
6176*) dflt="$archlib"
6177 ;;
6178esac
6179$cat <<EOM
6180
6181$spackage contains architecture-dependent library files. If you are
6182sharing libraries in a heterogeneous environment, you might store
6183these files in a separate location. Otherwise, you can just include
6184them with the rest of the public library files.
6185
6186EOM
6187fn=d+~
6188rp='Where do you want to put the public architecture-dependent libraries?'
6189. ./getfile
6190archlib="$ans"
6191archlibexp="$ansexp"
6192if $test X"$archlib" = X"$privlib"; then
6193 d_archlib="$undef"
6194else
6195 d_archlib="$define"
6196fi
6197: Change installation prefix, if necessary.
6198if $test X"$prefix" != X"$installprefix"; then
6199 installarchlib=`echo $archlibexp | sed "s#^$prefix#$installprefix#"`
6200else
6201 installarchlib="$archlibexp"
6202fi
6203
6204
6205: Binary compatibility with 5.005 is not possible for builds
6206: with advanced features
6207case "$usethreads$usemultiplicity" in
6208*define*)
6209 bincompat5005="$undef"
6210 d_bincompat5005="$undef"
6211 ;;
6212*) $cat <<EOM
6213
6214This version of Perl can be compiled for binary compatibility with 5.005.
6215If you decide to do so, you will be able to continue using most of the
6216extensions that were compiled for Perl 5.005.
6217
6218EOM
6219 case "$bincompat5005$d_bincompat5005" in
6220 *"$undef"*) dflt=n ;;
6221 *) dflt=y ;;
6222 esac
6223 rp='Binary compatibility with Perl 5.005?'
6224 . ./myread
6225 case "$ans" in
6226 y*) val="$define" ;;
6227 *) val="$undef" ;;
6228 esac
6229 set d_bincompat5005
6230 eval $setvar
6231 case "$d_bincompat5005" in
6232 "$define")
6233 bincompat5005="$define"
6234 ;;
6235 *) bincompat5005="$undef"
6236 d_bincompat5005="$undef"
6237 ;;
6238 esac
6239 ;;
6240esac
6241
6242
6243: see if setuid scripts can be secure
6244$cat <<EOM
6245
6246Some kernels have a bug that prevents setuid #! scripts from being
6247secure. Some sites have disabled setuid #! scripts because of this.
6248
6249First let's decide if your kernel supports secure setuid #! scripts.
6250(If setuid #! scripts would be secure but have been disabled anyway,
6251don't say that they are secure if asked.)
6252
6253EOM
6254
6255val="$undef"
6256if $test -d /dev/fd; then
6257 echo "#!$ls" >reflect
6258 chmod +x,u+s reflect
6259 ./reflect >flect 2>&1
6260 if $contains "/dev/fd" flect >/dev/null; then
6261 echo "Congratulations, your kernel has secure setuid scripts!" >&4
6262 val="$define"
6263 else
6264 $cat <<EOM
6265If you are not sure if they are secure, I can check but I'll need a
6266username and password different from the one you are using right now.
6267If you don't have such a username or don't want me to test, simply
6268enter 'none'.
6269
6270EOM
6271 rp='Other username to test security of setuid scripts with?'
6272 dflt='none'
6273 . ./myread
6274 case "$ans" in
6275 n|none)
6276 case "$d_suidsafe" in
6277 '') echo "I'll assume setuid scripts are *not* secure." >&4
6278 dflt=n;;
6279 "$undef")
6280 echo "Well, the $hint value is *not* secure." >&4
6281 dflt=n;;
6282 *) echo "Well, the $hint value *is* secure." >&4
6283 dflt=y;;
6284 esac
c1a7f87b 6285 ;;
b4eb6b3d
JH
6286 *)
6287 $rm -f reflect flect
6288 echo "#!$ls" >reflect
6289 chmod +x,u+s reflect
6290 echo >flect
6291 chmod a+w flect
6292 echo '"su" will (probably) prompt you for '"$ans's password."
6293 su $ans -c './reflect >flect'
6294 if $contains "/dev/fd" flect >/dev/null; then
6295 echo "Okay, it looks like setuid scripts are secure." >&4
6296 dflt=y
6297 else
6298 echo "I don't think setuid scripts are secure." >&4
6299 dflt=n
6300 fi
6301 ;;
6302 esac
6303 rp='Does your kernel have *secure* setuid scripts?'
6304 . ./myread
6305 case "$ans" in
6306 [yY]*) val="$define";;
6307 *) val="$undef";;
6308 esac
6309 fi
6310else
6311 echo "I don't think setuid scripts are secure (no /dev/fd directory)." >&4
6312 echo "(That's for file descriptors, not floppy disks.)"
6313 val="$undef"
6314fi
6315set d_suidsafe
6316eval $setvar
6317
6318$rm -f reflect flect
6319
6320: now see if they want to do setuid emulation
6321echo " "
6322val="$undef"
6323case "$d_suidsafe" in
6324"$define")
6325 val="$undef"
6326 echo "No need to emulate SUID scripts since they are secure here." >& 4
6327 ;;
6328*)
6329 $cat <<EOM
6330Some systems have disabled setuid scripts, especially systems where
6331setuid scripts cannot be secure. On systems where setuid scripts have
6332been disabled, the setuid/setgid bits on scripts are currently
6333useless. It is possible for $package to detect those bits and emulate
6334setuid/setgid in a secure fashion. This emulation will only work if
6335setuid scripts have been disabled in your kernel.
6336
6337EOM
6338 case "$d_dosuid" in
6339 "$define") dflt=y ;;
6340 *) dflt=n ;;
6341 esac
6342 rp="Do you want to do setuid/setgid emulation?"
6343 . ./myread
6344 case "$ans" in
6345 [yY]*) val="$define";;
6346 *) val="$undef";;
6347 esac
6348 ;;
6349esac
6350set d_dosuid
6351eval $setvar
6352
b4eb6b3d
JH
6353: see if this is a malloc.h system
6354set malloc.h i_malloc
6355eval $inhdr
6356
6357: see if stdlib is available
6358set stdlib.h i_stdlib
6359eval $inhdr
6360
6361: determine which malloc to compile in
6362echo " "
6363case "$usemymalloc" in
c4163172
JH
6364[yY]*|true|$define) dflt='y' ;;
6365[nN]*|false|$undef) dflt='n' ;;
6366*) case "$ptrsize" in
6367 4) dflt='y' ;;
6368 *) dflt='n' ;;
6369 esac
6370 ;;
8dfa8df9 6371esac
b4eb6b3d
JH
6372rp="Do you wish to attempt to use the malloc that comes with $package?"
6373. ./myread
6374usemymalloc="$ans"
6375case "$ans" in
6376y*|true)
6377 usemymalloc='y'
6378 mallocsrc='malloc.c'
6379 mallocobj="malloc$_o"
6380 d_mymalloc="$define"
6381 case "$libs" in
6382 *-lmalloc*)
6383 : Remove malloc from list of libraries to use
6384 echo "Removing unneeded -lmalloc from library list" >&4
6385 set `echo X $libs | $sed -e 's/-lmalloc / /' -e 's/-lmalloc$//'`
6386 shift
6387 libs="$*"
6388 echo "libs = $libs" >&4
6389 ;;
6390 esac
6391 ;;
6392*)
6393 usemymalloc='n'
6394 mallocsrc=''
6395 mallocobj=''
6396 d_mymalloc="$undef"
6397 ;;
6398esac
6399
6400: compute the return types of malloc and free
6401echo " "
6402$cat >malloc.c <<END
6403#$i_malloc I_MALLOC
6404#$i_stdlib I_STDLIB
6405#include <stdio.h>
6406#include <sys/types.h>
6407#ifdef I_MALLOC
6408#include <malloc.h>
6409#endif
6410#ifdef I_STDLIB
6411#include <stdlib.h>
6412#endif
6413#ifdef TRY_MALLOC
6414void *malloc();
6415#endif
6416#ifdef TRY_FREE
6417void free();
6418#endif
6419END
6420case "$malloctype" in
6421'')
6422 if $cc $ccflags -c -DTRY_MALLOC malloc.c >/dev/null 2>&1; then
6423 malloctype='void *'
6424 else
6425 malloctype='char *'
6426 fi
6427 ;;
6428esac
6429echo "Your system wants malloc to return '$malloctype', it would seem." >&4
6430
6431case "$freetype" in
6432'')
6433 if $cc $ccflags -c -DTRY_FREE malloc.c >/dev/null 2>&1; then
6434 freetype='void'
6435 else
6436 freetype='int'
6437 fi
6438 ;;
6439esac
6440echo "Your system uses $freetype free(), it would seem." >&4
6441$rm -f malloc.[co]
6442$cat <<EOM
6443
6444After $package is installed, you may wish to install various
6445add-on modules and utilities. Typically, these add-ons will
6446be installed under $prefix with the rest
6447of this package. However, you may wish to install such add-ons
6448elsewhere under a different prefix.
6449
6450If you do not wish to put everything under a single prefix, that's
6451ok. You will be prompted for the individual locations; this siteprefix
6452is only used to suggest the defaults.
6453
6454The default should be fine for most people.
6455
6456EOM
6457fn=d~+
6458rp='Installation prefix to use for add-on modules and utilities?'
6459: XXX Here might be another good place for an installstyle setting.
6460case "$siteprefix" in
6461'') dflt=$prefix ;;
6462*) dflt=$siteprefix ;;
6463esac
6464. ./getfile
6465: XXX Prefixit unit does not yet support siteprefix and vendorprefix
6466oldsiteprefix=''
6467case "$siteprefix" in
6468'') ;;
6469*) case "$ans" in
6470 "$prefix") ;;
6471 *) oldsiteprefix="$prefix";;
6472 esac
6473 ;;
6474esac
6475siteprefix="$ans"
6476siteprefixexp="$ansexp"
6477
6478: determine where site specific libraries go.
6479: Usual default is /usr/local/lib/perl5/site_perl/$version
6480: The default "style" setting is made in installstyle.U
6481: XXX No longer works with Prefixit stuff.
6482prog=`echo $package | $sed 's/-*[0-9.]*$//'`
6483case "$sitelib" in
6484'') case "$installstyle" in
6485 *lib/perl5*) dflt=$siteprefix/lib/$package/site_$prog/$version ;;
6486 *) dflt=$siteprefix/lib/site_$prog/$version ;;
6487 esac
6488 ;;
6489*) dflt="$sitelib"
6490 ;;
6491esac
6492$cat <<EOM
6493
6494The installation process will create a directory for
6495site-specific extensions and modules. Most users find it convenient
6496to place all site-specific files in this directory rather than in the
6497main distribution directory.
6498
6499EOM
6500fn=d~+
6501rp='Pathname for the site-specific library files?'
6502. ./getfile
6503sitelib="$ans"
6504sitelibexp="$ansexp"
6505sitelib_stem=`echo "$sitelibexp" | sed "s,/$version$,,"`
6506: Change installation prefix, if necessary.
6507if $test X"$prefix" != X"$installprefix"; then
6508 installsitelib=`echo $sitelibexp | $sed "s#^$prefix#$installprefix#"`
6509else
6510 installsitelib="$sitelibexp"
6511fi
6512
6513: determine where site specific architecture-dependent libraries go.
6514: sitelib default is /usr/local/lib/perl5/site_perl/$version
6515: sitearch default is /usr/local/lib/perl5/site_perl/$version/$archname
6516: sitelib may have an optional trailing /share.
6517case "$sitearch" in
6518'') dflt=`echo $sitelib | $sed 's,/share$,,'`
6519 dflt="$dflt/$archname"
6520 ;;
6521*) dflt="$sitearch"
6522 ;;
6523esac
6524set sitearch sitearch none
6525eval $prefixit
6526$cat <<EOM
6527
6528The installation process will also create a directory for
6529architecture-dependent site-specific extensions and modules.
6530
6531EOM
6532fn=d~+
6533rp='Pathname for the site-specific architecture-dependent library files?'
6534. ./getfile
6535sitearch="$ans"
6536sitearchexp="$ansexp"
6537: Change installation prefix, if necessary.
6538if $test X"$prefix" != X"$installprefix"; then
6539 installsitearch=`echo $sitearchexp | sed "s#^$prefix#$installprefix#"`
6540else
6541 installsitearch="$sitearchexp"
6542fi
6543
6544$cat <<EOM
6545
6546The installation process will also create a directory for
6547vendor-supplied add-ons. Vendors who supply perl with their system
6548may find it convenient to place all vendor-supplied files in this
6549directory rather than in the main distribution directory. This will
6550ease upgrades between binary-compatible maintenance versions of perl.
6551
6552Of course you may also use these directories in whatever way you see
6553fit. For example, you might use them to access modules shared over a
6554company-wide network.
6555
6556The default answer should be fine for most people.
6557This causes further questions about vendor add-ons to be skipped
6558and no vendor-specific directories will be configured for perl.
6559
6560EOM
6561rp='Do you want to configure vendor-specific add-on directories?'
6562case "$usevendorprefix" in
6563define|true|[yY]*) dflt=y ;;
6564*) : User may have set vendorprefix directly on Configure command line.
6565 case "$vendorprefix" in
6566 ''|' ') dflt=n ;;
6567 *) dflt=y ;;
6568 esac
6569 ;;
6570esac
6571. ./myread
6572case "$ans" in
6573[yY]*) fn=d~+
6574 rp='Installation prefix to use for vendor-supplied add-ons?'
6575 case "$vendorprefix" in
6576 '') dflt='' ;;
6577 *) dflt=$vendorprefix ;;
6578 esac
6579 . ./getfile
6580 : XXX Prefixit unit does not yet support siteprefix and vendorprefix
6581 oldvendorprefix=''
6582 case "$vendorprefix" in
6583 '') ;;
6584 *) case "$ans" in
6585 "$prefix") ;;
6586 *) oldvendorprefix="$prefix";;
6587 esac
6588 ;;
6589 esac
6590 usevendorprefix="$define"
6591 vendorprefix="$ans"
6592 vendorprefixexp="$ansexp"
6593 ;;
6594*) usevendorprefix="$undef"
6595 vendorprefix=''
6596 vendorprefixexp=''
6597 ;;
6598esac
6599
6600case "$vendorprefix" in
6601'') d_vendorlib="$undef"
6602 vendorlib=''
6603 vendorlibexp=''
6604 ;;
6605*) d_vendorlib="$define"
6606 : determine where vendor-supplied modules go.
6607 : Usual default is /usr/local/lib/perl5/vendor_perl/$version
6608 case "$vendorlib" in
6609 '')
6610 prog=`echo $package | $sed 's/-*[0-9.]*$//'`
6611 case "$installstyle" in
6612 *lib/perl5*) dflt=$vendorprefix/lib/$package/vendor_$prog/$version ;;
6613 *) dflt=$vendorprefix/lib/vendor_$prog/$version ;;
6614 esac
6615 ;;
6616 *) dflt="$vendorlib"
6617 ;;
6618 esac
6619 fn=d~+
6620 rp='Pathname for the vendor-supplied library files?'
6621 . ./getfile
6622 vendorlib="$ans"
6623 vendorlibexp="$ansexp"
6624 ;;
6625esac
6626vendorlib_stem=`echo "$vendorlibexp" | sed "s,/$version$,,"`
6627: Change installation prefix, if necessary.
6628if $test X"$prefix" != X"$installprefix"; then
6629 installvendorlib=`echo $vendorlibexp | $sed "s#^$prefix#$installprefix#"`
6630else
6631 installvendorlib="$vendorlibexp"
6632fi
6633
6634case "$vendorprefix" in
6635'') d_vendorarch="$undef"
6636 vendorarch=''
6637 vendorarchexp=''
6638 ;;
6639*) d_vendorarch="$define"
6640 : determine where vendor-supplied architecture-dependent libraries go.
6641 : vendorlib default is /usr/local/lib/perl5/vendor_perl/$version
6642 : vendorarch default is /usr/local/lib/perl5/vendor_perl/$version/$archname
6643 : vendorlib may have an optional trailing /share.
6644 case "$vendorarch" in
6645 '') dflt=`echo $vendorlib | $sed 's,/share$,,'`
6646 dflt="$dflt/$archname"
6647 ;;
6648 *) dflt="$vendorarch" ;;
6649 esac
6650 fn=d~+
6651 rp='Pathname for vendor-supplied architecture-dependent files?'
6652 . ./getfile
6653 vendorarch="$ans"
6654 vendorarchexp="$ansexp"
6655 ;;
6656esac
6657: Change installation prefix, if necessary.
6658if $test X"$prefix" != X"$installprefix"; then
6659 installvendorarch=`echo $vendorarchexp | sed "s#^$prefix#$installprefix#"`
6660else
6661 installvendorarch="$vendorarchexp"
6662fi
6663
6664: Final catch-all directories to search
6665$cat <<EOM
6666
6667Lastly, you can have perl look in other directories for extensions and
6668modules in addition to those already specified.
6669These directories will be searched after
6670 $sitearch
6671 $sitelib
6672EOM
6673test X"$vendorlib" != "X" && echo ' ' $vendorlib
6674test X"$vendorarch" != "X" && echo ' ' $vendorarch
6675echo ' '
6676case "$otherlibdirs" in
6677''|' ') dflt='none' ;;
6678*) dflt="$otherlibdirs" ;;
6679esac
6680$cat <<EOM
6681Enter a colon-separated set of extra paths to include in perl's @INC
6682search path, or enter 'none' for no extra paths.
6683
6684EOM
6685
6686rp='Colon-separated list of additional directories for perl to search?'
6687. ./myread
6688case "$ans" in
6689' '|''|none) otherlibdirs=' ' ;;
6690*) otherlibdirs="$ans" ;;
6691esac
6692case "$otherlibdirs" in
6693' ') val=$undef ;;
6694*) val=$define ;;
6695esac
6696set d_perl_otherlibdirs
6697eval $setvar
6698
6699: Cruising for prototypes
6700echo " "
6701echo "Checking out function prototypes..." >&4
6702$cat >prototype.c <<'EOCP'
6703int main(int argc, char *argv[]) {
6704 exit(0);}
6705EOCP
6706if $cc $ccflags -c prototype.c >prototype.out 2>&1 ; then
6707 echo "Your C compiler appears to support function prototypes."
6708 val="$define"
6709else
6710 echo "Your C compiler doesn't seem to understand function prototypes."
6711 val="$undef"
6712fi
6713set prototype
6714eval $setvar
6715$rm -f prototype*
6716
6717case "$prototype" in
6718"$define") ;;
6719*) ansi2knr='ansi2knr'
6720 echo " "
6721 cat <<EOM >&4
6722
6723$me: FATAL ERROR:
6724This version of $package can only be compiled by a compiler that
6725understands function prototypes. Unfortunately, your C compiler
6726 $cc $ccflags
6727doesn't seem to understand them. Sorry about that.
6728
6729If GNU cc is available for your system, perhaps you could try that instead.
6730
6731Eventually, we hope to support building Perl with pre-ANSI compilers.
6732If you would like to help in that effort, please contact <perlbug@perl.org>.
6733
6734Aborting Configure now.
6735EOM
6736 exit 2
6737 ;;
6738esac
6739
6740: determine where public executables go
6741echo " "
6742set dflt bin bin
6743eval $prefixit
6744fn=d~
6745rp='Pathname where the public executables will reside?'
6746. ./getfile
6747if $test "X$ansexp" != "X$binexp"; then
6748 installbin=''
6749fi
6750bin="$ans"
6751binexp="$ansexp"
6752: Change installation prefix, if necessary.
6753: XXX Bug? -- ignores Configure -Dinstallprefix setting.
6754if $test X"$prefix" != X"$installprefix"; then
6755 installbin=`echo $binexp | sed "s#^$prefix#$installprefix#"`
6756else
6757 installbin="$binexp"
6758fi
6759
6fcddf3b 6760echo " "
6fcddf3b 6761case "$extras" in
bf35c3f6
JH
6762'') dflt='n';;
6763*) dflt='y';;
6fcddf3b
JH
6764esac
6765cat <<EOM
6766Perl can be built with extra modules or bundles of modules which
6767will be fetched from the CPAN and installed alongside Perl.
6768
6769Notice that you will need access to the CPAN; either via the Internet,
6770or a local copy, for example a CD-ROM or a local CPAN mirror. (You will
6771be asked later to configure the CPAN.pm module which will in turn do
6772the installation of the rest of the extra modules or bundles.)
6773
6774Notice also that if the modules require any external software such as
dd2de242
JH
6775libraries and headers (the libz library and the zlib.h header for the
6776Compress::Zlib module, for example) you MUST have any such software
6777already installed, this configuration process will NOT install such
6778things for you.
6fcddf3b
JH
6779
6780If this doesn't make any sense to you, just accept the default '$dflt'.
6781EOM
dd2de242 6782rp='Install any extra modules (y or n)?'
6fcddf3b
JH
6783. ./myread
6784case "$ans" in
6785y|Y)
6786 cat <<EOM
6787
6788Please list any extra modules or bundles to be installed from CPAN,
6789with spaces between the names. The names can be in any format the
dd2de242
JH
6790'install' command of CPAN.pm will understand. (Answer 'none',
6791without the quotes, to install no extra modules or bundles.)
6fcddf3b
JH
6792EOM
6793 rp='Extras?'
6794 dflt="$extras"
6795 . ./myread
6796 extras="$ans"
6797esac
6798case "$extras" in
6799''|'none')
6800 val=''
6801 $rm -f ../extras.lst
6802 ;;
6803*) echo "(Saving the list of extras for later...)"
dd2de242
JH
6804 echo "$extras" > ../extras.lst
6805 val="'$extras'"
6fcddf3b
JH
6806 ;;
6807esac
6808set extras
6809eval $setvar
6810echo " "
6811
b4eb6b3d
JH
6812: Find perl5.005 or later.
6813echo "Looking for a previously installed perl5.005 or later... "
6814case "$perl5" in
a938a3bb 6815'') for tdir in `echo "$binexp$path_sep$PATH" | $sed "s/$path_sep/ /g"`; do
b4eb6b3d 6816 : Check if this perl is recent and can load a simple module
a938a3bb 6817 if $test -x $tdir/perl$exe_ext && $tdir/perl -Mless -e 'use 5.005;' >/dev/null 2>&1; then
b4eb6b3d
JH
6818 perl5=$tdir/perl
6819 break;
a938a3bb
IZ
6820 elif $test -x $tdir/perl5$exe_ext && $tdir/perl5 -Mless -e 'use 5.005;' >/dev/null 2>&1; then
6821 perl5=$tdir/perl5
b4eb6b3d
JH
6822 break;
6823 fi
6824 done
6825 ;;
6826*) perl5="$perl5"
6827 ;;
6828esac
6829case "$perl5" in
6830'') echo "None found. That's ok.";;
6831*) echo "Using $perl5." ;;
6832esac
6833
6834: Determine list of previous versions to include in @INC
6835$cat > getverlist <<EOPL
6836#!$perl5 -w
6837use File::Basename;
6838\$api_versionstring = "$api_versionstring";
6839\$version = "$version";
6840\$stem = "$sitelib_stem";
6841\$archname = "$archname";
6842EOPL
6843 $cat >> getverlist <<'EOPL'
6844# Can't have leading @ because metaconfig interprets it as a command!
6845;@inc_version_list=();
6846# XXX Redo to do opendir/readdir?
6847if (-d $stem) {
6848 chdir($stem);
6849 ;@candidates = glob("5.*");
6850}
6851else {
6852 ;@candidates = ();
6853}
6854
6855# XXX ToDo: These comparisons must be reworked when two-digit
6856# subversions come along, so that 5.7.10 compares as greater than
6857# 5.7.3! By that time, hope that 5.6.x is sufficiently
6858# widespread that we can use the built-in version vectors rather
6859# than reinventing them here. For 5.6.0, however, we must
6860# assume this script will likely be run by 5.005_0x. --AD 1/2000.
6861foreach $d (@candidates) {
6862 if ($d lt $version) {
6863 if ($d ge $api_versionstring) {
6864 unshift(@inc_version_list, grep { -d } "$d/$archname", $d);
6865 }
6866 elsif ($d ge "5.005") {
6867 unshift(@inc_version_list, grep { -d } $d);
6868 }
6869 }
6870 else {
6871 # Skip newer version. I.e. don't look in
6872 # 5.7.0 if we're installing 5.6.1.
6873 }
6874}
6875
6876if (@inc_version_list) {
6877 print join(' ', @inc_version_list);
6878}
6879else {
6880 # Blank space to preserve value for next Configure run.
6881 print " ";
6882}
6883EOPL
6884chmod +x getverlist
6885case "$inc_version_list" in
a938a3bb 6886'') if test -x "$perl5$exe_ext"; then
b4eb6b3d
JH
6887 dflt=`$perl5 getverlist`
6888 else
6889 dflt='none'
6890 fi
6891 ;;
6892$undef) dflt='none' ;;
6d1a7737 6893*) eval dflt=\"$inc_version_list\" ;;
b4eb6b3d
JH
6894esac
6895case "$dflt" in
6896''|' ') dflt=none ;;
6897esac
6898case "$dflt" in
68995.005) case "$bincompat5005" in
6900 $define|true|[yY]*) ;;
6901 *) dflt=none ;;
6902 esac
6903 ;;
6904esac
6905$cat <<'EOM'
6906
6907In order to ease the process of upgrading, this version of perl
6908can be configured to use modules built and installed with earlier
6909versions of perl that were installed under $prefix. Specify here
6910the list of earlier versions that this version of perl should check.
6911If Configure detected no earlier versions of perl installed under
6912$prefix, then the list will be empty. Answer 'none' to tell perl
6913to not search earlier versions.
6914
6915The default should almost always be sensible, so if you're not sure,
6916just accept the default.
6917EOM
6918
6919rp='List of earlier versions to include in @INC?'
6920. ./myread
6921case "$ans" in
6922[Nn]one|''|' ') inc_version_list=' ' ;;
6923*) inc_version_list="$ans" ;;
6924esac
6925case "$inc_version_list" in
6926''|' ')
6927 inc_version_list_init='0';;
6928*) inc_version_list_init=`echo $inc_version_list |
6929 $sed -e 's/^/"/' -e 's/ /","/g' -e 's/$/",0/'`
6930 ;;
6931esac
6932$rm -f getverlist
6933
6934: determine whether to install perl also as /usr/bin/perl
6935
6936echo " "
6937if $test -d /usr/bin -a "X$installbin" != X/usr/bin; then
6938 $cat <<EOM
6939Many scripts expect perl to be installed as /usr/bin/perl.
6940I can install the perl you are about to compile also as /usr/bin/perl
6941(in addition to $installbin/perl).
6942EOM
6943 case "$installusrbinperl" in
6944 "$undef"|[nN]*) dflt='n';;
6945 *) dflt='y';;
6946 esac
6947 rp="Do you want to install perl as /usr/bin/perl?"
6948 . ./myread
6949 case "$ans" in
6950 [yY]*) val="$define";;
6951 *) val="$undef" ;;
6952 esac
6953else
6954 val="$undef"
6955fi
6956set installusrbinperl
6957eval $setvar
6958
6959: see if dld is available
6960set dld.h i_dld
6961eval $inhdr
6962
6963: see if dlopen exists
6964xxx_runnm="$runnm"
6965runnm=false
6966set dlopen d_dlopen
6967eval $inlibc
6968runnm="$xxx_runnm"
6969
6970: determine which dynamic loading, if any, to compile in
6971echo " "
6972dldir="ext/DynaLoader"
6973case "$usedl" in
6974$define|y|true)
6975 dflt='y'
6976 usedl="$define"
6977 ;;
6978$undef|n|false)
6979 dflt='n'
6980 usedl="$undef"
6981 ;;
6982*)
6983 dflt='n'
6984 case "$d_dlopen" in
6985 $define) dflt='y' ;;
6986 esac
6987 case "$i_dld" in
6988 $define) dflt='y' ;;
6989 esac
6990 : Does a dl_xxx.xs file exist for this operating system
6991 $test -f $rsrc/$dldir/dl_${osname}.xs && dflt='y'
6992 ;;
6993esac
6994rp="Do you wish to use dynamic loading?"
6995. ./myread
6996usedl="$ans"
6997case "$ans" in
6998y*) usedl="$define"
6999 case "$dlsrc" in
7000 '')
7001 if $test -f $rsrc/$dldir/dl_${osname}.xs ; then
7002 dflt="$dldir/dl_${osname}.xs"
7003 elif $test "$d_dlopen" = "$define" ; then
7004 dflt="$dldir/dl_dlopen.xs"
7005 elif $test "$i_dld" = "$define" ; then
7006 dflt="$dldir/dl_dld.xs"
7007 else
7008 dflt=''
7009 fi
7010 ;;
7011 *) dflt="$dldir/$dlsrc"
7012 ;;
7013 esac
7014 echo "The following dynamic loading files are available:"
7015 : Can not go over to $dldir because getfile has path hard-coded in.
7016 tdir=`pwd`; cd $rsrc; $ls -C $dldir/dl*.xs; cd $tdir
7017 rp="Source file to use for dynamic loading"
7018 fn="fne"
7019 gfpth="$src"
7020 . ./getfile
7021 usedl="$define"
7022 : emulate basename
7023 dlsrc=`echo $ans | $sed -e 's%.*/\([^/]*\)$%\1%'`
7024
7025 $cat << EOM
7026
7027Some systems may require passing special flags to $cc -c to
7028compile modules that will be used to create a shared library.
7029To use no flags, say "none".
7030
7031EOM
7032 case "$cccdlflags" in
7033 '') case "$gccversion" in
7034 '') case "$osname" in
7035 hpux) dflt='+z' ;;
7036 next) dflt='none' ;;
7037 irix*) dflt='-KPIC' ;;
48bcfe03 7038 svr4*|esix*|solaris|nonstopux) dflt='-KPIC' ;;
b4eb6b3d
JH
7039 sunos) dflt='-pic' ;;
7040 *) dflt='none' ;;
7041 esac
7042 ;;
7043 *) case "$osname" in
b6cc0f4c 7044 darwin) dflt='none' ;;
48bcfe03 7045 svr4*|esix*|solaris|nonstopux) dflt='-fPIC' ;;
b4eb6b3d
JH
7046 *) dflt='-fpic' ;;
7047 esac ;;
7048 esac ;;
7049 ' ') dflt='none' ;;
7050 *) dflt="$cccdlflags" ;;
7051 esac
7052 rp="Any special flags to pass to $cc -c to compile shared library modules?"
7053 . ./myread
7054 case "$ans" in
7055 none) cccdlflags=' ' ;;
7056 *) cccdlflags="$ans" ;;
7057 esac
7058
7059 cat << EOM
7060
7061Some systems use ld to create libraries that can be dynamically loaded,
7062while other systems (such as those using ELF) use $cc.
7063
7064EOM
7065 case "$ld" in
7066 '') $cat >try.c <<'EOM'
7067/* Test for whether ELF binaries are produced */
7068#include <fcntl.h>
7069#include <stdlib.h>
7070int main() {
7071 char b[4];
7072 int i = open("a.out",O_RDONLY);
7073 if(i == -1)
7074 exit(1); /* fail */
7075 if(read(i,b,4)==4 && b[0]==127 && b[1]=='E' && b[2]=='L' && b[3]=='F')
7076 exit(0); /* succeed (yes, it's ELF) */
7077 else
7078 exit(1); /* fail */
7079}
7080EOM
5440bc8e 7081 if $cc $ccflags $ldflags try.c >/dev/null 2>&1 && $run ./a.out; then
b4eb6b3d
JH
7082 cat <<EOM
7083You appear to have ELF support. I'll use $cc to build dynamic libraries.
7084EOM
7085 dflt="$cc"
7086 else
7087 echo "I'll use ld to build dynamic libraries."
7088 dflt='ld'
7089 fi
7090 rm -f try.c a.out
7091 ;;
7092 *) dflt="$ld"
7093 ;;
7094 esac
7095
7096 rp="What command should be used to create dynamic libraries?"
7097 . ./myread
7098 ld="$ans"
7099
7100 cat << EOM
7101
7102Some systems may require passing special flags to $ld to create a
7103library that can be dynamically loaded. If your ld flags include
7104-L/other/path options to locate libraries outside your loader's normal
7105search path, you may need to specify those -L options here as well. To
7106use no flags, say "none".
7107
7108EOM
7109 case "$lddlflags" in
7110 '') case "$osname" in
7111 beos) dflt='-nostart' ;;
7112 hpux) dflt='-b';
7113 case "$gccversion" in
7114 '') dflt="$dflt +vnocompatwarnings" ;;
7115 esac
7116 ;;
7117 linux|irix*) dflt='-shared' ;;
7118 next) dflt='none' ;;
7119 solaris) dflt='-G' ;;
7120 sunos) dflt='-assert nodefinitions' ;;
48bcfe03 7121 svr4*|esix*|nonstopux) dflt="-G $ldflags" ;;
b4eb6b3d
JH
7122 *) dflt='none' ;;
7123 esac
7124 ;;
7125 *) dflt="$lddlflags" ;;
7126 esac
7127
7128 : Try to guess additional flags to pick up local libraries.
7129 : Be careful not to append to a plain 'none'
7130 case "$dflt" in
7131 none) dflt='' ;;
7132 esac
7133 for thisflag in $ldflags; do
7134 case "$thisflag" in
7135 -L*|-R*)
7136 case " $dflt " in
7137 *" $thisflag "*) ;;
7138 *) dflt="$dflt $thisflag" ;;
7139 esac
7140 ;;
7141 esac
7142 done
7143
7144 case "$dflt" in
7145 ''|' ') dflt='none' ;;
7146 esac
7147
7148 rp="Any special flags to pass to $ld to create a dynamically loaded library?"
7149 . ./myread
7150 case "$ans" in
7151 none) lddlflags=' ' ;;
7152 *) lddlflags="$ans" ;;
7153 esac
7154
7155 cat <<EOM
7156
7157Some systems may require passing special flags to $cc to indicate that
7158the resulting executable will use dynamic linking. To use no flags,
7159say "none".
7160
7161EOM
7162 case "$ccdlflags" in
7163 '') case "$osname" in
7164 hpux) dflt='-Wl,-E' ;;
7165 linux) dflt='-rdynamic' ;;
7166 next) dflt='none' ;;
7167 sunos) dflt='none' ;;
7168 *) dflt='none' ;;
7169 esac ;;
7170 ' ') dflt='none' ;;
7171 *) dflt="$ccdlflags" ;;
7172 esac
7173 rp="Any special flags to pass to $cc to use dynamic linking?"
7174 . ./myread
7175 case "$ans" in
7176 none) ccdlflags=' ' ;;
7177 *) ccdlflags="$ans" ;;
7178 esac
7179 ;;
7180*) usedl="$undef"
7181 ld='ld'
7182 dlsrc='dl_none.xs'
7183 lddlflags=''
7184 ccdlflags=''
7185 ;;
7186esac
7187
7188also=''
7189case "$usedl" in
7190$undef)
7191 # No dynamic loading being used, so don't bother even to prompt.
7192 useshrplib='false'
7193 ;;
7194*) case "$useshrplib" in
7195 '') case "$osname" in
48bcfe03 7196 svr4*|nonstopux|dgux|dynixptx|esix|powerux|beos|cygwin*)
b4eb6b3d
JH
7197 dflt=y
7198 also='Building a shared libperl is required for dynamic loading to work on your system.'
7199 ;;
7200 next*)
7201 case "$osvers" in
7202 4*) dflt=y
7203 also='Building a shared libperl is needed for MAB support.'
7204 ;;
7205 *) dflt=n
7206 ;;
7207 esac
7208 ;;
7209 *) dflt=n
7210 ;;
7211 esac
7212 ;;
7213 $define|true|[Yy]*)
7214 dflt=y
7215 ;;
7216 *) dflt=n
7217 ;;
7218 esac
7219 $cat << EOM
7220
7221The perl executable is normally obtained by linking perlmain.c with
7222libperl${_a}, any static extensions (usually just DynaLoader), and
7223any other libraries needed on this system (such as -lm, etc.). Since
7224your system supports dynamic loading, it is probably possible to build
7225a shared libperl.$so. If you will have more than one executable linked
7226to libperl.$so, this will significantly reduce the size of each
7227executable, but it may have a noticeable affect on performance. The
7228default is probably sensible for your system.
7229$also
7230
7231EOM
7232 rp="Build a shared libperl.$so (y/n)"
7233 . ./myread
7234 case "$ans" in
7235 true|$define|[Yy]*)
7236 useshrplib='true' ;;
7237 *) useshrplib='false' ;;
7238 esac
7239 ;;
7240esac
7241
7242case "$useshrplib" in
7243true)
7244 case "$libperl" in
7245 '')
7246 # Figure out a good name for libperl.so. Since it gets stored in
7247 # a version-specific architecture-dependent library, the version
7248 # number isn't really that important, except for making cc/ld happy.
7249 #
7250 # A name such as libperl.so.3.1
7251 majmin="libperl.$so.$patchlevel.$subversion"
7252 # A name such as libperl.so.301
7253 majonly=`echo $patchlevel $subversion |
7254 $awk '{printf "%d%02d", $1, $2}'`
7255 majonly=libperl.$so.$majonly
7256 # I'd prefer to keep the os-specific stuff here to a minimum, and
7257 # rely on figuring it out from the naming of libc.
7258 case "${osname}${osvers}" in
7259 next4*)
7260 dflt=libperl.5.$so
7261 # XXX How handle the --version stuff for MAB?
7262 ;;
7263 linux*) # ld won't link with a bare -lperl otherwise.
7264 dflt=libperl.$so
7265 ;;
7266 cygwin*) # include version
7267 dflt=`echo libperl$version | sed -e 's/\./_/g'`$lib_ext
7268 ;;
7269 *) # Try to guess based on whether libc has major.minor.
7270 case "$libc" in
7271 *libc.$so.[0-9]*.[0-9]*) dflt=$majmin ;;
7272 *libc.$so.[0-9]*) dflt=$majonly ;;
7273 *) dflt=libperl.$so ;;
7274 esac
7275 ;;
7276 esac
7277 ;;
7278 *) dflt=$libperl
7279 ;;
7280 esac
7281 cat << EOM
7282
7283I need to select a good name for the shared libperl. If your system uses
7284library names with major and minor numbers, then you might want something
7285like $majmin. Alternatively, if your system uses a single version
7286number for shared libraries, then you might want to use $majonly.
7287Or, your system might be quite happy with a simple libperl.$so.
7288
7289Since the shared libperl will get installed into a version-specific
7290architecture-dependent directory, the version number of the shared perl
7291library probably isn't important, so the default should be o.k.
7292
7293EOM
7294 rp='What name do you want to give to the shared libperl?'
7295 . ./myread
7296 libperl=$ans
7297 echo "Ok, I'll use $libperl"
7298 ;;
7299*)
7300 libperl="libperl${_a}"
7301 ;;
7302esac
7303
7304# Detect old use of shrpdir via undocumented Configure -Dshrpdir
7305case "$shrpdir" in
7306'') ;;
7307*) $cat >&4 <<EOM
7308WARNING: Use of the shrpdir variable for the installation location of
7309the shared $libperl is not supported. It was never documented and
7310will not work in this version. Let me (perlbug@perl.org)
7311know of any problems this may cause.
7312
7313EOM
7314 case "$shrpdir" in
7315 "$archlibexp/CORE")
7316 $cat >&4 <<EOM
7317But your current setting of $shrpdir is
7318the default anyway, so it's harmless.
7319EOM
7320 ;;
7321 *)
7322 $cat >&4 <<EOM
7323Further, your current attempted setting of $shrpdir
7324conflicts with the value of $archlibexp/CORE
7325that installperl will use.
7326EOM
7327 ;;
7328 esac
7329 ;;
7330esac
7331
7332# How will the perl executable find the installed shared $libperl?
7333# Add $xxx to ccdlflags.
7334# If we can't figure out a command-line option, use $shrpenv to
7335# set env LD_RUN_PATH. The main perl makefile uses this.
7336shrpdir=$archlibexp/CORE
7337xxx=''
7338tmp_shrpenv=''
7339if "$useshrplib"; then
7340 case "$osname" in
7341 aix)
7342 # We'll set it in Makefile.SH...
7343 ;;
7344 solaris|netbsd)
7345 xxx="-R $shrpdir"
7346 ;;
7347 freebsd)
7348 xxx="-Wl,-R$shrpdir"
7349 ;;
7350 linux|irix*|dec_osf)
7351 xxx="-Wl,-rpath,$shrpdir"
7352 ;;
7353 next)
7354 # next doesn't like the default...
7355 ;;
7356 beos)
7357 # beos doesn't like the default, either.
7358 ;;
7359 hpux*)
7360 # hpux doesn't like the default, either.
7361 tmp_shrpenv="env LDOPTS=\"+s +b${shrpdir}\""
7362 ;;
7363 *)
7364 tmp_shrpenv="env LD_RUN_PATH=$shrpdir"
7365 ;;
7366 esac
7367 case "$xxx" in
7368 '') ;;
7369 *)
7370 # Only add $xxx if it isn't already in ccdlflags.
7371 case " $ccdlflags " in
7372 *" $xxx "*) ;;
7373 *) ccdlflags="$ccdlflags $xxx"
7374 cat <<EOM >&4
7375
7376Adding $xxx to the flags
7377passed to $ld so that the perl executable will find the
7378installed shared $libperl.
7379
7380EOM
7381 ;;
7382 esac
7383 ;;
7384 esac
7385fi
7386# Fix ccdlflags in AIX for building external extensions.
7387# (For building Perl itself bare -bE:perl.exp is needed,
7388# Makefile.SH takes care of this.)
7389case "$osname" in
7390aix) ccdlflags="$ccdlflags -bE:$installarchlib/CORE/perl.exp" ;;
7391esac
7392# Respect a hint or command-line value.
7393case "$shrpenv" in
7394'') shrpenv="$tmp_shrpenv" ;;
7395esac
7396case "$ldlibpthname" in
7397'') ldlibpthname=LD_LIBRARY_PATH ;;
7398none) ldlibpthname='' ;;
7399esac
7400
7401: determine where manual pages are on this system
7402echo " "
7403case "$sysman" in
7404'')
4a0a3829
SD
7405 syspath='/usr/share/man/man1 /usr/man/man1'
7406 syspath="$syspath /usr/man/mann /usr/man/manl /usr/man/local/man1"
7407 syspath="$syspath /usr/man/u_man/man1"
b4eb6b3d
JH
7408 syspath="$syspath /usr/catman/u_man/man1 /usr/man/l_man/man1"
7409 syspath="$syspath /usr/local/man/u_man/man1 /usr/local/man/l_man/man1"
7410 syspath="$syspath /usr/man/man.L /local/man/man1 /usr/local/man/man1"
7411 sysman=`./loc . /usr/man/man1 $syspath`
7412 ;;
7413esac
7414if $test -d "$sysman"; then
7415 echo "System manual is in $sysman." >&4
7416else
7417 echo "Could not find manual pages in source form." >&4
7418fi
7419
7420: determine where manual pages go
7421set man1dir man1dir none
7422eval $prefixit
7423$cat <<EOM
7424
7425$spackage has manual pages available in source form.
7426EOM
7427case "$nroff" in
7428nroff)
7429 echo "However, you don't have nroff, so they're probably useless to you."
7430 case "$man1dir" in
7431 '') man1dir="none";;
7432 esac;;
7433esac
7434echo "If you don't want the manual sources installed, answer 'none'."
7435case "$man1dir" in
7436' ') dflt=none
7437 ;;
7438'')
4a0a3829
SD
7439 lookpath="$prefixexp/share/man/man1"
7440 lookpath="$lookpath $prefixexp/man/man1 $prefixexp/man/l_man/man1"
b4eb6b3d
JH
7441 lookpath="$lookpath $prefixexp/man/p_man/man1"
7442 lookpath="$lookpath $prefixexp/man/u_man/man1"
7443 lookpath="$lookpath $prefixexp/man/man.1"
7444 case "$sysman" in
7445 */?_man*) dflt=`./loc . $prefixexp/l_man/man1 $lookpath` ;;
7446 *) dflt=`./loc . $prefixexp/man/man1 $lookpath` ;;
7447 esac
7448 set dflt
7449 eval $prefixup
7450 ;;
7451*) dflt="$man1dir"
7452 ;;
7453esac
7454echo " "
7455fn=dn+~
7456rp="Where do the main $spackage manual pages (source) go?"
7457. ./getfile
7458if $test "X$man1direxp" != "X$ansexp"; then
7459 installman1dir=''
7460fi
7461man1dir="$ans"
7462man1direxp="$ansexp"
7463case "$man1dir" in
7464'') man1dir=' '
7465 installman1dir='';;
7466esac
7467
7468: Change installation prefix, if necessary.
7469if $test X"$prefix" != X"$installprefix"; then
7470 installman1dir=`echo $man1direxp | $sed "s#^$prefix#$installprefix#"`
7471else
7472 installman1dir="$man1direxp"
7473fi
7474
7475: What suffix to use on installed man pages
7476
7477case "$man1dir" in
7478' ')
7479 man1ext='0'
7480 ;;
7481*)
7482 rp="What suffix should be used for the main $spackage man pages?"
7483 case "$man1ext" in
7484 '') case "$man1dir" in
7485 *1) dflt=1 ;;
7486 *1p) dflt=1p ;;
7487 *1pm) dflt=1pm ;;
7488 *l) dflt=l;;
7489 *n) dflt=n;;
7490 *o) dflt=o;;
7491 *p) dflt=p;;
7492 *C) dflt=C;;
7493 *L) dflt=L;;
7494 *L1) dflt=L1;;
7495 *) dflt=1;;
7496 esac
7497 ;;
7498 *) dflt="$man1ext";;
7499 esac
7500 . ./myread
7501 man1ext="$ans"
7502 ;;
7503esac
7504
7505: see if we can have long filenames
7506echo " "
7507first=123456789abcdef
7508$rm -f $first
7509if (echo hi >$first) 2>/dev/null; then
7510 if $test -f 123456789abcde; then
7511 echo 'You cannot have filenames longer than 14 characters. Sigh.' >&4
7512 val="$undef"
7513 else
7514 echo 'You can have filenames longer than 14 characters.'>&4
7515 val="$define"
7516 fi
7517else
7518 $cat <<'EOM'
7519You can't have filenames longer than 14 chars.
7520You can't even think about them!
7521EOM
7522 val="$undef"
7523fi
7524set d_flexfnam
7525eval $setvar
7526$rm -rf 123456789abcde*
7527
7528: determine where library module manual pages go
7529set man3dir man3dir none
7530eval $prefixit
7531$cat <<EOM
7532
7533$spackage has manual pages for many of the library modules.
7534EOM
7535
7536case "$nroff" in
7537nroff)
7538 $cat <<'EOM'
7539However, you don't have nroff, so they're probably useless to you.
7540EOM
7541 case "$man3dir" in
7542 '') man3dir="none";;
7543 esac;;
7544esac
7545
7546case "$d_flexfnam" in
7547undef)
7548 $cat <<'EOM'
7549However, your system can't handle the long file names like File::Basename.3.
7550EOM
7551 case "$man3dir" in
7552 '') man3dir="none";;
7553 esac;;
7554esac
7555
7556echo "If you don't want the manual sources installed, answer 'none'."
7557prog=`echo $package | $sed 's/-*[0-9.]*$//'`
7558case "$man3dir" in
7559'') dflt=`echo "$man1dir" | $sed -e 's/man1/man3/g' -e 's/man\.1/man\.3/g'`
7560 if $test -d "$privlib/man/man3"; then
7561 cat <<EOM >&4
7562
7563WARNING: Previous versions of perl installed man3 pages into
7564$privlib/man/man3. This version will suggest a
7565new default of $dflt.
7566EOM
7567 tdflt=$dflt
7568 dflt='n'
7569 rp='Do you wish to preserve the old behavior?(y/n)'
7570 . ./myread
7571 case "$ans" in
7572 y*) dflt="$privlib/man/man3" ;;
7573 *) dflt=$tdflt ;;
7574 esac
7575 fi
7576 ;;
7577*) dflt="$man3dir" ;;
7578esac
7579case "$dflt" in
7580' ') dflt=none ;;
7581esac
7582echo " "
7583fn=dn+~
7584rp="Where do the $package library man pages (source) go?"
7585. ./getfile
7586man3dir="$ans"
7587man3direxp="$ansexp"
7588case "$man3dir" in
7589'') man3dir=' '
7590 installman3dir='';;
7591esac
7592
7593: Change installation prefix, if necessary.
7594if $test X"$prefix" != X"$installprefix"; then
7595 installman3dir=`echo $man3direxp | $sed "s#^$prefix#$installprefix#"`
7596else
7597 installman3dir="$man3direxp"
7598fi
7599
7600: What suffix to use on installed man pages
7601case "$man3dir" in
7602' ')
7603 man3ext='0'
7604 ;;
7605*)
7606 rp="What suffix should be used for the $package library man pages?"
7607 case "$man3ext" in
7608 '') case "$man3dir" in
7609 *3) dflt=3 ;;
7610 *3p) dflt=3p ;;
7611 *3pm) dflt=3pm ;;
7612 *l) dflt=l;;
7613 *n) dflt=n;;
7614 *o) dflt=o;;
7615 *p) dflt=p;;
7616 *C) dflt=C;;
7617 *L) dflt=L;;
7618 *L3) dflt=L3;;
7619 *) dflt=3;;
7620 esac
7621 ;;
7622 *) dflt="$man3ext";;
7623 esac
7624 . ./myread
7625 man3ext="$ans"
7626 ;;
7627esac
7628
7629: see if we have to deal with yellow pages, now NIS.
7630if $test -d /usr/etc/yp || $test -d /etc/yp; then
7631 if $test -f /usr/etc/nibindd; then
7632 echo " "
7633 echo "I'm fairly confident you're on a NeXT."
7634 echo " "
7635 rp='Do you get the hosts file via NetInfo?'
7636 dflt=y
7637 case "$hostcat" in
7638 nidump*) ;;
7639 '') ;;
7640 *) dflt=n;;
7641 esac
7642 . ./myread
7643 case "$ans" in
7644 y*) hostcat='nidump hosts .';;
7645 *) case "$hostcat" in
7646 nidump*) hostcat='';;
7647 esac
7648 ;;
7649 esac
7650 fi
7651 case "$hostcat" in
7652 nidump*) ;;
7653 *)
7654 case "$hostcat" in
7655 *ypcat*) dflt=y;;
7656 '') if $contains '^\+' /etc/passwd >/dev/null 2>&1; then
7657 dflt=y
7658 else
7659 dflt=n
7660 fi;;
7661 *) dflt=n;;
7662 esac
7663 echo " "
7664 rp='Are you getting the hosts file via yellow pages?'
7665 . ./myread
7666 case "$ans" in
7667 y*) hostcat='ypcat hosts';;
7668 *) hostcat='cat /etc/hosts';;
7669 esac
7670 ;;
7671 esac
7672fi
7673case "$hostcat" in
7674'') test -f /etc/hosts && hostcat='cat /etc/hosts';;
7675esac
7676case "$groupcat" in
7677'') test -f /etc/group && groupcat='cat /etc/group';;
7678esac
7679case "$passcat" in
7680'') test -f /etc/passwd && passcat='cat /etc/passwd';;
7681esac
7682
7683: now get the host name
7684echo " "
7685echo "Figuring out host name..." >&4
7686case "$myhostname" in
7687'') cont=true
7688 echo 'Maybe "hostname" will work...'
73614538 7689 if tans=`sh -c hostname 2>&1` ; then
b4eb6b3d
JH
7690 myhostname=$tans
7691 phostname=hostname
7692 cont=''
7693 fi
7694 ;;
7695*) cont='';;
7696esac
7697if $test "$cont"; then
7698 if ./xenix; then
7699 echo 'Oh, dear. Maybe "/etc/systemid" is the key...'
7700 if tans=`cat /etc/systemid 2>&1` ; then
7701 myhostname=$tans
7702 phostname='cat /etc/systemid'
7703 echo "Whadyaknow. Xenix always was a bit strange..."
7704 cont=''
7705 fi
7706 elif $test -r /etc/systemid; then
7707 echo "(What is a non-Xenix system doing with /etc/systemid?)"
7708 fi
7709fi
7710if $test "$cont"; then
7711 echo 'No, maybe "uuname -l" will work...'
73614538 7712 if tans=`sh -c 'uuname -l' 2>&1` ; then
b4eb6b3d
JH
7713 myhostname=$tans
7714 phostname='uuname -l'
7715 else
7716 echo 'Strange. Maybe "uname -n" will work...'
73614538 7717 if tans=`sh -c 'uname -n' 2>&1` ; then
b4eb6b3d
JH
7718 myhostname=$tans
7719 phostname='uname -n'
7720 else
7721 echo 'Oh well, maybe I can mine it out of whoami.h...'
73614538 7722 if tans=`sh -c $contains' sysname $usrinc/whoami.h' 2>&1` ; then
b4eb6b3d
JH
7723 myhostname=`echo "$tans" | $sed 's/^.*"\(.*\)"/\1/'`
7724 phostname="sed -n -e '"'/sysname/s/^.*\"\\(.*\\)\"/\1/{'"' -e p -e q -e '}' <$usrinc/whoami.h"
7725 else
7726 case "$myhostname" in
7727 '') echo "Does this machine have an identity crisis or something?"
7728 phostname='';;
7729 *)
7730 echo "Well, you said $myhostname before..."
7731 phostname='echo $myhostname';;
7732 esac
7733 fi
7734 fi
7735 fi
7736fi
7737: you do not want to know about this
7738set $myhostname
7739myhostname=$1
7740
7741: verify guess
7742if $test "$myhostname" ; then
7743 dflt=y
7744 rp='Your host name appears to be "'$myhostname'".'" Right?"
7745 . ./myread
7746 case "$ans" in
7747 y*) ;;
7748 *) myhostname='';;
7749 esac
7750fi
7751
7752: bad guess or no guess
7753while $test "X$myhostname" = X ; do
7754 dflt=''
7755 rp="Please type the (one word) name of your host:"
7756 . ./myread
7757 myhostname="$ans"
7758done
7759
7760: translate upper to lower if necessary
7761case "$myhostname" in
7762*[A-Z]*)
7763 echo "(Normalizing case in your host name)"
7764 myhostname=`echo $myhostname | ./tr '[A-Z]' '[a-z]'`
7765 ;;
7766esac
7767
7768case "$myhostname" in
7769*.*)
7770 dflt=`expr "X$myhostname" : "X[^.]*\(\..*\)"`
7771 myhostname=`expr "X$myhostname" : "X\([^.]*\)\."`
7772 echo "(Trimming domain name from host name--host name is now $myhostname)"
7773 ;;
7774*) case "$mydomain" in
7775 '')
7776 {
7777 test "X$hostcat" = "Xypcat hosts" &&
7778 ypmatch "$myhostname" hosts 2>/dev/null |\
7779 $sed -e 's/[ ]*#.*//; s/$/ /' > hosts && \
7780 $test -s hosts
7781 } || {
7782 test "X$hostcat" != "X" &&
7783 $hostcat | $sed -n -e "s/[ ]*#.*//; s/\$/ /
7784 /[ ]$myhostname[ . ]/p" > hosts
7785 }
7786 tmp_re="[ . ]"
f08cbdd1
PP
7787 if $test -f hosts; then
7788 $test x`$awk "/[0-9].*[ ]$myhostname$tmp_re/ { sum++ }
b4eb6b3d 7789 END { print sum }" hosts` = x1 || tmp_re="[ ]"
f08cbdd1
PP
7790 dflt=.`$awk "/[0-9].*[ ]$myhostname$tmp_re/ {for(i=2; i<=NF;i++) print \\\$i}" \
7791 hosts | $sort | $uniq | \
7792 $sed -n -e "s/$myhostname\.\([-a-zA-Z0-9_.]\)/\1/p"`
7793 case `$echo X$dflt` in
7794 X*\ *) echo "(Several hosts in the database matched hostname)"
7795 dflt=.
7796 ;;
7797 X.) echo "(You do not have fully-qualified names in the hosts database)"
7798 ;;
7799 esac
7800 else
7801 echo "(I cannot locate a hosts database anywhere)"
b4eb6b3d 7802 dflt=.
f08cbdd1 7803 fi
b4eb6b3d
JH
7804 case "$dflt" in
7805 .)
7806 tans=`./loc resolv.conf X /etc /usr/etc`
7807 if $test -f "$tans"; then
7808 echo "(Attempting domain name extraction from $tans)"
7809 dflt=.`$sed -n -e 's/ / /g' \
7810 -e 's/^search *\([^ ]*\).*/\1/p' $tans \
7811 | ./tr '[A-Z]' '[a-z]' 2>/dev/null`
7812 case "$dflt" in
7813 .) dflt=.`$sed -n -e 's/ / /g' \
7814 -e 's/^domain *\([^ ]*\).*/\1/p' $tans \
7815 | ./tr '[A-Z]' '[a-z]' 2>/dev/null`
7816 ;;
7817 esac
7818 fi
7819 ;;
7820 esac
7821 case "$dflt" in
7822 .) echo "(No help from resolv.conf either -- attempting clever guess)"
73614538 7823 dflt=.`sh -c domainname 2>/dev/null`
b4eb6b3d
JH
7824 case "$dflt" in
7825 '') dflt='.';;
7826 .nis.*|.yp.*|.main.*) dflt=`echo $dflt | $sed -e 's/^\.[^.]*//'`;;
7827 esac
7828 ;;
7829 esac
59c9e5d6
PP
7830 case "$dflt$osname" in
7831 .os390) echo "(Attempting domain name extraction from //'SYS1.TCPPARMS(TCPDATA)')"
caf85fe8 7832 dflt=.`awk '/^DOMAINORIGIN/ {print $2}' "//'SYS1.TCPPARMS(TCPDATA)'" 2>/dev/null`
59c9e5d6
PP
7833 ;;
7834 esac
b4eb6b3d
JH
7835 case "$dflt" in
7836 .) echo "(Lost all hope -- silly guess then)"
7837 dflt='.uucp'
7838 ;;
7839 esac
7840 $rm -f hosts
7841 ;;
7842 *) dflt="$mydomain";;
7843 esac;;
7844esac
7845echo " "
7846rp="What is your domain name?"
7847. ./myread
7848tans="$ans"
7849case "$ans" in
7850'') ;;
7851.*) ;;
7852*) tans=".$tans";;
7853esac
7854mydomain="$tans"
7855
7856: translate upper to lower if necessary
7857case "$mydomain" in
7858*[A-Z]*)
7859 echo "(Normalizing case in your domain name)"
7860 mydomain=`echo $mydomain | ./tr '[A-Z]' '[a-z]'`
7861 ;;
7862esac
7863
7864: a little sanity check here
7865case "$phostname" in
7866'') ;;
7867*)
7868 case `$phostname | ./tr '[A-Z]' '[a-z]'` in
7869 $myhostname$mydomain|$myhostname) ;;
7870 *)
7871 case "$phostname" in
7872 sed*)
7873 echo "(That doesn't agree with your whoami.h file, by the way.)"
7874 ;;
7875 *)
7876 echo "(That doesn't agree with your $phostname command, by the way.)"
7877 ;;
7878 esac
7879 ;;
7880 esac
7881 ;;
7882esac
7883
7884$cat <<EOM
7885
7886I need to get your e-mail address in Internet format if possible, i.e.
7887something like user@host.domain. Please answer accurately since I have
7888no easy means to double check it. The default value provided below
7889is most probably close to reality but may not be valid from outside
7890your organization...
7891
7892EOM
7893cont=x
7894while test "$cont"; do
7895 case "$cf_email" in
7896 '') dflt="$cf_by@$myhostname$mydomain";;
7897 *) dflt="$cf_email";;
7898 esac
7899 rp='What is your e-mail address?'
7900 . ./myread
7901 cf_email="$ans"
7902 case "$cf_email" in
7903 *@*.*) cont='' ;;
7904 *)
7905 rp='Address does not look like an Internet one. Use it anyway?'
7906 case "$fastread" in
7907 yes) dflt=y ;;
7908 *) dflt=n ;;
7909 esac
7910 . ./myread
7911 case "$ans" in
7912 y*) cont='' ;;
7913 *) echo " " ;;
7914 esac
7915 ;;
7916 esac
7917done
7918
7919$cat <<EOM
7920
7921If you or somebody else will be maintaining perl at your site, please
7922fill in the correct e-mail address here so that they may be contacted
7923if necessary. Currently, the "perlbug" program included with perl
7924will send mail to this address in addition to perlbug@perl.org. You may
7925enter "none" for no administrator.
7926
7927EOM
7928case "$perladmin" in
7929'') dflt="$cf_email";;
7930*) dflt="$perladmin";;
7931esac
7932rp='Perl administrator e-mail address'
7933. ./myread
7934perladmin="$ans"
7935
674912d7
RB
7936: determine whether to only install version-specific parts.
7937echo " "
7938$cat <<EOM
7939Do you want to install only the version-specific parts of the perl
7940distribution? Usually you do *not* want to do this.
7941EOM
7942case "$versiononly" in
7943"$define"|[Yy]*|true) dflt='y' ;;
7944*) dflt='n';
7945esac
7946rp="Do you want to install only the version-specific parts of perl?"
7947. ./myread
7948case "$ans" in
7949[yY]*) val="$define";;
7950*) val="$undef" ;;
7951esac
7952set versiononly
7953eval $setvar
7954
b4eb6b3d
JH
7955: figure out how to guarantee perl startup
7956case "$startperl" in
7957'')
7958 case "$sharpbang" in
7959 *!)
7960 $cat <<EOH
7961
7962I can use the #! construct to start perl on your system. This will
7963make startup of perl scripts faster, but may cause problems if you
7964want to share those scripts and perl is not in a standard place
7965($binexp/perl) on all your platforms. The alternative is to force
7966a shell by starting the script with a single ':' character.
7967
7968EOH
674912d7
RB
7969 case "$versiononly" in
7970 "$define") dflt="$binexp/perl$version";;
7971 *) dflt="$binexp/perl";;
7972 esac
b4eb6b3d
JH
7973 rp='What shall I put after the #! to start up perl ("none" to not use #!)?'
7974 . ./myread
7975 case "$ans" in
7976 none) startperl=": # use perl";;
7977 *) startperl="#!$ans"
7978 if $test 30 -lt `echo "$ans" | wc -c`; then
7979 $cat >&4 <<EOM
7980
7981WARNING: Some systems limit the #! command to 32 characters.
7982If you experience difficulty running Perl scripts with #!, try
7983installing Perl in a directory with a shorter pathname.
7984
7985EOM
7986 fi ;;
7987 esac
7988 ;;
7989 *) startperl=": # use perl"
7990 ;;
7991 esac
7992 ;;
7993esac
7994echo "I'll use $startperl to start perl scripts."
7995
7996: figure best path for perl in scripts
7997case "$perlpath" in
7998'')
7999 perlpath="$binexp/perl"
8000 case "$startperl" in
8001 *!*) ;;
8002 *)
8003 $cat <<EOH
8004
8005I will use the "eval 'exec'" idiom to start Perl on your system.
8006I can use the full path of your Perl binary for this purpose, but
8007doing so may cause problems if you want to share those scripts and
8008Perl is not always in a standard place ($binexp/perl).
8009
8010EOH
8011 dflt="$binexp/perl"
8012 rp="What path shall I use in \"eval 'exec'\"?"
8013 . ./myread
8014 perlpath="$ans"
8015 ;;
8016 esac
8017 ;;
8018esac
8019case "$startperl" in
8020*!*) ;;
8021*) echo "I'll use $perlpath in \"eval 'exec'\"" ;;
8022esac
8023
8024: determine where public executable scripts go
8025set scriptdir scriptdir
8026eval $prefixit
8027case "$scriptdir" in
8028'')
8029 dflt="$bin"
8030 : guess some guesses
8031 $test -d /usr/share/scripts && dflt=/usr/share/scripts
8032 $test -d /usr/share/bin && dflt=/usr/share/bin
8033 $test -d /usr/local/script && dflt=/usr/local/script
8034 $test -d /usr/local/scripts && dflt=/usr/local/scripts
8035 $test -d $prefixexp/script && dflt=$prefixexp/script
8036 set dflt
8037 eval $prefixup
8038 ;;
8039*) dflt="$scriptdir"
8040 ;;
8041esac
8042$cat <<EOM
8043
8044Some installations have a separate directory just for executable scripts so
8045that they can mount it across multiple architectures but keep the scripts in
8046one spot. You might, for example, have a subdirectory of /usr/share for this.
8047Or you might just lump your scripts in with all your other executables.
8048
8049EOM
8050fn=d~
8051rp='Where do you keep publicly executable scripts?'
8052. ./getfile
8053if $test "X$ansexp" != "X$scriptdirexp"; then
8054 installscript=''
8055fi
8056scriptdir="$ans"
8057scriptdirexp="$ansexp"
8058: Change installation prefix, if necessary.
8059if $test X"$prefix" != X"$installprefix"; then
8060 installscript=`echo $scriptdirexp | sed "s#^$prefix#$installprefix#"`
8061else
8062 installscript="$scriptdirexp"
8063fi
8064
8065: determine where add-on public executables go
8066case "$sitebin" in
8067'') dflt=$siteprefix/bin ;;
8068*) dflt=$sitebin ;;
8069esac
8070fn=d~
8071rp='Pathname where the add-on public executables should be installed?'
8072. ./getfile
8073sitebin="$ans"
8074sitebinexp="$ansexp"
8075: Change installation prefix, if necessary.
8076if $test X"$prefix" != X"$installprefix"; then
8077 installsitebin=`echo $sitebinexp | sed "s#^$prefix#$installprefix#"`
8078else
8079 installsitebin="$sitebinexp"
8080fi
8081
96056487
JH
8082: define an is-a-typedef? function
8083typedef='type=$1; var=$2; def=$3; shift; shift; shift; inclist=$@;
8084case "$inclist" in
8085"") inclist="sys/types.h";;
8086esac;
8087eval "varval=\$$var";
8088case "$varval" in
8089"")
8090 $rm -f temp.c;
8091 for inc in $inclist; do
8092 echo "#include <$inc>" >>temp.c;
8093 done;
8094 echo "#ifdef $type" >> temp.c;
8095 echo "printf(\"We have $type\");" >> temp.c;
8096 echo "#endif" >> temp.c;
8097 $cppstdin $cppflags $cppminus < temp.c >temp.E 2>/dev/null;
8098 if $contains $type temp.E >/dev/null 2>&1; then
8099 eval "$var=\$type";
8100 else
8101 eval "$var=\$def";
8102 fi;
8103 $rm -f temp.?;;
8104*) eval "$var=\$varval";;
8105esac'
8106
8107: define an is-a-typedef? function that prompts if the type is not available.
8108typedef_ask='type=$1; var=$2; def=$3; shift; shift; shift; inclist=$@;
8109case "$inclist" in
8110"") inclist="sys/types.h";;
8111esac;
8112eval "varval=\$$var";
8113case "$varval" in
8114"")
8115 $rm -f temp.c;
8116 for inc in $inclist; do
8117 echo "#include <$inc>" >>temp.c;
8118 done;
8119 echo "#ifdef $type" >> temp.c;
8120 echo "printf(\"We have $type\");" >> temp.c;
8121 echo "#endif" >> temp.c;
8122 $cppstdin $cppflags $cppminus < temp.c >temp.E 2>/dev/null;
8123 echo " " ;
8124 echo "$rp" | $sed -e "s/What is/Looking for/" -e "s/?/./";
8125 if $contains $type temp.E >/dev/null 2>&1; then
8126 echo "$type found." >&4;
8127 eval "$var=\$type";
8128 else
8129 echo "$type NOT found." >&4;
8130 dflt="$def";
8131 . ./myread ;
8132 eval "$var=\$ans";
8133 fi;
8134 $rm -f temp.?;;
8135*) eval "$var=\$varval";;
8136esac'
8137
8138: see what type lseek is declared as in the kernel
8139rp="What is the type used for lseek's offset on this system?"
8140set off_t lseektype long stdio.h sys/types.h
8141eval $typedef_ask
8142
8143echo " "
8144echo "Checking to see how big your file offsets are..." >&4
8145$cat >try.c <<EOCP
8146#include <sys/types.h>
8147#include <stdio.h>
8148int main()
8149{
8150 printf("%d\n", (int)sizeof($lseektype));
8151 return(0);
8152}
8153EOCP
8154set try
8155if eval $compile_ok; then
8156 lseeksize=`$run ./try`
8157 echo "Your file offsets are $lseeksize bytes long."
8158else
8159 dflt=$longsize
8160 echo " "
8161 echo "(I can't seem to compile the test program. Guessing...)"
8162 rp="What is the size of your file offsets (in bytes)?"
8163 . ./myread
8164 lseeksize="$ans"
8165fi
8166$rm -f try.c try
8167
8168: see what type file positions are declared as in the library
8169rp="What is the type for file position used by fsetpos()?"
8170set fpos_t fpostype long stdio.h sys/types.h
8171eval $typedef_ask
8172
8173echo " "
8174case "$fpostype" in
8175*_t) zzz="$fpostype" ;;
8176*) zzz="fpos_t" ;;
8177esac
8178echo "Checking the size of $zzz..." >&4
8179cat > try.c <<EOCP
8180#include <sys/types.h>
8181#include <stdio.h>
8182int main() {
8183 printf("%d\n", (int)sizeof($fpostype));
8184 exit(0);
8185}
8186EOCP
8187set try
8188if eval $compile_ok; then
8189 yyy=`$run ./try`
8190 case "$yyy" in
8191 '') fpossize=4
8192 echo "(I can't execute the test program--guessing $fpossize.)" >&4
8193 ;;
8194 *) fpossize=$yyy
8195 echo "Your $zzz is $fpossize bytes long."
8196 ;;
8197 esac
8198else
8199 dflt="$longsize"
8200 echo " " >&4
8201 echo "(I can't compile the test program. Guessing...)" >&4
8202 rp="What is the size of your file positions (in bytes)?"
8203 . ./myread
8204 fpossize="$ans"
8205fi
8206
8207
8208
8209# Backward compatibility (uselfs is deprecated).
8210case "$uselfs" in
8211"$define"|true|[yY]*)
8212 cat <<EOM >&4
8213
8214*** Configure -Duselfs is deprecated, using -Duselargefiles instead.
8215EOM
8216 uselargefiles="$define"
8217 ;;
8218esac
8219
8220case "$lseeksize:$fpossize" in
82218:8) cat <<EOM
8222
8223You can have files larger than 2 gigabytes.
8224EOM
8225 val="$define" ;;
8226*) case "$uselargefiles" in
8227 "$undef"|false|[nN]*) dflt='n' ;;
8228 *) dflt='y' ;;
8229 esac
8230 cat <<EOM
8231
8232Perl can be built to understand large files (files larger than 2 gigabytes)
8233on some systems. To do so, Configure can be run with -Duselargefiles.
8234
8235If this doesn't make any sense to you, just accept the default '$dflt'.
8236EOM
8237 rp='Try to understand large files, if available?'
8238 . ./myread
8239 case "$ans" in
8240 y|Y) val="$define" ;;
8241 *) val="$undef" ;;
8242 esac
8243 ;;
8244esac
8245set uselargefiles
8246eval $setvar
8247case "$uselargefiles" in
8248"$define")
8249: Look for a hint-file generated 'call-back-unit'. If the
8250: user has specified that a large files perl is to be built,
8251: we may need to set or change some other defaults.
8252 if $test -f uselargefiles.cbu; then
8253 echo "Your platform has some specific hints for large file builds, using them..."
8254 . ./uselargefiles.cbu
8255 echo " "
8256 echo "Rechecking to see how big your file offsets are..." >&4
8257 $cat >try.c <<EOCP
8258#include <sys/types.h>
8259#include <stdio.h>
8260int main()
8261{
8262 printf("%d\n", (int)sizeof($lseektype));
8263 return(0);
8264}
8265EOCP
8266 set try
8267 if eval $compile_ok; then
8268 lseeksize=`$run ./try`
8269 $echo "Your file offsets are now $lseeksize bytes long."
8270 else
8271 dflt="$lseeksize"
8272 echo " "
8273 echo "(I can't seem to compile the test program. Guessing...)"
8274 rp="What is the size of your file offsets (in bytes)?"
8275 . ./myread
8276 lseeksize="$ans"
8277 fi
8278 case "$fpostype" in
8279 *_t) zzz="$fpostype" ;;
8280 *) zzz="fpos_t" ;;
8281 esac
8282 $echo $n "Rechecking the size of $zzz...$c" >&4
8283 $cat > try.c <<EOCP
8284#include <sys/types.h>
8285#include <stdio.h>
8286int main() {
8287 printf("%d\n", (int)sizeof($fpostype));
8288 exit(0);
8289}
8290EOCP
8291 set try
8292 if eval $compile_ok; then
8293 yyy=`$run ./try`
8294 dflt="$lseeksize"
8295 case "$yyy" in
8296 '') echo " "
8297 echo "(I can't execute the test program--guessing $fpossize.)" >&4
8298 ;;
8299 *) fpossize=$yyy
8300 echo " $fpossize bytes." >&4
8301 ;;
8302 esac
8303 else
8304 dflt="$fpossize"
8305 echo " "
8306 echo "(I can't compile the test program. Guessing...)" >&4
8307 rp="What is the size of your file positions (in bytes)?"
8308 . ./myread
8309 fpossize="$ans"
8310 fi
8311 $rm -f try.c try
8312 fi
8313 ;;
8314esac
8315
b4eb6b3d
JH
8316case "$vendorprefix" in
8317'') d_vendorbin="$undef"
8318 vendorbin=''
8319 vendorbinexp=''
8320 ;;
8321*) d_vendorbin="$define"
8322 : determine where vendor-supplied executables go.
8323 case "$vendorbin" in
8324 '') dflt=$vendorprefix/bin ;;
8325 *) dflt="$vendorbin" ;;
8326 esac
8327 fn=d~+
8328 rp='Pathname for the vendor-supplied executables directory?'
8329 . ./getfile
8330 vendorbin="$ans"
8331 vendorbinexp="$ansexp"
8332 ;;
8333esac
8334: Change installation prefix, if necessary.
8335if $test X"$prefix" != X"$installprefix"; then
8336 installvendorbin=`echo $vendorbinexp | $sed "s#^$prefix#$installprefix#"`
8337else
8338 installvendorbin="$vendorbinexp"
8339fi
8340
8341: see if qgcvt exists
8342set qgcvt d_qgcvt
8343eval $inlibc
8344
8345echo " "
8346
8347if $test X"$d_longdbl" = X"$define"; then
8348
8349echo "Checking how to print long doubles..." >&4
8350
8351if $test X"$sPRIfldbl" = X -a X"$doublesize" = X"$longdblsize"; then
8352 $cat >try.c <<'EOCP'
8353#include <sys/types.h>
8354#include <stdio.h>
8355int main() {
8356 double d = 123.456;
8357 printf("%.3f\n", d);
8358}
8359EOCP
8360 set try
8361 if eval $compile; then
5440bc8e 8362 yyy=`$run ./try`
b4eb6b3d
JH
8363 case "$yyy" in
8364 123.456)
8365 sPRIfldbl='"f"'; sPRIgldbl='"g"'; sPRIeldbl='"e"';
8366 sPRIFUldbl='"F"'; sPRIGUldbl='"G"'; sPRIEUldbl='"E"';
8367 echo "We will use %f."
8368 ;;
8369 esac
8370 fi
8371fi
8372
8373if $test X"$sPRIfldbl" = X; then
8374 $cat >try.c <<'EOCP'
8375#include <sys/types.h>
8376#include <stdio.h>
8377int main() {
8378 long double d = 123.456;
2ef53570 8379 printf("%.3Lf\n", d);
b4eb6b3d
JH
8380}
8381EOCP
8382 set try
8383 if eval $compile; then
5440bc8e 8384 yyy=`$run ./try`
b4eb6b3d
JH
8385 case "$yyy" in
8386 123.456)
2ef53570
JH
8387 sPRIfldbl='"Lf"'; sPRIgldbl='"Lg"'; sPRIeldbl='"Le"';
8388 sPRIFUldbl='"LF"'; sPRIGUldbl='"LG"'; sPRIEUldbl='"LE"';
8389 echo "We will use %Lf."
b4eb6b3d
JH
8390 ;;
8391 esac
8392 fi
8393fi
8394
8395if $test X"$sPRIfldbl" = X; then
8396 $cat >try.c <<'EOCP'
8397#include <sys/types.h>
8398#include <stdio.h>
8399int main() {
8400 long double d = 123.456;
2ef53570 8401 printf("%.3llf\n", d);
b4eb6b3d
JH
8402}
8403EOCP
8404 set try
8405 if eval $compile; then
5440bc8e 8406 yyy=`$run ./try`
b4eb6b3d
JH
8407 case "$yyy" in
8408 123.456)
2ef53570
JH
8409 sPRIfldbl='"llf"'; sPRIgldbl='"llg"'; sPRIeldbl='"lle"';
8410 sPRIFUldbl='"llF"'; sPRIGUldbl='"llG"'; sPRIEUldbl='"llE"';
8411 echo "We will use %llf."
b4eb6b3d
JH
8412 ;;
8413 esac
8414 fi
8415fi
8416
8417if $test X"$sPRIfldbl" = X; then
8418 $cat >try.c <<'EOCP'
8419#include <sys/types.h>
8420#include <stdio.h>
8421int main() {
8422 long double d = 123.456;
8423 printf("%.3lf\n", d);
8424}
8425EOCP
8426 set try
8427 if eval $compile; then
5440bc8e 8428 yyy=`$run ./try`
b4eb6b3d
JH
8429 case "$yyy" in
8430 123.456)
8431 sPRIfldbl='"lf"'; sPRIgldbl='"lg"'; sPRIeldbl='"le"';
8432 sPRIFUldbl='"lF"'; sPRIGUldbl='"lG"'; sPRIEUldbl='"lE"';
8433 echo "We will use %lf."
8434 ;;
8435 esac
8436 fi
8437fi
8438
8439if $test X"$sPRIfldbl" = X; then
8440 echo "Cannot figure out how to print long doubles." >&4
8441else
8442 sSCNfldbl=$sPRIfldbl # expect consistency
8443fi
8444
8445$rm -f try try.*
8446
8447fi # d_longdbl
8448
8449case "$sPRIfldbl" in
8450'') d_PRIfldbl="$undef"; d_PRIgldbl="$undef"; d_PRIeldbl="$undef";
8451 d_PRIFUldbl="$undef"; d_PRIGUldbl="$undef"; d_PRIEUldbl="$undef";
8452 d_SCNfldbl="$undef";
8453 ;;
8454*) d_PRIfldbl="$define"; d_PRIgldbl="$define"; d_PRIeldbl="$define";
8455 d_PRIFUldbl="$define"; d_PRIGUldbl="$define"; d_PRIEUldbl="$define";
8456 d_SCNfldbl="$define";
8457 ;;
8458esac
8459
8460: Check how to convert floats to strings.
8461echo " "
8462echo "Checking for an efficient way to convert floats to strings."
8463echo " " > try.c
8464case "$uselongdouble" in
8465"$define") echo "#define USE_LONG_DOUBLE" >>try.c ;;
8466esac
8467case "$d_longdbl" in
8468"$define") echo "#define HAS_LONG_DOUBLE" >>try.c ;;
8469esac
8470case "$d_PRIgldbl" in
8471"$define") echo "#define HAS_PRIgldbl" >>try.c ;;
8472esac
8473$cat >>try.c <<EOP
8474#ifdef TRY_gconvert
8475#define Gconvert(x,n,t,b) gconvert((x),(n),(t),(b))
8476char *myname = "gconvert";
8477#endif
8478#ifdef TRY_gcvt
8479#define Gconvert(x,n,t,b) gcvt((x),(n),(b))
8480char *myname = "gcvt";
8481#endif
8482#ifdef TRY_qgcvt
8483#define Gconvert(x,n,t,b) qgcvt((x),(n),(b))
8484char *myname = "qgcvt";
8485#define DOUBLETYPE long double
8486#endif
8487#ifdef TRY_sprintf
8488#if defined(USE_LONG_DOUBLE) && defined(HAS_LONG_DOUBLE) && defined(HAS_PRIgldbl)
8489#define Gconvert(x,n,t,b) sprintf((b),"%.*"$sPRIgldbl,(n),(x))
8490#else
8491#define Gconvert(x,n,t,b) sprintf((b),"%.*g",(n),(x))
8492#endif
8493char *myname = "sprintf";
8494#endif
8495
8496#ifndef DOUBLETYPE
8497#if defined(USE_LONG_DOUBLE) && defined(HAS_LONG_DOUBLE)
8498#define DOUBLETYPE long double
8499#else
8500#define DOUBLETYPE double
8501#endif
8502#endif
8503
8504#include <stdio.h>
8505
8506#define I_STDLIB $i_stdlib
8507#ifdef I_STDLIB
8508#include <stdlib.h>
8509#endif
8510
8511int
8512checkit(expect, got)
8513char *expect;
8514char *got;
8515{
8516 if (strcmp(expect, got)) {
8517 printf("%s oddity: Expected %s, got %s\n",
8518 myname, expect, got);
8519 exit(1);
8520 }
8521}
8522
8523int main()
8524{
8525 char buf[64];
8526 buf[63] = '\0';
8527
8528 /* This must be 1st test on (which?) platform */
8529 /* Alan Burlison <AlanBurlsin@unn.unisys.com> */
8530 Gconvert((DOUBLETYPE)0.1, 8, 0, buf);
8531 checkit("0.1", buf);
8532
8533 Gconvert((DOUBLETYPE)1.0, 8, 0, buf);
8534 checkit("1", buf);
8535
8536 Gconvert((DOUBLETYPE)1.1, 8, 0, buf);
8537 checkit("1.1", buf);
8538
8539 Gconvert((DOUBLETYPE)1.01, 8, 0, buf);
8540 checkit("1.01", buf);
8541
8542 Gconvert((DOUBLETYPE)1.001, 8, 0, buf);
8543 checkit("1.001", buf);
8544
8545 Gconvert((DOUBLETYPE)1.0001, 8, 0, buf);
8546 checkit("1.0001", buf);
8547
8548 Gconvert((DOUBLETYPE)1.00001, 8, 0, buf);
8549 checkit("1.00001", buf);
8550
8551 Gconvert((DOUBLETYPE)1.000001, 8, 0, buf);
8552 checkit("1.000001", buf);
8553
8554 Gconvert((DOUBLETYPE)0.0, 8, 0, buf);
8555 checkit("0", buf);
8556
8557 Gconvert((DOUBLETYPE)-1.0, 8, 0, buf);
8558 checkit("-1", buf);
8559
8560 /* Some Linux gcvt's give 1.e+5 here. */
8561 Gconvert((DOUBLETYPE)100000.0, 8, 0, buf);
8562 checkit("100000", buf);
8563
8564 /* Some Linux gcvt's give -1.e+5 here. */
8565 Gconvert((DOUBLETYPE)-100000.0, 8, 0, buf);
8566 checkit("-100000", buf);
8567
8568 Gconvert((DOUBLETYPE)123.456, 8, 0, buf);
8569 checkit("123.456", buf);
8570
8e2a5ede
SB
8571 /* Testing of 1e+129 in bigintpm.t must not get extra '.' here. */
8572 Gconvert((DOUBLETYPE)1e30, 8, 0, buf);
8573 if (strlen(buf) > 5)
8574 checkit("1e+030", buf); /* for Microsoft */
8575 else
8576 checkit("1e+30", buf);
8577
b4eb6b3d
JH
8578 exit(0);
8579}
8580EOP
8581case "$d_Gconvert" in
8582gconvert*) xxx_list='gconvert gcvt sprintf' ;;
8583gcvt*) xxx_list='gcvt gconvert sprintf' ;;
8584sprintf*) xxx_list='sprintf gconvert gcvt' ;;
8585*) xxx_list='gconvert gcvt sprintf' ;;
8586esac
8587
8588case "$d_longdbl$uselongdouble$d_PRIgldbl" in
8589"$define$define$define")
8590 # for long doubles prefer first qgcvt, then sprintf
8591 xxx_list="`echo $xxx_list|sed s/sprintf//`"
8592 xxx_list="sprintf $xxx_list"
8593 case "$d_qgcvt" in
8594 "$define") xxx_list="qgcvt $xxx_list" ;;
8595 esac
8596 ;;
8597esac
8598
8599for xxx_convert in $xxx_list; do
8600 echo "Trying $xxx_convert..."
8601 $rm -f try try$_o
8602 set try -DTRY_$xxx_convert
8603 if eval $compile; then
8604 echo "$xxx_convert() found." >&4
5440bc8e 8605 if $run ./try; then
b4eb6b3d
JH
8606 echo "I'll use $xxx_convert to convert floats into a string." >&4
8607 break;
8608 else
8609 echo "...But $xxx_convert didn't work as I expected."
8610 fi
8611 else
8612 echo "$xxx_convert NOT found." >&4
8613 fi
8614done
8615
8616case "$xxx_convert" in
8617gconvert) d_Gconvert='gconvert((x),(n),(t),(b))' ;;
8618gcvt) d_Gconvert='gcvt((x),(n),(b))' ;;
8619qgcvt) d_Gconvert='qgcvt((x),(n),(b))' ;;
8620*) case "$uselongdouble$d_longdbl$d_PRIgldbl" in
8621 "$define$define$define")
8622 d_Gconvert="sprintf((b),\"%.*\"$sPRIgldbl,(n),(x))" ;;
8623 *) d_Gconvert='sprintf((b),"%.*g",(n),(x))' ;;
8624 esac
8625 ;;
8626esac
8627
74cac757
JH
8628: see if _fwalk exists
8629set fwalk d__fwalk
8630eval $inlibc
8631
b4eb6b3d
JH
8632: Initialize h_fcntl
8633h_fcntl=false
8634
8635: Initialize h_sysfile
8636h_sysfile=false
8637
8638: access call always available on UNIX
8639set access d_access
8640eval $inlibc
8641
8642: locate the flags for 'access()'
8643case "$d_access" in
8644"$define")
8645 echo " "
8646 $cat >access.c <<'EOCP'
8647#include <sys/types.h>
8648#ifdef I_FCNTL
8649#include <fcntl.h>
8650#endif
8651#ifdef I_SYS_FILE
8652#include <sys/file.h>
8653#endif
8654#ifdef I_UNISTD
8655#include <unistd.h>
8656#endif
8657int main() {
8658 exit(R_OK);
8659}
8660EOCP
8661 : check sys/file.h first, no particular reason here
8662 if $test `./findhdr sys/file.h` && \
7a282f6d 8663 $cc -o access $cppflags -DI_SYS_FILE access.c >/dev/null 2>&1 ; then
b4eb6b3d
JH
8664 h_sysfile=true;
8665 echo "<sys/file.h> defines the *_OK access constants." >&4
8666 elif $test `./findhdr fcntl.h` && \
7a282f6d 8667 $cc -o access $cppflags -DI_FCNTL access.c >/dev/null 2>&1 ; then
b4eb6b3d
JH
8668 h_fcntl=true;
8669 echo "<fcntl.h> defines the *_OK access constants." >&4
8670 elif $test `./findhdr unistd.h` && \
7a282f6d 8671 $cc -o access $cppflags -DI_UNISTD access.c >/dev/null 2>&1 ; then
b4eb6b3d
JH
8672 echo "<unistd.h> defines the *_OK access constants." >&4
8673 else
8674 echo "I can't find the four *_OK access constants--I'll use mine." >&4
8675 fi
8676 ;;
8677esac
8678$rm -f access*
8679
8680: see if accessx exists
8681set accessx d_accessx
8682eval $inlibc
8683
8684: see if alarm exists
8685set alarm d_alarm
8686eval $inlibc
8687
8688: see if atolf exists
8689set atolf d_atolf
8690eval $inlibc
8691
8692: see if atoll exists
8693set atoll d_atoll
8694eval $inlibc
8695
8696: Look for GNU-cc style attribute checking
8697echo " "
8698echo "Checking whether your compiler can handle __attribute__ ..." >&4
8699$cat >attrib.c <<'EOCP'
8700#include <stdio.h>
8701void croak (char* pat,...) __attribute__((format(printf,1,2),noreturn));
8702EOCP
8703if $cc $ccflags -c attrib.c >attrib.out 2>&1 ; then
8704 if $contains 'warning' attrib.out >/dev/null 2>&1; then
8705 echo "Your C compiler doesn't fully support __attribute__."
8706 val="$undef"
8707 else
8708 echo "Your C compiler supports __attribute__."
8709 val="$define"
8710 fi
8711else
8712 echo "Your C compiler doesn't seem to understand __attribute__ at all."
8713 val="$undef"
8714fi
8715set d_attribut
8716eval $setvar
8717$rm -f attrib*
8718
8719: see if bcmp exists
8720set bcmp d_bcmp
8721eval $inlibc
8722
8723: see if bcopy exists
8724set bcopy d_bcopy
8725eval $inlibc
8726
8727: see if this is a unistd.h system
8728set unistd.h i_unistd
8729eval $inhdr
8730
8731: see if getpgrp exists
8732set getpgrp d_getpgrp
8733eval $inlibc
8734
8735case "$d_getpgrp" in
8736"$define")
8737 echo " "
8738 echo "Checking to see which flavor of getpgrp is in use..."
5440bc8e 8739 $cat >try.c <<EOP
b4eb6b3d
JH
8740#$i_unistd I_UNISTD
8741#include <sys/types.h>
8742#ifdef I_UNISTD
8743# include <unistd.h>
8744#endif
8745int main()
8746{
8747 if (getuid() == 0) {
8748 printf("(I see you are running Configure as super-user...)\n");
8749 setuid(1);
8750 }
8751#ifdef TRY_BSD_PGRP
8752 if (getpgrp(1) == 0)
8753 exit(0);
8754#else
8755 if (getpgrp() > 0)
8756 exit(0);
8757#endif
8758 exit(1);
8759}
8760EOP
5440bc8e 8761 if $cc -o try -DTRY_BSD_PGRP $ccflags $ldflags try.c $libs >/dev/null 2>&1 && $run ./try; then
b4eb6b3d
JH
8762 echo "You have to use getpgrp(pid) instead of getpgrp()." >&4
8763 val="$define"
5440bc8e 8764 elif $cc -o try $ccflags $ldflags try.c $libs >/dev/null 2>&1 && $run ./try; then
b4eb6b3d
JH
8765 echo "You have to use getpgrp() instead of getpgrp(pid)." >&4
8766 val="$undef"
8767 else
8768 echo "I can't seem to compile and run the test program."
8769 if ./usg; then
8770 xxx="a USG one, i.e. you use getpgrp()."
8771 else
8772 # SVR4 systems can appear rather BSD-ish.
8773 case "$i_unistd" in
8774 $undef)
8775 xxx="a BSD one, i.e. you use getpgrp(pid)."
8776 val="$define"
8777 ;;
8778 $define)
8779 xxx="probably a USG one, i.e. you use getpgrp()."
8780 val="$undef"
8781 ;;
8782 esac
8783 fi
8784 echo "Assuming your getpgrp is $xxx" >&4
8785 fi
8786 ;;
8787*) val="$undef";;
8788esac
8789set d_bsdgetpgrp
8790eval $setvar
5440bc8e 8791$rm -f try try.*
b4eb6b3d
JH
8792
8793: see if setpgrp exists
8794set setpgrp d_setpgrp
8795eval $inlibc
8796
8797case "$d_setpgrp" in
8798"$define")
8799 echo " "
8800 echo "Checking to see which flavor of setpgrp is in use..."
5440bc8e 8801 $cat >try.c <<EOP
b4eb6b3d
JH
8802#$i_unistd I_UNISTD
8803#include <sys/types.h>
8804#ifdef I_UNISTD
8805# include <unistd.h>
8806#endif
8807int main()
8808{
8809 if (getuid() == 0) {
8810 printf("(I see you are running Configure as super-user...)\n");
8811 setuid(1);
8812 }
8813#ifdef TRY_BSD_PGRP
8814 if (-1 == setpgrp(1, 1))
8815 exit(0);
8816#else
8817 if (setpgrp() != -1)
8818 exit(0);
8819#endif
8820 exit(1);
8821}
8822EOP
5440bc8e 8823 if $cc -o try -DTRY_BSD_PGRP $ccflags $ldflags try.c $libs >/dev/null 2>&1 && $run ./try; then
b4eb6b3d
JH
8824 echo 'You have to use setpgrp(pid,pgrp) instead of setpgrp().' >&4
8825 val="$define"
5440bc8e 8826 elif $cc -o try $ccflags $ldflags try.c $libs >/dev/null 2>&1 && $run ./try; then
b4eb6b3d
JH
8827 echo 'You have to use setpgrp() instead of setpgrp(pid,pgrp).' >&4
8828 val="$undef"
8829 else
8830 echo "(I can't seem to compile and run the test program.)"
8831 if ./usg; then
8832 xxx="a USG one, i.e. you use setpgrp()."
8833 else
8834 # SVR4 systems can appear rather BSD-ish.
8835 case "$i_unistd" in
8836 $undef)
8837 xxx="a BSD one, i.e. you use setpgrp(pid,pgrp)."
8838 val="$define"
8839 ;;
8840 $define)
8841 xxx="probably a USG one, i.e. you use setpgrp()."
8842 val="$undef"
8843 ;;
8844 esac
8845 fi
8846 echo "Assuming your setpgrp is $xxx" >&4
8847 fi
8848 ;;
8849*) val="$undef";;
8850esac
8851set d_bsdsetpgrp
8852eval $setvar
5440bc8e 8853$rm -f try try.*
b4eb6b3d
JH
8854: see if bzero exists
8855set bzero d_bzero
8856eval $inlibc
8857
8858: see if signal is declared as pointer to function returning int or void
8859echo " "
8860xxx=`./findhdr signal.h`
8861$test "$xxx" && $cppstdin $cppminus $cppflags < $xxx >$$.tmp 2>/dev/null
8862if $contains 'int.*\*[ ]*signal' $$.tmp >/dev/null 2>&1 ; then
8863 echo "You have int (*signal())() instead of void." >&4
8864 val="$undef"
8865elif $contains 'void.*\*[ ]*signal' $$.tmp >/dev/null 2>&1 ; then
8866 echo "You have void (*signal())()." >&4
8867 val="$define"
8868elif $contains 'extern[ ]*[(\*]*signal' $$.tmp >/dev/null 2>&1 ; then
8869 echo "You have int (*signal())() instead of void." >&4
8870 val="$undef"
8871elif $contains 'void.*\*.*sig' $$.tmp >/dev/null 2>&1 ; then
8872 echo "You have void (*signal())()." >&4
8873 val="$define"
8874else
8875 case "$d_voidsig" in
8876 '')
8877 echo "I can't determine whether signal handler returns void or int..." >&4
8878 dflt=void
8879 rp="What type does your signal handler return?"
8880 . ./myread
8881 case "$ans" in
8882 v*) val="$define";;
8883 *) val="$undef";;
8884 esac;;
8885 "$define")
8886 echo "As you already told me, signal handler returns void." >&4
8887 val="$define"
8888 ;;
8889 *) echo "As you already told me, signal handler returns int." >&4
8890 val="$undef"
8891 ;;
8892 esac
8893fi
8894set d_voidsig
8895eval $setvar
8896case "$d_voidsig" in
8897"$define") signal_t="void";;
8898*) signal_t="int";;
8899esac
8900$rm -f $$.tmp
8901
8902: check for ability to cast large floats to 32-bit ints.
8903echo " "
8904echo 'Checking whether your C compiler can cast large floats to int32.' >&4
8905if $test "$intsize" -ge 4; then
8906 xxx=int
8907else
8908 xxx=long
8909fi
8910$cat >try.c <<EOCP
8911#include <stdio.h>
8912#include <sys/types.h>
8913#include <signal.h>
8914$signal_t blech(s) int s; { exit(3); }
8915int main()
8916{
8917 $xxx i32;
8918 double f, g;
8919 int result = 0;
8920 char str[16];
8921 signal(SIGFPE, blech);
8922
8923 /* Don't let compiler optimize the test away. Store the number
8924 in a writable string for gcc to pass to sscanf under HP/UX.
8925 */
8926 sprintf(str, "2147483647");
8927 sscanf(str, "%lf", &f); /* f = (double) 0x7fffffff; */
8928 g = 10 * f;
8929 i32 = ($xxx) g;
8930
8931 /* x86 processors will probably give 0x8000 0000, which is a
8932 sign change. We don't want that. We want to mimic SPARC
8933 behavior here, which is to preserve the sign and give
8934 back 0x7fff ffff.
8935 */
8936 if (i32 != ($xxx) f)
8937 result |= 1;
8938 exit(result);
8939}
8940EOCP
8941set try
8942if eval $compile_ok; then
5440bc8e 8943 $run ./try
b4eb6b3d
JH
8944 yyy=$?
8945else
8946 echo "(I can't seem to compile the test program--assuming it can't)"
8947 yyy=1
8948fi
8949case "$yyy" in
89500) val="$define"
8951 echo "Yup, it can."
8952 ;;
8953*) val="$undef"
8954 echo "Nope, it can't."
8955 ;;
8956esac
8957set d_casti32
8958eval $setvar
8959$rm -f try try.*
8960
8961: check for ability to cast negative floats to unsigned
8962echo " "
8963echo 'Checking whether your C compiler can cast negative float to unsigned.' >&4
8964$cat >try.c <<EOCP
8965#include <stdio.h>
8966#include <sys/types.h>
8967#include <signal.h>
8968$signal_t blech(s) int s; { exit(7); }
8969$signal_t blech_in_list(s) int s; { exit(4); }
8970unsigned long dummy_long(p) unsigned long p; { return p; }
8971unsigned int dummy_int(p) unsigned int p; { return p; }
8972unsigned short dummy_short(p) unsigned short p; { return p; }
8973int main()
8974{
8975 double f;
8976 unsigned long along;
8977 unsigned int aint;
8978 unsigned short ashort;
8979 int result = 0;
8980 char str[16];
8981
8982 /* Frustrate gcc-2.7.2's optimizer which failed this test with
8983 a direct f = -123. assignment. gcc-2.8.0 reportedly
8984 optimized the whole file away
8985 */
8986 /* Store the number in a writable string for gcc to pass to
8987 sscanf under HP/UX.
8988 */
8989 sprintf(str, "-123");
8990 sscanf(str, "%lf", &f); /* f = -123.; */
8991
8992 signal(SIGFPE, blech);
8993 along = (unsigned long)f;
8994 aint = (unsigned int)f;
8995 ashort = (unsigned short)f;
8996 if (along != (unsigned long)-123)
8997 result |= 1;
8998 if (aint != (unsigned int)-123)
8999 result |= 1;
9000 if (ashort != (unsigned short)-123)
9001 result |= 1;
9002 sprintf(str, "1073741824.");
9003 sscanf(str, "%lf", &f); /* f = (double)0x40000000; */
9004 f = f + f;
9005 along = 0;
9006 along = (unsigned long)f;
9007 if (along != 0x80000000)
9008 result |= 2;
9009 f -= 1.;
9010 along = 0;
9011 along = (unsigned long)f;
9012 if (along != 0x7fffffff)
9013 result |= 1;
9014 f += 2.;
9015 along = 0;
9016 along = (unsigned long)f;
9017 if (along != 0x80000001)
9018 result |= 2;
9019 if (result)
9020 exit(result);
9021 signal(SIGFPE, blech_in_list);
9022 sprintf(str, "123.");
9023 sscanf(str, "%lf", &f); /* f = 123.; */
9024 along = dummy_long((unsigned long)f);
9025 aint = dummy_int((unsigned int)f);
9026 ashort = dummy_short((unsigned short)f);
9027 if (along != (unsigned long)123)
9028 result |= 4;
9029 if (aint != (unsigned int)123)
9030 result |= 4;
9031 if (ashort != (unsigned short)123)
9032 result |= 4;
9033 exit(result);
9034
9035}
9036EOCP
9037set try
9038if eval $compile_ok; then
5440bc8e 9039 $run ./try
b4eb6b3d
JH
9040 castflags=$?
9041else
9042 echo "(I can't seem to compile the test program--assuming it can't)"
9043 castflags=7
9044fi
9045case "$castflags" in
90460) val="$define"
9047 echo "Yup, it can."
9048 ;;
9049*) val="$undef"
9050 echo "Nope, it can't."
9051 ;;
9052esac
9053set d_castneg
9054eval $setvar
9055$rm -f try.*
9056
9057: see if vprintf exists
9058echo " "
9059if set vprintf val -f d_vprintf; eval $csym; $val; then
9060 echo 'vprintf() found.' >&4
9061 val="$define"
5440bc8e 9062 $cat >try.c <<'EOF'
b4eb6b3d
JH
9063#include <varargs.h>
9064
9065int main() { xxx("foo"); }
9066
9067xxx(va_alist)
9068va_dcl
9069{
9070 va_list args;
9071 char buf[10];
9072
9073 va_start(args);
9074 exit((unsigned long)vsprintf(buf,"%s",args) > 10L);
9075}
9076EOF
5440bc8e
JH
9077 set try
9078 if eval $compile && $run ./try; then
b4eb6b3d
JH
9079 echo "Your vsprintf() returns (int)." >&4
9080 val2="$undef"
9081 else
9082 echo "Your vsprintf() returns (char*)." >&4
9083 val2="$define"
9084 fi
9085else
9086 echo 'vprintf() NOT found.' >&4
9087 val="$undef"
9088 val2="$undef"
9089fi
5440bc8e 9090$rm -f try try.*
b4eb6b3d
JH
9091set d_vprintf
9092eval $setvar
9093val=$val2
9094set d_charvspr
9095eval $setvar
9096
9097: see if chown exists
9098set chown d_chown
9099eval $inlibc
9100
9101: see if chroot exists
9102set chroot d_chroot
9103eval $inlibc
9104
9105: see if chsize exists
9106set chsize d_chsize
9107eval $inlibc
9108
4e0554ec
JH
9109hasstruct='varname=$1; struct=$2; shift; shift;
9110while $test $# -ge 2; do
9111 case "$1" in
9112 $define) echo "#include <$2>";;
9113 esac ;
9114 shift 2;
9115done > try.c;
9116echo "int main () { struct $struct foo; }" >> try.c;
9117set try;
9118if eval $compile; then
9119 val="$define";
9120else
9121 val="$undef";
9122fi;
9123set $varname;
9124eval $setvar;
9125$rm -f try.c try.o'
9126
9127: see if sys/types.h has to be included
9128set sys/types.h i_systypes
9129eval $inhdr
9130
9131hasfield='varname=$1; struct=$2; field=$3; shift; shift; shift;
9132while $test $# -ge 2; do
9133 case "$1" in
9134 $define) echo "#include <$2>";;
9135 esac ;
9136 shift 2;
9137done > try.c;
9138echo "int main () { struct $struct foo; char* bar; bar = (char*)foo.$field; }" >> try.c;
9139set try;
9140if eval $compile; then
9141 val="$define";
9142else
9143 val="$undef";
9144fi;
9145set $varname;
9146eval $setvar;
9147$rm -f try.c try.o'
9148
9149socketlib=''
9150sockethdr=''
9151: see whether socket exists
9152echo " "
9153$echo $n "Hmm... $c" >&4
9154if set socket val -f d_socket; eval $csym; $val; then
9155 echo "Looks like you have Berkeley networking support." >&4
9156 d_socket="$define"
9157 if set setsockopt val -f; eval $csym; $val; then
9158 d_oldsock="$undef"
9159 else
9160 echo "...but it uses the old BSD 4.1c interface, rather than 4.2." >&4
9161 d_oldsock="$define"
9162 fi
9163else
9164 if $contains socklib libc.list >/dev/null 2>&1; then
9165 echo "Looks like you have Berkeley networking support." >&4
9166 d_socket="$define"
9167 : we will have to assume that it supports the 4.2 BSD interface
9168 d_oldsock="$undef"
9169 else
9170 echo "You don't have Berkeley networking in libc$_a..." >&4
9171 if test "X$d_socket" = "X$define"; then
9172 echo "...but you seem to believe that you have sockets." >&4
9173 else
9174 for net in net socket
9175 do
9176 if test -f /usr/lib/lib$net$_a; then
9177 ( ($nm $nm_opt /usr/lib/lib$net$_a | eval $nm_extract) || \
9178 $ar t /usr/lib/lib$net$_a) 2>/dev/null >> libc.list
9179 if $contains socket libc.list >/dev/null 2>&1; then
9180 d_socket="$define"
9181 socketlib="-l$net"
9182 case "$net" in
9183 net)
9184 echo "...but the Wollongong group seems to have hacked it in." >&4
9185 sockethdr="-I/usr/netinclude"
9186 ;;
9187 esac
9188 echo "Found Berkeley sockets interface in lib$net." >& 4
9189 if $contains setsockopt libc.list >/dev/null 2>&1; then
9190 d_oldsock="$undef"
9191 else
9192 echo "...using the old BSD 4.1c interface, rather than 4.2." >&4
9193 d_oldsock="$define"
9194 fi
9195 break
9196 fi
9197 fi
9198 done
9199 if test "X$d_socket" != "X$define"; then
9200 echo "or anywhere else I see." >&4
9201 d_socket="$undef"
9202 d_oldsock="$undef"
9203 fi
9204 fi
9205 fi
9206fi
9207
9208: see if socketpair exists
9209set socketpair d_sockpair
9210eval $inlibc
9211
9212
9213echo " "
9214echo "Checking the availability of certain socket constants..." >& 4
9215for ENUM in MSG_CTRUNC MSG_DONTROUTE MSG_OOB MSG_PEEK MSG_PROXY SCM_RIGHTS; do
9216 enum=`$echo $ENUM|./tr '[A-Z]' '[a-z]'`
9217 $cat >try.c <<EOF
9218#include <sys/types.h>
9219#include <sys/socket.h>
9220int main() {
9221 int i = $ENUM;
9222}
9223EOF
9224 val="$undef"
9225 set try; if eval $compile; then
9226 val="$define"
9227 fi
9228 set d_${enum}; eval $setvar
9229 $rm -f try.c try
9230done
9231
9232: see if this is a sys/uio.h system
9233set sys/uio.h i_sysuio
9234eval $inhdr
9235
9236
9237echo " "
9238echo "Checking to see if your system supports struct cmsghdr..." >&4
9239set d_cmsghdr_s cmsghdr $i_systypes sys/types.h $d_socket sys/socket.h $i_sysuio sys/uio.h
9240eval $hasstruct
9241case "$d_cmsghdr_s" in
9242"$define") echo "Yes, it does." ;;
9243*) echo "No, it doesn't." ;;
9244esac
9245
9246
b4eb6b3d
JH
9247: check for const keyword
9248echo " "
9249echo 'Checking to see if your C compiler knows about "const"...' >&4
9250$cat >const.c <<'EOCP'
9251typedef struct spug { int drokk; } spug;
9252int main()
9253{
9254 const char *foo;
9255 const spug y;
9256}
9257EOCP
9258if $cc -c $ccflags const.c >/dev/null 2>&1 ; then
9259 val="$define"
9260 echo "Yup, it does."
9261else
9262 val="$undef"
9263 echo "Nope, it doesn't."
9264fi
9265set d_const
9266eval $setvar
9267
9268: see if crypt exists
9269echo " "
9270if set crypt val -f d_crypt; eval $csym; $val; then
9271 echo 'crypt() found.' >&4
9272 val="$define"
9273 cryptlib=''
9274else
9275 cryptlib=`./loc Slibcrypt$_a "" $xlibpth`
9276 if $test -z "$cryptlib"; then
9277 cryptlib=`./loc Mlibcrypt$_a "" $xlibpth`
9278 else
9279 cryptlib=-lcrypt
9280 fi
9281 if $test -z "$cryptlib"; then
9282 cryptlib=`./loc Llibcrypt$_a "" $xlibpth`
9283 else
9284 cryptlib=-lcrypt
9285 fi
9286 if $test -z "$cryptlib"; then
9287 cryptlib=`./loc libcrypt$_a "" $libpth`
9288 else
9289 cryptlib=-lcrypt
9290 fi
9291 if $test -z "$cryptlib"; then
9292 echo 'crypt() NOT found.' >&4
9293 val="$undef"
9294 else
9295 val="$define"
9296 fi
9297fi
9298set d_crypt
9299eval $setvar
9300
9301: get csh whereabouts
9302case "$csh" in
9303'csh') val="$undef" ;;
9304*) val="$define" ;;
9305esac
9306set d_csh
9307eval $setvar
9308: Respect a hint or command line value for full_csh.
9309case "$full_csh" in
9310'') full_csh=$csh ;;
9311esac
9312
9313: see if cuserid exists
9314set cuserid d_cuserid
9315eval $inlibc
9316
9317: see if this is a limits.h system
9318set limits.h i_limits
9319eval $inhdr
9320
9321: see if this is a float.h system
9322set float.h i_float
9323eval $inhdr
9324
9325: See if number of significant digits in a double precision number is known
9326echo " "
9327$cat >dbl_dig.c <<EOM
9328#$i_limits I_LIMITS
9329#$i_float I_FLOAT
9330#ifdef I_LIMITS
9331#include <limits.h>
9332#endif
9333#ifdef I_FLOAT
9334#include <float.h>
9335#endif
9336#ifdef DBL_DIG
9337printf("Contains DBL_DIG");
9338#endif
9339EOM
9340$cppstdin $cppflags $cppminus < dbl_dig.c >dbl_dig.E 2>/dev/null
9341if $contains 'DBL_DIG' dbl_dig.E >/dev/null 2>&1; then
9342 echo "DBL_DIG found." >&4
9343 val="$define"
9344else
9345 echo "DBL_DIG NOT found." >&4
9346 val="$undef"
9347fi
9348$rm -f dbl_dig.?
9349set d_dbl_dig
9350eval $setvar
9351
2ef53570
JH
9352hasproto='varname=$1; func=$2; shift; shift;
9353while $test $# -ge 2; do
9354 case "$1" in
9355 $define) echo "#include <$2>";;
9356 esac ;
9357 shift 2;
9358done > try.c;
9359$cppstdin $cppflags $cppminus < try.c > tryout.c 2>/dev/null;
9360if $contains "$func.*(" tryout.c >/dev/null 2>&1; then
9361 echo "$func() prototype found.";
9362 val="$define";
9363else
9364 echo "$func() prototype NOT found.";
9365 val="$undef";
9366fi;
9367set $varname;
9368eval $setvar;
9369$rm -f try.c tryout.c'
9370
9371: see if dbm.h is available
9372: see if dbmclose exists
9373set dbmclose d_dbmclose
9374eval $inlibc
9375
9376case "$d_dbmclose" in
9377$define)
9378 set dbm.h i_dbm
9379 eval $inhdr
9380 case "$i_dbm" in
9381 $define)
9382 val="$undef"
9383 set i_rpcsvcdbm
9384 eval $setvar
9385 ;;
9386 *) set rpcsvc/dbm.h i_rpcsvcdbm
9387 eval $inhdr
9388 ;;
9389 esac
9390 ;;
9391*) echo "We won't be including <dbm.h>"
9392 val="$undef"
9393 set i_dbm
9394 eval $setvar
9395 val="$undef"
9396 set i_rpcsvcdbm
9397 eval $setvar
9398 ;;
9399esac
9400
9401: see if prototype for dbminit is available
9402echo " "
9403set d_dbminitproto dbminit $i_dbm dbm.h
9404eval $hasproto
9405
b4eb6b3d
JH
9406: see if difftime exists
9407set difftime d_difftime
9408eval $inlibc
9409
9410: see if this is a dirent system
9411echo " "
9412if xinc=`./findhdr dirent.h`; $test "$xinc"; then
9413 val="$define"
9414 echo "<dirent.h> found." >&4
9415else
9416 val="$undef"
9417 if xinc=`./findhdr sys/dir.h`; $test "$xinc"; then
9418 echo "<sys/dir.h> found." >&4
9419 echo " "
9420 else
9421 xinc=`./findhdr sys/ndir.h`
9422 fi
9423 echo "<dirent.h> NOT found." >&4
9424fi
9425set i_dirent
9426eval $setvar
9427
9428: Look for type of directory structure.
9429echo " "
9430$cppstdin $cppflags $cppminus < "$xinc" > try.c
9431
9432case "$direntrytype" in
9433''|' ')
9434 case "$i_dirent" in
9435 $define) guess1='struct dirent' ;;
9436 *) guess1='struct direct' ;;
9437 esac
9438 ;;
9439*) guess1="$direntrytype"
9440 ;;
9441esac
9442
9443case "$guess1" in
9444'struct dirent') guess2='struct direct' ;;
9445*) guess2='struct dirent' ;;
9446esac
9447
9448if $contains "$guess1" try.c >/dev/null 2>&1; then
9449 direntrytype="$guess1"
9450 echo "Your directory entries are $direntrytype." >&4
9451elif $contains "$guess2" try.c >/dev/null 2>&1; then
9452 direntrytype="$guess2"
9453 echo "Your directory entries seem to be $direntrytype." >&4
9454else
9455 echo "I don't recognize your system's directory entries." >&4
9456 rp="What type is used for directory entries on this system?"
9457 dflt="$guess1"
9458 . ./myread
9459 direntrytype="$ans"
9460fi
9461$rm -f try.c
9462
9463
9464: see if the directory entry stores field length
9465echo " "
9466$cppstdin $cppflags $cppminus < "$xinc" > try.c
9467if $contains 'd_namlen' try.c >/dev/null 2>&1; then
9468 echo "Good, your directory entry keeps length information in d_namlen." >&4
9469 val="$define"
9470else
9471 echo "Your directory entry does not know about the d_namlen field." >&4
9472 val="$undef"
9473fi
9474set d_dirnamlen
9475eval $setvar
9476$rm -f try.c
9477
9478: see if dlerror exists
9479xxx_runnm="$runnm"
9480runnm=false
9481set dlerror d_dlerror
9482eval $inlibc
9483runnm="$xxx_runnm"
9484
9485: see if dlfcn is available
9486set dlfcn.h i_dlfcn
9487eval $inhdr
9488
9489case "$usedl" in
9490$define|y|true)
9491 $cat << EOM
9492
9493On a few systems, the dynamically loaded modules that perl generates and uses
9494will need a different extension than shared libs. The default will probably
9495be appropriate.
9496
9497EOM
9498 case "$dlext" in
9499 '') dflt="$so" ;;
9500 *) dflt="$dlext" ;;
9501 esac
9502 rp='What is the extension of dynamically loaded modules'
9503 . ./myread
9504 dlext="$ans"
9505 ;;
9506*)
9507 dlext="none"
9508 ;;
9509esac
9510
9511: Check if dlsym need a leading underscore
9512echo " "
9513val="$undef"
9514
9515case "$dlsrc" in
9516dl_dlopen.xs)
9517 echo "Checking whether your dlsym() needs a leading underscore ..." >&4
9518 $cat >dyna.c <<'EOM'
9519fred () { }
9520EOM
9521
9522$cat >fred.c<<EOM
9523
9524#include <stdio.h>
9525#$i_dlfcn I_DLFCN
9526#ifdef I_DLFCN
5440bc8e 9527#include <dlfcn.h> /* the dynamic linker include file for SunOS/Solaris */
b4eb6b3d
JH
9528#else
9529#include <sys/types.h>
9530#include <nlist.h>
9531#include <link.h>
9532#endif
9533
9534extern int fred() ;
9535
9536int main()
9537{
9538 void * handle ;
9539 void * symbol ;
9540#ifndef RTLD_LAZY
9541 int mode = 1 ;
9542#else
9543 int mode = RTLD_LAZY ;
9544#endif
9545 handle = dlopen("./dyna.$dlext", mode) ;
9546 if (handle == NULL) {
9547 printf ("1\n") ;
9548 fflush (stdout) ;
9549 exit(0);
9550 }
9551 symbol = dlsym(handle, "fred") ;
9552 if (symbol == NULL) {
9553 /* try putting a leading underscore */
9554 symbol = dlsym(handle, "_fred") ;
9555 if (symbol == NULL) {
9556 printf ("2\n") ;
9557 fflush (stdout) ;
9558 exit(0);
9559 }
9560 printf ("3\n") ;
9561 }
9562 else
9563 printf ("4\n") ;
9564 fflush (stdout) ;
9565 exit(0);
9566}
9567EOM
9568 : Call the object file tmp-dyna.o in case dlext=o.
9569 if $cc $ccflags $cccdlflags -c dyna.c > /dev/null 2>&1 &&
9570 mv dyna${_o} tmp-dyna${_o} > /dev/null 2>&1 &&
e4778687 9571 $ld -o dyna.$dlext $ldflags $lddlflags tmp-dyna${_o} > /dev/null 2>&1 &&
5440bc8e
JH
9572 $cc -o fred $ccflags $ldflags $cccdlflags $ccdlflags fred.c $libs > /dev/null 2>&1 && $to dyna.$dlext; then
9573 xxx=`$run ./fred`
b4eb6b3d
JH
9574 case $xxx in
9575 1) echo "Test program failed using dlopen." >&4
9576 echo "Perhaps you should not use dynamic loading." >&4;;
9577 2) echo "Test program failed using dlsym." >&4
9578 echo "Perhaps you should not use dynamic loading." >&4;;
9579 3) echo "dlsym needs a leading underscore" >&4
9580 val="$define" ;;
9581 4) echo "dlsym doesn't need a leading underscore." >&4;;
9582 esac
9583 else
9584 echo "I can't compile and run the test program." >&4
9585 echo "I'm guessing that dlsym doesn't need a leading underscore." >&4
9586 fi
9587 ;;
9588esac
9589
9590$rm -f fred fred.? dyna.$dlext dyna.? tmp-dyna.?
9591
9592set d_dlsymun
9593eval $setvar
9594
b4eb6b3d
JH
9595: see if prototype for drand48 is available
9596echo " "
9597set d_drand48proto drand48 $i_stdlib stdlib.h $i_unistd unistd.h
9598eval $hasproto
9599
9600: see if dup2 exists
9601set dup2 d_dup2
9602eval $inlibc
9603
9604: see if eaccess exists
9605set eaccess d_eaccess
9606eval $inlibc
9607
9608: see if endgrent exists
9609set endgrent d_endgrent
9610eval $inlibc
9611
9612: see if endhostent exists
9613set endhostent d_endhent
9614eval $inlibc
9615
9616: see if endnetent exists
9617set endnetent d_endnent
9618eval $inlibc
9619
9620: see if endprotoent exists
9621set endprotoent d_endpent
9622eval $inlibc
9623
9624: see if endpwent exists
9625set endpwent d_endpwent
9626eval $inlibc
9627
9628: see if endservent exists
9629set endservent d_endsent
9630eval $inlibc
9631
9632: Locate the flags for 'open()'
9633echo " "
5440bc8e 9634$cat >try.c <<'EOCP'
b4eb6b3d
JH
9635#include <sys/types.h>
9636#ifdef I_FCNTL
9637#include <fcntl.h>
9638#endif
9639#ifdef I_SYS_FILE
9640#include <sys/file.h>
9641#endif
9642int main() {
9643 if(O_RDONLY);
9644#ifdef O_TRUNC
9645 exit(0);
9646#else
9647 exit(1);
9648#endif
9649}
9650EOCP
9651: check sys/file.h first to get FREAD on Sun
9652if $test `./findhdr sys/file.h` && \
5440bc8e 9653 set try -DI_SYS_FILE && eval $compile; then
b4eb6b3d
JH
9654 h_sysfile=true;
9655 echo "<sys/file.h> defines the O_* constants..." >&4
5440bc8e 9656 if $run ./try; then
b4eb6b3d
JH
9657 echo "and you have the 3 argument form of open()." >&4
9658 val="$define"
9659 else
9660 echo "but not the 3 argument form of open(). Oh, well." >&4
9661 val="$undef"
9662 fi
9663elif $test `./findhdr fcntl.h` && \
5440bc8e 9664 set try -DI_FCNTL && eval $compile; then
b4eb6b3d
JH
9665 h_fcntl=true;
9666 echo "<fcntl.h> defines the O_* constants..." >&4
5440bc8e 9667 if $run ./try; then
b4eb6b3d
JH
9668 echo "and you have the 3 argument form of open()." >&4
9669 val="$define"
9670 else
9671 echo "but not the 3 argument form of open(). Oh, well." >&4
9672 val="$undef"
9673 fi
9674else
9675 val="$undef"
9676 echo "I can't find the O_* constant definitions! You got problems." >&4
9677fi
9678set d_open3
9679eval $setvar
5440bc8e 9680$rm -f try try.*
b4eb6b3d
JH
9681
9682: see which of string.h or strings.h is needed
9683echo " "
9684strings=`./findhdr string.h`
9685if $test "$strings" && $test -r "$strings"; then
9686 echo "Using <string.h> instead of <strings.h>." >&4
9687 val="$define"
9688else
9689 val="$undef"
9690 strings=`./findhdr strings.h`
9691 if $test "$strings" && $test -r "$strings"; then
9692 echo "Using <strings.h> instead of <string.h>." >&4
9693 else
9694 echo "No string header found -- You'll surely have problems." >&4
9695 fi
9696fi
9697set i_string
9698eval $setvar
9699case "$i_string" in
9700"$undef") strings=`./findhdr strings.h`;;
9701*) strings=`./findhdr string.h`;;
9702esac
9703
9704: check for non-blocking I/O stuff
9705case "$h_sysfile" in
a0acbdc3
JH
9706true) echo "#include <sys/file.h>" > head.c;;
9707*)
9708 case "$h_fcntl" in
9709 true) echo "#include <fcntl.h>" > head.c;;
9710 *) echo "#include <sys/fcntl.h>" > head.c;;
9711 esac
9712 ;;
b4eb6b3d
JH
9713esac
9714echo " "
9715echo "Figuring out the flag used by open() for non-blocking I/O..." >&4
9716case "$o_nonblock" in
9717'')
9718 $cat head.c > try.c
9719 $cat >>try.c <<'EOCP'
9720#include <stdio.h>
80b3ef99 9721#include <stdlib.h>
b4eb6b3d
JH
9722int main() {
9723#ifdef O_NONBLOCK
9724 printf("O_NONBLOCK\n");
9725 exit(0);
9726#endif
9727#ifdef O_NDELAY
9728 printf("O_NDELAY\n");
9729 exit(0);
9730#endif
9731#ifdef FNDELAY
9732 printf("FNDELAY\n");
9733 exit(0);
9734#endif
9735 exit(0);
9736}
9737EOCP
9738 set try
9739 if eval $compile_ok; then
5440bc8e 9740 o_nonblock=`$run ./try`
b4eb6b3d
JH
9741 case "$o_nonblock" in
9742 '') echo "I can't figure it out, assuming O_NONBLOCK will do.";;
9743 *) echo "Seems like we can use $o_nonblock.";;
9744 esac
9745 else
9746 echo "(I can't compile the test program; pray O_NONBLOCK is right!)"
9747 fi
9748 ;;
9749*) echo "Using $hint value $o_nonblock.";;
9750esac
9751$rm -f try try.* .out core
9752
9753echo " "
9754echo "Let's see what value errno gets from read() on a $o_nonblock file..." >&4
9755case "$eagain" in
9756'')
9757 $cat head.c > try.c
9758 $cat >>try.c <<EOCP
9759#include <errno.h>
9760#include <sys/types.h>
9761#include <signal.h>
9762#include <stdio.h>
80b3ef99 9763#include <stdlib.h>
b4eb6b3d
JH
9764#define MY_O_NONBLOCK $o_nonblock
9765#ifndef errno /* XXX need better Configure test */
9766extern int errno;
9767#endif
9768#$i_unistd I_UNISTD
9769#ifdef I_UNISTD
9770#include <unistd.h>
9771#endif
9772#$i_string I_STRING
9773#ifdef I_STRING
9774#include <string.h>
9775#else
9776#include <strings.h>
9777#endif
9778$signal_t blech(x) int x; { exit(3); }
9779EOCP
9780 $cat >> try.c <<'EOCP'
9781int main()
9782{
9783 int pd[2];
9784 int pu[2];
9785 char buf[1];
9786 char string[100];
9787
9788 pipe(pd); /* Down: child -> parent */
9789 pipe(pu); /* Up: parent -> child */
9790 if (0 != fork()) {
9791 int ret;
9792 close(pd[1]); /* Parent reads from pd[0] */
9793 close(pu[0]); /* Parent writes (blocking) to pu[1] */
a0acbdc3 9794#ifdef F_SETFL
b4eb6b3d
JH
9795 if (-1 == fcntl(pd[0], F_SETFL, MY_O_NONBLOCK))
9796 exit(1);
a0acbdc3
JH
9797#else
9798 exit(4);
9799#endif
b4eb6b3d
JH
9800 signal(SIGALRM, blech);
9801 alarm(5);
9802 if ((ret = read(pd[0], buf, 1)) > 0) /* Nothing to read! */
9803 exit(2);
9804 sprintf(string, "%d\n", ret);
9805 write(2, string, strlen(string));
9806 alarm(0);
9807#ifdef EAGAIN
9808 if (errno == EAGAIN) {
9809 printf("EAGAIN\n");
9810 goto ok;
9811 }
9812#endif
9813#ifdef EWOULDBLOCK
9814 if (errno == EWOULDBLOCK)
9815 printf("EWOULDBLOCK\n");
9816#endif
9817 ok:
9818 write(pu[1], buf, 1); /* Unblocks child, tell it to close our pipe */
9819 sleep(2); /* Give it time to close our pipe */
9820 alarm(5);
9821 ret = read(pd[0], buf, 1); /* Should read EOF */
9822 alarm(0);
9823 sprintf(string, "%d\n", ret);
9824 write(3, string, strlen(string));
9825 exit(0);
9826 }
9827
9828 close(pd[0]); /* We write to pd[1] */
9829 close(pu[1]); /* We read from pu[0] */
9830 read(pu[0], buf, 1); /* Wait for parent to signal us we may continue */
9831 close(pd[1]); /* Pipe pd is now fully closed! */
9832 exit(0); /* Bye bye, thank you for playing! */
9833}
9834EOCP
9835 set try
9836 if eval $compile_ok; then
9837 echo "$startsh" >mtry
5440bc8e 9838 echo "$run ./try >try.out 2>try.ret 3>try.err || exit 4" >>mtry
b4eb6b3d
JH
9839 chmod +x mtry
9840 ./mtry >/dev/null 2>&1
9841 case $? in
9842 0) eagain=`$cat try.out`;;
9843 1) echo "Could not perform non-blocking setting!";;
9844 2) echo "I did a successful read() for something that was not there!";;
9845 3) echo "Hmm... non-blocking I/O does not seem to be working!";;
a0acbdc3 9846 4) echo "Could not find F_SETFL!";;
b4eb6b3d
JH
9847 *) echo "Something terribly wrong happened during testing.";;
9848 esac
9849 rd_nodata=`$cat try.ret`
9850 echo "A read() system call with no data present returns $rd_nodata."
9851 case "$rd_nodata" in
9852 0|-1) ;;
9853 *)
9854 echo "(That's peculiar, fixing that to be -1.)"
9855 rd_nodata=-1
9856 ;;
9857 esac
9858 case "$eagain" in
9859 '')
9860 echo "Forcing errno EAGAIN on read() with no data available."
9861 eagain=EAGAIN
9862 ;;
9863 *)
9864 echo "Your read() sets errno to $eagain when no data is available."
9865 ;;
9866 esac
9867 status=`$cat try.err`
9868 case "$status" in
9869 0) echo "And it correctly returns 0 to signal EOF.";;
9870 -1) echo "But it also returns -1 to signal EOF, so be careful!";;
9871 *) echo "However, your read() returns '$status' on EOF??";;
9872 esac
9873 val="$define"
9874 if test "$status" = "$rd_nodata"; then
9875 echo "WARNING: you can't distinguish between EOF and no data!"
9876 val="$undef"
9877 fi
9878 else
9879 echo "I can't compile the test program--assuming errno EAGAIN will do."
9880 eagain=EAGAIN
9881 fi
9882 set d_eofnblk
9883 eval $setvar
9884 ;;
9885*)
9886 echo "Using $hint value $eagain."
9887 echo "Your read() returns $rd_nodata when no data is present."
9888 case "$d_eofnblk" in
9889 "$define") echo "And you can see EOF because read() returns 0.";;
9890 "$undef") echo "But you can't see EOF status from read() returned value.";;
9891 *)
9892 echo "(Assuming you can't see EOF status from read anyway.)"
9893 d_eofnblk=$undef
9894 ;;
9895 esac
9896 ;;
9897esac
9898$rm -f try try.* .out core head.c mtry
9899
b363b713
JH
9900: see if fchdir exists
9901set fchdir d_fchdir
9902eval $inlibc
9903
b4eb6b3d
JH
9904: see if fchmod exists
9905set fchmod d_fchmod
9906eval $inlibc
9907
9908: see if fchown exists
9909set fchown d_fchown
9910eval $inlibc
9911
9912: see if this is an fcntl system
9913set fcntl d_fcntl
9914eval $inlibc
9915
9d9004a9
AD
9916echo " "
9917: See if fcntl-based locking works.
832492ee 9918$cat >try.c <<EOCP
9d9004a9
AD
9919#include <stdlib.h>
9920#include <unistd.h>
9921#include <fcntl.h>
832492ee 9922#include <signal.h>
832492ee 9923$signal_t blech(x) int x; { exit(3); }
9d9004a9
AD
9924int main() {
9925#if defined(F_SETLK) && defined(F_SETLKW)
9926 struct flock flock;
9927 int retval, fd;
9928 fd = open("try.c", O_RDONLY);
9929 flock.l_type = F_RDLCK;
9930 flock.l_whence = SEEK_SET;
9931 flock.l_start = flock.l_len = 0;
832492ee
JH
9932 signal(SIGALRM, blech);
9933 alarm(10);
9d9004a9
AD
9934 retval = fcntl(fd, F_SETLK, &flock);
9935 close(fd);
9936 (retval < 0 ? exit(2) : exit(0));
9937#else
9938 exit(2);
9939#endif
9940}
9941EOCP
9942echo "Checking if fcntl-based file locking works... "
9943case "$d_fcntl" in
9944"$define")
9945 set try
9946 if eval $compile_ok; then
5440bc8e 9947 if $run ./try; then
9d9004a9
AD
9948 echo "Yes, it seems to work."
9949 val="$define"
9950 else
9951 echo "Nope, it didn't work."
9952 val="$undef"
832492ee
JH
9953 case "$?" in
9954 3) $cat >&4 <<EOM
9955***
9956*** I had to forcibly timeout from fcntl(..., F_SETLK, ...).
9957*** This is (almost) impossible.
9958*** If your NFS lock daemons are not feeling well, something like
9959*** this may happen, please investigate. Cannot continue, aborting.
9960***
9961EOM
9962 exit 1
9963 ;;
9964 esac
9d9004a9
AD
9965 fi
9966 else
9967 echo "I'm unable to compile the test program, so I'll assume not."
9968 val="$undef"
9969 fi
9970 ;;
9971*) val="$undef";
9972 echo "Nope, since you don't even have fcntl()."
9973 ;;
9974esac
9975set d_fcntl_can_lock
9976eval $setvar
9977$rm -f try*
9978
9979
b4eb6b3d
JH
9980: see if sys/select.h has to be included
9981set sys/select.h i_sysselct
9982eval $inhdr
9983
9984: see if we should include time.h, sys/time.h, or both
9985echo " "
9986if test "X$timeincl" = X; then
9987 echo "Testing to see if we should include <time.h>, <sys/time.h> or both." >&4
9988 $echo $n "I'm now running the test program...$c"
9989 $cat >try.c <<'EOCP'
9990#include <sys/types.h>
9991#ifdef I_TIME
9992#include <time.h>
9993#endif
9994#ifdef I_SYSTIME
9995#ifdef SYSTIMEKERNEL
9996#define KERNEL
9997#endif
9998#include <sys/time.h>
9999#endif
10000#ifdef I_SYSSELECT
10001#include <sys/select.h>
10002#endif
10003int main()
10004{
10005 struct tm foo;
10006#ifdef S_TIMEVAL
10007 struct timeval bar;
10008#endif
10009#ifdef S_TIMEZONE
10010 struct timezone tzp;
10011#endif
10012 if (foo.tm_sec == foo.tm_sec)
10013 exit(0);
10014#ifdef S_TIMEVAL
10015 if (bar.tv_sec == bar.tv_sec)
10016 exit(0);
10017#endif
10018 exit(1);
10019}
10020EOCP
10021 flags=''
10022 for s_timezone in '-DS_TIMEZONE' ''; do
10023 sysselect=''
10024 for s_timeval in '-DS_TIMEVAL' ''; do
10025 for i_systimek in '' '-DSYSTIMEKERNEL'; do
10026 for i_time in '' '-DI_TIME'; do
10027 for i_systime in '-DI_SYSTIME' ''; do
10028 case "$flags" in
10029 '') $echo $n ".$c"
10030 set try $i_time $i_systime $i_systimek $sysselect $s_timeval $s_timezone
10031 if eval $compile; then
10032 set X $i_time $i_systime $i_systimek $sysselect $s_timeval
10033 shift
10034 flags="$*"
10035 echo " "
10036 $echo $n "Succeeded with $flags$c"
10037 fi
10038 ;;
10039 esac
10040 done
10041 done
10042 done
10043 done
10044 done
10045 timeincl=''
10046 echo " "
10047 case "$flags" in
10048 *SYSTIMEKERNEL*) i_systimek="$define"
10049 timeincl=`./findhdr sys/time.h`
10050 echo "We'll include <sys/time.h> with KERNEL defined." >&4;;
10051 *) i_systimek="$undef";;
10052 esac
10053 case "$flags" in
10054 *I_TIME*) i_time="$define"
10055 timeincl=`./findhdr time.h`" $timeincl"
10056 echo "We'll include <time.h>." >&4;;
10057 *) i_time="$undef";;
10058 esac
10059 case "$flags" in
10060 *I_SYSTIME*) i_systime="$define"
10061 timeincl=`./findhdr sys/time.h`" $timeincl"
10062 echo "We'll include <sys/time.h>." >&4;;
10063 *) i_systime="$undef";;
10064 esac
10065 $rm -f try.c try
10066fi
10067
10068: check for fd_set items
10069$cat <<EOM
10070
10071Checking to see how well your C compiler handles fd_set and friends ...
10072EOM
5440bc8e 10073$cat >try.c <<EOCP
b4eb6b3d
JH
10074#$i_systime I_SYS_TIME
10075#$i_sysselct I_SYS_SELECT
10076#$d_socket HAS_SOCKET
10077#include <sys/types.h>
10078#ifdef HAS_SOCKET
10079#include <sys/socket.h> /* Might include <sys/bsdtypes.h> */
10080#endif
10081#ifdef I_SYS_TIME
10082#include <sys/time.h>
10083#endif
10084#ifdef I_SYS_SELECT
10085#include <sys/select.h>
10086#endif
10087int main() {
10088 fd_set fds;
10089
10090#ifdef TRYBITS
10091 if(fds.fds_bits);
10092#endif
10093
10094#if defined(FD_SET) && defined(FD_CLR) && defined(FD_ISSET) && defined(FD_ZERO)
10095 exit(0);
10096#else
10097 exit(1);
10098#endif
10099}
10100EOCP
5440bc8e 10101set try -DTRYBITS
b4eb6b3d
JH
10102if eval $compile; then
10103 d_fds_bits="$define"
10104 d_fd_set="$define"
10105 echo "Well, your system knows about the normal fd_set typedef..." >&4
5440bc8e 10106 if $run ./try; then
b4eb6b3d
JH
10107 echo "and you have the normal fd_set macros (just as I'd expect)." >&4
10108 d_fd_macros="$define"
10109 else
10110 $cat >&4 <<'EOM'
10111but not the normal fd_set macros! Gaaack! I'll have to cover for you.
10112EOM
10113 d_fd_macros="$undef"
10114 fi
10115else
10116 $cat <<'EOM'
10117Hmm, your compiler has some difficulty with fd_set. Checking further...
10118EOM
5440bc8e 10119 set try
b4eb6b3d
JH
10120 if eval $compile; then
10121 d_fds_bits="$undef"
10122 d_fd_set="$define"
10123 echo "Well, your system has some sort of fd_set available..." >&4
5440bc8e 10124 if $run ./try; then
b4eb6b3d
JH
10125 echo "and you have the normal fd_set macros." >&4
10126 d_fd_macros="$define"
10127 else
10128 $cat <<'EOM'
10129but not the normal fd_set macros! Gross! More work for me...
10130EOM
10131 d_fd_macros="$undef"
10132 fi
10133 else
10134 echo "Well, you got zip. That's OK, I can roll my own fd_set stuff." >&4
10135 d_fd_set="$undef"
10136 d_fds_bits="$undef"
10137 d_fd_macros="$undef"
10138 fi
10139fi
5440bc8e 10140$rm -f try try.*
b4eb6b3d
JH
10141
10142: see if fgetpos exists
10143set fgetpos d_fgetpos
10144eval $inlibc
10145
10146: see if flock exists
10147set flock d_flock
10148eval $inlibc
10149
2ef53570
JH
10150: see if this is a sys/file.h system
10151val=''
10152set sys/file.h val
10153eval $inhdr
10154
10155: do we need to include sys/file.h ?
10156case "$val" in
10157"$define")
10158 echo " "
10159 if $h_sysfile; then
10160 val="$define"
10161 echo "We'll be including <sys/file.h>." >&4
10162 else
10163 val="$undef"
10164 echo "We won't be including <sys/file.h>." >&4
10165 fi
10166 ;;
10167*)
10168 h_sysfile=false
10169 ;;
10170esac
10171set i_sysfile
10172eval $setvar
10173
10174: see if prototype for flock is available
10175echo " "
10176set d_flockproto flock $i_sysfile sys/file.h
10177eval $hasproto
10178
b4eb6b3d
JH
10179: see if fork exists
10180set fork d_fork
10181eval $inlibc
10182
10183: see if pathconf exists
10184set pathconf d_pathconf
10185eval $inlibc
10186
10187: see if fpathconf exists
10188set fpathconf d_fpathconf
10189eval $inlibc
10190
10191
10192: check for fpos64_t
10193echo " "
10194echo "Checking to see if you have fpos64_t..." >&4
10195$cat >try.c <<EOCP
10196#include <stdio.h>
10197int main() { fpos64_t x = 7; }
10198EOCP
10199set try
10200if eval $compile; then
10201 val="$define"
10202 echo "You have fpos64_t."
10203else
10204 val="$undef"
10205 echo "You do not have fpos64_t."
10206 case "$fpossize" in
10207 8) echo "(Your fpos_t is 64 bits, so you could use that.)" ;;
10208 esac
10209fi
10210$rm -f try.* try
10211set d_fpos64_t
10212eval $setvar
10213
10214: see if frexpl exists
10215set frexpl d_frexpl
10216eval $inlibc
10217
b4eb6b3d
JH
10218: see if this is a sys/param system
10219set sys/param.h i_sysparam
10220eval $inhdr
10221
10222: see if this is a sys/mount.h system
10223set sys/mount.h i_sysmount
10224eval $inhdr
10225
b4eb6b3d
JH
10226
10227echo " "
10228echo "Checking to see if your system supports struct fs_data..." >&4
10229set d_fs_data_s fs_data $i_systypes sys/types.h $i_sysparam sys/param.h $i_sysmount sys/mount.h
10230eval $hasstruct
10231case "$d_fs_data_s" in
10232"$define") echo "Yes, it does." ;;
10233*) echo "No, it doesn't." ;;
10234esac
10235
10236: see if fseeko exists
10237set fseeko d_fseeko
10238eval $inlibc
10239case "$longsize" in
102408) echo "(Your long is 64 bits, so you could use fseek.)" ;;
10241esac
10242
10243: see if fsetpos exists
10244set fsetpos d_fsetpos
10245eval $inlibc
10246
10247
10248: see if fstatfs exists
10249set fstatfs d_fstatfs
10250eval $inlibc
10251
10252
10253: see if statvfs exists
10254set statvfs d_statvfs
10255eval $inlibc
10256
10257: see if fstatvfs exists
10258set fstatvfs d_fstatvfs
10259eval $inlibc
10260
10261
411ab01c
JH
10262: see if fsync exists
10263set fsync d_fsync
10264eval $inlibc
10265
b4eb6b3d
JH
10266: see if ftello exists
10267set ftello d_ftello
10268eval $inlibc
10269case "$longsize" in
102708) echo "(Your long is 64 bits, so you could use ftell.)" ;;
10271esac
10272
10273: see if getcwd exists
10274set getcwd d_getcwd
10275eval $inlibc
10276
10277: see if getespwnam exists
10278set getespwnam d_getespwnam
10279eval $inlibc
10280
10281
10282: see if getfsstat exists
10283set getfsstat d_getfsstat
10284eval $inlibc
10285
10286: see if getgrent exists
10287set getgrent d_getgrent
10288eval $inlibc
10289
10290: see if gethostbyaddr exists
10291set gethostbyaddr d_gethbyaddr
10292eval $inlibc
10293
10294: see if gethostbyname exists
10295set gethostbyname d_gethbyname
10296eval $inlibc
10297
10298: see if gethostent exists
10299set gethostent d_gethent
10300eval $inlibc
10301
10302: see how we will look up host name
10303echo " "
10304call=''
10305if set gethostname val -f d_gethname; eval $csym; $val; then
10306 echo 'gethostname() found.' >&4
10307 d_gethname="$define"
10308 call=gethostname
10309fi
10310if set uname val -f d_uname; eval $csym; $val; then
10311 if ./xenix; then
10312 $cat <<'EOM'
10313uname() was found, but you're running xenix, and older versions of xenix
10314have a broken uname(). If you don't really know whether your xenix is old
10315enough to have a broken system call, use the default answer.
10316
10317EOM
10318 dflt=y
10319 case "$d_uname" in
10320 "$define") dflt=n;;
10321 esac
10322 rp='Is your uname() broken?'
10323 . ./myread
10324 case "$ans" in
10325 n*) d_uname="$define"; call=uname;;
10326 esac
10327 else
10328 echo 'uname() found.' >&4
10329 d_uname="$define"
10330 case "$call" in
10331 '') call=uname ;;
10332 esac
10333 fi
10334fi
10335case "$d_gethname" in
10336'') d_gethname="$undef";;
10337esac
10338case "$d_uname" in
10339'') d_uname="$undef";;
10340esac
10341case "$d_uname$d_gethname" in
10342*define*)
10343 dflt=n
10344 cat <<EOM
10345
10346Every now and then someone has a $call() that lies about the hostname
10347but can't be fixed for political or economic reasons. If you wish, I can
10348pretend $call() isn't there and maybe compute hostname at run-time
10349thanks to the '$phostname' command.
10350
10351EOM
10352 rp="Shall I ignore $call() from now on?"
10353 . ./myread
10354 case "$ans" in
10355 y*) d_uname="$undef" d_gethname="$undef"; $echo $n "Okay...$c";;
10356 esac;;
10357esac
10358case "$phostname" in
10359'') aphostname='';;
10360*) case "$aphostname" in
10361 /*) ;;
10362 *) set X $phostname
10363 shift
10364 file=$1
10365 shift
10366 file=`./loc $file $file $pth`
10367 aphostname=`echo $file $*`
10368 ;;
10369 esac
10370 ;;
10371esac
10372case "$d_uname$d_gethname" in
10373*define*) ;;
10374*)
10375 case "$phostname" in
10376 '')
10377 echo "There will be no way for $package to get your hostname." >&4;;
10378 *)
10379 echo "I'll use 'popen("'"'$aphostname'", "r")'"' to get your hostname." >&4
10380 ;;
10381 esac;;
10382esac
10383case "$d_phostname" in
10384'') d_phostname="$undef";;
10385esac
10386
10387: see if this is a netdb.h system
10388set netdb.h i_netdb
10389eval $inhdr
10390
10391: see if prototypes for various gethostxxx netdb.h functions are available
10392echo " "
10393set d_gethostprotos gethostent $i_netdb netdb.h
10394eval $hasproto
10395
4e0554ec
JH
10396: see if getitimer exists
10397set getitimer d_getitimer
10398eval $inlibc
10399
b4eb6b3d
JH
10400: see if getlogin exists
10401set getlogin d_getlogin
10402eval $inlibc
10403
10404: see if getmnt exists
10405set getmnt d_getmnt
10406eval $inlibc
10407
10408: see if getmntent exists
10409set getmntent d_getmntent
10410eval $inlibc
10411
10412: see if getnetbyaddr exists
10413set getnetbyaddr d_getnbyaddr
10414eval $inlibc
10415
10416: see if getnetbyname exists
10417set getnetbyname d_getnbyname
10418eval $inlibc
10419
10420: see if getnetent exists
10421set getnetent d_getnent
10422eval $inlibc
10423
10424: see if prototypes for various getnetxxx netdb.h functions are available
10425echo " "
10426set d_getnetprotos getnetent $i_netdb netdb.h
10427eval $hasproto
10428
0c0643d0
JH
10429: see if getpagesize exists
10430set getpagesize d_getpagsz
10431eval $inlibc
10432
b4eb6b3d
JH
10433
10434: see if getprotobyname exists
10435set getprotobyname d_getpbyname
10436eval $inlibc
10437
10438: see if getprotobynumber exists
10439set getprotobynumber d_getpbynumber
10440eval $inlibc
10441
10442: see if getprotoent exists
10443set getprotoent d_getpent
10444eval $inlibc
10445
10446: see if getpgid exists
10447set getpgid d_getpgid
10448eval $inlibc
10449
10450: see if getpgrp2 exists
10451set getpgrp2 d_getpgrp2
10452eval $inlibc
10453
10454: see if getppid exists
10455set getppid d_getppid
10456eval $inlibc
10457
10458: see if getpriority exists
10459set getpriority d_getprior
10460eval $inlibc
10461
10462: see if prototypes for various getprotoxxx netdb.h functions are available
10463echo " "
10464set d_getprotoprotos getprotoent $i_netdb netdb.h
10465eval $hasproto
10466
10467: see if getprpwnam exists
10468set getprpwnam d_getprpwnam
10469eval $inlibc
10470
10471: see if getpwent exists
10472set getpwent d_getpwent
10473eval $inlibc
10474
10475
10476: see if getservbyname exists
10477set getservbyname d_getsbyname
10478eval $inlibc
10479
10480: see if getservbyport exists
10481set getservbyport d_getsbyport
10482eval $inlibc
10483
10484: see if getservent exists
10485set getservent d_getsent
10486eval $inlibc
10487
10488: see if prototypes for various getservxxx netdb.h functions are available
10489echo " "
10490set d_getservprotos getservent $i_netdb netdb.h
10491eval $hasproto
10492
10493: see if getspnam exists
10494set getspnam d_getspnam
10495eval $inlibc
10496
10497: see if gettimeofday or ftime exists
10498set gettimeofday d_gettimeod
10499eval $inlibc
10500case "$d_gettimeod" in
10501"$undef")
10502 set ftime d_ftime
10503 eval $inlibc
10504 ;;
10505*)
10506 val="$undef"; set d_ftime; eval $setvar
10507 ;;
10508esac
10509case "$d_gettimeod$d_ftime" in
10510"$undef$undef")
10511 echo " "
10512 echo 'No ftime() nor gettimeofday() -- timing may be less accurate.' >&4
10513 ;;
10514esac
10515
10516: see if this is an grp system
10517set grp.h i_grp
10518eval $inhdr
10519
10520case "$i_grp" in
10521$define)
10522 xxx=`./findhdr grp.h`
10523 $cppstdin $cppflags $cppminus < $xxx >$$.h
10524
10525 if $contains 'gr_passwd' $$.h >/dev/null 2>&1; then
10526 val="$define"
10527 else
10528 val="$undef"
10529 fi
10530 set d_grpasswd
10531 eval $setvar
10532
10533 $rm -f $$.h
10534 ;;
10535*)
10536 val="$undef";
10537 set d_grpasswd; eval $setvar
10538 ;;
10539esac
10540
10541: see if hasmntopt exists
10542set hasmntopt d_hasmntopt
10543eval $inlibc
10544
10545: see if this is a netinet/in.h or sys/in.h system
10546set netinet/in.h i_niin sys/in.h i_sysin
10547eval $inhdr
10548
10549: see if arpa/inet.h has to be included
10550set arpa/inet.h i_arpainet
10551eval $inhdr
10552
10553: see if htonl --and friends-- exists
10554val=''
10555set htonl val
10556eval $inlibc
10557
10558: Maybe they are macros.
10559case "$val" in
10560$undef)
10561 $cat >htonl.c <<EOM
10562#include <stdio.h>
10563#include <sys/types.h>
10564#$i_niin I_NETINET_IN
10565#$i_sysin I_SYS_IN
10566#$i_arpainet I_ARPA_INET
10567#ifdef I_NETINET_IN
10568#include <netinet/in.h>
10569#endif
10570#ifdef I_SYS_IN
10571#include <sys/in.h>
10572#endif
10573#ifdef I_ARPA_INET
10574#include <arpa/inet.h>
10575#endif
10576#ifdef htonl
10577printf("Defined as a macro.");
10578#endif
10579EOM
10580 $cppstdin $cppflags $cppminus < htonl.c >htonl.E 2>/dev/null
10581 if $contains 'Defined as a macro' htonl.E >/dev/null 2>&1; then
10582 val="$define"
10583 echo "But it seems to be defined as a macro." >&4
10584 fi
10585 $rm -f htonl.?
10586 ;;
10587esac
10588set d_htonl
10589eval $setvar
10590
10591: see if iconv exists
10592set iconv d_iconv
10593eval $inlibc
10594
10595: index or strchr
10596echo " "
10597if set index val -f; eval $csym; $val; then
10598 if set strchr val -f d_strchr; eval $csym; $val; then
10599 if $contains strchr "$strings" >/dev/null 2>&1 ; then
10600 val="$define"
10601 vali="$undef"
10602 echo "strchr() found." >&4
10603 else
10604 val="$undef"
10605 vali="$define"
10606 echo "index() found." >&4
10607 fi
10608 else
10609 val="$undef"
10610 vali="$define"
8dfa8df9
JH
10611 echo "index() found." >&4
10612 fi
b4eb6b3d 10613else
8dfa8df9
JH
10614 if set strchr val -f d_strchr; eval $csym; $val; then
10615 val="$define"
10616 vali="$undef"
10617 echo "strchr() found." >&4
10618 else
10619 echo "No index() or strchr() found!" >&4
10620 val="$undef"
10621 vali="$undef"
10622 fi
b4eb6b3d 10623fi
8dfa8df9
JH
10624set d_strchr; eval $setvar
10625val="$vali"
10626set d_index; eval $setvar
10627
10628: check whether inet_aton exists
10629set inet_aton d_inetaton
10630eval $inlibc
b4eb6b3d
JH
10631
10632: Look for isascii
10633echo " "
10634$cat >isascii.c <<'EOCP'
10635#include <stdio.h>
10636#include <ctype.h>
10637int main() {
10638 int c = 'A';
10639 if (isascii(c))
10640 exit(0);
10641 else
10642 exit(1);
10643}
10644EOCP
10645set isascii
10646if eval $compile; then
10647 echo "isascii() found." >&4
10648 val="$define"
10649else
10650 echo "isascii() NOT found." >&4
10651 val="$undef"
10652fi
10653set d_isascii
10654eval $setvar
10655$rm -f isascii*
10656
10657: see if isnan exists
10658set isnan d_isnan
10659eval $inlibc
10660
10661: see if isnanl exists
10662set isnanl d_isnanl
10663eval $inlibc
10664
10665: see if killpg exists
10666set killpg d_killpg
10667eval $inlibc
10668
10669: see if lchown exists
10670echo " "
10671$cat > try.c <<'EOCP'
10672/* System header to define __stub macros and hopefully few prototypes,
10673 which can conflict with char lchown(); below. */
10674#include <assert.h>
10675/* Override any gcc2 internal prototype to avoid an error. */
10676/* We use char because int might match the return type of a gcc2
10677 builtin and then its argument prototype would still apply. */
10678char lchown();
10679int main() {
10680 /* The GNU C library defines this for functions which it implements
10681 to always fail with ENOSYS. Some functions are actually named
10682 something starting with __ and the normal name is an alias. */
10683#if defined (__stub_lchown) || defined (__stub___lchown)
10684choke me
10685#else
10686lchown();
10687#endif
10688; return 0; }
10689EOCP
10690set try
10691if eval $compile; then
10692 $echo "lchown() found." >&4
10693 val="$define"
10694else
10695 $echo "lchown() NOT found." >&4
10696 val="$undef"
10697fi
10698set d_lchown
10699eval $setvar
10700
10701: See if number of significant digits in a double precision number is known
10702echo " "
10703$cat >ldbl_dig.c <<EOM
10704#$i_limits I_LIMITS
10705#$i_float I_FLOAT
10706#ifdef I_LIMITS
10707#include <limits.h>
10708#endif
10709#ifdef I_FLOAT
10710#include <float.h>
10711#endif
10712#ifdef LDBL_DIG
10713printf("Contains LDBL_DIG");
10714#endif
10715EOM
10716$cppstdin $cppflags $cppminus < ldbl_dig.c >ldbl_dig.E 2>/dev/null
10717if $contains 'LDBL_DIG' ldbl_dig.E >/dev/null 2>&1; then
10718 echo "LDBL_DIG found." >&4
10719 val="$define"
10720else
10721 echo "LDBL_DIG NOT found." >&4
10722 val="$undef"
10723fi
10724$rm -f ldbl_dig.?
10725set d_ldbl_dig
10726eval $setvar
10727
10728: see if link exists
10729set link d_link
10730eval $inlibc
10731
10732: see if localeconv exists
10733set localeconv d_locconv
10734eval $inlibc
10735
10736: see if lockf exists
10737set lockf d_lockf
10738eval $inlibc
10739
b4eb6b3d
JH
10740: see if prototype for lseek is available
10741echo " "
10742set d_lseekproto lseek $i_systypes sys/types.h $i_unistd unistd.h
10743eval $hasproto
10744
10745: see if lstat exists
10746set lstat d_lstat
10747eval $inlibc
10748
10749: see if madvise exists
10750set madvise d_madvise
10751eval $inlibc
10752
10753: see if mblen exists
10754set mblen d_mblen
10755eval $inlibc
10756
10757: see if mbstowcs exists
10758set mbstowcs d_mbstowcs
10759eval $inlibc
10760
10761: see if mbtowc exists
10762set mbtowc d_mbtowc
10763eval $inlibc
10764
10765: see if memchr exists
10766set memchr d_memchr
10767eval $inlibc
10768
10769: see if memcmp exists
10770set memcmp d_memcmp
10771eval $inlibc
10772
10773: see if memcpy exists
10774set memcpy d_memcpy
10775eval $inlibc
10776
10777: see if memmove exists
10778set memmove d_memmove
10779eval $inlibc
10780
10781: see if memset exists
10782set memset d_memset
10783eval $inlibc
10784
10785: see if mkdir exists
10786set mkdir d_mkdir
10787eval $inlibc
10788
10789: see if mkdtemp exists
10790set mkdtemp d_mkdtemp
10791eval $inlibc
10792
10793: see if mkfifo exists
10794set mkfifo d_mkfifo
10795eval $inlibc
10796
10797: see if mkstemp exists
10798set mkstemp d_mkstemp
10799eval $inlibc
10800
10801: see if mkstemps exists
10802set mkstemps d_mkstemps
10803eval $inlibc
10804
10805: see if mktime exists
10806set mktime d_mktime
10807eval $inlibc
10808
10809: see if this is a sys/mman.h system
10810set sys/mman.h i_sysmman
10811eval $inhdr
10812
10813: see if mmap exists
10814set mmap d_mmap
10815eval $inlibc
10816: see what shmat returns
10817: default to something harmless
10818mmaptype='void *'
10819case "$i_sysmman$d_mmap" in
10820"$define$define")
10821 $cat >mmap.c <<'END'
10822#include <sys/mman.h>
10823void *mmap();
10824END
10825 if $cc $ccflags -c mmap.c >/dev/null 2>&1; then
10826 mmaptype='void *'
10827 else
10828 mmaptype='caddr_t'
10829 fi
10830 echo "and it returns ($mmaptype)." >&4
10831 ;;
10832esac
10833
10834
10835
10836: see if modfl exists
10837set modfl d_modfl
10838eval $inlibc
10839
e67aeab1
JH
10840d_modfl_pow32_bug="$undef"
10841
2b2cdb4d
HS
10842case "$d_longdbl$d_modfl" in
10843$define$define)
10844 $cat <<EOM
10845Checking to see whether your modfl() is okay for large values...
10846EOM
10847$cat >try.c <<EOCP
10848#include <math.h>
10849#include <stdio.h>
10850int main() {
10851 long double nv = 4294967303.15;
10852 long double v, w;
10853 v = modfl(nv, &w);
10854#ifdef __GLIBC__
10855 printf("glibc");
10856#endif
10857 printf(" %"$sPRIfldbl" %"$sPRIfldbl" %"$sPRIfldbl"\n", nv, v, w);
10858 return 0;
10859}
10860EOCP
27f9615e
JH
10861 case "$osname:$gccversion" in
10862 aix:) saveccflags="$ccflags"
10863 ccflags="$ccflags -qlongdouble" ;; # to avoid core dump
10864 esac
2b2cdb4d
HS
10865 set try
10866 if eval $compile; then
5440bc8e 10867 foo=`$run ./try`
2b2cdb4d
HS
10868 case "$foo" in
10869 *" 4294967303.150000 1.150000 4294967302.000000")
10870 echo >&4 "Your modfl() is broken for large values."
e67aeab1 10871 d_modfl_pow32_bug="$define"
2b2cdb4d
HS
10872 case "$foo" in
10873 glibc) echo >&4 "You should upgrade your glibc to at least 2.2.2 to get a fixed modfl()."
10874 ;;
10875 esac
10876 ;;
10877 *" 4294967303.150000 0.150000 4294967303.000000")
10878 echo >&4 "Your modfl() seems okay for large values."
10879 ;;
10880 *) echo >&4 "I don't understand your modfl() at all."
10881 d_modfl="$undef"
10882 ;;
10883 esac
10884 $rm -f try.* try core core.try.*
10885 else
10886 echo "I cannot figure out whether your modfl() is okay, assuming it isn't."
10887 d_modfl="$undef"
10888 fi
27f9615e 10889 case "$osname:$gccversion" in
abcf653a 10890 aix:) ccflags="$saveccflags" ;; # restore
27f9615e 10891 esac
2b2cdb4d
HS
10892 ;;
10893esac
10894
b4eb6b3d
JH
10895: see if mprotect exists
10896set mprotect d_mprotect
10897eval $inlibc
10898
10899: see if msgctl exists
10900set msgctl d_msgctl
10901eval $inlibc
10902
10903: see if msgget exists
10904set msgget d_msgget
10905eval $inlibc
10906
10907: see if msgsnd exists
10908set msgsnd d_msgsnd
10909eval $inlibc
10910
10911: see if msgrcv exists
10912set msgrcv d_msgrcv
10913eval $inlibc
10914
10915: see how much of the 'msg*(2)' library is present.
10916h_msg=true
10917echo " "
10918case "$d_msgctl$d_msgget$d_msgsnd$d_msgrcv" in
10919*"$undef"*) h_msg=false;;
10920esac
10921case "$osname" in
10922freebsd)
10923 case "`ipcs 2>&1`" in
10924 "SVID messages"*"not configured"*)
10925 echo "Your $osname does not have the msg*(2) configured." >&4
10926 h_msg=false
10927 val="$undef"
10928 set msgctl d_msgctl
10929 eval $setvar
10930 set msgget d_msgget
10931 eval $setvar
10932 set msgsnd d_msgsnd
10933 eval $setvar
10934 set msgrcv d_msgrcv
10935 eval $setvar
10936 ;;
10937 esac
10938 ;;
10939esac
10940: we could also check for sys/ipc.h ...
10941if $h_msg && $test `./findhdr sys/msg.h`; then
10942 echo "You have the full msg*(2) library." >&4
10943 val="$define"
10944else
10945 echo "You don't have the full msg*(2) library." >&4
10946 val="$undef"
10947fi
10948set d_msg
10949eval $setvar
10950
4e0554ec
JH
10951
10952echo " "
10953echo "Checking to see if your system supports struct msghdr..." >&4
10954set d_msghdr_s msghdr $i_systypes sys/types.h $d_socket sys/socket.h $i_sysuio sys/uio.h
10955eval $hasstruct
10956case "$d_msghdr_s" in
10957"$define") echo "Yes, it does." ;;
10958*) echo "No, it doesn't." ;;
10959esac
10960
10961
b4eb6b3d
JH
10962: see if msync exists
10963set msync d_msync
10964eval $inlibc
10965
10966: see if munmap exists
10967set munmap d_munmap
10968eval $inlibc
10969
10970: see if nice exists
10971set nice d_nice
10972eval $inlibc
10973
2765b840
JH
10974: see if this is a langinfo.h system
10975set langinfo.h i_langinfo
10976eval $inhdr
10977
10978: see if nl_langinfo exists
10979set nl_langinfo d_nl_langinfo
10980eval $inlibc
10981
b4eb6b3d
JH
10982: check for length of character
10983echo " "
10984case "$charsize" in
10985'')
10986 echo "Checking to see how big your characters are (hey, you never know)..." >&4
10987 $cat >try.c <<'EOCP'
10988#include <stdio.h>
10989int main()
10990{
10991 printf("%d\n", (int)sizeof(char));
10992 exit(0);
10993}
10994EOCP
10995 set try
10996 if eval $compile_ok; then
5440bc8e 10997 dflt=`$run ./try`
b4eb6b3d
JH
10998 else
10999 dflt='1'
11000 echo "(I can't seem to compile the test program. Guessing...)"
11001 fi
11002 ;;
11003*)
11004 dflt="$charsize"
11005 ;;
11006esac
11007rp="What is the size of a character (in bytes)?"
11008. ./myread
11009charsize="$ans"
11010$rm -f try.c try
11011
1d1be0dc
NC
11012: check for volatile keyword
11013echo " "
11014echo 'Checking to see if your C compiler knows about "volatile"...' >&4
11015$cat >try.c <<'EOCP'
11016int main()
11017{
11018 typedef struct _goo_struct goo_struct;
11019 goo_struct * volatile goo = ((goo_struct *)0);
11020 struct _goo_struct {
11021 long long_int;
11022 int reg_int;
11023 char char_var;
11024 };
11025 typedef unsigned short foo_t;
11026 char *volatile foo;
11027 volatile int bar;
11028 volatile foo_t blech;
11029 foo = foo;
11030}
11031EOCP
11032if $cc -c $ccflags try.c >/dev/null 2>&1 ; then
11033 val="$define"
11034 echo "Yup, it does."
11035else
11036 val="$undef"
11037 echo "Nope, it doesn't."
11038fi
11039set d_volatile
11040eval $setvar
11041$rm -f try.*
11042
b4eb6b3d
JH
11043
11044echo " "
11045$echo "Choosing the C types to be used for Perl's internal types..." >&4
11046
11047case "$use64bitint:$d_quad:$quadtype" in
11048define:define:?*)
11049 ivtype="$quadtype"
11050 uvtype="$uquadtype"
11051 ivsize=8
11052 uvsize=8
11053 ;;
11054*) ivtype="long"
11055 uvtype="unsigned long"
11056 ivsize=$longsize
11057 uvsize=$longsize
11058 ;;
11059esac
11060
11061case "$uselongdouble:$d_longdbl" in
11062define:define)
11063 nvtype="long double"
11064 nvsize=$longdblsize
11065 ;;
11066*) nvtype=double
11067 nvsize=$doublesize
11068 ;;
11069esac
11070
11071$echo "(IV will be "$ivtype", $ivsize bytes)"
11072$echo "(UV will be "$uvtype", $uvsize bytes)"
11073$echo "(NV will be "$nvtype", $nvsize bytes)"
11074
11075$cat >try.c <<EOCP
11076#$i_inttypes I_INTTYPES
11077#ifdef I_INTTYPES
11078#include <inttypes.h>
11079#endif
11080#include <stdio.h>
11081int main() {
11082#ifdef INT8
11083 int8_t i = INT8_MAX;
11084 uint8_t u = UINT8_MAX;
11085 printf("int8_t\n");
11086#endif
11087#ifdef INT16
11088 int16_t i = INT16_MAX;
11089 uint16_t i = UINT16_MAX;
11090 printf("int16_t\n");
11091#endif
11092#ifdef INT32
11093 int32_t i = INT32_MAX;
11094 uint32_t u = UINT32_MAX;
11095 printf("int32_t\n");
11096#endif
11097}
11098EOCP
11099
11100case "$i8type" in
11101'') case "$charsize" in
11102 1) i8type=char
11103 u8type="unsigned char"
11104 i8size=$charsize
11105 u8size=$charsize
11106 ;;
11107 esac
11108 ;;
11109esac
11110case "$i8type" in
11111'') set try -DINT8
11112 if eval $compile; then
5440bc8e 11113 case "`$run ./try`" in
b4eb6b3d
JH
11114 int8_t) i8type=int8_t
11115 u8type=uint8_t
11116 i8size=1
11117 u8size=1
11118 ;;
11119 esac
11120 fi
11121 ;;
11122esac
11123case "$i8type" in
11124'') if $test $charsize -ge 1; then
11125 i8type=char
11126 u8type="unsigned char"
11127 i8size=$charsize
11128 u8size=$charsize
11129 fi
11130 ;;
11131esac
11132
11133case "$i16type" in
11134'') case "$shortsize" in
11135 2) i16type=short
11136 u16type="unsigned short"
11137 i16size=$shortsize
11138 u16size=$shortsize
11139 ;;
11140 esac
11141 ;;
11142esac
11143case "$i16type" in
11144'') set try -DINT16
11145 if eval $compile; then
5440bc8e 11146 case "`$run ./try`" in
b4eb6b3d
JH
11147 int16_t)
11148 i16type=int16_t
11149 u16type=uint16_t
11150 i16size=2
11151 u16size=2
11152 ;;
11153 esac
11154 fi
11155 ;;
11156esac
11157case "$i16type" in
11158'') if $test $shortsize -ge 2; then
11159 i16type=short
11160 u16type="unsigned short"
11161 i16size=$shortsize
11162 u16size=$shortsize
11163 fi
11164 ;;
11165esac
11166
11167case "$i32type" in
11168'') case "$longsize" in
11169 4) i32type=long
11170 u32type="unsigned long"
11171 i32size=$longsize
11172 u32size=$longsize
11173 ;;
11174 *) case "$intsize" in
11175 4) i32type=int
11176 u32type="unsigned int"
11177 i32size=$intsize
11178 u32size=$intsize
11179 ;;
11180 esac
11181 ;;
11182 esac
11183 ;;
11184esac
11185case "$i32type" in
11186'') set try -DINT32
11187 if eval $compile; then
5440bc8e 11188 case "`$run ./try`" in
b4eb6b3d
JH
11189 int32_t)
11190 i32type=int32_t
11191 u32type=uint32_t
11192 i32size=4
11193 u32size=4
11194 ;;
11195 esac
11196 fi
11197 ;;
11198esac
11199case "$i32type" in
11200'') if $test $intsize -ge 4; then
11201 i32type=int
11202 u32type="unsigned int"
11203 i32size=$intsize
11204 u32size=$intsize
11205 fi
11206 ;;
11207esac
11208
11209case "$i64type" in
11210'') case "$d_quad:$quadtype" in
11211 define:?*)
11212 i64type="$quadtype"
11213 u64type="$uquadtype"
11214 i64size=8
11215 u64size=8
11216 ;;
11217 esac
11218 ;;
11219esac
11220
1d1be0dc
NC
11221$echo "Checking how many bits of your UVs your NVs can preserve..." >&4
11222: volatile so that the compiler has to store it out to memory.
11223if test X"$d_volatile" = X"$define"; then
11224 volatile=volatile
11225fi
b4eb6b3d
JH
11226$cat <<EOP >try.c
11227#include <stdio.h>
1d1be0dc
NC
11228#include <sys/types.h>
11229#include <signal.h>
11230#ifdef SIGFPE
11231$volatile int bletched = 0;
11232$signal_t blech(s) int s; { bletched = 1; }
11233#endif
b4eb6b3d
JH
11234int main() {
11235 $uvtype u = 0;
1d1be0dc 11236 $nvtype d;
b4eb6b3d
JH
11237 int n = 8 * $uvsize;
11238 int i;
1d1be0dc
NC
11239#ifdef SIGFPE
11240 signal(SIGFPE, blech);
11241#endif
11242
b4eb6b3d
JH
11243 for (i = 0; i < n; i++) {
11244 u = u << 1 | ($uvtype)1;
1d1be0dc
NC
11245 d = ($nvtype)u;
11246 if (($uvtype)d != u)
b4eb6b3d 11247 break;
1d1be0dc
NC
11248 if (d <= 0)
11249 break;
11250 d = ($nvtype)(u - 1);
11251 if (($uvtype)d != (u - 1))
11252 break;
11253#ifdef SIGFPE
11254 if (bletched) {
11255 break;
11256#endif
11257 }
b4eb6b3d 11258 }
efd1522b 11259 printf("%d\n", ((i == n) ? -n : i));
b4eb6b3d
JH
11260 exit(0);
11261}
11262EOP
1d1be0dc
NC
11263set try
11264
11265d_nv_preserves_uv="$undef"
11266if eval $compile; then
5440bc8e 11267 d_nv_preserves_uv_bits="`$run ./try`"
1d1be0dc
NC
11268fi
11269case "$d_nv_preserves_uv_bits" in
11270\-[1-9]*)
11271 d_nv_preserves_uv_bits=`expr 0 - $d_nv_preserves_uv_bits`
11272 $echo "Your NVs can preserve all $d_nv_preserves_uv_bits bits of your UVs." 2>&1
11273 d_nv_preserves_uv="$define"
b4eb6b3d 11274 ;;
1d1be0dc
NC
11275[1-9]*) $echo "Your NVs can preserve only $d_nv_preserves_uv_bits bits of your UVs." 2>&1
11276 d_nv_preserves_uv="$undef" ;;
11277*) $echo "Can't figure out how many bits your NVs preserve." 2>&1
11278 d_nv_preserves_uv_bits="$undef" ;;
b4eb6b3d
JH
11279esac
11280
1d1be0dc
NC
11281$rm -f try.* try
11282
b4eb6b3d
JH
11283
11284: check for off64_t
11285echo " "
11286echo "Checking to see if you have off64_t..." >&4
11287$cat >try.c <<EOCP
11288#include <sys/types.h>
11289#include <unistd.h>
11290int main() { off64_t x = 7; }
11291EOCP
11292set try
11293if eval $compile; then
11294 val="$define"
11295 echo "You have off64_t."
11296else
11297 val="$undef"
11298 echo "You do not have off64_t."
11299 case "$lseeksize" in
11300 8) echo "(Your off_t is 64 bits, so you could use that.)" ;;
11301 esac
11302fi
11303$rm -f try.* try
11304set d_off64_t
11305eval $setvar
11306
11307: see if POSIX threads are available
11308set pthread.h i_pthread
11309eval $inhdr
11310
11311
11312
11313
11314: how to create joinable pthreads
11315if test "X$usethreads" = "X$define" -a "X$i_pthread" = "X$define"; then
11316 echo " "
11317 echo "Checking what constant to use for creating joinable pthreads..." >&4
11318 $cat >try.c <<'EOCP'
11319#include <pthread.h>
11320int main() {
11321 int detachstate = JOINABLE;
11322}
11323EOCP
11324 set try -DJOINABLE=PTHREAD_CREATE_JOINABLE
11325 if eval $compile; then
11326 echo "You seem to use PTHREAD_CREATE_JOINABLE." >&4
11327 val="$undef" # Yes, undef.
11328 set d_old_pthread_create_joinable
11329 eval $setvar
11330 val=""
11331 set old_pthread_create_joinable
11332 eval $setvar
11333 else
11334 set try -DJOINABLE=PTHREAD_CREATE_UNDETACHED
11335 if eval $compile; then
11336 echo "You seem to use PTHREAD_CREATE_UNDETACHED." >&4
11337 val="$define"
11338 set d_old_pthread_create_joinable
11339 eval $setvar
11340 val=PTHREAD_CREATE_UNDETACHED
11341 set old_pthread_create_joinable
11342 eval $setvar
11343 else
11344 set try -DJOINABLE=__UNDETACHED
11345 if eval $compile; then
11346 echo "You seem to use __UNDETACHED." >&4
11347 val="$define"
11348 set d_old_pthread_create_joinable
11349 eval $setvar
11350 val=__UNDETACHED
11351 set old_pthread_create_joinable
11352 eval $setvar
11353 else
11354 echo "Egads, nothing obvious found. Guessing that you use 0." >&4
11355 val="$define"
11356 set d_old_pthread_create_joinable
11357 eval $setvar
11358 val=0
11359 set old_pthread_create_joinable
11360 eval $setvar
11361 fi
11362 fi
11363 fi
11364 $rm -f try try.*
11365else
11366 d_old_pthread_create_joinable="$undef"
11367 old_pthread_create_joinable=""
11368fi
11369
11370: see if pause exists
11371set pause d_pause
11372eval $inlibc
11373
11374: see if pipe exists
11375set pipe d_pipe
11376eval $inlibc
11377
11378: see if poll exists
11379set poll d_poll
11380eval $inlibc
11381
d6483fcc
JH
11382: see if pthread_atfork exists
11383set pthread_atfork d_pthread_atfork
11384eval $inlibc
11385
b4eb6b3d
JH
11386
11387: see whether the various POSIXish _yields exist
11388$cat >try.c <<EOP
11389#include <pthread.h>
11390#include <stdio.h>
11391int main() {
11392#ifdef SCHED_YIELD
11393 sched_yield();
11394#else
11395#ifdef PTHREAD_YIELD
11396 pthread_yield();
11397#else
11398#ifdef PTHREAD_YIELD_NULL
11399 pthread_yield(NULL);
11400#endif
11401#endif
11402#endif
11403}
11404EOP
11405: see if sched_yield exists
11406set try -DSCHED_YIELD
11407if eval $compile; then
11408 val="$define"
11409 sched_yield='sched_yield()'
11410else
11411 val="$undef"
11412fi
11413case "$usethreads" in
11414$define)
11415 case "$val" in
11416 $define) echo 'sched_yield() found.' >&4 ;;
11417 *) echo 'sched_yield() NOT found.' >&4 ;;
11418 esac
11419esac
11420set d_sched_yield
11421eval $setvar
11422
11423: see if pthread_yield exists
11424set try -DPTHREAD_YIELD
11425if eval $compile; then
11426 val="$define"
11427 case "$sched_yield" in
11428 '') sched_yield='pthread_yield()' ;;
11429 esac
11430else
11431 set try -DPTHREAD_YIELD_NULL
11432 if eval $compile; then
11433 val="$define"
11434 case "$sched_yield" in
11435 '') sched_yield='pthread_yield(NULL)' ;;
11436 esac
11437 else
11438 val="$undef"
11439 fi
11440fi
11441case "$usethreads" in
11442$define)
11443 case "$val" in
11444 $define) echo 'pthread_yield() found.' >&4 ;;
11445 *) echo 'pthread_yield() NOT found.' >&4 ;;
11446 esac
11447 ;;
11448esac
11449set d_pthread_yield
11450eval $setvar
11451
11452case "$sched_yield" in
11453'') sched_yield=undef ;;
11454esac
11455
11456$rm -f try try.*
11457
11458: see if this is a pwd.h system
11459set pwd.h i_pwd
11460eval $inhdr
11461
11462case "$i_pwd" in
11463$define)
11464 xxx=`./findhdr pwd.h`
11465 $cppstdin $cppflags $cppminus < $xxx >$$.h
11466
11467 if $contains 'pw_quota' $$.h >/dev/null 2>&1; then
11468 val="$define"
11469 else
11470 val="$undef"
11471 fi
11472 set d_pwquota
11473 eval $setvar
11474
11475 if $contains 'pw_age' $$.h >/dev/null 2>&1; then
11476 val="$define"
11477 else
11478 val="$undef"
11479 fi
11480 set d_pwage
11481 eval $setvar
11482
11483 if $contains 'pw_change' $$.h >/dev/null 2>&1; then
11484 val="$define"
11485 else
11486 val="$undef"
11487 fi
11488 set d_pwchange
11489 eval $setvar
11490
11491 if $contains 'pw_class' $$.h >/dev/null 2>&1; then
11492 val="$define"
11493 else
11494 val="$undef"
11495 fi
11496 set d_pwclass
11497 eval $setvar
11498
11499 if $contains 'pw_expire' $$.h >/dev/null 2>&1; then
11500 val="$define"
11501 else
11502 val="$undef"
11503 fi
11504 set d_pwexpire
11505 eval $setvar
11506
11507 if $contains 'pw_comment' $$.h >/dev/null 2>&1; then
11508 val="$define"
11509 else
11510 val="$undef"
11511 fi
11512 set d_pwcomment
11513 eval $setvar
11514
11515 if $contains 'pw_gecos' $$.h >/dev/null 2>&1; then
11516 val="$define"
11517 else
11518 val="$undef"
11519 fi
11520 set d_pwgecos
11521 eval $setvar
11522
11523 if $contains 'pw_passwd' $$.h >/dev/null 2>&1; then
11524 val="$define"
11525 else
11526 val="$undef"
11527 fi
11528 set d_pwpasswd
11529 eval $setvar
11530
11531 $rm -f $$.h
11532 ;;
11533*)
11534 val="$undef";
11535 set d_pwquota; eval $setvar
11536 set d_pwage; eval $setvar
11537 set d_pwchange; eval $setvar
11538 set d_pwclass; eval $setvar
11539 set d_pwexpire; eval $setvar
11540 set d_pwcomment; eval $setvar
11541 set d_pwgecos; eval $setvar
11542 set d_pwpasswd; eval $setvar
11543 ;;
11544esac
11545
11546: see if readdir and friends exist
11547set readdir d_readdir
11548eval $inlibc
11549set seekdir d_seekdir
11550eval $inlibc
11551set telldir d_telldir
11552eval $inlibc
11553set rewinddir d_rewinddir
11554eval $inlibc
11555
11556: see if readlink exists
11557set readlink d_readlink
11558eval $inlibc
11559
4e0554ec
JH
11560: see if readv exists
11561set readv d_readv
11562eval $inlibc
11563
11564: see if recvmsg exists
11565set recvmsg d_recvmsg
11566eval $inlibc
11567
b4eb6b3d
JH
11568: see if rename exists
11569set rename d_rename
11570eval $inlibc
11571
11572: see if rmdir exists
11573set rmdir d_rmdir
11574eval $inlibc
11575
11576: see if memory.h is available.
11577val=''
11578set memory.h val
11579eval $inhdr
11580
11581: See if it conflicts with string.h
11582case "$val" in
11583$define)
11584 case "$strings" in
11585 '') ;;
11586 *)
11587 $cppstdin $cppflags $cppminus < $strings > mem.h
11588 if $contains 'memcpy' mem.h >/dev/null 2>&1; then
11589 echo " "
11590 echo "We won't be including <memory.h>."
11591 val="$undef"
11592 fi
11593 $rm -f mem.h
11594 ;;
11595 esac
11596esac
11597set i_memory
11598eval $setvar
11599
11600: can bcopy handle overlapping blocks?
b6cc3bc4 11601echo " "
b4eb6b3d 11602val="$undef"
b6cc3bc4
AD
11603case "$d_memmove" in
11604"$define") echo "I'll use memmove() instead of bcopy() for overlapping copies." ;;
11605*) case "$d_bcopy" in
11606 "$define")
11607 echo "Checking to see if bcopy() can do overlapping copies..." >&4
11608 $cat >try.c <<EOCP
b4eb6b3d
JH
11609#$i_memory I_MEMORY
11610#$i_stdlib I_STDLIB
11611#$i_string I_STRING
11612#$i_unistd I_UNISTD
11613EOCP
11614 $cat >>try.c <<'EOCP'
11615#include <stdio.h>
11616#ifdef I_MEMORY
11617# include <memory.h>
11618#endif
11619#ifdef I_STDLIB
11620# include <stdlib.h>
11621#endif
11622#ifdef I_STRING
11623# include <string.h>
11624#else
11625# include <strings.h>
11626#endif
11627#ifdef I_UNISTD
11628# include <unistd.h> /* Needed for NetBSD */
11629#endif
11630int main()
11631{
11632char buf[128], abc[128];
11633char *b;
11634int len;
11635int off;
11636int align;
11637
b6cc3bc4
AD
11638/* Copy "abcde..." string to char abc[] so that gcc doesn't
11639 try to store the string in read-only memory. */
b4eb6b3d
JH
11640bcopy("abcdefghijklmnopqrstuvwxyz0123456789", abc, 36);
11641
11642for (align = 7; align >= 0; align--) {
11643 for (len = 36; len; len--) {
11644 b = buf+align;
11645 bcopy(abc, b, len);
11646 for (off = 1; off <= len; off++) {
11647 bcopy(b, b+off, len);
11648 bcopy(b+off, b, len);
11649 if (bcmp(b, abc, len))
11650 exit(1);
11651 }
11652 }
11653}
11654exit(0);
11655}
11656EOCP
b6cc3bc4
AD
11657 set try
11658 if eval $compile_ok; then
11659 if ./try 2>/dev/null; then
11660 echo "Yes, it can."
11661 val="$define"
11662 else
11663 echo "It can't, sorry."
11664 fi
b4eb6b3d 11665 else
b6cc3bc4 11666 echo "(I can't compile the test program, so we'll assume not...)"
b4eb6b3d 11667 fi
b6cc3bc4
AD
11668 ;;
11669 esac
11670 $rm -f try.* try core
b4eb6b3d
JH
11671 ;;
11672esac
b4eb6b3d
JH
11673set d_safebcpy
11674eval $setvar
11675
11676: can memcpy handle overlapping blocks?
b6cc3bc4 11677echo " "
b4eb6b3d 11678val="$undef"
b6cc3bc4
AD
11679case "$d_memmove" in
11680"$define") echo "I'll use memmove() instead of memcpy() for overlapping copies." ;;
11681*) case "$d_memcpy" in
11682 "$define")
11683 echo "Checking to see if memcpy() can do overlapping copies..." >&4
11684 $cat >try.c <<EOCP
b4eb6b3d
JH
11685#$i_memory I_MEMORY
11686#$i_stdlib I_STDLIB
11687#$i_string I_STRING
11688#$i_unistd I_UNISTD
11689EOCP
11690 $cat >>try.c <<'EOCP'
11691#include <stdio.h>
11692#ifdef I_MEMORY
11693# include <memory.h>
11694#endif
11695#ifdef I_STDLIB
11696# include <stdlib.h>
11697#endif
11698#ifdef I_STRING
11699# include <string.h>
11700#else
11701# include <strings.h>
11702#endif
11703#ifdef I_UNISTD
11704# include <unistd.h> /* Needed for NetBSD */
11705#endif
11706int main()
11707{
11708char buf[128], abc[128];
11709char *b;
11710int len;
11711int off;
11712int align;
11713
11714/* Copy "abcde..." string to char abc[] so that gcc doesn't
11715 try to store the string in read-only memory. */
11716memcpy(abc, "abcdefghijklmnopqrstuvwxyz0123456789", 36);
11717
11718for (align = 7; align >= 0; align--) {
11719 for (len = 36; len; len--) {
11720 b = buf+align;
11721 memcpy(b, abc, len);
11722 for (off = 1; off <= len; off++) {
11723 memcpy(b+off, b, len);
11724 memcpy(b, b+off, len);
11725 if (memcmp(b, abc, len))
11726 exit(1);
11727 }
11728 }
11729}
11730exit(0);
11731}
11732EOCP
b6cc3bc4
AD
11733 set try
11734 if eval $compile_ok; then
11735 if ./try 2>/dev/null; then
11736 echo "Yes, it can."
11737 val="$define"
11738 else
11739 echo "It can't, sorry."
11740 fi
b4eb6b3d 11741 else
b6cc3bc4 11742 echo "(I can't compile the test program, so we'll assume not...)"
b4eb6b3d 11743 fi
b6cc3bc4
AD
11744 ;;
11745 esac
11746 $rm -f try.* try core
b4eb6b3d
JH
11747 ;;
11748esac
b4eb6b3d
JH
11749set d_safemcpy
11750eval $setvar
11751
11752: can memcmp be trusted to compare relative magnitude?
11753val="$undef"
11754case "$d_memcmp" in
11755"$define")
11756 echo " "
11757 echo "Checking if your memcmp() can compare relative magnitude..." >&4
11758 $cat >try.c <<EOCP
11759#$i_memory I_MEMORY
11760#$i_stdlib I_STDLIB
11761#$i_string I_STRING
11762#$i_unistd I_UNISTD
11763EOCP
11764 $cat >>try.c <<'EOCP'
11765#include <stdio.h>
11766#ifdef I_MEMORY
11767# include <memory.h>
11768#endif
11769#ifdef I_STDLIB
11770# include <stdlib.h>
11771#endif
11772#ifdef I_STRING
11773# include <string.h>
11774#else
11775# include <strings.h>
11776#endif
11777#ifdef I_UNISTD
11778# include <unistd.h> /* Needed for NetBSD */
11779#endif
11780int main()
11781{
11782char a = -1;
11783char b = 0;
11784if ((a < b) && memcmp(&a, &b, 1) < 0)
11785 exit(1);
11786exit(0);
11787}
11788EOCP
11789 set try
11790 if eval $compile_ok; then
5440bc8e 11791 if $run ./try 2>/dev/null; then
b4eb6b3d
JH
11792 echo "Yes, it can."
11793 val="$define"
11794 else
11795 echo "No, it can't (it uses signed chars)."
11796 fi
11797 else
11798 echo "(I can't compile the test program, so we'll assume not...)"
11799 fi
11800 ;;
11801esac
11802$rm -f try.* try core
11803set d_sanemcmp
11804eval $setvar
11805
ef9f17be
JH
11806: see if prototype for sbrk is available
11807echo " "
11808set d_sbrkproto sbrk $i_unistd unistd.h
11809eval $hasproto
11810
b4eb6b3d
JH
11811: see if select exists
11812set select d_select
11813eval $inlibc
11814
11815: see if semctl exists
11816set semctl d_semctl
11817eval $inlibc
11818
11819: see if semget exists
11820set semget d_semget
11821eval $inlibc
11822
11823: see if semop exists
11824set semop d_semop
11825eval $inlibc
11826
11827: see how much of the 'sem*(2)' library is present.
11828h_sem=true
11829echo " "
11830case "$d_semctl$d_semget$d_semop" in
11831*"$undef"*) h_sem=false;;
11832esac
11833case "$osname" in
11834freebsd)
11835 case "`ipcs 2>&1`" in
11836 "SVID messages"*"not configured"*)
11837 echo "Your $osname does not have the sem*(2) configured." >&4
11838 h_sem=false
11839 val="$undef"
11840 set semctl d_semctl
11841 eval $setvar
11842 set semget d_semget
11843 eval $setvar
11844 set semop d_semop
11845 eval $setvar
11846 ;;
11847 esac
11848 ;;
11849esac
11850: we could also check for sys/ipc.h ...
11851if $h_sem && $test `./findhdr sys/sem.h`; then
11852 echo "You have the full sem*(2) library." >&4
11853 val="$define"
11854else
11855 echo "You don't have the full sem*(2) library." >&4
11856 val="$undef"
11857fi
11858set d_sem
11859eval $setvar
11860
11861: see whether sys/sem.h defines union semun
11862echo " "
11863$cat > try.c <<'END'
11864#include <sys/types.h>
11865#include <sys/ipc.h>
11866#include <sys/sem.h>
11867int main () { union semun semun; semun.buf = 0; }
11868END
11869set try
11870if eval $compile; then
11871 echo "You have union semun in <sys/sem.h>." >&4
11872 val="$define"
11873else
11874 echo "You do not have union semun in <sys/sem.h>." >&4
11875 val="$undef"
11876fi
11877$rm -f try try.c try.h
11878set d_union_semun
11879eval $setvar
11880
11881: see how to do semctl IPC_STAT
11882case "$d_sem" in
11883$define)
11884 : see whether semctl IPC_STAT can use union semun
11885 echo " "
11886 $cat > try.h <<END
11887#ifndef S_IRUSR
11888# ifdef S_IREAD
11889# define S_IRUSR S_IREAD
11890# define S_IWUSR S_IWRITE
11891# define S_IXUSR S_IEXEC
11892# else
11893# define S_IRUSR 0400
11894# define S_IWUSR 0200
11895# define S_IXUSR 0100
11896# endif
11897# define S_IRGRP (S_IRUSR>>3)
11898# define S_IWGRP (S_IWUSR>>3)
11899# define S_IXGRP (S_IXUSR>>3)
11900# define S_IROTH (S_IRUSR>>6)
11901# define S_IWOTH (S_IWUSR>>6)
11902# define S_IXOTH (S_IXUSR>>6)
11903#endif
11904#ifndef S_IRWXU
11905# define S_IRWXU (S_IRUSR|S_IWUSR|S_IXUSR)
11906# define S_IRWXG (S_IRGRP|S_IWGRP|S_IXGRP)
11907# define S_IRWXO (S_IROTH|S_IWOTH|S_IXOTH)
11908#endif
11909END
11910
11911 $cat > try.c <<END
11912#include <sys/types.h>
11913#include <sys/ipc.h>
11914#include <sys/sem.h>
11915#include <sys/stat.h>
11916#include <stdio.h>
11917#include <errno.h>
11918#include "try.h"
11919#ifndef errno
11920extern int errno;
11921#endif
11922#$d_union_semun HAS_UNION_SEMUN
11923int main() {
11924 union semun
11925#ifndef HAS_UNION_SEMUN
11926 {
11927 int val;
11928 struct semid_ds *buf;
11929 unsigned short *array;
11930 }
11931#endif
11932 arg;
11933 int sem, st;
11934
11935#if defined(IPC_PRIVATE) && defined(S_IRWXU) && defined(S_IRWXG) && defined(S_IRWXO) && defined(IPC_CREAT)
11936 sem = semget(IPC_PRIVATE, 1, S_IRWXU|S_IRWXG|S_IRWXO|IPC_CREAT);
11937 if (sem > -1) {
11938 struct semid_ds argbuf;
11939 arg.buf = &argbuf;
11940# ifdef IPC_STAT
11941 st = semctl(sem, 0, IPC_STAT, arg);
11942 if (st == 0)
11943 printf("semun\n");
11944 else
11945# endif /* IPC_STAT */
11946 printf("semctl IPC_STAT failed: errno = %d\n", errno);
11947# ifdef IPC_RMID
11948 if (semctl(sem, 0, IPC_RMID, arg) != 0)
11949# endif /* IPC_RMID */
11950 printf("semctl IPC_RMID failed: errno = %d\n", errno);
11951 } else
11952#endif /* IPC_PRIVATE && ... */
11953 printf("semget failed: errno = %d\n", errno);
11954 return 0;
11955}
11956END
11957 val="$undef"
11958 set try
11959 if eval $compile; then
5440bc8e 11960 xxx=`$run ./try`
b4eb6b3d
JH
11961 case "$xxx" in
11962 semun) val="$define" ;;
11963 esac
11964 fi
11965 $rm -f try try.c
11966 set d_semctl_semun
11967 eval $setvar
11968 case "$d_semctl_semun" in
11969 $define)
11970 echo "You can use union semun for semctl IPC_STAT." >&4
11971 also='also'
11972 ;;
11973 *) echo "You cannot use union semun for semctl IPC_STAT." >&4
11974 also=''
11975 ;;
11976 esac
11977
11978 : see whether semctl IPC_STAT can use struct semid_ds pointer
11979 $cat > try.c <<'END'
11980#include <sys/types.h>
11981#include <sys/ipc.h>
11982#include <sys/sem.h>
11983#include <sys/stat.h>
11984#include "try.h"
11985#include <stdio.h>
11986#include <errno.h>
11987#ifndef errno
11988extern int errno;
11989#endif
11990int main() {
11991 struct semid_ds arg;
11992 int sem, st;
11993
11994#if defined(IPC_PRIVATE) && defined(S_IRWXU) && defined(S_IRWXG) && defined(S_IRWXO) && defined(IPC_CREAT)
11995 sem = semget(IPC_PRIVATE, 1, S_IRWXU|S_IRWXG|S_IRWXO|IPC_CREAT);
11996 if (sem > -1) {
11997# ifdef IPC_STAT
11998 st = semctl(sem, 0, IPC_STAT, &arg);
11999 if (st == 0)
12000 printf("semid_ds\n");
12001 else
12002# endif /* IPC_STAT */
12003 printf("semctl IPC_STAT failed: errno = %d\n", errno);
12004# ifdef IPC_RMID
12005 if (semctl(sem, 0, IPC_RMID, &arg) != 0)
12006# endif /* IPC_RMID */
12007 printf("semctl IPC_RMID failed: errno = %d\n", errno);
12008 } else
12009#endif /* IPC_PRIVATE && ... */
12010 printf("semget failed: errno = %d\n", errno);
12011
12012 return 0;
12013}
12014END
12015 val="$undef"
12016 set try
12017 if eval $compile; then
5440bc8e 12018 xxx=`$run ./try`
b4eb6b3d
JH
12019 case "$xxx" in
12020 semid_ds) val="$define" ;;
12021 esac
12022 fi
12023 $rm -f try try.c
12024 set d_semctl_semid_ds
12025 eval $setvar
12026 case "$d_semctl_semid_ds" in
12027 $define)
12028 echo "You can $also use struct semid_ds* for semctl IPC_STAT." >&4
12029 ;;
12030 *) echo "You cannot use struct semid_ds* for semctl IPC_STAT." >&4
12031 ;;
12032 esac
12033 $rm -f try.h
12034 ;;
12035*) val="$undef"
12036
12037 # We do not have the full sem*(2) library, so assume we can not
12038 # use either.
12039
12040 set d_semctl_semun
12041 eval $setvar
12042
12043 set d_semctl_semid_ds
12044 eval $setvar
12045 ;;
12046esac
12047
4e0554ec
JH
12048: see if sendmsg exists
12049set sendmsg d_sendmsg
12050eval $inlibc
12051
b4eb6b3d
JH
12052: see if setegid exists
12053set setegid d_setegid
12054eval $inlibc
12055
12056: see if seteuid exists
12057set seteuid d_seteuid
12058eval $inlibc
12059
12060: see if setgrent exists
12061set setgrent d_setgrent
12062eval $inlibc
12063
12064: see if sethostent exists
12065set sethostent d_sethent
12066eval $inlibc
12067
4e0554ec
JH
12068: see if setitimer exists
12069set setitimer d_setitimer
12070eval $inlibc
12071
b4eb6b3d
JH
12072: see if setlinebuf exists
12073set setlinebuf d_setlinebuf
12074eval $inlibc
12075
12076: see if setlocale exists
12077set setlocale d_setlocale
12078eval $inlibc
12079
12080: see if setnetent exists
12081set setnetent d_setnent
12082eval $inlibc
12083
12084: see if setprotoent exists
12085set setprotoent d_setpent
12086eval $inlibc
12087
12088: see if setpgid exists
12089set setpgid d_setpgid
12090eval $inlibc
12091
12092: see if setpgrp2 exists
12093set setpgrp2 d_setpgrp2
12094eval $inlibc
12095
12096: see if setpriority exists
12097set setpriority d_setprior
12098eval $inlibc
12099
12100: see if setproctitle exists
12101set setproctitle d_setproctitle
12102eval $inlibc
12103
12104: see if setpwent exists
12105set setpwent d_setpwent
12106eval $inlibc
12107
12108: see if setregid exists
12109set setregid d_setregid
12110eval $inlibc
12111set setresgid d_setresgid
12112eval $inlibc
12113
12114: see if setreuid exists
12115set setreuid d_setreuid
12116eval $inlibc
12117set setresuid d_setresuid
12118eval $inlibc
12119
12120: see if setrgid exists
12121set setrgid d_setrgid
12122eval $inlibc
12123
12124: see if setruid exists
12125set setruid d_setruid
12126eval $inlibc
12127
12128: see if setservent exists
12129set setservent d_setsent
12130eval $inlibc
12131
12132: see if setsid exists
12133set setsid d_setsid
12134eval $inlibc
12135
12136: see if setvbuf exists
12137set setvbuf d_setvbuf
12138eval $inlibc
12139
12140: see if sfio.h is available
12141set sfio.h i_sfio
12142eval $inhdr
12143
12144
12145: see if sfio library is available
12146case "$i_sfio" in
12147$define)
12148 val=''
12149 set sfreserve val
12150 eval $inlibc
12151 ;;
12152*)
12153 val="$undef"
12154 ;;
12155esac
12156: Ok, but do we want to use it.
12157case "$val" in
12158$define)
12159 case "$usesfio" in
12160 true|$define|[yY]*) dflt='y';;
12161 *) dflt='n';;
12162 esac
12163 echo "$package can use the sfio library, but it is experimental."
12164 case "$useperlio" in
12165 "$undef")
12166 echo "For sfio also the PerlIO abstraction layer is needed."
12167 echo "Earlier you said you wouldn't want that."
12168 ;;
12169 esac
12170 rp="You seem to have sfio available, do you want to try using it?"
12171 . ./myread
12172 case "$ans" in
12173 y|Y) echo "Ok, turning on both sfio and PerlIO, then."
12174 useperlio="$define"
12175 val="$define"
12176 ;;
12177 *) echo "Ok, avoiding sfio this time. I'll use stdio instead."
12178 val="$undef"
b4eb6b3d
JH
12179 ;;
12180 esac
12181 ;;
12182*) case "$usesfio" in
12183 true|$define|[yY]*)
12184 echo "Sorry, cannot find sfio on this machine." >&4
12185 echo "Ignoring your setting of usesfio=$usesfio." >&4
12186 val="$undef"
12187 ;;
12188 esac
12189 ;;
12190esac
12191set d_sfio
12192eval $setvar
12193case "$d_sfio" in
12194$define) usesfio='true';;
12195*) usesfio='false';;
12196esac
3659ebf1
JH
12197case "$d_sfio" in
12198$define) ;;
12199*) : Remove sfio from list of libraries to use
7483f793
JH
12200 case "$libs" in
12201 *-lsfio*)
12202 echo "Removing unneeded -lsfio from library list" >&4
12203 set `echo X $libs | $sed -e 's/-lsfio / /' -e 's/-lsfio$//'`
12204 shift
12205 libs="$*"
12206 echo "libs = $libs" >&4
12207 ;;
12208 esac
3659ebf1
JH
12209;;
12210esac
12211
b4eb6b3d
JH
12212
12213: see if shmctl exists
12214set shmctl d_shmctl
12215eval $inlibc
12216
12217: see if shmget exists
12218set shmget d_shmget
12219eval $inlibc
12220
12221: see if shmat exists
12222set shmat d_shmat
12223eval $inlibc
12224: see what shmat returns
12225case "$d_shmat" in
12226"$define")
12227 $cat >shmat.c <<'END'
12228#include <sys/shm.h>
12229void *shmat();
12230END
12231 if $cc $ccflags -c shmat.c >/dev/null 2>&1; then
12232 shmattype='void *'
12233 else
12234 shmattype='char *'
12235 fi
12236 echo "and it returns ($shmattype)." >&4
12237 : see if a prototype for shmat is available
12238 xxx=`./findhdr sys/shm.h`
12239 $cppstdin $cppflags $cppminus < $xxx > shmat.c 2>/dev/null
12240 if $contains 'shmat.*(' shmat.c >/dev/null 2>&1; then
12241 val="$define"
12242 else
12243 val="$undef"
12244 fi
12245 $rm -f shmat.[co]
12246 ;;
12247*)
12248 val="$undef"
12249 ;;
12250esac
12251set d_shmatprototype
12252eval $setvar
12253
12254: see if shmdt exists
12255set shmdt d_shmdt
12256eval $inlibc
12257
12258: see how much of the 'shm*(2)' library is present.
12259h_shm=true
12260echo " "
12261case "$d_shmctl$d_shmget$d_shmat$d_shmdt" in
12262*"$undef"*) h_shm=false;;
12263esac
12264case "$osname" in
12265freebsd)
12266 case "`ipcs 2>&1`" in
12267 "SVID shared memory"*"not configured"*)
12268 echo "Your $osname does not have the shm*(2) configured." >&4
12269 h_shm=false
12270 val="$undef"
12271 set shmctl d_shmctl
12272 evat $setvar
12273 set shmget d_shmget
12274 evat $setvar
12275 set shmat d_shmat
12276 evat $setvar
12277 set shmdt d_shmdt
12278 evat $setvar
12279 ;;
12280 esac
12281 ;;
12282esac
12283: we could also check for sys/ipc.h ...
12284if $h_shm && $test `./findhdr sys/shm.h`; then
12285 echo "You have the full shm*(2) library." >&4
12286 val="$define"
12287else
12288 echo "You don't have the full shm*(2) library." >&4
12289 val="$undef"
12290fi
12291set d_shm
12292eval $setvar
12293
12294echo " "
12295: see if we have sigaction
12296if set sigaction val -f d_sigaction; eval $csym; $val; then
12297 echo 'sigaction() found.' >&4
12298 $cat > try.c <<'EOP'
12299#include <stdio.h>
12300#include <sys/types.h>
12301#include <signal.h>
12302int main()
12303{
12304 struct sigaction act, oact;
12305 act.sa_flags = 0;
12306 oact.sa_handler = 0;
12307 /* so that act and oact are used */
12308 exit(act.sa_flags == 0 && oact.sa_handler == 0);
12309}
12310EOP
12311 set try
12312 if eval $compile_ok; then
12313 val="$define"
12314 else
12315 echo "But you don't seem to have a useable struct sigaction." >&4
12316 val="$undef"
12317 fi
12318else
12319 echo 'sigaction NOT found.' >&4
12320 val="$undef"
12321fi
12322set d_sigaction; eval $setvar
12323$rm -f try try$_o try.c
12324
983dbef6
JH
12325: see if sigprocmask exists
12326set sigprocmask d_sigprocmask
12327eval $inlibc
12328
b4eb6b3d
JH
12329: see if sigsetjmp exists
12330echo " "
12331case "$d_sigsetjmp" in
12332'')
12333 $cat >try.c <<'EOP'
12334#include <setjmp.h>
12335sigjmp_buf env;
12336int set = 1;
12337int main()
12338{
12339 if (sigsetjmp(env,1))
12340 exit(set);
12341 set = 0;
12342 siglongjmp(env, 1);
12343 exit(1);
12344}
12345EOP
12346 set try
12347 if eval $compile; then
5440bc8e 12348 if $run ./try >/dev/null 2>&1; then
b4eb6b3d
JH
12349 echo "POSIX sigsetjmp found." >&4
12350 val="$define"
12351 else
12352 $cat >&4 <<EOM
12353Uh-Oh! You have POSIX sigsetjmp and siglongjmp, but they do not work properly!!
12354I'll ignore them.
12355EOM
12356 val="$undef"
12357 fi
12358 else
12359 echo "sigsetjmp not found." >&4
12360 val="$undef"
12361 fi
12362 ;;
12363*) val="$d_sigsetjmp"
12364 case "$d_sigsetjmp" in
12365 $define) echo "POSIX sigsetjmp found." >&4;;
12366 $undef) echo "sigsetjmp not found." >&4;;
12367 esac
12368 ;;
12369esac
12370set d_sigsetjmp
12371eval $setvar
12372$rm -f try.c try
12373
49a78c82
JH
12374: see if sockatmark exists
12375set sockatmark d_sockatmark
12376eval $inlibc
12377
2ef53570
JH
12378: see if prototype for sockatmark is available
12379echo " "
12380set d_sockatmarkproto sockatmark $d_socket sys/socket.h
12381eval $hasproto
12382
b4eb6b3d
JH
12383: see if socks5_init exists
12384set socks5_init d_socks5_init
12385eval $inlibc
12386
eef837ea
JH
12387: see if prototype for setresgid is available
12388echo " "
12389set d_sresgproto setresgid $i_unistd unistd.h
12390eval $hasproto
12391
640374d0
JH
12392: see if prototype for setresuid is available
12393echo " "
12394set d_sresuproto setresuid $i_unistd unistd.h
12395eval $hasproto
12396
b4eb6b3d
JH
12397: see if sys/stat.h is available
12398set sys/stat.h i_sysstat
12399eval $inhdr
12400
12401
12402: see if stat knows about block sizes
12403echo " "
12404echo "Checking to see if your struct stat has st_blocks field..." >&4
12405set d_statblks stat st_blocks $i_sysstat sys/stat.h
12406eval $hasfield
12407
12408
12409: see if this is a sys/vfs.h system
12410set sys/vfs.h i_sysvfs
12411eval $inhdr
12412
12413
12414: see if this is a sys/statfs.h system
12415set sys/statfs.h i_sysstatfs
12416eval $inhdr
12417
12418
12419echo " "
12420echo "Checking to see if your system supports struct statfs..." >&4
12421set 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
12422eval $hasstruct
12423case "$d_statfs_s" in
12424"$define") echo "Yes, it does." ;;
12425*) echo "No, it doesn't." ;;
12426esac
12427
12428
12429
12430: see if struct statfs knows about f_flags
12431case "$d_statfs_s" in
12432define)
12433 echo " "
12434 echo "Checking to see if your struct statfs has f_flags field..." >&4
12435 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
12436 eval $hasfield
12437 ;;
12438*) val="$undef"
12439 set d_statfs_f_flags
12440 eval $setvar
12441 ;;
12442esac
12443case "$d_statfs_f_flags" in
12444"$define") echo "Yes, it does." ;;
12445*) echo "No, it doesn't." ;;
12446esac
12447
12448: see if _ptr and _cnt from stdio act std
12449echo " "
80f36755
NC
12450
12451if $contains '_lbfsize' `./findhdr stdio.h` >/dev/null 2>&1 ; then
12452 echo "(Looks like you have stdio.h from BSD.)"
12453 case "$stdio_ptr" in
12454 '') stdio_ptr='((fp)->_p)'
12455 ptr_lval=$define
12456 ;;
12457 *) ptr_lval=$d_stdio_ptr_lval;;
12458 esac
12459 case "$stdio_cnt" in
12460 '') stdio_cnt='((fp)->_r)'
12461 cnt_lval=$define
12462 ;;
12463 *) cnt_lval=$d_stdio_cnt_lval;;
12464 esac
12465 case "$stdio_base" in
12466 '') stdio_base='((fp)->_ub._base ? (fp)->_ub._base : (fp)->_bf._base)';;
12467 esac
12468 case "$stdio_bufsiz" in
12469 '') stdio_bufsiz='((fp)->_ub._base ? (fp)->_ub._size : (fp)->_bf._size)';;
12470 esac
12471elif $contains '_IO_fpos_t' `./findhdr stdio.h` `./findhdr libio.h` >/dev/null 2>&1 ; then
b4eb6b3d
JH
12472 echo "(Looks like you have stdio.h from Linux.)"
12473 case "$stdio_ptr" in
12474 '') stdio_ptr='((fp)->_IO_read_ptr)'
12475 ptr_lval=$define
12476 ;;
12477 *) ptr_lval=$d_stdio_ptr_lval;;
12478 esac
12479 case "$stdio_cnt" in
12480 '') stdio_cnt='((fp)->_IO_read_end - (fp)->_IO_read_ptr)'
12481 cnt_lval=$undef
12482 ;;
12483 *) cnt_lval=$d_stdio_cnt_lval;;
12484 esac
12485 case "$stdio_base" in
12486 '') stdio_base='((fp)->_IO_read_base)';;
12487 esac
12488 case "$stdio_bufsiz" in
12489 '') stdio_bufsiz='((fp)->_IO_read_end - (fp)->_IO_read_base)';;
12490 esac
12491else
12492 case "$stdio_ptr" in
12493 '') stdio_ptr='((fp)->_ptr)'
12494 ptr_lval=$define
12495 ;;
12496 *) ptr_lval=$d_stdio_ptr_lval;;
12497 esac
12498 case "$stdio_cnt" in
12499 '') stdio_cnt='((fp)->_cnt)'
12500 cnt_lval=$define
12501 ;;
12502 *) cnt_lval=$d_stdio_cnt_lval;;
12503 esac
12504 case "$stdio_base" in
12505 '') stdio_base='((fp)->_base)';;
12506 esac
12507 case "$stdio_bufsiz" in
12508 '') stdio_bufsiz='((fp)->_cnt + (fp)->_ptr - (fp)->_base)';;
12509 esac
12510fi
80f36755 12511
b4eb6b3d
JH
12512: test whether _ptr and _cnt really work
12513echo "Checking how std your stdio is..." >&4
12514$cat >try.c <<EOP
12515#include <stdio.h>
12516#define FILE_ptr(fp) $stdio_ptr
12517#define FILE_cnt(fp) $stdio_cnt
12518int main() {
12519 FILE *fp = fopen("try.c", "r");
12520 char c = getc(fp);
12521 if (
12522 18 <= FILE_cnt(fp) &&
12523 strncmp(FILE_ptr(fp), "include <stdio.h>\n", 18) == 0
12524 )
12525 exit(0);
12526 exit(1);
12527}
12528EOP
12529val="$undef"
12530set try
5440bc8e
JH
12531if eval $compile && $to try.c; then
12532 if $run ./try; then
b4eb6b3d
JH
12533 echo "Your stdio acts pretty std."
12534 val="$define"
12535 else
12536 echo "Your stdio isn't very std."
12537 fi
12538else
12539 echo "Your stdio doesn't appear very std."
12540fi
12541$rm -f try.c try
12542set d_stdstdio
12543eval $setvar
12544
12545: Can _ptr be used as an lvalue?
12546case "$d_stdstdio$ptr_lval" in
12547$define$define) val=$define ;;
12548*) val=$undef ;;
12549esac
12550set d_stdio_ptr_lval
12551eval $setvar
12552
12553: Can _cnt be used as an lvalue?
12554case "$d_stdstdio$cnt_lval" in
12555$define$define) val=$define ;;
12556*) val=$undef ;;
12557esac
12558set d_stdio_cnt_lval
12559eval $setvar
12560
a7ffa9b9
NC
12561
12562: test whether setting _ptr sets _cnt as a side effect
12563d_stdio_ptr_lval_sets_cnt="$undef"
12564d_stdio_ptr_lval_nochange_cnt="$undef"
12565case "$d_stdio_ptr_lval$d_stdstdio" in
12566$define$define)
12567 echo "Checking to see what happens if we set the stdio ptr..." >&4
12568$cat >try.c <<EOP
12569#include <stdio.h>
12570/* Can we scream? */
12571/* Eat dust sed :-) */
c1d9e6fa 12572/* In the buffer space, no one can hear you scream. */
0bbfc344
JH
12573#define FILE_ptr(fp) $stdio_ptr
12574#define FILE_cnt(fp) $stdio_cnt
c1d9e6fa 12575#include <sys/types.h>
a7ffa9b9
NC
12576int main() {
12577 FILE *fp = fopen("try.c", "r");
c1d9e6fa 12578 int c;
a7ffa9b9
NC
12579 char *ptr;
12580 size_t cnt;
c1d9e6fa
JH
12581 if (!fp) {
12582 puts("Fail even to read");
12583 exit(1);
12584 }
12585 c = getc(fp); /* Read away the first # */
12586 if (c == EOF) {
12587 puts("Fail even to read");
12588 exit(1);
12589 }
a7ffa9b9
NC
12590 if (!(
12591 18 <= FILE_cnt(fp) &&
12592 strncmp(FILE_ptr(fp), "include <stdio.h>\n", 18) == 0
12593 )) {
12594 puts("Fail even to read");
12595 exit (1);
12596 }
c1d9e6fa
JH
12597 ptr = (char*) FILE_ptr(fp);
12598 cnt = (size_t)FILE_cnt(fp);
a7ffa9b9 12599
c1d9e6fa 12600 FILE_ptr(fp) += 42;
a7ffa9b9 12601
c1d9e6fa 12602 if ((char*)FILE_ptr(fp) != (ptr + 42)) {
a7ffa9b9
NC
12603 printf("Fail ptr check %p != %p", FILE_ptr(fp), (ptr + 42));
12604 exit (1);
12605 }
12606 if (FILE_cnt(fp) <= 20) {
12607 printf ("Fail (<20 chars to test)");
12608 exit (1);
12609 }
12610 if (strncmp(FILE_ptr(fp), "Eat dust sed :-) */\n", 20) != 0) {
12611 puts("Fail compare");
12612 exit (1);
12613 }
12614 if (cnt == FILE_cnt(fp)) {
12615 puts("Pass_unchanged");
12616 exit (0);
12617 }
12618 if (FILE_cnt(fp) == (cnt - 42)) {
12619 puts("Pass_changed");
12620 exit (0);
12621 }
12622 printf("Fail count was %d now %d\n", cnt, FILE_cnt(fp));
12623 return 1;
12624
12625}
12626EOP
12627 set try
5440bc8e
JH
12628 if eval $compile && $to try.c; then
12629 case `$run ./try` in
a7ffa9b9 12630 Pass_changed)
2e32dcfe 12631 echo "Increasing ptr in your stdio decreases cnt by the same amount. Good." >&4
a7ffa9b9
NC
12632 d_stdio_ptr_lval_sets_cnt="$define" ;;
12633 Pass_unchanged)
12634 echo "Increasing ptr in your stdio leaves cnt unchanged. Good." >&4
12635 d_stdio_ptr_lval_nochange_cnt="$define" ;;
12636 Fail*)
12637 echo "Increasing ptr in your stdio didn't do exactly what I expected. We'll not be doing that then." >&4 ;;
12638 *)
12639 echo "It appears attempting to set ptr in your stdio is a bad plan." >&4 ;;
12640 esac
12641 else
12642 echo "It seems we can't set ptr in your stdio. Nevermind." >&4
12643 fi
12644 $rm -f try.c try
12645 ;;
12646esac
12647
b4eb6b3d
JH
12648: see if _base is also standard
12649val="$undef"
12650case "$d_stdstdio" in
12651$define)
12652 $cat >try.c <<EOP
12653#include <stdio.h>
12654#define FILE_base(fp) $stdio_base
12655#define FILE_bufsiz(fp) $stdio_bufsiz
12656int main() {
12657 FILE *fp = fopen("try.c", "r");
12658 char c = getc(fp);
12659 if (
12660 19 <= FILE_bufsiz(fp) &&
12661 strncmp(FILE_base(fp), "#include <stdio.h>\n", 19) == 0
12662 )
12663 exit(0);
12664 exit(1);
12665}
12666EOP
12667 set try
5440bc8e
JH
12668 if eval $compile && $to try.c; then
12669 if $run ./try; then
b4eb6b3d
JH
12670 echo "And its _base field acts std."
12671 val="$define"
12672 else
12673 echo "But its _base field isn't std."
12674 fi
12675 else
12676 echo "However, it seems to be lacking the _base field."
12677 fi
12678 $rm -f try.c try
12679 ;;
12680esac
12681set d_stdiobase
12682eval $setvar
12683
12684$cat >&4 <<EOM
12685Checking how to access stdio streams by file descriptor number...
12686EOM
12687case "$stdio_stream_array" in
12688'') $cat >try.c <<EOCP
12689#include <stdio.h>
12690int main() {
12691 if (&STDIO_STREAM_ARRAY[fileno(stdin)] == stdin)
12692 printf("yes\n");
12693}
12694EOCP
12695 for s in _iob __iob __sF
12696 do
12697 set try -DSTDIO_STREAM_ARRAY=$s
12698 if eval $compile; then
5440bc8e 12699 case "`$run ./try`" in
b4eb6b3d
JH
12700 yes) stdio_stream_array=$s; break ;;
12701 esac
12702 fi
12703 done
12704 $rm -f try.* try$exe_ext
12705esac
12706case "$stdio_stream_array" in
12707'') $cat >&4 <<EOM
12708I can't figure out how to access stdio streams by file descriptor number.
12709EOM
12710 d_stdio_stream_array="$undef"
12711 ;;
12712*) $cat >&4 <<EOM
12713You can access stdio streams by file descriptor number by the $stdio_stream_array array.
12714EOM
12715 d_stdio_stream_array="$define"
12716 ;;
12717esac
12718
12719: see if strcoll exists
12720set strcoll d_strcoll
12721eval $inlibc
12722
12723: check for structure copying
12724echo " "
12725echo "Checking to see if your C compiler can copy structs..." >&4
12726$cat >try.c <<'EOCP'
12727int main()
12728{
12729 struct blurfl {
12730 int dyick;
12731 } foo, bar;
12732
12733 foo = bar;
12734}
12735EOCP
12736if $cc -c try.c >/dev/null 2>&1 ; then
12737 val="$define"
12738 echo "Yup, it can."
12739else
12740 val="$undef"
12741 echo "Nope, it can't."
12742fi
12743set d_strctcpy
12744eval $setvar
12745$rm -f try.*
12746
12747: see if strerror and/or sys_errlist[] exist
12748echo " "
12749if test "X$d_strerror" = X -o "X$d_syserrlst" = X; then
12750 if set strerror val -f d_strerror; eval $csym; $val; then
12751 echo 'strerror() found.' >&4
12752 d_strerror="$define"
12753 d_strerrm='strerror(e)'
12754 if set sys_errlist val -a d_syserrlst; eval $csym; $val; then
12755 echo "(You also have sys_errlist[], so we could roll our own strerror.)"
12756 d_syserrlst="$define"
12757 else
12758 echo "(Since you don't have sys_errlist[], sterror() is welcome.)"
12759 d_syserrlst="$undef"
12760 fi
12761 elif xxx=`./findhdr string.h`; test "$xxx" || xxx=`./findhdr strings.h`; \
12762 $contains '#[ ]*define.*strerror' "$xxx" >/dev/null 2>&1; then
12763 echo 'strerror() found in string header.' >&4
12764 d_strerror="$define"
12765 d_strerrm='strerror(e)'
12766 if set sys_errlist val -a d_syserrlst; eval $csym; $val; then
12767 echo "(Most probably, strerror() uses sys_errlist[] for descriptions.)"
12768 d_syserrlst="$define"
12769 else
12770 echo "(You don't appear to have any sys_errlist[], how can this be?)"
12771 d_syserrlst="$undef"
12772 fi
12773 elif set sys_errlist val -a d_syserrlst; eval $csym; $val; then
12774 echo "strerror() not found, but you have sys_errlist[] so we'll use that." >&4
12775 d_strerror="$undef"
12776 d_syserrlst="$define"
12777 d_strerrm='((e)<0||(e)>=sys_nerr?"unknown":sys_errlist[e])'
12778 else
12779 echo 'strerror() and sys_errlist[] NOT found.' >&4
12780 d_strerror="$undef"
12781 d_syserrlst="$undef"
12782 d_strerrm='"unknown"'
12783 fi
12784fi
12785
b3c85772
JH
12786: see if strftime exists
12787set strftime d_strftime
12788eval $inlibc
12789
b4eb6b3d
JH
12790: see if strtod exists
12791set strtod d_strtod
12792eval $inlibc
12793
12794: see if strtol exists
12795set strtol d_strtol
12796eval $inlibc
12797
12798: see if strtold exists
12799set strtold d_strtold
12800eval $inlibc
12801
12802: see if strtoll exists
12803set strtoll d_strtoll
12804eval $inlibc
12805
12806case "$d_longlong-$d_strtoll" in
12807"$define-$define")
12808 $cat <<EOM
12809Checking whether your strtoll() works okay...
12810EOM
12811 $cat >try.c <<'EOCP'
12812#include <errno.h>
12813#ifdef __hpux
12814#define strtoll __strtoll
12815#endif
e75931a7
YST
12816#ifdef __EMX__
12817#define strtoll _strtoll
12818#endif
b4eb6b3d
JH
12819#include <stdio.h>
12820extern long long int strtoll(char *s, char **, int);
12821static int bad = 0;
12822int check(char *s, long long ell, int een) {
12823 long long gll;
12824 errno = 0;
12825 gll = strtoll(s, 0, 10);
12826 if (!((gll == ell) && (errno == een)))
12827 bad++;
12828}
12829int main() {
12830 check(" 1", 1LL, 0);
12831 check(" 0", 0LL, 0);
12832 check("-1", -1LL, 0);
12833 check("-9223372036854775808", -9223372036854775808LL, 0);
12834 check("-9223372036854775808", -9223372036854775808LL, 0);
12835 check(" 9223372036854775807", 9223372036854775807LL, 0);
12836 check("-9223372036854775808", -9223372036854775808LL, 0);
12837 check(" 9223372036854775808", 9223372036854775807LL, ERANGE);
12838 check("-9223372036854775809", -9223372036854775808LL, ERANGE);
12839 if (!bad)
12840 printf("ok\n");
12841}
12842EOCP
12843 set try
12844 if eval $compile; then
5440bc8e 12845 yyy=`$run ./try`
e75931a7 12846 case "$yyy" in
b4eb6b3d
JH
12847 ok) echo "Your strtoll() seems to be working okay." ;;
12848 *) cat <<EOM >&4
12849Your strtoll() doesn't seem to be working okay.
12850EOM
12851 d_strtoll="$undef"
12852 ;;
69eadf66 12853 esac
e75931a7
YST
12854 else
12855 echo "(I can't seem to compile the test program--assuming it doesn't)"
12856 d_strtoll="$undef"
b4eb6b3d
JH
12857 fi
12858 ;;
12859esac
12860
28e5dec8
JH
12861: see if strtoq exists
12862set strtoq d_strtoq
12863eval $inlibc
12864
b4eb6b3d
JH
12865: see if strtoul exists
12866set strtoul d_strtoul
12867eval $inlibc
12868
d0e6d399
NC
12869case "$d_strtoul" in
12870"$define")
12871 $cat <<EOM
12872Checking whether your strtoul() works okay...
12873EOM
12874 $cat >try.c <<'EOCP'
12875#include <errno.h>
12876#include <stdio.h>
12877extern unsigned long int strtoul(char *s, char **, int);
12878static int bad = 0;
12879void check(char *s, unsigned long eul, int een) {
12880 unsigned long gul;
12881 errno = 0;
12882 gul = strtoul(s, 0, 10);
12883 if (!((gul == eul) && (errno == een)))
12884 bad++;
12885}
12886int main() {
12887 check(" 1", 1L, 0);
12888 check(" 0", 0L, 0);
12889EOCP
12890 case "$longsize" in
12891 8)
12892 $cat >>try.c <<'EOCP'
09c0d2c4
JH
12893 check("18446744073709551615", 18446744073709551615UL, 0);
12894 check("18446744073709551616", 18446744073709551615UL, ERANGE);
c11ecd62 12895#if 0 /* strtoul() for /^-/ strings is undefined. */
09c0d2c4 12896 check("-1", 18446744073709551615UL, 0);
d0e6d399
NC
12897 check("-18446744073709551614", 2, 0);
12898 check("-18446744073709551615", 1, 0);
09c0d2c4
JH
12899 check("-18446744073709551616", 18446744073709551615UL, ERANGE);
12900 check("-18446744073709551617", 18446744073709551615UL, ERANGE);
c11ecd62 12901#endif
d0e6d399
NC
12902EOCP
12903 ;;
12904 4)
12905 $cat >>try.c <<'EOCP'
12906 check("4294967295", 4294967295UL, 0);
12907 check("4294967296", 4294967295UL, ERANGE);
c11ecd62 12908#if 0 /* strtoul() for /^-/ strings is undefined. */
d0e6d399
NC
12909 check("-1", 4294967295UL, 0);
12910 check("-4294967294", 2, 0);
12911 check("-4294967295", 1, 0);
12912 check("-4294967296", 4294967295UL, ERANGE);
12913 check("-4294967297", 4294967295UL, ERANGE);
c11ecd62 12914#endif
d0e6d399
NC
12915EOCP
12916 ;;
12917 *)
12918: Should we write these tests to be more portable by sprintf-ing
12919: ~0 and then manipulating that char string as input for strtol?
12920 ;;
12921 esac
12922 $cat >>try.c <<'EOCP'
12923 if (!bad)
12924 printf("ok\n");
12925 return 0;
12926}
12927EOCP
12928 set try
12929 if eval $compile; then
5440bc8e 12930 case "`$run ./try`" in
d0e6d399
NC
12931 ok) echo "Your strtoul() seems to be working okay." ;;
12932 *) cat <<EOM >&4
12933Your strtoul() doesn't seem to be working okay.
12934EOM
12935 d_strtoul="$undef"
12936 ;;
12937 esac
12938 fi
12939 ;;
12940esac
12941
b4eb6b3d
JH
12942: see if strtoull exists
12943set strtoull d_strtoull
12944eval $inlibc
12945
12946case "$d_longlong-$d_strtoull" in
12947"$define-$define")
12948 $cat <<EOM
12949Checking whether your strtoull() works okay...
12950EOM
12951 $cat >try.c <<'EOCP'
12952#include <errno.h>
12953#ifdef __hpux
12954#define strtoull __strtoull
12955#endif
12956#include <stdio.h>
12957extern unsigned long long int strtoull(char *s, char **, int);
12958static int bad = 0;
12959int check(char *s, long long eull, int een) {
12960 long long gull;
12961 errno = 0;
12962 gull = strtoull(s, 0, 10);
12963 if (!((gull == eull) && (errno == een)))
12964 bad++;
12965}
12966int main() {
d0e6d399
NC
12967 check(" 1", 1LL, 0);
12968 check(" 0", 0LL, 0);
12969 check("18446744073709551615", 18446744073709551615ULL, 0);
12970 check("18446744073709551616", 18446744073709551615ULL, ERANGE);
c11ecd62 12971#if 0 /* strtoull() for /^-/ strings is undefined. */
d0e6d399
NC
12972 check("-1", 18446744073709551615ULL, 0);
12973 check("-18446744073709551614", 2LL, 0);
12974 check("-18446744073709551615", 1LL, 0);
12975 check("-18446744073709551616", 18446744073709551615ULL, ERANGE);
12976 check("-18446744073709551617", 18446744073709551615ULL, ERANGE);
c11ecd62 12977#endif
b4eb6b3d
JH
12978 if (!bad)
12979 printf("ok\n");
12980}
12981EOCP
12982 set try
12983 if eval $compile; then
5440bc8e 12984 case "`$run ./try`" in
b4eb6b3d
JH
12985 ok) echo "Your strtoull() seems to be working okay." ;;
12986 *) cat <<EOM >&4
12987Your strtoull() doesn't seem to be working okay.
12988EOM
12989 d_strtoull="$undef"
12990 ;;
12991 esac
12992 fi
12993 ;;
12994esac
12995
12996: see if strtouq exists
12997set strtouq d_strtouq
12998eval $inlibc
12999
d0e6d399
NC
13000case "$d_strtouq" in
13001"$define")
13002 $cat <<EOM
13003Checking whether your strtouq() works okay...
13004EOM
13005 $cat >try.c <<'EOCP'
13006#include <errno.h>
13007#include <stdio.h>
13008extern unsigned long long int strtouq(char *s, char **, int);
13009static int bad = 0;
13010void check(char *s, unsigned long long eull, int een) {
13011 unsigned long long gull;
13012 errno = 0;
13013 gull = strtouq(s, 0, 10);
13014 if (!((gull == eull) && (errno == een)))
13015 bad++;
13016}
13017int main() {
13018 check(" 1", 1LL, 0);
13019 check(" 0", 0LL, 0);
13020 check("18446744073709551615", 18446744073709551615ULL, 0);
13021 check("18446744073709551616", 18446744073709551615ULL, ERANGE);
c11ecd62 13022#if 0 /* strtouq() for /^-/ strings is undefined. */
d0e6d399
NC
13023 check("-1", 18446744073709551615ULL, 0);
13024 check("-18446744073709551614", 2LL, 0);
13025 check("-18446744073709551615", 1LL, 0);
13026 check("-18446744073709551616", 18446744073709551615ULL, ERANGE);
13027 check("-18446744073709551617", 18446744073709551615ULL, ERANGE);
c11ecd62 13028#endif
d0e6d399
NC
13029 if (!bad)
13030 printf("ok\n");
13031 return 0;
13032}
13033EOCP
13034 set try
13035 if eval $compile; then
5440bc8e 13036 case "`$run ./try`" in
d0e6d399
NC
13037 ok) echo "Your strtouq() seems to be working okay." ;;
13038 *) cat <<EOM >&4
13039Your strtouq() doesn't seem to be working okay.
13040EOM
13041 d_strtouq="$undef"
13042 ;;
13043 esac
13044 fi
13045 ;;
13046esac
13047
b4eb6b3d
JH
13048: see if strxfrm exists
13049set strxfrm d_strxfrm
13050eval $inlibc
13051
13052: see if symlink exists
13053set symlink d_symlink
13054eval $inlibc
13055
13056: see if syscall exists
13057set syscall d_syscall
13058eval $inlibc
13059
2ef53570
JH
13060: see if prototype for syscall is available
13061echo " "
13062set d_syscallproto syscall $i_unistd unistd.h
13063eval $hasproto
13064
b4eb6b3d
JH
13065: see if sysconf exists
13066set sysconf d_sysconf
13067eval $inlibc
13068
13069: see if system exists
13070set system d_system
13071eval $inlibc
13072
13073: see if tcgetpgrp exists
13074set tcgetpgrp d_tcgetpgrp
13075eval $inlibc
13076
13077: see if tcsetpgrp exists
13078set tcsetpgrp d_tcsetpgrp
13079eval $inlibc
13080
13081: see if prototype for telldir is available
13082echo " "
13083set d_telldirproto telldir $i_systypes sys/types.h $i_dirent dirent.h
13084eval $hasproto
13085
13086: see if this is a sys/times.h system
13087set sys/times.h i_systimes
13088eval $inhdr
13089
13090: see if times exists
13091echo " "
13092if set times val -f d_times; eval $csym; $val; then
13093 echo 'times() found.' >&4
13094 d_times="$define"
13095 inc=''
13096 case "$i_systimes" in
13097 "$define") inc='sys/times.h';;
13098 esac
13099 rp="What is the type returned by times() on this system?"
13100 set clock_t clocktype long stdio.h sys/types.h $inc
13101 eval $typedef_ask
13102else
13103 echo 'times() NOT found, hope that will do.' >&4
13104 d_times="$undef"
13105 clocktype='int'
13106fi
13107
13108: see if truncate exists
13109set truncate d_truncate
13110eval $inlibc
13111
13112: see if tzname[] exists
13113echo " "
13114if set tzname val -a d_tzname; eval $csym; $val; then
13115 val="$define"
13116 echo 'tzname[] found.' >&4
13117else
13118 val="$undef"
13119 echo 'tzname[] NOT found.' >&4
13120fi
13121set d_tzname
13122eval $setvar
13123
4e0554ec
JH
13124case "$osname" in
13125next|rhapsody|darwin) multiarch="$define" ;;
13126esac
13127case "$multiarch" in
13128''|[nN]*) multiarch="$undef" ;;
13129esac
13130
13131: check for ordering of bytes in a long
13132echo " "
5440bc8e 13133case "$usecrosscompile$multiarch" in
4e0554ec
JH
13134*$define*)
13135 $cat <<EOM
13136You seem to be either cross-compiling or doing a multiarchitecture build,
13137skipping the byteorder check.
13138
13139EOM
5440bc8e 13140 byteorder='ffff'
4e0554ec
JH
13141 ;;
13142*)
13143 case "$byteorder" in
13144 '')
13145 $cat <<'EOM'
13146In the following, larger digits indicate more significance. A big-endian
13147machine like a Pyramid or a Motorola 680?0 chip will come out to 4321. A
13148little-endian machine like a Vax or an Intel 80?86 chip would be 1234. Other
13149machines may have weird orders like 3412. A Cray will report 87654321,
13150an Alpha will report 12345678. If the test program works the default is
13151probably right.
13152I'm now running the test program...
13153EOM
13154 $cat >try.c <<'EOCP'
13155#include <stdio.h>
13156int main()
13157{
13158 int i;
13159 union {
13160 unsigned long l;
13161 char c[sizeof(long)];
13162 } u;
13163
13164 if (sizeof(long) > 4)
13165 u.l = (0x08070605L << 32) | 0x04030201L;
13166 else
13167 u.l = 0x04030201L;
13168 for (i = 0; i < sizeof(long); i++)
13169 printf("%c", u.c[i]+'0');
13170 printf("\n");
13171 exit(0);
13172}
13173EOCP
13174 xxx_prompt=y
13175 set try
13176 if eval $compile && ./try > /dev/null; then
5440bc8e 13177 dflt=`$run ./try`
4e0554ec
JH
13178 case "$dflt" in
13179 [1-4][1-4][1-4][1-4]|12345678|87654321)
13180 echo "(The test program ran ok.)"
13181 echo "byteorder=$dflt"
13182 xxx_prompt=n
13183 ;;
13184 ????|????????) echo "(The test program ran ok.)" ;;
13185 *) echo "(The test program didn't run right for some reason.)" ;;
13186 esac
13187 else
13188 dflt='4321'
13189 cat <<'EOM'
13190(I can't seem to compile the test program. Guessing big-endian...)
13191EOM
13192 fi
13193 case "$xxx_prompt" in
13194 y)
13195 rp="What is the order of bytes in a long?"
13196 . ./myread
13197 byteorder="$ans"
13198 ;;
13199 *) byteorder=$dflt
13200 ;;
13201 esac
13202 ;;
13203 esac
13204 $rm -f try.c try
13205 ;;
13206esac
13207
13208
13209$cat <<EOM
13210
13211Checking to see whether you can access character data unalignedly...
13212EOM
13213$cat >try.c <<EOCP
13214#include <stdio.h>
13215#define U32 $u32type
13216#define BYTEORDER $byteorder
13217int main() {
13218#if BYTEORDER == 0x1234 || BYTEORDER == 0x4321
13219 U8 buf[] = "\0\0\0\1\0\0\0\0";
13220 U32 *up;
13221 int i;
13222
13223 if (sizeof(U32) != 4) {
13224 printf("sizeof(U32) is not 4, but %d\n", sizeof(U32));
13225 exit(1);
13226 }
13227
13228 fflush(stdout);
13229
13230 for (i = 0; i < 4; i++) {
13231 up = (U32*)(buf + i);
13232 if (! ((*up == 1 << (8*i)) || /* big-endian */
13233 (*up == 1 << (8*(3-i))) /* little-endian */
13234 )
13235 )
13236 {
13237 printf("read failed (%x)\n", *up);
13238 exit(2);
13239 }
13240 }
13241
13242 /* write test */
13243 for (i = 0; i < 4; i++) {
13244 up = (U32*)(buf + i);
13245 *up = 0xBeef;
13246 if (*up != 0xBeef) {
13247 printf("write failed (%x)\n", *up);
13248 exit(3);
13249 }
13250 }
13251
13252 exit(0);
13253#else
13254 printf("1\n");
13255 exit(1);
13256#endif
13257 return 0;
13258}
13259EOCP
13260set try
13261if eval $compile_ok; then
5440bc8e
JH
13262 echo "(Testing for character data alignment may dump core.)" >&4
13263 $run ./try 2>&1 >/dev/null
4e0554ec
JH
13264 case "$?" in
13265 0) cat >&4 <<EOM
13266You can access character data pretty unalignedly.
13267EOM
13268 d_u32align="$undef"
13269 ;;
13270 *) cat >&4 <<EOM
13271It seems that you must access character data in an aligned manner.
13272EOM
13273 d_u32align="$define"
13274 ;;
13275 esac
13276 $rm -f core core.try.* try.core
13277else
13278 rp='Can you access character data at unaligned addresses?'
13279 dflt='n'
13280 . ./myread
13281 case "$ans" in
13282 [yY]*) d_u32align="$undef" ;;
13283 *) d_u32align="$define" ;;
13284 esac
13285fi
13286
13287: see if ualarm exists
13288set ualarm d_ualarm
13289eval $inlibc
13290
b4eb6b3d
JH
13291: see if umask exists
13292set umask d_umask
13293eval $inlibc
13294
4e0554ec
JH
13295: see if usleep exists
13296set usleep d_usleep
13297eval $inlibc
13298
2ef53570
JH
13299: see if prototype for usleep is available
13300echo " "
13301set d_usleepproto usleep $i_unistd unistd.h
13302eval $hasproto
13303
b4eb6b3d
JH
13304: see if ustat exists
13305set ustat d_ustat
13306eval $inlibc
13307
13308: backward compatibility for d_hvfork
13309if test X$d_hvfork != X; then
13310 d_vfork="$d_hvfork"
13311 d_hvfork=''
13312fi
13313: see if there is a vfork
13314val=''
13315set vfork val
13316eval $inlibc
13317
13318: Ok, but do we want to use it. vfork is reportedly unreliable in
13319: perl on Solaris 2.x, and probably elsewhere.
13320case "$val" in
13321$define)
13322 echo " "
13323 case "$usevfork" in
13324 false) dflt='n';;
13325 *) dflt='y';;
13326 esac
13327 cat <<'EOM'
13328
13329Perl can only use a vfork() that doesn't suffer from strict
13330restrictions on calling functions or modifying global data in
13331the child. For example, glibc-2.1 contains such a vfork()
13332that is unsuitable. If your system provides a proper fork()
13333call, chances are that you do NOT want perl to use vfork().
13334
13335EOM
13336 rp="Do you still want to use vfork()?"
13337 . ./myread
13338 case "$ans" in
13339 y|Y) ;;
13340 *)
13341 echo "Ok, we won't use vfork()."
13342 val="$undef"
13343 ;;
13344 esac
13345 ;;
13346esac
13347set d_vfork
13348eval $setvar
13349case "$d_vfork" in
13350$define) usevfork='true';;
13351*) usevfork='false';;
13352esac
13353
13354: see if this is an sysdir system
13355set sys/dir.h i_sysdir
13356eval $inhdr
13357
13358: see if this is an sysndir system
13359set sys/ndir.h i_sysndir
13360eval $inhdr
13361
13362: see if closedir exists
13363set closedir d_closedir
13364eval $inlibc
13365
13366case "$d_closedir" in
13367"$define")
13368 echo " "
13369 echo "Checking whether closedir() returns a status..." >&4
5440bc8e 13370 cat > try.c <<EOM
b4eb6b3d
JH
13371#$i_dirent I_DIRENT /**/
13372#$i_sysdir I_SYS_DIR /**/
13373#$i_sysndir I_SYS_NDIR /**/
13374#$i_systypes I_SYS_TYPES /**/
13375
13376#if defined(I_SYS_TYPES)
13377#include <sys/types.h>
13378#endif
13379#if defined(I_DIRENT)
13380#include <dirent.h>
13381#if defined(NeXT) && defined(I_SYS_DIR) /* NeXT needs dirent + sys/dir.h */
13382#include <sys/dir.h>
13383#endif
13384#else
13385#ifdef I_SYS_NDIR
13386#include <sys/ndir.h>
13387#else
13388#ifdef I_SYS_DIR
13389#ifdef hp9000s500
13390#include <ndir.h> /* may be wrong in the future */
13391#else
13392#include <sys/dir.h>
13393#endif
13394#endif
13395#endif
13396#endif
13397int main() { return closedir(opendir(".")); }
13398EOM
5440bc8e 13399 set try
b4eb6b3d 13400 if eval $compile_ok; then
5440bc8e 13401 if $run ./try > /dev/null 2>&1 ; then
b4eb6b3d
JH
13402 echo "Yes, it does."
13403 val="$undef"
13404 else
13405 echo "No, it doesn't."
13406 val="$define"
13407 fi
13408 else
13409 echo "(I can't seem to compile the test program--assuming it doesn't)"
13410 val="$define"
13411 fi
13412 ;;
13413*)
13414 val="$undef";
13415 ;;
13416esac
13417set d_void_closedir
13418eval $setvar
5440bc8e 13419$rm -f try try.*
b4eb6b3d
JH
13420: see if there is a wait4
13421set wait4 d_wait4
13422eval $inlibc
13423
13424: see if waitpid exists
13425set waitpid d_waitpid
13426eval $inlibc
13427
13428: see if wcstombs exists
13429set wcstombs d_wcstombs
13430eval $inlibc
13431
13432: see if wctomb exists
13433set wctomb d_wctomb
13434eval $inlibc
13435
4e0554ec
JH
13436: see if writev exists
13437set writev d_writev
13438eval $inlibc
13439
b4eb6b3d
JH
13440: preserve RCS keywords in files with variable substitution, grrr
13441Date='$Date'
13442Id='$Id'
13443Log='$Log'
13444RCSfile='$RCSfile'
13445Revision='$Revision'
13446
b4eb6b3d
JH
13447: check for alignment requirements
13448echo " "
5440bc8e 13449case "$usecrosscompile$multiarch" in
b4eb6b3d
JH
13450*$define*)
13451 $cat <<EOM
13452You seem to be either cross-compiling or doing a multiarchitecture build,
13453skipping the memory alignment check.
13454
13455EOM
13456 case "$alignbytes" in
13457 '') alignbytes=8 ;;
13458 esac
13459 ;;
13460*)
13461 case "$alignbytes" in
13462 '') echo "Checking alignment constraints..." >&4
13463 if $test "X$uselongdouble" = Xdefine -a "X$d_longdbl" = Xdefine; then
13464 $cat >try.c <<'EOCP'
13465typedef long double NV;
13466EOCP
13467 else
13468 $cat >try.c <<'EOCP'
13469typedef double NV;
13470EOCP
13471 fi
13472 $cat >>try.c <<'EOCP'
13473#include <stdio.h>
13474struct foobar {
13475 char foo;
13476 NV bar;
13477} try_algn;
13478int main()
13479{
13480 printf("%d\n", (int)((char *)&try_algn.bar - (char *)&try_algn.foo));
13481 return(0);
13482}
13483EOCP
13484 set try
13485 if eval $compile_ok; then
5440bc8e 13486 dflt=`$run ./try`
b4eb6b3d
JH
13487 else
13488 dflt='8'
13489 echo "(I can't seem to compile the test program...)"
13490 fi
13491 ;;
13492 *) dflt="$alignbytes"
13493 ;;
13494 esac
13495 rp="Doubles must be aligned on a how-many-byte boundary?"
13496 . ./myread
13497 alignbytes="$ans"
13498 $rm -f try.c try
13499 ;;
13500esac
13501
13502
13503: set the base revision
13504baserev=5.0
13505
b4eb6b3d
JH
13506: how do we catenate cpp tokens here?
13507echo " "
13508echo "Checking to see how your cpp does stuff like catenate tokens..." >&4
13509$cat >cpp_stuff.c <<'EOCP'
13510#define RCAT(a,b)a/**/b
13511#define ACAT(a,b)a ## b
13512RCAT(Rei,ser)
13513ACAT(Cir,cus)
13514EOCP
13515$cppstdin $cppflags $cppminus <cpp_stuff.c >cpp_stuff.out 2>&1
13516if $contains 'Circus' cpp_stuff.out >/dev/null 2>&1; then
13517 echo "Oh! Smells like ANSI's been here." >&4
13518 echo "We can catify or stringify, separately or together!"
13519 cpp_stuff=42
13520elif $contains 'Reiser' cpp_stuff.out >/dev/null 2>&1; then
13521 echo "Ah, yes! The good old days!" >&4
13522 echo "However, in the good old days we don't know how to stringify and"
13523 echo "catify at the same time."
13524 cpp_stuff=1
13525else
13526 $cat >&4 <<EOM
13527Hmm, I don't seem to be able to catenate tokens with your cpp. You're going
13528to have to edit the values of CAT[2-5] in config.h...
13529EOM
13530 cpp_stuff="/* Help! How do we handle cpp_stuff? */*/"
13531fi
13532$rm -f cpp_stuff.*
13533
13534: see if this is a db.h system
13535set db.h i_db
13536eval $inhdr
13537
13538case "$i_db" in
13539$define)
13540 : Check db version.
13541 echo " "
13542 echo "Checking Berkeley DB version ..." >&4
13543 $cat >try.c <<EOCP
13544#$d_const HASCONST
13545#ifndef HASCONST
13546#define const
13547#endif
13548#include <sys/types.h>
13549#include <stdio.h>
13550#include <db.h>
640374d0 13551int main(int argc, char *argv[])
b4eb6b3d
JH
13552{
13553#ifdef DB_VERSION_MAJOR /* DB version >= 2 */
13554 int Major, Minor, Patch ;
13555 unsigned long Version ;
13556 (void)db_version(&Major, &Minor, &Patch) ;
640374d0
JH
13557 if (argc == 2) {
13558 printf("%d %d %d %d %d %d\n",
13559 DB_VERSION_MAJOR, DB_VERSION_MINOR, DB_VERSION_PATCH,
13560 Major, Minor, Patch);
13561 exit(0);
13562 }
13563 printf("You have Berkeley DB Version 2 or greater.\n");
b4eb6b3d
JH
13564
13565 printf("db.h is from Berkeley DB Version %d.%d.%d\n",
13566 DB_VERSION_MAJOR, DB_VERSION_MINOR, DB_VERSION_PATCH);
13567 printf("libdb is from Berkeley DB Version %d.%d.%d\n",
13568 Major, Minor, Patch) ;
13569
13570 /* check that db.h & libdb are compatible */
13571 if (DB_VERSION_MAJOR != Major || DB_VERSION_MINOR != Minor || DB_VERSION_PATCH != Patch) {
640374d0 13572 printf("db.h and libdb are incompatible.\n") ;
b4eb6b3d
JH
13573 exit(3);
13574 }
13575
640374d0 13576 printf("db.h and libdb are compatible.\n") ;
b4eb6b3d
JH
13577
13578 Version = DB_VERSION_MAJOR * 1000000 + DB_VERSION_MINOR * 1000
13579 + DB_VERSION_PATCH ;
13580
13581 /* needs to be >= 2.3.4 */
13582 if (Version < 2003004) {
13583 /* if (DB_VERSION_MAJOR == 2 && DB_VERSION_MINOR == 0 && DB_VERSION_PATCH < 5) { */
640374d0 13584 printf("Perl needs Berkeley DB 2.3.4 or greater.\n") ;
b4eb6b3d
JH
13585 exit(2);
13586 }
13587
13588 exit(0);
13589#else
13590#if defined(_DB_H_) && defined(BTREEMAGIC) && defined(HASHMAGIC)
640374d0
JH
13591 if (argc == 2) {
13592 printf("1 0 0\n");
13593 exit(0);
13594 }
13595 printf("You have Berkeley DB Version 1.\n");
b4eb6b3d
JH
13596 exit(0); /* DB version < 2: the coast is clear. */
13597#else
13598 exit(1); /* <db.h> not Berkeley DB? */
13599#endif
13600#endif
13601}
13602EOCP
13603 set try
5440bc8e 13604 if eval $compile_ok && $run ./try; then
b4eb6b3d 13605 echo 'Looks OK.' >&4
5440bc8e 13606 set `$run ./try 1`
640374d0
JH
13607 db_version_major=$1
13608 db_version_minor=$2
13609 db_version_patch=$3
b4eb6b3d
JH
13610 else
13611 echo "I can't use Berkeley DB with your <db.h>. I'll disable Berkeley DB." >&4
13612 i_db=$undef
13613 case " $libs " in
13614 *"-ldb "*)
13615 : Remove db from list of libraries to use
13616 echo "Removing unusable -ldb from library list" >&4
13617 set `echo X $libs | $sed -e 's/-ldb / /' -e 's/-ldb$//'`
13618 shift
13619 libs="$*"
13620 echo "libs = $libs" >&4
13621 ;;
13622 esac
13623 fi
13624 $rm -f try.*
13625 ;;
13626esac
13627
13628case "$i_db" in
13629define)
13630 : Check the return type needed for hash
13631 echo " "
13632 echo "Checking return type needed for hash for Berkeley DB ..." >&4
13633 $cat >try.c <<EOCP
13634#$d_const HASCONST
13635#ifndef HASCONST
13636#define const
13637#endif
13638#include <sys/types.h>
13639#include <db.h>
13640
13641#ifndef DB_VERSION_MAJOR
13642u_int32_t hash_cb (ptr, size)
13643const void *ptr;
13644size_t size;
13645{
13646}
13647HASHINFO info;
13648int main()
13649{
13650 info.hash = hash_cb;
13651}
13652#endif
13653EOCP
13654 if $cc $ccflags -c try.c >try.out 2>&1 ; then
13655 if $contains warning try.out >>/dev/null 2>&1 ; then
13656 db_hashtype='int'
13657 else
13658 db_hashtype='u_int32_t'
13659 fi
13660 else
13661 : XXX Maybe we should just give up here.
13662 db_hashtype=u_int32_t
13663 $cat try.out >&4
13664 echo "Help: I can't seem to compile the db test program." >&4
13665 echo "Something's wrong, but I'll assume you use $db_hashtype." >&4
13666 fi
13667 $rm -f try.*
13668 echo "Your version of Berkeley DB uses $db_hashtype for hash."
13669 ;;
13670*) db_hashtype=u_int32_t
13671 ;;
13672esac
13673case "$i_db" in
13674define)
13675 : Check the return type needed for prefix
13676 echo " "
13677 echo "Checking return type needed for prefix for Berkeley DB ..." >&4
13678 cat >try.c <<EOCP
13679#$d_const HASCONST
13680#ifndef HASCONST
13681#define const
13682#endif
13683#include <sys/types.h>
13684#include <db.h>
13685
13686#ifndef DB_VERSION_MAJOR
13687size_t prefix_cb (key1, key2)
13688const DBT *key1;
13689const DBT *key2;
13690{
13691}
13692BTREEINFO info;
13693int main()
13694{
13695 info.prefix = prefix_cb;
13696}
13697#endif
13698EOCP
13699 if $cc $ccflags -c try.c >try.out 2>&1 ; then
13700 if $contains warning try.out >>/dev/null 2>&1 ; then
13701 db_prefixtype='int'
13702 else
13703 db_prefixtype='size_t'
13704 fi
13705 else
13706 db_prefixtype='size_t'
13707 : XXX Maybe we should just give up here.
13708 $cat try.out >&4
13709 echo "Help: I can't seem to compile the db test program." >&4
13710 echo "Something's wrong, but I'll assume you use $db_prefixtype." >&4
13711 fi
13712 $rm -f try.*
13713 echo "Your version of Berkeley DB uses $db_prefixtype for prefix."
13714 ;;
13715*) db_prefixtype='size_t'
13716 ;;
13717esac
13718
b4eb6b3d
JH
13719
13720: How can we generate normalized random numbers ?
13721echo " "
13722echo "Looking for a random number function..." >&4
13723case "$randfunc" in
13724'')
13725 if set drand48 val -f; eval $csym; $val; then
13726 dflt="drand48"
13727 echo "Good, found drand48()." >&4
13728 elif set random val -f; eval $csym; $val; then
13729 dflt="random"
13730 echo "OK, found random()." >&4
13731 else
13732 dflt="rand"
13733 echo "Yick, looks like I have to use rand()." >&4
13734 fi
13735 echo " "
13736 ;;
13737*)
13738 dflt="$randfunc"
13739 ;;
13740esac
13741cont=true
13742
13743case "$ccflags" in
13744*-Dmy_rand=*|*-Dmy_srand=*)
13745 echo "Removing obsolete -Dmy_rand, -Dmy_srand, and -Drandbits from ccflags." >&4
13746 ccflags="`echo $ccflags | sed -e 's/-Dmy_rand=random/ /'`"
13747 ccflags="`echo $ccflags | sed -e 's/-Dmy_srand=srandom/ /'`"
13748 ccflags="`echo $ccflags | sed -e 's/-Drandbits=[0-9][0-9]*/ /'`"
13749 ;;
13750esac
13751
13752while $test "$cont"; do
13753 rp="Use which function to generate random numbers?"
13754 . ./myread
13755 if $test "$ans" = "$dflt"; then
13756 : null
13757 else
13758 randbits=''
13759 fi
13760 randfunc="$ans"
13761 if set $ans val -f; eval $csym; $val; then
13762 cont=''
13763 else
13764 dflt=y
13765 rp="I cannot find function $ans. Use that name anyway?"
13766 . ./myread
13767 dflt=rand
13768 case "$ans" in
13769 [yY]*) cont='';;
13770 esac
13771 fi
13772 case "$cont" in
13773 '')
13774 case "$randfunc" in
13775 drand48)
13776 drand01="drand48()"
13777 seedfunc="srand48"
13778 randbits=48
13779 randseedtype=long
13780 ;;
13781 rand|random)
13782 case "$randbits" in
13783 '')
13784echo "Checking to see how many bits your $randfunc() function produces..." >&4
13785 $cat >try.c <<EOCP
13786#$i_unistd I_UNISTD
13787#$i_stdlib I_STDLIB
13788#include <stdio.h>
13789#ifdef I_UNISTD
13790# include <unistd.h>
13791#endif
13792#ifdef I_STDLIB
13793# include <stdlib.h>
13794#endif
13795int main()
13796{
13797 register int i;
13798 register unsigned long tmp;
13799 register unsigned long max = 0L;
13800
13801 for (i = 1000; i; i--) {
13802 tmp = (unsigned long) $randfunc();
13803 if (tmp > max) max = tmp;
13804 }
13805 for (i = 0; max; i++)
13806 max /= 2;
13807 printf("%d\n",i);
13808}
13809EOCP
13810 set try
13811 if eval $compile_ok; then
13812 dflt=`try`
13813 else
13814 dflt='?'
13815 echo "(I can't seem to compile the test program...)"
13816 fi
13817 ;;
13818 *)
13819 dflt="$randbits"
13820 ;;
13821 esac
13822 rp="How many bits does your $randfunc() function produce?"
13823 . ./myread
13824 randbits="$ans"
13825 $rm -f try.c try
13826 drand01="($randfunc() / (double) ((unsigned long)1 << $randbits))"
13827 seedfunc="s$randfunc"
13828 randseedtype=unsigned
13829 ;;
13830 *)
13831 dflt="31"
13832 rp="How many bits does your $randfunc() function produce?"
13833 . ./myread
13834 randbits="$ans"
13835 seedfunc="s$randfunc"
13836 drand01="($randfunc() / (double) ((unsigned long)1 << $randbits))"
13837 if set $seedfunc val -f; eval $csym; $val; then
13838 echo "(Using $seedfunc() to seed random generator)"
13839 else
13840 echo "(Warning: no $seedfunc() to seed random generator)"
13841 seedfunc=rand
13842 fi
13843 randseedtype=unsigned
13844 ;;
13845 esac
13846 ;;
13847 esac
13848done
13849
13850echo " "
13851echo "Determining whether or not we are on an EBCDIC system..." >&4
5440bc8e 13852$cat >try.c <<'EOM'
b4eb6b3d
JH
13853int main()
13854{
13855 if ('M'==0xd4) return 0;
13856 return 1;
13857}
13858EOM
13859
13860val=$undef
5440bc8e 13861set try
b4eb6b3d 13862if eval $compile_ok; then
5440bc8e 13863 if $run ./try; then
b4eb6b3d
JH
13864 echo "You seem to speak EBCDIC." >&4
13865 val="$define"
13866 else
5440bc8e 13867 echo "Nope, no EBCDIC, probably ASCII or some ISO Latin. Or UTF-8." >&4
b4eb6b3d
JH
13868 fi
13869else
13870 echo "I'm unable to compile the test program." >&4
13871 echo "I'll assume ASCII or some ISO Latin. Or UTF8." >&4
13872fi
5440bc8e 13873$rm -f try try.*
b4eb6b3d
JH
13874set ebcdic
13875eval $setvar
13876
13877echo " "
13878$cat >&4 <<EOM
13879Checking how to flush all pending stdio output...
13880EOM
13881# I only know how to find the first 32 possibly open files on SunOS.
13882# See also hints/sunos_4_1.sh and util.c --AD
13883case "$osname" in
13884sunos) $echo '#define PERL_FFLUSH_ALL_FOPEN_MAX 32' > try.c ;;
13885esac
13886$cat >>try.c <<EOCP
13887#include <stdio.h>
13888#$i_unistd I_UNISTD
13889#ifdef I_UNISTD
13890# include <unistd.h>
13891#endif
13892#$d_sysconf HAS_SYSCONF
13893#$d_stdio_stream_array HAS_STDIO_STREAM_ARRAY
13894#ifdef HAS_STDIO_STREAM_ARRAY
13895# define STDIO_STREAM_ARRAY $stdio_stream_array
13896#endif
13897int main() {
5440bc8e
JH
13898 FILE* p;
13899 unlink("try.out");
13900 p = fopen("try.out", "w");
b4eb6b3d
JH
13901#ifdef TRY_FPUTC
13902 fputc('x', p);
13903#else
13904# ifdef TRY_FPRINTF
13905 fprintf(p, "x");
13906# endif
13907#endif
13908#ifdef TRY_FFLUSH_NULL
13909 fflush(NULL);
13910#endif
13911#ifdef TRY_FFLUSH_ALL
13912 {
13913 long open_max = -1;
13914# ifdef PERL_FFLUSH_ALL_FOPEN_MAX
13915 open_max = PERL_FFLUSH_ALL_FOPEN_MAX;
13916# else
13917# if defined(HAS_SYSCONF) && defined(_SC_OPEN_MAX)
13918 open_max = sysconf(_SC_OPEN_MAX);
13919# else
13920# ifdef FOPEN_MAX
13921 open_max = FOPEN_MAX;
13922# else
13923# ifdef OPEN_MAX
13924 open_max = OPEN_MAX;
13925# else
13926# ifdef _NFILE
13927 open_max = _NFILE;
13928# endif
13929# endif
13930# endif
13931# endif
13932# endif
13933# ifdef HAS_STDIO_STREAM_ARRAY
13934 if (open_max > 0) {
13935 long i;
13936 for (i = 0; i < open_max; i++)
13937 if (STDIO_STREAM_ARRAY[i]._file >= 0 &&
13938 STDIO_STREAM_ARRAY[i]._file < open_max &&
13939 STDIO_STREAM_ARRAY[i]._flag)
13940 fflush(&STDIO_STREAM_ARRAY[i]);
13941 }
13942 }
13943# endif
13944#endif
13945 _exit(42);
13946}
13947EOCP
13948: first we have to find out how _not_ to flush
5440bc8e 13949$to try.c
b4eb6b3d
JH
13950if $test "X$fflushNULL" = X -o "X$fflushall" = X; then
13951 output=''
13952 set try -DTRY_FPUTC
13953 if eval $compile; then
fbe73d74 13954 $run ./try 2>/dev/null
28f5ac64 13955 code="$?"
5440bc8e 13956 $from try.out
28f5ac64 13957 if $test ! -s try.out -a "X$code" = X42; then
b4eb6b3d
JH
13958 output=-DTRY_FPUTC
13959 fi
13960 fi
13961 case "$output" in
13962 '')
13963 set try -DTRY_FPRINTF
b4eb6b3d 13964 if eval $compile; then
fbe73d74 13965 $run ./try 2>/dev/null
28f5ac64 13966 code="$?"
5440bc8e 13967 $from try.out
28f5ac64 13968 if $test ! -s try.out -a "X$code" = X42; then
b4eb6b3d
JH
13969 output=-DTRY_FPRINTF
13970 fi
13971 fi
13972 ;;
13973 esac
13974fi
13975: check for fflush NULL behaviour
13976case "$fflushNULL" in
13977'') set try -DTRY_FFLUSH_NULL $output
13978 if eval $compile; then
5440bc8e 13979 $run ./try 2>/dev/null
b4eb6b3d 13980 code="$?"
5440bc8e 13981 $from try.out
b4eb6b3d
JH
13982 if $test -s try.out -a "X$code" = X42; then
13983 fflushNULL="`$cat try.out`"
13984 else
13985 if $test "X$code" != X42; then
13986 $cat >&4 <<EOM
13987(If this test failed, don't worry, we'll try another method shortly.)
13988EOM
13989 fi
13990 fi
13991 fi
13992 $rm -f core try.core core.try.*
13993 case "$fflushNULL" in
13994 x) $cat >&4 <<EOM
13995Your fflush(NULL) works okay for output streams.
13996Let's see if it clobbers input pipes...
13997EOM
13998# As of mid-March 2000 all versions of Solaris appear to have a stdio
13999# bug that improperly flushes the input end of pipes. So we avoid the
14000# autoflush on fork/system/exec support for now. :-(
14001$cat >tryp.c <<EOCP
14002#include <stdio.h>
14003int
14004main(int argc, char **argv)
14005{
14006 char buf[1024];
14007 int i;
14008 char *bp = buf;
14009 while (1) {
14010 while ((i = getc(stdin)) != -1
14011 && (*bp++ = i) != '\n'
14012 && bp < &buf[1024])
14013 /* DO NOTHING */ ;
14014 *bp = '\0';
14015 fprintf(stdout, "%s", buf);
14016 fflush(NULL);
14017 if (i == -1)
14018 return 0;
14019 bp = buf;
14020 }
14021}
14022EOCP
14023 fflushNULL="$define"
14024 set tryp
14025 if eval $compile; then
14026 $rm -f tryp.out
5440bc8e 14027 $cat tryp.c | $run ./tryp 2>/dev/null > tryp.out
b4eb6b3d
JH
14028 if cmp tryp.c tryp.out >/dev/null 2>&1; then
14029 $cat >&4 <<EOM
14030fflush(NULL) seems to behave okay with input streams.
14031EOM
14032 fflushNULL="$define"
14033 else
14034 $cat >&4 <<EOM
14035Ouch, fflush(NULL) clobbers input pipes! We will not use it.
14036EOM
14037 fflushNULL="$undef"
14038 fi
14039 fi
14040 $rm -f core tryp.c tryp.core core.tryp.*
14041 ;;
14042 '') $cat >&4 <<EOM
14043Your fflush(NULL) isn't working (contrary to ANSI C).
14044EOM
14045 fflushNULL="$undef"
14046 ;;
14047 *) $cat >&4 <<EOM
14048Cannot figure out whether your fflush(NULL) works or not.
14049I'm assuming it doesn't (contrary to ANSI C).
14050EOM
14051 fflushNULL="$undef"
14052 ;;
14053 esac
14054 ;;
14055$define|true|[yY]*)
14056 fflushNULL="$define"
14057 ;;
14058*)
14059 fflushNULL="$undef"
14060 ;;
14061esac
14062: check explicit looping only if NULL did not work, and if the pipe
14063: bug does not show up on an explicit flush too
14064case "$fflushNULL" in
14065"$undef")
14066 $cat >tryp.c <<EOCP
14067#include <stdio.h>
14068int
14069main(int argc, char **argv)
14070{
14071 char buf[1024];
14072 int i;
14073 char *bp = buf;
14074 while (1) {
14075 while ((i = getc(stdin)) != -1
14076 && (*bp++ = i) != '\n'
14077 && bp < &buf[1024])
14078 /* DO NOTHING */ ;
14079 *bp = '\0';
14080 fprintf(stdout, "%s", buf);
14081 fflush(stdin);
14082 if (i == -1)
14083 return 0;
14084 bp = buf;
14085 }
14086}
14087EOCP
14088 set tryp
14089 if eval $compile; then
14090 $rm -f tryp.out
5440bc8e 14091 $cat tryp.c | $run ./tryp 2>/dev/null > tryp.out
b4eb6b3d
JH
14092 if cmp tryp.c tryp.out >/dev/null 2>&1; then
14093 $cat >&4 <<EOM
14094Good, at least fflush(stdin) seems to behave okay when stdin is a pipe.
14095EOM
14096 : now check for fflushall behaviour
14097 case "$fflushall" in
14098 '') set try -DTRY_FFLUSH_ALL $output
14099 if eval $compile; then
14100 $cat >&4 <<EOM
14101(Now testing the other method--but note that this also may fail.)
14102EOM
5440bc8e 14103 $run ./try 2>/dev/null
28f5ac64 14104 code=$?
fbe73d74 14105 $from try.out
28f5ac64 14106 if $test -s try.out -a "X$code" = X42; then
b4eb6b3d
JH
14107 fflushall="`$cat try.out`"
14108 fi
14109 fi
14110 $rm -f core try.core core.try.*
14111 case "$fflushall" in
14112 x) $cat >&4 <<EOM
14113Whew. Flushing explicitly all the stdio streams works.
14114EOM
14115 fflushall="$define"
14116 ;;
14117 '') $cat >&4 <<EOM
14118Sigh. Flushing explicitly all the stdio streams doesn't work.
14119EOM
14120 fflushall="$undef"
14121 ;;
14122 *) $cat >&4 <<EOM
14123Cannot figure out whether flushing stdio streams explicitly works or not.
14124I'm assuming it doesn't.
14125EOM
14126 fflushall="$undef"
14127 ;;
14128 esac
14129 ;;
14130 "$define"|true|[yY]*)
14131 fflushall="$define"
14132 ;;
14133 *)
14134 fflushall="$undef"
14135 ;;
14136 esac
14137 else
14138 $cat >&4 <<EOM
14139All is futile. Even fflush(stdin) clobbers input pipes!
14140EOM
14141 fflushall="$undef"
14142 fi
14143 else
14144 fflushall="$undef"
14145 fi
14146 $rm -f core tryp.c tryp.core core.tryp.*
14147 ;;
14148*) fflushall="$undef"
14149 ;;
14150esac
14151
14152case "$fflushNULL$fflushall" in
14153undefundef)
14154 $cat <<EOM
14155OK, I give up. I cannot figure out how to flush pending stdio output.
14156We won't be flushing handles at all before fork/exec/popen.
14157EOM
14158 ;;
14159esac
14160$rm -f try.* try$exe_ext
14161
14162: Store the full pathname to the ar program for use in the C program
14163: Respect a hint or command line value for full_ar.
14164case "$full_ar" in
14165'') full_ar=$ar ;;
14166esac
14167
14168: Store the full pathname to the sed program for use in the C program
14169full_sed=$sed
14170
14171: see what type gids are declared as in the kernel
14172echo " "
14173echo "Looking for the type for group ids returned by getgid()."
14174set gid_t gidtype xxx stdio.h sys/types.h
14175eval $typedef
14176case "$gidtype" in
14177xxx)
14178 xxx=`./findhdr sys/user.h`
14179 set `grep 'groups\[NGROUPS\];' "$xxx" 2>/dev/null` unsigned short
14180 case $1 in
14181 unsigned) dflt="$1 $2" ;;
14182 *) dflt="$1" ;;
14183 esac
14184 ;;
14185*) dflt="$gidtype";;
14186esac
14187case "$gidtype" in
14188gid_t) echo "gid_t found." ;;
14189*) rp="What is the type for group ids returned by getgid()?"
14190 . ./myread
14191 gidtype="$ans"
14192 ;;
14193esac
14194
14195echo " "
14196case "$gidtype" in
14197*_t) zzz="$gidtype" ;;
14198*) zzz="gid" ;;
14199esac
14200echo "Checking the size of $zzz..." >&4
14201cat > try.c <<EOCP
14202#include <sys/types.h>
14203#include <stdio.h>
14204int main() {
14205 printf("%d\n", (int)sizeof($gidtype));
14206 exit(0);
14207}
14208EOCP
14209set try
14210if eval $compile_ok; then
5440bc8e 14211 yyy=`$run ./try`
b4eb6b3d
JH
14212 case "$yyy" in
14213 '') gidsize=4
14214 echo "(I can't execute the test program--guessing $gidsize.)" >&4
14215 ;;
14216 *) gidsize=$yyy
14217 echo "Your $zzz is $gidsize bytes long."
14218 ;;
14219 esac
14220else
14221 gidsize=4
14222 echo "(I can't compile the test program--guessing $gidsize.)" >&4
14223fi
14224
14225
14226echo " "
14227case "$gidtype" in
14228*_t) zzz="$gidtype" ;;
14229*) zzz="gid" ;;
14230esac
14231echo "Checking the sign of $zzz..." >&4
14232cat > try.c <<EOCP
14233#include <sys/types.h>
14234#include <stdio.h>
14235int main() {
14236 $gidtype foo = -1;
14237 if (foo < 0)
14238 printf("-1\n");
14239 else
14240 printf("1\n");
14241}
14242EOCP
14243set try
14244if eval $compile; then
5440bc8e 14245 yyy=`$run ./try`
b4eb6b3d
JH
14246 case "$yyy" in
14247 '') gidsign=1
14248 echo "(I can't execute the test program--guessing unsigned.)" >&4
14249 ;;
14250 *) gidsign=$yyy
14251 case "$gidsign" in
14252 1) echo "Your $zzz is unsigned." ;;
14253 -1) echo "Your $zzz is signed." ;;
14254 esac
14255 ;;
14256 esac
14257else
14258 gidsign=1
14259 echo "(I can't compile the test program--guessing unsigned.)" >&4
14260fi
14261
14262
14263echo " "
14264
14265if $test X"$quadtype" != X; then
14266
14267echo "Checking how to print 64-bit integers..." >&4
14268
14269if $test X"$sPRId64" = X -a X"$quadtype" = Xint; then
14270 $cat >try.c <<'EOCP'
14271#include <sys/types.h>
14272#include <stdio.h>
14273int main() {
14274 int q = 12345678901;
14275 printf("%ld\n", q);
14276}
14277EOCP
14278 set try
14279 if eval $compile; then
5440bc8e 14280 yyy=`$run ./try`
b4eb6b3d
JH
14281 case "$yyy" in
14282 12345678901)
14283 sPRId64='"d"'; sPRIi64='"i"'; sPRIu64='"u"';
14284 sPRIo64='"o"'; sPRIx64='"x"'; sPRIXU64='"X"';
14285 echo "We will use %d."
14286 ;;
14287 esac
14288 fi
14289fi
14290
14291if $test X"$sPRId64" = X -a X"$quadtype" = Xlong; then
14292 $cat >try.c <<'EOCP'
14293#include <sys/types.h>
14294#include <stdio.h>
14295int main() {
14296 long q = 12345678901;
14297 printf("%ld\n", q);
14298}
14299EOCP
14300 set try
14301 if eval $compile; then
5440bc8e 14302 yyy=`$run ./try`
b4eb6b3d
JH
14303 case "$yyy" in
14304 12345678901)
14305 sPRId64='"ld"'; sPRIi64='"li"'; sPRIu64='"lu"';
14306 sPRIo64='"lo"'; sPRIx64='"lx"'; sPRIXU64='"lX"';
14307 echo "We will use %ld."
14308 ;;
14309 esac
14310 fi
14311fi
14312
14313if $test X"$sPRId64" = X -a X"$i_inttypes" = X"$define" -a X"$quadtype" = Xint64_t; then
14314 $cat >try.c <<'EOCP'
14315#include <sys/types.h>
14316#include <inttypes.h>
14317#include <stdio.h>
14318int main() {
14319 int64_t q = 12345678901;
14320 printf("%" PRId64 "\n", q);
14321}
14322EOCP
14323 set try
14324 if eval $compile; then
5440bc8e 14325 yyy=`$run ./try`
b4eb6b3d
JH
14326 case "$yyy" in
14327 12345678901)
14328 sPRId64=PRId64; sPRIi64=PRIi64; sPRIu64=PRIu64;
14329 sPRIo64=PRIo64; sPRIx64=PRIx64; sPRIXU64=PRIXU64;
14330 echo "We will use the C9X style."
14331 ;;
14332 esac
14333 fi
14334fi
14335
2ef53570
JH
14336if $test X"$sPRId64" = X -a X"$quadtype" != X; then
14337 $cat >try.c <<EOCP
b4eb6b3d
JH
14338#include <sys/types.h>
14339#include <stdio.h>
14340int main() {
2ef53570
JH
14341 $quadtype q = 12345678901;
14342 printf("%Ld\n", q);
b4eb6b3d
JH
14343}
14344EOCP
14345 set try
14346 if eval $compile; then
5440bc8e 14347 yyy=`$run ./try`
b4eb6b3d
JH
14348 case "$yyy" in
14349 12345678901)
2ef53570
JH
14350 sPRId64='"Ld"'; sPRIi64='"Li"'; sPRIu64='"Lu"';
14351 sPRIo64='"Lo"'; sPRIx64='"Lx"'; sPRIXU64='"LX"';
14352 echo "We will use %Ld."
b4eb6b3d
JH
14353 ;;
14354 esac
14355 fi
14356fi
14357
2ef53570
JH
14358if $test X"$sPRId64" = X -a X"$quadtype" = X"long long"; then
14359 $cat >try.c <<'EOCP'
b4eb6b3d
JH
14360#include <sys/types.h>
14361#include <stdio.h>
14362int main() {
2ef53570
JH
14363 long long q = 12345678901LL; /* AIX cc requires the LL suffix. */
14364 printf("%lld\n", q);
b4eb6b3d
JH
14365}
14366EOCP
14367 set try
14368 if eval $compile; then
5440bc8e 14369 yyy=`$run ./try`
b4eb6b3d
JH
14370 case "$yyy" in
14371 12345678901)
2ef53570
JH
14372 sPRId64='"lld"'; sPRIi64='"lli"'; sPRIu64='"llu"';
14373 sPRIo64='"llo"'; sPRIx64='"llx"'; sPRIXU64='"llX"';
14374 echo "We will use the %lld style."
b4eb6b3d
JH
14375 ;;
14376 esac
14377 fi
14378fi
14379
14380if $test X"$sPRId64" = X -a X"$quadtype" != X; then
14381 $cat >try.c <<EOCP
14382#include <sys/types.h>
14383#include <stdio.h>
14384int main() {
14385 $quadtype q = 12345678901;
14386 printf("%qd\n", q);
14387}
14388EOCP
14389 set try
14390 if eval $compile; then
5440bc8e 14391 yyy=`$run ./try`
b4eb6b3d
JH
14392 case "$yyy" in
14393 12345678901)
14394 sPRId64='"qd"'; sPRIi64='"qi"'; sPRIu64='"qu"';
14395 sPRIo64='"qo"'; sPRIx64='"qx"'; sPRIXU64='"qX"';
14396 echo "We will use %qd."
14397 ;;
14398 esac
14399 fi
14400fi
14401
14402if $test X"$sPRId64" = X; then
14403 echo "Cannot figure out how to print 64-bit integers." >&4
14404fi
14405
14406$rm -f try try.*
14407
14408fi
14409
14410case "$sPRId64" in
14411'') d_PRId64="$undef"; d_PRIi64="$undef"; d_PRIu64="$undef";
14412 d_PRIo64="$undef"; d_PRIx64="$undef"; d_PRIXU64="$undef";
14413 ;;
14414*) d_PRId64="$define"; d_PRIi64="$define"; d_PRIu64="$define";
14415 d_PRIo64="$define"; d_PRIx64="$define"; d_PRIXU64="$define";
14416 ;;
14417esac
14418
14419
14420echo " "
14421$echo "Checking the format strings to be used for Perl's internal types..." >&4
14422
14423if $test X"$ivsize" = X8; then
14424 ivdformat="$sPRId64"
14425 uvuformat="$sPRIu64"
14426 uvoformat="$sPRIo64"
14427 uvxformat="$sPRIx64"
14428 uvXUformat="$sPRIXU64"
14429else
14430 if $test X"$ivsize" = X"$longsize"; then
14431 ivdformat='"ld"'
14432 uvuformat='"lu"'
14433 uvoformat='"lo"'
14434 uvxformat='"lx"'
14435 uvXUformat='"lX"'
14436 else
14437 if $test X"$ivsize" = X"$intsize"; then
14438 ivdformat='"d"'
14439 uvuformat='"u"'
14440 uvoformat='"o"'
14441 uvxformat='"x"'
14442 uvXUformat='"X"'
14443 else
14444 : far out
14445 if $test X"$ivsize" = X"$shortsize"; then
14446 ivdformat='"hd"'
14447 uvuformat='"hu"'
14448 uvoformat='"ho"'
14449 uvxformat='"hx"'
14450 uvXUformat='"hX"'
14451 fi
14452 fi
14453 fi
14454fi
14455
14456if $test X"$uselongdouble" = X"$define" -a X"$d_longdbl" = X"$define" -a X"$d_PRIgldbl" = X"$define"; then
14457 nveformat="$sPRIeldbl"
14458 nvfformat="$sPRIfldbl"
14459 nvgformat="$sPRIgldbl"
14460 nvEUformat="$sPRIEUldbl"
14461 nvFUformat="$sPRIFUldbl"
14462 nvGUformat="$sPRIGUldbl"
14463else
14464 nveformat='"e"'
14465 nvfformat='"f"'
14466 nvgformat='"g"'
14467 nvEUformat='"E"'
14468 nvFUformat='"F"'
14469 nvGUformat='"G"'
14470fi
14471
14472case "$ivdformat" in
14473'') echo "$0: Fatal: failed to find format strings, cannot continue." >& 4
14474 exit 1
14475 ;;
14476esac
14477
14478
14479echo " "
14480$echo "Checking the format string to be used for gids..." >&4
14481
14482case "$gidsign" in
14483-1) if $test X"$gidsize" = X"$ivsize"; then
14484 gidformat="$ivdformat"
14485 else
14486 if $test X"$gidsize" = X"$longsize"; then
14487 gidformat='"ld"'
14488 else
14489 if $test X"$gidsize" = X"$intsize"; then
14490 gidformat='"d"'
14491 else
14492 if $test X"$gidsize" = X"$shortsize"; then
14493 gidformat='"hd"'
14494 fi
14495 fi
14496 fi
14497 fi
14498 ;;
14499*) if $test X"$gidsize" = X"$uvsize"; then
14500 gidformat="$uvuformat"
14501 else
14502 if $test X"$gidsize" = X"$longsize"; then
14503 gidformat='"lu"'
14504 else
14505 if $test X"$gidsize" = X"$intsize"; then
14506 gidformat='"u"'
14507 else
14508 if $test X"$gidsize" = X"$shortsize"; then
14509 gidformat='"hu"'
14510 fi
14511 fi
14512 fi
14513 fi
14514 ;;
14515esac
14516
14517: see if getgroups exists
14518set getgroups d_getgrps
14519eval $inlibc
14520
14521: see if setgroups exists
14522set setgroups d_setgrps
14523eval $inlibc
14524
14525
14526: Find type of 2nd arg to 'getgroups()' and 'setgroups()'
14527echo " "
14528case "$d_getgrps$d_setgrps" in
14529*define*)
14530 case "$groupstype" in
14531 '') dflt="$gidtype" ;;
14532 *) dflt="$groupstype" ;;
14533 esac
14534 $cat <<EOM
14535What type of pointer is the second argument to getgroups() and setgroups()?
14536Usually this is the same as group ids, $gidtype, but not always.
14537
14538EOM
14539 rp='What type pointer is the second argument to getgroups() and setgroups()?'
14540 . ./myread
14541 groupstype="$ans"
14542 ;;
14543*) groupstype="$gidtype";;
14544esac
14545
14546echo " "
14547echo "Checking if your $make program sets \$(MAKE)..." >&4
14548case "$make_set_make" in
14549'')
14550 $sed 's/^X //' > testmake.mak << 'EOF'
14551Xall:
14552X @echo 'maketemp="$(MAKE)"'
14553EOF
14554 case "`$make -f testmake.mak 2>/dev/null`" in
14555 *maketemp=*) make_set_make='#' ;;
14556 *) make_set_make="MAKE=$make" ;;
14557 esac
14558 $rm -f testmake.mak
14559 ;;
14560esac
14561case "$make_set_make" in
14562'#') echo "Yup, it does.";;
14563*) echo "Nope, it doesn't.";;
14564esac
14565
14566: see what type is used for mode_t
14567rp="What is the type used for file modes for system calls (e.g. fchmod())?"
14568set mode_t modetype int stdio.h sys/types.h
14569eval $typedef_ask
14570
2cc61e15
DD
14571: see if stdarg is available
14572echo " "
14573if $test `./findhdr stdarg.h`; then
14574 echo "<stdarg.h> found." >&4
14575 valstd="$define"
14576else
14577 echo "<stdarg.h> NOT found." >&4
14578 valstd="$undef"
14579fi
14580
14581: see if varags is available
14582echo " "
14583if $test `./findhdr varargs.h`; then
14584 echo "<varargs.h> found." >&4
14585else
14586 echo "<varargs.h> NOT found, but that's ok (I hope)." >&4
14587fi
14588
14589: set up the varargs testing programs
14590$cat > varargs.c <<EOP
14591#ifdef I_STDARG
14592#include <stdarg.h>
14593#endif
14594#ifdef I_VARARGS
14595#include <varargs.h>
14596#endif
14597
14598#ifdef I_STDARG
14599int f(char *p, ...)
14600#else
14601int f(va_alist)
14602va_dcl
14603#endif
14604{
14605 va_list ap;
14606#ifndef I_STDARG
14607 char *p;
14608#endif
14609#ifdef I_STDARG
14610 va_start(ap,p);
14611#else
14612 va_start(ap);
14613 p = va_arg(ap, char *);
14614#endif
14615 va_end(ap);
14616}
14617EOP
14618$cat > varargs <<EOP
14619$startsh
14620if $cc -c $ccflags -D\$1 varargs.c >/dev/null 2>&1; then
14621 echo "true"
14622else
14623 echo "false"
14624fi
14625$rm -f varargs$_o
14626EOP
14627chmod +x varargs
14628
14629: now check which varargs header should be included
14630echo " "
14631i_varhdr=''
14632case "$valstd" in
14633"$define")
14634 if `./varargs I_STDARG`; then
14635 val='stdarg.h'
14636 elif `./varargs I_VARARGS`; then
14637 val='varargs.h'
14638 fi
14639 ;;
14640*)
14641 if `./varargs I_VARARGS`; then
14642 val='varargs.h'
14643 fi
14644 ;;
14645esac
14646case "$val" in
14647'')
14648echo "I could not find the definition for va_dcl... You have problems..." >&4
14649 val="$undef"; set i_stdarg; eval $setvar
14650 val="$undef"; set i_varargs; eval $setvar
14651 ;;
14652*)
14653 set i_varhdr
14654 eval $setvar
14655 case "$i_varhdr" in
14656 stdarg.h)
14657 val="$define"; set i_stdarg; eval $setvar
14658 val="$undef"; set i_varargs; eval $setvar
14659 ;;
14660 varargs.h)
14661 val="$undef"; set i_stdarg; eval $setvar
14662 val="$define"; set i_varargs; eval $setvar
14663 ;;
14664 esac
14665 echo "We'll include <$i_varhdr> to get va_dcl definition." >&4;;
14666esac
14667$rm -f varargs*
14668
14669: see if we need va_copy
14670echo " "
14671case "$i_stdarg" in
14672"$define")
14673 $cat >try.c <<EOCP
14674#include <stdarg.h>
14675#include <stdio.h>
85c8a686
DD
14676#$i_stdlib I_STDLIB
14677#ifdef I_STDLIB
14678#include <stdlib.h>
14679#endif
14680#include <signal.h>
2cc61e15
DD
14681
14682int
14683ivfprintf(FILE *f, const char *fmt, va_list *valp)
14684{
14685 return vfprintf(f, fmt, *valp);
14686}
14687
14688int
14689myvfprintf(FILE *f, const char *fmt, va_list val)
14690{
14691 return ivfprintf(f, fmt, &val);
14692}
14693
14694int
14695myprintf(char *fmt, ...)
14696{
14697 va_list val;
14698 va_start(val, fmt);
14699 return myvfprintf(stdout, fmt, val);
14700}
14701
14702int
14703main(int ac, char **av)
14704{
85c8a686
DD
14705 signal(SIGSEGV, exit);
14706
2cc61e15
DD
14707 myprintf("%s%cs all right, then\n", "that", '\'');
14708 exit(0);
14709}
14710EOCP
14711 set try
5440bc8e
JH
14712 if eval $compile && $run ./try 2>&1 >/dev/null; then
14713 case "`$run ./try`" in
2cc61e15
DD
14714 "that's all right, then")
14715 okay=yes
14716 ;;
14717 esac
14718 fi
14719 case "$okay" in
14720 yes) echo "It seems that you don't need va_copy()." >&4
14721 need_va_copy="$undef"
14722 ;;
14723 *) echo "It seems that va_copy() or similar will be needed." >&4
14724 need_va_copy="$define"
14725 ;;
14726 esac
14727 $rm -f try.* core core.* *.core *.core.*
14728 ;;
14729*) echo "You don't have <stdarg.h>, not checking for va_copy()." >&4
14730 ;;
14731esac
14732
b4eb6b3d
JH
14733: define a fucntion to check prototypes
14734$cat > protochk <<EOSH
14735$startsh
14736cc="$cc"
14737optimize="$optimize"
14738ccflags="$ccflags"
14739prototype="$prototype"
14740define="$define"
14741rm=$rm
14742EOSH
14743
14744$cat >> protochk <<'EOSH'
14745
14746$rm -f try.c
14747foo="$1"
14748shift
14749while test $# -ge 2; do
14750 case "$1" in
14751 $define) echo "#include <$2>" >> try.c ;;
14752 literal) echo "$2" >> try.c ;;
14753 esac
14754 shift 2
14755done
14756test "$prototype" = "$define" && echo '#define CAN_PROTOTYPE' >> try.c
14757cat >> try.c <<'EOCP'
14758#ifdef CAN_PROTOTYPE
14759#define _(args) args
14760#else
14761#define _(args) ()
14762#endif
14763EOCP
14764echo "$foo" >> try.c
14765echo 'int no_real_function_has_this_name _((void)) { return 0; }' >> try.c
14766$cc $optimize $ccflags -c try.c > /dev/null 2>&1
14767status=$?
14768$rm -f try.[co]
14769exit $status
14770EOSH
14771chmod +x protochk
14772$eunicefix protochk
14773
14774: see what type is used for size_t
14775rp="What is the type used for the length parameter for string functions?"
14776set size_t sizetype 'unsigned int' stdio.h sys/types.h
14777eval $typedef_ask
14778
14779: check for type of arguments to gethostbyaddr.
14780if test "X$netdb_host_type" = X -o "X$netdb_hlen_type" = X; then
14781 case "$d_gethbyaddr" in
14782 $define)
14783 $cat <<EOM
14784
14785Checking to see what type of arguments are accepted by gethostbyaddr().
14786EOM
14787 hdrs="$define sys/types.h
14788 $d_socket sys/socket.h
14789 $i_niin netinet/in.h
14790 $i_netdb netdb.h
14791 $i_unistd unistd.h"
14792 : The first arg can 'char *' or 'void *'
14793 : The second arg is some of integral type
14794 for xxx in in_addr_t 'const void *' 'const char *' 'void *' 'char *'; do
14795 for yyy in size_t long int; do
14796 case "$netdb_host_type" in
14797 '') try="extern struct hostent *gethostbyaddr($xxx, $yyy, int);"
14798 if ./protochk "$try" $hdrs; then
14799 echo "Your system accepts $xxx for the first arg."
14800 echo "...and $yyy for the second arg."
14801 netdb_host_type="$xxx"
14802 netdb_hlen_type="$yyy"
14803 fi
14804 ;;
14805 esac
14806 done
14807 done
14808 : In case none of those worked, prompt the user.
14809 case "$netdb_host_type" in
14810 '') rp='What is the type for the 1st argument to gethostbyaddr?'
14811 dflt='char *'
14812 . ./myread
14813 netdb_host_type=$ans
14814 rp='What is the type for the 2nd argument to gethostbyaddr?'
14815 dflt="$sizetype"
14816 . ./myread
14817 netdb_hlen_type=$ans
14818 ;;
14819 esac
14820 ;;
14821 *) : no gethostbyaddr, so pick harmless defaults
14822 netdb_host_type='char *'
14823 netdb_hlen_type="$sizetype"
14824 ;;
14825 esac
14826 # Remove the "const" if needed. -- but then we'll have a
14827 # prototype clash!
14828 # netdb_host_type=`echo "$netdb_host_type" | sed 's/^const //'`
14829fi
14830
14831: check for type of argument to gethostbyname.
14832if test "X$netdb_name_type" = X ; then
14833 case "$d_gethbyname" in
14834 $define)
14835 $cat <<EOM
14836
14837Checking to see what type of argument is accepted by gethostbyname().
14838EOM
14839 hdrs="$define sys/types.h
14840 $d_socket sys/socket.h
14841 $i_niin netinet/in.h
14842 $i_netdb netdb.h
14843 $i_unistd unistd.h"
14844 for xxx in "const char *" "char *"; do
14845 case "$netdb_name_type" in
14846 '') try="extern struct hostent *gethostbyname($xxx);"
14847 if ./protochk "$try" $hdrs; then
14848 echo "Your system accepts $xxx."
14849 netdb_name_type="$xxx"
14850 fi
14851 ;;
14852 esac
14853 done
14854 : In case none of those worked, prompt the user.
14855 case "$netdb_name_type" in
14856 '') rp='What is the type for the 1st argument to gethostbyname?'
14857 dflt='char *'
14858 . ./myread
14859 netdb_name_type=$ans
14860 ;;
14861 esac
14862 ;;
14863 *) : no gethostbyname, so pick harmless default
14864 netdb_name_type='char *'
14865 ;;
14866 esac
14867fi
14868
14869: check for type of 1st argument to getnetbyaddr.
14870if test "X$netdb_net_type" = X ; then
14871 case "$d_getnbyaddr" in
14872 $define)
14873 $cat <<EOM
14874
14875Checking to see what type of 1st argument is accepted by getnetbyaddr().
14876EOM
14877 hdrs="$define sys/types.h
14878 $d_socket sys/socket.h
14879 $i_niin netinet/in.h
14880 $i_netdb netdb.h
14881 $i_unistd unistd.h"
14882 for xxx in in_addr_t "unsigned long" long "unsigned int" int; do
14883 case "$netdb_net_type" in
14884 '') try="extern struct netent *getnetbyaddr($xxx, int);"
14885 if ./protochk "$try" $hdrs; then
14886 echo "Your system accepts $xxx."
14887 netdb_net_type="$xxx"
14888 fi
14889 ;;
14890 esac
14891 done
14892 : In case none of those worked, prompt the user.
14893 case "$netdb_net_type" in
14894 '') rp='What is the type for the 1st argument to getnetbyaddr?'
14895 dflt='long'
14896 . ./myread
14897 netdb_net_type=$ans
14898 ;;
14899 esac
14900 ;;
14901 *) : no getnetbyaddr, so pick harmless default
14902 netdb_net_type='long'
14903 ;;
14904 esac
14905fi
14906: locate the preferred pager for this system
14907case "$pager" in
14908'')
14909 dflt=''
14910 case "$pg" in
14911 /*) dflt=$pg;;
14912 [a-zA-Z]:/*) dflt=$pg;;
14913 esac
14914 case "$more" in
14915 /*) dflt=$more;;
14916 [a-zA-Z]:/*) dflt=$more;;
14917 esac
14918 case "$less" in
14919 /*) dflt=$less;;
14920 [a-zA-Z]:/*) dflt=$less;;
14921 esac
14922 case "$dflt" in
14923 '') dflt=/usr/ucb/more;;
14924 esac
14925 ;;
14926*) dflt="$pager";;
14927esac
14928echo " "
14929fn=f/
14930rp='What pager is used on your system?'
14931. ./getfile
14932pager="$ans"
14933
14934: see what type pids are declared as in the kernel
14935rp="What is the type of process ids on this system?"
14936set pid_t pidtype int stdio.h sys/types.h
14937eval $typedef_ask
14938
14939: Find earliest binary compatible site_perl subdirectory perl can use.
14940case "$bincompat5005" in
14941"$define") xs_apiversion='5.005' ;;
14942*) xs_apiversion=$version ;; # The current site_perl version.
14943esac
14944: Find earliest pure perl site_perl subdirectory perl can use.
14945: The versioned directories started at 5.005.
14946pm_apiversion='5.005'
14947
b4eb6b3d
JH
14948: see if ar generates random libraries by itself
14949echo " "
14950echo "Checking how to generate random libraries on your machine..." >&4
14951echo 'int bar1() { return bar2(); }' > bar1.c
14952echo 'int bar2() { return 2; }' > bar2.c
14953$cat > foo.c <<'EOP'
14954int main() { printf("%d\n", bar1()); exit(0); }
14955EOP
14956$cc $ccflags -c bar1.c >/dev/null 2>&1
14957$cc $ccflags -c bar2.c >/dev/null 2>&1
14958$cc $ccflags -c foo.c >/dev/null 2>&1
14959$ar rc bar$_a bar2$_o bar1$_o >/dev/null 2>&1
7a282f6d 14960if $cc -o foobar $ccflags $ldflags foo$_o bar$_a $libs > /dev/null 2>&1 &&
5440bc8e 14961 $run ./foobar >/dev/null 2>&1; then
b4eb6b3d
JH
14962 echo "$ar appears to generate random libraries itself."
14963 orderlib=false
14964 ranlib=":"
14965elif $ar ts bar$_a >/dev/null 2>&1 &&
7a282f6d 14966 $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 "a table of contents needs to be added with '$ar ts'."
14969 orderlib=false
14970 ranlib="$ar ts"
14971else
14972 case "$ranlib" in
14973 :) ranlib='';;
14974 '')
14975 ranlib=`./loc ranlib X /usr/bin /bin /usr/local/bin`
14976 $test -f $ranlib || ranlib=''
14977 ;;
14978 esac
14979 if $test -n "$ranlib"; then
14980 echo "your system has '$ranlib'; we'll use that."
14981 orderlib=false
14982 else
14983 echo "your system doesn't seem to support random libraries"
14984 echo "so we'll use lorder and tsort to order the libraries."
14985 orderlib=true
14986 ranlib=":"
14987 fi
14988fi
14989$rm -f foo* bar*
14990
14991: check for type of arguments to select.
14992case "$selecttype" in
14993'') case "$d_select" in
14994 $define)
14995 echo " "
14996 $cat <<EOM
14997Checking to see what type of arguments are accepted by select().
14998EOM
14999 hdrs="$define sys/types.h
15000 $i_systime sys/time.h
15001 $i_sysselct sys/select.h
15002 $d_socket sys/socket.h"
15003 : The first arg can be int, unsigned, or size_t
15004 : The last arg may or may not be 'const'
15005 val=''
15006 : void pointer has been seen but using that
15007 : breaks the selectminbits test
15008 for xxx in 'fd_set *' 'int *'; do
15009 for nfd in 'int' 'size_t' 'unsigned long' 'unsigned' ; do
15010 for tmo in 'struct timeval *' 'const struct timeval *'; do
15011 case "$val" in
15012 '') try="extern select _(($nfd, $xxx, $xxx, $xxx, $tmo));"
15013 if ./protochk "$try" $hdrs; then
15014 echo "Your system accepts $xxx."
15015 val="$xxx"
15016 fi
15017 ;;
15018 esac
15019 done
15020 done
15021 done
15022 case "$val" in
15023 '') rp='What is the type for the 2nd, 3rd, and 4th arguments to select?'
15024 case "$d_fd_set" in
15025 $define) dflt="fd_set *" ;;
15026 *) dflt="int *" ;;
15027 esac
15028 . ./myread
15029 val=$ans
15030 ;;
15031 esac
15032 selecttype="$val"
15033 ;;
15034 *) : no select, so pick a harmless default
15035 selecttype='int *'
15036 ;;
15037 esac
15038 ;;
15039esac
15040
15041: check for the select 'width'
15042case "$selectminbits" in
15043'') case "$d_select" in
15044 $define)
15045 $cat <<EOM
15046
15047Checking to see on how many bits at a time your select() operates...
15048EOM
15049 $cat >try.c <<EOCP
15050#include <sys/types.h>
15051#$i_time I_TIME
15052#$i_systime I_SYS_TIME
15053#$i_systimek I_SYS_TIME_KERNEL
15054#ifdef I_TIME
15055# include <time.h>
15056#endif
15057#ifdef I_SYS_TIME
15058# ifdef I_SYS_TIME_KERNEL
15059# define KERNEL
15060# endif
15061# include <sys/time.h>
15062# ifdef I_SYS_TIME_KERNEL
15063# undef KERNEL
15064# endif
15065#endif
15066#$i_sysselct I_SYS_SELECT
15067#ifdef I_SYS_SELECT
15068#include <sys/select.h>
15069#endif
15070#$d_socket HAS_SOCKET
15071#ifdef HAS_SOCKET
15072# include <sys/socket.h> /* Might include <sys/bsdtypes.h> */
15073#endif
15074#include <stdio.h>
15075$selecttype b;
15076#define S sizeof(*(b))
15077#define MINBITS 64
15078#define NBYTES (S * 8 > MINBITS ? S : MINBITS/8)
15079#define NBITS (NBYTES * 8)
15080int main() {
15081 char s[NBYTES];
15082 struct timeval t;
15083 int i;
15084 FILE* fp;
15085 int fd;
15086
15087 fclose(stdin);
15088 fp = fopen("try.c", "r");
15089 if (fp == 0)
15090 exit(1);
15091 fd = fileno(fp);
15092 if (fd < 0)
15093 exit(2);
15094 b = ($selecttype)s;
15095 for (i = 0; i < NBITS; i++)
15096 FD_SET(i, b);
15097 t.tv_sec = 0;
15098 t.tv_usec = 0;
15099 select(fd + 1, b, 0, 0, &t);
15100 for (i = NBITS - 1; i > fd && FD_ISSET(i, b); i--);
15101 printf("%d\n", i + 1);
15102 return 0;
15103}
15104EOCP
15105 set try
15106 if eval $compile_ok; then
5440bc8e 15107 selectminbits=`$run ./try`
b4eb6b3d
JH
15108 case "$selectminbits" in
15109 '') cat >&4 <<EOM
15110Cannot figure out on how many bits at a time your select() operates.
15111I'll play safe and guess it is 32 bits.
15112EOM
15113 selectminbits=32
15114 bits="32 bits"
15115 ;;
15116 1) bits="1 bit" ;;
15117 *) bits="$selectminbits bits" ;;
15118 esac
15119 echo "Your select() operates on $bits at a time." >&4
15120 else
15121 rp='What is the minimum number of bits your select() operates on?'
15122 case "$byteorder" in
15123 1234|12345678) dflt=32 ;;
15124 *) dflt=1 ;;
15125 esac
15126 . ./myread
15127 val=$ans
15128 selectminbits="$val"
15129 fi
15130 $rm -f try.* try
15131 ;;
15132 *) : no select, so pick a harmless default
15133 selectminbits='32'
15134 ;;
15135 esac
15136 ;;
15137esac
15138
15139: Trace out the files included by signal.h, then look for SIGxxx names.
15140: Remove SIGARRAYSIZE used by HPUX.
15141: Remove SIGSTKSIZE used by Linux.
15142: Remove SIGSTKSZ used by Posix.
15143: Remove SIGTYP void lines used by OS2.
15144: Some cpps, like os390, dont give the file name anywhere
15145if [ "X$fieldn" = X ]; then
15146 : Just make some guesses. We check them later.
15147 xxx='/usr/include/signal.h /usr/include/sys/signal.h'
15148else
15149 xxx=`echo '#include <signal.h>' |
15150 $cppstdin $cppminus $cppflags 2>/dev/null |
15151 $grep '^[ ]*#.*include' |
a938a3bb 15152 $awk "{print \\$$fieldn}" | $sed 's!"!!g' | $sed 's!\\\\\\\\!/!g' | $sort | $uniq`
b4eb6b3d
JH
15153fi
15154: Check this list of files to be sure we have parsed the cpp output ok.
15155: This will also avoid potentially non-existent files, such
15156: as ../foo/bar.h
15157xxxfiles=''
15158for xx in $xxx /dev/null ; do
15159 $test -f "$xx" && xxxfiles="$xxxfiles $xx"
15160done
15161: If we have found no files, at least try signal.h
15162case "$xxxfiles" in
15163'') xxxfiles=`./findhdr signal.h` ;;
15164esac
15165xxx=`awk '
15166$1 ~ /^#define$/ && $2 ~ /^SIG[A-Z0-9]*$/ && $2 !~ /SIGARRAYSIZE/ && $2 !~ /SIGSTKSIZE/ && $2 !~ /SIGSTKSZ/ && $3 !~ /void/ {
15167 print substr($2, 4, 20)
15168}
15169$1 == "#" && $2 ~ /^define$/ && $3 ~ /^SIG[A-Z0-9]*$/ && $3 !~ /SIGARRAYSIZE/ && $4 !~ /void/ {
15170 print substr($3, 4, 20)
15171}' $xxxfiles`
15172: Append some common names just in case the awk scan failed.
15173xxx="$xxx ABRT ALRM BUS CANCEL CHLD CLD CONT DIL EMT FPE"
15174xxx="$xxx FREEZE HUP ILL INT IO IOT KILL LOST LWP PHONE"
15175xxx="$xxx PIPE POLL PROF PWR QUIT RTMAX RTMIN SEGV STKFLT STOP"
15176xxx="$xxx SYS TERM THAW TRAP TSTP TTIN TTOU URG USR1 USR2"
15177xxx="$xxx USR3 USR4 VTALRM WAITING WINCH WIND WINDOW XCPU XFSZ"
15178
15179: generate a few handy files for later
15180$cat > signal.c <<'EOCP'
15181#include <sys/types.h>
15182#include <signal.h>
15183#include <stdio.h>
15184int main() {
15185
15186/* Strange style to avoid deeply-nested #if/#else/#endif */
15187#ifndef NSIG
15188# ifdef _NSIG
15189# define NSIG (_NSIG)
15190# endif
15191#endif
15192
15193#ifndef NSIG
15194# ifdef SIGMAX
15195# define NSIG (SIGMAX+1)
15196# endif
15197#endif
15198
15199#ifndef NSIG
15200# ifdef SIG_MAX
15201# define NSIG (SIG_MAX+1)
15202# endif
15203#endif
15204
15205#ifndef NSIG
15206# ifdef MAXSIG
15207# define NSIG (MAXSIG+1)
15208# endif
15209#endif
15210
15211#ifndef NSIG
15212# ifdef MAX_SIG
15213# define NSIG (MAX_SIG+1)
15214# endif
15215#endif
15216
15217#ifndef NSIG
15218# ifdef SIGARRAYSIZE
15219# define NSIG (SIGARRAYSIZE+1) /* Not sure of the +1 */
15220# endif
15221#endif
15222
15223#ifndef NSIG
15224# ifdef _sys_nsig
15225# define NSIG (_sys_nsig) /* Solaris 2.5 */
15226# endif
15227#endif
15228
15229/* Default to some arbitrary number that's big enough to get most
15230 of the common signals.
15231*/
15232#ifndef NSIG
15233# define NSIG 50
15234#endif
15235
15236printf("NSIG %d\n", NSIG);
15237
15238#ifndef JUST_NSIG
15239
15240EOCP
15241
15242echo $xxx | $tr ' ' $trnl | $sort | $uniq | $awk '
15243{
15244 printf "#ifdef SIG"; printf $1; printf "\n"
15245 printf "printf(\""; printf $1; printf " %%d\\n\",SIG";
15246 printf $1; printf ");\n"
15247 printf "#endif\n"
15248}
15249END {
15250 printf "#endif /* JUST_NSIG */\n";
15251 printf "exit(0);\n}\n";
15252}
15253' >>signal.c
15254$cat >signal.awk <<'EOP'
15255BEGIN { ndups = 0 }
15256$1 ~ /^NSIG$/ { nsig = $2 }
15257($1 !~ /^NSIG$/) && (NF == 2) {
15258 if ($2 > maxsig) { maxsig = $2 }
15259 if (sig_name[$2]) {
15260 dup_name[ndups] = $1
15261 dup_num[ndups] = $2
15262 ndups++
15263 }
15264 else {
15265 sig_name[$2] = $1
15266 sig_num[$2] = $2
15267 }
15268}
15269END {
15270 if (nsig == 0) {
15271 nsig = maxsig + 1
15272 }
15273 printf("NSIG %d\n", nsig);
15274 for (n = 1; n < nsig; n++) {
15275 if (sig_name[n]) {
15276 printf("%s %d\n", sig_name[n], sig_num[n])
15277 }
15278 else {
15279 printf("NUM%d %d\n", n, n)
15280 }
15281 }
15282 for (n = 0; n < ndups; n++) {
15283 printf("%s %d\n", dup_name[n], dup_num[n])
15284 }
15285}
15286EOP
15287$cat >signal_cmd <<EOS
15288$startsh
15289if $test -s signal.lst; then
15290 echo "Using your existing signal.lst file"
15291 exit 0
15292fi
15293xxx="$xxx"
15294EOS
15295$cat >>signal_cmd <<'EOS'
15296
15297set signal
15298if eval $compile_ok; then
5440bc8e 15299 $run ./signal$_exe | $sort -n +1 | $uniq | $awk -f signal.awk >signal.lst
b4eb6b3d
JH
15300else
15301 echo "(I can't seem be able to compile the whole test program)" >&4
15302 echo "(I'll try it in little pieces.)" >&4
15303 set signal -DJUST_NSIG
15304 if eval $compile_ok; then
5440bc8e 15305 $run ./signal$_exe > signal.nsg
b4eb6b3d
JH
15306 $cat signal.nsg
15307 else
15308 echo "I can't seem to figure out how many signals you have." >&4
15309 echo "Guessing 50." >&4
15310 echo 'NSIG 50' > signal.nsg
15311 fi
15312 : Now look at all the signal names, one at a time.
15313 for xx in `echo $xxx | $tr ' ' $trnl | $sort | $uniq`; do
15314 $cat > signal.c <<EOCP
15315#include <sys/types.h>
15316#include <signal.h>
15317#include <stdio.h>
15318int main() {
15319printf("$xx %d\n", SIG${xx});
15320return 0;
15321}
15322EOCP
15323 set signal
15324 if eval $compile; then
15325 echo "SIG${xx} found."
5440bc8e 15326 $run ./signal$_exe >> signal.ls1
b4eb6b3d
JH
15327 else
15328 echo "SIG${xx} NOT found."
15329 fi
15330 done
15331 if $test -s signal.ls1; then
15332 $cat signal.nsg signal.ls1 |
15333 $sort -n +1 | $uniq | $awk -f signal.awk >signal.lst
15334 fi
15335
15336fi
15337if $test -s signal.lst; then
15338 :
15339else
15340 echo "(AAK! I can't compile the test programs -- Guessing)" >&4
15341 echo 'kill -l' >signal
15342 set X `csh -f <signal`
15343 $rm -f signal
15344 shift
15345 case $# in
15346 0) set HUP INT QUIT ILL TRAP ABRT EMT FPE KILL BUS SEGV SYS PIPE ALRM TERM;;
15347 esac
15348 echo $@ | $tr ' ' $trnl | \
15349 $awk '{ printf "%s %d\n", $1, ++s; }
15350 END { printf "NSIG %d\n", ++s }' >signal.lst
15351fi
15352$rm -f signal.c signal$_exe signal$_o signal.nsg signal.ls1
15353EOS
15354chmod a+x signal_cmd
15355$eunicefix signal_cmd
15356
15357: generate list of signal names
15358echo " "
15359case "$sig_name_init" in
15360'') doinit=yes ;;
15361*) case "$sig_num_init" in
15362 ''|*,*) doinit=yes ;;
15363 esac ;;
15364esac
15365case "$doinit" in
15366yes)
15367 echo "Generating a list of signal names and numbers..." >&4
15368 . ./signal_cmd
15369 sig_count=`$awk '/^NSIG/ { printf "%d", $2 }' signal.lst`
15370 sig_name=`$awk 'BEGIN { printf "ZERO " }
15371 !/^NSIG/ { printf "%s ", $1 }' signal.lst`
15372 sig_num=`$awk 'BEGIN { printf "0 " }
15373 !/^NSIG/ { printf "%d ", $2 }' signal.lst`
15374 sig_name_init=`$awk 'BEGIN { printf "\"ZERO\", " }
15375 !/^NSIG/ { printf "\"%s\", ", $1 }
15376 END { printf "0\n" }' signal.lst`
15377 sig_num_init=`$awk 'BEGIN { printf "0, " }
15378 !/^NSIG/ { printf "%d, ", $2}
15379 END { printf "0\n"}' signal.lst`
15380 ;;
15381esac
15382echo "The following $sig_count signals are available:"
15383echo " "
15384echo $sig_name | $awk \
15385'BEGIN { linelen = 0 }
15386{
15387 for (i = 1; i <= NF; i++) {
15388 name = "SIG" $i " "
15389 linelen = linelen + length(name)
15390 if (linelen > 70) {
15391 printf "\n"
15392 linelen = length(name)
15393 }
15394 printf "%s", name
15395 }
15396 printf "\n"
15397}'
76d3c696 15398sig_size=`echo $sig_name | awk '{print NF}'`
b4eb6b3d
JH
15399$rm -f signal signal.c signal.awk signal.lst signal_cmd
15400
15401echo " "
15402case "$sizetype" in
15403*_t) zzz="$sizetype" ;;
15404*) zzz="filesize" ;;
15405esac
15406echo "Checking the size of $zzz..." >&4
15407cat > try.c <<EOCP
15408#include <sys/types.h>
15409#include <stdio.h>
15410int main() {
15411 printf("%d\n", (int)sizeof($sizetype));
15412 exit(0);
15413}
15414EOCP
15415set try
15416if eval $compile_ok; then
5440bc8e 15417 yyy=`$run ./try`
b4eb6b3d
JH
15418 case "$yyy" in
15419 '') sizesize=4
15420 echo "(I can't execute the test program--guessing $sizesize.)" >&4
15421 ;;
15422 *) sizesize=$yyy
15423 echo "Your $zzz size is $sizesize bytes."
15424 ;;
15425 esac
15426else
15427 sizesize=4
15428 echo "(I can't compile the test program--guessing $sizesize.)" >&4
15429fi
15430
15431
15432: check for socklen_t
15433echo " "
15434echo "Checking to see if you have socklen_t..." >&4
15435$cat >try.c <<EOCP
15436#include <sys/types.h>
15437#$d_socket HAS_SOCKET
15438#ifdef HAS_SOCKET
15439#include <sys/socket.h>
15440#endif
15441int main() { socklen_t x = 16; }
15442EOCP
15443set try
15444if eval $compile; then
15445 val="$define"
15446 echo "You have socklen_t."
15447else
15448 val="$undef"
15449 echo "You do not have socklen_t."
15450 case "$sizetype" in
15451 size_t) echo "(You do have size_t, that might work. Some people are happy with just an int.)" ;;
15452 esac
15453fi
15454$rm -f try try.*
15455set d_socklen_t
15456eval $setvar
15457
a7710f8d
JH
15458: see if this is a socks.h system
15459set socks.h i_socks
15460eval $inhdr
15461
b4eb6b3d
JH
15462: check for type of the size argument to socket calls
15463case "$d_socket" in
15464"$define")
15465 $cat <<EOM
15466
15467Checking to see what type is the last argument of accept().
15468EOM
b4eb6b3d
JH
15469 yyy=''
15470 case "$d_socklen_t" in
15471 "$define") yyy="$yyy socklen_t"
15472 esac
15473 yyy="$yyy $sizetype int long unsigned"
15474 for xxx in $yyy; do
15475 case "$socksizetype" in
15476 '') try="extern int accept(int, struct sockaddr *, $xxx *);"
a7710f8d
JH
15477 case "$usesocks" in
15478 "$define")
15479 if ./protochk "$try" $i_systypes sys/types.h $d_socket sys/socket.h literal '#define INCLUDE_PROTOTYPES' $i_socks socks.h.; then
15480 echo "Your system accepts '$xxx *' for the last argument of accept()."
15481 socksizetype="$xxx"
15482 fi
15483 ;;
15484 *) if ./protochk "$try" $i_systypes sys/types.h $d_socket sys/socket.h; then
15485 echo "Your system accepts '$xxx *' for the last argument of accept()."
15486 socksizetype="$xxx"
15487 fi
15488 ;;
15489 esac
b4eb6b3d
JH
15490 ;;
15491 esac
15492 done
15493: In case none of those worked, prompt the user.
15494 case "$socksizetype" in
15495 '') rp='What is the type for socket address structure sizes?'
15496 dflt='int'
15497 . ./myread
15498 socksizetype=$ans
15499 ;;
15500 esac
15501 ;;
15502*) : no sockets, so pick relatively harmless default
15503 socksizetype='int'
15504 ;;
15505esac
15506
15507: see what type is used for signed size_t
15508set ssize_t ssizetype int stdio.h sys/types.h
15509eval $typedef
15510dflt="$ssizetype"
5440bc8e 15511$cat > try.c <<EOM
b4eb6b3d
JH
15512#include <stdio.h>
15513#include <sys/types.h>
15514#define Size_t $sizetype
15515#define SSize_t $dflt
15516int main()
15517{
15518 if (sizeof(Size_t) == sizeof(SSize_t))
15519 printf("$dflt\n");
15520 else if (sizeof(Size_t) == sizeof(int))
15521 printf("int\n");
15522 else
15523 printf("long\n");
15524 exit(0);
15525}
15526EOM
15527echo " "
5440bc8e
JH
15528set try
15529if eval $compile_ok && $run ./try > /dev/null; then
15530 ssizetype=`$run ./try`
b4eb6b3d
JH
15531 echo "I'll be using $ssizetype for functions returning a byte count." >&4
15532else
15533 $cat >&4 <<EOM
15534Help! I can't compile and run the ssize_t test program: please enlighten me!
15535(This is probably a misconfiguration in your system or libraries, and
15536you really ought to fix it. Still, I'll try anyway.)
15537
15538I need a type that is the same size as $sizetype, but is guaranteed to
15539be signed. Common values are ssize_t, int and long.
15540
15541EOM
15542 rp="What signed type is the same size as $sizetype?"
15543 . ./myread
15544 ssizetype="$ans"
15545fi
5440bc8e 15546$rm -f try try.*
b4eb6b3d
JH
15547
15548: see what type of char stdio uses.
15549echo " "
aa517f50
JH
15550echo '#include <stdio.h>' | $cppstdin $cppminus > stdioh
15551if $contains 'unsigned.*char.*_ptr;' stdioh >/dev/null 2>&1 ; then
b4eb6b3d
JH
15552 echo "Your stdio uses unsigned chars." >&4
15553 stdchar="unsigned char"
15554else
aa517f50
JH
15555 echo "Your stdio uses signed chars." >&4
15556 stdchar="char"
b4eb6b3d 15557fi
aa517f50
JH
15558$rm -f stdioh
15559
15560
b4eb6b3d
JH
15561
15562: see if time exists
15563echo " "
15564if test "X$d_time" = X -o X"$timetype" = X; then
15565 if set time val -f d_time; eval $csym; $val; then
15566 echo 'time() found.' >&4
15567 val="$define"
15568 rp="What is the type returned by time() on this system?"
15569 set time_t timetype long stdio.h sys/types.h
15570 eval $typedef_ask
15571 else
15572 echo 'time() not found, hope that will do.' >&4
15573 val="$undef"
15574 timetype='int';
15575 fi
15576 set d_time
15577 eval $setvar
15578fi
15579
15580: see what type uids are declared as in the kernel
15581echo " "
15582echo "Looking for the type for user ids returned by getuid()."
15583set uid_t uidtype xxx stdio.h sys/types.h
15584eval $typedef
15585case "$uidtype" in
15586xxx)
15587 xxx=`./findhdr sys/user.h`
15588 set `grep '_ruid;' "$xxx" 2>/dev/null` unsigned short
15589 case $1 in
15590 unsigned) dflt="$1 $2" ;;
15591 *) dflt="$1" ;;
15592 esac
15593 ;;
15594*) dflt="$uidtype";;
15595esac
15596case "$uidtype" in
15597uid_t) echo "uid_t found." ;;
15598*) rp="What is the type for user ids returned by getuid()?"
15599 . ./myread
15600 uidtype="$ans"
15601 ;;
15602esac
15603
15604echo " "
15605case "$uidtype" in
15606*_t) zzz="$uidtype" ;;
15607*) zzz="uid" ;;
15608esac
15609echo "Checking the size of $zzz..." >&4
15610cat > try.c <<EOCP
15611#include <sys/types.h>
15612#include <stdio.h>
15613int main() {
15614 printf("%d\n", (int)sizeof($uidtype));
15615 exit(0);
15616}
15617EOCP
15618set try
15619if eval $compile_ok; then
5440bc8e 15620 yyy=`$run ./try`
b4eb6b3d
JH
15621 case "$yyy" in
15622 '') uidsize=4
15623 echo "(I can't execute the test program--guessing $uidsize.)" >&4
15624 ;;
15625 *) uidsize=$yyy
15626 echo "Your $zzz is $uidsize bytes long."
15627 ;;
15628 esac
15629else
15630 uidsize=4
15631 echo "(I can't compile the test program--guessing $uidsize.)" >&4
15632fi
15633
15634echo " "
15635case "$uidtype" in
15636*_t) zzz="$uidtype" ;;
15637*) zzz="uid" ;;
15638esac
15639echo "Checking the sign of $zzz..." >&4
15640cat > try.c <<EOCP
15641#include <sys/types.h>
15642#include <stdio.h>
15643int main() {
15644 $uidtype foo = -1;
15645 if (foo < 0)
15646 printf("-1\n");
15647 else
15648 printf("1\n");
15649}
15650EOCP
15651set try
15652if eval $compile; then
5440bc8e 15653 yyy=`$run ./try`
b4eb6b3d
JH
15654 case "$yyy" in
15655 '') uidsign=1
15656 echo "(I can't execute the test program--guessing unsigned.)" >&4
15657 ;;
15658 *) uidsign=$yyy
15659 case "$uidsign" in
15660 1) echo "Your $zzz is unsigned." ;;
15661 -1) echo "Your $zzz is signed." ;;
15662 esac
15663 ;;
15664 esac
15665else
15666 uidsign=1
15667 echo "(I can't compile the test program--guessing unsigned.)" >&4
15668fi
15669
15670
15671
15672echo " "
15673$echo "Checking the format string to be used for uids..." >&4
15674
15675case "$uidsign" in
15676-1) if $test X"$uidsize" = X"$ivsize"; then
15677 uidformat="$ivdformat"
15678 else
15679 if $test X"$uidsize" = X"$longsize"; then
15680 uidformat='"ld"'
15681 else
15682 if $test X"$uidsize" = X"$intsize"; then
15683 uidformat='"d"'
15684 else
15685 if $test X"$uidsize" = X"$shortsize"; then
15686 uidformat='"hd"'
15687 fi
15688 fi
15689 fi
15690 fi
15691 ;;
15692*) if $test X"$uidsize" = X"$uvsize"; then
15693 uidformat="$uvuformat"
15694 else
15695 if $test X"$uidsize" = X"$longsize"; then
15696 uidformat='"lu"'
15697 else
15698 if $test X"$uidsize" = X"$intsize"; then
15699 uidformat='"u"'
15700 else
15701 if $test X"$uidsize" = X"$shortsize"; then
15702 uidformat='"hu"'
15703 fi
15704 fi
15705 fi
15706 fi
15707 ;;
15708esac
15709
3659ebf1
JH
15710: determine compiler compiler
15711case "$yacc" in
15712'')
15713 dflt=yacc;;
15714*)
15715 dflt="$yacc";;
15716esac
15717echo " "
15718comp='yacc'
15719if $test -f "$byacc"; then
15720 dflt="$byacc"
15721 comp="byacc or $comp"
15722fi
15723if $test -f "$bison"; then
15724 comp="$comp or bison -y"
15725fi
15726rp="Which compiler compiler ($comp) shall I use?"
15727. ./myread
15728yacc="$ans"
15729case "$yacc" in
15730*bis*)
15731 case "$yacc" in
15732 *-y*) ;;
15733 *)
15734 yacc="$yacc -y"
15735 echo "(Adding -y option to bison to get yacc-compatible behaviour.)"
15736 ;;
15737 esac
15738 ;;
15739esac
15740
b4eb6b3d
JH
15741: see if fcntl.h is there
15742val=''
15743set fcntl.h val
15744eval $inhdr
15745
15746: see if we can include fcntl.h
15747case "$val" in
15748"$define")
15749 echo " "
15750 if $h_fcntl; then
15751 val="$define"
15752 echo "We'll be including <fcntl.h>." >&4
15753 else
15754 val="$undef"
15755 if $h_sysfile; then
15756 echo "We don't need to include <fcntl.h> if we include <sys/file.h>." >&4
15757 else
15758 echo "We won't be including <fcntl.h>." >&4
15759 fi
15760 fi
15761 ;;
15762*)
15763 h_fcntl=false
15764 val="$undef"
15765 ;;
15766esac
15767set i_fcntl
15768eval $setvar
15769
15770: see if this is a iconv.h system
15771set iconv.h i_iconv
15772eval $inhdr
15773
15774: see if this is a ieeefp.h system
15775set ieeefp.h i_ieeefp
15776eval $inhdr
15777
15778: see if this is a libutil.h system
15779set libutil.h i_libutil
15780eval $inhdr
15781
15782: see if locale.h is available
15783set locale.h i_locale
15784eval $inhdr
15785
15786: see if mach cthreads are available
15787if test "X$usethreads" = "X$define"; then
15788 set mach/cthreads.h i_machcthr
15789 eval $inhdr
15790else
15791 i_machcthr="$undef"
15792fi
15793
15794
15795
15796: see if this is a math.h system
15797set math.h i_math
15798eval $inhdr
15799
15800: see if this is a mntent.h system
15801set mntent.h i_mntent
15802eval $inhdr
15803
15804: see if ndbm.h is available
15805set ndbm.h t_ndbm
15806eval $inhdr
15807case "$t_ndbm" in
15808$define)
15809 : see if dbm_open exists
15810 set dbm_open d_dbm_open
15811 eval $inlibc
15812 case "$d_dbm_open" in
15813 $undef)
15814 t_ndbm="$undef"
15815 echo "We won't be including <ndbm.h>"
15816 ;;
15817 esac
15818 ;;
15819esac
15820val="$t_ndbm"
15821set i_ndbm
15822eval $setvar
15823
15824: see if net/errno.h is available
15825val=''
15826set net/errno.h val
15827eval $inhdr
15828
15829: Unfortunately, it causes problems on some systems. Arrgh.
15830case "$val" in
15831$define)
15832 cat > try.c <<'EOM'
15833#include <stdio.h>
15834#include <errno.h>
15835#include <net/errno.h>
15836int func()
15837{
15838 return ENOTSOCK;
15839}
15840EOM
15841 if $cc $ccflags -c try.c >/dev/null 2>&1; then
15842 echo "We'll be including <net/errno.h>." >&4
15843 else
15844 echo "We won't be including <net/errno.h>." >&4
15845 val="$undef"
15846 fi
15847 $rm -f try.* try
15848 ;;
15849esac
15850set i_neterrno
15851eval $setvar
15852
15853: see if netinet/tcp.h is available
15854set netinet/tcp.h i_netinettcp
15855eval $inhdr
15856
15857: see if this is a poll.h system
15858set poll.h i_poll
15859eval $inhdr
15860
15861: see if this is a prot.h system
15862set prot.h i_prot
15863eval $inhdr
15864
15865echo " "
15866$echo "Guessing which symbols your C compiler and preprocessor define..." >&4
15867$cat <<'EOSH' > Cppsym.know
15868a29k ABI64 aegis AES_SOURCE AIX AIX32 AIX370
15869AIX41 AIX42 AIX43 AIX_SOURCE aixpc ALL_SOURCE
d46c9a2d
JH
15870alliant alpha am29000 AM29000 AMD64 amiga AMIGAOS AMIX
15871ansi ANSI_C_SOURCE apollo ardent ARM32 atarist att386 att3b
15872BeOS BIG_ENDIAN BIT_MSF bsd BSD bsd43 bsd4_2 bsd4_3 BSD4_3 bsd4_4
b4eb6b3d
JH
15873BSD_4_3 BSD_4_4 BSD_NET2 BSD_TIME BSD_TYPES BSDCOMPAT bsdi
15874bull c cadmus clipper CMU COFF COMPILER_VERSION
15875concurrent convex cpu cray CRAY CRAYMPP ctix CX_UX
15876CYGWIN DGUX DGUX_SOURCE DJGPP dmert DOLPHIN DPX2 DSO
15877Dynix DynixPTX ELF encore EPI EXTENSIONS FILE_OFFSET_BITS
15878FreeBSD GCC_NEW_VARARGS gcos gcx gimpel
15879GNU_SOURCE GNUC GNUC_MINOR GO32 gould GOULD_PN
15880H3050R H3050RX hbullx20 hcx host_mips
15881hp200 hp300 hp700 HP700 hp800 hp9000
15882hp9000s200 hp9000s300 hp9000s400 hp9000s500
15883hp9000s700 hp9000s800 hp9k8 hp_osf hppa hpux HPUX_SOURCE
15884i186 i286 i386 i486 i586 i686 i8086 i80960 i860 I960
d46c9a2d 15885IA64 iAPX286 ibm ibm032 ibmesa IBMR2 ibmrt ILP32 ILP64
b4eb6b3d
JH
15886INLINE_INTRINSICS INTRINSICS INT64 interdata is68k ksr1
15887LANGUAGE_C LARGE_FILE_API LARGEFILE64_SOURCE
15888LARGEFILE_SOURCE LFS64_LARGEFILE LFS_LARGEFILE
15889Linux LITTLE_ENDIAN LONG64 LONG_DOUBLE LONG_LONG
15890LONGDOUBLE LONGLONG LP64 luna luna88k Lynx
15891M68000 m68k m88100 m88k M88KBCS_TARGET M_COFF
15892M_I186 M_I286 M_I386 M_I8086 M_I86 M_I86SM M_SYS3
15893M_SYS5 M_SYSIII M_SYSV M_UNIX M_XENIX MACH machine MachTen
15894MATH_HAS_NO_SIDE_EFFECTS
15895mc300 mc500 mc68000 mc68010 mc68020 mc68030 mc68040
15896mc68060 mc68k mc68k32 mc700 mc88000 mc88100 merlin
15897mert MiNT mips MIPS_FPSET MIPS_ISA MIPS_SIM MIPS_SZINT
15898MIPS_SZLONG MIPS_SZPTR MIPSEB MIPSEL MODERN_C motorola
15899mpeix MSDOS MTXINU MULTIMAX mvs MVS n16 ncl_el ncl_mr
15900NetBSD news1500 news1700 news1800 news1900 news3700
48bcfe03 15901news700 news800 news900 NeXT NLS nonstopux ns16000 ns32000
b4eb6b3d
JH
15902ns32016 ns32332 ns32k nsc32000
15903OCS88 OEMVS OpenBSD os OS2 OS390 osf OSF1 OSF_SOURCE
15904pa_risc PA_RISC1_1 PA_RISC2_0 PARAGON parisc
15905pc532 pdp11 PGC PIC plexus PORTAR posix
15906POSIX1B_SOURCE POSIX2_SOURCE POSIX4_SOURCE
15907POSIX_C_SOURCE POSIX_SOURCE POWER
15908PROTOTYPES PWB pyr QNX R3000 REENTRANT RES Rhapsody RISC6000
d46c9a2d 15909riscix riscos RT S390 SA110 scs SCO sequent sgi SGI_SOURCE SH3 sinix
b4eb6b3d
JH
15910SIZE_INT SIZE_LONG SIZE_PTR SOCKET_SOURCE SOCKETS_SOURCE
15911sony sony_news sonyrisc sparc sparclite spectrum
15912stardent stdc STDC_EXT stratos sun sun3 sun386
15913Sun386i svr3 svr4 SVR4_2 SVR4_SOURCE svr5
15914SX system SYSTYPE_BSD SYSTYPE_BSD43 SYSTYPE_BSD44
15915SYSTYPE_SVR4 SYSTYPE_SVR5 SYSTYPE_SYSV SYSV SYSV3 SYSV4 SYSV5
15916sysV68 sysV88 Tek4132 Tek4300 titan
d46c9a2d 15917TM3200 TM5400 TM5600
b4eb6b3d
JH
15918tower tower32 tower32_200 tower32_600 tower32_700
15919tower32_800 tower32_850 tss
15920u370 u3b u3b2 u3b20 u3b200 u3b20d u3b5
15921ultrix UMAXV UnicomPBB UnicomPBD UNICOS UNICOSMK
15922unix UNIX95 UNIX99 unixpc unos USGr4 USGr4_2
15923Utek UTek UTS UWIN uxpm uxps vax venix VMESA vms xenix Xenix286
15924XOPEN_SOURCE XOPEN_SOURCE_EXTENDED XPG2 XPG2_EXTENDED
15925XPG3 XPG3_EXTENDED XPG4 XPG4_EXTENDED
15926z8000
15927EOSH
15928# Maybe put other stuff here too.
15929cat <<EOSH >>Cppsym.know
15930$osname
15931EOSH
15932./tr '[a-z]' '[A-Z]' < Cppsym.know > Cppsym.a
15933./tr '[A-Z]' '[a-z]' < Cppsym.know > Cppsym.b
15934$cat Cppsym.know > Cppsym.c
381aa1ff 15935$cat Cppsym.a Cppsym.b Cppsym.c | $tr ' ' $trnl | $sort | $uniq > Cppsym.know
b4eb6b3d
JH
15936$rm -f Cppsym.a Cppsym.b Cppsym.c
15937cat <<EOSH > Cppsym
15938$startsh
15939if $test \$# -gt 0; then
15940 echo \$* | $tr " " "$trnl" | ./Cppsym.try > Cppsym.got
15941 if $test -s Cppsym.got; then
15942 $rm -f Cppsym.got
15943 exit 0
15944 fi
15945 $rm -f Cppsym.got
15946 exit 1
15947else
15948 $tr " " "$trnl" | ./Cppsym.try
15949 exit 0
15950fi
15951EOSH
15952chmod +x Cppsym
15953$eunicefix Cppsym
15954cat <<EOSH > Cppsym.try
15955$startsh
15956cat <<'EOCP' > try.c
15957#include <stdio.h>
15958int main() {
15959EOCP
15960$awk \\
15961EOSH
15962cat <<'EOSH' >> Cppsym.try
15963'length($1) > 0 {
2ef53570
JH
15964 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
15965 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
15966 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
15967 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 15968}' >> try.c
2ef53570 15969echo 'return 0;}' >> try.c
b4eb6b3d
JH
15970EOSH
15971cat <<EOSH >> Cppsym.try
15972ccflags="$ccflags"
15973case "$osname-$gccversion" in
15974irix-) ccflags="\$ccflags -woff 1178" ;;
15975os2-*) ccflags="\$ccflags -Zlinker /PM:VIO" ;;
15976esac
5440bc8e 15977$cc -o try $optimize \$ccflags $ldflags try.c $libs && $run ./try
b4eb6b3d
JH
15978EOSH
15979chmod +x Cppsym.try
15980$eunicefix Cppsym.try
15981./Cppsym < Cppsym.know > Cppsym.true
15982: now check the C compiler for additional symbols
15983postprocess_cc_v=''
15984case "$osname" in
15985aix) postprocess_cc_v="|$tr , ' '" ;;
15986esac
15987$cat >ccsym <<EOS
15988$startsh
15989$cat >tmp.c <<EOF
15990extern int foo;
15991EOF
15992for i in \`$cc -v -c tmp.c 2>&1 $postprocess_cc_v\`
15993do
15994 case "\$i" in
15995 -D*) echo "\$i" | $sed 's/^-D//';;
15996 -A*) $test "$gccversion" && echo "\$i" | $sed 's/^-A\(.*\)(\(.*\))/\1=\2/';;
15997 esac
15998done
15999$rm -f try.c
16000EOS
16001postprocess_cc_v=''
16002chmod +x ccsym
16003$eunicefix ccsym
16004./ccsym > ccsym1.raw
16005if $test -s ccsym1.raw; then
16006 $sort ccsym1.raw | $uniq >ccsym.raw
16007else
16008 mv ccsym1.raw ccsym.raw
16009fi
16010
16011$awk '/\=/ { print $0; next }
16012 { print $0"=1" }' ccsym.raw >ccsym.list
16013$awk '/\=/ { print $0; next }
16014 { print $0"=1" }' Cppsym.true >ccsym.true
16015$comm -13 ccsym.true ccsym.list >ccsym.own
16016$comm -12 ccsym.true ccsym.list >ccsym.com
16017$comm -23 ccsym.true ccsym.list >ccsym.cpp
16018also=''
16019if $test -z ccsym.raw; then
16020 echo "Your C compiler doesn't seem to define any symbols!" >&4
16021 echo " "
16022 echo "However, your C preprocessor defines the following symbols:"
16023 $cat Cppsym.true
16024 ccsymbols=''
16025 cppsymbols=`$cat Cppsym.true`
16026 cppsymbols=`echo $cppsymbols`
16027 cppccsymbols="$cppsymbols"
16028else
16029 if $test -s ccsym.com; then
16030 echo "Your C compiler and pre-processor define these symbols:"
16031 $sed -e 's/\(..*\)=.*/\1/' ccsym.com
16032 also='also '
16033 symbols='ones'
16034 cppccsymbols=`$cat ccsym.com`
16035 cppccsymbols=`echo $cppccsymbols`
16036 $test "$silent" || sleep 1
16037 fi
16038 if $test -s ccsym.cpp; then
16039 $test "$also" && echo " "
16040 echo "Your C pre-processor ${also}defines the following symbols:"
16041 $sed -e 's/\(..*\)=.*/\1/' ccsym.cpp
16042 also='further '
16043 cppsymbols=`$cat ccsym.cpp`
16044 cppsymbols=`echo $cppsymbols`
16045 $test "$silent" || sleep 1
16046 fi
16047 if $test -s ccsym.own; then
16048 $test "$also" && echo " "
16049 echo "Your C compiler ${also}defines the following cpp symbols:"
16050 $sed -e 's/\(..*\)=1/\1/' ccsym.own
16051 $sed -e 's/\(..*\)=.*/\1/' ccsym.own | $uniq >>Cppsym.true
16052 ccsymbols=`$cat ccsym.own`
16053 ccsymbols=`echo $ccsymbols`
16054 $test "$silent" || sleep 1
16055 fi
16056fi
b4eb6b3d
JH
16057
16058: see if this is a termio system
16059val="$undef"
16060val2="$undef"
16061val3="$undef"
16062if $test `./findhdr termios.h`; then
16063 set tcsetattr i_termios
16064 eval $inlibc
16065 val3="$i_termios"
16066fi
16067echo " "
16068case "$val3" in
16069"$define") echo "You have POSIX termios.h... good!" >&4;;
16070*) if ./Cppsym pyr; then
16071 case "`/bin/universe`" in
16072 ucb) if $test `./findhdr sgtty.h`; then
16073 val2="$define"
16074 echo "<sgtty.h> found." >&4
16075 else
16076 echo "System is pyramid with BSD universe."
16077 echo "<sgtty.h> not found--you could have problems." >&4
16078 fi;;
16079 *) if $test `./findhdr termio.h`; then
16080 val="$define"
16081 echo "<termio.h> found." >&4
16082 else
16083 echo "System is pyramid with USG universe."
16084 echo "<termio.h> not found--you could have problems." >&4
16085 fi;;
16086 esac
16087 elif ./usg; then
16088 if $test `./findhdr termio.h`; then
16089 echo "<termio.h> found." >&4
16090 val="$define"
16091 elif $test `./findhdr sgtty.h`; then
16092 echo "<sgtty.h> found." >&4
16093 val2="$define"
16094 else
16095echo "Neither <termio.h> nor <sgtty.h> found--you could have problems." >&4
16096 fi
16097 else
16098 if $test `./findhdr sgtty.h`; then
16099 echo "<sgtty.h> found." >&4
16100 val2="$define"
16101 elif $test `./findhdr termio.h`; then
16102 echo "<termio.h> found." >&4
16103 val="$define"
16104 else
16105echo "Neither <sgtty.h> nor <termio.h> found--you could have problems." >&4
16106 fi
16107 fi;;
16108esac
16109set i_termio; eval $setvar
16110val=$val2; set i_sgtty; eval $setvar
16111val=$val3; set i_termios; eval $setvar
16112
16113: see if this is a shadow.h system
16114set shadow.h i_shadow
16115eval $inhdr
16116
b4eb6b3d
JH
16117: see if stddef is available
16118set stddef.h i_stddef
16119eval $inhdr
923fc586 16120
b4eb6b3d
JH
16121: see if this is a sunmath.h system
16122set sunmath.h i_sunmath
16123eval $inhdr
5f80c64f 16124
b4eb6b3d
JH
16125: see if sys/access.h is available
16126set sys/access.h i_sysaccess
16127eval $inhdr
16128
16129: see if ioctl defs are in sgtty, termio, sys/filio or sys/ioctl
16130set sys/filio.h i_sysfilio
16131eval $inhdr
16132echo " "
16133if $test `./findhdr sys/ioctl.h`; then
16134 val="$define"
16135 echo '<sys/ioctl.h> found.' >&4
16136else
16137 val="$undef"
16138 if $test $i_sysfilio = "$define"; then
16139 echo '<sys/ioctl.h> NOT found.' >&4
5f80c64f 16140 else
b4eb6b3d
JH
16141 $test $i_sgtty = "$define" && xxx="sgtty.h"
16142 $test $i_termio = "$define" && xxx="termio.h"
16143 $test $i_termios = "$define" && xxx="termios.h"
16144echo "No <sys/ioctl.h> found, assuming ioctl args are defined in <$xxx>." >&4
16145 fi
16146fi
16147set i_sysioctl
16148eval $setvar
16149
49a78c82
JH
16150: see if socket ioctl defs are in sys/sockio.h
16151echo " "
16152xxx=`./findhdr sys/sockio.h`
16153if $test "$xxx"; then
16154 if $contains SIOCATMARK $xxx >/dev/null 2>&1; then
16155 val="$define"
16156 echo "You have socket ioctls defined in <sys/sockio.h>." >&4
16157 else
16158 val="$undef"
16159 echo "No socket ioctls found in <sys/sockio.h>." >&4
16160 fi
16161else
16162 val="$undef"
16163 $cat <<EOM
16164<sys/sockio.h> not found, assuming socket ioctls are in <sys/ioctl.h>.
16165EOM
16166fi
16167set i_syssockio
16168eval $setvar
16169
b4eb6b3d
JH
16170
16171: see if this is a syslog.h system
16172set syslog.h i_syslog
16173eval $inhdr
16174
16175
16176: see if this is a sys/mode.h system
16177set sys/mode.h i_sysmode
16178eval $inhdr
16179
16180: see if sys/resource.h has to be included
16181set sys/resource.h i_sysresrc
16182eval $inhdr
16183
16184: see if sys/security.h is available
16185set sys/security.h i_syssecrt
16186eval $inhdr
16187
16188: see if this is a sys/statvfs.h system
16189set sys/statvfs.h i_sysstatvfs
16190eval $inhdr
16191
b4eb6b3d
JH
16192: see if this is a sys/un.h system
16193set sys/un.h i_sysun
16194eval $inhdr
16195
16196
16197: see if this is a sys/utsname.h system
16198set sys/utsname.h i_sysutsname
16199eval $inhdr
16200
16201: see if this is a syswait system
16202set sys/wait.h i_syswait
16203eval $inhdr
16204
16205: see if this is a ustat.h system
16206set ustat.h i_ustat
16207eval $inhdr
16208
16209: see if this is an utime system
16210set utime.h i_utime
16211eval $inhdr
16212
16213: see if this is a values.h system
16214set values.h i_values
16215eval $inhdr
16216
16217: see if this is a vfork system
16218case "$d_vfork" in
16219"$define")
16220 set vfork.h i_vfork
16221 eval $inhdr
16222 ;;
16223*)
16224 i_vfork="$undef"
16225 ;;
16226esac
16227
16228: see if gdbm.h is available
16229set gdbm.h t_gdbm
16230eval $inhdr
16231case "$t_gdbm" in
16232$define)
16233 : see if gdbm_open exists
16234 set gdbm_open d_gdbm_open
16235 eval $inlibc
16236 case "$d_gdbm_open" in
16237 $undef)
16238 t_gdbm="$undef"
16239 echo "We won't be including <gdbm.h>"
5f80c64f 16240 ;;
b4eb6b3d
JH
16241 esac
16242 ;;
16243esac
16244val="$t_gdbm"
16245set i_gdbm
16246eval $setvar
16247
16248echo " "
16249echo "Looking for extensions..." >&4
16250: If we are using the old config.sh, known_extensions may contain
16251: old or inaccurate or duplicate values.
16252known_extensions=''
16253nonxs_extensions=''
16254: We do not use find because it might not be available.
16255: We do not just use MANIFEST because the user may have dropped
16256: some additional extensions into the source tree and expect them
16257: to be built.
16258
16259: Function to recursively find available extensions, ignoring DynaLoader
16260: NOTE: recursion limit of 10 to prevent runaway in case of symlink madness
16261find_extensions='
16262 for xxx in *; do
16263 case "$xxx" in
16264 DynaLoader|dynaload) ;;
16265 *)
16266 if $test -f $xxx/$xxx.xs; then
16267 known_extensions="$known_extensions $1$xxx";
16268 elif $test -f $xxx/Makefile.PL; then
16269 nonxs_extensions="$nonxs_extensions $1$xxx";
16270 else
16271 if $test -d $xxx -a $# -lt 10; then
16272 set $1$xxx/ $*;
16273 cd $xxx;
16274 eval $find_extensions;
16275 cd ..;
16276 shift;
16277 fi;
16278 fi
16279 ;;
16280 esac;
16281 done'
16282tdir=`pwd`
16283cd $rsrc/ext
16284set X
16285shift
16286eval $find_extensions
16287set X $nonxs_extensions
16288shift
16289nonxs_extensions="$*"
16290set X $known_extensions
16291shift
16292known_extensions="$*"
16293cd $tdir
16294
16295: Now see which are supported on this system.
16296avail_ext=''
16297for xxx in $known_extensions ; do
16298 case "$xxx" in
16299 DB_File|db_file)
16300 case "$i_db" in
16301 $define) avail_ext="$avail_ext $xxx" ;;
16302 esac
16303 ;;
16304 GDBM_File|gdbm_fil)
16305 case "$i_gdbm" in
16306 $define) avail_ext="$avail_ext $xxx" ;;
16307 esac
16308 ;;
1d59c593 16309 I18N/Langinfo|i18n_lan)
4bbcc6e8
JH
16310 case "$i_langinfo$d_nl_langinfo" in
16311 $define$define) avail_ext="$avail_ext $xxx" ;;
16312 esac
16313 ;;
b4eb6b3d
JH
16314 NDBM_File|ndbm_fil)
16315 case "$i_ndbm" in
16316 $define)
16317 case "$osname-$use64bitint" in
252f4fb1 16318 cygwin-*|hpux-define)
b4eb6b3d
JH
16319 case "$libs" in
16320 *-lndbm*) avail_ext="$avail_ext $xxx" ;;
16321 esac
16322 ;;
16323 *) avail_ext="$avail_ext $xxx" ;;
16324 esac
16325 ;;
16326 esac
16327 ;;
16328 ODBM_File|odbm_fil)
16329 case "${i_dbm}${i_rpcsvcdbm}" in
16330 *"${define}"*)
16331 case "$osname-$use64bitint" in
252f4fb1 16332 cygwin-*|hpux-define)
b4eb6b3d
JH
16333 case "$libs" in
16334 *-ldbm*) avail_ext="$avail_ext $xxx" ;;
16335 esac
16336 ;;
16337 *) avail_ext="$avail_ext $xxx" ;;
16338 esac
16339 ;;
16340 esac
16341 ;;
16342 POSIX|posix)
16343 case "$useposix" in
16344 true|define|y) avail_ext="$avail_ext $xxx" ;;
16345 esac
16346 ;;
16347 Opcode|opcode)
16348 case "$useopcode" in
16349 true|define|y) avail_ext="$avail_ext $xxx" ;;
16350 esac
16351 ;;
16352 Socket|socket)
16353 case "$d_socket" in
16354 true|$define|y) avail_ext="$avail_ext $xxx" ;;
16355 esac
16356 ;;
16357 Sys/Syslog|sys/syslog)
16358 : XXX syslog requires socket
16359 case "$d_socket" in
16360 true|$define|y) avail_ext="$avail_ext $xxx" ;;
16361 esac
16362 ;;
16363 Thread|thread)
b00ec89b
AB
16364 case "$usethreads" in
16365 true|$define|y)
16366 case "$useithreads" in
16367 $undef|false|[nN]*) avail_ext="$avail_ext $xxx" ;;
16368 esac
b4eb6b3d
JH
16369 esac
16370 ;;
16371 IPC/SysV|ipc/sysv)
16372 : XXX Do we need a useipcsysv variable here
16373 case "${d_msg}${d_sem}${d_shm}" in
16374 *"${define}"*) avail_ext="$avail_ext $xxx" ;;
16375 esac
16376 ;;
16377 *) avail_ext="$avail_ext $xxx"
5f80c64f
JH
16378 ;;
16379 esac
b4eb6b3d 16380done
5f80c64f 16381
b4eb6b3d
JH
16382set X $avail_ext
16383shift
16384avail_ext="$*"
5f80c64f 16385
b4eb6b3d
JH
16386: Now see which nonxs extensions are supported on this system.
16387: For now assume all are.
16388nonxs_ext=''
16389for xxx in $nonxs_extensions ; do
16390 case "$xxx" in
16391 *) nonxs_ext="$nonxs_ext $xxx"
16392 ;;
16393 esac
16394done
5f80c64f 16395
b4eb6b3d
JH
16396set X $nonxs_ext
16397shift
16398nonxs_ext="$*"
16399
16400case $usedl in
16401$define)
16402 $cat <<EOM
16403A number of extensions are supplied with $package. You may choose to
16404compile these extensions for dynamic loading (the default), compile
16405them into the $package executable (static loading), or not include
16406them at all. Answer "none" to include no extensions.
16407Note that DynaLoader is always built and need not be mentioned here.
5f80c64f
JH
16408
16409EOM
b4eb6b3d
JH
16410 case "$dynamic_ext" in
16411 '') dflt="$avail_ext" ;;
16412 *) dflt="$dynamic_ext"
16413 # Perhaps we are reusing an old out-of-date config.sh.
16414 case "$hint" in
16415 previous)
16416 if test X"$dynamic_ext" != X"$avail_ext"; then
16417 $cat <<EOM
16418NOTICE: Your previous config.sh list may be incorrect.
16419The extensions now available to you are
16420 ${avail_ext}
16421but the default list from your previous config.sh is
16422 ${dynamic_ext}
9c839522 16423
b4eb6b3d
JH
16424EOM
16425 fi
9c839522
PM
16426 ;;
16427 esac
b4eb6b3d
JH
16428 ;;
16429 esac
5f80c64f 16430 case "$dflt" in
b4eb6b3d
JH
16431 '') dflt=none;;
16432 esac
16433 rp="What extensions do you wish to load dynamically?"
16434 . ./myread
16435 case "$ans" in
16436 none) dynamic_ext=' ' ;;
16437 *) dynamic_ext="$ans" ;;
5f80c64f 16438 esac
5f80c64f 16439
b4eb6b3d
JH
16440 case "$static_ext" in
16441 '')
16442 : Exclude those already listed in dynamic linking
16443 dflt=''
16444 for xxx in $avail_ext; do
16445 case " $dynamic_ext " in
16446 *" $xxx "*) ;;
16447 *) dflt="$dflt $xxx" ;;
16448 esac
16449 done
16450 set X $dflt
16451 shift
16452 dflt="$*"
16453 ;;
16454 *) dflt="$static_ext"
16455 ;;
16456 esac
9c839522 16457
b4eb6b3d
JH
16458 case "$dflt" in
16459 '') dflt=none;;
16460 esac
16461 rp="What extensions do you wish to load statically?"
16462 . ./myread
16463 case "$ans" in
16464 none) static_ext=' ' ;;
16465 *) static_ext="$ans" ;;
16466 esac
16467 ;;
16468*)
16469 $cat <<EOM
16470A number of extensions are supplied with $package. Answer "none"
16471to include no extensions.
16472Note that DynaLoader is always built and need not be mentioned here.
9c839522 16473
b4eb6b3d
JH
16474EOM
16475 case "$static_ext" in
16476 '') dflt="$avail_ext" ;;
16477 *) dflt="$static_ext"
16478 # Perhaps we are reusing an old out-of-date config.sh.
16479 case "$hint" in
16480 previous)
16481 if test X"$static_ext" != X"$avail_ext"; then
16482 $cat <<EOM
16483NOTICE: Your previous config.sh list may be incorrect.
16484The extensions now available to you are
16485 ${avail_ext}
16486but the default list from your previous config.sh is
16487 ${static_ext}
5f80c64f
JH
16488
16489EOM
b4eb6b3d
JH
16490 fi
16491 ;;
16492 esac
16493 ;;
16494 esac
16495 : Exclude those that are not xs extensions
16496 case "$dflt" in
16497 '') dflt=none;;
16498 esac
16499 rp="What extensions do you wish to include?"
16500 . ./myread
16501 case "$ans" in
16502 none) static_ext=' ' ;;
16503 *) static_ext="$ans" ;;
16504 esac
16505 ;;
5f80c64f
JH
16506esac
16507
b4eb6b3d
JH
16508set X $dynamic_ext $static_ext $nonxs_ext
16509shift
16510extensions="$*"
16511
9c839522
PM
16512: Remove libraries needed only for extensions
16513: The appropriate ext/Foo/Makefile.PL will add them back in, if necessary.
eedaba54
PM
16514: The exception is SunOS 4.x, which needs them.
16515case "${osname}X${osvers}" in
16516sunos*X4*)
16517 perllibs="$libs"
16518 ;;
16519*) case "$usedl" in
16520 $define|true|[yY]*)
16521 set X `echo " $libs " | sed -e 's@ -lndbm @ @' -e 's@ -lgdbm @ @' -e 's@ -ldbm @ @' -e 's@ -ldb @ @'`
16522 shift
16523 perllibs="$*"
16524 ;;
16525 *) perllibs="$libs"
16526 ;;
16527 esac
16528 ;;
9c839522 16529esac
5f80c64f
JH
16530
16531: Remove build directory name from cppstdin so it can be used from
16532: either the present location or the final installed location.
16533echo " "
16534: Get out of the UU directory to get correct path name.
16535cd ..
16536case "$cppstdin" in
16537`pwd`/cppstdin)
16538 echo "Stripping down cppstdin path name"
16539 cppstdin=cppstdin
16540 ;;
16541esac
16542cd UU
16543
16544: end of configuration questions
16545echo " "
16546echo "End of configuration questions."
16547echo " "
16548
16549: back to where it started
16550if test -d ../UU; then
16551 cd ..
16552fi
16553
16554: configuration may be patched via a 'config.over' file
16555if $test -f config.over; then
16556 echo " "
16557 dflt=y
16558 rp='I see a config.over file. Do you wish to load it?'
16559 . UU/myread
16560 case "$ans" in
16561 n*) echo "OK, I'll ignore it.";;
16562 *) . ./config.over
16563 echo "Configuration override changes have been loaded."
16564 ;;
16565 esac
16566fi
16567
16568: in case they want portability, strip down executable paths
16569case "$d_portable" in
16570"$define")
16571 echo " "
16572 echo "Stripping down executable paths..." >&4
16573 for file in $loclist $trylist; do
534ac15a
JH
16574 eval temp=\$$file
16575 eval $file=`basename $temp`
5f80c64f
JH
16576 done
16577 ;;
16578esac
16579
16580: create config.sh file
16581echo " "
16582echo "Creating config.sh..." >&4
16583$spitshell <<EOT >config.sh
16584$startsh
16585#
16586# This file was produced by running the Configure script. It holds all the
16587# definitions figured out by Configure. Should you modify one of these values,
16588# do not forget to propagate your changes by running "Configure -der". You may
16589# instead choose to run each of the .SH files by yourself, or "Configure -S".
16590#
16591
16592# Package name : $package
16593# Source directory : $src
16594# Configuration time: $cf_time
16595# Configured by : $cf_by
16596# Target system : $myuname
16597
16598Author='$Author'
16599Date='$Date'
16600Header='$Header'
16601Id='$Id'
16602Locker='$Locker'
16603Log='$Log'
16604Mcc='$Mcc'
16605RCSfile='$RCSfile'
16606Revision='$Revision'
16607Source='$Source'
16608State='$State'
16609_a='$_a'
16610_exe='$_exe'
16611_o='$_o'
b4eb6b3d 16612afs='$afs'
a6d26a0d 16613afsroot='$afsroot'
b4eb6b3d
JH
16614alignbytes='$alignbytes'
16615ansi2knr='$ansi2knr'
16616aphostname='$aphostname'
16617api_revision='$api_revision'
16618api_subversion='$api_subversion'
16619api_version='$api_version'
16620api_versionstring='$api_versionstring'
5f80c64f 16621ar='$ar'
b4eb6b3d
JH
16622archlib='$archlib'
16623archlibexp='$archlibexp'
16624archname64='$archname64'
16625archname='$archname'
5f80c64f
JH
16626archobjs='$archobjs'
16627awk='$awk'
b4eb6b3d 16628baserev='$baserev'
5f80c64f 16629bash='$bash'
b4eb6b3d
JH
16630bin='$bin'
16631bincompat5005='$bincompat5005'
16632binexp='$binexp'
5f80c64f
JH
16633bison='$bison'
16634byacc='$byacc'
b4eb6b3d 16635byteorder='$byteorder'
5f80c64f 16636c='$c'
b4eb6b3d 16637castflags='$castflags'
5f80c64f
JH
16638cat='$cat'
16639cc='$cc'
16640cccdlflags='$cccdlflags'
16641ccdlflags='$ccdlflags'
16642ccflags='$ccflags'
b4eb6b3d 16643ccflags_uselargefiles='$ccflags_uselargefiles'
e723fc21 16644ccname='$ccname'
b4eb6b3d 16645ccsymbols='$ccsymbols'
6b356c8e 16646ccversion='$ccversion'
5f80c64f 16647cf_by='$cf_by'
b4eb6b3d 16648cf_email='$cf_email'
5f80c64f 16649cf_time='$cf_time'
b4eb6b3d 16650charsize='$charsize'
5f80c64f
JH
16651chgrp='$chgrp'
16652chmod='$chmod'
16653chown='$chown'
b4eb6b3d 16654clocktype='$clocktype'
5f80c64f
JH
16655comm='$comm'
16656compress='$compress'
16657contains='$contains'
16658cp='$cp'
16659cpio='$cpio'
16660cpp='$cpp'
b4eb6b3d
JH
16661cpp_stuff='$cpp_stuff'
16662cppccsymbols='$cppccsymbols'
5f80c64f
JH
16663cppflags='$cppflags'
16664cpplast='$cpplast'
16665cppminus='$cppminus'
16666cpprun='$cpprun'
16667cppstdin='$cppstdin'
b4eb6b3d 16668cppsymbols='$cppsymbols'
b4eb6b3d 16669cryptlib='$cryptlib'
5f80c64f 16670csh='$csh'
b4eb6b3d
JH
16671d_Gconvert='$d_Gconvert'
16672d_PRIEUldbl='$d_PRIEUldbl'
16673d_PRIFUldbl='$d_PRIFUldbl'
16674d_PRIGUldbl='$d_PRIGUldbl'
16675d_PRIXU64='$d_PRIXU64'
16676d_PRId64='$d_PRId64'
16677d_PRIeldbl='$d_PRIeldbl'
16678d_PRIfldbl='$d_PRIfldbl'
16679d_PRIgldbl='$d_PRIgldbl'
16680d_PRIi64='$d_PRIi64'
16681d_PRIo64='$d_PRIo64'
16682d_PRIu64='$d_PRIu64'
16683d_PRIx64='$d_PRIx64'
16684d_SCNfldbl='$d_SCNfldbl'
74cac757 16685d__fwalk='$d__fwalk'
b4eb6b3d
JH
16686d_access='$d_access'
16687d_accessx='$d_accessx'
16688d_alarm='$d_alarm'
16689d_archlib='$d_archlib'
16690d_atolf='$d_atolf'
16691d_atoll='$d_atoll'
16692d_attribut='$d_attribut'
16693d_bcmp='$d_bcmp'
16694d_bcopy='$d_bcopy'
16695d_bincompat5005='$d_bincompat5005'
5f80c64f 16696d_bsd='$d_bsd'
b4eb6b3d
JH
16697d_bsdgetpgrp='$d_bsdgetpgrp'
16698d_bsdsetpgrp='$d_bsdsetpgrp'
16699d_bzero='$d_bzero'
16700d_casti32='$d_casti32'
16701d_castneg='$d_castneg'
16702d_charvspr='$d_charvspr'
16703d_chown='$d_chown'
16704d_chroot='$d_chroot'
16705d_chsize='$d_chsize'
16706d_closedir='$d_closedir'
4e0554ec 16707d_cmsghdr_s='$d_cmsghdr_s'
b4eb6b3d
JH
16708d_const='$d_const'
16709d_crypt='$d_crypt'
16710d_csh='$d_csh'
16711d_cuserid='$d_cuserid'
16712d_dbl_dig='$d_dbl_dig'
2ef53570 16713d_dbminitproto='$d_dbminitproto'
b4eb6b3d
JH
16714d_difftime='$d_difftime'
16715d_dirnamlen='$d_dirnamlen'
16716d_dlerror='$d_dlerror'
5f80c64f 16717d_dlopen='$d_dlopen'
b4eb6b3d
JH
16718d_dlsymun='$d_dlsymun'
16719d_dosuid='$d_dosuid'
16720d_drand48proto='$d_drand48proto'
16721d_dup2='$d_dup2'
16722d_eaccess='$d_eaccess'
16723d_endgrent='$d_endgrent'
16724d_endhent='$d_endhent'
16725d_endnent='$d_endnent'
16726d_endpent='$d_endpent'
16727d_endpwent='$d_endpwent'
16728d_endsent='$d_endsent'
16729d_eofnblk='$d_eofnblk'
5f80c64f 16730d_eunice='$d_eunice'
b363b713 16731d_fchdir='$d_fchdir'
b4eb6b3d
JH
16732d_fchmod='$d_fchmod'
16733d_fchown='$d_fchown'
16734d_fcntl='$d_fcntl'
9d9004a9 16735d_fcntl_can_lock='$d_fcntl_can_lock'
b4eb6b3d
JH
16736d_fd_macros='$d_fd_macros'
16737d_fd_set='$d_fd_set'
16738d_fds_bits='$d_fds_bits'
16739d_fgetpos='$d_fgetpos'
16740d_flexfnam='$d_flexfnam'
16741d_flock='$d_flock'
2ef53570 16742d_flockproto='$d_flockproto'
b4eb6b3d
JH
16743d_fork='$d_fork'
16744d_fpathconf='$d_fpathconf'
16745d_fpos64_t='$d_fpos64_t'
16746d_frexpl='$d_frexpl'
16747d_fs_data_s='$d_fs_data_s'
16748d_fseeko='$d_fseeko'
16749d_fsetpos='$d_fsetpos'
16750d_fstatfs='$d_fstatfs'
16751d_fstatvfs='$d_fstatvfs'
411ab01c 16752d_fsync='$d_fsync'
b4eb6b3d
JH
16753d_ftello='$d_ftello'
16754d_ftime='$d_ftime'
16755d_getcwd='$d_getcwd'
16756d_getespwnam='$d_getespwnam'
16757d_getfsstat='$d_getfsstat'
16758d_getgrent='$d_getgrent'
16759d_getgrps='$d_getgrps'
16760d_gethbyaddr='$d_gethbyaddr'
16761d_gethbyname='$d_gethbyname'
16762d_gethent='$d_gethent'
16763d_gethname='$d_gethname'
16764d_gethostprotos='$d_gethostprotos'
4e0554ec 16765d_getitimer='$d_getitimer'
b4eb6b3d
JH
16766d_getlogin='$d_getlogin'
16767d_getmnt='$d_getmnt'
16768d_getmntent='$d_getmntent'
16769d_getnbyaddr='$d_getnbyaddr'
16770d_getnbyname='$d_getnbyname'
16771d_getnent='$d_getnent'
16772d_getnetprotos='$d_getnetprotos'
0c0643d0 16773d_getpagsz='$d_getpagsz'
b4eb6b3d
JH
16774d_getpbyname='$d_getpbyname'
16775d_getpbynumber='$d_getpbynumber'
16776d_getpent='$d_getpent'
16777d_getpgid='$d_getpgid'
16778d_getpgrp2='$d_getpgrp2'
16779d_getpgrp='$d_getpgrp'
16780d_getppid='$d_getppid'
16781d_getprior='$d_getprior'
16782d_getprotoprotos='$d_getprotoprotos'
16783d_getprpwnam='$d_getprpwnam'
16784d_getpwent='$d_getpwent'
16785d_getsbyname='$d_getsbyname'
16786d_getsbyport='$d_getsbyport'
16787d_getsent='$d_getsent'
16788d_getservprotos='$d_getservprotos'
16789d_getspnam='$d_getspnam'
16790d_gettimeod='$d_gettimeod'
5f80c64f 16791d_gnulibc='$d_gnulibc'
b4eb6b3d
JH
16792d_grpasswd='$d_grpasswd'
16793d_hasmntopt='$d_hasmntopt'
16794d_htonl='$d_htonl'
16795d_iconv='$d_iconv'
16796d_index='$d_index'
16797d_inetaton='$d_inetaton'
16798d_int64_t='$d_int64_t'
16799d_isascii='$d_isascii'
16800d_isnan='$d_isnan'
16801d_isnanl='$d_isnanl'
16802d_killpg='$d_killpg'
16803d_lchown='$d_lchown'
16804d_ldbl_dig='$d_ldbl_dig'
16805d_link='$d_link'
16806d_locconv='$d_locconv'
16807d_lockf='$d_lockf'
16808d_longdbl='$d_longdbl'
16809d_longlong='$d_longlong'
16810d_lseekproto='$d_lseekproto'
16811d_lstat='$d_lstat'
16812d_madvise='$d_madvise'
16813d_mblen='$d_mblen'
16814d_mbstowcs='$d_mbstowcs'
16815d_mbtowc='$d_mbtowc'
16816d_memchr='$d_memchr'
16817d_memcmp='$d_memcmp'
16818d_memcpy='$d_memcpy'
16819d_memmove='$d_memmove'
16820d_memset='$d_memset'
16821d_mkdir='$d_mkdir'
16822d_mkdtemp='$d_mkdtemp'
16823d_mkfifo='$d_mkfifo'
16824d_mkstemp='$d_mkstemp'
16825d_mkstemps='$d_mkstemps'
16826d_mktime='$d_mktime'
16827d_mmap='$d_mmap'
16828d_modfl='$d_modfl'
e67aeab1 16829d_modfl_pow32_bug='$d_modfl_pow32_bug'
b4eb6b3d
JH
16830d_mprotect='$d_mprotect'
16831d_msg='$d_msg'
16832d_msg_ctrunc='$d_msg_ctrunc'
16833d_msg_dontroute='$d_msg_dontroute'
16834d_msg_oob='$d_msg_oob'
16835d_msg_peek='$d_msg_peek'
16836d_msg_proxy='$d_msg_proxy'
16837d_msgctl='$d_msgctl'
16838d_msgget='$d_msgget'
4e0554ec 16839d_msghdr_s='$d_msghdr_s'
b4eb6b3d
JH
16840d_msgrcv='$d_msgrcv'
16841d_msgsnd='$d_msgsnd'
16842d_msync='$d_msync'
16843d_munmap='$d_munmap'
16844d_mymalloc='$d_mymalloc'
16845d_nice='$d_nice'
2765b840 16846d_nl_langinfo='$d_nl_langinfo'
b4eb6b3d
JH
16847d_nv_preserves_uv='$d_nv_preserves_uv'
16848d_nv_preserves_uv_bits='$d_nv_preserves_uv_bits'
16849d_off64_t='$d_off64_t'
16850d_old_pthread_create_joinable='$d_old_pthread_create_joinable'
16851d_oldpthreads='$d_oldpthreads'
16852d_oldsock='$d_oldsock'
16853d_open3='$d_open3'
16854d_pathconf='$d_pathconf'
16855d_pause='$d_pause'
16856d_perl_otherlibdirs='$d_perl_otherlibdirs'
16857d_phostname='$d_phostname'
16858d_pipe='$d_pipe'
16859d_poll='$d_poll'
5f80c64f 16860d_portable='$d_portable'
d6483fcc 16861d_pthread_atfork='$d_pthread_atfork'
b4eb6b3d
JH
16862d_pthread_yield='$d_pthread_yield'
16863d_pwage='$d_pwage'
16864d_pwchange='$d_pwchange'
16865d_pwclass='$d_pwclass'
16866d_pwcomment='$d_pwcomment'
16867d_pwexpire='$d_pwexpire'
16868d_pwgecos='$d_pwgecos'
16869d_pwpasswd='$d_pwpasswd'
16870d_pwquota='$d_pwquota'
16871d_qgcvt='$d_qgcvt'
16872d_quad='$d_quad'
16873d_readdir='$d_readdir'
16874d_readlink='$d_readlink'
4e0554ec
JH
16875d_readv='$d_readv'
16876d_recvmsg='$d_recvmsg'
b4eb6b3d
JH
16877d_rename='$d_rename'
16878d_rewinddir='$d_rewinddir'
16879d_rmdir='$d_rmdir'
16880d_safebcpy='$d_safebcpy'
16881d_safemcpy='$d_safemcpy'
16882d_sanemcmp='$d_sanemcmp'
ef9f17be 16883d_sbrkproto='$d_sbrkproto'
b4eb6b3d
JH
16884d_sched_yield='$d_sched_yield'
16885d_scm_rights='$d_scm_rights'
16886d_seekdir='$d_seekdir'
16887d_select='$d_select'
16888d_sem='$d_sem'
16889d_semctl='$d_semctl'
16890d_semctl_semid_ds='$d_semctl_semid_ds'
16891d_semctl_semun='$d_semctl_semun'
16892d_semget='$d_semget'
16893d_semop='$d_semop'
4e0554ec 16894d_sendmsg='$d_sendmsg'
b4eb6b3d
JH
16895d_setegid='$d_setegid'
16896d_seteuid='$d_seteuid'
16897d_setgrent='$d_setgrent'
16898d_setgrps='$d_setgrps'
16899d_sethent='$d_sethent'
4e0554ec 16900d_setitimer='$d_setitimer'
b4eb6b3d
JH
16901d_setlinebuf='$d_setlinebuf'
16902d_setlocale='$d_setlocale'
16903d_setnent='$d_setnent'
16904d_setpent='$d_setpent'
16905d_setpgid='$d_setpgid'
16906d_setpgrp2='$d_setpgrp2'
16907d_setpgrp='$d_setpgrp'
16908d_setprior='$d_setprior'
16909d_setproctitle='$d_setproctitle'
16910d_setpwent='$d_setpwent'
16911d_setregid='$d_setregid'
16912d_setresgid='$d_setresgid'
16913d_setresuid='$d_setresuid'
16914d_setreuid='$d_setreuid'
16915d_setrgid='$d_setrgid'
16916d_setruid='$d_setruid'
16917d_setsent='$d_setsent'
16918d_setsid='$d_setsid'
16919d_setvbuf='$d_setvbuf'
16920d_sfio='$d_sfio'
16921d_shm='$d_shm'
16922d_shmat='$d_shmat'
16923d_shmatprototype='$d_shmatprototype'
16924d_shmctl='$d_shmctl'
16925d_shmdt='$d_shmdt'
16926d_shmget='$d_shmget'
16927d_sigaction='$d_sigaction'
983dbef6 16928d_sigprocmask='$d_sigprocmask'
b4eb6b3d 16929d_sigsetjmp='$d_sigsetjmp'
49a78c82 16930d_sockatmark='$d_sockatmark'
2ef53570 16931d_sockatmarkproto='$d_sockatmarkproto'
b4eb6b3d
JH
16932d_socket='$d_socket'
16933d_socklen_t='$d_socklen_t'
16934d_sockpair='$d_sockpair'
16935d_socks5_init='$d_socks5_init'
16936d_sqrtl='$d_sqrtl'
eef837ea 16937d_sresgproto='$d_sresgproto'
640374d0 16938d_sresuproto='$d_sresuproto'
b4eb6b3d
JH
16939d_statblks='$d_statblks'
16940d_statfs_f_flags='$d_statfs_f_flags'
16941d_statfs_s='$d_statfs_s'
16942d_statvfs='$d_statvfs'
16943d_stdio_cnt_lval='$d_stdio_cnt_lval'
16944d_stdio_ptr_lval='$d_stdio_ptr_lval'
a7ffa9b9
NC
16945d_stdio_ptr_lval_nochange_cnt='$d_stdio_ptr_lval_nochange_cnt'
16946d_stdio_ptr_lval_sets_cnt='$d_stdio_ptr_lval_sets_cnt'
b4eb6b3d
JH
16947d_stdio_stream_array='$d_stdio_stream_array'
16948d_stdiobase='$d_stdiobase'
16949d_stdstdio='$d_stdstdio'
16950d_strchr='$d_strchr'
16951d_strcoll='$d_strcoll'
16952d_strctcpy='$d_strctcpy'
16953d_strerrm='$d_strerrm'
16954d_strerror='$d_strerror'
b3c85772 16955d_strftime='$d_strftime'
b4eb6b3d
JH
16956d_strtod='$d_strtod'
16957d_strtol='$d_strtol'
16958d_strtold='$d_strtold'
16959d_strtoll='$d_strtoll'
28e5dec8 16960d_strtoq='$d_strtoq'
b4eb6b3d
JH
16961d_strtoul='$d_strtoul'
16962d_strtoull='$d_strtoull'
16963d_strtouq='$d_strtouq'
16964d_strxfrm='$d_strxfrm'
16965d_suidsafe='$d_suidsafe'
16966d_symlink='$d_symlink'
16967d_syscall='$d_syscall'
2ef53570 16968d_syscallproto='$d_syscallproto'
b4eb6b3d
JH
16969d_sysconf='$d_sysconf'
16970d_sysernlst='$d_sysernlst'
16971d_syserrlst='$d_syserrlst'
16972d_system='$d_system'
16973d_tcgetpgrp='$d_tcgetpgrp'
16974d_tcsetpgrp='$d_tcsetpgrp'
16975d_telldir='$d_telldir'
16976d_telldirproto='$d_telldirproto'
16977d_time='$d_time'
16978d_times='$d_times'
16979d_truncate='$d_truncate'
16980d_tzname='$d_tzname'
4e0554ec
JH
16981d_u32align='$d_u32align'
16982d_ualarm='$d_ualarm'
b4eb6b3d
JH
16983d_umask='$d_umask'
16984d_uname='$d_uname'
16985d_union_semun='$d_union_semun'
4e0554ec 16986d_usleep='$d_usleep'
2ef53570 16987d_usleepproto='$d_usleepproto'
b4eb6b3d
JH
16988d_ustat='$d_ustat'
16989d_vendorarch='$d_vendorarch'
16990d_vendorbin='$d_vendorbin'
16991d_vendorlib='$d_vendorlib'
16992d_vfork='$d_vfork'
16993d_void_closedir='$d_void_closedir'
16994d_voidsig='$d_voidsig'
16995d_voidtty='$d_voidtty'
16996d_volatile='$d_volatile'
16997d_vprintf='$d_vprintf'
16998d_wait4='$d_wait4'
16999d_waitpid='$d_waitpid'
17000d_wcstombs='$d_wcstombs'
17001d_wctomb='$d_wctomb'
4e0554ec 17002d_writev='$d_writev'
5f80c64f
JH
17003d_xenix='$d_xenix'
17004date='$date'
b4eb6b3d
JH
17005db_hashtype='$db_hashtype'
17006db_prefixtype='$db_prefixtype'
640374d0
JH
17007db_version_major='$db_version_major'
17008db_version_minor='$db_version_minor'
17009db_version_patch='$db_version_patch'
b4eb6b3d
JH
17010defvoidused='$defvoidused'
17011direntrytype='$direntrytype'
17012dlext='$dlext'
5f80c64f 17013dlsrc='$dlsrc'
b4eb6b3d
JH
17014doublesize='$doublesize'
17015drand01='$drand01'
17016dynamic_ext='$dynamic_ext'
17017eagain='$eagain'
17018ebcdic='$ebcdic'
5f80c64f
JH
17019echo='$echo'
17020egrep='$egrep'
17021emacs='$emacs'
17022eunicefix='$eunicefix'
17023exe_ext='$exe_ext'
17024expr='$expr'
b4eb6b3d 17025extensions='$extensions'
6fcddf3b 17026extras='$extras'
b4eb6b3d
JH
17027fflushNULL='$fflushNULL'
17028fflushall='$fflushall'
5f80c64f
JH
17029find='$find'
17030firstmakefile='$firstmakefile'
17031flex='$flex'
b4eb6b3d
JH
17032fpossize='$fpossize'
17033fpostype='$fpostype'
17034freetype='$freetype'
5440bc8e 17035from='$from'
b4eb6b3d
JH
17036full_ar='$full_ar'
17037full_csh='$full_csh'
17038full_sed='$full_sed'
5b463ca7 17039gccosandvers='$gccosandvers'
5f80c64f 17040gccversion='$gccversion'
b4eb6b3d
JH
17041gidformat='$gidformat'
17042gidsign='$gidsign'
17043gidsize='$gidsize'
17044gidtype='$gidtype'
5f80c64f
JH
17045glibpth='$glibpth'
17046grep='$grep'
b4eb6b3d
JH
17047groupcat='$groupcat'
17048groupstype='$groupstype'
5f80c64f 17049gzip='$gzip'
b4eb6b3d
JH
17050h_fcntl='$h_fcntl'
17051h_sysfile='$h_sysfile'
5f80c64f 17052hint='$hint'
b4eb6b3d
JH
17053hostcat='$hostcat'
17054i16size='$i16size'
17055i16type='$i16type'
17056i32size='$i32size'
17057i32type='$i32type'
17058i64size='$i64size'
17059i64type='$i64type'
17060i8size='$i8size'
17061i8type='$i8type'
17062i_arpainet='$i_arpainet'
17063i_bsdioctl='$i_bsdioctl'
17064i_db='$i_db'
17065i_dbm='$i_dbm'
17066i_dirent='$i_dirent'
5f80c64f 17067i_dld='$i_dld'
b4eb6b3d
JH
17068i_dlfcn='$i_dlfcn'
17069i_fcntl='$i_fcntl'
17070i_float='$i_float'
17071i_gdbm='$i_gdbm'
17072i_grp='$i_grp'
17073i_iconv='$i_iconv'
17074i_ieeefp='$i_ieeefp'
17075i_inttypes='$i_inttypes'
2765b840 17076i_langinfo='$i_langinfo'
b4eb6b3d
JH
17077i_libutil='$i_libutil'
17078i_limits='$i_limits'
17079i_locale='$i_locale'
17080i_machcthr='$i_machcthr'
17081i_malloc='$i_malloc'
17082i_math='$i_math'
17083i_memory='$i_memory'
17084i_mntent='$i_mntent'
17085i_ndbm='$i_ndbm'
17086i_netdb='$i_netdb'
17087i_neterrno='$i_neterrno'
17088i_netinettcp='$i_netinettcp'
17089i_niin='$i_niin'
17090i_poll='$i_poll'
17091i_prot='$i_prot'
17092i_pthread='$i_pthread'
17093i_pwd='$i_pwd'
17094i_rpcsvcdbm='$i_rpcsvcdbm'
17095i_sfio='$i_sfio'
17096i_sgtty='$i_sgtty'
17097i_shadow='$i_shadow'
17098i_socks='$i_socks'
17099i_stdarg='$i_stdarg'
17100i_stddef='$i_stddef'
17101i_stdlib='$i_stdlib'
17102i_string='$i_string'
17103i_sunmath='$i_sunmath'
17104i_sysaccess='$i_sysaccess'
17105i_sysdir='$i_sysdir'
17106i_sysfile='$i_sysfile'
17107i_sysfilio='$i_sysfilio'
17108i_sysin='$i_sysin'
17109i_sysioctl='$i_sysioctl'
17110i_syslog='$i_syslog'
17111i_sysmman='$i_sysmman'
17112i_sysmode='$i_sysmode'
17113i_sysmount='$i_sysmount'
17114i_sysndir='$i_sysndir'
17115i_sysparam='$i_sysparam'
17116i_sysresrc='$i_sysresrc'
17117i_syssecrt='$i_syssecrt'
17118i_sysselct='$i_sysselct'
17119i_syssockio='$i_syssockio'
17120i_sysstat='$i_sysstat'
17121i_sysstatfs='$i_sysstatfs'
17122i_sysstatvfs='$i_sysstatvfs'
17123i_systime='$i_systime'
17124i_systimek='$i_systimek'
17125i_systimes='$i_systimes'
17126i_systypes='$i_systypes'
17127i_sysuio='$i_sysuio'
17128i_sysun='$i_sysun'
17129i_sysutsname='$i_sysutsname'
17130i_sysvfs='$i_sysvfs'
17131i_syswait='$i_syswait'
17132i_termio='$i_termio'
17133i_termios='$i_termios'
17134i_time='$i_time'
17135i_unistd='$i_unistd'
17136i_ustat='$i_ustat'
17137i_utime='$i_utime'
17138i_values='$i_values'
17139i_varargs='$i_varargs'
17140i_varhdr='$i_varhdr'
17141i_vfork='$i_vfork'
5f80c64f 17142ignore_versioned_solibs='$ignore_versioned_solibs'
b4eb6b3d
JH
17143inc_version_list='$inc_version_list'
17144inc_version_list_init='$inc_version_list_init'
5f80c64f
JH
17145incpath='$incpath'
17146inews='$inews'
b4eb6b3d
JH
17147installarchlib='$installarchlib'
17148installbin='$installbin'
17149installman1dir='$installman1dir'
17150installman3dir='$installman3dir'
17151installprefix='$installprefix'
17152installprefixexp='$installprefixexp'
17153installprivlib='$installprivlib'
17154installscript='$installscript'
17155installsitearch='$installsitearch'
17156installsitebin='$installsitebin'
17157installsitelib='$installsitelib'
17158installstyle='$installstyle'
17159installusrbinperl='$installusrbinperl'
17160installvendorarch='$installvendorarch'
17161installvendorbin='$installvendorbin'
17162installvendorlib='$installvendorlib'
17163intsize='$intsize'
4b661809 17164issymlink='$issymlink'
b4eb6b3d
JH
17165ivdformat='$ivdformat'
17166ivsize='$ivsize'
17167ivtype='$ivtype'
17168known_extensions='$known_extensions'
5f80c64f 17169ksh='$ksh'
5f80c64f
JH
17170ld='$ld'
17171lddlflags='$lddlflags'
17172ldflags='$ldflags'
b4eb6b3d
JH
17173ldflags_uselargefiles='$ldflags_uselargefiles'
17174ldlibpthname='$ldlibpthname'
5f80c64f
JH
17175less='$less'
17176lib_ext='$lib_ext'
17177libc='$libc'
b4eb6b3d 17178libperl='$libperl'
5f80c64f
JH
17179libpth='$libpth'
17180libs='$libs'
43999f95
JH
17181libsdirs='$libsdirs'
17182libsfiles='$libsfiles'
17183libsfound='$libsfound'
13b3f787 17184libspath='$libspath'
5f80c64f 17185libswanted='$libswanted'
b4eb6b3d 17186libswanted_uselargefiles='$libswanted_uselargefiles'
5f80c64f
JH
17187line='$line'
17188lint='$lint'
17189lkflags='$lkflags'
17190ln='$ln'
17191lns='$lns'
17192locincpth='$locincpth'
17193loclibpth='$loclibpth'
b4eb6b3d
JH
17194longdblsize='$longdblsize'
17195longlongsize='$longlongsize'
17196longsize='$longsize'
5f80c64f
JH
17197lp='$lp'
17198lpr='$lpr'
17199ls='$ls'
b4eb6b3d
JH
17200lseeksize='$lseeksize'
17201lseektype='$lseektype'
5f80c64f
JH
17202mail='$mail'
17203mailx='$mailx'
17204make='$make'
17205make_set_make='$make_set_make'
b4eb6b3d
JH
17206mallocobj='$mallocobj'
17207mallocsrc='$mallocsrc'
17208malloctype='$malloctype'
17209man1dir='$man1dir'
17210man1direxp='$man1direxp'
17211man1ext='$man1ext'
17212man3dir='$man3dir'
17213man3direxp='$man3direxp'
17214man3ext='$man3ext'
5f80c64f
JH
17215mips_type='$mips_type'
17216mkdir='$mkdir'
b4eb6b3d
JH
17217mmaptype='$mmaptype'
17218modetype='$modetype'
5f80c64f 17219more='$more'
b4eb6b3d 17220multiarch='$multiarch'
5f80c64f 17221mv='$mv'
b4eb6b3d
JH
17222myarchname='$myarchname'
17223mydomain='$mydomain'
17224myhostname='$myhostname'
5f80c64f
JH
17225myuname='$myuname'
17226n='$n'
2cc61e15 17227need_va_copy='$need_va_copy'
b4eb6b3d
JH
17228netdb_hlen_type='$netdb_hlen_type'
17229netdb_host_type='$netdb_host_type'
17230netdb_name_type='$netdb_name_type'
17231netdb_net_type='$netdb_net_type'
5f80c64f
JH
17232nm='$nm'
17233nm_opt='$nm_opt'
17234nm_so_opt='$nm_so_opt'
b4eb6b3d 17235nonxs_ext='$nonxs_ext'
5f80c64f 17236nroff='$nroff'
b4eb6b3d
JH
17237nvEUformat='$nvEUformat'
17238nvFUformat='$nvFUformat'
17239nvGUformat='$nvGUformat'
17240nveformat='$nveformat'
17241nvfformat='$nvfformat'
17242nvgformat='$nvgformat'
17243nvsize='$nvsize'
17244nvtype='$nvtype'
17245o_nonblock='$o_nonblock'
5f80c64f 17246obj_ext='$obj_ext'
b4eb6b3d 17247old_pthread_create_joinable='$old_pthread_create_joinable'
5f80c64f 17248optimize='$optimize'
b4eb6b3d 17249orderlib='$orderlib'
5f80c64f
JH
17250osname='$osname'
17251osvers='$osvers'
b4eb6b3d 17252otherlibdirs='$otherlibdirs'
5f80c64f 17253package='$package'
b4eb6b3d
JH
17254pager='$pager'
17255passcat='$passcat'
17256patchlevel='$patchlevel'
5f80c64f 17257path_sep='$path_sep'
b4eb6b3d 17258perl5='$perl5'
5f80c64f 17259perl='$perl'
151e6568 17260perl_patchlevel='$perl_patchlevel'
b4eb6b3d 17261perladmin='$perladmin'
9c839522 17262perllibs='$perllibs'
b4eb6b3d 17263perlpath='$perlpath'
5f80c64f 17264pg='$pg'
b4eb6b3d
JH
17265phostname='$phostname'
17266pidtype='$pidtype'
5f80c64f 17267plibpth='$plibpth'
b4eb6b3d 17268pm_apiversion='$pm_apiversion'
5f80c64f
JH
17269pmake='$pmake'
17270pr='$pr'
b4eb6b3d
JH
17271prefix='$prefix'
17272prefixexp='$prefixexp'
17273privlib='$privlib'
17274privlibexp='$privlibexp'
17275prototype='$prototype'
17276ptrsize='$ptrsize'
17277quadkind='$quadkind'
17278quadtype='$quadtype'
17279randbits='$randbits'
17280randfunc='$randfunc'
17281randseedtype='$randseedtype'
17282ranlib='$ranlib'
17283rd_nodata='$rd_nodata'
17284revision='$revision'
5f80c64f
JH
17285rm='$rm'
17286rmail='$rmail'
5440bc8e 17287run='$run'
5f80c64f 17288runnm='$runnm'
b4eb6b3d
JH
17289sPRIEUldbl='$sPRIEUldbl'
17290sPRIFUldbl='$sPRIFUldbl'
17291sPRIGUldbl='$sPRIGUldbl'
17292sPRIXU64='$sPRIXU64'
17293sPRId64='$sPRId64'
17294sPRIeldbl='$sPRIeldbl'
17295sPRIfldbl='$sPRIfldbl'
17296sPRIgldbl='$sPRIgldbl'
17297sPRIi64='$sPRIi64'
17298sPRIo64='$sPRIo64'
17299sPRIu64='$sPRIu64'
17300sPRIx64='$sPRIx64'
17301sSCNfldbl='$sSCNfldbl'
17302sched_yield='$sched_yield'
17303scriptdir='$scriptdir'
17304scriptdirexp='$scriptdirexp'
5f80c64f 17305sed='$sed'
b4eb6b3d
JH
17306seedfunc='$seedfunc'
17307selectminbits='$selectminbits'
17308selecttype='$selecttype'
5f80c64f
JH
17309sendmail='$sendmail'
17310sh='$sh'
17311shar='$shar'
17312sharpbang='$sharpbang'
b4eb6b3d
JH
17313shmattype='$shmattype'
17314shortsize='$shortsize'
17315shrpenv='$shrpenv'
5f80c64f 17316shsharp='$shsharp'
b4eb6b3d
JH
17317sig_count='$sig_count'
17318sig_name='$sig_name'
17319sig_name_init='$sig_name_init'
17320sig_num='$sig_num'
17321sig_num_init='$sig_num_init'
76d3c696 17322sig_size='$sig_size'
b4eb6b3d
JH
17323signal_t='$signal_t'
17324sitearch='$sitearch'
17325sitearchexp='$sitearchexp'
17326sitebin='$sitebin'
17327sitebinexp='$sitebinexp'
17328sitelib='$sitelib'
17329sitelib_stem='$sitelib_stem'
17330sitelibexp='$sitelibexp'
17331siteprefix='$siteprefix'
17332siteprefixexp='$siteprefixexp'
17333sizesize='$sizesize'
17334sizetype='$sizetype'
5f80c64f
JH
17335sleep='$sleep'
17336smail='$smail'
5f80c64f 17337so='$so'
b4eb6b3d
JH
17338sockethdr='$sockethdr'
17339socketlib='$socketlib'
17340socksizetype='$socksizetype'
5f80c64f
JH
17341sort='$sort'
17342spackage='$spackage'
17343spitshell='$spitshell'
5f80c64f 17344src='$src'
b4eb6b3d
JH
17345ssizetype='$ssizetype'
17346startperl='$startperl'
5f80c64f 17347startsh='$startsh'
b4eb6b3d
JH
17348static_ext='$static_ext'
17349stdchar='$stdchar'
17350stdio_base='$stdio_base'
17351stdio_bufsiz='$stdio_bufsiz'
17352stdio_cnt='$stdio_cnt'
17353stdio_filbuf='$stdio_filbuf'
17354stdio_ptr='$stdio_ptr'
17355stdio_stream_array='$stdio_stream_array'
17356strings='$strings'
5f80c64f 17357submit='$submit'
b4eb6b3d
JH
17358subversion='$subversion'
17359sysman='$sysman'
5f80c64f
JH
17360tail='$tail'
17361tar='$tar'
5440bc8e 17362targetarch='$targetarch'
5f80c64f
JH
17363tbl='$tbl'
17364tee='$tee'
17365test='$test'
b4eb6b3d
JH
17366timeincl='$timeincl'
17367timetype='$timetype'
5440bc8e 17368to='$to'
5f80c64f
JH
17369touch='$touch'
17370tr='$tr'
17371trnl='$trnl'
17372troff='$troff'
b4eb6b3d
JH
17373u16size='$u16size'
17374u16type='$u16type'
17375u32size='$u32size'
17376u32type='$u32type'
17377u64size='$u64size'
17378u64type='$u64type'
17379u8size='$u8size'
17380u8type='$u8type'
17381uidformat='$uidformat'
17382uidsign='$uidsign'
17383uidsize='$uidsize'
17384uidtype='$uidtype'
5f80c64f
JH
17385uname='$uname'
17386uniq='$uniq'
b4eb6b3d
JH
17387uquadtype='$uquadtype'
17388use5005threads='$use5005threads'
17389use64bitall='$use64bitall'
17390use64bitint='$use64bitint'
5440bc8e 17391usecrosscompile='$usecrosscompile'
5f80c64f 17392usedl='$usedl'
b4eb6b3d
JH
17393useithreads='$useithreads'
17394uselargefiles='$uselargefiles'
17395uselongdouble='$uselongdouble'
17396usemorebits='$usemorebits'
17397usemultiplicity='$usemultiplicity'
17398usemymalloc='$usemymalloc'
5f80c64f 17399usenm='$usenm'
b4eb6b3d
JH
17400useopcode='$useopcode'
17401useperlio='$useperlio'
17402useposix='$useposix'
9514c62b 17403usereentrant='$usereentrant'
b4eb6b3d
JH
17404usesfio='$usesfio'
17405useshrplib='$useshrplib'
29209bc5 17406usesocks='$usesocks'
b4eb6b3d
JH
17407usethreads='$usethreads'
17408usevendorprefix='$usevendorprefix'
17409usevfork='$usevfork'
5f80c64f
JH
17410usrinc='$usrinc'
17411uuname='$uuname'
b4eb6b3d
JH
17412uvXUformat='$uvXUformat'
17413uvoformat='$uvoformat'
17414uvsize='$uvsize'
17415uvtype='$uvtype'
17416uvuformat='$uvuformat'
17417uvxformat='$uvxformat'
17418vendorarch='$vendorarch'
17419vendorarchexp='$vendorarchexp'
17420vendorbin='$vendorbin'
17421vendorbinexp='$vendorbinexp'
17422vendorlib='$vendorlib'
17423vendorlib_stem='$vendorlib_stem'
17424vendorlibexp='$vendorlibexp'
17425vendorprefix='$vendorprefix'
17426vendorprefixexp='$vendorprefixexp'
17427version='$version'
861eb78d 17428version_patchlevel_string='$version_patchlevel_string'
d56c5707 17429versiononly='$versiononly'
5f80c64f 17430vi='$vi'
b4eb6b3d 17431voidflags='$voidflags'
5f80c64f 17432xlibpth='$xlibpth'
b4eb6b3d 17433xs_apiversion='$xs_apiversion'
3659ebf1
JH
17434yacc='$yacc'
17435yaccflags='$yaccflags'
5f80c64f
JH
17436zcat='$zcat'
17437zip='$zip'
17438EOT
17439
17440: Add in command line options if available
17441$test -f UU/cmdline.opt && $cat UU/cmdline.opt >> config.sh
17442
17443: add special variables
17444$test -f $src/patchlevel.h && \
d00b958f 17445awk '/^#define[ ]+PERL_/ {printf "%s=%s\n",$2,$3}' $src/patchlevel.h >>config.sh
151e6568 17446echo "PERL_PATCHLEVEL=$perl_patchlevel" >>config.sh
a02608de 17447echo "PERL_CONFIG_SH=true" >>config.sh
5f80c64f
JH
17448
17449: propagate old symbols
17450if $test -f UU/config.sh; then
381aa1ff 17451 <UU/config.sh $sort | $uniq >UU/oldconfig.sh
5f80c64f 17452 sed -n 's/^\([a-zA-Z_0-9]*\)=.*/\1/p' config.sh config.sh UU/oldconfig.sh |\
aef7654c 17453 $sort | $uniq -u >UU/oldsyms
5f80c64f
JH
17454 set X `cat UU/oldsyms`
17455 shift
17456 case $# in
17457 0) ;;
17458 *)
17459 cat <<EOM
17460Hmm...You had some extra variables I don't know about...I'll try to keep 'em...
17461EOM
17462 echo "# Variables propagated from previous config.sh file." >>config.sh
17463 for sym in `cat UU/oldsyms`; do
17464 echo " Propagating $hint variable "'$'"$sym..."
17465 eval 'tmp="$'"${sym}"'"'
17466 echo "$tmp" | \
17467 sed -e "s/'/'\"'\"'/g" -e "s/^/$sym='/" -e "s/$/'/" >>config.sh
17468 done
17469 ;;
17470 esac
17471fi
17472
17473: Finish up by extracting the .SH files
17474case "$alldone" in
17475exit)
17476 $rm -rf UU
24ccb310 17477 echo "Extraction done."
5f80c64f
JH
17478 exit 0
17479 ;;
17480cont)
17481 ;;
17482'')
17483 dflt=''
17484 nostick=true
17485 $cat <<EOM
17486
17487If you'd like to make any changes to the config.sh file before I begin
17488to configure things, do it as a shell escape now (e.g. !vi config.sh).
17489
17490EOM
17491 rp="Press return or use a shell escape to edit config.sh:"
17492 . UU/myread
17493 nostick=''
17494 case "$ans" in
17495 '') ;;
17496 *) : in case they cannot read
17497 sh 1>&4 -c "$ans";;
17498 esac
17499 ;;
17500esac
17501
17502: if this fails, just run all the .SH files by hand
17503. ./config.sh
17504
17505echo " "
17506exec 1>&4
a43e8593 17507pwd=`pwd`
5f80c64f 17508. ./UU/extract
a43e8593 17509cd $pwd
5f80c64f
JH
17510
17511if $contains '^depend:' [Mm]akefile >/dev/null 2>&1; then
17512 dflt=y
17513 case "$silent" in
17514 true) ;;
17515 *)
17516 $cat <<EOM
17517
17518Now you need to generate make dependencies by running "$make depend".
17519You might prefer to run it in background: "$make depend > makedepend.out &"
17520It can take a while, so you might not want to run it right now.
17521
17522EOM
17523 ;;
17524 esac
17525 rp="Run $make depend now?"
17526 . UU/myread
17527 case "$ans" in
17528 y*)
3d5d58b1 17529 $make depend && echo "Now you must run '$make'."
5f80c64f
JH
17530 ;;
17531 *)
17532 echo "You must run '$make depend' then '$make'."
17533 ;;
17534 esac
17535elif test -f [Mm]akefile; then
17536 echo " "
17537 echo "Now you must run a $make."
17538else
24ccb310 17539 echo "Configure done."
5f80c64f
JH
17540fi
17541
17542if $test -f Policy.sh; then
17543 $cat <<EOM
17544
17545If you compile $package on a different machine or from a different object
17546directory, copy the Policy.sh file from this object directory to the
17547new one before you run Configure -- this will help you with most of
17548the policy defaults.
17549
17550EOM
17551fi
17552if $test -f config.msg; then
17553 echo "Hmm. I also noted the following information while running:"
17554 echo " "
17555 $cat config.msg >&4
17556 $rm -f config.msg
17557fi
17558$rm -f kit*isdone ark*isdone
17559$rm -rf UU
17560
17561: End of Configure
17562