This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
fix broken integrations in cfgperl
[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#
2573c5f9 23# Generated on Wed Jul 12 07:59:35 EET DST 2000 [metaconfig 3.0 PL70]
46193409 24# (with additional metaconfig patches by perlbug@perl.com)
2304df62
AD
25
26cat >/tmp/c1$$ <<EOF
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
37cat >/tmp/c2$$ <<EOF
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
43true || cat /tmp/c1$$ /tmp/c2$$
44true || exec sh $0 $argv:q
45
46(exit $?0) || cat /tmp/c2$$
47(exit $?0) || exec sh $0 $argv:q
48rm -f /tmp/c1$$ /tmp/c2$$
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
ff49bff8
JH
163ccsymbols=''
164cppccsymbols=''
165cppsymbols=''
a0d0e21e 166dynamic_ext=''
2304df62 167extensions=''
a0d0e21e 168known_extensions=''
4318d5a0 169nonxs_ext=''
bfb7748a 170static_ext=''
8ff267be 171useopcode=''
a0d0e21e 172useposix=''
ecfc5424 173d_bsd=''
40a7a20a 174d_eunice=''
2304df62
AD
175d_xenix=''
176eunicefix=''
177Mcc=''
dfe9444c 178ar=''
2304df62
AD
179awk=''
180bash=''
181bison=''
182byacc=''
183cat=''
184chgrp=''
185chmod=''
186chown=''
ecfc5424 187comm=''
2304df62
AD
188compress=''
189cp=''
190cpio=''
191cpp=''
192csh=''
193date=''
194echo=''
195egrep=''
196emacs=''
197expr=''
198find=''
199flex=''
2304df62 200grep=''
8ff267be 201gzip=''
2304df62
AD
202inews=''
203ksh=''
204less=''
205line=''
206lint=''
207ln=''
208lp=''
209lpr=''
210ls=''
211mail=''
212mailx=''
dfe9444c 213make=''
2304df62
AD
214mkdir=''
215more=''
216mv=''
693762b4 217nm=''
2304df62
AD
218nroff=''
219perl=''
220pg=''
221pmake=''
222pr=''
223rm=''
224rmail=''
225sed=''
226sendmail=''
2304df62
AD
227shar=''
228sleep=''
229smail=''
230sort=''
231submit=''
232tail=''
233tar=''
234tbl=''
693762b4 235tee=''
2304df62
AD
236test=''
237touch=''
238tr=''
239troff=''
240uname=''
241uniq=''
242uuname=''
243vi=''
244zcat=''
8ff267be 245zip=''
ccc7f9b3 246full_ar=''
1aef975c 247full_sed=''
a0d0e21e 248libswanted=''
2304df62
AD
249hint=''
250myuname=''
85e6fe83
LW
251osname=''
252osvers=''
2304df62
AD
253Author=''
254Date=''
255Header=''
256Id=''
257Locker=''
258Log=''
259RCSfile=''
260Revision=''
261Source=''
262State=''
dfe9444c
AD
263_a=''
264_exe=''
265_o=''
4633a7c4
LW
266archobjs=''
267exe_ext=''
268firstmakefile=''
269lib_ext=''
270obj_ext=''
271path_sep=''
2304df62 272afs=''
a0d0e21e 273alignbytes=''
c4f23d77 274ansi2knr=''
a0d0e21e
LW
275archlib=''
276archlibexp=''
a0d0e21e
LW
277d_archlib=''
278installarchlib=''
40000a8c
AD
279archname=''
280myarchname=''
cf2093f6
JH
281d_atolf=''
282d_atoll=''
ecfc5424 283baserev=''
2304df62
AD
284bin=''
285binexp=''
286installbin=''
d71b2b6b
JH
287bincompat5005=''
288d_bincompat5005=''
2304df62
AD
289byteorder=''
290cc=''
2304df62
AD
291ccflags=''
292cppflags=''
293ldflags=''
294lkflags=''
8e07c86e 295locincpth=''
2304df62 296optimize=''
8e07c86e 297cf_email=''
2304df62
AD
298cf_by=''
299cf_time=''
8175356b 300charsize=''
2304df62 301contains=''
a0d0e21e 302cpp_stuff=''
2304df62
AD
303cpplast=''
304cppminus=''
305cpprun=''
306cppstdin=''
68c15b6f 307crosscompile=''
2304df62 308d_access=''
5ff3f7a4 309d_accessx=''
a0d0e21e 310d_alarm=''
ecfc5424 311d_attribut=''
2304df62
AD
312d_bcmp=''
313d_bcopy=''
314d_bzero=''
315d_casti32=''
316castflags=''
317d_castneg=''
a0d0e21e
LW
318d_chown=''
319d_chroot=''
2304df62 320d_chsize=''
a0d0e21e
LW
321d_closedir=''
322d_void_closedir=''
2304df62
AD
323d_const=''
324cryptlib=''
325d_crypt=''
326d_csh=''
1aef975c 327full_csh=''
a0d0e21e
LW
328d_cuserid=''
329d_dbl_dig=''
330d_difftime=''
331d_dlerror=''
332d_dlopen=''
333d_dlsymun=''
2304df62 334d_dosuid=''
a0d0e21e 335d_suidsafe=''
85ab1d1d 336d_drand48proto=''
2304df62 337d_dup2=''
5ff3f7a4
GS
338d_eaccess=''
339d_endgrent=''
e5c9fcd0
AD
340d_endhent=''
341d_endnent=''
342d_endpent=''
5ff3f7a4 343d_endpwent=''
e5c9fcd0 344d_endsent=''
2304df62
AD
345d_fchmod=''
346d_fchown=''
347d_fcntl=''
a0d0e21e
LW
348d_fd_macros=''
349d_fd_set=''
350d_fds_bits=''
351d_fgetpos=''
2304df62
AD
352d_flexfnam=''
353d_flock=''
a0d0e21e 354d_fork=''
c5f05a91 355d_fpos64_t=''
a3540c92 356d_frexpl=''
ad27e871 357d_fs_data_s=''
5ff3f7a4 358d_fseeko=''
a0d0e21e 359d_fsetpos=''
0545a864 360d_fstatfs=''
5ff3f7a4 361d_ftello=''
5f05dabc 362d_ftime=''
363d_gettimeod=''
a0d0e21e 364d_Gconvert=''
49dabb45 365d_getcwd=''
3813c136 366d_getespwnam=''
c890dc6c 367d_getfsstat=''
5ff3f7a4 368d_getgrent=''
2304df62 369d_getgrps=''
4599a1de 370d_gethbyaddr=''
4599a1de 371d_gethbyname=''
dfe9444c 372d_gethent=''
2304df62
AD
373aphostname=''
374d_gethname=''
375d_phostname=''
376d_uname=''
dc45a647 377d_gethostprotos=''
a0d0e21e 378d_getlogin=''
ad27e871 379d_getmnt=''
ccc7f9b3 380d_getmntent=''
dfe9444c 381d_getnbyaddr=''
693762b4 382d_getnbyname=''
e5c9fcd0 383d_getnent=''
dc45a647 384d_getnetprotos=''
e5c9fcd0 385d_getpent=''
2afac517 386d_getpgid=''
2304df62 387d_getpgrp2=''
2afac517 388d_bsdgetpgrp=''
2304df62 389d_getpgrp=''
a0d0e21e 390d_getppid=''
2304df62 391d_getprior=''
693762b4
AD
392d_getpbyname=''
393d_getpbynumber=''
dc45a647 394d_getprotoprotos=''
3813c136 395d_getprpwnam=''
5ff3f7a4 396d_getpwent=''
e5c9fcd0 397d_getsent=''
dc45a647 398d_getservprotos=''
f1066039 399d_getspnam=''
693762b4
AD
400d_getsbyname=''
401d_getsbyport=''
a4f3eea9 402d_gnulibc=''
ccc7f9b3 403d_hasmntopt=''
2304df62 404d_htonl=''
43999f95 405d_iconv=''
7e1af8bc 406d_inetaton=''
13b3f787 407d_int64_t=''
2304df62 408d_isascii=''
a3540c92
JH
409d_isnan=''
410d_isnanl=''
2304df62 411d_killpg=''
dd64f1c3 412d_lchown=''
2d4389e4 413d_ldbl_dig=''
2304df62 414d_link=''
a0d0e21e
LW
415d_locconv=''
416d_lockf=''
e5c9fcd0
AD
417d_longdbl=''
418longdblsize=''
dc45a647
MB
419d_longlong=''
420longlongsize=''
49c10eea 421d_lseekproto=''
2304df62 422d_lstat=''
1e8c3fde 423d_madvise=''
a0d0e21e
LW
424d_mblen=''
425d_mbstowcs=''
426d_mbtowc=''
0f27ced1 427d_memchr=''
2304df62
AD
428d_memcmp=''
429d_memcpy=''
430d_memmove=''
431d_memset=''
432d_mkdir=''
fe749a9f 433d_mkdtemp=''
a0d0e21e 434d_mkfifo=''
fe749a9f
JH
435d_mkstemp=''
436d_mkstemps=''
a0d0e21e 437d_mktime=''
fe749a9f
JH
438d_mmap=''
439mmaptype=''
a3540c92 440d_modfl=''
fe749a9f 441d_mprotect=''
2304df62
AD
442d_msg=''
443d_msgctl=''
444d_msgget=''
445d_msgrcv=''
446d_msgsnd=''
fe749a9f
JH
447d_msync=''
448d_munmap=''
a0d0e21e 449d_nice=''
c5f05a91 450d_off64_t=''
2304df62 451d_open3=''
a0d0e21e
LW
452d_fpathconf=''
453d_pathconf=''
454d_pause=''
455d_pipe=''
8e07c86e 456d_poll=''
2304df62 457d_portable=''
ef4af2be
JH
458d_old_pthread_create_joinable=''
459old_pthread_create_joinable=''
dfe9444c
AD
460d_pthread_yield=''
461d_sched_yield=''
1cfa4ec7 462sched_yield=''
bbe6c963 463d_qgcvt=''
2304df62 464d_readdir=''
85e6fe83
LW
465d_rewinddir=''
466d_seekdir=''
467d_telldir=''
a0d0e21e 468d_readlink=''
2304df62
AD
469d_rename=''
470d_rmdir=''
471d_safebcpy=''
472d_safemcpy=''
36477c24 473d_sanemcmp=''
2304df62
AD
474d_select=''
475d_sem=''
476d_semctl=''
477d_semget=''
478d_semop=''
479d_setegid=''
480d_seteuid=''
5ff3f7a4 481d_setgrent=''
dfe9444c 482d_setgrps=''
693762b4 483d_sethent=''
a0d0e21e 484d_setlinebuf=''
2304df62 485d_setlocale=''
e5c9fcd0
AD
486d_setnent=''
487d_setpent=''
2304df62
AD
488d_setpgid=''
489d_setpgrp2=''
2afac517 490d_bsdsetpgrp=''
2304df62
AD
491d_setpgrp=''
492d_setprior=''
5ff3f7a4 493d_setpwent=''
2304df62
AD
494d_setregid=''
495d_setresgid=''
496d_setresuid=''
497d_setreuid=''
498d_setrgid=''
499d_setruid=''
e5c9fcd0 500d_setsent=''
2304df62 501d_setsid=''
e5c9fcd0 502d_setvbuf=''
760ac839 503d_sfio=''
8ff267be 504usesfio=''
2304df62
AD
505d_shm=''
506d_shmat=''
a0d0e21e
LW
507d_shmatprototype=''
508shmattype=''
2304df62
AD
509d_shmctl=''
510d_shmdt=''
511d_shmget=''
2c7991dc 512d_sigaction=''
8ff267be 513d_sigsetjmp=''
de4597cb
JH
514d_msg_ctrunc=''
515d_msg_dontroute=''
516d_msg_oob=''
517d_msg_peek=''
518d_msg_proxy=''
2304df62 519d_oldsock=''
de4597cb 520d_scm_rights=''
2304df62
AD
521d_socket=''
522d_sockpair=''
523sockethdr=''
524socketlib=''
13b3f787 525d_socklen_t=''
68d4903c 526d_sqrtl=''
2304df62 527d_statblks=''
0545a864
JH
528d_statfs_f_flags=''
529d_statfs_s=''
104d25b7
JH
530d_fstatvfs=''
531d_statvfs=''
c2960299
AD
532d_stdio_cnt_lval=''
533d_stdio_ptr_lval=''
16d20bd9 534d_stdiobase=''
2304df62 535d_stdstdio=''
16d20bd9
AD
536stdio_base=''
537stdio_bufsiz=''
538stdio_cnt=''
dfe9444c 539stdio_filbuf=''
16d20bd9 540stdio_ptr=''
2304df62
AD
541d_index=''
542d_strchr=''
a0d0e21e 543d_strcoll=''
2304df62
AD
544d_strctcpy=''
545d_strerrm=''
546d_strerror=''
547d_sysernlst=''
548d_syserrlst=''
a89d8a78
DH
549d_strtod=''
550d_strtol=''
ff935051 551d_strtold=''
76d49b1c 552d_strtoll=''
a89d8a78 553d_strtoul=''
ff935051
JH
554d_strtoull=''
555d_strtouq=''
a0d0e21e 556d_strxfrm=''
2304df62
AD
557d_symlink=''
558d_syscall=''
a0d0e21e 559d_sysconf=''
2304df62 560d_system=''
a0d0e21e
LW
561d_tcgetpgrp=''
562d_tcsetpgrp=''
cb86ce0e 563d_telldirproto=''
85e6fe83
LW
564d_time=''
565timetype=''
2304df62
AD
566clocktype=''
567d_times=''
568d_truncate=''
a0d0e21e
LW
569d_tzname=''
570d_umask=''
bd89102f
AD
571d_semctl_semid_ds=''
572d_semctl_semun=''
573d_union_semun=''
0545a864 574d_ustat=''
2304df62 575d_vfork=''
a0d0e21e 576usevfork=''
2304df62
AD
577d_voidsig=''
578signal_t=''
579d_volatile=''
580d_charvspr=''
581d_vprintf=''
582d_wait4=''
583d_waitpid=''
a0d0e21e
LW
584d_wcstombs=''
585d_wctomb=''
586dlext=''
85e6fe83
LW
587cccdlflags=''
588ccdlflags=''
2304df62 589dlsrc=''
232e078e 590ld=''
85e6fe83 591lddlflags=''
2304df62 592usedl=''
693762b4 593doublesize=''
5ff3f7a4 594ebcdic=''
66fe083f 595fflushNULL=''
767df6a1 596fflushall=''
8175356b 597fpossize=''
a0d0e21e 598fpostype=''
8a27cf78 599gccversion=''
a22e52b9 600gidformat=''
785fb66b
JH
601gidsign=''
602gidsize=''
2304df62
AD
603gidtype=''
604groupstype=''
605h_fcntl=''
606h_sysfile=''
5ff3f7a4 607i_arpainet=''
ecfc5424
AD
608db_hashtype=''
609db_prefixtype=''
a0d0e21e 610i_db=''
2304df62 611i_dbm=''
8e07c86e 612i_rpcsvcdbm=''
2304df62 613d_dirnamlen=''
a0d0e21e 614direntrytype=''
2304df62 615i_dirent=''
a0d0e21e 616i_dld=''
2304df62
AD
617i_dlfcn=''
618i_fcntl=''
a0d0e21e 619i_float=''
2304df62 620i_gdbm=''
28e8609d 621d_grpasswd=''
2304df62 622i_grp=''
43999f95 623i_iconv=''
792d8dab 624i_ieeefp=''
5ff3f7a4 625i_inttypes=''
a0d0e21e 626i_limits=''
4633a7c4 627i_locale=''
7f3d1cf1 628i_machcthr=''
a0d0e21e
LW
629i_malloc=''
630i_math=''
85e6fe83 631i_memory=''
e7fb4fcc 632i_mntent=''
2304df62 633i_ndbm=''
3fd537d4 634i_netdb=''
85e6fe83 635i_neterrno=''
9cc6feab 636i_netinettcp=''
2304df62
AD
637i_niin=''
638i_sysin=''
5b34fd99 639i_poll=''
3813c136 640i_prot=''
c4747d3e 641i_pthread=''
2304df62
AD
642d_pwage=''
643d_pwchange=''
644d_pwclass=''
645d_pwcomment=''
646d_pwexpire=''
c4f23d77 647d_pwgecos=''
28e8609d 648d_pwpasswd=''
2304df62
AD
649d_pwquota=''
650i_pwd=''
760ac839 651i_sfio=''
f1066039 652i_shadow=''
86959918 653i_socks=''
2304df62 654i_stddef=''
a0d0e21e 655i_stdlib=''
2304df62
AD
656i_string=''
657strings=''
923fc586 658i_sunmath=''
5ff3f7a4 659i_sysaccess=''
2304df62
AD
660i_sysdir=''
661i_sysfile=''
662d_voidtty=''
663i_bsdioctl=''
a0d0e21e 664i_sysfilio=''
2304df62
AD
665i_sysioctl=''
666i_syssockio=''
ca52efda 667i_syslog=''
fe749a9f 668i_sysmman=''
bf0c440f 669i_sysmode=''
104d25b7 670i_sysmount=''
2304df62 671i_sysndir=''
a0d0e21e 672i_sysparam=''
8ff267be 673i_sysresrc=''
5ff3f7a4 674i_syssecrt=''
2304df62 675i_sysselct=''
1aef975c 676i_sysstat=''
0545a864 677i_sysstatfs=''
104d25b7 678i_sysstatvfs=''
a0d0e21e 679i_systimes=''
fed7345c 680i_systypes=''
de4597cb 681i_sysuio=''
25f94b33 682i_sysun=''
d4935d7f 683i_sysutsname=''
0545a864 684i_sysvfs=''
8ff267be 685i_syswait=''
2304df62
AD
686i_sgtty=''
687i_termio=''
688i_termios=''
689i_systime=''
690i_systimek=''
691i_time=''
692timeincl=''
85e6fe83 693i_unistd=''
0545a864 694i_ustat=''
2304df62 695i_utime=''
760ac839 696i_values=''
a0d0e21e 697i_stdarg=''
2304df62
AD
698i_varargs=''
699i_varhdr=''
700i_vfork=''
ff935051 701inc_version_list=''
3a096bf3 702inc_version_list_init=''
dd4e71fd
JH
703installprefix=''
704installprefixexp=''
705installstyle=''
104d25b7 706installusrbinperl=''
2304df62 707intsize=''
24fef2a7
AD
708longsize=''
709shortsize=''
2304df62 710libc=''
5cf1d1f1 711ldlibpthname=''
8ff267be 712libperl=''
2afac517 713shrpenv=''
8ff267be 714useshrplib=''
a0d0e21e 715glibpth=''
2304df62 716libpth=''
8e07c86e 717loclibpth=''
2304df62
AD
718plibpth=''
719xlibpth=''
1cfa4ec7 720ignore_versioned_solibs=''
2304df62 721libs=''
43999f95
JH
722libsdirs=''
723libsfiles=''
724libsfound=''
13b3f787 725libspath=''
85e6fe83 726lns=''
cf2093f6
JH
727d_PRIEldbl=''
728d_PRIFldbl=''
729d_PRIGldbl=''
730d_PRIeldbl=''
731d_PRIfldbl=''
732d_PRIgldbl=''
733sPRIEldbl=''
734sPRIFldbl=''
735sPRIGldbl=''
736sPRIeldbl=''
737sPRIfldbl=''
738sPRIgldbl=''
5ff3f7a4 739lseeksize=''
85e6fe83 740lseektype=''
8ff267be 741make_set_make=''
85e6fe83 742d_mymalloc=''
94b6baf5 743freetype=''
2304df62
AD
744mallocobj=''
745mallocsrc=''
746malloctype=''
747usemymalloc=''
16d20bd9
AD
748installman1dir=''
749man1dir=''
750man1direxp=''
751man1ext=''
752installman3dir=''
753man3dir=''
754man3direxp=''
755man3ext=''
2304df62
AD
756huge=''
757large=''
758medium=''
759models=''
760small=''
761split=''
a0d0e21e 762modetype=''
68c15b6f 763multiarch=''
2304df62
AD
764mydomain=''
765myhostname=''
766phostname=''
767c=''
768n=''
8e07c86e
AD
769d_eofnblk=''
770eagain=''
771o_nonblock=''
772rd_nodata=''
dfe9444c
AD
773netdb_hlen_type=''
774netdb_host_type=''
775netdb_name_type=''
776netdb_net_type=''
2304df62
AD
777groupcat=''
778hostcat=''
779passcat=''
85e6fe83
LW
780orderlib=''
781ranlib=''
3b777bb4
GS
782d_perl_otherlibdirs=''
783otherlibdirs=''
2304df62
AD
784package=''
785spackage=''
2c7991dc 786pager=''
ff935051
JH
787api_revision=''
788api_subversion=''
789api_version=''
790api_versionstring=''
ecfc5424 791patchlevel=''
49c10eea 792revision=''
760ac839 793subversion=''
bfb7748a 794version=''
49c10eea 795perl5=''
8e07c86e 796perladmin=''
4633a7c4 797perlpath=''
78691af5 798d_nv_preserves_uv=''
d6c14000 799d_nv_preserves_uv_bits=''
8175356b
JH
800i16size=''
801i16type=''
802i32size=''
803i32type=''
804i64size=''
805i64type=''
806i8size=''
807i8type=''
808ivsize=''
809ivtype=''
810nvsize=''
811nvtype=''
812u16size=''
813u16type=''
814u32size=''
815u32type=''
816u64size=''
817u64type=''
818u8size=''
819u8type=''
820uvsize=''
821uvtype=''
822ivdformat=''
823uvoformat=''
824uvuformat=''
825uvxformat=''
dfe9444c 826pidtype=''
a0d0e21e 827prefix=''
1aef975c 828prefixexp=''
2304df62
AD
829installprivlib=''
830privlib=''
831privlibexp=''
832prototype=''
693762b4 833ptrsize=''
cf2093f6
JH
834d_PRIX64=''
835d_PRId64=''
836d_PRIi64=''
837d_PRIo64=''
838d_PRIu64=''
839d_PRIx64=''
840sPRIX64=''
841sPRId64=''
842sPRIi64=''
843sPRIo64=''
844sPRIu64=''
845sPRIx64=''
de1c2614 846d_quad=''
6b8eaf93 847quadkind=''
d7d93a81
JH
848quadtype=''
849uquadtype=''
85ab1d1d 850drand01=''
2304df62 851randbits=''
85ab1d1d
JH
852randfunc=''
853randseedtype=''
854seedfunc=''
2304df62
AD
855installscript=''
856scriptdir=''
857scriptdirexp=''
5ff3f7a4 858selectminbits=''
a0d0e21e 859selecttype=''
8ff267be 860sh=''
af4c28eb 861sig_count=''
2304df62 862sig_name=''
dfe9444c 863sig_name_init=''
8e07c86e 864sig_num=''
824a2ba3 865sig_num_init=''
4633a7c4
LW
866installsitearch=''
867sitearch=''
868sitearchexp=''
717c4fcc
JH
869installsitebin=''
870sitebin=''
871sitebinexp=''
25f94b33
AD
872installsitelib=''
873sitelib=''
526fdc24 874sitelib_stem=''
25f94b33 875sitelibexp=''
dd4e71fd
JH
876siteprefix=''
877siteprefixexp=''
8c99d73e 878sizesize=''
a0d0e21e
LW
879sizetype=''
880so=''
c890dc6c 881socksizetype=''
2304df62
AD
882sharpbang=''
883shsharp=''
884spitshell=''
dfe9444c 885src=''
a0d0e21e 886ssizetype=''
4633a7c4 887startperl=''
2304df62
AD
888startsh=''
889stdchar=''
ed39a0f2 890d_stdio_stream_array=''
767df6a1 891stdio_stream_array=''
2304df62 892sysman=''
5ff3f7a4 893trnl=''
a22e52b9 894uidformat=''
57def98f 895uidsign=''
785fb66b 896uidsize=''
2304df62 897uidtype=''
85ab1d1d 898archname64=''
10cc9d2a
JH
899use64bitall=''
900use64bitint=''
249b38c6 901uselargefiles=''
b0ce926a 902uselongdouble=''
09458382 903usemorebits=''
85ab1d1d 904usemultiplicity=''
2304df62 905nm_opt=''
40a7a20a 906nm_so_opt=''
2304df62
AD
907runnm=''
908usenm=''
8ff267be 909useperlio=''
29209bc5 910usesocks=''
693762b4 911d_oldpthreads=''
aaacdc8b
GS
912use5005threads=''
913useithreads=''
dfe9444c 914usethreads=''
2304df62 915incpath=''
2304df62
AD
916mips_type=''
917usrinc=''
526fdc24
MS
918d_vendorarch=''
919installvendorarch=''
920vendorarch=''
921vendorarchexp=''
717c4fcc
JH
922d_vendorbin=''
923installvendorbin=''
924vendorbin=''
925vendorbinexp=''
a3635516
JH
926d_vendorlib=''
927installvendorlib=''
928vendorlib=''
526fdc24 929vendorlib_stem=''
a3635516
JH
930vendorlibexp=''
931usevendorprefix=''
932vendorprefix=''
933vendorprefixexp=''
2304df62
AD
934defvoidused=''
935voidflags=''
fe749a9f
JH
936pm_apiversion=''
937xs_apiversion=''
2304df62
AD
938CONFIG=''
939
ecfc5424
AD
940define='define'
941undef='undef'
942smallmach='pdp11 i8086 z8000 i80286 iAPX286'
943rmlist=''
944
945: We must find out about Eunice early
946eunicefix=':'
947if test -f /etc/unixtovms; then
948 eunicefix=/etc/unixtovms
949fi
950if test -f /etc/unixtovms.exe; then
951 eunicefix=/etc/unixtovms.exe
952fi
953
5ff3f7a4 954i_whoami=''
ff935051
JH
955: set useposix=false in your hint file to disable the POSIX extension.
956useposix=true
957: set useopcode=false in your hint file to disable the Opcode extension.
958useopcode=true
dfe9444c 959: Trailing extension. Override this in a hint file, if needed.
4e2a5f63 960_exe=''
dfe9444c
AD
961: Extra object files, if any, needed on this platform.
962archobjs=''
ff935051
JH
963: Possible local include directories to search.
964: Set locincpth to "" in a hint file to defeat local include searches.
965locincpth="/usr/local/include /opt/local/include /usr/gnu/include"
966locincpth="$locincpth /opt/gnu/include /usr/GNU/include /opt/GNU/include"
967:
968: no include file wanted by default
969inclwanted=''
970
dfe9444c 971groupstype=''
732c9516
JH
972: change the next line if compiling for Xenix/286 on Xenix/386
973xlibpth='/usr/lib/386 /lib/386'
732c9516
JH
974: Possible local library directories to search.
975loclibpth="/usr/local/lib /opt/local/lib /usr/gnu/lib"
976loclibpth="$loclibpth /opt/gnu/lib /usr/GNU/lib /opt/GNU/lib"
977
978: general looking path for locating libraries
bf0c440f 979glibpth="/usr/lib/large /lib /usr/lib $xlibpth"
732c9516
JH
980glibpth="$glibpth /lib/large /usr/lib/small /lib/small"
981glibpth="$glibpth /usr/ccs/lib /usr/ucblib /usr/local/lib"
f7dd4e7f
JH
982test -f /usr/shlib/libc.so && glibpth="/usr/shlib $glibpth"
983test -f /shlib/libc.so && glibpth="/shlib $glibpth"
732c9516
JH
984
985: Private path used by Configure to find libraries. Its value
986: is prepended to libpth. This variable takes care of special
987: machines, like the mips. Usually, it should be empty.
988plibpth=''
989
1cfa4ec7
GS
990: default library list
991libswanted=''
921b2963 992: some systems want to use only the non-versioned libso:s
1cfa4ec7 993ignore_versioned_solibs=''
85ab1d1d 994: set usemultiplicity on the Configure command line to enable multiplicity.
29209bc5 995: set usesocks on the Configure command line to enable socks.
dfe9444c 996: set usethreads on the Configure command line to enable threads.
ff935051
JH
997: full support for void wanted by default
998defvoidused=15
999
ecfc5424 1000: List of libraries we want.
693762b4 1001: If anyone needs -lnet, put it in a hint file.
997d70a2 1002libswanted='sfio socket bind inet nsl nm ndbm gdbm dbm db malloc dl'
69e84d1d 1003libswanted="$libswanted dld ld sun m c cposix posix"
f1066039 1004libswanted="$libswanted ndir dir crypt sec"
997d70a2 1005libswanted="$libswanted ucb bsd BSD PW x iconv"
1aef975c 1006: We probably want to search /usr/shlib before most other libraries.
94b6baf5 1007: This is only used by the lib/ExtUtils/MakeMaker.pm routine extliblist.
ecfc5424
AD
1008glibpth=`echo " $glibpth " | sed -e 's! /usr/shlib ! !'`
1009glibpth="/usr/shlib $glibpth"
1010: Do not use vfork unless overridden by a hint file.
1011usevfork=false
1012
8ff267be 1013: Find the basic shell for Bourne shell scripts
1014case "$sh" in
1015'')
8ff267be 1016 case "$SYSTYPE" in
1017 *bsd*|sys5*) xxx="/$SYSTYPE/bin/sh";;
1018 *) xxx='/bin/sh';;
1019 esac
1020 if test -f "$xxx"; then
1021 sh="$xxx"
1022 else
1023 : Build up a list and do a single loop so we can 'break' out.
1024 pth=`echo $PATH | sed -e "s/$p_/ /g"`
1025 for xxx in sh bash ksh pdksh ash; do
1026 for p in $pth; do
1027 try="$try ${p}/${xxx}"
1028 done
1029 done
1030 for xxx in $try; do
1031 if test -f "$xxx"; then
1032 sh="$xxx";
8ff267be 1033 break
1034 elif test -f "$xxx.exe"; then
1035 sh="$xxx";
8ff267be 1036 break
1037 fi
1038 done
1039 fi
1040 ;;
1041esac
1042
1043case "$sh" in
1044'') cat <<EOM >&2
1045$me: Fatal Error: I can't find a Bourne Shell anywhere.
dfe9444c 1046
8ff267be 1047Usually it's in /bin/sh. How did you even get this far?
46193409 1048Please contact me (Perl Maintainers) at perlbug@perl.com and
dfe9444c 1049we'll try to straighten this all out.
8ff267be 1050EOM
1051 exit 1
1052 ;;
1053esac
1054
760ac839 1055: see if sh knows # comments
8ff267be 1056if `$sh -c '#' >/dev/null 2>&1`; then
760ac839
LW
1057 shsharp=true
1058 spitshell=cat
760ac839
LW
1059 xcat=/bin/cat
1060 test -f $xcat || xcat=/usr/bin/cat
1061 echo "#!$xcat" >try
1062 $eunicefix try
1063 chmod +x try
1064 ./try > today
1065 if test -s today; then
760ac839
LW
1066 sharpbang='#!'
1067 else
1068 echo "#! $xcat" > try
1069 $eunicefix try
1070 chmod +x try
1071 ./try > today
1072 if test -s today; then
760ac839
LW
1073 sharpbang='#! '
1074 else
760ac839
LW
1075 sharpbang=': use '
1076 fi
1077 fi
1078else
dfe9444c 1079 echo " "
8ff267be 1080 echo "Your $sh doesn't grok # comments--I will strip them later on."
760ac839
LW
1081 shsharp=false
1082 cd ..
1083 echo "exec grep -v '^[ ]*#'" >spitshell
1084 chmod +x spitshell
1085 $eunicefix spitshell
1086 spitshell=`pwd`/spitshell
1087 cd UU
1088 echo "I presume that if # doesn't work, #! won't work either!"
1089 sharpbang=': use '
1090fi
1091rm -f try today
1092
1093: figure out how to guarantee sh startup
8ff267be 1094case "$startsh" in
1095'') startsh=${sharpbang}${sh} ;;
1096*)
760ac839 1097esac
760ac839
LW
1098cat >try <<EOSS
1099$startsh
1100set abc
1101test "$?abc" != 1
1102EOSS
1103
1104chmod +x try
1105$eunicefix try
1106if ./try; then
8ff267be 1107 : echo "Yup, it does."
760ac839 1108else
dfe9444c
AD
1109 echo "Hmm... '$startsh' does not guarantee sh startup..."
1110 echo "You may have to fix up the shell scripts to make sure $sh runs them."
760ac839
LW
1111fi
1112rm -f try
1113
aebf16e7
AD
1114
1115: Save command line options in file UU/cmdline.opt for later use in
1116: generating config.sh.
1117cat > cmdline.opt <<EOSH
1118# Configure command line arguments.
1119config_arg0='$0'
1120config_args='$*'
1121config_argc=$#
1122EOSH
1123argn=1
1124for arg in "$@"; do
1125 cat >>cmdline.opt <<EOSH
1126config_arg$argn='$arg'
1127EOSH
1128 argn=`expr $argn + 1`
1129done
1130
2304df62
AD
1131: produce awk script to parse command line options
1132cat >options.awk <<'EOF'
1133BEGIN {
02e93a22 1134 optstr = "A:dD:eEf:hKOrsSU:V"; # getopt-style specification
2304df62
AD
1135
1136 len = length(optstr);
1137 for (i = 1; i <= len; i++) {
1138 c = substr(optstr, i, 1);
1139 if (i < len) a = substr(optstr, i + 1, 1); else a = "";
1140 if (a == ":") {
1141 arg[c] = 1;
1142 i++;
1143 }
1144 opt[c] = 1;
1145 }
1146}
1147{
1148 expect = 0;
1149 str = $0;
1150 if (substr(str, 1, 1) != "-") {
1151 printf("'%s'\n", str);
1152 next;
1153 }
1154 len = length($0);
1155 for (i = 2; i <= len; i++) {
1156 c = substr(str, i, 1);
1157 if (!opt[c]) {
1158 printf("-%s\n", substr(str, i));
1159 next;
1160 }
1161 printf("-%s\n", c);
1162 if (arg[c]) {
1163 if (i < len)
1164 printf("'%s'\n", substr(str, i + 1));
1165 else
1166 expect = 1;
1167 next;
1168 }
1169 }
1170}
1171END {
1172 if (expect)
1173 print "?";
1174}
1175EOF
1176
1177: process the command line options
4633a7c4
LW
1178set X `for arg in "$@"; do echo "X$arg"; done |
1179 sed -e s/X// | awk -f options.awk`
2304df62
AD
1180eval "set $*"
1181shift
1182rm -f options.awk
1183
1184: set up default values
1185fastread=''
1186reuseval=false
1187config_sh=''
1188alldone=''
1189error=''
1190silent=''
1191extractsh=''
ecfc5424 1192override=''
16d20bd9 1193knowitall=''
02e93a22 1194rm -f optdef.sh posthint.sh
28757baa 1195cat >optdef.sh <<EOS
1196$startsh
1197EOS
2304df62 1198
dfe9444c 1199
2304df62
AD
1200: option parsing
1201while test $# -gt 0; do
1202 case "$1" in
1203 -d) shift; fastread=yes;;
1204 -e) shift; alldone=cont;;
1205 -f)
1206 shift
1207 cd ..
1208 if test -r "$1"; then
1209 config_sh="$1"
1210 else
a0d0e21e 1211 echo "$me: cannot read config file $1." >&2
2304df62
AD
1212 error=true
1213 fi
1214 cd UU
1215 shift;;
1216 -h) shift; error=true;;
1217 -r) shift; reuseval=true;;
dfe9444c 1218 -s) shift; silent=true; realsilent=true;;
2304df62 1219 -E) shift; alldone=exit;;
16d20bd9 1220 -K) shift; knowitall=true;;
ecfc5424 1221 -O) shift; override=true;;
dfe9444c 1222 -S) shift; silent=true; extractsh=true;;
a0d0e21e
LW
1223 -D)
1224 shift
1225 case "$1" in
1226 *=)
1227 echo "$me: use '-U symbol=', not '-D symbol='." >&2
1228 echo "$me: ignoring -D $1" >&2
1229 ;;
ecfc5424 1230 *=*) echo "$1" | \
1aef975c
AD
1231 sed -e "s/'/'\"'\"'/g" -e "s/=\(.*\)/='\1'/" >> optdef.sh;;
1232 *) echo "$1='define'" >> optdef.sh;;
a0d0e21e
LW
1233 esac
1234 shift
1235 ;;
1236 -U)
1237 shift
1238 case "$1" in
1aef975c 1239 *=) echo "$1" >> optdef.sh;;
a0d0e21e
LW
1240 *=*)
1241 echo "$me: use '-D symbol=val', not '-U symbol=val'." >&2
1242 echo "$me: ignoring -U $1" >&2
1243 ;;
1aef975c 1244 *) echo "$1='undef'" >> optdef.sh;;
a0d0e21e
LW
1245 esac
1246 shift
1247 ;;
02e93a22
JH
1248 -A)
1249 shift
1250 xxx=''
1251 yyy="$1"
02e93a22 1252 zzz=''
5f83a3e9 1253 uuu=undef
02e93a22 1254 case "$yyy" in
5f83a3e9
JH
1255 *=*) zzz=`echo $yyy|sed 's!=.*!!'`
1256 case "$zzz" in
1257 *:*) zzz='' ;;
1258 *) xxx=append
1259 zzz=" "`echo $yyy|sed 's!^[^=]*=!!'`
1260 yyy=`echo $yyy|sed 's!=.*!!'` ;;
1261 esac
1262 ;;
1263 esac
1264 case "$xxx" in
1265 '') case "$yyy" in
1266 *:*) xxx=`echo $yyy|sed 's!:.*!!'`
1267 yyy=`echo $yyy|sed 's!^[^:]*:!!'`
1268 zzz=`echo $yyy|sed 's!^[^=]*=!!'`
1269 yyy=`echo $yyy|sed 's!=.*!!'` ;;
1270 *) xxx=`echo $yyy|sed 's!:.*!!'`
1271 yyy=`echo $yyy|sed 's!^[^:]*:!!'` ;;
1272 esac
1273 ;;
1274 esac
02e93a22
JH
1275 case "$xxx" in
1276 append)
5f83a3e9 1277 echo "$yyy=\"\${$yyy}$zzz\"" >> posthint.sh ;;
02e93a22 1278 clear)
5f83a3e9 1279 echo "$yyy=''" >> posthint.sh ;;
02e93a22
JH
1280 define)
1281 case "$zzz" in
1282 '') zzz=define ;;
1283 esac
5f83a3e9 1284 echo "$yyy='$zzz'" >> posthint.sh ;;
02e93a22 1285 eval)
5f83a3e9 1286 echo "eval \"$yyy=$zzz\"" >> posthint.sh ;;
02e93a22 1287 prepend)
5f83a3e9 1288 echo "$yyy=\"$zzz\${$yyy}\"" >> posthint.sh ;;
02e93a22
JH
1289 undef)
1290 case "$zzz" in
1291 '') zzz="$uuu" ;;
1292 esac
5f83a3e9
JH
1293 echo "$yyy=$zzz" >> posthint.sh ;;
1294 *) echo "$me: unknown -A command '$xxx', ignoring -A $1" >&2 ;;
02e93a22 1295 esac
bde6b06b 1296 shift
02e93a22 1297 ;;
dfe9444c 1298 -V) echo "$me generated by metaconfig 3.0 PL70." >&2
5f83a3e9 1299 exit 0;;
2304df62 1300 --) break;;
a0d0e21e 1301 -*) echo "$me: unknown option $1" >&2; shift; error=true;;
2304df62
AD
1302 *) break;;
1303 esac
1304done
1305
1306case "$error" in
1307true)
1308 cat >&2 <<EOM
2afac517 1309Usage: $me [-dehrsEKOSV] [-f config.sh] [-D symbol] [-D symbol=value]
02e93a22 1310 [-U symbol] [-U symbol=] [-A command:symbol...]
2304df62
AD
1311 -d : use defaults for all answers.
1312 -e : go on without questioning past the production of config.sh.
1313 -f : specify an alternate default configuration file.
1314 -h : print this help message and exit (with an error status).
1315 -r : reuse C symbols value if possible (skips costly nm extraction).
1316 -s : silent mode, only echoes questions and essential information.
a0d0e21e
LW
1317 -D : define symbol to have some value:
1318 -D symbol symbol gets the value 'define'
1319 -D symbol=value symbol gets the value 'value'
2304df62 1320 -E : stop at the end of questions, after having produced config.sh.
16d20bd9 1321 -K : do not use unless you know what you are doing.
ecfc5424 1322 -O : let -D and -U override definitions from loaded configuration file.
2304df62 1323 -S : perform variable substitutions on all .SH files (can mix with -f)
a0d0e21e
LW
1324 -U : undefine symbol:
1325 -U symbol symbol gets the value 'undef'
1326 -U symbol= symbol gets completely empty
02e93a22 1327 -A : manipulate symbol after the platform specific hints have been applied:
5f83a3e9 1328 -A symbol=value append " "value to symbol
02e93a22
JH
1329 -A append:symbol=value append value to symbol
1330 -A define:symbol=value define symbol to have value
02e93a22
JH
1331 -A clear:symbol define symbol to be ''
1332 -A define:symbol define symbol to be 'define'
1333 -A eval:symbol=value define symbol to be eval of value
1334 -A prepend:symbol=value prepend value to symbol
1335 -A undef:symbol define symbol to be 'undef'
1336 -A undef:symbol= define symbol to be ''
2304df62
AD
1337 -V : print version number and exit (with a zero status).
1338EOM
1339 exit 1
1340 ;;
1341esac
1342
dfe9444c
AD
1343: Sanity checks
1344case "$fastread$alldone" in
1345yescont|yesexit) ;;
1346*)
aaeb8e51
GS
1347 case "$extractsh" in
1348 true) ;;
1349 *)
1350 if test ! -t 0; then
1351 echo "Say 'sh Configure', not 'sh <Configure'"
1352 exit 1
1353 fi
1354 ;;
1355 esac
dfe9444c
AD
1356 ;;
1357esac
1358
2304df62
AD
1359exec 4>&1
1360case "$silent" in
1361true) exec 1>/dev/null;;
1362esac
1363
ecfc5424 1364: run the defines and the undefines, if any, but leave the file out there...
1aef975c
AD
1365touch optdef.sh
1366. ./optdef.sh
02e93a22
JH
1367: create the posthint manipulation script and leave the file out there...
1368touch posthint.sh
a0d0e21e 1369
2304df62 1370: set package name
85e6fe83 1371package=perl5
1aef975c
AD
1372first=`echo $package | sed -e 's/^\(.\).*/\1/'`
1373last=`echo $package | sed -e 's/^.\(.*\)/\1/'`
1374case "`echo AbyZ | tr '[:lower:]' '[:upper:]' 2>/dev/null`" in
1375ABYZ) spackage=`echo $first | tr '[:lower:]' '[:upper:]'`$last;;
1376*) spackage=`echo $first | tr '[a-z]' '[A-Z]'`$last;;
1377esac
2304df62 1378
2304df62
AD
1379: Some greps do not return status, grrr.
1380echo "grimblepritz" >grimble
1381if grep blurfldyick grimble >/dev/null 2>&1 ; then
1382 contains=contains
1383elif grep grimblepritz grimble >/dev/null 2>&1 ; then
1384 contains=grep
1385else
1386 contains=contains
1387fi
1388rm -f grimble
1389: the following should work in any shell
1390case "$contains" in
1391contains*)
1392 echo " "
1393 echo "AGH! Grep doesn't return a status. Attempting remedial action."
1394 cat >contains <<'EOSS'
1395grep "$1" "$2" >.greptmp && cat .greptmp && test -s .greptmp
1396EOSS
1397chmod +x contains
1398esac
1399
dfe9444c
AD
1400: Find the path to the source tree
1401case "$src" in
1402'') case "$0" in
b233458b
JH
1403 */*) src=`echo $0 | sed -e 's%/[^/][^/]*$%%'`
1404 case "$src" in
1405 /*) ;;
1406 *) src=`cd ../$src && pwd` ;;
1407 esac
1408 ;;
dfe9444c
AD
1409 *) src='.';;
1410 esac;;
1411esac
1412case "$src" in
1413'') src=/
1414 rsrc=/
1415 ;;
1416/*) rsrc="$src";;
1417*) rsrc="../$src";;
1418esac
1419if test -f $rsrc/Configure && \
1420 $contains "^package=$package$" $rsrc/Configure >/dev/null 2>&1
1421then
1422 : found it, so we are ok.
1423else
1424 rsrc=''
1425 for src in . .. ../.. ../../.. ../../../..; do
1426 if test -f ../$src/Configure && \
1427 $contains "^package=$package$" ../$src/Configure >/dev/null 2>&1
1428 then
1429 rsrc=../$src
1430 break
1431 fi
1432 done
1433fi
1434case "$rsrc" in
1435'')
1436 cat <<EOM >&4
1437
1438Sorry, I can't seem to locate the source dir for $package. Please start
1439Configure with an explicit path -- i.e. /some/path/Configure.
1440
1441EOM
1442 exit 1
1443 ;;
1444../.) rsrc='..';;
1445*)
1446 echo " "
1447 echo "Sources for $package found in \"$src\"." >&4
1448 ;;
1449esac
1450
1451: script used to extract .SH files with variable substitutions
1452cat >extract <<'EOS'
2000072c 1453CONFIGDOTSH=true
dfe9444c
AD
1454echo "Doing variable substitutions on .SH files..."
1455if test -f $src/MANIFEST; then
f7ab18e9 1456 set x `awk '{print $1}' <$src/MANIFEST | grep '\.SH$'`
dfe9444c
AD
1457else
1458 echo "(Looking for .SH files under the source directory.)"
1459 set x `(cd $src; find . -name "*.SH" -print)`
1460fi
1461shift
1462case $# in
14630) set x `(cd $src; echo *.SH)`; shift;;
1464esac
1465if test ! -f $src/$1; then
1466 shift
1467fi
1468mkdir_p='
1469name=$1;
1470create="";
1471while test $name; do
1472 if test ! -d "$name"; then
1473 create="$name $create";
1474 name=`echo $name | sed -e "s|^[^/]*$||"`;
1475 name=`echo $name | sed -e "s|\(.*\)/.*|\1|"`;
1476 else
1477 name="";
1478 fi;
1479done;
1480for file in $create; do
1481 mkdir $file;
1482done
1483'
1484for file in $*; do
1485 case "$src" in
1486 ".")
1487 case "$file" in
1488 */*)
1489 dir=`expr X$file : 'X\(.*\)/'`
1490 file=`expr X$file : 'X.*/\(.*\)'`
1491 (cd $dir && . ./$file)
1492 ;;
1493 *)
1494 . ./$file
1495 ;;
1496 esac
1497 ;;
1498 *)
1499 case "$file" in
1500 */*)
1501 dir=`expr X$file : 'X\(.*\)/'`
1502 file=`expr X$file : 'X.*/\(.*\)'`
1503 (set x $dir; shift; eval $mkdir_p)
1504 sh <$src/$dir/$file
1505 ;;
1506 *)
1507 sh <$src/$file
1508 ;;
1509 esac
1510 ;;
1511 esac
1512done
1513if test -f $src/config_h.SH; then
1514 if test ! -f config.h; then
1515 : oops, they left it out of MANIFEST, probably, so do it anyway.
1516 . $src/config_h.SH
1517 fi
1518fi
1519EOS
1520
1521: extract files and exit if asked to do so
1522case "$extractsh" in
1523true)
1524 case "$realsilent" in
1525 true) ;;
1526 *) exec 1>&4;;
1527 esac
1528 case "$config_sh" in
1529 '') config_sh='config.sh';;
1530 esac
1531 echo " "
1532 echo "Fetching answers from $config_sh..."
1533 cd ..
1534 . $config_sh
1535 test "$override" && . ./optdef.sh
1536 echo " "
1537 . UU/extract
1538 rm -rf UU
1539 echo "Done."
1540 exit 0
1541 ;;
1542esac
1543
1544: Eunice requires " " instead of "", can you believe it
1545echo " "
1546: Here we go...
1547echo "Beginning of configuration questions for $package."
1548
1549trap 'echo " "; test -d ../UU && rm -rf X $rmlist; exit 1' 1 2 3 15
1550
2304df62
AD
1551: first determine how to suppress newline on echo command
1552echo " "
1553echo "Checking echo to see how to suppress newlines..."
1554(echo "hi there\c" ; echo " ") >.echotmp
1555if $contains c .echotmp >/dev/null 2>&1 ; then
1556 echo "...using -n."
1557 n='-n'
1558 c=''
1559else
1560 cat <<'EOM'
1561...using \c
1562EOM
1563 n=''
1564 c='\c'
1565fi
1566echo $n "The star should be here-->$c"
1567echo '*'
1568rm -f .echotmp
1569
1570: Now test for existence of everything in MANIFEST
1571echo " "
dfe9444c 1572if test -f $rsrc/MANIFEST; then
2304df62 1573 echo "First let's make sure your kit is complete. Checking..." >&4
dfe9444c 1574 awk '$1 !~ /PACK[A-Z]+/ {print $1}' $rsrc/MANIFEST | split -50
2304df62 1575 rm -f missing
dfe9444c 1576 tmppwd=`pwd`
2304df62 1577 for filelist in x??; do
dfe9444c 1578 (cd $rsrc; ls `cat $tmppwd/$filelist` >/dev/null 2>>$tmppwd/missing)
2304df62
AD
1579 done
1580 if test -s missing; then
1581 cat missing >&4
1582 cat >&4 <<'EOM'
1583
1584THIS PACKAGE SEEMS TO BE INCOMPLETE.
1585
1586You have the option of continuing the configuration process, despite the
1587distinct possibility that your kit is damaged, by typing 'y'es. If you
1588do, don't blame me if something goes wrong. I advise you to type 'n'o
46193409 1589and contact the author (perlbug@perl.com).
2304df62
AD
1590
1591EOM
1592 echo $n "Continue? [n] $c" >&4
1593 read ans
1594 case "$ans" in
1595 y*)
1596 echo "Continuing..." >&4
1597 rm -f missing
1598 ;;
1599 *)
1600 echo "ABORTING..." >&4
1601 kill $$
1602 ;;
1603 esac
1604 else
dfe9444c 1605 echo "Looks good..."
2304df62
AD
1606 fi
1607else
1608 echo "There is no MANIFEST file. I hope your kit is complete !"
1609fi
1610rm -f missing x??
1611
5ff3f7a4
GS
1612echo " "
1613: Find the appropriate value for a newline for tr
1614if test -n "$DJGPP"; then
1615 trnl='\012'
1616fi
1617if test X"$trnl" = X; then
1618 case "`echo foo|tr '\n' x 2>/dev/null`" in
1619 foox) trnl='\n' ;;
1620 esac
1621fi
1622if test X"$trnl" = X; then
1623 case "`echo foo|tr '\012' x 2>/dev/null`" in
1624 foox) trnl='\012' ;;
1625 esac
1626fi
1627if test X"$trnl" = X; then
1628 cat <<EOM >&2
1629
1630$me: Fatal Error: cannot figure out how to translate newlines with 'tr'.
1631
1632EOM
1633 exit 1
1634fi
1635
2304df62
AD
1636: compute the number of columns on the terminal for proper question formatting
1637case "$COLUMNS" in
1638'') COLUMNS='80';;
1639esac
1640
1641: set up the echo used in my read
1642myecho="case \"\$xxxm\" in
1643'') echo $n \"\$rp $c\" >&4;;
1644*) case \"\$rp\" in
1645 '') echo $n \"[\$xxxm] $c\";;
1646 *)
1647 if test \`echo \"\$rp [\$xxxm] \" | wc -c\` -ge $COLUMNS; then
1648 echo \"\$rp\" >&4
1649 echo $n \"[\$xxxm] $c\" >&4
1650 else
1651 echo $n \"\$rp [\$xxxm] $c\" >&4
1652 fi
1653 ;;
1654 esac;;
1655esac"
1656
1657: now set up to do reads with possible shell escape and default assignment
1658cat <<EOSC >myread
28757baa 1659$startsh
2304df62
AD
1660xxxm=\$dflt
1661$myecho
1662ans='!'
1663case "\$fastread" in
1664yes) case "\$dflt" in
1665 '') ;;
1666 *) ans='';
1667 case "\$silent-\$rp" in
1668 true-) ;;
1669 *) echo " " >&4;;
1670 esac;;
1671 esac;;
1672*) case "\$silent" in
1673 true) case "\$rp" in
1674 '') ans='';;
1675 esac;;
1676 esac;;
1677esac
1678while expr "X\$ans" : "X!" >/dev/null; do
1679 read answ
1680 set x \$xxxm
1681 shift
dfe9444c 1682 aok=''; eval "ans=\\"\$answ\\"" && aok=y
2304df62 1683 case "\$answ" in
dfe9444c
AD
1684 "!")
1685 sh 1>&4
1686 echo " "
1687 $myecho
1688 ;;
1689 !*)
1690 set x \`expr "X\$ans" : "X!\(.*\)\$"\`
1691 shift
1692 sh 1>&4 -c "\$*"
1693 echo " "
1694 $myecho
1695 ;;
2304df62
AD
1696 "\$ans")
1697 case "\$ans" in
ecfc5424
AD
1698 \\&*)
1699 set x \`expr "X\$ans" : "X&\(.*\)\$"\`
1700 shift
1701 case "\$1" in
1702 -d)
1703 fastread=yes
40a7a20a 1704 echo "(OK, I'll run with -d after this question.)" >&4
ecfc5424
AD
1705 ;;
1706 -*)
40a7a20a 1707 echo "*** Sorry, \$1 not supported yet." >&4
ecfc5424
AD
1708 ;;
1709 esac
1710 $myecho
1711 ans=!
1712 ;;
2304df62
AD
1713 esac;;
1714 *)
1715 case "\$aok" in
1716 y)
1717 echo "*** Substitution done -- please confirm."
1718 xxxm="\$ans"
c9795ab7 1719 ans=\`echo $n "\$ans$c" | tr '$trnl' ' '\`
2304df62
AD
1720 xxxm="\$ans"
1721 ans=!
1722 ;;
1723 *)
1724 echo "*** Error -- try again."
1725 ans=!
1726 ;;
1727 esac
1728 $myecho
1729 ;;
1730 esac
1731 case "\$ans\$xxxm\$nostick" in
1732 '')
1733 ans=!
1734 $myecho
1735 ;;
1736 esac
1737done
1738case "\$ans" in
1739'') ans="\$xxxm";;
1740esac
1741EOSC
1742
1743: create .config dir to save info across Configure sessions
1744test -d ../.config || mkdir ../.config
1745cat >../.config/README <<EOF
1746This directory created by Configure to save information that should
dfe9444c 1747persist across sessions for $package.
2304df62
AD
1748
1749You may safely delete it if you wish.
1750EOF
1751
1752: general instructions
1753needman=true
1754firsttime=true
760ac839 1755user=`(logname) 2>/dev/null`
dfe9444c
AD
1756case "$user" in
1757'') user=`whoami 2>&1`;;
760ac839 1758esac
2304df62
AD
1759if $contains "^$user\$" ../.config/instruct >/dev/null 2>&1; then
1760 firsttime=false
1761 echo " "
1762 rp='Would you like to see the instructions?'
1763 dflt=n
1764 . ./myread
1765 case "$ans" in
1766 [yY]*) ;;
1767 *) needman=false;;
1768 esac
1769fi
1770if $needman; then
1771 cat <<EOH
4e2a5f63 1772
2304df62 1773This installation shell script will examine your system and ask you questions
a0d0e21e 1774to determine how the perl5 package should be installed. If you get
2304df62
AD
1775stuck on a question, you may use a ! shell escape to start a subshell or
1776execute a command. Many of the questions will have default answers in square
1777brackets; typing carriage return will give you the default.
1778
1779On some of the questions which ask for file or directory names you are allowed
1780to use the ~name construct to specify the login directory belonging to "name",
1781even if you don't have a shell which knows about that. Questions where this is
1782allowed will be marked "(~name ok)".
1783
1784EOH
1785 rp=''
1786 dflt='Type carriage return to continue'
1787 . ./myread
1788 cat <<'EOH'
1789
1790The prompter used in this script allows you to use shell variables and
1791backticks in your answers. You may use $1, $2, etc... to refer to the words
1792in the default answer, as if the default line was a set of arguments given to a
1793script shell. This means you may also use $* to repeat the whole default line,
1794so you do not have to re-type everything to add something to the default.
1795
1796Everytime there is a substitution, you will have to confirm. If there is an
1797error (e.g. an unmatched backtick), the default answer will remain unchanged
1798and you will be prompted again.
1799
1800If you are in a hurry, you may run 'Configure -d'. This will bypass nearly all
1801the questions and use the computed defaults (or the previous answers if there
1802was already a config.sh file). Type 'Configure -h' for a list of options.
ecfc5424 1803You may also start interactively and then answer '& -d' at any prompt to turn
dfe9444c 1804on the non-interactive behaviour for the remainder of the execution.
2304df62
AD
1805
1806EOH
1807 . ./myread
1808 cat <<EOH
1809
1810Much effort has been expended to ensure that this shell script will run on any
1811Unix system. If despite that it blows up on yours, your best bet is to edit
40000a8c
AD
1812Configure and run it again. If you can't run Configure for some reason,
1813you'll have to generate a config.sh file by hand. Whatever problems you
46193409 1814have, let me (perlbug@perl.com) know how I blew it.
2304df62
AD
1815
1816This installation script affects things in two ways:
1817
18181) it may do direct variable substitutions on some of the files included
1819 in this kit.
18202) it builds a config.h file for inclusion in C programs. You may edit
1821 any of these files as the need arises after running this script.
1822
1823If you make a mistake on a question, there is no easy way to back up to it
1824currently. The easiest thing to do is to edit config.sh and rerun all the SH
1825files. Configure will offer to let you do this before it runs the SH files.
1826
1827EOH
1828 dflt='Type carriage return to continue'
1829 . ./myread
1830 case "$firsttime" in
1831 true) echo $user >>../.config/instruct;;
1832 esac
1833fi
1834
2304df62
AD
1835: find out where common programs are
1836echo " "
1837echo "Locating common programs..." >&4
1838cat <<EOSC >loc
1839$startsh
1840case \$# in
18410) exit 1;;
1842esac
1843thing=\$1
1844shift
1845dflt=\$1
1846shift
1847for dir in \$*; do
1848 case "\$thing" in
1849 .)
1850 if test -d \$dir/\$thing; then
1851 echo \$dir
1852 exit 0
1853 fi
1854 ;;
1855 *)
a0d0e21e 1856 for thisthing in \$dir/\$thing; do
ecfc5424 1857 : just loop through to pick last item
a0d0e21e 1858 done
25f94b33 1859 if test -f \$thisthing; then
a0d0e21e 1860 echo \$thisthing
2304df62
AD
1861 exit 0
1862 elif test -f \$dir/\$thing.exe; then
c4f23d77
AD
1863 if test -n "$DJGPP"; then
1864 echo \$dir/\$thing.exe
1865 else
1866 : on Eunice apparently
1867 echo \$dir/\$thing
1868 fi
2304df62
AD
1869 exit 0
1870 fi
1871 ;;
1872 esac
1873done
1874echo \$dflt
1875exit 1
1876EOSC
1877chmod +x loc
1878$eunicefix loc
1879loclist="
1880awk
1881cat
ecfc5424 1882comm
2304df62
AD
1883cp
1884echo
1885expr
1886grep
a0d0e21e 1887ls
dfe9444c 1888make
2304df62 1889mkdir
2304df62
AD
1890rm
1891sed
1892sort
85e6fe83 1893touch
2304df62
AD
1894tr
1895uniq
1896"
1897trylist="
1898Mcc
dfe9444c 1899ar
2304df62
AD
1900byacc
1901cpp
1902csh
1903date
1904egrep
8ff267be 1905gzip
2c7991dc 1906less
8ff267be 1907ln
2c7991dc 1908more
693762b4 1909nm
2304df62 1910nroff
2c7991dc 1911pg
2304df62
AD
1912test
1913uname
8ff267be 1914zip
2304df62 1915"
8e07c86e 1916pth=`echo $PATH | sed -e "s/$p_/ /g"`
2304df62
AD
1917pth="$pth /lib /usr/lib"
1918for file in $loclist; do
dfe9444c
AD
1919 eval xxx=\$$file
1920 case "$xxx" in
1921 /*|?:[\\/]*)
1922 if test -f "$xxx"; then
1923 : ok
1924 else
1925 echo "WARNING: no $xxx -- ignoring your setting for $file." >&4
1926 xxx=`./loc $file $file $pth`
1927 fi
1928 ;;
1929 '') xxx=`./loc $file $file $pth`;;
1930 *) xxx=`./loc $xxx $xxx $pth`;;
1931 esac
2304df62
AD
1932 eval $file=$xxx
1933 eval _$file=$xxx
1934 case "$xxx" in
1935 /*)
1936 echo $file is in $xxx.
1937 ;;
8e07c86e
AD
1938 ?:[\\/]*)
1939 echo $file is in $xxx.
1940 ;;
2304df62 1941 *)
25f94b33
AD
1942 echo "I don't know where '$file' is, and my life depends on it." >&4
1943 echo "Go find a public domain implementation or fix your PATH setting!" >&4
4633a7c4 1944 exit 1
2304df62
AD
1945 ;;
1946 esac
1947done
1948echo " "
1949echo "Don't worry if any of the following aren't found..."
1950say=offhand
1951for file in $trylist; do
dfe9444c
AD
1952 eval xxx=\$$file
1953 case "$xxx" in
1954 /*|?:[\\/]*)
1955 if test -f "$xxx"; then
1956 : ok
1957 else
1958 echo "WARNING: no $xxx -- ignoring your setting for $file." >&4
1959 xxx=`./loc $file $file $pth`
1960 fi
1961 ;;
1962 '') xxx=`./loc $file $file $pth`;;
1963 *) xxx=`./loc $xxx $xxx $pth`;;
1964 esac
2304df62
AD
1965 eval $file=$xxx
1966 eval _$file=$xxx
1967 case "$xxx" in
1968 /*)
1969 echo $file is in $xxx.
1970 ;;
8e07c86e
AD
1971 ?:[\\/]*)
1972 echo $file is in $xxx.
1973 ;;
2304df62
AD
1974 *)
1975 echo "I don't see $file out there, $say."
1976 say=either
1977 ;;
1978 esac
1979done
1980case "$egrep" in
1981egrep)
1982 echo "Substituting grep for egrep."
1983 egrep=$grep
1984 ;;
1985esac
8ff267be 1986case "$ln" in
1987ln)
1988 echo "Substituting cp for ln."
1989 ln=$cp
1990 ;;
1991esac
2304df62
AD
1992case "$test" in
1993test)
1994 echo "Hopefully test is built into your sh."
1995 ;;
1996*)
ecfc5424 1997 if `sh -c "PATH= test true" >/dev/null 2>&1`; then
2304df62
AD
1998 echo "Using the test built into your sh."
1999 test=test
2000 _test=test
2001 fi
2002 ;;
2003esac
2004case "$echo" in
2005echo)
2006 echo "Hopefully echo is built into your sh."
2007 ;;
2008'') ;;
2009*)
2010 echo " "
2011echo "Checking compatibility between $echo and builtin echo (if any)..." >&4
2012 $echo $n "hi there$c" >foo1
2013 echo $n "hi there$c" >foo2
2014 if cmp foo1 foo2 >/dev/null 2>&1; then
2015 echo "They are compatible. In fact, they may be identical."
2016 else
2017 case "$n" in
2018 '-n') n='' c='\c';;
2019 *) n='-n' c='';;
2020 esac
2021 cat <<FOO
2022They are not compatible! You are probably running ksh on a non-USG system.
2023I'll have to use $echo instead of the builtin, since Bourne shell doesn't
2024have echo built in and we may have to run some Bourne shell scripts. That
2025means I'll have to use '$n$c' to suppress newlines now. Life is ridiculous.
2026
2027FOO
2028 $echo $n "The star should be here-->$c"
2029 $echo "*"
2030 fi
2031 $rm -f foo1 foo2
2032 ;;
2033esac
2034
2573c5f9
JH
2035cat <<EOS >checkcc
2036$startsh
2037EOS
2038cat <<'EOSC' >>checkcc
2039case "$cc" in
2040'') ;;
2041*) $rm -f try try.*
2042 $cat >try.c <<EOM
2043int main(int argc, char *argv[]) {
2044 return 0;
2045}
2046EOM
2047 if $cc -o try try.c; then
2048 :
2049 else
2050 echo "Uh-oh, the C compiler '$cc' doesn't seem to be working." >&4
2051 despair=yes
2052 trygcc=yes
2053 case "$cc" in
2054 *gcc*) trygcc=no ;;
2055 esac
2056 case "`$cc -v -c try.c 2>&1`" in
2057 *gcc*) trygcc=no ;;
2058 esac
2059 if $test X"$trygcc" = Xyes; then
2060 if gcc -o try -c try.c; then
2061 echo " "
2062 echo "You seem to have a working gcc, though." >&4
2063 rp="Would you like to use it?"
2064 dflt=y
2065 if $test -f myread; then
2066 . ./myread
2067 else
2068 if $test -f UU/myread; then
2069 . ./UU/myread
2070 else
2071 echo "Cannot find myread, sorry. Aborting." >&2
2072 exit 1
2073 fi
2074 fi
2075 case "$ans" in
2076 [yY]*) cc=gcc; ccflags=''; despair=no ;;
2077 esac
2078 fi
2079 fi
2080 if $test X"$despair" = Xyes; then
2081 echo "You need to find a working C compiler." >&4
2082 echo "I cannot continue any further, aborting." >&4
2083 exit 1
2084 fi
2085 fi
2086 $rm -f try try.*
2087 ;;
2088esac
2089EOSC
2090
a0d0e21e
LW
2091: determine whether symbolic links are supported
2092echo " "
2093$touch blurfl
2094if $ln -s blurfl sym > /dev/null 2>&1 ; then
2095 echo "Symbolic links are supported." >&4
2096 lns="$ln -s"
2097else
2098 echo "Symbolic links are NOT supported." >&4
2099 lns="$ln"
2100fi
2101$rm -f blurfl sym
2102
ecfc5424
AD
2103: see whether [:lower:] and [:upper:] are supported character classes
2104echo " "
ecfc5424
AD
2105case "`echo AbyZ | $tr '[:lower:]' '[:upper:]' 2>/dev/null`" in
2106ABYZ)
2107 echo "Good, your tr supports [:lower:] and [:upper:] to convert case." >&4
2108 up='[:upper:]'
2109 low='[:lower:]'
2110 ;;
28e8609d
JH
2111*) # There is a discontinuity in EBCDIC between 'I' and 'J'
2112 # (0xc9 and 0xd1), therefore that is a nice testing point.
2113 if test "X$up" = X -o "X$low" = X; then
3eaeeeae 2114 case "`echo IJ | $tr '[I-J]' '[i-j]' 2>/dev/null`" in
28e8609d
JH
2115 ij) up='[A-Z]'
2116 low='[a-z]'
2117 ;;
2118 esac
2119 fi
2120 if test "X$up" = X -o "X$low" = X; then
3eaeeeae 2121 case "`echo IJ | $tr I-J i-j 2>/dev/null`" in
28e8609d
JH
2122 ij) up='A-Z'
2123 low='a-z'
2124 ;;
2125 esac
2126 fi
2127 if test "X$up" = X -o "X$low" = X; then
2128 case "`echo IJ | od -x 2>/dev/null`" in
2129 *C9D1*|*c9d1*)
2130 echo "Hey, this might be EBCDIC." >&4
2131 if test "X$up" = X -o "X$low" = X; then
5ff3f7a4 2132 case "`echo IJ | $tr '[A-IJ-RS-Z]' '[a-ij-rs-z]' 2>/dev/null`" in
28e8609d
JH
2133 ij) up='[A-IJ-RS-Z]'
2134 low='[a-ij-rs-z]'
2135 ;;
2136 esac
2137 fi
2138 if test "X$up" = X -o "X$low" = X; then
5ff3f7a4 2139 case "`echo IJ | $tr A-IJ-RS-Z a-ij-rs-z 2>/dev/null`" in
28e8609d
JH
2140 ij) up='A-IJ-RS-Z'
2141 low='a-ij-rs-z'
2142 ;;
2143 esac
2144 fi
2145 ;;
2146 esac
2147 fi
2148esac
3eaeeeae 2149case "`echo IJ | $tr \"$up\" \"$low\" 2>/dev/null`" in
28e8609d
JH
2150ij)
2151 echo "Using $up and $low to convert case." >&4
2152 ;;
ecfc5424 2153*)
28e8609d
JH
2154 echo "I don't know how to translate letters from upper to lower case." >&4
2155 echo "Your tr is not acting any way I know of." >&4
2156 exit 1
2157 ;;
ecfc5424
AD
2158esac
2159: set up the translation script tr, must be called with ./tr of course
2160cat >tr <<EOSC
2161$startsh
2162case "\$1\$2" in
2163'[A-Z][a-z]') exec $tr '$up' '$low';;
2164'[a-z][A-Z]') exec $tr '$low' '$up';;
2165esac
2166exec $tr "\$@"
2167EOSC
2168chmod +x tr
2169$eunicefix tr
2170
2304df62
AD
2171: Try to determine whether config.sh was made on this system
2172case "$config_sh" in
2173'')
43999f95
JH
2174myuname=`$uname -a 2>/dev/null`
2175$test -z "$myuname" && myuname=`hostname 2>/dev/null`
28e8609d
JH
2176# tr '[A-Z]' '[a-z]' would not work in EBCDIC
2177# because the A-Z/a-z are not consecutive.
a0d0e21e 2178myuname=`echo $myuname | $sed -e 's/^[^=]*=//' -e 's/\///g' | \
3eaeeeae 2179 ./tr '[A-Z]' '[a-z]' | $tr $trnl ' '`
1aef975c 2180newmyuname="$myuname"
2304df62 2181dflt=n
16d20bd9
AD
2182case "$knowitall" in
2183'')
2184 if test -f ../config.sh; then
2185 if $contains myuname= ../config.sh >/dev/null 2>&1; then
2186 eval "`grep myuname= ../config.sh`"
2187 fi
2188 if test "X$myuname" = "X$newmyuname"; then
2189 dflt=y
2190 fi
2304df62 2191 fi
16d20bd9
AD
2192 ;;
2193*) dflt=y;;
2194esac
2304df62
AD
2195
2196: Get old answers from old config file if Configure was run on the
2197: same system, otherwise use the hints.
2198hint=default
2199cd ..
2200if test -f config.sh; then
16d20bd9
AD
2201 echo " "
2202 rp="I see a config.sh file. Shall I use it to set the defaults?"
2304df62
AD
2203 . UU/myread
2204 case "$ans" in
2205 n*|N*) echo "OK, I'll ignore it."; mv config.sh config.sh.old;;
2206 *) echo "Fetching default answers from your old config.sh file..." >&4
ecfc5424
AD
2207 tmp_n="$n"
2208 tmp_c="$c"
85cad39c 2209 tmp_sh="$sh"
2304df62
AD
2210 . ./config.sh
2211 cp config.sh UU
ecfc5424
AD
2212 n="$tmp_n"
2213 c="$tmp_c"
85cad39c 2214 : Older versions did not always set $sh. Catch re-use of such
2215 : an old config.sh.
2216 case "$sh" in
2217 '') sh="$tmp_sh" ;;
2218 esac
2304df62
AD
2219 hint=previous
2220 ;;
2221 esac
2222fi
2573c5f9 2223. ./UU/checkcc
2304df62
AD
2224if test ! -f config.sh; then
2225 $cat <<EOM
2226
4e2a5f63
AD
2227First time through, eh? I have some defaults handy for some systems
2228that need some extra help getting the Configure answers right:
2304df62
AD
2229
2230EOM
dfe9444c 2231 (cd $src/hints; ls -C *.sh) | $sed 's/\.sh/ /g' >&4
2304df62
AD
2232 dflt=''
2233 : Half the following guesses are probably wrong... If you have better
46193409 2234 : tests or hints, please send them to perlbug@perl.com
2304df62 2235 : The metaconfig authors would also appreciate a copy...
a0d0e21e 2236 $test -f /irix && osname=irix
85e6fe83
LW
2237 $test -f /xenix && osname=sco_xenix
2238 $test -f /dynix && osname=dynix
2239 $test -f /dnix && osname=dnix
5f05dabc 2240 $test -f /lynx.os && osname=lynxos
2241 $test -f /unicos && osname=unicos && osvers=`$uname -r`
c71a9cee 2242 $test -f /unicosmk && osname=unicosmk && osvers=`$uname -r`
7a4c00b4 2243 $test -f /unicosmk.ar && osname=unicosmk && osvers=`$uname -r`
85e6fe83 2244 $test -f /bin/mips && /bin/mips && osname=mips
ecfc5424
AD
2245 $test -d /NextApps && set X `hostinfo | grep 'NeXT Mach.*:' | \
2246 $sed -e 's/://' -e 's/\./_/'` && osname=next && osvers=$4
a0d0e21e
LW
2247 $test -d /usr/apollo/bin && osname=apollo
2248 $test -f /etc/saf/_sactab && osname=svr4
85e6fe83 2249 $test -d /usr/include/minix && osname=minix
e060872b 2250 if $test -d /MachTen -o -d /MachTen_Folder; then
dfe9444c 2251 osname=machten
4633a7c4 2252 if $test -x /sbin/version; then
dfe9444c 2253 osvers=`/sbin/version | $awk '{print $2}' |
4633a7c4
LW
2254 $sed -e 's/[A-Za-z]$//'`
2255 elif $test -x /usr/etc/version; then
dfe9444c 2256 osvers=`/usr/etc/version | $awk '{print $2}' |
4633a7c4
LW
2257 $sed -e 's/[A-Za-z]$//'`
2258 else
2259 osvers="$2.$3"
2260 fi
2261 fi
aaacdc8b
GS
2262
2263 $test -f /sys/posix.dll &&
2264 $test -f /usr/bin/what &&
2265 set X `/usr/bin/what /sys/posix.dll` &&
2266 $test "$3" = UWIN &&
2267 osname=uwin &&
2268 osvers="$5"
2269
2304df62
AD
2270 if $test -f $uname; then
2271 set X $myuname
2272 shift
2273
2304df62 2274 case "$5" in
85e6fe83 2275 fps*) osname=fps ;;
2304df62
AD
2276 mips*)
2277 case "$4" in
85e6fe83
LW
2278 umips) osname=umips ;;
2279 *) osname=mips ;;
2304df62 2280 esac;;
85e6fe83
LW
2281 [23]100) osname=mips ;;
2282 next*) osname=next ;;
ecfc5424 2283 i386*)
c6912327
JH
2284 tmp=`/bin/uname -X 2>/dev/null|awk '/3\.2v[45]/{ print $(NF) }'`
2285 if $test "$tmp" != "" -a "$3" = "3.2" -a -f '/etc/systemid'; then
619ffc2b
JH
2286 osname='sco'
2287 osvers=$tmp
2288 elif $test -f /etc/kconfig; then
ecfc5424 2289 osname=isc
bd628c73 2290 if test "$lns" = "$ln -s"; then
a0d0e21e
LW
2291 osvers=4
2292 elif $contains _SYSV3 /usr/include/stdio.h > /dev/null 2>&1 ; then
2293 osvers=3
2304df62 2294 elif $contains _POSIX_SOURCE /usr/include/stdio.h > /dev/null 2>&1 ; then
a0d0e21e 2295 osvers=2
ecfc5424
AD
2296 fi
2297 fi
2000072c 2298 tmp=''
ecfc5424 2299 ;;
c4f23d77
AD
2300 pc*)
2301 if test -n "$DJGPP"; then
2302 osname=dos
2303 osvers=djgpp
2304 fi
2305 ;;
2304df62
AD
2306 esac
2307
2308 case "$1" in
a0d0e21e
LW
2309 aix) osname=aix
2310 tmp=`( (oslevel) 2>/dev/null || echo "not found") 2>&1`
2311 case "$tmp" in
1aef975c 2312 'not found') osvers="$4"."$3" ;;
a0d0e21e
LW
2313 '<3240'|'<>3240') osvers=3.2.0 ;;
2314 '=3240'|'>3240'|'<3250'|'<>3250') osvers=3.2.4 ;;
2315 '=3250'|'>3250') osvers=3.2.5 ;;
1aef975c 2316 *) osvers=$tmp;;
a0d0e21e
LW
2317 esac
2318 ;;
aaacdc8b
GS
2319 bsd386) osname=bsd386
2320 osvers=`$uname -r`
2321 ;;
2322 cygwin*) osname=cygwin
2323 osvers="$3"
2324 ;;
23f87696
SZ
2325 *dc.osx) osname=dcosx
2326 osvers="$3"
2327 ;;
a0d0e21e
LW
2328 dnix) osname=dnix
2329 osvers="$3"
2330 ;;
2331 domainos) osname=apollo
2332 osvers="$3"
2333 ;;
2334 dgux) osname=dgux
2335 osvers="$3"
2336 ;;
760ac839 2337 dynixptx*) osname=dynixptx
e58e581d 2338 osvers=`echo "$4"|sed 's/^v//'`
760ac839 2339 ;;
a0d0e21e
LW
2340 freebsd) osname=freebsd
2341 osvers="$3" ;;
2342 genix) osname=genix ;;
2343 hp*) osname=hpux
bfb7748a 2344 osvers=`echo "$3" | $sed 's,.*\.\([0-9]*\.[0-9]*\),\1,'`
a0d0e21e 2345 ;;
a78b0d02 2346 irix*) osname=irix
a0d0e21e
LW
2347 case "$3" in
2348 4*) osvers=4 ;;
2349 5*) osvers=5 ;;
ecfc5424 2350 *) osvers="$3" ;;
a0d0e21e
LW
2351 esac
2352 ;;
2353 linux) osname=linux
2354 case "$3" in
a0d0e21e
LW
2355 *) osvers="$3" ;;
2356 esac
2357 ;;
28e8609d
JH
2358 MiNT) osname=mint
2359 ;;
2360 netbsd*) osname=netbsd
ecfc5424
AD
2361 osvers="$3"
2362 ;;
4e81affe
MM
2363 news-os) osvers="$3"
2364 case "$3" in
2365 4*) osname=newsos4 ;;
2366 *) osname=newsos ;;
2367 esac
2368 ;;
aaacdc8b
GS
2369 next*) osname=next ;;
2370 POSIX-BC | posix-bc ) osname=posix-bc
2371 osvers="$3"
a0d0e21e 2372 ;;
ae3afa4e
TH
2373 powerux | power_ux | powermax_os | powermaxos | \
2374 powerunix | power_unix) osname=powerux
2375 osvers="$3"
2376 ;;
aaacdc8b
GS
2377 qnx) osname=qnx
2378 osvers="$4"
2379 ;;
a0d0e21e
LW
2380 solaris) osname=solaris
2381 case "$3" in
2382 5*) osvers=`echo $3 | $sed 's/^5/2/g'` ;;
ecfc5424 2383 *) osvers="$3" ;;
a0d0e21e
LW
2384 esac
2385 ;;
85e6fe83
LW
2386 sunos) osname=sunos
2387 case "$3" in
85e6fe83
LW
2388 5*) osname=solaris
2389 osvers=`echo $3 | $sed 's/^5/2/g'` ;;
a0d0e21e 2390 *) osvers="$3" ;;
2304df62
AD
2391 esac
2392 ;;
a0d0e21e 2393 titanos) osname=titanos
85e6fe83 2394 case "$3" in
a0d0e21e
LW
2395 1*) osvers=1 ;;
2396 2*) osvers=2 ;;
2397 3*) osvers=3 ;;
2398 4*) osvers=4 ;;
ecfc5424 2399 *) osvers="$3" ;;
2304df62
AD
2400 esac
2401 ;;
85e6fe83 2402 ultrix) osname=ultrix
ecfc5424 2403 osvers="$3"
2304df62 2404 ;;
28757baa 2405 osf1|mls+) case "$5" in
fed7345c
AD
2406 alpha)
2407 osname=dec_osf
313489a2 2408 osvers=`echo "$3" | sed 's/^[xvt]//'`
ecfc5424
AD
2409 ;;
2410 hp*) osname=hp_osf1 ;;
2411 mips) osname=mips_osf1 ;;
85e6fe83
LW
2412 esac
2413 ;;
0337d152
BG
2414 unixware) osname=svr5
2415 osvers="$4"
2416 ;;
2417 uts) osname=uts
a0d0e21e
LW
2418 osvers="$3"
2419 ;;
85e6fe83 2420 $2) case "$osname" in
2304df62 2421 *isc*) ;;
a0d0e21e 2422 *freebsd*) ;;
5f05dabc 2423 svr*)
a0d0e21e
LW
2424 : svr4.x or possibly later
2425 case "svr$3" in
2426 ${osname}*)
2427 osname=svr$3
2428 osvers=$4
2429 ;;
2430 esac
2431 case "$osname" in
2432 svr4.0)
2433 : Check for ESIX
2434 if test -f /stand/boot ; then
2435 eval `grep '^INITPROG=[a-z/0-9]*$' /stand/boot`
ecfc5424
AD
2436 if test -n "$INITPROG" -a -f "$INITPROG"; then
2437 isesix=`strings -a $INITPROG|grep 'ESIX SYSTEM V/386 Release 4.0'`
2438 if test -n "$isesix"; then
a0d0e21e
LW
2439 osname=esix4
2440 fi
2441 fi
2442 fi
2443 ;;
2444 esac
2445 ;;
2304df62 2446 *) if test -f /etc/systemid; then
a0d0e21e
LW
2447 osname=sco
2448 set `echo $3 | $sed 's/\./ /g'` $4
c4f23d77 2449 if $test -f $src/hints/sco_$1_$2_$3.sh; then
85e6fe83 2450 osvers=$1.$2.$3
c4f23d77 2451 elif $test -f $src/hints/sco_$1_$2.sh; then
85e6fe83 2452 osvers=$1.$2
c4f23d77 2453 elif $test -f $src/hints/sco_$1.sh; then
85e6fe83 2454 osvers=$1
2304df62 2455 fi
a0d0e21e
LW
2456 else
2457 case "$osname" in
2458 '') : Still unknown. Probably a generic Sys V.
2459 osname="sysv"
2460 osvers="$3"
2461 ;;
2462 esac
2304df62
AD
2463 fi
2464 ;;
2465 esac
2466 ;;
a0d0e21e
LW
2467 *) case "$osname" in
2468 '') : Still unknown. Probably a generic BSD.
2469 osname="$1"
2470 osvers="$3"
2471 ;;
2472 esac
2473 ;;
2304df62
AD
2474 esac
2475 else
dfe9444c
AD
2476 if test -f /vmunix -a -f $src/hints/news_os.sh; then
2477 (what /vmunix | UU/tr '[A-Z]' '[a-z]') > UU/kernel.what 2>&1
2478 if $contains news-os UU/kernel.what >/dev/null 2>&1; then
2479 osname=news_os
2304df62 2480 fi
dfe9444c 2481 $rm -f UU/kernel.what
8e07c86e
AD
2482 elif test -d c:/.; then
2483 set X $myuname
2484 osname=os2
2485 osvers="$5"
2304df62
AD
2486 fi
2487 fi
85e6fe83 2488
a0d0e21e
LW
2489 : Now look for a hint file osname_osvers, unless one has been
2490 : specified already.
2491 case "$hintfile" in
2492 ''|' ')
1e127011 2493 file=`echo "${osname}_${osvers}" | $sed -e 's%\.%_%g' -e 's%_$%%'`
a0d0e21e 2494 : Also try without trailing minor version numbers.
1e127011
DD
2495 xfile=`echo $file | $sed -e 's%_[^_]*$%%'`
2496 xxfile=`echo $xfile | $sed -e 's%_[^_]*$%%'`
2497 xxxfile=`echo $xxfile | $sed -e 's%_[^_]*$%%'`
2498 xxxxfile=`echo $xxxfile | $sed -e 's%_[^_]*$%%'`
a0d0e21e
LW
2499 case "$file" in
2500 '') dflt=none ;;
2501 *) case "$osvers" in
2502 '') dflt=$file
2503 ;;
dfe9444c 2504 *) if $test -f $src/hints/$file.sh ; then
a0d0e21e 2505 dflt=$file
dfe9444c 2506 elif $test -f $src/hints/$xfile.sh ; then
a0d0e21e 2507 dflt=$xfile
dfe9444c 2508 elif $test -f $src/hints/$xxfile.sh ; then
a0d0e21e 2509 dflt=$xxfile
dfe9444c 2510 elif $test -f $src/hints/$xxxfile.sh ; then
a0d0e21e 2511 dflt=$xxxfile
dfe9444c 2512 elif $test -f $src/hints/$xxxxfile.sh ; then
a0d0e21e 2513 dflt=$xxxxfile
dfe9444c 2514 elif $test -f "$src/hints/${osname}.sh" ; then
a0d0e21e
LW
2515 dflt="${osname}"
2516 else
2517 dflt=none
2518 fi
2519 ;;
2520 esac
85e6fe83
LW
2521 ;;
2522 esac
4e2a5f63
AD
2523 if $test -f Policy.sh ; then
2524 case "$dflt" in
2525 *Policy*) ;;
2526 none) dflt="Policy" ;;
2527 *) dflt="Policy $dflt" ;;
2528 esac
2529 fi
85e6fe83 2530 ;;
a0d0e21e 2531 *)
ecfc5424 2532 dflt=`echo $hintfile | $sed 's/\.sh$//'`
a0d0e21e 2533 ;;
2304df62 2534 esac
1aef975c 2535
4e2a5f63
AD
2536 if $test -f Policy.sh ; then
2537 $cat <<EOM
2538
2539There's also a Policy hint file available, which should make the
2540site-specific (policy) questions easier to answer.
2541EOM
2542
2543 fi
2544
2304df62
AD
2545 $cat <<EOM
2546
2547You may give one or more space-separated answers, or "none" if appropriate.
4e2a5f63 2548A well-behaved OS will have no hints, so answering "none" or just "Policy"
a3635516 2549is a good thing. DO NOT give a wrong version or a wrong OS.
2304df62
AD
2550
2551EOM
4e2a5f63 2552
2304df62 2553 rp="Which of these apply, if any?"
dfe9444c 2554 . UU/myread
85e6fe83
LW
2555 tans=$ans
2556 for file in $tans; do
4e2a5f63
AD
2557 if $test X$file = XPolicy -a -f Policy.sh; then
2558 . Policy.sh
2559 $cat Policy.sh >> UU/config.sh
2560 elif $test -f $src/hints/$file.sh; then
dfe9444c
AD
2561 . $src/hints/$file.sh
2562 $cat $src/hints/$file.sh >> UU/config.sh
85e6fe83 2563 elif $test X$tans = X -o X$tans = Xnone ; then
2304df62
AD
2564 : nothing
2565 else
85e6fe83
LW
2566 : Give one chance to correct a possible typo.
2567 echo "$file.sh does not exist"
2568 dflt=$file
2569 rp="hint to use instead?"
dfe9444c 2570 . UU/myread
85e6fe83 2571 for file in $ans; do
dfe9444c
AD
2572 if $test -f "$src/hints/$file.sh"; then
2573 . $src/hints/$file.sh
2574 $cat $src/hints/$file.sh >> UU/config.sh
85e6fe83
LW
2575 elif $test X$ans = X -o X$ans = Xnone ; then
2576 : nothing
2577 else
2578 echo "$file.sh does not exist -- ignored."
2579 fi
2580 done
2304df62
AD
2581 fi
2582 done
85e6fe83 2583
2304df62 2584 hint=recommended
85e6fe83 2585 : Remember our hint file for later.
dfe9444c 2586 if $test -f "$src/hints/$file.sh" ; then
a0d0e21e 2587 hintfile="$file"
85e6fe83 2588 else
a0d0e21e 2589 hintfile=''
85e6fe83 2590 fi
2304df62
AD
2591fi
2592cd UU
2593;;
2594*)
2595 echo " "
2596 echo "Fetching default answers from $config_sh..." >&4
ecfc5424
AD
2597 tmp_n="$n"
2598 tmp_c="$c"
2304df62
AD
2599 cd ..
2600 cp $config_sh config.sh 2>/dev/null
a78b0d02 2601 chmod +w config.sh
2304df62
AD
2602 . ./config.sh
2603 cd UU
2604 cp ../config.sh .
ecfc5424
AD
2605 n="$tmp_n"
2606 c="$tmp_c"
2304df62
AD
2607 hint=previous
2608 ;;
2609esac
1aef975c
AD
2610test "$override" && . ./optdef.sh
2611myuname="$newmyuname"
2304df62
AD
2612
2613: Restore computed paths
2614for file in $loclist $trylist; do
2615 eval $file="\$_$file"
2616done
2617
85e6fe83 2618cat << EOM
a0d0e21e 2619
85e6fe83 2620Configure uses the operating system name and version to set some defaults.
ecfc5424
AD
2621The default value is probably right if the name rings a bell. Otherwise,
2622since spelling matters for me, either accept the default or answer "none"
2623to leave it blank.
a0d0e21e 2624
85e6fe83 2625EOM
85e6fe83 2626case "$osname" in
a0d0e21e 2627 ''|' ')
85e6fe83 2628 case "$hintfile" in
a0d0e21e 2629 ''|' '|none) dflt=none ;;
ecfc5424 2630 *) dflt=`echo $hintfile | $sed -e 's/\.sh$//' -e 's/_.*$//'` ;;
85e6fe83
LW
2631 esac
2632 ;;
2633 *) dflt="$osname" ;;
2634esac
2635rp="Operating system name?"
2636. ./myread
2637case "$ans" in
ecfc5424
AD
2638none) osname='' ;;
2639*) osname=`echo "$ans" | $sed -e 's/[ ][ ]*/_/g' | ./tr '[A-Z]' '[a-z]'`;;
85e6fe83 2640esac
8ff267be 2641echo " "
2642case "$osvers" in
2643 ''|' ')
2644 case "$hintfile" in
2645 ''|' '|none) dflt=none ;;
2646 *) dflt=`echo $hintfile | $sed -e 's/\.sh$//' -e 's/^[^_]*//'`
2647 dflt=`echo $dflt | $sed -e 's/^_//' -e 's/_/./g'`
2648 case "$dflt" in
2649 ''|' ') dflt=none ;;
2650 esac
2651 ;;
2652 esac
2653 ;;
2654 *) dflt="$osvers" ;;
2655esac
2656rp="Operating system version?"
2657. ./myread
2658case "$ans" in
2659none) osvers='' ;;
2660*) osvers="$ans" ;;
2661esac
2662
02e93a22
JH
2663
2664. ./posthint.sh
2665
2304df62 2666: who configured the system
59b83a6f 2667cf_time=`LC_ALL=C; LANGUAGE=C; export LC_ALL; export LANGUAGE; $date 2>&1`
8ff267be 2668cf_by=`(logname) 2>/dev/null`
dfe9444c
AD
2669case "$cf_by" in
2670"")
8ff267be 2671 cf_by=`(whoami) 2>/dev/null`
dfe9444c
AD
2672 case "$cf_by" in
2673 "") cf_by=unknown ;;
8ff267be 2674 esac ;;
2675esac
2304df62 2676
dfe9444c
AD
2677: set up the script used to warn in case of inconsistency
2678cat <<EOS >whoa
2679$startsh
2680EOS
2681cat <<'EOSC' >>whoa
2682dflt=y
2683echo " "
2684echo "*** WHOA THERE!!! ***" >&4
2685echo " The $hint value for \$$var on this machine was \"$was\"!" >&4
2686rp=" Keep the $hint value?"
2687. ./myread
2688case "$ans" in
2689y) td=$was; tu=$was;;
2690esac
2691EOSC
2692
2693: function used to set $1 to $val
2694setvar='var=$1; eval "was=\$$1"; td=$define; tu=$undef;
2695case "$val$was" in
2696$define$undef) . ./whoa; eval "$var=\$td";;
2697$undef$define) . ./whoa; eval "$var=\$tu";;
2698*) eval "$var=$val";;
2699esac'
2700
0f0995ae
JH
2701case "$usethreads" in
2702$define|true|[yY]*) dflt='y';;
2703*) dflt='n';;
2704esac
64e689dc
JH
2705cat <<EOM
2706
3645a519 2707Perl can be built to take advantage of threads on some systems.
0f0995ae 2708To do so, Configure can be run with -Dusethreads.
d00b958f
JH
2709
2710Note that threading is a highly experimental feature, and
2711some known race conditions still remain. If you choose to try
2712it, be very sure to not actually deploy it for production
2713purposes. README.threads has more details, and is required
2714reading if you enable threads.
0f0995ae
JH
2715
2716If this doesn't make any sense to you, just accept the default '$dflt'.
64e689dc 2717EOM
64e689dc
JH
2718rp='Build a threading Perl?'
2719. ./myread
2720case "$ans" in
aaacdc8b 2721y|Y) val="$define" ;;
64e689dc 2722*) val="$undef" ;;
dfe9444c 2723esac
64e689dc 2724set usethreads
aaacdc8b
GS
2725eval $setvar
2726
2727case "$usethreads" in
2728$define)
2729 $cat <<EOM
2730
ff42dc34 2731As of 5.5.640, Perl has two different internal threading implementations,
aaacdc8b
GS
2732the 5.005 version (5005threads) and an interpreter-based version
2733(ithreads) that has one interpreter per thread. Both are very
2734experimental. This arrangement exists to help developers work out
2735which one is better.
3645a519
JH
2736
2737If you're a casual user, you probably don't want interpreter-threads
2738at this time. There doesn't yet exist a way to create threads from
2739within Perl in this model, i.e., "use Thread;" will NOT work.
aaacdc8b
GS
2740EOM
2741 : Default to ithreads unless overridden on command line or with
2742 : old config.sh
2743 dflt='y'
2744 case "$use5005threads" in
2745 $define|true|[yY]*) dflt='n';;
2746 esac
2747 case "$useithreads" in
2748 $undef|false|[nN]*) dflt='n';;
2749 esac
2750 rp='Use interpreter-based ithreads?'
2751 . ./myread
2752 case "$ans" in
2753 y|Y) val="$define" ;;
2754 *) val="$undef" ;;
2755 esac
2756 set useithreads
2757 eval $setvar
2758 : Now set use5005threads to the opposite value.
2759 case "$useithreads" in
2760 $define) val="$undef" ;;
2761 *) val="$define" ;;
2762 esac
2763 set use5005threads
2764 eval $setvar
2765 ;;
2766*)
2767 useithreads="$undef"
2768 use5005threads="$undef"
2769 ;;
2770esac
104d25b7 2771
693762b4
AD
2772case "$d_oldpthreads" in
2773'') : Configure tests would be welcome here. For now, assume undef.
2774 val="$undef" ;;
2775*) val="$d_oldpthreads" ;;
2776esac
2777set d_oldpthreads
2778eval $setvar
dfe9444c 2779
b691c02f
JH
2780
2781case "$usethreads" in
104d25b7
JH
2782"$define"|true|[yY]*)
2783: Look for a hint-file generated 'call-back-unit'. If the
2784: user has specified that a threading perl is to be built,
2785: we may need to set or change some other defaults.
2786 if $test -f usethreads.cbu; then
e5e20432 2787 echo "Your platform has some specific hints for threaded builds, using them..."
104d25b7 2788 . ./usethreads.cbu
e5e20432
JH
2789 else
2790 $cat <<EOM
2791(Your platform doesn't have any specific hints for threaded builds.
2792 Assuming POSIX threads, then.)
b691c02f 2793EOM
e5e20432 2794 fi
aaacdc8b 2795 ;;
e5e20432 2796esac
104d25b7 2797
ff935051 2798cat <<EOM
64e689dc 2799
ff935051
JH
2800Perl can be built so that multiple Perl interpreters can coexist
2801within the same Perl executable.
2802EOM
64e689dc 2803
ff935051
JH
2804case "$useithreads" in
2805$define)
2806 cat <<EOM
2807This multiple interpreter support is required for interpreter-based threads.
64e689dc 2808EOM
ff935051
JH
2809 val="$define"
2810 ;;
0f0995ae 2811*) case "$usemultiplicity" in
ff42dc34
GS
2812 $define|true|[yY]*) dflt='y';;
2813 *) dflt='n';;
2814 esac
49c10eea 2815 echo " "
0f0995ae 2816 echo "If this doesn't make any sense to you, just accept the default '$dflt'."
ff42dc34
GS
2817 rp='Build Perl for multiplicity?'
2818 . ./myread
2819 case "$ans" in
ff935051 2820 y|Y) val="$define" ;;
ff42dc34
GS
2821 *) val="$undef" ;;
2822 esac
2823 ;;
64e689dc
JH
2824esac
2825set usemultiplicity
ff935051 2826eval $setvar
64e689dc 2827
e5e20432
JH
2828: determine where manual pages are on this system
2829echo " "
2830case "$sysman" in
2831'')
2832 syspath='/usr/man/man1 /usr/man/mann /usr/man/manl /usr/man/local/man1'
2833 syspath="$syspath /usr/man/u_man/man1 /usr/share/man/man1"
2834 syspath="$syspath /usr/catman/u_man/man1 /usr/man/l_man/man1"
2835 syspath="$syspath /usr/local/man/u_man/man1 /usr/local/man/l_man/man1"
2836 syspath="$syspath /usr/man/man.L /local/man/man1 /usr/local/man/man1"
2837 sysman=`./loc . /usr/man/man1 $syspath`
2838 ;;
2839esac
2840if $test -d "$sysman"; then
2841 echo "System manual is in $sysman." >&4
2842else
2843 echo "Could not find manual pages in source form." >&4
2844fi
2845
2846: see what memory models we can support
2847case "$models" in
2848'')
2849 $cat >pdp11.c <<'EOP'
2850int main() {
2851#ifdef pdp11
2852 exit(0);
2853#else
2854 exit(1);
2855#endif
2856}
2857EOP
8a27cf78
JH
2858 case "$cc" in
2859 '') modelcc="$cc" ;;
2860 *) modelcc="cc" ;;
2861 esac
2862 ( $modelcc -o pdp11 pdp11.c ) >/dev/null 2>&1
e5e20432
JH
2863 if $test -f pdp11 && ./pdp11 2>/dev/null; then
2864 dflt='unsplit split'
2865 else
2866 tans=`./loc . X /lib/small /lib/large /usr/lib/small /usr/lib/large /lib/medium /usr/lib/medium /lib/huge`
2867 case "$tans" in
2868 X) dflt='none';;
2869 *) if $test -d /lib/small || $test -d /usr/lib/small; then
2870 dflt='small'
2871 else
2872 dflt=''
2873 fi
2874 if $test -d /lib/medium || $test -d /usr/lib/medium; then
2875 dflt="$dflt medium"
2876 fi
2877 if $test -d /lib/large || $test -d /usr/lib/large; then
2878 dflt="$dflt large"
2879 fi
2880 if $test -d /lib/huge || $test -d /usr/lib/huge; then
2881 dflt="$dflt huge"
2882 fi
2883 esac
2884 fi;;
2885*) dflt="$models";;
2886esac
2887$cat <<EOM
2888
2889Some systems have different model sizes. On most systems they are called
2890small, medium, large, and huge. On the PDP11 they are called unsplit and
2891split. If your system doesn't support different memory models, say "none".
2892If you wish to force everything to one memory model, say "none" here and
2893put the appropriate flags later when it asks you for other cc and ld flags.
2894Venix systems may wish to put "none" and let the compiler figure things out.
2895(In the following question multiple model names should be space separated.)
2896
2897The default for most systems is "none".
2898
2899EOM
2900rp="Which memory models are supported?"
2901. ./myread
2902models="$ans"
2903
2904case "$models" in
2905none)
2906 small=''
2907 medium=''
2908 large=''
2909 huge=''
2910 unsplit=''
2911 split=''
2912 ;;
2913*split)
2914 case "$split" in
2915 '') if $contains '\-i' $sysman/ld.1 >/dev/null 2>&1 || \
2916 $contains '\-i' $sysman/cc.1 >/dev/null 2>&1; then
2917 dflt='-i'
2918 else
2919 dflt='none'
2920 fi;;
2921 *) dflt="$split";;
2922 esac
2923 rp="What flag indicates separate I and D space?"
2924 . ./myread
2925 tans="$ans"
2926 case "$tans" in
2927 none) tans='';;
2928 esac
2929 split="$tans"
2930 unsplit='';;
2931*large*|*small*|*medium*|*huge*)
2932 case "$models" in
2933 *large*)
2934 case "$large" in
2935 '') dflt='-Ml';;
2936 *) dflt="$large";;
2937 esac
2938 rp="What flag indicates large model?"
2939 . ./myread
2940 tans="$ans"
2941 case "$tans" in
2942 none) tans='';
2943 esac
2944 large="$tans";;
2945 *) large='';;
2946 esac
2947 case "$models" in
2948 *huge*) case "$huge" in
2949 '') dflt='-Mh';;
2950 *) dflt="$huge";;
2951 esac
2952 rp="What flag indicates huge model?"
2953 . ./myread
2954 tans="$ans"
2955 case "$tans" in
2956 none) tans='';
2957 esac
2958 huge="$tans";;
2959 *) huge="$large";;
2960 esac
2961 case "$models" in
2962 *medium*) case "$medium" in
2963 '') dflt='-Mm';;
2964 *) dflt="$medium";;
2965 esac
2966 rp="What flag indicates medium model?"
2967 . ./myread
2968 tans="$ans"
2969 case "$tans" in
2970 none) tans='';
2971 esac
2972 medium="$tans";;
2973 *) medium="$large";;
2974 esac
2975 case "$models" in
2976 *small*) case "$small" in
2977 '') dflt='none';;
2978 *) dflt="$small";;
2979 esac
2980 rp="What flag indicates small model?"
2981 . ./myread
2982 tans="$ans"
2983 case "$tans" in
2984 none) tans='';
2985 esac
2986 small="$tans";;
2987 *) small='';;
2988 esac
2989 ;;
2990*)
2991 echo "Unrecognized memory models--you may have to edit Makefile.SH" >&4
2992 ;;
2993esac
2994$rm -f pdp11.* pdp11
2995
2996: make some quick guesses about what we are up against
2997echo " "
2998$echo $n "Hmm... $c"
2999echo exit 1 >bsd
3000echo exit 1 >usg
3001echo exit 1 >v7
3002echo exit 1 >osf1
3003echo exit 1 >eunice
3004echo exit 1 >xenix
3005echo exit 1 >venix
3006echo exit 1 >os2
3007d_bsd="$undef"
3008$cat /usr/include/signal.h /usr/include/sys/signal.h >foo 2>/dev/null
3009if test -f /osf_boot || $contains 'OSF/1' /usr/include/ctype.h >/dev/null 2>&1
3010then
3011 echo "Looks kind of like an OSF/1 system, but we'll see..."
3012 echo exit 0 >osf1
3013elif test `echo abc | tr a-z A-Z` = Abc ; then
3014 xxx=`./loc addbib blurfl $pth`
3015 if $test -f $xxx; then
3016 echo "Looks kind of like a USG system with BSD features, but we'll see..."
3017 echo exit 0 >bsd
3018 echo exit 0 >usg
3019 else
3020 if $contains SIGTSTP foo >/dev/null 2>&1 ; then
3021 echo "Looks kind of like an extended USG system, but we'll see..."
3022 else
3023 echo "Looks kind of like a USG system, but we'll see..."
3024 fi
3025 echo exit 0 >usg
3026 fi
3027elif $contains SIGTSTP foo >/dev/null 2>&1 ; then
3028 echo "Looks kind of like a BSD system, but we'll see..."
3029 d_bsd="$define"
3030 echo exit 0 >bsd
3031else
3032 echo "Looks kind of like a Version 7 system, but we'll see..."
3033 echo exit 0 >v7
3034fi
3035case "$eunicefix" in
3036*unixtovms*)
3037 $cat <<'EOI'
3038There is, however, a strange, musty smell in the air that reminds me of
3039something...hmm...yes...I've got it...there's a VMS nearby, or I'm a Blit.
3040EOI
3041 echo exit 0 >eunice
3042 d_eunice="$define"
3043: it so happens the Eunice I know will not run shell scripts in Unix format
3044 ;;
3045*)
3046 echo " "
3047 echo "Congratulations. You aren't running Eunice."
3048 d_eunice="$undef"
3049 ;;
3050esac
3051: Detect OS2. The p_ variable is set above in the Head.U unit.
3052case "$p_" in
3053:) ;;
3054*)
3055 $cat <<'EOI'
3056I have the feeling something is not exactly right, however...don't tell me...
3057lemme think...does HAL ring a bell?...no, of course, you're only running OS/2!
3058EOI
3059 echo exit 0 >os2
3060 ;;
3061esac
3062if test -f /xenix; then
3063 echo "Actually, this looks more like a XENIX system..."
3064 echo exit 0 >xenix
3065 d_xenix="$define"
3066else
3067 echo " "
3068 echo "It's not Xenix..."
3069 d_xenix="$undef"
3070fi
3071chmod +x xenix
3072$eunicefix xenix
3073if test -f /venix; then
3074 echo "Actually, this looks more like a VENIX system..."
3075 echo exit 0 >venix
3076else
3077 echo " "
3078 if ./xenix; then
3079 : null
3080 else
3081 echo "Nor is it Venix..."
3082 fi
3083fi
3084chmod +x bsd usg v7 osf1 eunice xenix venix os2
3085$eunicefix bsd usg v7 osf1 eunice xenix venix os2
3086$rm -f foo
3087
3088: see if we need a special compiler
3089echo " "
3090if ./usg; then
3091 case "$cc" in
3092 '') case "$Mcc" in
3093 /*) dflt='Mcc';;
3094 *) case "$large" in
3095 -M*) dflt='cc';;
3096 *) if $contains '\-M' $sysman/cc.1 >/dev/null 2>&1 ; then
3097 if $contains '\-M' $sysman/cpp.1 >/dev/null 2>&1; then
3098 dflt='cc'
3099 else
3100 dflt='cc -M'
3101 fi
3102 else
3103 dflt='cc'
3104 fi;;
3105 esac;;
3106 esac;;
3107 *) dflt="$cc";;
3108 esac
3109 case "$dflt" in
3110 *M*) $cat <<'EOM'
3111On some older systems the default C compiler will not resolve multiple global
3112references that happen to have the same name. On some such systems the "Mcc"
3113command may be used to force these to be resolved. On other systems a "cc -M"
3114command is required. (Note that the -M flag on other systems indicates a
3115memory model to use!) If you have the Gnu C compiler, you might wish to use
3116that instead.
3117
3118EOM
3119 ;;
3120 esac
3121 rp="Use which C compiler?"
3122 . ./myread
3123 cc="$ans"
3124else
3125 case "$cc" in
3126 '') dflt=cc;;
3127 *) dflt="$cc";;
3128 esac
3129 rp="Use which C compiler?"
3130 . ./myread
3131 cc="$ans"
3132fi
3133: Look for a hint-file generated 'call-back-unit'. Now that the
3134: user has specified the compiler, we may need to set or change some
3135: other defaults.
3136if $test -f cc.cbu; then
3137 . ./cc.cbu
3138fi
2573c5f9 3139. ./checkcc
8a27cf78 3140
e5e20432
JH
3141echo " "
3142echo "Checking for GNU cc in disguise and/or its version number..." >&4
3143$cat >gccvers.c <<EOM
3144#include <stdio.h>
3145int main() {
3146#ifdef __GNUC__
3147#ifdef __VERSION__
3148 printf("%s\n", __VERSION__);
3149#else
3150 printf("%s\n", "1");
3151#endif
3152#endif
3153 exit(0);
3154}
3155EOM
bf0c440f 3156if $cc $ldflags -o gccvers gccvers.c; then
e5e20432
JH
3157 gccversion=`./gccvers`
3158 case "$gccversion" in
3159 '') echo "You are not using GNU cc." ;;
fc68435e 3160 *) echo "You are using GNU cc $gccversion."
fc68435e 3161 ;;
e5e20432
JH
3162 esac
3163else
3164 echo " "
3165 echo "*** WHOA THERE!!! ***" >&4
3166 echo " Your C compiler \"$cc\" doesn't seem to be working!" >&4
3167 case "$knowitall" in
3168 '')
3169 echo " You'd better start hunting for one and let me know about it." >&4
3170 exit 1
3171 ;;
3172 esac
3173fi
3174$rm -f gccvers*
3175case "$gccversion" in
31761*) cpp=`./loc gcc-cpp $cpp $pth` ;;
3177esac
3178
8a27cf78
JH
3179: see how we invoke the C preprocessor
3180echo " "
3181echo "Now, how can we feed standard input to your C preprocessor..." >&4
3182cat <<'EOT' >testcpp.c
3183#define ABC abc
3184#define XYZ xyz
3185ABC.XYZ
3186EOT
3187cd ..
3188if test ! -f cppstdin; then
3189 if test "X$osname" = "Xaix" -a "X$gccversion" = X; then
3190 # AIX cc -E doesn't show the absolute headerfile
3191 # locations but we'll cheat by using the -M flag.
3192 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
3193 else
3194 echo 'cat >.$$.c; '"$cc"' -E ${1+"$@"} .$$.c; rm .$$.c' >cppstdin
3195 fi
3196else
3197 echo "Keeping your $hint cppstdin wrapper."
3198fi
3199chmod 755 cppstdin
3200wrapper=`pwd`/cppstdin
3201ok='false'
3202cd UU
3203
3204if $test "X$cppstdin" != "X" && \
3205 $cppstdin $cppminus <testcpp.c >testcpp.out 2>&1 && \
3206 $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1
3207then
3208 echo "You used to use $cppstdin $cppminus so we'll use that again."
3209 case "$cpprun" in
3210 '') echo "But let's see if we can live without a wrapper..." ;;
3211 *)
3212 if $cpprun $cpplast <testcpp.c >testcpp.out 2>&1 && \
3213 $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1
3214 then
3215 echo "(And we'll use $cpprun $cpplast to preprocess directly.)"
3216 ok='true'
3217 else
3218 echo "(However, $cpprun $cpplast does not work, let's see...)"
3219 fi
3220 ;;
3221 esac
3222else
3223 case "$cppstdin" in
3224 '') ;;
3225 *)
3226 echo "Good old $cppstdin $cppminus does not seem to be of any help..."
3227 ;;
3228 esac
3229fi
3230
3231if $ok; then
3232 : nothing
3233elif echo 'Maybe "'"$cc"' -E" will work...'; \
3234 $cc -E <testcpp.c >testcpp.out 2>&1; \
3235 $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3236 echo "Yup, it does."
3237 x_cpp="$cc -E"
3238 x_minus='';
3239elif echo 'Nope...maybe "'"$cc"' -E -" will work...'; \
3240 $cc -E - <testcpp.c >testcpp.out 2>&1; \
3241 $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3242 echo "Yup, it does."
3243 x_cpp="$cc -E"
3244 x_minus='-';
3245elif echo 'Nope...maybe "'"$cc"' -P" will work...'; \
3246 $cc -P <testcpp.c >testcpp.out 2>&1; \
3247 $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3248 echo "Yipee, that works!"
3249 x_cpp="$cc -P"
3250 x_minus='';
3251elif echo 'Nope...maybe "'"$cc"' -P -" will work...'; \
3252 $cc -P - <testcpp.c >testcpp.out 2>&1; \
3253 $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3254 echo "At long last!"
3255 x_cpp="$cc -P"
3256 x_minus='-';
3257elif echo 'No such luck, maybe "'$cpp'" will work...'; \
3258 $cpp <testcpp.c >testcpp.out 2>&1; \
3259 $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3260 echo "It works!"
3261 x_cpp="$cpp"
3262 x_minus='';
3263elif echo 'Nixed again...maybe "'$cpp' -" will work...'; \
3264 $cpp - <testcpp.c >testcpp.out 2>&1; \
3265 $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3266 echo "Hooray, it works! I was beginning to wonder."
3267 x_cpp="$cpp"
3268 x_minus='-';
3269elif echo 'Uh-uh. Time to get fancy. Trying a wrapper...'; \
3270 $wrapper <testcpp.c >testcpp.out 2>&1; \
3271 $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3272 x_cpp="$wrapper"
3273 x_minus=''
3274 echo "Eureka!"
3275else
3276 dflt=''
3277 rp="No dice. I can't find a C preprocessor. Name one:"
3278 . ./myread
3279 x_cpp="$ans"
3280 x_minus=''
3281 $x_cpp <testcpp.c >testcpp.out 2>&1
3282 if $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3283 echo "OK, that will do." >&4
3284 else
3285echo "Sorry, I can't get that to work. Go find one and rerun Configure." >&4
3286 exit 1
3287 fi
3288fi
3289
3290case "$ok" in
3291false)
3292 cppstdin="$x_cpp"
3293 cppminus="$x_minus"
3294 cpprun="$x_cpp"
3295 cpplast="$x_minus"
3296 set X $x_cpp
3297 shift
3298 case "$1" in
3299 "$cpp")
3300 echo "Perhaps can we force $cc -E using a wrapper..."
3301 if $wrapper <testcpp.c >testcpp.out 2>&1; \
3302 $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1
3303 then
3304 echo "Yup, we can."
3305 cppstdin="$wrapper"
3306 cppminus='';
3307 else
3308 echo "Nope, we'll have to live without it..."
3309 fi
3310 ;;
3311 esac
3312 case "$cpprun" in
3313 "$wrapper")
3314 cpprun=''
3315 cpplast=''
3316 ;;
3317 esac
3318 ;;
3319esac
3320
3321case "$cppstdin" in
3322"$wrapper"|'cppstdin') ;;
3323*) $rm -f $wrapper;;
3324esac
3325$rm -f testcpp.c testcpp.out
3326
bd9b35c9
JH
3327: decide how portable to be. Allow command line overrides.
3328case "$d_portable" in
3329"$undef") ;;
3330*) d_portable="$define" ;;
104d25b7 3331esac
85ab1d1d 3332
bd9b35c9
JH
3333: set up shell script to do ~ expansion
3334cat >filexp <<EOSS
3335$startsh
3336: expand filename
3337case "\$1" in
3338 ~/*|~)
3339 echo \$1 | $sed "s|~|\${HOME-\$LOGDIR}|"
3340 ;;
3341 ~*)
3342 if $test -f /bin/csh; then
3343 /bin/csh -f -c "glob \$1"
3344 failed=\$?
3345 echo ""
3346 exit \$failed
e5e20432 3347 else
bd9b35c9
JH
3348 name=\`$expr x\$1 : '..\([^/]*\)'\`
3349 dir=\`$sed -n -e "/^\${name}:/{s/^[^:]*:[^:]*:[^:]*:[^:]*:[^:]*:\([^:]*\).*"'\$'"/\1/" -e p -e q -e '}' </etc/passwd\`
3350 if $test ! -d "\$dir"; then
3351 me=\`basename \$0\`
3352 echo "\$me: can't locate home directory for: \$name" >&2
3353 exit 1
3354 fi
3355 case "\$1" in
3356 */*)
3357 echo \$dir/\`$expr x\$1 : '..[^/]*/\(.*\)'\`
3358 ;;
3359 *)
3360 echo \$dir
e5e20432
JH
3361 ;;
3362 esac
3363 fi
b691c02f 3364 ;;
4633a7c4 3365*)
bd9b35c9 3366 echo \$1
2304df62
AD
3367 ;;
3368esac
4633a7c4
LW
3369EOSS
3370chmod +x filexp
3371$eunicefix filexp
2304df62
AD
3372
3373: now set up to get a file name
28757baa 3374cat <<EOS >getfile
3375$startsh
3376EOS
3377cat <<'EOSC' >>getfile
2304df62
AD
3378tilde=''
3379fullpath=''
3380already=''
3381skip=''
3382none_ok=''
3383exp_file=''
a0d0e21e 3384nopath_ok=''
2304df62
AD
3385orig_rp="$rp"
3386orig_dflt="$dflt"
b233458b
JH
3387case "$gfpth" in
3388'') gfpth='.' ;;
3389esac
2304df62
AD
3390
3391case "$fn" in
ecfc5424 3392*\(*)
28e8609d 3393 expr $fn : '.*(\(.*\)).*' | tr ',' $trnl >getfile.ok
ecfc5424
AD
3394 fn=`echo $fn | sed 's/(.*)//'`
3395 ;;
3396esac
3397
3398case "$fn" in
a0d0e21e
LW
3399*:*)
3400 loc_file=`expr $fn : '.*:\(.*\)'`
3401 fn=`expr $fn : '\(.*\):.*'`
3402 ;;
3403esac
3404
3405case "$fn" in
2304df62
AD
3406*~*) tilde=true;;
3407esac
3408case "$fn" in
3409*/*) fullpath=true;;
3410esac
3411case "$fn" in
3412*+*) skip=true;;
3413esac
3414case "$fn" in
3415*n*) none_ok=true;;
3416esac
3417case "$fn" in
3418*e*) exp_file=true;;
3419esac
a0d0e21e
LW
3420case "$fn" in
3421*p*) nopath_ok=true;;
3422esac
2304df62
AD
3423
3424case "$fn" in
3425*f*) type='File';;
3426*d*) type='Directory';;
a0d0e21e 3427*l*) type='Locate';;
2304df62
AD
3428esac
3429
3430what="$type"
3431case "$what" in
3432Locate) what='File';;
3433esac
3434
3435case "$exp_file" in
3436'')
3437 case "$d_portable" in
3438 "$define") ;;
3439 *) exp_file=true;;
3440 esac
3441 ;;
3442esac
3443
3444cd ..
3445while test "$type"; do
3446 redo=''
3447 rp="$orig_rp"
3448 dflt="$orig_dflt"
3449 case "$tilde" in
3450 true) rp="$rp (~name ok)";;
3451 esac
3452 . UU/myread
ecfc5424
AD
3453 if test -f UU/getfile.ok && \
3454 $contains "^$ans\$" UU/getfile.ok >/dev/null 2>&1
3455 then
3456 value="$ans"
3457 ansexp="$ans"
3458 break
3459 fi
2304df62
AD
3460 case "$ans" in
3461 none)
3462 value=''
3463 ansexp=''
3464 case "$none_ok" in
3465 true) type='';;
3466 esac
3467 ;;
3468 *)
3469 case "$tilde" in
3470 '') value="$ans"
3471 ansexp="$ans";;
3472 *)
3473 value=`UU/filexp $ans`
3474 case $? in
3475 0)
3476 if test "$ans" != "$value"; then
ecfc5424 3477 echo "(That expands to $value on this system.)"
2304df62
AD
3478 fi
3479 ;;
3480 *) value="$ans";;
3481 esac
3482 ansexp="$value"
3483 case "$exp_file" in
3484 '') value="$ans";;
3485 esac
3486 ;;
3487 esac
3488 case "$fullpath" in
3489 true)
3490 case "$ansexp" in
3491 /*) value="$ansexp" ;;
23da6c43 3492 [a-zA-Z]:/*) value="$ansexp" ;;
2304df62
AD
3493 *)
3494 redo=true
3495 case "$already" in
3496 true)
3497 echo "I shall only accept a full path name, as in /bin/ls." >&4
3498 echo "Use a ! shell escape if you wish to check pathnames." >&4
3499 ;;
3500 *)
3501 echo "Please give a full path name, starting with slash." >&4
3502 case "$tilde" in
3503 true)
3504 echo "Note that using ~name is ok provided it expands well." >&4
3505 already=true
3506 ;;
3507 esac
3508 esac
3509 ;;
3510 esac
3511 ;;
3512 esac
3513 case "$redo" in
3514 '')
3515 case "$type" in
3516 File)
b233458b
JH
3517 for fp in $gfpth; do
3518 if test "X$fp" = X.; then
3519 pf="$ansexp"
3520 else
3521 pf="$fp/$ansexp"
3522 fi
3523 if test -f "$pf"; then
3524 type=''
3525 elif test -r "$pf" || (test -h "$pf") >/dev/null 2>&1
3526 then
3527 echo "($value is not a plain file, but that's ok.)"
3528 type=''
3529 fi
3530 if test X"$type" = X; then
3531 value="$pf"
3532 break
3533 fi
3534 done
2304df62
AD
3535 ;;
3536 Directory)
b233458b
JH
3537 for fp in $gfpth; do
3538 if test "X$fp" = X.; then
f78bfc9c
JH
3539 dir="$ans"
3540 direxp="$ansexp"
b233458b 3541 else
dd858076 3542 dir="$fp/$ansexp"
f78bfc9c 3543 direxp="$fp/$ansexp"
b233458b 3544 fi
f78bfc9c 3545 if test -d "$direxp"; then
b233458b 3546 type=''
f78bfc9c 3547 value="$dir"
b233458b
JH
3548 break
3549 fi
3550 done
2304df62
AD
3551 ;;
3552 Locate)
40000a8c 3553 if test -d "$ansexp"; then
a0d0e21e
LW
3554 echo "(Looking for $loc_file in directory $value.)"
3555 value="$value/$loc_file"
40000a8c 3556 ansexp="$ansexp/$loc_file"
2304df62 3557 fi
40000a8c 3558 if test -f "$ansexp"; then
2304df62
AD
3559 type=''
3560 fi
a0d0e21e
LW
3561 case "$nopath_ok" in
3562 true) case "$value" in
3563 */*) ;;
3564 *) echo "Assuming $value will be in people's path."
3565 type=''
3566 ;;
3567 esac
3568 ;;
3569 esac
2304df62
AD
3570 ;;
3571 esac
3572
3573 case "$skip" in
3574 true) type='';
3575 esac
3576
3577 case "$type" in
3578 '') ;;
3579 *)
3580 if test "$fastread" = yes; then
3581 dflt=y
3582 else
3583 dflt=n
3584 fi
3585 rp="$what $value doesn't exist. Use that name anyway?"
3586 . UU/myread
3587 dflt=''
3588 case "$ans" in
3589 y*) type='';;
3590 *) echo " ";;
3591 esac
3592 ;;
3593 esac
3594 ;;
3595 esac
3596 ;;
3597 esac
3598done
3599cd UU
3600ans="$value"
3601rp="$orig_rp"
3602dflt="$orig_dflt"
ecfc5424 3603rm -f getfile.ok
b233458b 3604test "X$gfpthkeep" != Xy && gfpth=""
2304df62
AD
3605EOSC
3606
bd9b35c9
JH
3607: What should the include directory be ?
3608echo " "
3609$echo $n "Hmm... $c"
3610dflt='/usr/include'
3611incpath=''
3612mips_type=''
3613if $test -f /bin/mips && /bin/mips; then
3614 echo "Looks like a MIPS system..."
3615 $cat >usr.c <<'EOCP'
3616#ifdef SYSTYPE_BSD43
3617/bsd43
3618#endif
3619EOCP
8a27cf78 3620 if cc -E usr.c > usr.out && $contains / usr.out >/dev/null 2>&1; then
bd9b35c9
JH
3621 dflt='/bsd43/usr/include'
3622 incpath='/bsd43'
3623 mips_type='BSD 4.3'
3624 else
3625 mips_type='System V'
3626 fi
3627 $rm -f usr.c usr.out
3628 echo "and you're compiling with the $mips_type compiler and libraries."
3629 xxx_prompt=y
3630 echo "exit 0" >mips
3631else
3632 echo "Doesn't look like a MIPS system."
3633 xxx_prompt=n
3634 echo "exit 1" >mips
3635fi
3636chmod +x mips
3637$eunicefix mips
3638case "$usrinc" in
3639'') ;;
3640*) dflt="$usrinc";;
3641esac
3642case "$xxx_prompt" in
3643y) fn=d/
3644 echo " "
3645 rp='Where are the include files you want to use?'
3646 . ./getfile
3647 usrinc="$ans"
8e07c86e 3648 ;;
bd9b35c9 3649*) usrinc="$dflt"
8e07c86e
AD
3650 ;;
3651esac
2304df62 3652
bd9b35c9
JH
3653: Set private lib path
3654case "$plibpth" in
3655'') if ./mips; then
3656 plibpth="$incpath/usr/lib /usr/local/lib /usr/ccs/lib"
3657 fi;;
3658esac
3659case "$libpth" in
3660' ') dlist='';;
3661'') dlist="$loclibpth $plibpth $glibpth";;
3662*) dlist="$libpth";;
3663esac
3664
3665: Now check and see which directories actually exist, avoiding duplicates
3666libpth=''
3667for xxx in $dlist
3668do
3669 if $test -d $xxx; then
3670 case " $libpth " in
3671 *" $xxx "*) ;;
3672 *) libpth="$libpth $xxx";;
3673 esac
3674 fi
3675done
3676$cat <<'EOM'
3677
3678Some systems have incompatible or broken versions of libraries. Among
3679the directories listed in the question below, please remove any you
3680know not to be holding relevant libraries, and add any that are needed.
3681Say "none" for none.
8e07c86e
AD
3682
3683EOM
bd9b35c9
JH
3684case "$libpth" in
3685'') dflt='none';;
8e07c86e 3686*)
bd9b35c9
JH
3687 set X $libpth
3688 shift
3689 dflt=${1+"$@"}
8e07c86e 3690 ;;
a0d0e21e 3691esac
bd9b35c9
JH
3692rp="Directories to use for library searches?"
3693. ./myread
3694case "$ans" in
3695none) libpth=' ';;
3696*) libpth="$ans";;
3697esac
a0d0e21e 3698
bd9b35c9
JH
3699: compute shared library extension
3700case "$so" in
3701'')
3702 if xxx=`./loc libc.sl X $libpth`; $test -f "$xxx"; then
3703 dflt='sl'
dd4e71fd 3704 else
bd9b35c9 3705 dflt='so'
dd4e71fd
JH
3706 fi
3707 ;;
bd9b35c9 3708*) dflt="$so";;
dd4e71fd 3709esac
dd4e71fd
JH
3710$cat <<EOM
3711
bd9b35c9 3712On some systems, shared libraries may be available. Answer 'none' if
7f95ee77 3713you want to suppress searching of shared libraries for the remainder
bd9b35c9 3714of this configuration.
dd4e71fd
JH
3715
3716EOM
bd9b35c9
JH
3717rp='What is the file extension used for shared libraries?'
3718. ./myread
3719so="$ans"
dd4e71fd 3720
bd9b35c9
JH
3721: Define several unixisms.
3722: Hints files or command line option can be used to override them.
3723: The convoluted testing is in case hints files set either the old
3724: or the new name.
3725case "$_exe" in
3726'') case "$exe_ext" in
3727 '') ;;
3728 *) _exe="$exe_ext" ;;
dd4e71fd 3729 esac
bd9b35c9 3730 ;;
bfb7748a 3731esac
bd9b35c9
JH
3732case "$_a" in
3733'') case "$lib_ext" in
3734 '') _a='.a';;
3735 *) _a="$lib_ext" ;;
dd4e71fd
JH
3736 esac
3737 ;;
dd4e71fd 3738esac
bd9b35c9
JH
3739case "$_o" in
3740'') case "$obj_ext" in
3741 '') _o='.o';;
3742 *) _o="$obj_ext";;
3743 esac
3744 ;;
3745esac
3746case "$p_" in
3747'') case "$path_sep" in
3748 '') p_=':';;
3749 *) p_="$path_sep";;
3750 esac
3751 ;;
3752esac
3753exe_ext=$_exe
3754lib_ext=$_a
3755obj_ext=$_o
3756path_sep=$p_
dd4e71fd 3757
bd9b35c9
JH
3758: Which makefile gets called first. This is used by make depend.
3759case "$firstmakefile" in
3760'') firstmakefile='makefile';;
4633a7c4 3761esac
4633a7c4 3762
0f0995ae
JH
3763case "$usesocks" in
3764$define|true|[yY]*) dflt='y';;
3765*) dflt='n';;
3766esac
bd9b35c9 3767cat <<EOM
4633a7c4 3768
bd9b35c9
JH
3769Perl can be built to use the SOCKS proxy protocol library. To do so,
3770Configure must be run with -Dusesocks.
4633a7c4 3771
0f0995ae 3772If this doesn't make any sense to you, just accept the default '$dflt'.
bd9b35c9 3773EOM
bd9b35c9
JH
3774rp='Build Perl for SOCKS?'
3775. ./myread
3776case "$ans" in
3777y|Y) val="$define" ;;
3778*) val="$undef" ;;
3779esac
3780set usesocks
3781eval $setvar
3782
3783: Looking for optional libraries
3784echo " "
3785echo "Checking for optional libraries..." >&4
3786case "$libs" in
3787' '|'') dflt='';;
3788*) dflt="$libs";;
3789esac
3790case "$libswanted" in
3791'') libswanted='c_s';;
3792esac
3793case "$usesocks" in
923fc586 3794"$define") libswanted="$libswanted socks5 socks5_sh" ;;
8e07c86e 3795esac
68435ea7
JH
3796libsfound=''
3797libsfiles=''
3798libsdirs=''
13b3f787
JH
3799libspath=''
3800for thisdir in $libpth $xlibpth; do
3801 test -d $thisdir && libspath="$libspath $thisdir"
3802done
bd9b35c9 3803for thislib in $libswanted; do
13b3f787 3804 for thisdir in $libspath; do
f7dd4e7f
JH
3805 xxx=''
3806 if $test ! -f "$xxx" -a "X$ignore_versioned_solibs" = "X"; then
3807 xxx=`ls $thisdir/lib$thislib.$so.[0-9] 2>/dev/null|tail -1`
3808 $test -f "$xxx" && eval $libscheck
3809 $test -f "$xxx" && libstyle=shared
3810 fi
3811 if test ! -f "$xxx"; then
3812 xxx=$thisdir/lib$thislib.$so
3813 $test -f "$xxx" && eval $libscheck
3814 $test -f "$xxx" && libstyle=shared
3815 fi
3816 if test ! -f "$xxx"; then
3817 xxx=$thisdir/lib$thislib$_a
3818 $test -f "$xxx" && eval $libscheck
3819 $test -f "$xxx" && libstyle=static
3820 fi
3821 if test ! -f "$xxx"; then
3822 xxx=$thisdir/$thislib$_a
3823 $test -f "$xxx" && eval $libscheck
3824 $test -f "$xxx" && libstyle=static
3825 fi
3826 if test ! -f "$xxx"; then
3827 xxx=$thisdir/lib${thislib}_s$_a
3828 $test -f "$xxx" && eval $libscheck
3829 $test -f "$xxx" && libstyle=static
09ea5ba9 3830 $test -f "$xxx" && thislib=${thislib}_s
f7dd4e7f
JH
3831 fi
3832 if test ! -f "$xxx"; then
3833 xxx=$thisdir/Slib$thislib$_a
3834 $test -f "$xxx" && eval $libscheck
3835 $test -f "$xxx" && libstyle=static
3836 fi
3837 if $test -f "$xxx"; then
43999f95 3838 case "$libstyle" in
f7dd4e7f
JH
3839 shared) echo "Found -l$thislib (shared)." ;;
3840 static) echo "Found -l$thislib." ;;
3841 *) echo "Found -l$thislib ($libstyle)." ;;
43999f95 3842 esac
bd9b35c9
JH
3843 case " $dflt " in
3844 *"-l$thislib "*);;
f7dd4e7f 3845 *) dflt="$dflt -l$thislib"
43999f95
JH
3846 libsfound="$libsfound $xxx"
3847 yyy=`basename $xxx`
3848 libsfiles="$libsfiles $yyy"
1e127011 3849 yyy=`echo $xxx|$sed -e "s%/$yyy\\$%%"`
43999f95
JH
3850 case " $libsdirs " in
3851 *" $yyy "*) ;;
3852 *) libsdirs="$libsdirs $yyy" ;;
3853 esac
3854 ;;
bd9b35c9 3855 esac
f7dd4e7f
JH
3856 break
3857 fi
3858 done
3859 if $test ! -f "$xxx"; then
3860 echo "No -l$thislib."
bd9b35c9
JH
3861 fi
3862done
3863set X $dflt
3864shift
3865dflt="$*"
3866case "$libs" in
3867'') dflt="$dflt";;
3868*) dflt="$libs";;
3869esac
3870case "$dflt" in
3871' '|'') dflt='none';;
3872esac
4633a7c4 3873
bd9b35c9 3874$cat <<EOM
4633a7c4 3875
bd9b35c9
JH
3876In order to compile $package on your machine, a number of libraries
3877are usually needed. Include any other special libraries here as well.
3878Say "none" for none. The default list is almost always right.
8e07c86e 3879EOM
8e07c86e 3880
bd9b35c9
JH
3881echo " "
3882rp="What libraries to use?"
3883. ./myread
3884case "$ans" in
3885none) libs=' ';;
3886*) libs="$ans";;
3887esac
d71b2b6b 3888
bd9b35c9
JH
3889: determine optimization, if desired, or use for debug flag also
3890case "$optimize" in
3891' '|$undef) dflt='none';;
3892'') dflt='-O';;
3893*) dflt="$optimize";;
3894esac
3895$cat <<EOH
d71b2b6b 3896
bd9b35c9
JH
3897By default, $package compiles with the -O flag to use the optimizer.
3898Alternately, you might want to use the symbolic debugger, which uses
3899the -g flag (on traditional Unix systems). Either flag can be
3900specified here. To use neither flag, specify the word "none".
d71b2b6b 3901
bd9b35c9
JH
3902EOH
3903rp="What optimizer/debugger flag should be used?"
3904. ./myread
3905optimize="$ans"
3906case "$optimize" in
3907'none') optimize=" ";;
3908esac
3909
3910dflt=''
3911: We will not override a previous value, but we might want to
3912: augment a hint file
3913case "$hint" in
3914default|recommended)
3915 case "$gccversion" in
3916 1*) dflt='-fpcc-struct-return' ;;
d71b2b6b 3917 esac
bd9b35c9
JH
3918 case "$optimize" in
3919 *-g*) dflt="$dflt -DDEBUGGING";;
d71b2b6b 3920 esac
bd9b35c9
JH
3921 case "$gccversion" in
3922 2*) if test -d /etc/conf/kconfig.d &&
3923 $contains _POSIX_VERSION $usrinc/sys/unistd.h >/dev/null 2>&1
3924 then
3925 dflt="$dflt -posix"
3926 fi
f0d04425 3927 ;;
bd9b35c9
JH
3928 esac
3929 case "$gccversion" in
3930 1*) ;;
3931 2.[0-8]*) ;;
3932 ?*) echo " "
3933 echo "Checking if your compiler accepts -fno-strict-aliasing" 2>&1
3934 echo 'int main(void) { return 0; }' > gcctest.c
3935 if $cc -O2 -fno-strict-aliasing -o gcctest gcctest.c; then
3936 echo "Yes, it does." 2>&1
3937 case "$ccflags" in
3938 *strict-aliasing*)
3939 echo "Leaving current flags $ccflags alone." 2>&1
3940 ;;
3941 *) dflt="$dflt -fno-strict-aliasing" ;;
3942 esac
3943 else
3944 echo "Nope, it doesn't, but that's ok." 2>&1
3945 fi
f0d04425 3946 ;;
e5e20432
JH
3947 esac
3948 ;;
3949esac
3950
bd9b35c9
JH
3951case "$mips_type" in
3952*BSD*|'') inclwanted="$locincpth $usrinc";;
3953*) inclwanted="$locincpth $inclwanted $usrinc/bsd";;
3954esac
3955for thisincl in $inclwanted; do
3956 if $test -d $thisincl; then
3957 if $test x$thisincl != x$usrinc; then
3958 case "$dflt" in
3959 *$thisincl*);;
3960 *) dflt="$dflt -I$thisincl";;
3961 esac
3962 fi
3963 fi
3964done
40a7a20a 3965
bd9b35c9
JH
3966inctest='if $contains $2 $usrinc/$1 >/dev/null 2>&1; then
3967 xxx=true;
3968elif $contains $2 $usrinc/sys/$1 >/dev/null 2>&1; then
3969 xxx=true;
3970else
3971 xxx=false;
3972fi;
3973if $xxx; then
3974 case "$dflt" in
3975 *$2*);;
3976 *) dflt="$dflt -D$2";;
3977 esac;
3978fi'
40a7a20a 3979
bd9b35c9 3980set signal.h LANGUAGE_C; eval $inctest
40a7a20a 3981
bd9b35c9
JH
3982case "$usesocks" in
3983$define)
3984 ccflags="$ccflags -DSOCKS"
3985 ;;
3986esac
40a7a20a 3987
bd9b35c9
JH
3988case "$hint" in
3989default|recommended) dflt="$ccflags $dflt" ;;
3990*) dflt="$ccflags";;
3991esac
40a7a20a 3992
bd9b35c9
JH
3993case "$dflt" in
3994''|' ') dflt=none;;
3995esac
3996$cat <<EOH
40a7a20a 3997
bd9b35c9
JH
3998Your C compiler may want other flags. For this question you should include
3999-I/whatever and -DWHATEVER flags and any other flags used by the C compiler,
4000but you should NOT include libraries or ld flags like -lwhatever. If you
4001want $package to honor its debug switch, you should include -DDEBUGGING here.
4002Your C compiler might also need additional flags, such as -D_POSIX_SOURCE.
40a7a20a 4003
bd9b35c9 4004To use no flags, specify the word "none".
40a7a20a 4005
bd9b35c9
JH
4006EOH
4007set X $dflt
4008shift
4009dflt=${1+"$@"}
4010rp="Any additional cc flags?"
4011. ./myread
4012case "$ans" in
4013none) ccflags='';;
4014*) ccflags="$ans";;
4015esac
8e07c86e 4016
bd9b35c9
JH
4017: the following weeds options from ccflags that are of no interest to cpp
4018cppflags="$ccflags"
4019case "$gccversion" in
40201*) cppflags="$cppflags -D__GNUC__"
4633a7c4 4021esac
bd9b35c9
JH
4022case "$mips_type" in
4023'');;
4024*BSD*) cppflags="$cppflags -DSYSTYPE_BSD43";;
4025esac
4026case "$cppflags" in
4027'');;
4028*)
4029 echo " "
4030 echo "Let me guess what the preprocessor flags are..." >&4
4031 set X $cppflags
4032 shift
4033 cppflags=''
4034 $cat >cpp.c <<'EOM'
4035#define BLURFL foo
8e07c86e 4036
bd9b35c9
JH
4037BLURFL xx LFRULB
4038EOM
4039 previous=''
4040 for flag in $*
4041 do
4042 case "$flag" in
4043 -*) ftry="$flag";;
4044 *) ftry="$previous $flag";;
4045 esac
4046 if $cppstdin -DLFRULB=bar $cppflags $ftry $cppminus <cpp.c \
4047 >cpp1.out 2>/dev/null && \
4048 $cpprun -DLFRULB=bar $cppflags $ftry $cpplast <cpp.c \
4049 >cpp2.out 2>/dev/null && \
4050 $contains 'foo.*xx.*bar' cpp1.out >/dev/null 2>&1 && \
4051 $contains 'foo.*xx.*bar' cpp2.out >/dev/null 2>&1
4052 then
4053 cppflags="$cppflags $ftry"
4054 previous=''
4055 else
4056 previous="$flag"
4057 fi
4058 done
4059 set X $cppflags
4060 shift
4061 cppflags=${1+"$@"}
4062 case "$cppflags" in
4063 *-*) echo "They appear to be: $cppflags";;
4064 esac
4065 $rm -f cpp.c cpp?.out
2afac517 4066 ;;
4067esac
8e07c86e 4068
bd9b35c9
JH
4069: flags used in final linking phase
4070case "$ldflags" in
4071'') if ./venix; then
4072 dflt='-i -z'
10a23457 4073 else
bd9b35c9 4074 dflt=''
10a23457 4075 fi
bd9b35c9
JH
4076 case "$ccflags" in
4077 *-posix*) dflt="$dflt -posix" ;;
c4f23d77 4078 esac
bd9b35c9
JH
4079 ;;
4080*) dflt="$ldflags";;
4081esac
4082
4083: Try to guess additional flags to pick up local libraries.
4084for thislibdir in $libpth; do
4085 case " $loclibpth " in
4086 *" $thislibdir "*)
4087 case "$dflt " in
4088 *"-L$thislibdir "*) ;;
4089 *) dflt="$dflt -L$thislibdir" ;;
4090 esac
c4f23d77
AD
4091 ;;
4092 esac
bd9b35c9 4093done
c4f23d77 4094
bd9b35c9
JH
4095case "$dflt" in
4096'') dflt='none' ;;
4097esac
c4f23d77 4098
bd9b35c9
JH
4099$cat <<EOH
4100
4101Your C linker may need flags. For this question you should
4102include -L/whatever and any other flags used by the C linker, but you
4103should NOT include libraries like -lwhatever.
4104
4105Make sure you include the appropriate -L/path flags if your C linker
4106does not normally search all of the directories you specified above,
4107namely
4108 $libpth
4109To use no flags, specify the word "none".
4110
4111EOH
4112
4113rp="Any additional ld flags (NOT including libraries)?"
4114. ./myread
4115case "$ans" in
4116none) ldflags='';;
4117*) ldflags="$ans";;
4118esac
4119rmlist="$rmlist pdp11"
4120
4121: coherency check
4122echo " "
4123echo "Checking your choice of C compiler and flags for coherency..." >&4
4124$cat > try.c <<'EOF'
4125#include <stdio.h>
4126int main() { printf("Ok\n"); exit(0); }
4127EOF
4128set X $cc $optimize $ccflags -o try $ldflags try.c $libs
4129shift
4130$cat >try.msg <<'EOM'
4131I've tried to compile and run the following simple program:
4132
4133EOM
4134$cat try.c >> try.msg
4135
4136$cat >> try.msg <<EOM
4137
4138I used the command:
4139
4140 $*
4141 ./try
4142
4143and I got the following output:
4144
4145EOM
4146dflt=y
4147if sh -c "$cc $optimize $ccflags -o try $ldflags try.c $libs" >>try.msg 2>&1; then
4148 if sh -c './try' >>try.msg 2>&1; then
4149 xxx=`./try`
4150 case "$xxx" in
4151 "Ok") dflt=n ;;
4152 *) echo 'The program compiled OK, but produced no output.' >> try.msg
4153 case " $libs " in
4154 *" -lsfio "*)
4155 cat >> try.msg <<'EOQS'
4156If $libs contains -lsfio, and sfio is mis-configured, then it
4157sometimes (apparently) runs and exits with a 0 status, but with no
4158output! It may have to do with sfio's use of _exit vs. exit.
4159
4160EOQS
4161 rp="You have a big problem. Shall I abort Configure"
4162 dflt=y
4163 ;;
4164 esac
4165 ;;
4166 esac
4167 else
4168 echo "The program compiled OK, but exited with status $?." >>try.msg
4169 rp="You have a problem. Shall I abort Configure"
4170 dflt=y
4171 fi
4172else
4173 echo "I can't compile the test program." >>try.msg
4174 rp="You have a BIG problem. Shall I abort Configure"
4175 dflt=y
4176fi
4177case "$dflt" in
4178y)
4179 $cat try.msg >&4
4180 case "$knowitall" in
4181 '')
4182 echo "(The supplied flags or libraries might be incorrect.)"
c4f23d77 4183 ;;
bd9b35c9 4184 *) dflt=n;;
c4f23d77 4185 esac
bd9b35c9
JH
4186 echo " "
4187 . ./myread
4188 case "$ans" in
4189 n*|N*) ;;
4190 *) echo "Ok. Stopping Configure." >&4
4191 exit 1
c4f23d77
AD
4192 ;;
4193 esac
4194 ;;
bd9b35c9 4195n) echo "OK, that should do.";;
c4f23d77 4196esac
bd9b35c9 4197$rm -f try try.* core
c4f23d77 4198
bd9b35c9
JH
4199: define an is-a-typedef? function
4200typedef='type=$1; var=$2; def=$3; shift; shift; shift; inclist=$@;
4201case "$inclist" in
4202"") inclist="sys/types.h";;
4203esac;
4204eval "varval=\$$var";
4205case "$varval" in
4206"")
4207 $rm -f temp.c;
4208 for inc in $inclist; do
4209 echo "#include <$inc>" >>temp.c;
4210 done;
4211 echo "#ifdef $type" >> temp.c;
4212 echo "printf(\"We have $type\");" >> temp.c;
4213 echo "#endif" >> temp.c;
4214 $cppstdin $cppflags $cppminus < temp.c >temp.E 2>/dev/null;
4215 if $contains $type temp.E >/dev/null 2>&1; then
4216 eval "$var=\$type";
4217 else
4218 eval "$var=\$def";
4219 fi;
4220 $rm -f temp.?;;
4221*) eval "$var=\$varval";;
4222esac'
8e07c86e 4223
bd9b35c9
JH
4224: define an is-a-typedef? function that prompts if the type is not available.
4225typedef_ask='type=$1; var=$2; def=$3; shift; shift; shift; inclist=$@;
4226case "$inclist" in
4227"") inclist="sys/types.h";;
4228esac;
4229eval "varval=\$$var";
4230case "$varval" in
4231"")
4232 $rm -f temp.c;
4233 for inc in $inclist; do
4234 echo "#include <$inc>" >>temp.c;
4235 done;
4236 echo "#ifdef $type" >> temp.c;
4237 echo "printf(\"We have $type\");" >> temp.c;
4238 echo "#endif" >> temp.c;
4239 $cppstdin $cppflags $cppminus < temp.c >temp.E 2>/dev/null;
4240 echo " " ;
4241 echo "$rp" | $sed -e "s/What is/Looking for/" -e "s/?/./";
4242 if $contains $type temp.E >/dev/null 2>&1; then
4243 echo "$type found." >&4;
4244 eval "$var=\$type";
4245 else
4246 echo "$type NOT found." >&4;
4247 dflt="$def";
4248 . ./myread ;
4249 eval "$var=\$ans";
4250 fi;
4251 $rm -f temp.?;;
4252*) eval "$var=\$varval";;
4253esac'
8e07c86e 4254
bd9b35c9
JH
4255: define a shorthand compile call
4256compile='
4257mc_file=$1;
4258shift;
4259$cc $optimize $ccflags $ldflags -o ${mc_file} $* ${mc_file}.c $libs > /dev/null 2>&1;'
4260: define a shorthand compile call for compilations that should be ok.
4261compile_ok='
4262mc_file=$1;
4263shift;
4264$cc $optimize $ccflags $ldflags -o ${mc_file} $* ${mc_file}.c $libs;'
8e07c86e 4265
bd9b35c9
JH
4266: check for lengths of integral types
4267echo " "
4268case "$intsize" in
2afac517 4269'')
bd9b35c9
JH
4270 echo "Checking to see how big your integers are..." >&4
4271 $cat >intsize.c <<'EOCP'
4272#include <stdio.h>
4273int main()
4274{
4275 printf("intsize=%d;\n", (int)sizeof(int));
4276 printf("longsize=%d;\n", (int)sizeof(long));
4277 printf("shortsize=%d;\n", (int)sizeof(short));
4278 exit(0);
4279}
4280EOCP
4281 set intsize
4282 if eval $compile_ok && ./intsize > /dev/null; then
4283 eval `./intsize`
4284 echo "Your integers are $intsize bytes long."
4285 echo "Your long integers are $longsize bytes long."
4286 echo "Your short integers are $shortsize bytes long."
2afac517 4287 else
bd9b35c9
JH
4288 $cat >&4 <<EOM
4289!
4290Help! I can't compile and run the intsize test program: please enlighten me!
4291(This is probably a misconfiguration in your system or libraries, and
4292you really ought to fix it. Still, I'll try anyway.)
4293!
4294EOM
4295 dflt=4
4296 rp="What is the size of an integer (in bytes)?"
4297 . ./myread
4298 intsize="$ans"
4299 dflt=$intsize
4300 rp="What is the size of a long integer (in bytes)?"
4301 . ./myread
4302 longsize="$ans"
4303 dflt=2
4304 rp="What is the size of a short integer (in bytes)?"
4305 . ./myread
4306 shortsize="$ans"
2afac517 4307 fi
4308 ;;
8e07c86e 4309esac
bd9b35c9
JH
4310$rm -f intsize intsize.*
4311
4312: see what type lseek is declared as in the kernel
4313rp="What is the type used for lseek's offset on this system?"
4314set off_t lseektype long stdio.h sys/types.h
4315eval $typedef_ask
4316
4317echo " "
49c10eea 4318echo "Checking to see how big your file offsets are..." >&4
bd9b35c9
JH
4319$cat >try.c <<EOCP
4320#include <sys/types.h>
4321#include <stdio.h>
4322int main()
4323{
4324 printf("%d\n", (int)sizeof($lseektype));
4325 return(0);
4326}
4327EOCP
4328set try
4329if eval $compile_ok; then
4330 lseeksize=`./try`
49c10eea 4331 echo "Your file offsets are $lseeksize bytes long."
bd9b35c9
JH
4332else
4333 dflt=$longsize
4334 echo " "
4335 echo "(I can't seem to compile the test program. Guessing...)"
4336 rp="What is the size of your file offsets (in bytes)?"
4337 . ./myread
4338 lseeksize="$ans"
4339fi
4340$rm -f try.c try
4341
4342: see what type file positions are declared as in the library
4343rp="What is the type for file position used by fsetpos()?"
4344set fpos_t fpostype long stdio.h sys/types.h
4345eval $typedef_ask
4346
4347echo " "
4348case "$fpostype" in
4349*_t) zzz="$fpostype" ;;
4350*) zzz="fpos_t" ;;
4351esac
49c10eea 4352echo "Checking the size of $zzz..." >&4
bd9b35c9
JH
4353cat > try.c <<EOCP
4354#include <sys/types.h>
4355#include <stdio.h>
4356int main() {
4357 printf("%d\n", (int)sizeof($fpostype));
4358 exit(0);
4359}
4360EOCP
4361set try
4362if eval $compile_ok; then
4363 yyy=`./try`
4364 case "$yyy" in
4365 '') fpossize=4
bd9b35c9
JH
4366 echo "(I can't execute the test program--guessing $fpossize.)" >&4
4367 ;;
4368 *) fpossize=$yyy
c890dc6c 4369 echo "Your $zzz is $fpossize bytes long."
bd9b35c9
JH
4370 ;;
4371 esac
4372else
4373 dflt="$longsize"
68435ea7 4374 echo " " >&4
bd9b35c9
JH
4375 echo "(I can't compile the test program. Guessing...)" >&4
4376 rp="What is the size of your file positions (in bytes)?"
4377 . ./myread
4378 fpossize="$ans"
4379fi
4380
4381
8e07c86e 4382
10cc9d2a
JH
4383# Backward compatibility (uselfs is deprecated).
4384case "$uselfs" in
4385"$define"|true|[yY]*)
4386 cat <<EOM >&4
4387
4388*** Configure -Duselfs is deprecated, using -Duselargefiles instead.
10cc9d2a
JH
4389EOM
4390 uselargefiles="$define"
4391 ;;
4392esac
4393
bd9b35c9
JH
4394case "$lseeksize:$fpossize" in
43958:8) cat <<EOM
8e07c86e 4396
bd9b35c9 4397You can have files larger than 2 gigabytes.
8e07c86e 4398EOM
bd9b35c9 4399 val="$define" ;;
0f0995ae
JH
4400*) case "$uselargefiles" in
4401 "$undef"|false|[nN]*) dflt='n' ;;
4402 *) dflt='y' ;;
4403 esac
4404 cat <<EOM
8e07c86e 4405
bd9b35c9 4406Perl can be built to understand large files (files larger than 2 gigabytes)
0f0995ae 4407on some systems. To do so, Configure can be run with -Duselargefiles.
bd9b35c9 4408
0f0995ae 4409If this doesn't make any sense to you, just accept the default '$dflt'.
bd9b35c9 4410EOM
bd9b35c9
JH
4411 rp='Try to understand large files, if available?'
4412 . ./myread
4413 case "$ans" in
4414 y|Y) val="$define" ;;
4415 *) val="$undef" ;;
4416 esac
4417 ;;
dfe9444c 4418esac
bd9b35c9
JH
4419set uselargefiles
4420eval $setvar
4421case "$uselargefiles" in
4422"$define")
4423: Look for a hint-file generated 'call-back-unit'. If the
4424: user has specified that a large files perl is to be built,
4425: we may need to set or change some other defaults.
8a647129 4426 if $test -f uselargefiles.cbu; then
bd9b35c9 4427 echo "Your platform has some specific hints for large file builds, using them..."
8a647129 4428 . ./uselargefiles.cbu
bd9b35c9 4429 echo " "
49c10eea 4430 echo "Rechecking to see how big your file offsets are..." >&4
bd9b35c9
JH
4431 $cat >try.c <<EOCP
4432#include <sys/types.h>
4433#include <stdio.h>
4434int main()
4435{
4436 printf("%d\n", (int)sizeof($lseektype));
4437 return(0);
4438}
4439EOCP
4440 set try
4441 if eval $compile_ok; then
4442 lseeksize=`./try`
49c10eea 4443 $echo "Your file offsets are now $lseeksize bytes long."
bd9b35c9
JH
4444 else
4445 dflt="$lseeksize"
4446 echo " "
4447 echo "(I can't seem to compile the test program. Guessing...)"
4448 rp="What is the size of your file offsets (in bytes)?"
4449 . ./myread
4450 lseeksize="$ans"
4451 fi
4452 case "$fpostype" in
4453 *_t) zzz="$fpostype" ;;
4454 *) zzz="fpos_t" ;;
4455 esac
4456 $echo $n "Rechecking the size of $zzz...$c" >&4
4457 $cat > try.c <<EOCP
4458#include <sys/types.h>
4459#include <stdio.h>
4460int main() {
4461 printf("%d\n", (int)sizeof($fpostype));
4462 exit(0);
4463}
4464EOCP
4465 set try
4466 if eval $compile_ok; then
4467 yyy=`./try`
4468 dflt="$lseeksize"
4469 case "$yyy" in
4470 '') echo " "
4471 echo "(I can't execute the test program--guessing $fpossize.)" >&4
4472 ;;
4473 *) fpossize=$yyy
49c10eea 4474 echo " $fpossize bytes." >&4
bd9b35c9
JH
4475 ;;
4476 esac
4477 else
4478 dflt="$fpossize"
4479 echo " "
4480 echo "(I can't compile the test program. Guessing...)" >&4
4481 rp="What is the size of your file positions (in bytes)?"
4482 . ./myread
4483 fpossize="$ans"
4484 fi
4485 $rm -f try.c try
4486 fi
dfe9444c
AD
4487 ;;
4488esac
bd9b35c9
JH
4489
4490
4491case "$usemorebits" in
4492"$define"|true|[yY]*)
10cc9d2a 4493 use64bitint="$define"
bd9b35c9
JH
4494 uselongdouble="$define"
4495 usemorebits="$define"
dfe9444c 4496 ;;
bd9b35c9 4497*) usemorebits="$undef"
dfe9444c
AD
4498 ;;
4499esac
dfe9444c 4500
dfe9444c 4501
49c10eea
JH
4502case "$uselonglong" in
4503"$define"|true|[yY]*)
4504 cat <<EOM >&4
4505
10cc9d2a 4506*** Configure -Duselonglong is deprecated, using -Duse64bitint instead.
10cc9d2a
JH
4507EOM
4508 use64bitint="$define"
4509 ;;
4510esac
10cc9d2a
JH
4511case "$use64bits" in
4512"$define"|true|[yY]*)
4513 cat <<EOM >&4
4514
4515*** Configure -Duse64bits is deprecated, using -Duse64bitint instead.
49c10eea 4516EOM
10cc9d2a 4517 use64bitint="$define"
49c10eea
JH
4518 ;;
4519esac
10cc9d2a
JH
4520case "$use64bitints" in
4521"$define"|true|[yY]*)
4522 cat <<EOM >&4
4523
4524*** There is no Configure -Duse64bitints, using -Duse64bitint instead.
10cc9d2a
JH
4525EOM
4526 use64bitint="$define"
4527 ;;
4528esac
3141530c
JH
4529case "$use64bitsint" in
4530"$define"|true|[yY]*)
4531 cat <<EOM >&4
4532
4533*** There is no Configure -Duse64bitsint, using -Duse64bitint instead.
4534EOM
4535 use64bitint="$define"
4536 ;;
4537esac
4538case "$uselonglongs" in
4539"$define"|true|[yY]*)
4540 cat <<EOM >&4
4541
4542*** There is no Configure -Duselonglongs, using -Duse64bitint instead.
4543EOM
4544 use64bitint="$define"
4545 ;;
4546esac
a1b03cdf
JH
4547case "$use64bitsall" in
4548"$define"|true|[yY]*)
4549 cat <<EOM >&4
4550
4551*** There is no Configure -Duse64bitsall, using -Duse64bitall instead.
4552EOM
4553 use64bitall="$define"
4554 ;;
4555esac
10cc9d2a 4556
49c10eea 4557case "$ccflags" in
10cc9d2a 4558*-DUSE_LONG_LONG*|*-DUSE_64_BIT_INT*|*-DUSE_64_BIT_ALL*) use64bitint="$define";;
49c10eea 4559esac
10cc9d2a
JH
4560case "$use64bitall" in
4561"$define"|true|[yY]*) use64bitint="$define" ;;
49c10eea
JH
4562esac
4563
4564case "$longsize" in
45658) cat <<EOM
4566
4567You have natively 64-bit long integers.
bd9b35c9 4568EOM
ad551343
JH
4569 val="$define"
4570 ;;
10cc9d2a 4571*) case "$use64bitint" in
49c10eea 4572 "$define"|true|[yY]*) dflt='y';;
ad551343
JH
4573 *) dflt='n';;
4574 esac
49c10eea 4575 cat <<EOM
29209bc5 4576
bd9b35c9 4577Perl can be built to take advantage of 64-bit integer types
10cc9d2a 4578on some systems. To do so, Configure can be run with -Duse64bitint.
49c10eea 4579Choosing this option will most probably introduce binary incompatibilities.
29209bc5 4580
ad551343 4581If this doesn't make any sense to you, just accept the default '$dflt'.
29209bc5 4582EOM
ad551343
JH
4583 rp='Try to use 64-bit integers, if available?'
4584 . ./myread
4585 case "$ans" in
4586 [yY]*) val="$define" ;;
4587 *) val="$undef" ;;
4588 esac
4589 ;;
29209bc5 4590esac
10cc9d2a 4591set use64bitint
29209bc5
JH
4592eval $setvar
4593
1acc7ade
JH
4594case "$use64bitall" in
4595"$define"|true|[yY]*) dflt='y' ;;
4596*) case "$longsize" in
4597 8) dflt='y' ;;
4598 *) dflt='n' ;;
4599 esac
4600 ;;
4601esac
843b3b0e
JH
4602cat <<EOM
4603
4604You may also choose to try maximal 64-bitness. It means using as much
460564-bitness as possible on the platform. This in turn means even more
4606binary incompatibilities. On the other hand, your platform may not
4607have any more 64-bitness available than what you already have chosen.
4608
4609If this doesn't make any sense to you, just accept the default '$dflt'.
4610EOM
4611rp='Try to use maximal 64-bit support, if available?'
4612. ./myread
4613case "$ans" in
4614[yY]*) val="$define" ;;
4615*) val="$undef" ;;
4616esac
10cc9d2a 4617set use64bitall
49c10eea 4618eval $setvar
843b3b0e
JH
4619case "$use64bitall" in
4620"$define")
4621 case "$use64bitint" in
4622 "$undef")
4623 cat <<EOM
4624
4625Since you have chosen a maximally 64-bit build, I'm also turning on
4626the use of 64-bit integers.
4627EOM
4628 use64bitint="$define" ;;
4629 esac
4630 ;;
4631esac
bd9b35c9 4632
10cc9d2a 4633case "$use64bitint" in
bd9b35c9
JH
4634"$define"|true|[yY]*)
4635: Look for a hint-file generated 'call-back-unit'. If the
4636: user has specified that a 64-bit perl is to be built,
4637: we may need to set or change some other defaults.
10cc9d2a 4638 if $test -f use64bitint.cbu; then
e5788f28 4639 echo "Your platform has some specific hints for 64-bit integers, using them..."
10cc9d2a 4640 . ./use64bitint.cbu
bd9b35c9 4641 fi
49c10eea 4642 case "$longsize" in
701a9a05 4643 4) case "$archname64" in
10cc9d2a 4644 '') archname64=64int ;;
49c10eea
JH
4645 esac
4646 ;;
4647 esac
4648 ;;
4649esac
4650
10cc9d2a 4651case "$use64bitall" in
49c10eea
JH
4652"$define"|true|[yY]*)
4653: Look for a hint-file generated 'call-back-unit'. If the
843b3b0e 4654: user has specified that a maximally 64-bit perl is to be built,
49c10eea 4655: we may need to set or change some other defaults.
10cc9d2a 4656 if $test -f use64bitall.cbu; then
843b3b0e 4657 echo "Your platform has some specific hints for 64-bit builds, using them..."
10cc9d2a 4658 . ./use64bitall.cbu
49c10eea
JH
4659 fi
4660 case "$longsize" in
c6861c9d 4661 4) case "$archname64" in
bab3591f 4662 ''|64int) archname64=64all ;;
49c10eea
JH
4663 esac
4664 ;;
4665 esac
bd9b35c9
JH
4666 ;;
4667esac
4668
4669: determine the architecture name
2afac517 4670echo " "
bd9b35c9
JH
4671if xxx=`./loc arch blurfl $pth`; $test -f "$xxx"; then
4672 tarch=`arch`"-$osname"
4673elif xxx=`./loc uname blurfl $pth`; $test -f "$xxx" ; then
4674 if uname -m > tmparch 2>&1 ; then
4675 tarch=`$sed -e 's/ *$//' -e 's/ /_/g' \
4676 -e 's/$/'"-$osname/" tmparch`
4677 else
4678 tarch="$osname"
4679 fi
4680 $rm -f tmparch
4681else
4682 tarch="$osname"
4683fi
4684case "$myarchname" in
4685''|"$tarch") ;;
4686*)
4687 echo "(Your architecture name used to be $myarchname.)"
4688 archname=''
4689 ;;
8e07c86e 4690esac
bd9b35c9
JH
4691myarchname="$tarch"
4692case "$archname" in
4693'') dflt="$tarch";;
4694*) dflt="$archname";;
2afac517 4695esac
bd9b35c9
JH
4696rp='What is your architecture name'
4697. ./myread
4698archname="$ans"
4699case "$usethreads" in
29209bc5 4700$define)
bd9b35c9
JH
4701 echo "Threads selected." >&4
4702 case "$archname" in
4703 *-thread*) echo "...and architecture name already has -thread." >&4
4704 ;;
4705 *) archname="$archname-thread"
4706 echo "...setting architecture name to $archname." >&4
4707 ;;
4708 esac
29209bc5
JH
4709 ;;
4710esac
bd9b35c9
JH
4711case "$usemultiplicity" in
4712$define)
4713 echo "Multiplicity selected." >&4
4714 case "$archname" in
4715 *-multi*) echo "...and architecture name already has -multi." >&4
4716 ;;
4717 *) archname="$archname-multi"
4718 echo "...setting architecture name to $archname." >&4
4719 ;;
4720 esac
4721 ;;
4722esac
10cc9d2a 4723case "$use64bitint" in
bd9b35c9
JH
4724$define)
4725 case "$archname64" in
4726 '')
4727 ;;
4728 *)
4729 case "$archname" in
4730 *-$archname64*) echo "...and architecture name already has $archname64." >&4
4731 ;;
4732 *) archname="$archname-$archname64"
4733 echo "...setting architecture name to $archname." >&4
4734 ;;
4735 esac
4736 ;;
4737 esac
4738esac
4739
4740: determine root of directory hierarchy where package will be installed.
4741case "$prefix" in
4742'')
4743 dflt=`./loc . /usr/local /usr/local /local /opt /usr`
4744 ;;
4745*)
4746 dflt="$prefix"
4747 ;;
4748esac
4749$cat <<EOM
4750
4751By default, $package will be installed in $dflt/bin, manual pages
4752under $dflt/man, etc..., i.e. with $dflt as prefix for all
4753installation directories. Typically this is something like /usr/local.
4754If you wish to have binaries under /usr/bin but other parts of the
4755installation under /usr/local, that's ok: you will be prompted
4756separately for each of the installation directories, the prefix being
4757only used to set the defaults.
4758
4759EOM
4760fn=d~
4761rp='Installation prefix to use?'
4762. ./getfile
4763oldprefix=''
4764case "$prefix" in
4765'') ;;
4766*)
4767 case "$ans" in
4768 "$prefix") ;;
4769 *) oldprefix="$prefix";;
4770 esac
4771 ;;
4772esac
4773prefix="$ans"
4774prefixexp="$ansexp"
4775
4776: is AFS running?
4777echo " "
4778case "$afs" in
4779$define|true) afs=true ;;
4780$undef|false) afs=false ;;
4781*) if test -d /afs; then
4782 afs=true
2afac517 4783 else
bd9b35c9 4784 afs=false
2afac517 4785 fi
bd9b35c9 4786 ;;
8e07c86e 4787esac
bd9b35c9
JH
4788if $afs; then
4789 echo "AFS may be running... I'll be extra cautious then..." >&4
4790else
4791 echo "AFS does not seem to be running..." >&4
4792fi
2afac517 4793
bd9b35c9
JH
4794: determine installation prefix for where package is to be installed.
4795if $afs; then
4633a7c4 4796$cat <<EOM
29209bc5 4797
bd9b35c9
JH
4798Since you are running AFS, I need to distinguish the directory in which
4799files will reside from the directory in which they are installed (and from
4800which they are presumably copied to the former directory by occult means).
4801
4633a7c4 4802EOM
bd9b35c9
JH
4803 case "$installprefix" in
4804 '') dflt=`echo $prefix | sed 's#^/afs/#/afs/.#'`;;
4805 *) dflt="$installprefix";;
4806 esac
4807else
4808$cat <<EOM
2afac517 4809
bd9b35c9
JH
4810In some special cases, particularly when building $package for distribution,
4811it is convenient to distinguish between the directory in which files should
4812be installed from the directory ($prefix) in which they
4813will eventually reside. For most users, these two directories are the same.
8e07c86e 4814
bd9b35c9
JH
4815EOM
4816 case "$installprefix" in
4817 '') dflt=$prefix ;;
4818 *) dflt=$installprefix;;
4819 esac
4820fi
4821fn=d~
4822rp='What installation prefix should I use for installing files?'
4823. ./getfile
4824installprefix="$ans"
4825installprefixexp="$ansexp"
4633a7c4 4826
bd9b35c9
JH
4827: set the prefixit variable, to compute a suitable default value
4828prefixit='case "$3" in
4829""|none)
4830 case "$oldprefix" in
4831 "") eval "$1=\"\$$2\"";;
4832 *)
4833 case "$3" in
4834 "") eval "$1=";;
4835 none)
4836 eval "tp=\"\$$2\"";
4837 case "$tp" in
4838 ""|" ") eval "$1=\"\$$2\"";;
4839 *) eval "$1=";;
4840 esac;;
4841 esac;;
4842 esac;;
4843*)
4844 eval "tp=\"$oldprefix-\$$2-\""; eval "tp=\"$tp\"";
4845 case "$tp" in
4846 --|/*--|\~*--) eval "$1=\"$prefix/$3\"";;
4847 /*-$oldprefix/*|\~*-$oldprefix/*)
4848 eval "$1=\`echo \$$2 | sed \"s,^$oldprefix,$prefix,\"\`";;
4849 *) eval "$1=\"\$$2\"";;
4850 esac;;
4851esac'
4633a7c4 4852
ff935051
JH
4853
4854: get the patchlevel
bd9b35c9
JH
4855echo " "
4856echo "Getting the current patchlevel..." >&4
4857if $test -r $rsrc/patchlevel.h;then
49c10eea 4858 revision=`awk '/define[ ]+PERL_REVISION/ {print $3}' $rsrc/patchlevel.h`
bd9b35c9
JH
4859 patchlevel=`awk '/define[ ]+PERL_VERSION/ {print $3}' $rsrc/patchlevel.h`
4860 subversion=`awk '/define[ ]+PERL_SUBVERSION/ {print $3}' $rsrc/patchlevel.h`
ff935051
JH
4861 api_revision=`awk '/define[ ]+PERL_API_REVISION/ {print $3}' $rsrc/patchlevel.h`
4862 api_version=`awk '/define[ ]+PERL_API_VERSION/ {print $3}' $rsrc/patchlevel.h`
4863 api_subversion=`awk '/define[ ]+PERL_API_SUBVERSION/ {print $3}' $rsrc/patchlevel.h`
bd9b35c9 4864else
49c10eea 4865 revision=0
bd9b35c9
JH
4866 patchlevel=0
4867 subversion=0
ff935051
JH
4868 api_revision=0
4869 api_version=0
4870 api_subversion=0
bd9b35c9 4871fi
49c10eea 4872$echo $n "(You have $package revision $revision" $c
bd9b35c9
JH
4873$echo $n " patchlevel $patchlevel" $c
4874test 0 -eq "$subversion" || $echo $n " subversion $subversion" $c
4875echo ".)"
ff935051 4876case "$osname" in
3645a519 4877dos|vms)
ff935051 4878 : XXX Should be a Configure test for double-dots in filenames.
49c10eea 4879 version=`echo $revision $patchlevel $subversion | \
273cf8d1 4880 $awk '{ printf "%d_%d_%d\n", $1, $2, $3 }'`
ff935051
JH
4881 api_versionstring=`echo $api_revision $api_version $api_subversion | \
4882 $awk '{ printf "%d_%d_%d\n", $1, $2, $3 }'`
4883 ;;
4884*)
49c10eea 4885 version=`echo $revision $patchlevel $subversion | \
ff935051
JH
4886 $awk '{ printf "%d.%d.%d\n", $1, $2, $3 }'`
4887 api_versionstring=`echo $api_revision $api_version $api_subversion | \
273cf8d1 4888 $awk '{ printf "%d.%d.%d\n", $1, $2, $3 }'`
ff935051
JH
4889 ;;
4890esac
4891: Special case the 5.005_xx maintenance series, which used 5.005
4892: without any subversion label as a subdirectory in $sitelib
4893if test "${api_revision}${api_version}${api_subversion}" = "550"; then
4894 api_versionstring='5.005'
273cf8d1 4895fi
bd9b35c9
JH
4896
4897: determine installation style
4898: For now, try to deduce it from prefix unless it is already set.
4899: Reproduce behavior of 5.005 and earlier, maybe drop that in 5.7.
4900case "$installstyle" in
4901'') case "$prefix" in
4902 *perl*) dflt='lib';;
4903 *) dflt='lib/perl5' ;;
34d1710f 4904 esac
4633a7c4 4905 ;;
d6c8a45d 4906*) dflt="$installstyle" ;;
4633a7c4 4907esac
bd9b35c9
JH
4908: Probably not worth prompting for this since we prompt for all
4909: the directories individually, and the prompt would be too long and
4910: confusing anyway.
4911installstyle=$dflt
4633a7c4 4912
bd9b35c9
JH
4913: determine where private library files go
4914: Usual default is /usr/local/lib/perl5/$version.
4915: Also allow things like /opt/perl/lib/$version, since
4916: /opt/perl/lib/perl5... would be redundant.
4917: The default "style" setting is made in installstyle.U
4918case "$installstyle" in
4919*lib/perl5*) set dflt privlib lib/$package/$version ;;
4920*) set dflt privlib lib/$version ;;
a4f3eea9 4921esac
bd9b35c9
JH
4922eval $prefixit
4923$cat <<EOM
a4f3eea9 4924
bd9b35c9
JH
4925There are some auxiliary files for $package that need to be put into a
4926private library directory that is accessible by everyone.
4927
4928EOM
4929fn=d~+
4930rp='Pathname where the private library files will reside?'
4931. ./getfile
4932privlib="$ans"
4933privlibexp="$ansexp"
4934: Change installation prefix, if necessary.
4935if $test X"$prefix" != X"$installprefix"; then
4936 installprivlib=`echo $privlibexp | sed "s#^$prefix#$installprefix#"`
a4f3eea9 4937else
bd9b35c9
JH
4938 installprivlib="$privlibexp"
4939fi
a4f3eea9 4940
bd9b35c9
JH
4941: set the prefixup variable, to restore leading tilda escape
4942prefixup='case "$prefixexp" in
4943"$prefix") ;;
4944*) eval "$1=\`echo \$$1 | sed \"s,^$prefixexp,$prefix,\"\`";;
4945esac'
a4f3eea9 4946
bd9b35c9
JH
4947: determine where public architecture dependent libraries go
4948set archlib archlib
4949eval $prefixit
4950: privlib default is /usr/local/lib/$package/$version
4951: archlib default is /usr/local/lib/$package/$version/$archname
4952: privlib may have an optional trailing /share.
4953tdflt=`echo $privlib | $sed 's,/share$,,'`
4954tdflt=$tdflt/$archname
4955case "$archlib" in
4956'') dflt=$tdflt
29209bc5 4957 ;;
bd9b35c9
JH
4958*) dflt="$archlib"
4959 ;;
29209bc5 4960esac
bd9b35c9 4961$cat <<EOM
29209bc5 4962
bd9b35c9
JH
4963$spackage contains architecture-dependent library files. If you are
4964sharing libraries in a heterogeneous environment, you might store
4965these files in a separate location. Otherwise, you can just include
4966them with the rest of the public library files.
a4f3eea9 4967
bd9b35c9
JH
4968EOM
4969fn=d+~
4970rp='Where do you want to put the public architecture-dependent libraries?'
4971. ./getfile
4972archlib="$ans"
4973archlibexp="$ansexp"
4974if $test X"$archlib" = X"$privlib"; then
4975 d_archlib="$undef"
4976else
4977 d_archlib="$define"
4978fi
4979: Change installation prefix, if necessary.
4980if $test X"$prefix" != X"$installprefix"; then
4981 installarchlib=`echo $archlibexp | sed "s#^$prefix#$installprefix#"`
4982else
4983 installarchlib="$archlibexp"
4984fi
a4f3eea9 4985
a4f3eea9 4986
bd9b35c9
JH
4987: Binary compatibility with 5.005 is not possible for builds
4988: with advanced features
4989case "$usethreads$usemultiplicity" in
4990*define*)
4991 bincompat5005="$undef"
4992 d_bincompat5005="$undef"
4993 ;;
4994*) $cat <<EOM
a4f3eea9 4995
ee3551f5
GS
4996This version of Perl can be compiled for binary compatibility with 5.005.
4997If you decide to do so, you will be able to continue using most of the
4998extensions that were compiled for Perl 5.005.
a4f3eea9 4999
a4f3eea9 5000EOM
bd9b35c9
JH
5001 case "$bincompat5005$d_bincompat5005" in
5002 *"$undef"*) dflt=n ;;
5003 *) dflt=y ;;
a4f3eea9 5004 esac
bd9b35c9
JH
5005 rp='Binary compatibility with Perl 5.005?'
5006 . ./myread
5007 case "$ans" in
5008 y*) val="$define" ;;
5009 *) val="$undef" ;;
a4f3eea9 5010 esac
bd9b35c9
JH
5011 set d_bincompat5005
5012 eval $setvar
5013 case "$d_bincompat5005" in
5014 "$define")
5015 bincompat5005="$define"
5016 ;;
5017 *) bincompat5005="$undef"
5018 d_bincompat5005="$undef"
a4f3eea9 5019 ;;
5020 esac
bd9b35c9 5021 ;;
a4f3eea9 5022esac
5023
a4f3eea9 5024
bd9b35c9
JH
5025: see if setuid scripts can be secure
5026$cat <<EOM
a4f3eea9 5027
bd9b35c9
JH
5028Some kernels have a bug that prevents setuid #! scripts from being
5029secure. Some sites have disabled setuid #! scripts because of this.
a4f3eea9 5030
bd9b35c9
JH
5031First let's decide if your kernel supports secure setuid #! scripts.
5032(If setuid #! scripts would be secure but have been disabled anyway,
5033don't say that they are secure if asked.)
5ff3f7a4
GS
5034
5035EOM
a4f3eea9 5036
bd9b35c9
JH
5037val="$undef"
5038if $test -d /dev/fd; then
5039 echo "#!$ls" >reflect
5040 chmod +x,u+s reflect
5041 ./reflect >flect 2>&1
5042 if $contains "/dev/fd" flect >/dev/null; then
5043 echo "Congratulations, your kernel has secure setuid scripts!" >&4
5044 val="$define"
5045 else
5046 $cat <<EOM
5047If you are not sure if they are secure, I can check but I'll need a
5048username and password different from the one you are using right now.
5049If you don't have such a username or don't want me to test, simply
5050enter 'none'.
a4f3eea9 5051
5052EOM
bd9b35c9
JH
5053 rp='Other username to test security of setuid scripts with?'
5054 dflt='none'
5055 . ./myread
5056 case "$ans" in
5057 n|none)
5058 case "$d_suidsafe" in
5059 '') echo "I'll assume setuid scripts are *not* secure." >&4
5060 dflt=n;;
5061 "$undef")
5062 echo "Well, the $hint value is *not* secure." >&4
5063 dflt=n;;
5064 *) echo "Well, the $hint value *is* secure." >&4
5065 dflt=y;;
dfe9444c
AD
5066 esac
5067 ;;
bd9b35c9
JH
5068 *)
5069 $rm -f reflect flect
5070 echo "#!$ls" >reflect
5071 chmod +x,u+s reflect
5072 echo >flect
5073 chmod a+w flect
5074 echo '"su" will (probably) prompt you for '"$ans's password."
5075 su $ans -c './reflect >flect'
5076 if $contains "/dev/fd" flect >/dev/null; then
5077 echo "Okay, it looks like setuid scripts are secure." >&4
5078 dflt=y
5079 else
5080 echo "I don't think setuid scripts are secure." >&4
5081 dflt=n
5082 fi
5083 ;;
5084 esac
5085 rp='Does your kernel have *secure* setuid scripts?'
5086 . ./myread
5087 case "$ans" in
5088 [yY]*) val="$define";;
5089 *) val="$undef";;
dfe9444c 5090 esac
a4f3eea9 5091 fi
5092else
bd9b35c9
JH
5093 echo "I don't think setuid scripts are secure (no /dev/fd directory)." >&4
5094 echo "(That's for file descriptors, not floppy disks.)"
5095 val="$undef"
a4f3eea9 5096fi
bd9b35c9
JH
5097set d_suidsafe
5098eval $setvar
5099
5100$rm -f reflect flect
5101
5102: now see if they want to do setuid emulation
5103echo " "
5104val="$undef"
5105case "$d_suidsafe" in
5106"$define")
5107 val="$undef"
5108 echo "No need to emulate SUID scripts since they are secure here." >& 4
5109 ;;
5110*)
5111 $cat <<EOM
5112Some systems have disabled setuid scripts, especially systems where
5113setuid scripts cannot be secure. On systems where setuid scripts have
5114been disabled, the setuid/setgid bits on scripts are currently
5115useless. It is possible for $package to detect those bits and emulate
5116setuid/setgid in a secure fashion. This emulation will only work if
5117setuid scripts have been disabled in your kernel.
5118
5119EOM
5120 case "$d_dosuid" in
5121 "$define") dflt=y ;;
5122 *) dflt=n ;;
a4f3eea9 5123 esac
bd9b35c9 5124 rp="Do you want to do setuid/setgid emulation?"
a4f3eea9 5125 . ./myread
5126 case "$ans" in
bd9b35c9
JH
5127 [yY]*) val="$define";;
5128 *) val="$undef";;
a4f3eea9 5129 esac
5130 ;;
a4f3eea9 5131esac
bd9b35c9
JH
5132set d_dosuid
5133eval $setvar
a4f3eea9 5134
bfb7748a
AD
5135: determine filename position in cpp output
5136echo " "
5137echo "Computing filename position in cpp output for #include directives..." >&4
5138echo '#include <stdio.h>' > foo.c
5139$cat >fieldn <<EOF
5140$startsh
5141$cppstdin $cppflags $cppminus <foo.c 2>/dev/null | \
5142$grep '^[ ]*#.*stdio\.h' | \
5143while read cline; do
5144 pos=1
5145 set \$cline
5146 while $test \$# -gt 0; do
5147 if $test -r \`echo \$1 | $tr -d '"'\`; then
5148 echo "\$pos"
5149 exit 0
5150 fi
5151 shift
5152 pos=\`expr \$pos + 1\`
5153 done
5154done
5155EOF
5156chmod +x fieldn
5157fieldn=`./fieldn`
5158$rm -f foo.c fieldn
5159case $fieldn in
5160'') pos='???';;
51611) pos=first;;
51622) pos=second;;
51633) pos=third;;
5164*) pos="${fieldn}th";;
5165esac
5166echo "Your cpp writes the filename in the $pos field of the line."
5167
5168: locate header file
5169$cat >findhdr <<EOF
5170$startsh
5171wanted=\$1
9cc6feab 5172name=''
3656fc86
JH
5173for usrincdir in $usrinc
5174do
5175 if test -f \$usrincdir/\$wanted; then
5176 echo "\$usrincdir/\$wanted"
5177 exit 0
5178 fi
5179done
bfb7748a
AD
5180awkprg='{ print \$$fieldn }'
5181echo "#include <\$wanted>" > foo\$\$.c
5182$cppstdin $cppminus $cppflags < foo\$\$.c 2>/dev/null | \
5183$grep "^[ ]*#.*\$wanted" | \
5184while read cline; do
5185 name=\`echo \$cline | $awk "\$awkprg" | $tr -d '"'\`
5186 case "\$name" in
4e400192
JH
5187 *[/\\\\]\$wanted) echo "\$name"; exit 1;;
5188 *[\\\\/]\$wanted) echo "\$name"; exit 1;;
5189 *) exit 2;;
bfb7748a
AD
5190 esac;
5191done;
4e400192
JH
5192#
5193# status = 0: grep returned 0 lines, case statement not executed
5194# status = 1: headerfile found
5195# status = 2: while loop executed, no headerfile found
5196#
5197status=\$?
bfb7748a 5198$rm -f foo\$\$.c;
4e400192
JH
5199if test \$status -eq 1; then
5200 exit 0;
5201fi
5202exit 1
bfb7748a
AD
5203EOF
5204chmod +x findhdr
5205
5206: define an alternate in-header-list? function
5207inhdr='echo " "; td=$define; tu=$undef; yyy=$@;
5208cont=true; xxf="echo \"<\$1> found.\" >&4";
5209case $# in 2) xxnf="echo \"<\$1> NOT found.\" >&4";;
5210*) xxnf="echo \"<\$1> NOT found, ...\" >&4";;
5211esac;
5212case $# in 4) instead=instead;; *) instead="at last";; esac;
5213while $test "$cont"; do
5214 xxx=`./findhdr $1`
5215 var=$2; eval "was=\$$2";
5216 if $test "$xxx" && $test -r "$xxx";
5217 then eval $xxf;
5218 eval "case \"\$$var\" in $undef) . ./whoa; esac"; eval "$var=\$td";
5219 cont="";
5220 else eval $xxnf;
5221 eval "case \"\$$var\" in $define) . ./whoa; esac"; eval "$var=\$tu"; fi;
5222 set $yyy; shift; shift; yyy=$@;
5223 case $# in 0) cont="";;
5224 2) xxf="echo \"but I found <\$1> $instead.\" >&4";
5225 xxnf="echo \"and I did not find <\$1> either.\" >&4";;
5226 *) xxf="echo \"but I found <\$1\> instead.\" >&4";
5227 xxnf="echo \"there is no <\$1>, ...\" >&4";;
5228 esac;
5229done;
5230while $test "$yyy";
5231do set $yyy; var=$2; eval "was=\$$2";
5232 eval "case \"\$$var\" in $define) . ./whoa; esac"; eval "$var=\$tu";
5233 set $yyy; shift; shift; yyy=$@;
5234done'
5235
5236: see if this is a malloc.h system
5237set malloc.h i_malloc
5238eval $inhdr
5239
5240: see if stdlib is available
5241set stdlib.h i_stdlib
5242eval $inhdr
5243
5244: determine which malloc to compile in
5245echo " "
5246case "$usemymalloc" in
5ff3f7a4
GS
5247''|[yY]*|true|$define) dflt='y' ;;
5248*) dflt='n' ;;
bfb7748a
AD
5249esac
5250rp="Do you wish to attempt to use the malloc that comes with $package?"
5251. ./myread
5252usemymalloc="$ans"
5253case "$ans" in
5254y*|true)
5255 usemymalloc='y'
5256 mallocsrc='malloc.c'
5257 mallocobj="malloc$_o"
5258 d_mymalloc="$define"
5259 case "$libs" in
5260 *-lmalloc*)
5261 : Remove malloc from list of libraries to use
5262 echo "Removing unneeded -lmalloc from library list" >&4
5263 set `echo X $libs | $sed -e 's/-lmalloc / /' -e 's/-lmalloc$//'`
5264 shift
5265 libs="$*"
5266 echo "libs = $libs" >&4
5267 ;;
5268 esac
5269 ;;
5270*)
5271 usemymalloc='n'
5272 mallocsrc=''
5273 mallocobj=''
5274 d_mymalloc="$undef"
5275 ;;
5276esac
5277
5278: compute the return types of malloc and free
5279echo " "
5280$cat >malloc.c <<END
5281#$i_malloc I_MALLOC
5282#$i_stdlib I_STDLIB
5283#include <stdio.h>
5284#include <sys/types.h>
5285#ifdef I_MALLOC
5286#include <malloc.h>
5287#endif
5288#ifdef I_STDLIB
5289#include <stdlib.h>
5290#endif
5291#ifdef TRY_MALLOC
5292void *malloc();
5293#endif
5294#ifdef TRY_FREE
5295void free();
5296#endif
5297END
5298case "$malloctype" in
5299'')
5300 if $cc $ccflags -c -DTRY_MALLOC malloc.c >/dev/null 2>&1; then
5301 malloctype='void *'
5302 else
5303 malloctype='char *'
5304 fi
5305 ;;
5306esac
5307echo "Your system wants malloc to return '$malloctype', it would seem." >&4
5308
5309case "$freetype" in
5310'')
5311 if $cc $ccflags -c -DTRY_FREE malloc.c >/dev/null 2>&1; then
5312 freetype='void'
5313 else
5314 freetype='int'
5315 fi
5316 ;;
5317esac
5318echo "Your system uses $freetype free(), it would seem." >&4
5319$rm -f malloc.[co]
a3635516
JH
5320$cat <<EOM
5321
7cedd6f8
JH
5322After $package is installed, you may wish to install various
5323add-on modules and utilities. Typically, these add-ons will
5324be installed under $prefix with the rest
5325of this package. However, you may wish to install such add-ons
5326elsewhere under a different prefix.
5327
5328If you do not wish to put everything under a single prefix, that's
5329ok. You will be prompted for the individual locations; this siteprefix
5330is only used to suggest the defaults.
5331
5332The default should be fine for most people.
5333
5334EOM
5335fn=d~+
5336rp='Installation prefix to use for add-on modules and utilities?'
5337: XXX Here might be another good place for an installstyle setting.
5338case "$siteprefix" in
5339'') dflt=$prefix ;;
5340*) dflt=$siteprefix ;;
5341esac
5342. ./getfile
5343: XXX Prefixit unit does not yet support siteprefix and vendorprefix
5344oldsiteprefix=''
5345case "$siteprefix" in
5346'') ;;
5347*) case "$ans" in
5348 "$prefix") ;;
5349 *) oldsiteprefix="$prefix";;
5350 esac
5351 ;;
5352esac
5353siteprefix="$ans"
5354siteprefixexp="$ansexp"
5355
5356: determine where site specific libraries go.
5357: Usual default is /usr/local/lib/perl5/site_perl/$version
5358: The default "style" setting is made in installstyle.U
5359: XXX No longer works with Prefixit stuff.
5360prog=`echo $package | $sed 's/-*[0-9.]*$//'`
5361case "$sitelib" in
5362'') case "$installstyle" in
5363 *lib/perl5*) dflt=$siteprefix/lib/$package/site_$prog/$version ;;
5364 *) dflt=$siteprefix/lib/site_$prog/$version ;;
5365 esac
5366 ;;
5367*) dflt="$sitelib"
5368 ;;
5369esac
5370$cat <<EOM
5371
5372The installation process will create a directory for
5373site-specific extensions and modules. Most users find it convenient
5374to place all site-specific files in this directory rather than in the
5375main distribution directory.
5376
5377EOM
5378fn=d~+
5379rp='Pathname for the site-specific library files?'
5380. ./getfile
5381sitelib="$ans"
5382sitelibexp="$ansexp"
5383sitelib_stem=`echo "$sitelibexp" | sed "s,/$version$,,"`
5384: Change installation prefix, if necessary.
5385if $test X"$prefix" != X"$installprefix"; then
5386 installsitelib=`echo $sitelibexp | $sed "s#^$prefix#$installprefix#"`
5387else
5388 installsitelib="$sitelibexp"
5389fi
5390
5391: determine where site specific architecture-dependent libraries go.
5392: sitelib default is /usr/local/lib/perl5/site_perl/$version
5393: sitearch default is /usr/local/lib/perl5/site_perl/$version/$archname
5394: sitelib may have an optional trailing /share.
5395case "$sitearch" in
5396'') dflt=`echo $sitelib | $sed 's,/share$,,'`
5397 dflt="$dflt/$archname"
5398 ;;
5399*) dflt="$sitearch"
5400 ;;
5401esac
5402set sitearch sitearch none
5403eval $prefixit
5404$cat <<EOM
5405
5406The installation process will also create a directory for
5407architecture-dependent site-specific extensions and modules.
5408
5409EOM
5410fn=d~+
5411rp='Pathname for the site-specific architecture-dependent library files?'
5412. ./getfile
5413sitearch="$ans"
5414sitearchexp="$ansexp"
5415: Change installation prefix, if necessary.
5416if $test X"$prefix" != X"$installprefix"; then
5417 installsitearch=`echo $sitearchexp | sed "s#^$prefix#$installprefix#"`
5418else
5419 installsitearch="$sitearchexp"
5420fi
5421
5422$cat <<EOM
5423
a3635516
JH
5424The installation process will also create a directory for
5425vendor-supplied add-ons. Vendors who supply perl with their system
5426may find it convenient to place all vendor-supplied files in this
5427directory rather than in the main distribution directory. This will
5428ease upgrades between binary-compatible maintenance versions of perl.
5429
5430Of course you may also use these directories in whatever way you see
5431fit. For example, you might use them to access modules shared over a
5432company-wide network.
5433
5434The default answer should be fine for most people.
5435This causes further questions about vendor add-ons to be skipped
5436and no vendor-specific directories will be configured for perl.
5437
5438EOM
5439rp='Do you want to configure vendor-specific add-on directories?'
5440case "$usevendorprefix" in
5441define|true|[yY]*) dflt=y ;;
49c10eea
JH
5442*) : User may have set vendorprefix directly on Configure command line.
5443 case "$vendorprefix" in
5444 ''|' ') dflt=n ;;
5445 *) dflt=y ;;
5446 esac
5447 ;;
a3635516
JH
5448esac
5449. ./myread
5450case "$ans" in
5451[yY]*) fn=d~+
5452 rp='Installation prefix to use for vendor-supplied add-ons?'
5453 case "$vendorprefix" in
5454 '') dflt='' ;;
5455 *) dflt=$vendorprefix ;;
5456 esac
5457 . ./getfile
49c10eea 5458 : XXX Prefixit unit does not yet support siteprefix and vendorprefix
a3635516
JH
5459 oldvendorprefix=''
5460 case "$vendorprefix" in
5461 '') ;;
5462 *) case "$ans" in
5463 "$prefix") ;;
5464 *) oldvendorprefix="$prefix";;
5465 esac
5466 ;;
5467 esac
5468 usevendorprefix="$define"
5469 vendorprefix="$ans"
5470 vendorprefixexp="$ansexp"
5471 ;;
5472*) usevendorprefix="$undef"
5473 vendorprefix=''
5474 vendorprefixexp=''
5475 ;;
5476esac
5477
5478case "$vendorprefix" in
5479'') d_vendorlib="$undef"
5480 vendorlib=''
5481 vendorlibexp=''
5482 ;;
5483*) d_vendorlib="$define"
5484 : determine where vendor-supplied modules go.
629ae163 5485 : Usual default is /usr/local/lib/perl5/vendor_perl/$version
49c10eea
JH
5486 case "$vendorlib" in
5487 '')
5488 prog=`echo $package | $sed 's/-*[0-9.]*$//'`
5489 case "$installstyle" in
5490 *lib/perl5*) dflt=$vendorprefix/lib/$package/vendor_$prog/$version ;;
5491 *) dflt=$vendorprefix/lib/vendor_$prog/$version ;;
5492 esac
5493 ;;
5494 *) dflt="$vendorlib"
5495 ;;
a3635516
JH
5496 esac
5497 fn=d~+
5498 rp='Pathname for the vendor-supplied library files?'
5499 . ./getfile
5500 vendorlib="$ans"
5501 vendorlibexp="$ansexp"
a3635516
JH
5502 ;;
5503esac
526fdc24 5504vendorlib_stem=`echo "$vendorlibexp" | sed "s,/$version$,,"`
49c10eea
JH
5505: Change installation prefix, if necessary.
5506if $test X"$prefix" != X"$installprefix"; then
5507 installvendorlib=`echo $vendorlibexp | $sed "s#^$prefix#$installprefix#"`
5508else
5509 installvendorlib="$vendorlibexp"
5510fi
a3635516 5511
526fdc24
MS
5512case "$vendorprefix" in
5513'') d_vendorarch="$undef"
5514 vendorarch=''
5515 vendorarchexp=''
5516 ;;
5517*) d_vendorarch="$define"
5518 : determine where vendor-supplied architecture-dependent libraries go.
5519 : vendorlib default is /usr/local/lib/perl5/vendor_perl/$version
5520 : vendorarch default is /usr/local/lib/perl5/vendor_perl/$version/$archname
5521 : vendorlib may have an optional trailing /share.
5522 case "$vendorarch" in
5523 '') dflt=`echo $vendorlib | $sed 's,/share$,,'`
5524 dflt="$dflt/$archname"
5525 ;;
5526 *) dflt="$vendorarch" ;;
5527 esac
5528 fn=d~+
5529 rp='Pathname for vendor-supplied architecture-dependent files?'
5530 . ./getfile
5531 vendorarch="$ans"
5532 vendorarchexp="$ansexp"
5533 ;;
5534esac
5535: Change installation prefix, if necessary.
5536if $test X"$prefix" != X"$installprefix"; then
5537 installvendorarch=`echo $vendorarchexp | sed "s#^$prefix#$installprefix#"`
5538else
5539 installvendorarch="$vendorarchexp"
5540fi
5541
3b777bb4
GS
5542: Final catch-all directories to search
5543$cat <<EOM
5544
5545Lastly, you can have perl look in other directories for extensions and
5546modules in addition to those already specified.
5547These directories will be searched after
5548 $sitearch
5549 $sitelib
5550EOM
5551test X"$vendorlib" != "X" && echo ' ' $vendorlib
5552test X"$vendorarch" != "X" && echo ' ' $vendorarch
5553echo ' '
5554case "$otherlibdirs" in
5555''|' ') dflt='none' ;;
5556*) dflt="$otherlibdirs" ;;
5557esac
5558$cat <<EOM
5559Enter a colon-separated set of extra paths to include in perl's @INC
5560search path, or enter 'none' for no extra paths.
5561
5562EOM
5563
5564rp='Colon-separated list of additional directories for perl to search?'
5565. ./myread
5566case "$ans" in
5567' '|''|none) otherlibdirs=' ' ;;
5568*) otherlibdirs="$ans" ;;
5569esac
5570case "$otherlibdirs" in
5571' ') val=$undef ;;
5572*) val=$define ;;
5573esac
5574set d_perl_otherlibdirs
5575eval $setvar
5576
c4f23d77
AD
5577: Cruising for prototypes
5578echo " "
5579echo "Checking out function prototypes..." >&4
5580$cat >prototype.c <<'EOCP'
5a411a32 5581int main(int argc, char *argv[]) {
c4f23d77
AD
5582 exit(0);}
5583EOCP
5584if $cc $ccflags -c prototype.c >prototype.out 2>&1 ; then
5585 echo "Your C compiler appears to support function prototypes."
5586 val="$define"
5587else
5588 echo "Your C compiler doesn't seem to understand function prototypes."
5589 val="$undef"
5590fi
5591set prototype
5592eval $setvar
5593$rm -f prototype*
5594
5595case "$prototype" in
5596"$define") ;;
5597*) ansi2knr='ansi2knr'
5598 echo " "
5599 cat <<EOM >&4
5600
5601$me: FATAL ERROR:
5602This version of $package can only be compiled by a compiler that
5603understands function prototypes. Unfortunately, your C compiler
5604 $cc $ccflags
5605doesn't seem to understand them. Sorry about that.
5606
5ff3f7a4 5607If GNU cc is available for your system, perhaps you could try that instead.
c4f23d77
AD
5608
5609Eventually, we hope to support building Perl with pre-ANSI compilers.
5610If you would like to help in that effort, please contact <perlbug@perl.org>.
5611
5612Aborting Configure now.
5613EOM
5614 exit 2
5615 ;;
5616esac
5617
5618: determine where public executables go
5619echo " "
5620set dflt bin bin
5621eval $prefixit
5622fn=d~
5623rp='Pathname where the public executables will reside?'
5624. ./getfile
5625if $test "X$ansexp" != "X$binexp"; then
5626 installbin=''
5627fi
5628bin="$ans"
5629binexp="$ansexp"
dd4e71fd
JH
5630: Change installation prefix, if necessary.
5631: XXX Bug? -- ignores Configure -Dinstallprefix setting.
5632if $test X"$prefix" != X"$installprefix"; then
ec897fb9 5633 installbin=`echo $binexp | sed "s#^$prefix#$installprefix#"`
71c4afb4
JH
5634else
5635 installbin="$binexp"
c4f23d77
AD
5636fi
5637
49c10eea
JH
5638: Find perl5.005 or later.
5639echo "Looking for a previously installed perl5.005 or later... "
5640case "$perl5" in
5641'') for tdir in `echo "$binexp:$PATH" | $sed "s/$path_sep/ /g"`; do
5642 : Check if this perl is recent and can load a simple module
5643 if $test -x $tdir/perl && $tdir/perl -Mless -e 'use 5.005;' >/dev/null 2>&1; then
5644 perl5=$tdir/perl
5645 break;
5646 elif $test -x $tdir/perl5 && $tdir/perl5 -Mless -e 'use 5.005;' >/dev/null 2>&1; then
5647 perl5=$tdir/perl
5648 break;
5649 fi
5650 done
5651 ;;
5652*) perl5="$perl5"
5653 ;;
5654esac
5655case "$perl5" in
5656'') echo "None found. That's ok.";;
5657*) echo "Using $perl5." ;;
5658esac
5659
ff935051
JH
5660: Determine list of previous versions to include in @INC
5661$cat > getverlist <<EOPL
49c10eea 5662#!$perl5 -w
ff935051
JH
5663use File::Basename;
5664\$api_versionstring = "$api_versionstring";
5665\$version = "$version";
92d29cee 5666\$stem = "$sitelib_stem";
ff935051
JH
5667\$archname = "$archname";
5668EOPL
5669 $cat >> getverlist <<'EOPL'
5670# Can't have leading @ because metaconfig interprets it as a command!
5671;@inc_version_list=();
49c10eea 5672# XXX Redo to do opendir/readdir?
ff935051
JH
5673if (-d $stem) {
5674 chdir($stem);
5675 ;@candidates = glob("5.*");
5676}
5677else {
5678 ;@candidates = ();
5679}
5680
937ac629
JH
5681# XXX ToDo: These comparisons must be reworked when two-digit
5682# subversions come along, so that 5.7.10 compares as greater than
5683# 5.7.3! By that time, hope that 5.6.x is sufficiently
5684# widespread that we can use the built-in version vectors rather
5685# than reinventing them here. For 5.6.0, however, we must
5686# assume this script will likely be run by 5.005_0x. --AD 1/2000.
ff935051
JH
5687foreach $d (@candidates) {
5688 if ($d lt $version) {
5689 if ($d ge $api_versionstring) {
9a170fb4 5690 unshift(@inc_version_list, grep { -d } "$d/$archname", $d);
ff935051
JH
5691 }
5692 elsif ($d ge "5.005") {
9a170fb4 5693 unshift(@inc_version_list, grep { -d } $d);
ff935051
JH
5694 }
5695 }
5696 else {
5697 # Skip newer version. I.e. don't look in
5698 # 5.7.0 if we're installing 5.6.1.
5699 }
5700}
5701
5702if (@inc_version_list) {
3a096bf3 5703 print join(' ', @inc_version_list);
ff935051
JH
5704}
5705else {
5706 # Blank space to preserve value for next Configure run.
5707 print " ";
5708}
5709EOPL
5710chmod +x getverlist
5711case "$inc_version_list" in
49c10eea
JH
5712'') if test -x "$perl5"; then
5713 dflt=`$perl5 getverlist`
ff935051 5714 else
3a096bf3 5715 dflt='none'
ff935051
JH
5716 fi
5717 ;;
3a096bf3 5718$undef) dflt='none' ;;
ff935051
JH
5719*) dflt="$inc_version_list" ;;
5720esac
49c10eea
JH
5721case "$dflt" in
5722''|' ') dflt=none ;;
5723esac
ff935051
JH
5724$cat <<'EOM'
5725
5726In order to ease the process of upgrading, this version of perl
5727can be configured to use modules built and installed with earlier
5728versions of perl that were installed under $prefix. Specify here
5729the list of earlier versions that this version of perl should check.
5730If Configure detected no earlier versions of perl installed under
3a096bf3
JH
5731$prefix, then the list will be empty. Answer 'none' to tell perl
5732to not search earlier versions.
ff935051
JH
5733
5734The default should almost always be sensible, so if you're not sure,
5735just accept the default.
5736EOM
5737
3a096bf3 5738rp='List of earlier versions to include in @INC?'
ff935051 5739. ./myread
3a096bf3 5740case "$ans" in
49c10eea 5741[Nn]one|''|' ') inc_version_list=' ' ;;
3a096bf3
JH
5742*) inc_version_list="$ans" ;;
5743esac
5744case "$inc_version_list" in
5745''|' ')
82aaaa3c 5746 inc_version_list_init='0';;
3a096bf3 5747*) inc_version_list_init=`echo $inc_version_list |
82aaaa3c 5748 $sed -e 's/^/"/' -e 's/ /","/g' -e 's/$/",0/'`
3a096bf3
JH
5749 ;;
5750esac
ff935051
JH
5751$rm -f getverlist
5752
104d25b7
JH
5753: determine whether to install perl also as /usr/bin/perl
5754
5755echo " "
dd4e71fd 5756if $test -d /usr/bin -a "X$installbin" != X/usr/bin; then
104d25b7 5757 $cat <<EOM
526fdc24 5758Many scripts expect perl to be installed as /usr/bin/perl.
104d25b7
JH
5759I can install the perl you are about to compile also as /usr/bin/perl
5760(in addition to $installbin/perl).
5761EOM
472a4973
JH
5762 case "$installusrbinperl" in
5763 "$undef"|[nN]*) dflt='n';;
5764 *) dflt='y';;
5765 esac
104d25b7
JH
5766 rp="Do you want to install perl as /usr/bin/perl?"
5767 . ./myread
5768 case "$ans" in
5769 [yY]*) val="$define";;
472a4973 5770 *) val="$undef" ;;
104d25b7 5771 esac
472a4973
JH
5772else
5773 val="$undef"
5774fi
104d25b7
JH
5775set installusrbinperl
5776eval $setvar
5777
a4f3eea9 5778echo " "
5779echo "Checking for GNU C Library..." >&4
5780cat >gnulibc.c <<EOM
aebf16e7 5781#include <stdio.h>
5a411a32 5782int main()
a4f3eea9 5783{
aebf16e7
AD
5784#ifdef __GLIBC__
5785 exit(0);
5786#else
5787 exit(1);
5788#endif
a4f3eea9 5789}
5790EOM
dfe9444c 5791set gnulibc
aebf16e7 5792if eval $compile_ok && ./gnulibc; then
a4f3eea9 5793 val="$define"
5794 echo "You are using the GNU C Library"
4633a7c4 5795else
a4f3eea9 5796 val="$undef"
5797 echo "You are not using the GNU C Library"
4633a7c4 5798fi
a4f3eea9 5799$rm -f gnulibc*
5800set d_gnulibc
5801eval $setvar
25f94b33 5802
a4f3eea9 5803: see if nm is to be used to determine whether a symbol is defined or not
5804case "$usenm" in
5805'')
dc45a647 5806 dflt=''
a4f3eea9 5807 case "$d_gnulibc" in
dc45a647
MB
5808 "$define")
5809 echo " "
5810 echo "nm probably won't work on the GNU C Library." >&4
a4f3eea9 5811 dflt=n
5812 ;;
dc45a647
MB
5813 esac
5814 case "$dflt" in
5815 '')
5816 if $test "$osname" = aix -a ! -f /lib/syscalls.exp; then
5817 echo " "
5818 echo "Whoops! This is an AIX system without /lib/syscalls.exp!" >&4
5819 echo "'nm' won't be sufficient on this sytem." >&4
5820 dflt=n
5821 fi
5822 ;;
5823 esac
5824 case "$dflt" in
c4f23d77 5825 '') dflt=`$egrep 'inlibc|csym' $rsrc/Configure | wc -l 2>/dev/null`
a4f3eea9 5826 if $test $dflt -gt 20; then
5827 dflt=y
5828 else
5829 dflt=n
5830 fi
5831 ;;
5832 esac
5833 ;;
5834*)
5835 case "$usenm" in
dc45a647 5836 true|$define) dflt=y;;
a4f3eea9 5837 *) dflt=n;;
5838 esac
5839 ;;
25f94b33 5840esac
a4f3eea9 5841$cat <<EOM
4633a7c4 5842
dc45a647
MB
5843I can use $nm to extract the symbols from your C libraries. This
5844is a time consuming task which may generate huge output on the disk (up
5845to 3 megabytes) but that should make the symbols extraction faster. The
5846alternative is to skip the 'nm' extraction part and to compile a small
5847test program instead to determine whether each symbol is present. If
5848you have a fast C compiler and/or if your 'nm' output cannot be parsed,
5849this may be the best solution.
5850
5851You probably shouldn't let me use 'nm' if you are using the GNU C Library.
4633a7c4 5852
a4f3eea9 5853EOM
693762b4 5854rp="Shall I use $nm to extract C symbols from the libraries?"
4633a7c4
LW
5855. ./myread
5856case "$ans" in
dc45a647 5857[Nn]*) usenm=false;;
a4f3eea9 5858*) usenm=true;;
4633a7c4
LW
5859esac
5860
a4f3eea9 5861runnm=$usenm
5862case "$reuseval" in
5863true) runnm=false;;
4633a7c4 5864esac
a4f3eea9 5865
5866: nm options which may be necessary
5867case "$nm_opt" in
5868'') if $test -f /mach_boot; then
1e422769 5869 nm_opt='' # Mach
a4f3eea9 5870 elif $test -d /usr/ccs/lib; then
1e422769 5871 nm_opt='-p' # Solaris (and SunOS?)
a4f3eea9 5872 elif $test -f /dgux; then
1e422769 5873 nm_opt='-p' # DG-UX
2ae324a7 5874 elif $test -f /lib64/rld; then
1e422769 5875 nm_opt='-p' # 64-bit Irix
a4f3eea9 5876 else
5877 nm_opt=''
5878 fi;;
4633a7c4 5879esac
4633a7c4 5880
a4f3eea9 5881: nm options which may be necessary for shared libraries but illegal
5882: for archive libraries. Thank you, Linux.
5883case "$nm_so_opt" in
5884'') case "$myuname" in
5885 *linux*)
693762b4 5886 if $nm --help | $grep 'dynamic' > /dev/null 2>&1; then
a4f3eea9 5887 nm_so_opt='--dynamic'
4633a7c4 5888 fi
a4f3eea9 5889 ;;
4633a7c4 5890 esac
4633a7c4
LW
5891 ;;
5892esac
5893
a4f3eea9 5894case "$runnm" in
5895true)
5896: get list of predefined functions in a handy place
5897echo " "
5898case "$libc" in
5899'') libc=unknown
5900 case "$libs" in
dfe9444c 5901 *-lc_s*) libc=`./loc libc_s$_a $libc $libpth`
a4f3eea9 5902 esac
5903 ;;
5904esac
5905libnames='';
5906case "$libs" in
5907'') ;;
5908*) for thislib in $libs; do
5909 case "$thislib" in
5910 -lc|-lc_s)
5911 : Handle C library specially below.
5912 ;;
5913 -l*)
5914 thislib=`echo $thislib | $sed -e 's/^-l//'`
5915 if try=`./loc lib$thislib.$so.'*' X $libpth`; $test -f "$try"; then
5916 :
5917 elif try=`./loc lib$thislib.$so X $libpth`; $test -f "$try"; then
5918 :
dfe9444c 5919 elif try=`./loc lib$thislib$_a X $libpth`; $test -f "$try"; then
a4f3eea9 5920 :
dfe9444c 5921 elif try=`./loc $thislib$_a X $libpth`; $test -f "$try"; then
d97d40b5 5922 :
a4f3eea9 5923 elif try=`./loc lib$thislib X $libpth`; $test -f "$try"; then
5924 :
5925 elif try=`./loc $thislib X $libpth`; $test -f "$try"; then
5926 :
dfe9444c 5927 elif try=`./loc Slib$thislib$_a X $xlibpth`; $test -f "$try"; then
a4f3eea9 5928 :
5929 else
5930 try=''
5931 fi
5932 libnames="$libnames $try"
5933 ;;
5934 *) libnames="$libnames $thislib" ;;
5935 esac
5936 done
5937 ;;
5938esac
5939xxx=normal
5940case "$libc" in
5941unknown)
5942 set /lib/libc.$so
5943 for xxx in $libpth; do
5944 $test -r $1 || set $xxx/libc.$so
5945 : The messy sed command sorts on library version numbers.
5946 $test -r $1 || \
5947 set `echo blurfl; echo $xxx/libc.$so.[0-9]* | \
28e8609d 5948 tr ' ' $trnl | egrep -v '\.[A-Za-z]*$' | $sed -e '
a4f3eea9 5949 h
5950 s/[0-9][0-9]*/0000&/g
5951 s/0*\([0-9][0-9][0-9][0-9][0-9]\)/\1/g
5952 G
5953 s/\n/ /' | \
dfe9444c 5954 sort | $sed -e 's/^.* //'`
a4f3eea9 5955 eval set \$$#
5956 done
5957 $test -r $1 || set /usr/ccs/lib/libc.$so
dfe9444c
AD
5958 $test -r $1 || set /lib/libsys_s$_a
5959 ;;
a4f3eea9 5960*)
5961 set blurfl
5962 ;;
5963esac
5964if $test -r "$1"; then
5965 echo "Your (shared) C library seems to be in $1."
5966 libc="$1"
5967elif $test -r /lib/libc && $test -r /lib/clib; then
5968 echo "Your C library seems to be in both /lib/clib and /lib/libc."
5969 xxx=apollo
5970 libc='/lib/clib /lib/libc'
5971 if $test -r /lib/syslib; then
5972 echo "(Your math library is in /lib/syslib.)"
5973 libc="$libc /lib/syslib"
5974 fi
5975elif $test -r "$libc" || (test -h "$libc") >/dev/null 2>&1; then
5976 echo "Your C library seems to be in $libc, as you said before."
dfe9444c
AD
5977elif $test -r $incpath/usr/lib/libc$_a; then
5978 libc=$incpath/usr/lib/libc$_a;
a4f3eea9 5979 echo "Your C library seems to be in $libc. That's fine."
dfe9444c
AD
5980elif $test -r /lib/libc$_a; then
5981 libc=/lib/libc$_a;
a4f3eea9 5982 echo "Your C library seems to be in $libc. You're normal."
5983else
dfe9444c 5984 if tans=`./loc libc$_a blurfl/dyick $libpth`; $test -r "$tans"; then
a4f3eea9 5985 :
5986 elif tans=`./loc libc blurfl/dyick $libpth`; $test -r "$tans"; then
5987 libnames="$libnames "`./loc clib blurfl/dyick $libpth`
5988 elif tans=`./loc clib blurfl/dyick $libpth`; $test -r "$tans"; then
5989 :
dfe9444c 5990 elif tans=`./loc Slibc$_a blurfl/dyick $xlibpth`; $test -r "$tans"; then
a4f3eea9 5991 :
dfe9444c 5992 elif tans=`./loc Mlibc$_a blurfl/dyick $xlibpth`; $test -r "$tans"; then
a4f3eea9 5993 :
4633a7c4 5994 else
dfe9444c 5995 tans=`./loc Llibc$_a blurfl/dyick $xlibpth`
4633a7c4 5996 fi
a4f3eea9 5997 if $test -r "$tans"; then
5998 echo "Your C library seems to be in $tans, of all places."
5999 libc=$tans
6000 else
6001 libc='blurfl'
6002 fi
6003fi
6004if $test $xxx = apollo -o -r "$libc" || (test -h "$libc") >/dev/null 2>&1; then
6005 dflt="$libc"
6006 cat <<EOM
4633a7c4 6007
a4f3eea9 6008If the guess above is wrong (which it might be if you're using a strange
6009compiler, or your machine supports multiple models), you can override it here.
4633a7c4 6010
a4f3eea9 6011EOM
6012else
6013 dflt=''
28e8609d 6014 echo $libpth | tr ' ' $trnl | sort | uniq > libpath
a4f3eea9 6015 cat >&4 <<EOM
6016I can't seem to find your C library. I've looked in the following places:
4633a7c4 6017
a4f3eea9 6018EOM
6019 $sed 's/^/ /' libpath
6020 cat <<EOM
4633a7c4 6021
a4f3eea9 6022None of these seems to contain your C library. I need to get its name...
4633a7c4 6023
a4f3eea9 6024EOM
6025fi
6026fn=f
6027rp='Where is your C library?'
6028. ./getfile
6029libc="$ans"
4633a7c4 6030
4633a7c4 6031echo " "
28e8609d 6032echo $libc $libnames | tr ' ' $trnl | sort | uniq > libnames
a4f3eea9 6033set X `cat libnames`
4633a7c4 6034shift
a4f3eea9 6035xxx=files
6036case $# in 1) xxx=file; esac
6037echo "Extracting names from the following $xxx for later perusal:" >&4
6038echo " "
6039$sed 's/^/ /' libnames >&4
6040echo " "
6041$echo $n "This may take a while...$c" >&4
4633a7c4 6042
dfe9444c
AD
6043for file in $*; do
6044 case $file in
693762b4
AD
6045 *$so*) $nm $nm_so_opt $nm_opt $file 2>/dev/null;;
6046 *) $nm $nm_opt $file 2>/dev/null;;
a4f3eea9 6047 esac
dfe9444c 6048done >libc.tmp
4633a7c4 6049
a4f3eea9 6050$echo $n ".$c"
6051$grep fprintf libc.tmp > libc.ptf
6052xscan='eval "<libc.ptf $com >libc.list"; $echo $n ".$c" >&4'
6053xrun='eval "<libc.tmp $com >libc.list"; echo "done" >&4'
6054xxx='[ADTSIW]'
6055if com="$sed -n -e 's/__IO//' -e 's/^.* $xxx *_[_.]*//p' -e 's/^.* $xxx *//p'";\
6056 eval $xscan;\
6057 $contains '^fprintf$' libc.list >/dev/null 2>&1; then
6058 eval $xrun
6059elif com="$sed -n -e 's/^__*//' -e 's/^\([a-zA-Z_0-9$]*\).*xtern.*/\1/p'";\
6060 eval $xscan;\
6061 $contains '^fprintf$' libc.list >/dev/null 2>&1; then
6062 eval $xrun
6063elif com="$sed -n -e '/|UNDEF/d' -e '/FUNC..GL/s/^.*|__*//p'";\
6064 eval $xscan;\
6065 $contains '^fprintf$' libc.list >/dev/null 2>&1; then
6066 eval $xrun
6067elif com="$sed -n -e 's/^.* D __*//p' -e 's/^.* D //p'";\
6068 eval $xscan;\
6069 $contains '^fprintf$' libc.list >/dev/null 2>&1; then
6070 eval $xrun
6071elif com="$sed -n -e 's/^_//' -e 's/^\([a-zA-Z_0-9]*\).*xtern.*text.*/\1/p'";\
6072 eval $xscan;\
6073 $contains '^fprintf$' libc.list >/dev/null 2>&1; then
6074 eval $xrun
6075elif com="$sed -n -e 's/^.*|FUNC |GLOB .*|//p'";\
6076 eval $xscan;\
6077 $contains '^fprintf$' libc.list >/dev/null 2>&1; then
6078 eval $xrun
6079elif com="$grep '|' | $sed -n -e '/|COMMON/d' -e '/|DATA/d' \
6080 -e '/ file/d' -e 's/^\([^ ]*\).*/\1/p'";\
6081 eval $xscan;\
6082 $contains '^fprintf$' libc.list >/dev/null 2>&1; then
6083 eval $xrun
6084elif com="$sed -n -e 's/^.*|FUNC |GLOB .*|//p' -e 's/^.*|FUNC |WEAK .*|//p'";\
6085 eval $xscan;\
6086 $contains '^fprintf$' libc.list >/dev/null 2>&1; then
6087 eval $xrun
6088elif com="$sed -n -e 's/^__//' -e '/|Undef/d' -e '/|Proc/s/ .*//p'";\
6089 eval $xscan;\
6090 $contains '^fprintf$' libc.list >/dev/null 2>&1; then
6091 eval $xrun
1e422769 6092elif com="$sed -n -e 's/^.*|Proc .*|Text *| *//p'";\
6093 eval $xscan;\
6094 $contains '^fprintf$' libc.list >/dev/null 2>&1; then
6095 eval $xrun
a4f3eea9 6096elif com="$sed -n -e '/Def. Text/s/.* \([^ ]*\)\$/\1/p'";\
6097 eval $xscan;\
6098 $contains '^fprintf$' libc.list >/dev/null 2>&1; then
6099 eval $xrun
6100elif com="$sed -n -e 's/^[-0-9a-f ]*_\(.*\)=.*/\1/p'";\
6101 eval $xscan;\
6102 $contains '^fprintf$' libc.list >/dev/null 2>&1; then
6103 eval $xrun
44a8e56a 6104elif com="$sed -n -e 's/.*\.text n\ \ \ \.//p'";\
6105 eval $xscan;\
6106 $contains '^fprintf$' libc.list >/dev/null 2>&1; then
6107 eval $xrun
0f502cca
BL
6108elif com="sed -n -e 's/^__.*//' -e 's/[ ]*D[ ]*[0-9]*.*//p'";\
6109 eval $xscan;\
6110 $contains '^fprintf$' libc.list >/dev/null 2>&1; then
6111 eval $xrun
a4f3eea9 6112else
693762b4 6113 $nm -p $* 2>/dev/null >libc.tmp
a4f3eea9 6114 $grep fprintf libc.tmp > libc.ptf
6115 if com="$sed -n -e 's/^.* [ADTSIW] *_[_.]*//p' -e 's/^.* [ADTSIW] //p'";\
6116 eval $xscan; $contains '^fprintf$' libc.list >/dev/null 2>&1
6117 then
6118 nm_opt='-p'
6119 eval $xrun
4633a7c4 6120 else
a4f3eea9 6121 echo " "
e5c9fcd0 6122 echo "$nm didn't seem to work right. Trying $ar instead..." >&4
a4f3eea9 6123 com=''
dc45a647
MB
6124 if $ar t $libc > libc.tmp && $contains '^fprintf$' libc.tmp >/dev/null 2>&1; then
6125 for thisname in $libnames $libc; do
e5c9fcd0 6126 $ar t $thisname >>libc.tmp
a4f3eea9 6127 done
dfe9444c 6128 $sed -e "s/\\$_o\$//" < libc.tmp > libc.list
a4f3eea9 6129 echo "Ok." >&4
dc45a647
MB
6130 elif test "X$osname" = "Xos2" && $ar tv $libc > libc.tmp; then
6131 # Repeat libc to extract forwarders to DLL entries too
6132 for thisname in $libnames $libc; do
6133 $ar tv $thisname >>libc.tmp
6134 # Revision 50 of EMX has bug in $ar.
6135 # it will not extract forwarders to DLL entries
6136 # Use emximp which will extract exactly them.
6137 emximp -o tmp.imp $thisname \
6138 2>/dev/null && \
6139 $sed -e 's/^\([_a-zA-Z0-9]*\) .*$/\1/p' \
6140 < tmp.imp >>libc.tmp
6141 $rm tmp.imp
6142 done
6143 $sed -e "s/\\$_o\$//" -e 's/^ \+//' < libc.tmp > libc.list
6144 echo "Ok." >&4
a4f3eea9 6145 else
e5c9fcd0 6146 echo "$ar didn't seem to work right." >&4
a4f3eea9 6147 echo "Maybe this is a Cray...trying bld instead..." >&4
dfe9444c 6148 if bld t $libc | $sed -e 's/.*\///' -e "s/\\$_o:.*\$//" > libc.list
a4f3eea9 6149 then
6150 for thisname in $libnames; do
6151 bld t $libnames | \
dfe9444c 6152 $sed -e 's/.*\///' -e "s/\\$_o:.*\$//" >>libc.list
e5c9fcd0 6153 $ar t $thisname >>libc.tmp
a4f3eea9 6154 done
6155 echo "Ok." >&4
6156 else
6157 echo "That didn't work either. Giving up." >&4
6158 exit 1
6159 fi
6160 fi
4633a7c4 6161 fi
4633a7c4 6162fi
a4f3eea9 6163nm_extract="$com"
6164if $test -f /lib/syscalls.exp; then
4633a7c4 6165 echo " "
a4f3eea9 6166 echo "Also extracting names from /lib/syscalls.exp for good ole AIX..." >&4
c6912327 6167 $sed -n 's/^\([^ ]*\)[ ]*syscall[0-9]*$/\1/p' /lib/syscalls.exp >>libc.list
a4f3eea9 6168fi
6169;;
6170esac
6171$rm -f libnames libpath
6172
2afac517 6173: see if dld is available
6174set dld.h i_dld
6175eval $inhdr
4633a7c4 6176
2afac517 6177: is a C symbol defined?
6178csym='tlook=$1;
6179case "$3" in
6180-v) tf=libc.tmp; tc=""; tdc="";;
6181-a) tf=libc.tmp; tc="[0]"; tdc="[]";;
6182*) tlook="^$1\$"; tf=libc.list; tc="()"; tdc="()";;
6183esac;
6184tx=yes;
6185case "$reuseval-$4" in
6186true-) ;;
6187true-*) tx=no; eval "tval=\$$4"; case "$tval" in "") tx=yes;; esac;;
6188esac;
6189case "$tx" in
6190yes)
6191 case "$runnm" in
6192 true)
6193 if $contains $tlook $tf >/dev/null 2>&1;
6194 then tval=true;
6195 else tval=false;
6196 fi;;
6197 *)
d674cd6d 6198 echo "int main() { extern short $1$tdc; printf(\"%hd\", $1$tc); }" > t.c;
dfe9444c 6199 if $cc $optimize $ccflags $ldflags -o t t.c $libs >/dev/null 2>&1;
2afac517 6200 then tval=true;
6201 else tval=false;
6202 fi;
6203 $rm -f t t.c;;
6204 esac;;
6205*)
6206 case "$tval" in
6207 $define) tval=true;;
6208 *) tval=false;;
6209 esac;;
6210esac;
6211eval "$2=$tval"'
4633a7c4 6212
2afac517 6213: define an is-in-libc? function
6214inlibc='echo " "; td=$define; tu=$undef;
6215sym=$1; var=$2; eval "was=\$$2";
6216tx=yes;
6217case "$reuseval$was" in
6218true) ;;
6219true*) tx=no;;
6220esac;
6221case "$tx" in
6222yes)
6223 set $sym tres -f;
6224 eval $csym;
6225 case "$tres" in
6226 true)
6227 echo "$sym() found." >&4;
6228 case "$was" in $undef) . ./whoa; esac; eval "$var=\$td";;
6229 *)
6230 echo "$sym() NOT found." >&4;
6231 case "$was" in $define) . ./whoa; esac; eval "$var=\$tu";;
6232 esac;;
6233*)
6234 case "$was" in
6235 $define) echo "$sym() found." >&4;;
6236 *) echo "$sym() NOT found." >&4;;
6237 esac;;
6238esac'
4633a7c4 6239
2afac517 6240: see if dlopen exists
6241xxx_runnm="$runnm"
6242runnm=false
6243set dlopen d_dlopen
6244eval $inlibc
6245runnm="$xxx_runnm"
40a7a20a 6246
2afac517 6247: determine which dynamic loading, if any, to compile in
4633a7c4 6248echo " "
2afac517 6249dldir="ext/DynaLoader"
6250case "$usedl" in
6251$define|y|true)
6252 dflt='y'
6253 usedl="$define"
6254 ;;
6255$undef|n|false)
6256 dflt='n'
6257 usedl="$undef"
6258 ;;
6259*)
6260 dflt='n'
6261 case "$d_dlopen" in
6262 $define) dflt='y' ;;
6263 esac
6264 case "$i_dld" in
6265 $define) dflt='y' ;;
4633a7c4 6266 esac
2afac517 6267 : Does a dl_xxx.xs file exist for this operating system
dc45a647 6268 $test -f $rsrc/$dldir/dl_${osname}.xs && dflt='y'
4633a7c4
LW
6269 ;;
6270esac
2afac517 6271rp="Do you wish to use dynamic loading?"
6272. ./myread
6273usedl="$ans"
6274case "$ans" in
6275y*) usedl="$define"
6276 case "$dlsrc" in
6277 '')
dc45a647 6278 if $test -f $rsrc/$dldir/dl_${osname}.xs ; then
2afac517 6279 dflt="$dldir/dl_${osname}.xs"
6280 elif $test "$d_dlopen" = "$define" ; then
6281 dflt="$dldir/dl_dlopen.xs"
6282 elif $test "$i_dld" = "$define" ; then
6283 dflt="$dldir/dl_dld.xs"
4633a7c4 6284 else
2afac517 6285 dflt=''
4633a7c4 6286 fi
4633a7c4 6287 ;;
2afac517 6288 *) dflt="$dldir/$dlsrc"
6289 ;;
4633a7c4 6290 esac
2afac517 6291 echo "The following dynamic loading files are available:"
6292 : Can not go over to $dldir because getfile has path hard-coded in.
dc45a647
MB
6293 tdir=`pwd`; cd $rsrc; $ls -C $dldir/dl*.xs; cd $tdir
6294 rp="Source file to use for dynamic loading"
6295 fn="fne"
b233458b 6296 gfpth="$src"
dc45a647 6297 . ./getfile
2afac517 6298 usedl="$define"
6299 : emulate basename
1e127011 6300 dlsrc=`echo $ans | $sed -e 's%.*/\([^/]*\)$%\1%'`
2304df62 6301
dc45a647 6302 $cat << EOM
2304df62 6303
2afac517 6304Some systems may require passing special flags to $cc -c to
6305compile modules that will be used to create a shared library.
6306To use no flags, say "none".
2304df62
AD
6307
6308EOM
2afac517 6309 case "$cccdlflags" in
6310 '') case "$gccversion" in
6311 '') case "$osname" in
6312 hpux) dflt='+z' ;;
6313 next) dflt='none' ;;
8cc95fdb 6314 irix*) dflt='-KPIC' ;;
3a6175e1 6315 svr4*|esix*|solaris) dflt='-KPIC' ;;
2afac517 6316 sunos) dflt='-pic' ;;
6317 *) dflt='none' ;;
dfe9444c
AD
6318 esac
6319 ;;
6320 *) case "$osname" in
3a6175e1 6321 svr4*|esix*|solaris) dflt='-fPIC' ;;
dfe9444c 6322 *) dflt='-fpic' ;;
81d89818 6323 esac ;;
2afac517 6324 esac ;;
bfb7748a 6325 ' ') dflt='none' ;;
2afac517 6326 *) dflt="$cccdlflags" ;;
6327 esac
6328 rp="Any special flags to pass to $cc -c to compile shared library modules?"
6329 . ./myread
6330 case "$ans" in
6331 none) cccdlflags=' ' ;;
6332 *) cccdlflags="$ans" ;;
6333 esac
2304df62 6334
2afac517 6335 cat << EOM
ecfc5424 6336
2afac517 6337Some systems use ld to create libraries that can be dynamically loaded,
6338while other systems (such as those using ELF) use $cc.
a0f45b59 6339
2afac517 6340EOM
6341 case "$ld" in
6342 '') $cat >try.c <<'EOM'
6343/* Test for whether ELF binaries are produced */
6344#include <fcntl.h>
6345#include <stdlib.h>
5a411a32 6346int main() {
2afac517 6347 char b[4];
6348 int i = open("a.out",O_RDONLY);
6349 if(i == -1)
6350 exit(1); /* fail */
6351 if(read(i,b,4)==4 && b[0]==127 && b[1]=='E' && b[2]=='L' && b[3]=='F')
6352 exit(0); /* succeed (yes, it's ELF) */
2304df62 6353 else
2afac517 6354 exit(1); /* fail */
6355}
6356EOM
6357 if $cc $ccflags try.c >/dev/null 2>&1 && ./a.out; then
6358 cat <<EOM
6359You appear to have ELF support. I'll use $cc to build dynamic libraries.
6360EOM
6361 dflt="$cc"
2304df62 6362 else
2afac517 6363 echo "I'll use ld to build dynamic libraries."
6364 dflt='ld'
2304df62 6365 fi
2afac517 6366 rm -f try.c a.out
6367 ;;
6368 *) dflt="$ld"
6369 ;;
6370 esac
6371
6372 rp="What command should be used to create dynamic libraries?"
6373 . ./myread
6374 ld="$ans"
6375
6376 cat << EOM
6377
6378Some systems may require passing special flags to $ld to create a
6379library that can be dynamically loaded. If your ld flags include
6380-L/other/path options to locate libraries outside your loader's normal
6381search path, you may need to specify those -L options here as well. To
6382use no flags, say "none".
6383
6384EOM
6385 case "$lddlflags" in
6386 '') case "$osname" in
46193409 6387 beos) dflt='-nostart' ;;
a5f83cbf
JH
6388 hpux) dflt='-b';
6389 case "$gccversion" in
6390 '') dflt="$dflt +vnocompatwarnings" ;;
b36fec95
JH
6391 esac
6392 ;;
2afac517 6393 linux|irix*) dflt='-shared' ;;
6394 next) dflt='none' ;;
6395 solaris) dflt='-G' ;;
6396 sunos) dflt='-assert nodefinitions' ;;
6397 svr4*|esix*) dflt="-G $ldflags" ;;
6398 *) dflt='none' ;;
6399 esac
6400 ;;
6401 *) dflt="$lddlflags" ;;
6402 esac
6403
bfb7748a 6404 : Try to guess additional flags to pick up local libraries.
a0915cb7
AD
6405 : Be careful not to append to a plain 'none'
6406 case "$dflt" in
6407 none) dflt='' ;;
6408 esac
bfb7748a
AD
6409 for thisflag in $ldflags; do
6410 case "$thisflag" in
6411 -L*)
6412 case " $dflt " in
6413 *" $thisflag "*) ;;
6414 *) dflt="$dflt $thisflag" ;;
6415 esac
6416 ;;
2afac517 6417 esac
bfb7748a 6418 done
2afac517 6419
bfb7748a
AD
6420 case "$dflt" in
6421 ''|' ') dflt='none' ;;
6422 esac
2afac517 6423
6424 rp="Any special flags to pass to $ld to create a dynamically loaded library?"
6425 . ./myread
6426 case "$ans" in
6427 none) lddlflags=' ' ;;
6428 *) lddlflags="$ans" ;;
6429 esac
6430
6431 cat <<EOM
6432
6433Some systems may require passing special flags to $cc to indicate that
6434the resulting executable will use dynamic linking. To use no flags,
6435say "none".
6436
6437EOM
6438 case "$ccdlflags" in
6439 '') case "$osname" in
6440 hpux) dflt='-Wl,-E' ;;
6441 linux) dflt='-rdynamic' ;;
6442 next) dflt='none' ;;
6443 sunos) dflt='none' ;;
6444 *) dflt='none' ;;
6445 esac ;;
bfb7748a 6446 ' ') dflt='none' ;;
2afac517 6447 *) dflt="$ccdlflags" ;;
6448 esac
7f95ee77 6449 rp="Any special flags to pass to $cc to use dynamic linking?"
2afac517 6450 . ./myread
6451 case "$ans" in
6452 none) ccdlflags=' ' ;;
6453 *) ccdlflags="$ans" ;;
6454 esac
6455 ;;
6456*) usedl="$undef"
6457 ld='ld'
6458 dlsrc='dl_none.xs'
6459 lddlflags=''
6460 ccdlflags=''
6461 ;;
6462esac
6463
6464also=''
6465case "$usedl" in
6466$undef)
6467 # No dynamic loading being used, so don't bother even to prompt.
6468 useshrplib='false'
6469 ;;
6470*) case "$useshrplib" in
6471 '') case "$osname" in
4fabb596 6472 svr4*|dgux|dynixptx|esix|powerux|beos|cygwin*)
3e3baf6d 6473 dflt=y
2afac517 6474 also='Building a shared libperl is required for dynamic loading to work on your system.'
6475 ;;
6476 next*)
6477 case "$osvers" in
3e3baf6d 6478 4*) dflt=y
2afac517 6479 also='Building a shared libperl is needed for MAB support.'
6480 ;;
3e3baf6d 6481 *) dflt=n
2afac517 6482 ;;
6483 esac
6484 ;;
3e3baf6d 6485 *) dflt=n
2afac517 6486 ;;
6487 esac
6488 ;;
6489 $define|true|[Yy]*)
3e3baf6d 6490 dflt=y
2afac517 6491 ;;
3e3baf6d 6492 *) dflt=n
2afac517 6493 ;;
6494 esac
6495 $cat << EOM
6496
6497The perl executable is normally obtained by linking perlmain.c with
dfe9444c 6498libperl${_a}, any static extensions (usually just DynaLoader), and
2afac517 6499any other libraries needed on this system (such as -lm, etc.). Since
6500your system supports dynamic loading, it is probably possible to build
6501a shared libperl.$so. If you will have more than one executable linked
6502to libperl.$so, this will significantly reduce the size of each
6503executable, but it may have a noticeable affect on performance. The
6504default is probably sensible for your system.
6505$also
6506
6507EOM
6508 rp="Build a shared libperl.$so (y/n)"
6509 . ./myread
6510 case "$ans" in
6511 true|$define|[Yy]*)
5cf1d1f1 6512 useshrplib='true' ;;
2afac517 6513 *) useshrplib='false' ;;
6514 esac
6515 ;;
6516esac
6517
6518case "$useshrplib" in
6519true)
6520 case "$libperl" in
6521 '')
6522 # Figure out a good name for libperl.so. Since it gets stored in
6523 # a version-specific architecture-dependent library, the version
6524 # number isn't really that important, except for making cc/ld happy.
6525 #
6526 # A name such as libperl.so.3.1
6527 majmin="libperl.$so.$patchlevel.$subversion"
6528 # A name such as libperl.so.301
6529 majonly=`echo $patchlevel $subversion |
6530 $awk '{printf "%d%02d", $1, $2}'`
6531 majonly=libperl.$so.$majonly
6532 # I'd prefer to keep the os-specific stuff here to a minimum, and
6533 # rely on figuring it out from the naming of libc.
6534 case "${osname}${osvers}" in
6535 next4*)
6536 dflt=libperl.5.$so
6537 # XXX How handle the --version stuff for MAB?
6538 ;;
6539 linux*) # ld won't link with a bare -lperl otherwise.
6540 dflt=libperl.$so
6541 ;;
4fabb596
GS
6542 cygwin*) # include version
6543 dflt=`echo libperl$version | sed -e 's/\./_/g'`$lib_ext
6544 ;;
2afac517 6545 *) # Try to guess based on whether libc has major.minor.
6546 case "$libc" in
6547 *libc.$so.[0-9]*.[0-9]*) dflt=$majmin ;;
6548 *libc.$so.[0-9]*) dflt=$majonly ;;
6549 *) dflt=libperl.$so ;;
6550 esac
6551 ;;
6552 esac
6553 ;;
6554 *) dflt=$libperl
6555 ;;
6556 esac
6557 cat << EOM
6558
6559I need to select a good name for the shared libperl. If your system uses
6560library names with major and minor numbers, then you might want something
6561like $majmin. Alternatively, if your system uses a single version
6562number for shared libraries, then you might want to use $majonly.
6563Or, your system might be quite happy with a simple libperl.$so.
6564
6565Since the shared libperl will get installed into a version-specific
6566architecture-dependent directory, the version number of the shared perl
6567library probably isn't important, so the default should be o.k.
6568
6569EOM
6570 rp='What name do you want to give to the shared libperl?'
6571 . ./myread
6572 libperl=$ans
6573 echo "Ok, I'll use $libperl"
6574 ;;
6575*)
dfe9444c 6576 libperl="libperl${_a}"
2afac517 6577 ;;
6578esac
6579
6580# Detect old use of shrpdir via undocumented Configure -Dshrpdir
6581case "$shrpdir" in
6582'') ;;
6583*) $cat >&4 <<EOM
6584WARNING: Use of the shrpdir variable for the installation location of
6585the shared $libperl is not supported. It was never documented and
46193409 6586will not work in this version. Let me (perlbug@perl.com)
dfe9444c 6587know of any problems this may cause.
2afac517 6588
6589EOM
6590 case "$shrpdir" in
6591 "$archlibexp/CORE")
6592 $cat >&4 <<EOM
6593But your current setting of $shrpdir is
6594the default anyway, so it's harmless.
6595EOM
6596 ;;
6597 *)
4e2a5f63
AD
6598 $cat >&4 <<EOM
6599Further, your current attempted setting of $shrpdir
6600conflicts with the value of $archlibexp/CORE
6601that installperl will use.
6602EOM
dc45a647
MB
6603 ;;
6604 esac
6605 ;;
6606esac
6607
6608# How will the perl executable find the installed shared $libperl?
6609# Add $xxx to ccdlflags.
6610# If we can't figure out a command-line option, use $shrpenv to
6611# set env LD_RUN_PATH. The main perl makefile uses this.
6612shrpdir=$archlibexp/CORE
6613xxx=''
6614tmp_shrpenv=''
6615if "$useshrplib"; then
6616 case "$osname" in
6617 aix)
6618 # We'll set it in Makefile.SH...
6619 ;;
6620 solaris|netbsd)
6621 xxx="-R $shrpdir"
6622 ;;
6623 freebsd)
6624 xxx="-Wl,-R$shrpdir"
6625 ;;
6626 linux|irix*|dec_osf)
6627 xxx="-Wl,-rpath,$shrpdir"
6628 ;;
6629 next)
6630 # next doesn't like the default...
6631 ;;
46193409
JH
6632 beos)
6633 # beos doesn't like the default, either.
6634 ;;
3656fc86
JH
6635 hpux*)
6636 # hpux doesn't like the default, either.
6637 tmp_shrpenv="env LDOPTS=\"+s +b${shrpdir}\""
6638 ;;
dc45a647
MB
6639 *)
6640 tmp_shrpenv="env LD_RUN_PATH=$shrpdir"
6641 ;;
6642 esac
6643 case "$xxx" in
6644 '') ;;
6645 *)
6646 # Only add $xxx if it isn't already in ccdlflags.
6647 case " $ccdlflags " in
6648 *" $xxx "*) ;;
6649 *) ccdlflags="$ccdlflags $xxx"
6650 cat <<EOM >&4
6651
6652Adding $xxx to the flags
6653passed to $ld so that the perl executable will find the
6654installed shared $libperl.
6655
6656EOM
6657 ;;
6658 esac
6659 ;;
6660 esac
6661fi
5cf1d1f1
JH
6662# Fix ccdlflags in AIX for building external extensions.
6663# (For building Perl itself bare -bE:perl.exp is needed,
6664# Makefile.SH takes care of this.)
5f9d9a17 6665case "$osname" in
5cf1d1f1 6666aix) ccdlflags="$ccdlflags -bE:$installarchlib/CORE/perl.exp" ;;
5f9d9a17 6667esac
dc45a647
MB
6668# Respect a hint or command-line value.
6669case "$shrpenv" in
6670'') shrpenv="$tmp_shrpenv" ;;
6671esac
5cf1d1f1
JH
6672case "$ldlibpthname" in
6673'') ldlibpthname=LD_LIBRARY_PATH ;;
6674none) ldlibpthname='' ;;
6675esac
dc45a647
MB
6676
6677: determine where manual pages go
6678set man1dir man1dir none
6679eval $prefixit
6680$cat <<EOM
6681
6682$spackage has manual pages available in source form.
6683EOM
6684case "$nroff" in
6685nroff)
6686 echo "However, you don't have nroff, so they're probably useless to you."
6687 case "$man1dir" in
6688 '') man1dir="none";;
6689 esac;;
6690esac
6691echo "If you don't want the manual sources installed, answer 'none'."
6692case "$man1dir" in
6693' ') dflt=none
6694 ;;
6695'')
6696 lookpath="$prefixexp/man/man1 $prefixexp/man/l_man/man1"
6697 lookpath="$lookpath $prefixexp/man/p_man/man1"
6698 lookpath="$lookpath $prefixexp/man/u_man/man1"
6699 lookpath="$lookpath $prefixexp/man/man.1"
6700 case "$sysman" in
6701 */?_man*) dflt=`./loc . $prefixexp/l_man/man1 $lookpath` ;;
6702 *) dflt=`./loc . $prefixexp/man/man1 $lookpath` ;;
6703 esac
6704 set dflt
6705 eval $prefixup
6706 ;;
6707*) dflt="$man1dir"
6708 ;;
6709esac
6710echo " "
6711fn=dn+~
6712rp="Where do the main $spackage manual pages (source) go?"
6713. ./getfile
6714if $test "X$man1direxp" != "X$ansexp"; then
6715 installman1dir=''
6716fi
6717man1dir="$ans"
6718man1direxp="$ansexp"
6719case "$man1dir" in
dd4e71fd 6720'') man1dir=' '
dc45a647
MB
6721 installman1dir='';;
6722esac
dc45a647 6723
dd4e71fd
JH
6724: Change installation prefix, if necessary.
6725if $test X"$prefix" != X"$installprefix"; then
ec897fb9 6726 installman1dir=`echo $man1direxp | $sed "s#^$prefix#$installprefix#"`
71c4afb4
JH
6727else
6728 installman1dir="$man1direxp"
dc45a647
MB
6729fi
6730
6731: What suffix to use on installed man pages
6732
6733case "$man1dir" in
6734' ')
6735 man1ext='0'
6736 ;;
6737*)
6738 rp="What suffix should be used for the main $spackage man pages?"
6739 case "$man1ext" in
6740 '') case "$man1dir" in
6741 *1) dflt=1 ;;
6742 *1p) dflt=1p ;;
6743 *1pm) dflt=1pm ;;
6744 *l) dflt=l;;
6745 *n) dflt=n;;
6746 *o) dflt=o;;
6747 *p) dflt=p;;
6748 *C) dflt=C;;
6749 *L) dflt=L;;
6750 *L1) dflt=L1;;
6751 *) dflt=1;;
6752 esac
6753 ;;
6754 *) dflt="$man1ext";;
6755 esac
6756 . ./myread
6757 man1ext="$ans"
6758 ;;
6759esac
6760
6761: see if we can have long filenames
6762echo " "
dc45a647 6763first=123456789abcdef
8c99d73e 6764$rm -f $first
dc45a647
MB
6765if (echo hi >$first) 2>/dev/null; then
6766 if $test -f 123456789abcde; then
6767 echo 'You cannot have filenames longer than 14 characters. Sigh.' >&4
6768 val="$undef"
6769 else
8c99d73e
GS
6770 echo 'You can have filenames longer than 14 characters.'>&4
6771 val="$define"
dc45a647
MB
6772 fi
6773else
6774 $cat <<'EOM'
8c99d73e
GS
6775You can't have filenames longer than 14 chars.
6776You can't even think about them!
dc45a647
MB
6777EOM
6778 val="$undef"
6779fi
6780set d_flexfnam
6781eval $setvar
8c99d73e 6782$rm -rf 123456789abcde*
dc45a647
MB
6783
6784: determine where library module manual pages go
6785set man3dir man3dir none
6786eval $prefixit
6787$cat <<EOM
6788
6789$spackage has manual pages for many of the library modules.
6790EOM
6791
6792case "$nroff" in
6793nroff)
6794 $cat <<'EOM'
6795However, you don't have nroff, so they're probably useless to you.
6796EOM
6797 case "$man3dir" in
6798 '') man3dir="none";;
6799 esac;;
6800esac
6801
6802case "$d_flexfnam" in
6803undef)
6804 $cat <<'EOM'
6805However, your system can't handle the long file names like File::Basename.3.
6806EOM
6807 case "$man3dir" in
6808 '') man3dir="none";;
6809 esac;;
6810esac
6811
6812echo "If you don't want the manual sources installed, answer 'none'."
6813prog=`echo $package | $sed 's/-*[0-9.]*$//'`
6814case "$man3dir" in
8c99d73e 6815'') dflt=`echo "$man1dir" | $sed -e 's/man1/man3/g' -e 's/man\.1/man\.3/g'`
dd4e71fd
JH
6816 if $test -d "$privlib/man/man3"; then
6817 cat <<EOM >&4
6818
6819WARNING: Previous versions of perl installed man3 pages into
6820$privlib/man/man3. This version will suggest a
6821new default of $dflt.
6822EOM
6823 tdflt=$dflt
6824 dflt='n'
6825 rp='Do you wish to preserve the old behavior?(y/n)'
6826 . ./myread
6827 case "$ans" in
6828 y*) dflt="$privlib/man/man3" ;;
6829 *) dflt=$tdflt ;;
6830 esac
6831 fi
2afac517 6832 ;;
dc45a647 6833*) dflt="$man3dir" ;;
2afac517 6834esac
8c99d73e
GS
6835case "$dflt" in
6836' ') dflt=none ;;
6837esac
dc45a647 6838echo " "
dc45a647
MB
6839fn=dn+~
6840rp="Where do the $package library man pages (source) go?"
6841. ./getfile
dc45a647
MB
6842man3dir="$ans"
6843man3direxp="$ansexp"
8c99d73e 6844case "$man3dir" in
dd4e71fd 6845'') man3dir=' '
dc45a647
MB
6846 installman3dir='';;
6847esac
dc45a647 6848
dd4e71fd
JH
6849: Change installation prefix, if necessary.
6850if $test X"$prefix" != X"$installprefix"; then
ec897fb9 6851 installman3dir=`echo $man3direxp | $sed "s#^$prefix#$installprefix#"`
71c4afb4
JH
6852else
6853 installman3dir="$man3direxp"
dc45a647
MB
6854fi
6855
6856: What suffix to use on installed man pages
dc45a647
MB
6857case "$man3dir" in
6858' ')
6859 man3ext='0'
6860 ;;
6861*)
6862 rp="What suffix should be used for the $package library man pages?"
6863 case "$man3ext" in
6864 '') case "$man3dir" in
6865 *3) dflt=3 ;;
6866 *3p) dflt=3p ;;
6867 *3pm) dflt=3pm ;;
6868 *l) dflt=l;;
6869 *n) dflt=n;;
6870 *o) dflt=o;;
6871 *p) dflt=p;;
6872 *C) dflt=C;;
6873 *L) dflt=L;;
6874 *L3) dflt=L3;;
6875 *) dflt=3;;
2afac517 6876 esac
6877 ;;
dc45a647 6878 *) dflt="$man3ext";;
2afac517 6879 esac
dc45a647
MB
6880 . ./myread
6881 man3ext="$ans"
6882 ;;
2afac517 6883esac
6884
6885: see if we have to deal with yellow pages, now NIS.
6886if $test -d /usr/etc/yp || $test -d /etc/yp; then
6887 if $test -f /usr/etc/nibindd; then
6888 echo " "
6889 echo "I'm fairly confident you're on a NeXT."
6890 echo " "
6891 rp='Do you get the hosts file via NetInfo?'
6892 dflt=y
6893 case "$hostcat" in
6894 nidump*) ;;
6895 '') ;;
6896 *) dflt=n;;
6897 esac
6898 . ./myread
6899 case "$ans" in
6900 y*) hostcat='nidump hosts .';;
6901 *) case "$hostcat" in
6902 nidump*) hostcat='';;
6903 esac
6904 ;;
6905 esac
6906 fi
6907 case "$hostcat" in
6908 nidump*) ;;
6909 *)
6910 case "$hostcat" in
6911 *ypcat*) dflt=y;;
6912 '') if $contains '^\+' /etc/passwd >/dev/null 2>&1; then
6913 dflt=y
6914 else
6915 dflt=n
6916 fi;;
6917 *) dflt=n;;
6918 esac
6919 echo " "
6920 rp='Are you getting the hosts file via yellow pages?'
6921 . ./myread
6922 case "$ans" in
6923 y*) hostcat='ypcat hosts';;
6924 *) hostcat='cat /etc/hosts';;
6925 esac
6926 ;;
6927 esac
6928fi
dfe9444c 6929case "$hostcat" in
7599c0b3 6930'') test -f /etc/hosts && hostcat='cat /etc/hosts';;
dfe9444c
AD
6931esac
6932case "$groupcat" in
7599c0b3 6933'') test -f /etc/group && groupcat='cat /etc/group';;
dfe9444c
AD
6934esac
6935case "$passcat" in
7599c0b3 6936'') test -f /etc/passwd && passcat='cat /etc/passwd';;
dfe9444c 6937esac
2afac517 6938
6939: now get the host name
6940echo " "
6941echo "Figuring out host name..." >&4
6942case "$myhostname" in
6943'') cont=true
6944 echo 'Maybe "hostname" will work...'
6945 if tans=`sh -c hostname 2>&1` ; then
6946 myhostname=$tans
6947 phostname=hostname
6948 cont=''
6949 fi
6950 ;;
6951*) cont='';;
6952esac
6953if $test "$cont"; then
6954 if ./xenix; then
6955 echo 'Oh, dear. Maybe "/etc/systemid" is the key...'
6956 if tans=`cat /etc/systemid 2>&1` ; then
6957 myhostname=$tans
6958 phostname='cat /etc/systemid'
6959 echo "Whadyaknow. Xenix always was a bit strange..."
6960 cont=''
6961 fi
6962 elif $test -r /etc/systemid; then
6963 echo "(What is a non-Xenix system doing with /etc/systemid?)"
6964 fi
6965fi
6966if $test "$cont"; then
6967 echo 'No, maybe "uuname -l" will work...'
6968 if tans=`sh -c 'uuname -l' 2>&1` ; then
6969 myhostname=$tans
6970 phostname='uuname -l'
6971 else
6972 echo 'Strange. Maybe "uname -n" will work...'
6973 if tans=`sh -c 'uname -n' 2>&1` ; then
6974 myhostname=$tans
6975 phostname='uname -n'
6976 else
6977 echo 'Oh well, maybe I can mine it out of whoami.h...'
6978 if tans=`sh -c $contains' sysname $usrinc/whoami.h' 2>&1` ; then
6979 myhostname=`echo "$tans" | $sed 's/^.*"\(.*\)"/\1/'`
6980 phostname="sed -n -e '"'/sysname/s/^.*\"\\(.*\\)\"/\1/{'"' -e p -e q -e '}' <$usrinc/whoami.h"
6981 else
6982 case "$myhostname" in
6983 '') echo "Does this machine have an identity crisis or something?"
6984 phostname='';;
6985 *)
6986 echo "Well, you said $myhostname before..."
6987 phostname='echo $myhostname';;
6988 esac
6989 fi
6990 fi
6991 fi
6992fi
6993: you do not want to know about this
6994set $myhostname
6995myhostname=$1
6996
6997: verify guess
6998if $test "$myhostname" ; then
6999 dflt=y
7000 rp='Your host name appears to be "'$myhostname'".'" Right?"
7001 . ./myread
7002 case "$ans" in
7003 y*) ;;
7004 *) myhostname='';;
7005 esac
7006fi
7007
7008: bad guess or no guess
7009while $test "X$myhostname" = X ; do
7010 dflt=''
7011 rp="Please type the (one word) name of your host:"
7012 . ./myread
7013 myhostname="$ans"
7014done
7015
7016: translate upper to lower if necessary
7017case "$myhostname" in
7018*[A-Z]*)
7019 echo "(Normalizing case in your host name)"
7020 myhostname=`echo $myhostname | ./tr '[A-Z]' '[a-z]'`
7021 ;;
7022esac
7023
7024case "$myhostname" in
7025*.*)
7026 dflt=`expr "X$myhostname" : "X[^.]*\(\..*\)"`
7027 myhostname=`expr "X$myhostname" : "X\([^.]*\)\."`
7028 echo "(Trimming domain name from host name--host name is now $myhostname)"
7029 ;;
7030*) case "$mydomain" in
7031 '')
7032 {
2afac517 7033 test "X$hostcat" = "Xypcat hosts" &&
7034 ypmatch "$myhostname" hosts 2>/dev/null |\
7035 $sed -e 's/[ ]*#.*//; s/$/ /' > hosts && \
7036 $test -s hosts
7037 } || {
7599c0b3 7038 test "X$hostcat" != "X" &&
2afac517 7039 $hostcat | $sed -n -e "s/[ ]*#.*//; s/\$/ /
7040 /[ ]$myhostname[ . ]/p" > hosts
7041 }
7042 tmp_re="[ . ]"
7043 $test x`$awk "/[0-9].*[ ]$myhostname$tmp_re/ { sum++ }
7044 END { print sum }" hosts` = x1 || tmp_re="[ ]"
7045 dflt=.`$awk "/[0-9].*[ ]$myhostname$tmp_re/ {for(i=2; i<=NF;i++) print \\\$i}" \
7046 hosts | $sort | $uniq | \
7047 $sed -n -e "s/$myhostname\.\([-a-zA-Z0-9_.]\)/\1/p"`
7048 case `$echo X$dflt` in
7049 X*\ *) echo "(Several hosts in /etc/hosts matched hostname)"
7050 dflt=.
7051 ;;
7052 X.) echo "(You do not have fully-qualified names in /etc/hosts)"
7053 ;;
7054 esac
7055 case "$dflt" in
7056 .)
7057 tans=`./loc resolv.conf X /etc /usr/etc`
7058 if $test -f "$tans"; then
7059 echo "(Attempting domain name extraction from $tans)"
a6006777 7060 dflt=.`$sed -n -e 's/ / /g' \
28757baa 7061 -e 's/^search *\([^ ]*\).*/\1/p' $tans \
a6006777 7062 | ./tr '[A-Z]' '[a-z]' 2>/dev/null`
2afac517 7063 case "$dflt" in
a6006777 7064 .) dflt=.`$sed -n -e 's/ / /g' \
28757baa 7065 -e 's/^domain *\([^ ]*\).*/\1/p' $tans \
a6006777 7066 | ./tr '[A-Z]' '[a-z]' 2>/dev/null`
774d564b 7067 ;;
2afac517 7068 esac
7069 fi
7070 ;;
7071 esac
7072 case "$dflt" in
7073 .) echo "(No help from resolv.conf either -- attempting clever guess)"
7074 dflt=.`sh -c domainname 2>/dev/null`
7075 case "$dflt" in
7076 '') dflt='.';;
7077 .nis.*|.yp.*|.main.*) dflt=`echo $dflt | $sed -e 's/^\.[^.]*//'`;;
7078 esac
7079 ;;
7080 esac
7081 case "$dflt" in
7082 .) echo "(Lost all hope -- silly guess then)"
7083 dflt='.uucp'
7084 ;;
7085 esac
7086 $rm -f hosts
7087 ;;
7088 *) dflt="$mydomain";;
7089 esac;;
7090esac
7091echo " "
7092rp="What is your domain name?"
7093. ./myread
7094tans="$ans"
7095case "$ans" in
7096'') ;;
7097.*) ;;
7098*) tans=".$tans";;
7099esac
7100mydomain="$tans"
7101
7102: translate upper to lower if necessary
7103case "$mydomain" in
7104*[A-Z]*)
7105 echo "(Normalizing case in your domain name)"
7106 mydomain=`echo $mydomain | ./tr '[A-Z]' '[a-z]'`
7107 ;;
7108esac
7109
7110: a little sanity check here
7111case "$phostname" in
7112'') ;;
7113*)
7114 case `$phostname | ./tr '[A-Z]' '[a-z]'` in
7115 $myhostname$mydomain|$myhostname) ;;
7116 *)
7117 case "$phostname" in
7118 sed*)
7119 echo "(That doesn't agree with your whoami.h file, by the way.)"
7120 ;;
7121 *)
7122 echo "(That doesn't agree with your $phostname command, by the way.)"
7123 ;;
7124 esac
7125 ;;
7126 esac
7127 ;;
7128esac
7129
7130$cat <<EOM
7131
7132I need to get your e-mail address in Internet format if possible, i.e.
7133something like user@host.domain. Please answer accurately since I have
7134no easy means to double check it. The default value provided below
7f95ee77 7135is most probably close to reality but may not be valid from outside
2afac517 7136your organization...
7137
7138EOM
7139cont=x
7140while test "$cont"; do
7141 case "$cf_email" in
7142 '') dflt="$cf_by@$myhostname$mydomain";;
7143 *) dflt="$cf_email";;
7144 esac
7145 rp='What is your e-mail address?'
7146 . ./myread
7147 cf_email="$ans"
7148 case "$cf_email" in
7149 *@*.*) cont='' ;;
7150 *)
7151 rp='Address does not look like an Internet one. Use it anyway?'
7152 case "$fastread" in
7153 yes) dflt=y ;;
7154 *) dflt=n ;;
7155 esac
7156 . ./myread
7157 case "$ans" in
7158 y*) cont='' ;;
7159 *) echo " " ;;
7160 esac
7161 ;;
7162 esac
7163done
7164
7165$cat <<EOM
7166
7167If you or somebody else will be maintaining perl at your site, please
7168fill in the correct e-mail address here so that they may be contacted
7169if necessary. Currently, the "perlbug" program included with perl
7170will send mail to this address in addition to perlbug@perl.com. You may
7171enter "none" for no administrator.
7172
7173EOM
7174case "$perladmin" in
7175'') dflt="$cf_email";;
7176*) dflt="$perladmin";;
7177esac
7178rp='Perl administrator e-mail address'
7179. ./myread
7180perladmin="$ans"
7181
5f05dabc 7182: figure out how to guarantee perl startup
7183case "$startperl" in
7184'')
7185 case "$sharpbang" in
7186 *!)
7187 $cat <<EOH
7188
7189I can use the #! construct to start perl on your system. This will
7190make startup of perl scripts faster, but may cause problems if you
7191want to share those scripts and perl is not in a standard place
7192($binexp/perl) on all your platforms. The alternative is to force
7193a shell by starting the script with a single ':' character.
7194
7195EOH
7196 dflt="$binexp/perl"
7197 rp='What shall I put after the #! to start up perl ("none" to not use #!)?'
7198 . ./myread
7199 case "$ans" in
68dc0745 7200 none) startperl=": # use perl";;
7201 *) startperl="#!$ans"
3e3baf6d 7202 if $test 30 -lt `echo "$ans" | wc -c`; then
68dc0745 7203 $cat >&4 <<EOM
7204
7205WARNING: Some systems limit the #! command to 32 characters.
7206If you experience difficulty running Perl scripts with #!, try
7207installing Perl in a directory with a shorter pathname.
7208
7209EOM
7210 fi ;;
5f05dabc 7211 esac
7212 ;;
7213 *) startperl=": # use perl"
7214 ;;
7215 esac
7216 ;;
7217esac
7218echo "I'll use $startperl to start perl scripts."
7219
7220: figure best path for perl in scripts
7221case "$perlpath" in
7222'')
7223 perlpath="$binexp/perl"
7224 case "$startperl" in
7225 *!*) ;;
7226 *)
7227 $cat <<EOH
7228
7229I will use the "eval 'exec'" idiom to start Perl on your system.
7230I can use the full path of your Perl binary for this purpose, but
7231doing so may cause problems if you want to share those scripts and
7232Perl is not always in a standard place ($binexp/perl).
7233
7234EOH
7235 dflt="$binexp/perl"
7236 rp="What path shall I use in \"eval 'exec'\"?"
7237 . ./myread
7238 perlpath="$ans"
7239 ;;
7240 esac
7241 ;;
7242esac
7243case "$startperl" in
7244*!*) ;;
7245*) echo "I'll use $perlpath in \"eval 'exec'\"" ;;
7246esac
7247
dc45a647
MB
7248: determine where public executable scripts go
7249set scriptdir scriptdir
7250eval $prefixit
7251case "$scriptdir" in
7252'')
7253 dflt="$bin"
7254 : guess some guesses
7255 $test -d /usr/share/scripts && dflt=/usr/share/scripts
dd4e71fd
JH
7256 $test -d /usr/share/bin && dflt=/usr/share/bin
7257 $test -d /usr/local/script && dflt=/usr/local/script
7258 $test -d /usr/local/scripts && dflt=/usr/local/scripts
7259 $test -d $prefixexp/script && dflt=$prefixexp/script
dc45a647
MB
7260 set dflt
7261 eval $prefixup
7262 ;;
7263*) dflt="$scriptdir"
7264 ;;
7265esac
7266$cat <<EOM
7267
7268Some installations have a separate directory just for executable scripts so
7269that they can mount it across multiple architectures but keep the scripts in
7270one spot. You might, for example, have a subdirectory of /usr/share for this.
7271Or you might just lump your scripts in with all your other executables.
7272
7273EOM
7274fn=d~
7275rp='Where do you keep publicly executable scripts?'
7276. ./getfile
7277if $test "X$ansexp" != "X$scriptdirexp"; then
7278 installscript=''
7279fi
7280scriptdir="$ans"
7281scriptdirexp="$ansexp"
dd4e71fd
JH
7282: Change installation prefix, if necessary.
7283if $test X"$prefix" != X"$installprefix"; then
ec897fb9 7284 installscript=`echo $scriptdirexp | sed "s#^$prefix#$installprefix#"`
dd4e71fd
JH
7285else
7286 installscript="$scriptdirexp"
7287fi
dc45a647 7288
717c4fcc
JH
7289: determine where add-on public executables go
7290case "$sitebin" in
7291'') dflt=$siteprefix/bin ;;
49c10eea 7292*) dflt=$sitebin ;;
717c4fcc
JH
7293esac
7294fn=d~
7295rp='Pathname where the add-on public executables should be installed?'
7296. ./getfile
7297sitebin="$ans"
7298sitebinexp="$ansexp"
7299: Change installation prefix, if necessary.
7300if $test X"$prefix" != X"$installprefix"; then
7301 installsitebin=`echo $sitebinexp | sed "s#^$prefix#$installprefix#"`
7302else
7303 installsitebin="$sitebinexp"
7304fi
7305
43999f95
JH
7306: see if sqrtl exists
7307set sqrtl d_sqrtl
7308eval $inlibc
7309
d7d93a81
JH
7310case "$ccflags" in
7311*-DUSE_LONG_DOUBLE*|*-DUSE_MORE_BITS*) uselongdouble="$define" ;;
7312esac
7313
b0ce926a
JH
7314case "$uselongdouble" in
7315$define|true|[yY]*) dflt='y';;
7316*) dflt='n';;
7317esac
0f0995ae
JH
7318cat <<EOM
7319
7320Perl can be built to take advantage of long doubles which
7321(if available) may give more accuracy and range for floating point numbers.
7322
7323If this doesn't make any sense to you, just accept the default '$dflt'.
7324EOM
b0ce926a
JH
7325rp='Try to use long doubles if available?'
7326. ./myread
7327case "$ans" in
309d43cf
JH
7328y|Y) val="$define" ;;
7329*) val="$undef" ;;
b0ce926a
JH
7330esac
7331set uselongdouble
7332eval $setvar
7333
d9b3e12d 7334case "$uselongdouble" in
d7d93a81
JH
7335true|[yY]*) uselongdouble="$define" ;;
7336esac
7337
7338case "$uselongdouble" in
7339$define)
d9b3e12d
JH
7340: Look for a hint-file generated 'call-back-unit'. If the
7341: user has specified that long doubles should be used,
7342: we may need to set or change some other defaults.
7343 if $test -f uselongdouble.cbu; then
7344 echo "Your platform has some specific hints for long doubles, using them..."
7345 . ./uselongdouble.cbu
7346 else
7347 $cat <<EOM
7348(Your platform doesn't have any specific hints for long doubles.)
7349EOM
7350 fi
7351 ;;
7352esac
b0ce926a 7353
43999f95
JH
7354case "$uselongdouble:$d_sqrtl" in
7355$define:$undef)
7356 $cat <<EOM >&4
7357
3d68f8d4
JH
7358*** You requested the use of long doubles but you do not seem to have
7359*** the mathematic functions for long doubles. I'm disabling the use
7360*** of long doubles.
7361
43999f95
JH
7362EOM
7363 uselongdouble=$undef
7364 ;;
7365esac
7366
0f0995ae
JH
7367case "$useperlio" in
7368$define|true|[yY]*) dflt='y';;
7369*) dflt='n';;
7370esac
d7d93a81
JH
7371cat <<EOM
7372
85aff577
CS
7373Previous version of $package used the standard IO mechanisms as defined
7374in <stdio.h>. Versions 5.003_02 and later of perl allow alternate IO
2afac517 7375mechanisms via a "PerlIO" abstraction, but the stdio mechanism is still
85aff577
CS
7376the default. This abstraction layer can use AT&T's sfio (if you already
7377have sfio installed) or regular stdio. Using PerlIO with sfio may cause
7378problems with some extension modules. Using PerlIO with stdio is safe,
7379but it is slower than plain stdio and therefore is not the default.
2afac517 7380
0f0995ae 7381If this doesn't make any sense to you, just accept the default '$dflt'.
2afac517 7382EOM
2afac517 7383rp='Use the experimental PerlIO abstraction layer?'
7384. ./myread
7385case "$ans" in
7386y|Y)
7387 val="$define"
7388 ;;
7389*)
7390 echo "Ok, doing things the stdio way"
7391 val="$undef"
7392 ;;
7393esac
7394set useperlio
7395eval $setvar
2304df62 7396
717c4fcc
JH
7397case "$vendorprefix" in
7398'') d_vendorbin="$undef"
7399 vendorbin=''
7400 vendorbinexp=''
7401 ;;
7402*) d_vendorbin="$define"
7403 : determine where vendor-supplied executables go.
49c10eea
JH
7404 case "$vendorbin" in
7405 '') dflt=$vendorprefix/bin ;;
7406 *) dflt="$vendorbin" ;;
7407 esac
717c4fcc
JH
7408 fn=d~+
7409 rp='Pathname for the vendor-supplied executables directory?'
7410 . ./getfile
7411 vendorbin="$ans"
7412 vendorbinexp="$ansexp"
717c4fcc
JH
7413 ;;
7414esac
49c10eea
JH
7415: Change installation prefix, if necessary.
7416if $test X"$prefix" != X"$installprefix"; then
7417 installvendorbin=`echo $vendorbinexp | $sed "s#^$prefix#$installprefix#"`
7418else
7419 installvendorbin="$vendorbinexp"
7420fi
717c4fcc 7421
bbe6c963
JH
7422: see if qgcvt exists
7423set qgcvt d_qgcvt
7424eval $inlibc
7425
628e1a40
JH
7426: check for length of double
7427echo " "
7428case "$doublesize" in
7429'')
49c10eea 7430 echo "Checking to see how big your double precision numbers are..." >&4
628e1a40
JH
7431 $cat >try.c <<'EOCP'
7432#include <stdio.h>
7433int main()
7434{
7435 printf("%d\n", (int)sizeof(double));
7436 exit(0);
7437}
7438EOCP
7439 set try
7440 if eval $compile_ok; then
7441 doublesize=`./try`
49c10eea 7442 echo "Your double is $doublesize bytes long."
628e1a40
JH
7443 else
7444 dflt='8'
7445 echo "(I can't seem to compile the test program. Guessing...)"
7446 rp="What is the size of a double precision number (in bytes)?"
7447 . ./myread
7448 doublesize="$ans"
7449 fi
7450 ;;
7451esac
7452$rm -f try.c try
7453
7454: check for long doubles
7455echo " "
c5f05a91 7456echo "Checking to see if you have long double..." >&4
628e1a40
JH
7457echo 'int main() { long double x = 7.0; }' > try.c
7458set try
7459if eval $compile; then
7460 val="$define"
ce65dbcf 7461 echo "You have long double."
628e1a40
JH
7462else
7463 val="$undef"
ce65dbcf 7464 echo "You do not have long double."
628e1a40
JH
7465fi
7466$rm try.*
7467set d_longdbl
7468eval $setvar
7469
7470: check for length of long double
7471case "${d_longdbl}${longdblsize}" in
7472$define)
7473 echo " "
49c10eea 7474 echo "Checking to see how big your long doubles are..." >&4
628e1a40
JH
7475 $cat >try.c <<'EOCP'
7476#include <stdio.h>
7477int main()
7478{
7479 printf("%d\n", sizeof(long double));
7480}
7481EOCP
7482 set try
7483 set try
7484 if eval $compile; then
7485 longdblsize=`./try$exe_ext`
49c10eea 7486 echo "Your long doubles are $longdblsize bytes long."
628e1a40
JH
7487 else
7488 dflt='8'
7489 echo " "
7490 echo "(I can't seem to compile the test program. Guessing...)" >&4
7491 rp="What is the size of a long double (in bytes)?"
7492 . ./myread
7493 longdblsize="$ans"
7494 fi
7495 if $test "X$doublesize" = "X$longdblsize"; then
7496 echo "(That isn't any different from an ordinary double.)"
7497 fi
7498 ;;
7499esac
7500$rm -f try.* try
ff935051 7501
cf2093f6
JH
7502echo " "
7503
ea1c3b15 7504if $test X"$d_longdbl" = X"$define"; then
cf2093f6
JH
7505
7506echo "Checking how to print long doubles..." >&4
7507
7508if $test X"$sPRIfldbl" = X -a X"$doublesize" = X"$longdblsize"; then
7509 $cat >try.c <<'EOCP'
7510#include <sys/types.h>
7511#include <stdio.h>
7512int main() {
7513 double d = 123.456;
7514 printf("%.3f\n", d);
7515}
7516EOCP
7517 set try
7518 if eval $compile; then
7519 yyy=`./try$exe_ext`
7520 case "$yyy" in
7521 123.456)
7522 sPRIfldbl='"f"'; sPRIgldbl='"g"'; sPRIeldbl='"e"';
7523 sPRIFldbl='"F"'; sPRIGldbl='"G"'; sPRIEldbl='"E"';
7524 echo "We will use %f."
7525 ;;
7526 esac
7527 fi
7528fi
7529
7530if $test X"$sPRIfldbl" = X; then
7531 $cat >try.c <<'EOCP'
7532#include <sys/types.h>
7533#include <stdio.h>
7534int main() {
7535 long double d = 123.456;
ea1c3b15 7536 printf("%.3llf\n", d);
cf2093f6
JH
7537}
7538EOCP
7539 set try
7540 if eval $compile; then
7541 yyy=`./try$exe_ext`
7542 case "$yyy" in
7543 123.456)
ea1c3b15
JH
7544 sPRIfldbl='"llf"'; sPRIgldbl='"llg"'; sPRIeldbl='"lle"';
7545 sPRIFldbl='"llF"'; sPRIGldbl='"llG"'; sPRIEldbl='"llE"';
7546 echo "We will use %llf."
cf2093f6
JH
7547 ;;
7548 esac
7549 fi
7550fi
7551
7552if $test X"$sPRIfldbl" = X; then
7553 $cat >try.c <<'EOCP'
7554#include <sys/types.h>
7555#include <stdio.h>
7556int main() {
7557 long double d = 123.456;
ea1c3b15 7558 printf("%.3Lf\n", d);
cf2093f6
JH
7559}
7560EOCP
7561 set try
7562 if eval $compile; then
7563 yyy=`./try$exe_ext`
7564 case "$yyy" in
7565 123.456)
ea1c3b15
JH
7566 sPRIfldbl='"Lf"'; sPRIgldbl='"Lg"'; sPRIeldbl='"Le"';
7567 sPRIFldbl='"LF"'; sPRIGldbl='"LG"'; sPRIEldbl='"LE"';
7568 echo "We will use %Lf."
cf2093f6
JH
7569 ;;
7570 esac
7571 fi
7572fi
7573
11dc3f68 7574if $test X"$sPRIfldbl" = X; then
cf2093f6
JH
7575 $cat >try.c <<'EOCP'
7576#include <sys/types.h>
7577#include <stdio.h>
7578int main() {
7579 long double d = 123.456;
ea1c3b15 7580 printf("%.3lf\n", d);
cf2093f6
JH
7581}
7582EOCP
7583 set try
7584 if eval $compile; then
7585 yyy=`./try$exe_ext`
7586 case "$yyy" in
7587 123.456)
ea1c3b15
JH
7588 sPRIfldbl='"lf"'; sPRIgldbl='"lg"'; sPRIeldbl='"le"';
7589 sPRIFldbl='"lF"'; sPRIGldbl='"lG"'; sPRIEldbl='"lE"';
7590 echo "We will use %lf."
cf2093f6
JH
7591 ;;
7592 esac
7593 fi
7594fi
7595
09e3ef00
JH
7596if $test X"$sPRIfldbl" = X; then
7597 echo "Cannot figure out how to print long doubles." >&4
7598fi
7599
ea1c3b15 7600$rm -f try try.*
cf2093f6 7601
ea1c3b15 7602fi # d_longdbl
cf2093f6
JH
7603
7604case "$sPRIfldbl" in
7605'') d_PRIfldbl="$undef"; d_PRIgldbl="$undef"; d_PRIeldbl="$undef";
7606 d_PRIFldbl="$undef"; d_PRIGldbl="$undef"; d_PRIEldbl="$undef";
7607 ;;
7608*) d_PRIfldbl="$define"; d_PRIgldbl="$define"; d_PRIeldbl="$define";
7609 d_PRIFldbl="$define"; d_PRIGldbl="$define"; d_PRIEldbl="$define";
7610 ;;
7611esac
7612
bbe6c963
JH
7613: Check how to convert floats to strings.
7614if test "X$d_Gconvert" = X; then
7615 echo " "
7616 echo "Checking for an efficient way to convert floats to strings."
7617 echo " " > try.c
7618 case "$uselongdouble" in
7619 "$define") echo "#define USE_LONG_DOUBLE" >>try.c ;;
7620 esac
7621 case "$d_longdbl" in
7622 "$define") echo "#define HAS_LONG_DOUBLE" >>try.c ;;
7623 esac
7624 case "$d_PRIgldbl" in
7625 "$define") echo "#define HAS_PRIgldbl" >>try.c ;;
7626 esac
7627 $cat >>try.c <<EOP
7628#ifdef TRY_gconvert
7629#define Gconvert(x,n,t,b) gconvert((x),(n),(t),(b))
7630char *myname = "gconvert";
7631#endif
7632#ifdef TRY_gcvt
7633#define Gconvert(x,n,t,b) gcvt((x),(n),(b))
7634char *myname = "gcvt";
7635#endif
7636#ifdef TRY_qgcvt
7637#define Gconvert(x,n,t,b) qgcvt((x),(n),(b))
7638char *myname = "qgcvt";
7639#define DOUBLETYPE long double
7640#endif
7641#ifdef TRY_sprintf
7642#if defined(USE_LONG_DOUBLE) && defined(HAS_LONG_DOUBLE) && defined(HAS_PRIgldbl)
7643#define Gconvert(x,n,t,b) sprintf((b),"%.*"$sPRIgldbl,(n),(x))
7644#else
7645#define Gconvert(x,n,t,b) sprintf((b),"%.*g",(n),(x))
7646#endif
7647char *myname = "sprintf";
7648#endif
7649
7650#ifndef DOUBLETYPE
7651#if defined(USE_LONG_DOUBLE) && defined(HAS_LONG_DOUBLE)
7652#define DOUBLETYPE long double
7653#else
7654#define DOUBLETYPE double
7655#endif
7656#endif
7657
7658#include <stdio.h>
7659
7660#define I_STDLIB $i_stdlib
7661#ifdef I_STDLIB
7662#include <stdlib.h>
7663#endif
7664
7665int
7666checkit(expect, got)
7667char *expect;
7668char *got;
7669{
7670 if (strcmp(expect, got)) {
7671 printf("%s oddity: Expected %s, got %s\n",
7672 myname, expect, got);
7673 exit(1);
7674 }
7675}
7676
7677int main()
7678{
7679 char buf[64];
7680 buf[63] = '\0';
7681
7682 /* This must be 1st test on (which?) platform */
7683 /* Alan Burlison <AlanBurlsin@unn.unisys.com> */
7684 Gconvert((DOUBLETYPE)0.1, 8, 0, buf);
7685 checkit("0.1", buf);
7686
7687 Gconvert((DOUBLETYPE)1.0, 8, 0, buf);
7688 checkit("1", buf);
7689
7690 Gconvert((DOUBLETYPE)1.1, 8, 0, buf);
7691 checkit("1.1", buf);
7692
7693 Gconvert((DOUBLETYPE)1.01, 8, 0, buf);
7694 checkit("1.01", buf);
7695
7696 Gconvert((DOUBLETYPE)1.001, 8, 0, buf);
7697 checkit("1.001", buf);
7698
7699 Gconvert((DOUBLETYPE)1.0001, 8, 0, buf);
7700 checkit("1.0001", buf);
7701
7702 Gconvert((DOUBLETYPE)1.00001, 8, 0, buf);
7703 checkit("1.00001", buf);
7704
7705 Gconvert((DOUBLETYPE)1.000001, 8, 0, buf);
7706 checkit("1.000001", buf);
7707
7708 Gconvert((DOUBLETYPE)0.0, 8, 0, buf);
7709 checkit("0", buf);
7710
7711 Gconvert((DOUBLETYPE)-1.0, 8, 0, buf);
7712 checkit("-1", buf);
7713
7714 /* Some Linux gcvt's give 1.e+5 here. */
7715 Gconvert((DOUBLETYPE)100000.0, 8, 0, buf);
7716 checkit("100000", buf);
7717
7718 /* Some Linux gcvt's give -1.e+5 here. */
7719 Gconvert((DOUBLETYPE)-100000.0, 8, 0, buf);
7720 checkit("-100000", buf);
7721
7722 exit(0);
7723}
7724EOP
7725 case "$d_Gconvert" in
7726 gconvert*) xxx_list='gconvert gcvt sprintf' ;;
7727 gcvt*) xxx_list='gcvt gconvert sprintf' ;;
7728 sprintf*) xxx_list='sprintf gconvert gcvt' ;;
7729 *) xxx_list='gconvert gcvt sprintf' ;;
7730 esac
7731
7732 case "$d_longdbl$uselongdouble$d_qgcvt" in
7733 "$define$define$define") xxx_list="`echo $xxx_list|sed 's/gcvt/qgcvt gcvt/'`" ;;
7734 esac
7735
7736 for xxx_convert in $xxx_list; do
7737 echo "Trying $xxx_convert..."
7738 $rm -f try try$_o
7739 set try -DTRY_$xxx_convert
7740 if eval $compile; then
7741 echo "$xxx_convert() found." >&4
7742 if ./try; then
7743 echo "I'll use $xxx_convert to convert floats into a string." >&4
7744 break;
7745 else
7746 echo "...But $xxx_convert didn't work as I expected."
7747 fi
7748 else
7749 echo "$xxx_convert NOT found." >&4
7750 fi
7751 done
7752
7753 case "$xxx_convert" in
7754 gconvert) d_Gconvert='gconvert((x),(n),(t),(b))' ;;
7755 gcvt) d_Gconvert='gcvt((x),(n),(b))' ;;
7756 qgcvt) d_Gconvert='qgcvt((x),(n),(b))' ;;
7757 *) case "$uselongdouble$d_longdbl$d_PRIgldbl" in
7758 "$define$define$define")
7759 d_Gconvert="sprintf((b),\"%.*$sPRIgldbl\",(n),(x))" ;;
7760 *) d_Gconvert='sprintf((b),"%.*g",(n),(x))' ;;
7761 esac
7762 ;;
7763 esac
7764fi
7765
a0d0e21e
LW
7766: Initialize h_fcntl
7767h_fcntl=false
7768
7769: Initialize h_sysfile
7770h_sysfile=false
2304df62 7771
2304df62
AD
7772: access call always available on UNIX
7773set access d_access
7774eval $inlibc
7775
7776: locate the flags for 'access()'
7777case "$d_access" in
7778"$define")
7779 echo " "
7780 $cat >access.c <<'EOCP'
7781#include <sys/types.h>
7782#ifdef I_FCNTL
7783#include <fcntl.h>
7784#endif
7785#ifdef I_SYS_FILE
7786#include <sys/file.h>
7787#endif
7788#ifdef I_UNISTD
7789#include <unistd.h>
7790#endif
d674cd6d 7791int main() {
2304df62
AD
7792 exit(R_OK);
7793}
8e07c86e
AD
7794EOCP
7795 : check sys/file.h first, no particular reason here
7796 if $test `./findhdr sys/file.h` && \
dfe9444c 7797 $cc $cppflags -DI_SYS_FILE -o access access.c >/dev/null 2>&1 ; then
8e07c86e
AD
7798 h_sysfile=true;
7799 echo "<sys/file.h> defines the *_OK access constants." >&4
7800 elif $test `./findhdr fcntl.h` && \
dfe9444c 7801 $cc $cppflags -DI_FCNTL -o access access.c >/dev/null 2>&1 ; then
8e07c86e
AD
7802 h_fcntl=true;
7803 echo "<fcntl.h> defines the *_OK access constants." >&4
7804 elif $test `./findhdr unistd.h` && \
dfe9444c 7805 $cc $cppflags -DI_UNISTD -o access access.c >/dev/null 2>&1 ; then
8e07c86e
AD
7806 echo "<unistd.h> defines the *_OK access constants." >&4
7807 else
7808 echo "I can't find the four *_OK access constants--I'll use mine." >&4
7809 fi
7810 ;;
7811esac
7812$rm -f access*
a0d0e21e 7813
5ff3f7a4
GS
7814: see if accessx exists
7815set accessx d_accessx
7816eval $inlibc
7817
8e07c86e
AD
7818: see if alarm exists
7819set alarm d_alarm
7820eval $inlibc
2304df62 7821
cf2093f6
JH
7822: see if atolf exists
7823set atolf d_atolf
7824eval $inlibc
7825
7826: see if atoll exists
7827set atoll d_atoll
7828eval $inlibc
7829
ecfc5424 7830: Look for GNU-cc style attribute checking
2304df62 7831echo " "
a0d0e21e
LW
7832echo "Checking whether your compiler can handle __attribute__ ..." >&4
7833$cat >attrib.c <<'EOCP'
1aef975c 7834#include <stdio.h>
ecfc5424 7835void croak (char* pat,...) __attribute__((format(printf,1,2),noreturn));
a0d0e21e
LW
7836EOCP
7837if $cc $ccflags -c attrib.c >attrib.out 2>&1 ; then
7838 if $contains 'warning' attrib.out >/dev/null 2>&1; then
ecfc5424 7839 echo "Your C compiler doesn't fully support __attribute__."
a0d0e21e
LW
7840 val="$undef"
7841 else
ecfc5424 7842 echo "Your C compiler supports __attribute__."
a0d0e21e
LW
7843 val="$define"
7844 fi
7845else
ecfc5424 7846 echo "Your C compiler doesn't seem to understand __attribute__ at all."
a0d0e21e
LW
7847 val="$undef"
7848fi
ecfc5424 7849set d_attribut
a0d0e21e
LW
7850eval $setvar
7851$rm -f attrib*
7852
7853: see if bcmp exists
7854set bcmp d_bcmp
7855eval $inlibc
7856
7857: see if bcopy exists
7858set bcopy d_bcopy
7859eval $inlibc
7860
2afac517 7861: see if this is a unistd.h system
7862set unistd.h i_unistd
7863eval $inhdr
7864
7865: see if getpgrp exists
7866set getpgrp d_getpgrp
7867eval $inlibc
7868
2afac517 7869case "$d_getpgrp" in
7870"$define")
7871 echo " "
dfe9444c 7872 echo "Checking to see which flavor of getpgrp is in use..."
2afac517 7873 $cat >set.c <<EOP
7874#$i_unistd I_UNISTD
7875#include <sys/types.h>
7876#ifdef I_UNISTD
7877# include <unistd.h>
7878#endif
5a411a32 7879int main()
2afac517 7880{
7881 if (getuid() == 0) {
7882 printf("(I see you are running Configure as super-user...)\n");
7883 setuid(1);
7884 }
7885#ifdef TRY_BSD_PGRP
7886 if (getpgrp(1) == 0)
7887 exit(0);
7888#else
7889 if (getpgrp() > 0)
7890 exit(0);
7891#endif
7892 exit(1);
7893}
7894EOP
7895 if $cc -DTRY_BSD_PGRP $ccflags $ldflags -o set set.c $libs >/dev/null 2>&1 && ./set; then
7896 echo "You have to use getpgrp(pid) instead of getpgrp()." >&4
7897 val="$define"
7898 elif $cc $ccflags $ldflags -o set set.c $libs >/dev/null 2>&1 && ./set; then
7899 echo "You have to use getpgrp() instead of getpgrp(pid)." >&4
7900 val="$undef"
7901 else
7902 echo "I can't seem to compile and run the test program."
7903 if ./usg; then
7904 xxx="a USG one, i.e. you use getpgrp()."
7905 else
7906 # SVR4 systems can appear rather BSD-ish.
7907 case "$i_unistd" in
7908 $undef)
7909 xxx="a BSD one, i.e. you use getpgrp(pid)."
7910 val="$define"
7911 ;;
7912 $define)
7913 xxx="probably a USG one, i.e. you use getpgrp()."
7914 val="$undef"
7915 ;;
7916 esac
7917 fi
7918 echo "Assuming your getpgrp is $xxx" >&4
7919 fi
7920 ;;
7921*) val="$undef";;
7922esac
7923set d_bsdgetpgrp
7924eval $setvar
7925$rm -f set set.c
7926
a0d0e21e
LW
7927: see if setpgrp exists
7928set setpgrp d_setpgrp
7929eval $inlibc
7930
a0d0e21e
LW
7931case "$d_setpgrp" in
7932"$define")
7933 echo " "
dfe9444c 7934 echo "Checking to see which flavor of setpgrp is in use..."
a0d0e21e 7935 $cat >set.c <<EOP
2afac517 7936#$i_unistd I_UNISTD
7937#include <sys/types.h>
7938#ifdef I_UNISTD
7939# include <unistd.h>
7940#endif
5a411a32 7941int main()
a0d0e21e
LW
7942{
7943 if (getuid() == 0) {
7944 printf("(I see you are running Configure as super-user...)\n");
7945 setuid(1);
7946 }
2afac517 7947#ifdef TRY_BSD_PGRP
a0d0e21e 7948 if (-1 == setpgrp(1, 1))
2afac517 7949 exit(0);
7950#else
7951 if (setpgrp() != -1)
7952 exit(0);
7953#endif
7954 exit(1);
a0d0e21e
LW
7955}
7956EOP
2afac517 7957 if $cc -DTRY_BSD_PGRP $ccflags $ldflags -o set set.c $libs >/dev/null 2>&1 && ./set; then
7958 echo 'You have to use setpgrp(pid,pgrp) instead of setpgrp().' >&4
7959 val="$define"
7960 elif $cc $ccflags $ldflags -o set set.c $libs >/dev/null 2>&1 && ./set; then
7961 echo 'You have to use setpgrp() instead of setpgrp(pid,pgrp).' >&4
7962 val="$undef"
a0d0e21e 7963 else
dfe9444c 7964 echo "(I can't seem to compile and run the test program.)"
ecfc5424 7965 if ./usg; then
2afac517 7966 xxx="a USG one, i.e. you use setpgrp()."
a0d0e21e 7967 else
2afac517 7968 # SVR4 systems can appear rather BSD-ish.
7969 case "$i_unistd" in
7970 $undef)
7971 xxx="a BSD one, i.e. you use setpgrp(pid,pgrp)."
7972 val="$define"
7973 ;;
7974 $define)
7975 xxx="probably a USG one, i.e. you use setpgrp()."
7976 val="$undef"
7977 ;;
7978 esac
a0d0e21e 7979 fi
2afac517 7980 echo "Assuming your setpgrp is $xxx" >&4
a0d0e21e
LW
7981 fi
7982 ;;
7983*) val="$undef";;
7984esac
2afac517 7985set d_bsdsetpgrp
a0d0e21e
LW
7986eval $setvar
7987$rm -f set set.c
a0d0e21e
LW
7988: see if bzero exists
7989set bzero d_bzero
7990eval $inlibc
7991
ecfc5424 7992: see if signal is declared as pointer to function returning int or void
a0d0e21e 7993echo " "
ecfc5424
AD
7994xxx=`./findhdr signal.h`
7995$test "$xxx" && $cppstdin $cppminus $cppflags < $xxx >$$.tmp 2>/dev/null
7996if $contains 'int.*\*[ ]*signal' $$.tmp >/dev/null 2>&1 ; then
7997 echo "You have int (*signal())() instead of void." >&4
7998 val="$undef"
7999elif $contains 'void.*\*[ ]*signal' $$.tmp >/dev/null 2>&1 ; then
dfe9444c 8000 echo "You have void (*signal())()." >&4
ecfc5424
AD
8001 val="$define"
8002elif $contains 'extern[ ]*[(\*]*signal' $$.tmp >/dev/null 2>&1 ; then
8003 echo "You have int (*signal())() instead of void." >&4
8004 val="$undef"
dfe9444c
AD
8005elif $contains 'void.*\*.*sig' $$.tmp >/dev/null 2>&1 ; then
8006 echo "You have void (*signal())()." >&4
8007 val="$define"
a0d0e21e 8008else
ecfc5424
AD
8009 case "$d_voidsig" in
8010 '')
8011 echo "I can't determine whether signal handler returns void or int..." >&4
8012 dflt=void
8013 rp="What type does your signal handler return?"
8014 . ./myread
8015 case "$ans" in
8016 v*) val="$define";;
8017 *) val="$undef";;
8018 esac;;
8019 "$define")
dfe9444c
AD
8020 echo "As you already told me, signal handler returns void." >&4
8021 val="$define"
8022 ;;
8023 *) echo "As you already told me, signal handler returns int." >&4
8024 val="$undef"
8025 ;;
ecfc5424
AD
8026 esac
8027fi
8028set d_voidsig
8029eval $setvar
8030case "$d_voidsig" in
8031"$define") signal_t="void";;
8032*) signal_t="int";;
8033esac
8034$rm -f $$.tmp
8035
8036: check for ability to cast large floats to 32-bit ints.
8037echo " "
8038echo 'Checking whether your C compiler can cast large floats to int32.' >&4
e5c9fcd0 8039if $test "$intsize" -ge 4; then
ecfc5424
AD
8040 xxx=int
8041else
8042 xxx=long
8043fi
8044$cat >try.c <<EOCP
e5c9fcd0 8045#include <stdio.h>
ecfc5424
AD
8046#include <sys/types.h>
8047#include <signal.h>
a1896f58 8048$signal_t blech(s) int s; { exit(3); }
d674cd6d 8049int main()
2304df62 8050{
a0d0e21e 8051 $xxx i32;
e5c9fcd0 8052 double f, g;
2304df62 8053 int result = 0;
89434db5 8054 char str[16];
2304df62
AD
8055 signal(SIGFPE, blech);
8056
89434db5
AD
8057 /* Don't let compiler optimize the test away. Store the number
8058 in a writable string for gcc to pass to sscanf under HP/UX.
8059 */
8060 sprintf(str, "2147483647");
8061 sscanf(str, "%lf", &f); /* f = (double) 0x7fffffff; */
e5c9fcd0
AD
8062 g = 10 * f;
8063 i32 = ($xxx) g;
2304df62 8064
e5c9fcd0
AD
8065 /* x86 processors will probably give 0x8000 0000, which is a
8066 sign change. We don't want that. We want to mimic SPARC
8067 behavior here, which is to preserve the sign and give
8068 back 0x7fff ffff.
8069 */
a0d0e21e 8070 if (i32 != ($xxx) f)
2304df62
AD
8071 result |= 1;
8072 exit(result);
8073}
8074EOCP
dfe9444c 8075set try
dc45a647 8076if eval $compile_ok; then
2304df62
AD
8077 ./try
8078 yyy=$?
8079else
a0d0e21e 8080 echo "(I can't seem to compile the test program--assuming it can't)"
2304df62
AD
8081 yyy=1
8082fi
8083case "$yyy" in
80840) val="$define"
8085 echo "Yup, it can."
8086 ;;
8087*) val="$undef"
8088 echo "Nope, it can't."
8089 ;;
8090esac
8091set d_casti32
8092eval $setvar
85e6fe83 8093$rm -f try try.*
a0d0e21e 8094
2304df62
AD
8095: check for ability to cast negative floats to unsigned
8096echo " "
8097echo 'Checking whether your C compiler can cast negative float to unsigned.' >&4
ecfc5424 8098$cat >try.c <<EOCP
e5c9fcd0 8099#include <stdio.h>
ecfc5424 8100#include <sys/types.h>
2304df62 8101#include <signal.h>
a1896f58
AD
8102$signal_t blech(s) int s; { exit(7); }
8103$signal_t blech_in_list(s) int s; { exit(4); }
232e078e
AD
8104unsigned long dummy_long(p) unsigned long p; { return p; }
8105unsigned int dummy_int(p) unsigned int p; { return p; }
8106unsigned short dummy_short(p) unsigned short p; { return p; }
d674cd6d 8107int main()
2304df62 8108{
e5c9fcd0 8109 double f;
2304df62
AD
8110 unsigned long along;
8111 unsigned int aint;
8112 unsigned short ashort;
8113 int result = 0;
89434db5
AD
8114 char str[16];
8115
e5c9fcd0
AD
8116 /* Frustrate gcc-2.7.2's optimizer which failed this test with
8117 a direct f = -123. assignment. gcc-2.8.0 reportedly
8118 optimized the whole file away
8119 */
89434db5
AD
8120 /* Store the number in a writable string for gcc to pass to
8121 sscanf under HP/UX.
8122 */
8123 sprintf(str, "-123");
8124 sscanf(str, "%lf", &f); /* f = -123.; */
2304df62
AD
8125
8126 signal(SIGFPE, blech);
8127 along = (unsigned long)f;
8128 aint = (unsigned int)f;
8129 ashort = (unsigned short)f;
8130 if (along != (unsigned long)-123)
8131 result |= 1;
8132 if (aint != (unsigned int)-123)
8133 result |= 1;
8134 if (ashort != (unsigned short)-123)
8135 result |= 1;
89434db5
AD
8136 sprintf(str, "1073741824.");
8137 sscanf(str, "%lf", &f); /* f = (double)0x40000000; */
2304df62
AD
8138 f = f + f;
8139 along = 0;
8140 along = (unsigned long)f;
8141 if (along != 0x80000000)
8142 result |= 2;
8143 f -= 1.;
8144 along = 0;
8145 along = (unsigned long)f;
8146 if (along != 0x7fffffff)
8147 result |= 1;
8148 f += 2.;
8149 along = 0;
8150 along = (unsigned long)f;
8151 if (along != 0x80000001)
8152 result |= 2;
232e078e
AD
8153 if (result)
8154 exit(result);
8155 signal(SIGFPE, blech_in_list);
89434db5
AD
8156 sprintf(str, "123.");
8157 sscanf(str, "%lf", &f); /* f = 123.; */
232e078e
AD
8158 along = dummy_long((unsigned long)f);
8159 aint = dummy_int((unsigned int)f);
8160 ashort = dummy_short((unsigned short)f);
8161 if (along != (unsigned long)123)
8162 result |= 4;
8163 if (aint != (unsigned int)123)
8164 result |= 4;
8165 if (ashort != (unsigned short)123)
8166 result |= 4;
2304df62
AD
8167 exit(result);
8168
8169}
8170EOCP
dfe9444c 8171set try
dc45a647 8172if eval $compile_ok; then
2304df62
AD
8173 ./try
8174 castflags=$?
8175else
ecfc5424 8176 echo "(I can't seem to compile the test program--assuming it can't)"
232e078e 8177 castflags=7
2304df62
AD
8178fi
8179case "$castflags" in
81800) val="$define"
8181 echo "Yup, it can."
8182 ;;
8183*) val="$undef"
8184 echo "Nope, it can't."
8185 ;;
8186esac
8187set d_castneg
8188eval $setvar
8189$rm -f try.*
8190
2304df62
AD
8191: see if vprintf exists
8192echo " "
8193if set vprintf val -f d_vprintf; eval $csym; $val; then
8194 echo 'vprintf() found.' >&4
8195 val="$define"
8196 $cat >vprintf.c <<'EOF'
8197#include <varargs.h>
8198
d674cd6d 8199int main() { xxx("foo"); }
2304df62
AD
8200
8201xxx(va_alist)
8202va_dcl
8203{
8204 va_list args;
8205 char buf[10];
8206
8207 va_start(args);
8208 exit((unsigned long)vsprintf(buf,"%s",args) > 10L);
8209}
8210EOF
dfe9444c
AD
8211 set vprintf
8212 if eval $compile && ./vprintf; then
2304df62
AD
8213 echo "Your vsprintf() returns (int)." >&4
8214 val2="$undef"
8215 else
8216 echo "Your vsprintf() returns (char*)." >&4
8217 val2="$define"
8218 fi
8219else
8220 echo 'vprintf() NOT found.' >&4
8221 val="$undef"
8222 val2="$undef"
8223fi
8224set d_vprintf
8225eval $setvar
8226val=$val2
8227set d_charvspr
8228eval $setvar
8229
a0d0e21e
LW
8230: see if chown exists
8231set chown d_chown
8232eval $inlibc
8233
8234: see if chroot exists
8235set chroot d_chroot
8236eval $inlibc
8237
2304df62
AD
8238: see if chsize exists
8239set chsize d_chsize
8240eval $inlibc
8241
8242: check for const keyword
8243echo " "
8244echo 'Checking to see if your C compiler knows about "const"...' >&4
8245$cat >const.c <<'EOCP'
8246typedef struct spug { int drokk; } spug;
5a411a32 8247int main()
2304df62
AD
8248{
8249 const char *foo;
8250 const spug y;
8251}
8252EOCP
8253if $cc -c $ccflags const.c >/dev/null 2>&1 ; then
8254 val="$define"
8255 echo "Yup, it does."
8256else
8257 val="$undef"
8258 echo "Nope, it doesn't."
8259fi
8260set d_const
8261eval $setvar
8262
8263: see if crypt exists
8264echo " "
8265if set crypt val -f d_crypt; eval $csym; $val; then
8266 echo 'crypt() found.' >&4
8267 val="$define"
8268 cryptlib=''
8269else
dfe9444c 8270 cryptlib=`./loc Slibcrypt$_a "" $xlibpth`
2304df62 8271 if $test -z "$cryptlib"; then
dfe9444c 8272 cryptlib=`./loc Mlibcrypt$_a "" $xlibpth`
2304df62
AD
8273 else
8274 cryptlib=-lcrypt
8275 fi
8276 if $test -z "$cryptlib"; then
dfe9444c 8277 cryptlib=`./loc Llibcrypt$_a "" $xlibpth`
2304df62
AD
8278 else
8279 cryptlib=-lcrypt
8280 fi
8281 if $test -z "$cryptlib"; then
dfe9444c 8282 cryptlib=`./loc libcrypt$_a "" $libpth`
2304df62
AD
8283 else
8284 cryptlib=-lcrypt
8285 fi
8286 if $test -z "$cryptlib"; then
8287 echo 'crypt() NOT found.' >&4
8288 val="$undef"
8289 else
8290 val="$define"
8291 fi
8292fi
8293set d_crypt
8294eval $setvar
8295
921b2963
JH
8296: get csh whereabouts
8297case "$csh" in
8298'csh') val="$undef" ;;
8299*) val="$define" ;;
8300esac
8301set d_csh
8302eval $setvar
8303: Respect a hint or command line value for full_csh.
8304case "$full_csh" in
8305'') full_csh=$csh ;;
8306esac
8307
a0d0e21e
LW
8308: see if cuserid exists
8309set cuserid d_cuserid
2304df62
AD
8310eval $inlibc
8311
a0d0e21e
LW
8312: see if this is a limits.h system
8313set limits.h i_limits
85e6fe83
LW
8314eval $inhdr
8315
a0d0e21e
LW
8316: see if this is a float.h system
8317set float.h i_float
8318eval $inhdr
8319
8320: See if number of significant digits in a double precision number is known
8321echo " "
8322$cat >dbl_dig.c <<EOM
8323#$i_limits I_LIMITS
8324#$i_float I_FLOAT
8325#ifdef I_LIMITS
8326#include <limits.h>
85e6fe83 8327#endif
a0d0e21e
LW
8328#ifdef I_FLOAT
8329#include <float.h>
8330#endif
8331#ifdef DBL_DIG
8332printf("Contains DBL_DIG");
85e6fe83 8333#endif
85e6fe83 8334EOM
a0d0e21e
LW
8335$cppstdin $cppflags $cppminus < dbl_dig.c >dbl_dig.E 2>/dev/null
8336if $contains 'DBL_DIG' dbl_dig.E >/dev/null 2>&1; then
8337 echo "DBL_DIG found." >&4
8338 val="$define"
2304df62 8339else
a0d0e21e
LW
8340 echo "DBL_DIG NOT found." >&4
8341 val="$undef"
2304df62 8342fi
a0d0e21e
LW
8343$rm -f dbl_dig.?
8344set d_dbl_dig
2304df62 8345eval $setvar
2304df62 8346
a0d0e21e
LW
8347: see if difftime exists
8348set difftime d_difftime
2304df62
AD
8349eval $inlibc
8350
a0d0e21e
LW
8351: see if this is a dirent system
8352echo " "
8353if xinc=`./findhdr dirent.h`; $test "$xinc"; then
8354 val="$define"
8355 echo "<dirent.h> found." >&4
8356else
8357 val="$undef"
8358 if xinc=`./findhdr sys/dir.h`; $test "$xinc"; then
8359 echo "<sys/dir.h> found." >&4
8360 echo " "
8361 else
8362 xinc=`./findhdr sys/ndir.h`
8363 fi
8364 echo "<dirent.h> NOT found." >&4
8365fi
8366set i_dirent
8367eval $setvar
8368
8369: Look for type of directory structure.
8370echo " "
8371$cppstdin $cppflags $cppminus < "$xinc" > try.c
8372
8373case "$direntrytype" in
8374''|' ')
8375 case "$i_dirent" in
8376 $define) guess1='struct dirent' ;;
8377 *) guess1='struct direct' ;;
2afac517 8378 esac
8379 ;;
8380*) guess1="$direntrytype"
8381 ;;
8e07c86e
AD
8382esac
8383
2afac517 8384case "$guess1" in
8385'struct dirent') guess2='struct direct' ;;
8386*) guess2='struct dirent' ;;
8387esac
8388
8389if $contains "$guess1" try.c >/dev/null 2>&1; then
8390 direntrytype="$guess1"
8391 echo "Your directory entries are $direntrytype." >&4
8392elif $contains "$guess2" try.c >/dev/null 2>&1; then
8393 direntrytype="$guess2"
8394 echo "Your directory entries seem to be $direntrytype." >&4
8395else
8396 echo "I don't recognize your system's directory entries." >&4
8397 rp="What type is used for directory entries on this system?"
8398 dflt="$guess1"
8399 . ./myread
8400 direntrytype="$ans"
8401fi
8402$rm -f try.c
a0d0e21e 8403
a0d0e21e 8404
2afac517 8405: see if the directory entry stores field length
8406echo " "
8407$cppstdin $cppflags $cppminus < "$xinc" > try.c
8408if $contains 'd_namlen' try.c >/dev/null 2>&1; then
8409 echo "Good, your directory entry keeps length information in d_namlen." >&4
8410 val="$define"
8411else
8412 echo "Your directory entry does not know about the d_namlen field." >&4
8413 val="$undef"
8414fi
8415set d_dirnamlen
8416eval $setvar
8417$rm -f try.c
a0d0e21e 8418
5ff3f7a4
GS
8419: see if dlerror exists
8420xxx_runnm="$runnm"
8421runnm=false
8422set dlerror d_dlerror
8423eval $inlibc
8424runnm="$xxx_runnm"
8425
8426: see if dlfcn is available
8427set dlfcn.h i_dlfcn
8428eval $inhdr
8429
8430case "$usedl" in
8431$define|y|true)
8432 $cat << EOM
8433
8434On a few systems, the dynamically loaded modules that perl generates and uses
8435will need a different extension than shared libs. The default will probably
8436be appropriate.
8437
8438EOM
8439 case "$dlext" in
8440 '') dflt="$so" ;;
8441 *) dflt="$dlext" ;;
8442 esac
8443 rp='What is the extension of dynamically loaded modules'
8444 . ./myread
8445 dlext="$ans"
8446 ;;
8447*)
8448 dlext="none"
8449 ;;
8450esac
8451
8452: Check if dlsym need a leading underscore
a0d0e21e
LW
8453echo " "
8454val="$undef"
8455
8456case "$dlsrc" in
8457dl_dlopen.xs)
8458 echo "Checking whether your dlsym() needs a leading underscore ..." >&4
8459 $cat >dyna.c <<'EOM'
8460fred () { }
8461EOM
8462
8463$cat >fred.c<<EOM
8464
8465#include <stdio.h>
8466#$i_dlfcn I_DLFCN
8467#ifdef I_DLFCN
8468#include <dlfcn.h> /* the dynamic linker include file for Sunos/Solaris */
8469#else
8470#include <sys/types.h>
8471#include <nlist.h>
8472#include <link.h>
8473#endif
8474
8475extern int fred() ;
8476
5a411a32 8477int main()
a0d0e21e
LW
8478{
8479 void * handle ;
8480 void * symbol ;
8481#ifndef RTLD_LAZY
8482 int mode = 1 ;
8483#else
8484 int mode = RTLD_LAZY ;
8485#endif
8486 handle = dlopen("./dyna.$dlext", mode) ;
8487 if (handle == NULL) {
5f05dabc 8488 printf ("1\n") ;
8489 fflush (stdout) ;
8490 exit(0);
a0d0e21e
LW
8491 }
8492 symbol = dlsym(handle, "fred") ;
8493 if (symbol == NULL) {
5f05dabc 8494 /* try putting a leading underscore */
8495 symbol = dlsym(handle, "_fred") ;
8496 if (symbol == NULL) {
8497 printf ("2\n") ;
8498 fflush (stdout) ;
8499 exit(0);
8500 }
8501 printf ("3\n") ;
a0d0e21e
LW
8502 }
8503 else
5f05dabc 8504 printf ("4\n") ;
36477c24 8505 fflush (stdout) ;
8506 exit(0);
a0d0e21e
LW
8507}
8508EOM
760ac839 8509 : Call the object file tmp-dyna.o in case dlext=o.
a0d0e21e 8510 if $cc $ccflags $cccdlflags -c dyna.c > /dev/null 2>&1 &&
dfe9444c
AD
8511 mv dyna${_o} tmp-dyna${_o} > /dev/null 2>&1 &&
8512 $ld $lddlflags -o dyna.$dlext tmp-dyna${_o} > /dev/null 2>&1 &&
87563a30 8513 $cc $ccflags -o fred $ldflags $cccdlflags $ccdlflags fred.c $libs > /dev/null 2>&1; then
a0d0e21e
LW
8514 xxx=`./fred`
8515 case $xxx in
8516 1) echo "Test program failed using dlopen." >&4
8517 echo "Perhaps you should not use dynamic loading." >&4;;
8518 2) echo "Test program failed using dlsym." >&4
8519 echo "Perhaps you should not use dynamic loading." >&4;;
8520 3) echo "dlsym needs a leading underscore" >&4
8521 val="$define" ;;
8522 4) echo "dlsym doesn't need a leading underscore." >&4;;
8523 esac
8524 else
8525 echo "I can't compile and run the test program." >&4
88d5303d 8526 echo "I'm guessing that dlsym doesn't need a leading underscore." >&4
a0d0e21e
LW
8527 fi
8528 ;;
8529esac
8530
a78b0d02 8531$rm -f fred fred.? dyna.$dlext dyna.? tmp-dyna.?
a0d0e21e
LW
8532
8533set d_dlsymun
8534eval $setvar
8535
85ab1d1d
JH
8536hasproto='varname=$1; func=$2; shift; shift;
8537while $test $# -ge 2; do
8538 case "$1" in
8539 $define) echo "#include <$2>";;
8540 esac ;
8541 shift 2;
8542done > try.c;
8543$cppstdin $cppflags $cppminus < try.c > tryout.c 2>/dev/null;
8544if $contains "$func.*(" tryout.c >/dev/null 2>&1; then
8545 echo "$func() prototype found.";
8546 val="$define";
8547else
8548 echo "$func() prototype NOT found.";
8549 val="$undef";
8550fi;
8551set $varname;
8552eval $setvar;
8553$rm -f try.c tryout.c'
8554
8555: see if prototype for drand48 is available
8556echo " "
8557set d_drand48proto drand48 $i_stdlib stdlib.h $i_unistd unistd.h
8558eval $hasproto
8559
a0d0e21e
LW
8560: see if dup2 exists
8561set dup2 d_dup2
8562eval $inlibc
8563
5ff3f7a4
GS
8564: see if eaccess exists
8565set eaccess d_eaccess
8566eval $inlibc
8567
8568: see if endgrent exists
8569set endgrent d_endgrent
8570eval $inlibc
8571
e5c9fcd0
AD
8572: see if endhostent exists
8573set endhostent d_endhent
8574eval $inlibc
8575
8576: see if endnetent exists
8577set endnetent d_endnent
8578eval $inlibc
8579
8580: see if endprotoent exists
8581set endprotoent d_endpent
8582eval $inlibc
8583
5ff3f7a4
GS
8584: see if endpwent exists
8585set endpwent d_endpwent
8586eval $inlibc
8587
e5c9fcd0
AD
8588: see if endservent exists
8589set endservent d_endsent
8590eval $inlibc
8591
8e07c86e
AD
8592: Locate the flags for 'open()'
8593echo " "
8594$cat >open3.c <<'EOCP'
8595#include <sys/types.h>
8596#ifdef I_FCNTL
8597#include <fcntl.h>
8598#endif
8599#ifdef I_SYS_FILE
8600#include <sys/file.h>
8601#endif
d674cd6d 8602int main() {
8e07c86e
AD
8603 if(O_RDONLY);
8604#ifdef O_TRUNC
8605 exit(0);
8606#else
8607 exit(1);
8608#endif
8609}
8610EOCP
8611: check sys/file.h first to get FREAD on Sun
8612if $test `./findhdr sys/file.h` && \
dfe9444c 8613 set open3 -DI_SYS_FILE && eval $compile; then
8e07c86e
AD
8614 h_sysfile=true;
8615 echo "<sys/file.h> defines the O_* constants..." >&4
8616 if ./open3; then
8617 echo "and you have the 3 argument form of open()." >&4
8618 val="$define"
8619 else
8620 echo "but not the 3 argument form of open(). Oh, well." >&4
8621 val="$undef"
8622 fi
8623elif $test `./findhdr fcntl.h` && \
dfe9444c 8624 set open3 -DI_FCNTL && eval $compile; then
8e07c86e
AD
8625 h_fcntl=true;
8626 echo "<fcntl.h> defines the O_* constants..." >&4
8627 if ./open3; then
8628 echo "and you have the 3 argument form of open()." >&4
8629 val="$define"
8630 else
8631 echo "but not the 3 argument form of open(). Oh, well." >&4
8632 val="$undef"
8633 fi
8634else
8635 val="$undef"
8636 echo "I can't find the O_* constant definitions! You got problems." >&4
8637fi
8638set d_open3
8639eval $setvar
8640$rm -f open3*
8641
213c275f
JH
8642: see which of string.h or strings.h is needed
8643echo " "
8644strings=`./findhdr string.h`
8645if $test "$strings" && $test -r "$strings"; then
8646 echo "Using <string.h> instead of <strings.h>." >&4
8647 val="$define"
8648else
8649 val="$undef"
8650 strings=`./findhdr strings.h`
8651 if $test "$strings" && $test -r "$strings"; then
8652 echo "Using <strings.h> instead of <string.h>." >&4
8653 else
8654 echo "No string header found -- You'll surely have problems." >&4
8655 fi
8656fi
8657set i_string
8658eval $setvar
8659case "$i_string" in
8660"$undef") strings=`./findhdr strings.h`;;
8661*) strings=`./findhdr string.h`;;
8662esac
8663
8e07c86e
AD
8664: check for non-blocking I/O stuff
8665case "$h_sysfile" in
8666true) echo "#include <sys/file.h>" > head.c;;
8667*)
8668 case "$h_fcntl" in
8669 true) echo "#include <fcntl.h>" > head.c;;
8670 *) echo "#include <sys/fcntl.h>" > head.c;;
8671 esac
8672 ;;
8673esac
8674echo " "
8675echo "Figuring out the flag used by open() for non-blocking I/O..." >&4
8676case "$o_nonblock" in
8677'')
8678 $cat head.c > try.c
8679 $cat >>try.c <<'EOCP'
213c275f 8680#include <stdio.h>
d674cd6d 8681int main() {
8e07c86e
AD
8682#ifdef O_NONBLOCK
8683 printf("O_NONBLOCK\n");
8684 exit(0);
8685#endif
8686#ifdef O_NDELAY
8687 printf("O_NDELAY\n");
8688 exit(0);
8689#endif
8690#ifdef FNDELAY
8691 printf("FNDELAY\n");
8692 exit(0);
8693#endif
8694 exit(0);
8695}
8696EOCP
dfe9444c 8697 set try
dc45a647 8698 if eval $compile_ok; then
8e07c86e
AD
8699 o_nonblock=`./try`
8700 case "$o_nonblock" in
8701 '') echo "I can't figure it out, assuming O_NONBLOCK will do.";;
8702 *) echo "Seems like we can use $o_nonblock.";;
8703 esac
8704 else
8705 echo "(I can't compile the test program; pray O_NONBLOCK is right!)"
8706 fi
8707 ;;
8708*) echo "Using $hint value $o_nonblock.";;
8709esac
8710$rm -f try try.* .out core
8711
8712echo " "
8713echo "Let's see what value errno gets from read() on a $o_nonblock file..." >&4
8714case "$eagain" in
8715'')
8716 $cat head.c > try.c
8717 $cat >>try.c <<EOCP
8718#include <errno.h>
8719#include <sys/types.h>
8720#include <signal.h>
213c275f 8721#include <stdio.h>
4633a7c4 8722#define MY_O_NONBLOCK $o_nonblock
dc45a647 8723#ifndef errno /* XXX need better Configure test */
8e07c86e 8724extern int errno;
dc45a647 8725#endif
14e4fe40
JH
8726#$i_unistd I_UNISTD
8727#ifdef I_UNISTD
213c275f
JH
8728#include <unistd.h>
8729#endif
1acc7ade
JH
8730#$i_string I_STRING
8731#ifdef I_STRING
213c275f
JH
8732#include <string.h>
8733#else
8734#include <strings.h>
8735#endif
8e07c86e 8736$signal_t blech(x) int x; { exit(3); }
4633a7c4
LW
8737EOCP
8738 $cat >> try.c <<'EOCP'
d674cd6d 8739int main()
8e07c86e
AD
8740{
8741 int pd[2];
8742 int pu[2];
8743 char buf[1];
8744 char string[100];
8745
8746 pipe(pd); /* Down: child -> parent */
8747 pipe(pu); /* Up: parent -> child */
8748 if (0 != fork()) {
8749 int ret;
8750 close(pd[1]); /* Parent reads from pd[0] */
8751 close(pu[0]); /* Parent writes (blocking) to pu[1] */
4633a7c4 8752 if (-1 == fcntl(pd[0], F_SETFL, MY_O_NONBLOCK))
8e07c86e
AD
8753 exit(1);
8754 signal(SIGALRM, blech);
8755 alarm(5);
8756 if ((ret = read(pd[0], buf, 1)) > 0) /* Nothing to read! */
8757 exit(2);
8758 sprintf(string, "%d\n", ret);
8759 write(2, string, strlen(string));
8760 alarm(0);
8761#ifdef EAGAIN
8762 if (errno == EAGAIN) {
8763 printf("EAGAIN\n");
8764 goto ok;
8765 }
8766#endif
8767#ifdef EWOULDBLOCK
8768 if (errno == EWOULDBLOCK)
8769 printf("EWOULDBLOCK\n");
8770#endif
8771 ok:
8772 write(pu[1], buf, 1); /* Unblocks child, tell it to close our pipe */
8773 sleep(2); /* Give it time to close our pipe */
8774 alarm(5);
8775 ret = read(pd[0], buf, 1); /* Should read EOF */
8776 alarm(0);
8777 sprintf(string, "%d\n", ret);
8778 write(3, string, strlen(string));
8779 exit(0);
8780 }
8781
8782 close(pd[0]); /* We write to pd[1] */
8783 close(pu[1]); /* We read from pu[0] */
8784 read(pu[0], buf, 1); /* Wait for parent to signal us we may continue */
8785 close(pd[1]); /* Pipe pd is now fully closed! */
8786 exit(0); /* Bye bye, thank you for playing! */
8787}
8788EOCP
dfe9444c 8789 set try
dc45a647 8790 if eval $compile_ok; then
774d564b 8791 echo "$startsh" >mtry
40a7a20a 8792 echo "./try >try.out 2>try.ret 3>try.err || exit 4" >>mtry
8e07c86e
AD
8793 chmod +x mtry
8794 ./mtry >/dev/null 2>&1
8795 case $? in
8796 0) eagain=`$cat try.out`;;
8797 1) echo "Could not perform non-blocking setting!";;
8798 2) echo "I did a successful read() for something that was not there!";;
8799 3) echo "Hmm... non-blocking I/O does not seem to be working!";;
8800 *) echo "Something terribly wrong happened during testing.";;
8801 esac
8802 rd_nodata=`$cat try.ret`
8803 echo "A read() system call with no data present returns $rd_nodata."
8804 case "$rd_nodata" in
8805 0|-1) ;;
8806 *)
8807 echo "(That's peculiar, fixing that to be -1.)"
8808 rd_nodata=-1
8809 ;;
8810 esac
8811 case "$eagain" in
8812 '')
8813 echo "Forcing errno EAGAIN on read() with no data available."
8814 eagain=EAGAIN
8815 ;;
8816 *)
8817 echo "Your read() sets errno to $eagain when no data is available."
8818 ;;
8819 esac
8820 status=`$cat try.err`
8821 case "$status" in
8822 0) echo "And it correctly returns 0 to signal EOF.";;
8823 -1) echo "But it also returns -1 to signal EOF, so be careful!";;
8824 *) echo "However, your read() returns '$status' on EOF??";;
8825 esac
8826 val="$define"
28757baa 8827 if test "$status" = "$rd_nodata"; then
8e07c86e
AD
8828 echo "WARNING: you can't distinguish between EOF and no data!"
8829 val="$undef"
8830 fi
8831 else
8832 echo "I can't compile the test program--assuming errno EAGAIN will do."
8833 eagain=EAGAIN
8834 fi
8835 set d_eofnblk
8836 eval $setvar
8837 ;;
8838*)
8839 echo "Using $hint value $eagain."
8840 echo "Your read() returns $rd_nodata when no data is present."
8841 case "$d_eofnblk" in
8842 "$define") echo "And you can see EOF because read() returns 0.";;
8843 "$undef") echo "But you can't see EOF status from read() returned value.";;
8844 *)
8845 echo "(Assuming you can't see EOF status from read anyway.)"
8846 d_eofnblk=$undef
8847 ;;
8848 esac
8849 ;;
8850esac
8851$rm -f try try.* .out core head.c mtry
8852
a0d0e21e
LW
8853: see if fchmod exists
8854set fchmod d_fchmod
8855eval $inlibc
8856
8857: see if fchown exists
8858set fchown d_fchown
8859eval $inlibc
8860
8861: see if this is an fcntl system
8862set fcntl d_fcntl
8863eval $inlibc
8864
b7b35fc2
JH
8865hasfield='varname=$1; struct=$2; field=$3; shift; shift; shift;
8866while $test $# -ge 2; do
8867 case "$1" in
8868 $define) echo "#include <$2>";;
8869 esac ;
8870 shift 2;
8871done > try.c;
8872echo "int main () { struct $struct foo; char* bar; bar = (char*)foo.$field; }" >> try.c;
8873set try;
8874if eval $compile; then
8875 val="$define";
8876else
8877 val="$undef";
8878fi;
8879set $varname;
8880eval $setvar;
8881$rm -f try.c try.o'
8882
8883socketlib=''
8884sockethdr=''
8885: see whether socket exists
8886echo " "
8887$echo $n "Hmm... $c" >&4
8888if set socket val -f d_socket; eval $csym; $val; then
8889 echo "Looks like you have Berkeley networking support." >&4
8890 d_socket="$define"
8891 if set setsockopt val -f; eval $csym; $val; then
8892 d_oldsock="$undef"
8893 else
8894 echo "...but it uses the old BSD 4.1c interface, rather than 4.2." >&4
8895 d_oldsock="$define"
8896 fi
8897else
8898 if $contains socklib libc.list >/dev/null 2>&1; then
8899 echo "Looks like you have Berkeley networking support." >&4
8900 d_socket="$define"
8901 : we will have to assume that it supports the 4.2 BSD interface
8902 d_oldsock="$undef"
8903 else
8904 echo "You don't have Berkeley networking in libc$_a..." >&4
8905 if test "X$d_socket" = "X$define"; then
8906 echo "...but you seem to believe that you have sockets." >&4
8907 else
8908 for net in net socket
8909 do
8910 if test -f /usr/lib/lib$net$_a; then
8911 ( ($nm $nm_opt /usr/lib/lib$net$_a | eval $nm_extract) || \
8912 $ar t /usr/lib/lib$net$_a) 2>/dev/null >> libc.list
8913 if $contains socket libc.list >/dev/null 2>&1; then
8914 d_socket="$define"
8915 socketlib="-l$net"
8916 case "$net" in
8917 net)
8918 echo "...but the Wollongong group seems to have hacked it in." >&4
8919 sockethdr="-I/usr/netinclude"
8920 ;;
8921 esac
8922 echo "Found Berkeley sockets interface in lib$net." >& 4
8923 if $contains setsockopt libc.list >/dev/null 2>&1; then
8924 d_oldsock="$undef"
8925 else
8926 echo "...using the old BSD 4.1c interface, rather than 4.2." >&4
8927 d_oldsock="$define"
8928 fi
8929 break
8930 fi
8931 fi
8932 done
8933 if test "X$d_socket" != "X$define"; then
8934 echo "or anywhere else I see." >&4
8935 d_socket="$undef"
8936 d_oldsock="$undef"
8937 fi
8938 fi
8939 fi
8940fi
8941
8942: see if socketpair exists
8943set socketpair d_sockpair
8944eval $inlibc
8945
8946
8947echo " "
8948echo "Checking the availability of certain socket constants..." >& 4
8949for ENUM in MSG_CTRUNC MSG_DONTROUTE MSG_OOB MSG_PEEK MSG_PROXY SCM_RIGHTS; do
8950 enum=`$echo $ENUM|./tr '[A-Z]' '[a-z]'`
8951 $cat >try.c <<EOF
8952#include <sys/types.h>
8953#include <sys/socket.h>
8954int main() {
8955 int i = $ENUM;
8956}
8957EOF
8958 val="$undef"
8959 set try; if eval $compile; then
8960 val="$define"
8961 fi
8962 set d_${enum}; eval $setvar
8963 $rm -f try.c try
8964done
8965
921b2963
JH
8966: see if sys/select.h has to be included
8967set sys/select.h i_sysselct
8968eval $inhdr
8969
8970: see if we should include time.h, sys/time.h, or both
8971echo " "
8972if test "X$timeincl" = X; then
8973 echo "Testing to see if we should include <time.h>, <sys/time.h> or both." >&4
8974 $echo $n "I'm now running the test program...$c"
8975 $cat >try.c <<'EOCP'
8976#include <sys/types.h>
8977#ifdef I_TIME
8978#include <time.h>
8979#endif
8980#ifdef I_SYSTIME
8981#ifdef SYSTIMEKERNEL
8982#define KERNEL
8983#endif
8984#include <sys/time.h>
8985#endif
8986#ifdef I_SYSSELECT
8987#include <sys/select.h>
8988#endif
d674cd6d 8989int main()
921b2963
JH
8990{
8991 struct tm foo;
8992#ifdef S_TIMEVAL
8993 struct timeval bar;
8994#endif
8995#ifdef S_TIMEZONE
8996 struct timezone tzp;
8997#endif
8998 if (foo.tm_sec == foo.tm_sec)
8999 exit(0);
9000#ifdef S_TIMEVAL
9001 if (bar.tv_sec == bar.tv_sec)
9002 exit(0);
9003#endif
9004 exit(1);
9005}
9006EOCP
9007 flags=''
9008 for s_timezone in '-DS_TIMEZONE' ''; do
9009 sysselect=''
9010 for s_timeval in '-DS_TIMEVAL' ''; do
9011 for i_systimek in '' '-DSYSTIMEKERNEL'; do
9012 for i_time in '' '-DI_TIME'; do
9013 for i_systime in '-DI_SYSTIME' ''; do
9014 case "$flags" in
9015 '') $echo $n ".$c"
9016 set try $i_time $i_systime $i_systimek $sysselect $s_timeval $s_timezone
9017 if eval $compile; then
9018 set X $i_time $i_systime $i_systimek $sysselect $s_timeval
9019 shift
9020 flags="$*"
9021 echo " "
9022 $echo $n "Succeeded with $flags$c"
9023 fi
9024 ;;
9025 esac
9026 done
9027 done
9028 done
9029 done
9030 done
9031 timeincl=''
9032 echo " "
9033 case "$flags" in
9034 *SYSTIMEKERNEL*) i_systimek="$define"
9035 timeincl=`./findhdr sys/time.h`
9036 echo "We'll include <sys/time.h> with KERNEL defined." >&4;;
9037 *) i_systimek="$undef";;
9038 esac
9039 case "$flags" in
9040 *I_TIME*) i_time="$define"
9041 timeincl=`./findhdr time.h`" $timeincl"
9042 echo "We'll include <time.h>." >&4;;
9043 *) i_time="$undef";;
9044 esac
9045 case "$flags" in
9046 *I_SYSTIME*) i_systime="$define"
9047 timeincl=`./findhdr sys/time.h`" $timeincl"
9048 echo "We'll include <sys/time.h>." >&4;;
9049 *) i_systime="$undef";;
9050 esac
9051 $rm -f try.c try
9052fi
9053
9054: check for fd_set items
9055$cat <<EOM
9056
9057Checking to see how well your C compiler handles fd_set and friends ...
9058EOM
9059$cat >fd_set.c <<EOCP
9060#$i_systime I_SYS_TIME
9061#$i_sysselct I_SYS_SELECT
9062#$d_socket HAS_SOCKET
9063#include <sys/types.h>
9064#ifdef HAS_SOCKET
9065#include <sys/socket.h> /* Might include <sys/bsdtypes.h> */
9066#endif
9067#ifdef I_SYS_TIME
9068#include <sys/time.h>
9069#endif
9070#ifdef I_SYS_SELECT
9071#include <sys/select.h>
9072#endif
d674cd6d 9073int main() {
921b2963
JH
9074 fd_set fds;
9075
9076#ifdef TRYBITS
9077 if(fds.fds_bits);
9078#endif
9079
9080#if defined(FD_SET) && defined(FD_CLR) && defined(FD_ISSET) && defined(FD_ZERO)
9081 exit(0);
9082#else
9083 exit(1);
9084#endif
9085}
9086EOCP
9087set fd_set -DTRYBITS
9088if eval $compile; then
9089 d_fds_bits="$define"
9090 d_fd_set="$define"
9091 echo "Well, your system knows about the normal fd_set typedef..." >&4
9092 if ./fd_set; then
9093 echo "and you have the normal fd_set macros (just as I'd expect)." >&4
9094 d_fd_macros="$define"
9095 else
9096 $cat >&4 <<'EOM'
9097but not the normal fd_set macros! Gaaack! I'll have to cover for you.
9098EOM
9099 d_fd_macros="$undef"
9100 fi
9101else
9102 $cat <<'EOM'
9103Hmm, your compiler has some difficulty with fd_set. Checking further...
9104EOM
9105 set fd_set
9106 if eval $compile; then
9107 d_fds_bits="$undef"
9108 d_fd_set="$define"
9109 echo "Well, your system has some sort of fd_set available..." >&4
9110 if ./fd_set; then
9111 echo "and you have the normal fd_set macros." >&4
9112 d_fd_macros="$define"
9113 else
9114 $cat <<'EOM'
9115but not the normal fd_set macros! Gross! More work for me...
9116EOM
9117 d_fd_macros="$undef"
9118 fi
9119 else
9120 echo "Well, you got zip. That's OK, I can roll my own fd_set stuff." >&4
9121 d_fd_set="$undef"
9122 d_fds_bits="$undef"
9123 d_fd_macros="$undef"
9124 fi
9125fi
9126$rm -f fd_set*
9127
a0d0e21e
LW
9128: see if fgetpos exists
9129set fgetpos d_fgetpos
9130eval $inlibc
9131
8175356b
JH
9132: see if flock exists
9133set flock d_flock
9134eval $inlibc
9135
9136: see if fork exists
9137set fork d_fork
9138eval $inlibc
9139
9140: see if pathconf exists
9141set pathconf d_pathconf
9142eval $inlibc
9143
9144: see if fpathconf exists
9145set fpathconf d_fpathconf
9146eval $inlibc
9147
d9b3e12d 9148
d9b3e12d
JH
9149: check for fpos64_t
9150echo " "
c5f05a91 9151echo "Checking to see if you have fpos64_t..." >&4
d9b3e12d 9152$cat >try.c <<EOCP
ce65dbcf 9153#include <stdio.h>
3c96ce7f 9154int main() { fpos64_t x = 7; }
d9b3e12d 9155EOCP
8175356b
JH
9156set try
9157if eval $compile; then
d9b3e12d 9158 val="$define"
c5f05a91 9159 echo "You have fpos64_t."
d9b3e12d
JH
9160else
9161 val="$undef"
c5f05a91 9162 echo "You do not have fpos64_t."
8175356b 9163 case "$fpossize" in
1eeb0f31 9164 8) echo "(Your fpos_t is 64 bits, so you could use that.)" ;;
8175356b 9165 esac
d9b3e12d 9166fi
8175356b 9167$rm -f try.* try
d9b3e12d
JH
9168set d_fpos64_t
9169eval $setvar
9170
a3540c92
JH
9171: see if frexpl exists
9172set frexpl d_frexpl
9173eval $inlibc
9174
0545a864
JH
9175hasstruct='varname=$1; struct=$2; shift; shift;
9176while $test $# -ge 2; do
9177 case "$1" in
9178 $define) echo "#include <$2>";;
9179 esac ;
9180 shift 2;
9181done > try.c;
9182echo "int main () { struct $struct foo; }" >> try.c;
9183set try;
9184if eval $compile; then
9185 val="$define";
9186else
9187 val="$undef";
9188fi;
9189set $varname;
9190eval $setvar;
9191$rm -f try.c try.o'
d9b3e12d 9192
9b9c89a3
JH
9193: see if this is a sys/param system
9194set sys/param.h i_sysparam
9195eval $inhdr
9196
104d25b7
JH
9197: see if this is a sys/mount.h system
9198set sys/mount.h i_sysmount
9199eval $inhdr
9200
0545a864
JH
9201: see if sys/types.h has to be included
9202set sys/types.h i_systypes
9203eval $inhdr
9204
0545a864 9205
ad27e871 9206echo " "
8175356b 9207echo "Checking to see if your system supports struct fs_data..." >&4
0545a864
JH
9208set d_fs_data_s fs_data $i_systypes sys/types.h $i_sysparam sys/param.h $i_sysmount sys/mount.h
9209eval $hasstruct
9210case "$d_fs_data_s" in
a22e52b9
JH
9211"$define") echo "Yes, it does." ;;
9212*) echo "No, it doesn't." ;;
0545a864
JH
9213esac
9214
9215: see if fseeko exists
9216set fseeko d_fseeko
9217eval $inlibc
1eeb0f31 9218case "$longsize" in
43999f95 92198) echo "(Your long is 64 bits, so you could use fseek.)" ;;
1eeb0f31 9220esac
0545a864
JH
9221
9222: see if fsetpos exists
9223set fsetpos d_fsetpos
9224eval $inlibc
9225
9226
9227: see if fstatfs exists
9228set fstatfs d_fstatfs
9229eval $inlibc
104d25b7
JH
9230
9231
9232: see if statvfs exists
9233set statvfs d_statvfs
9234eval $inlibc
9235
9236: see if fstatvfs exists
9237set fstatvfs d_fstatvfs
9238eval $inlibc
9239
9240
5ff3f7a4
GS
9241: see if ftello exists
9242set ftello d_ftello
9243eval $inlibc
1eeb0f31 9244case "$longsize" in
43999f95 92458) echo "(Your long is 64 bits, so you could use ftell.)" ;;
1eeb0f31 9246esac
5ff3f7a4 9247
49dabb45
JH
9248: see if getcwd exists
9249set getcwd d_getcwd
9250eval $inlibc
9251
3813c136
JH
9252: see if getespwnam exists
9253set getespwnam d_getespwnam
9254eval $inlibc
9255
c890dc6c
JH
9256
9257: see if getfsstat exists
9258set getfsstat d_getfsstat
9259eval $inlibc
9260
5ff3f7a4
GS
9261: see if getgrent exists
9262set getgrent d_getgrent
9263eval $inlibc
9264
693762b4
AD
9265: see if gethostbyaddr exists
9266set gethostbyaddr d_gethbyaddr
9267eval $inlibc
9268
9269: see if gethostbyname exists
9270set gethostbyname d_gethbyname
9271eval $inlibc
9272
a0d0e21e
LW
9273: see if gethostent exists
9274set gethostent d_gethent
9275eval $inlibc
9276
921b2963
JH
9277: see how we will look up host name
9278echo " "
a63faeb8
JH
9279call=''
9280if set gethostname val -f d_gethname; eval $csym; $val; then
921b2963
JH
9281 echo 'gethostname() found.' >&4
9282 d_gethname="$define"
9283 call=gethostname
a63faeb8
JH
9284fi
9285if set uname val -f d_uname; eval $csym; $val; then
921b2963
JH
9286 if ./xenix; then
9287 $cat <<'EOM'
9288uname() was found, but you're running xenix, and older versions of xenix
9289have a broken uname(). If you don't really know whether your xenix is old
9290enough to have a broken system call, use the default answer.
9291
9292EOM
9293 dflt=y
9294 case "$d_uname" in
9295 "$define") dflt=n;;
9296 esac
9297 rp='Is your uname() broken?'
9298 . ./myread
9299 case "$ans" in
9300 n*) d_uname="$define"; call=uname;;
9301 esac
9302 else
9303 echo 'uname() found.' >&4
9304 d_uname="$define"
a63faeb8
JH
9305 case "$call" in
9306 '') call=uname ;;
9307 esac
921b2963
JH
9308 fi
9309fi
9310case "$d_gethname" in
9311'') d_gethname="$undef";;
9312esac
9313case "$d_uname" in
9314'') d_uname="$undef";;
9315esac
9316case "$d_uname$d_gethname" in
9317*define*)
9318 dflt=n
9319 cat <<EOM
9320
9321Every now and then someone has a $call() that lies about the hostname
9322but can't be fixed for political or economic reasons. If you wish, I can
9323pretend $call() isn't there and maybe compute hostname at run-time
9324thanks to the '$phostname' command.
9325
9326EOM
9327 rp="Shall I ignore $call() from now on?"
9328 . ./myread
9329 case "$ans" in
9330 y*) d_uname="$undef" d_gethname="$undef"; $echo $n "Okay...$c";;
9331 esac;;
9332esac
9333case "$phostname" in
9334'') aphostname='';;
9335*) case "$aphostname" in
9336 /*) ;;
9337 *) set X $phostname
9338 shift
9339 file=$1
9340 shift
9341 file=`./loc $file $file $pth`
9342 aphostname=`echo $file $*`
9343 ;;
9344 esac
9345 ;;
9346esac
9347case "$d_uname$d_gethname" in
9348*define*) ;;
9349*)
9350 case "$phostname" in
9351 '')
9352 echo "There will be no way for $package to get your hostname." >&4;;
9353 *)
9354 echo "I'll use 'popen("'"'$aphostname'", "r")'"' to get your hostname." >&4
9355 ;;
9356 esac;;
9357esac
9358case "$d_phostname" in
9359'') d_phostname="$undef";;
9360esac
9361
dc45a647
MB
9362: see if this is a netdb.h system
9363set netdb.h i_netdb
9364eval $inhdr
9365
9366: see if prototypes for various gethostxxx netdb.h functions are available
9367echo " "
9368set d_gethostprotos gethostent $i_netdb netdb.h
9369eval $hasproto
9370
a0d0e21e
LW
9371: see if getlogin exists
9372set getlogin d_getlogin
9373eval $inlibc
9374
ad27e871
JH
9375: see if getmnt exists
9376set getmnt d_getmnt
9377eval $inlibc
9378
ccc7f9b3
KS
9379: see if getmntent exists
9380set getmntent d_getmntent
9381eval $inlibc
9382
693762b4
AD
9383: see if getnetbyaddr exists
9384set getnetbyaddr d_getnbyaddr
9385eval $inlibc
9386
9387: see if getnetbyname exists
9388set getnetbyname d_getnbyname
9389eval $inlibc
9390
e5c9fcd0
AD
9391: see if getnetent exists
9392set getnetent d_getnent
9393eval $inlibc
9394
dc45a647
MB
9395: see if prototypes for various getnetxxx netdb.h functions are available
9396echo " "
9397set d_getnetprotos getnetent $i_netdb netdb.h
9398eval $hasproto
9399
693762b4
AD
9400
9401: see if getprotobyname exists
9402set getprotobyname d_getpbyname
9403eval $inlibc
9404
9405: see if getprotobynumber exists
9406set getprotobynumber d_getpbynumber
9407eval $inlibc
e5c9fcd0
AD
9408
9409: see if getprotoent exists
9410set getprotoent d_getpent
9411eval $inlibc
9412
2afac517 9413: see if getpgid exists
9414set getpgid d_getpgid
a0d0e21e
LW
9415eval $inlibc
9416
9417: see if getpgrp2 exists
9418set getpgrp2 d_getpgrp2
9419eval $inlibc
9420
9421: see if getppid exists
9422set getppid d_getppid
9423eval $inlibc
9424
9425: see if getpriority exists
9426set getpriority d_getprior
9427eval $inlibc
9428
dc45a647
MB
9429: see if prototypes for various getprotoxxx netdb.h functions are available
9430echo " "
9431set d_getprotoprotos getprotoent $i_netdb netdb.h
9432eval $hasproto
9433
3813c136
JH
9434: see if getprpwnam exists
9435set getprpwnam d_getprpwnam
9436eval $inlibc
9437
5ff3f7a4
GS
9438: see if getpwent exists
9439set getpwent d_getpwent
9440eval $inlibc
9441
9442
693762b4
AD
9443: see if getservbyname exists
9444set getservbyname d_getsbyname
9445eval $inlibc
9446
9447: see if getservbyport exists
9448set getservbyport d_getsbyport
9449eval $inlibc
e5c9fcd0
AD
9450
9451: see if getservent exists
9452set getservent d_getsent
9453eval $inlibc
9454
dc45a647
MB
9455: see if prototypes for various getservxxx netdb.h functions are available
9456echo " "
9457set d_getservprotos getservent $i_netdb netdb.h
9458eval $hasproto
9459
f1066039
JH
9460: see if getspnam exists
9461set getspnam d_getspnam
9462eval $inlibc
9463
5f05dabc 9464: see if gettimeofday or ftime exists
9465set gettimeofday d_gettimeod
9466eval $inlibc
9467case "$d_gettimeod" in
9468"$undef")
9469 set ftime d_ftime
9470 eval $inlibc
9471 ;;
9472*)
9473 val="$undef"; set d_ftime; eval $setvar
9474 ;;
9475esac
9476case "$d_gettimeod$d_ftime" in
9477"$undef$undef")
9478 echo " "
9479 echo 'No ftime() nor gettimeofday() -- timing may be less accurate.' >&4
9480 ;;
9481esac
9482
5ff3f7a4
GS
9483: see if this is an grp system
9484set grp.h i_grp
9485eval $inhdr
9486
9487case "$i_grp" in
9488$define)
9489 xxx=`./findhdr grp.h`
9490 $cppstdin $cppflags $cppminus < $xxx >$$.h
9491
9492 if $contains 'gr_passwd' $$.h >/dev/null 2>&1; then
9493 val="$define"
9494 else
9495 val="$undef"
9496 fi
9497 set d_grpasswd
9498 eval $setvar
9499
9500 $rm -f $$.h
9501 ;;
9502*)
9503 val="$undef";
9504 set d_grpasswd; eval $setvar
9505 ;;
9506esac
9507
ccc7f9b3
KS
9508: see if hasmntopt exists
9509set hasmntopt d_hasmntopt
9510eval $inlibc
9511
a0d0e21e
LW
9512: see if this is a netinet/in.h or sys/in.h system
9513set netinet/in.h i_niin sys/in.h i_sysin
9514eval $inhdr
9515
5ff3f7a4 9516: see if arpa/inet.h has to be included
93341792 9517set arpa/inet.h i_arpainet
28e8609d
JH
9518eval $inhdr
9519
a0d0e21e
LW
9520: see if htonl --and friends-- exists
9521val=''
9522set htonl val
9523eval $inlibc
9524
9525: Maybe they are macros.
9526case "$val" in
9527$undef)
9528 $cat >htonl.c <<EOM
9529#include <stdio.h>
9530#include <sys/types.h>
9531#$i_niin I_NETINET_IN
9532#$i_sysin I_SYS_IN
93341792 9533#$i_arpainet I_ARPA_INET
a0d0e21e
LW
9534#ifdef I_NETINET_IN
9535#include <netinet/in.h>
9536#endif
9537#ifdef I_SYS_IN
9538#include <sys/in.h>
9539#endif
28e8609d
JH
9540#ifdef I_ARPA_INET
9541#include <arpa/inet.h>
9542#endif
a0d0e21e
LW
9543#ifdef htonl
9544printf("Defined as a macro.");
9545#endif
9546EOM
9547 $cppstdin $cppflags $cppminus < htonl.c >htonl.E 2>/dev/null
9548 if $contains 'Defined as a macro' htonl.E >/dev/null 2>&1; then
9549 val="$define"
9550 echo "But it seems to be defined as a macro." >&4
9551 fi
9552 $rm -f htonl.?
9553 ;;
9554esac
9555set d_htonl
9556eval $setvar
9557
43999f95
JH
9558: see if iconv exists
9559set iconv d_iconv
9560eval $inlibc
9561
a0d0e21e
LW
9562: index or strchr
9563echo " "
9564if set index val -f; eval $csym; $val; then
9565 if set strchr val -f d_strchr; eval $csym; $val; then
9566 if $contains strchr "$strings" >/dev/null 2>&1 ; then
9567 val="$define"
9568 vali="$undef"
9569 echo "strchr() found." >&4
9570 else
9571 val="$undef"
9572 vali="$define"
9573 echo "index() found." >&4
9574 fi
9575 else
9576 val="$undef"
9577 vali="$define"
9578 echo "index() found." >&4
9579 fi
9580else
9581 if set strchr val -f d_strchr; eval $csym; $val; then
9582 val="$define"
9583 vali="$undef"
9584 echo "strchr() found." >&4
9585 else
9586 echo "No index() or strchr() found!" >&4
9587 val="$undef"
9588 vali="$undef"
9589 fi
9590fi
9591set d_strchr; eval $setvar
9592val="$vali"
9593set d_index; eval $setvar
9594
7e1af8bc 9595: check whether inet_aton exists
9596set inet_aton d_inetaton
9597eval $inlibc
9598
fe749a9f
JH
9599: see if inttypes.h is available
9600: we want a real compile instead of Inhdr because some systems
9601: have an inttypes.h which includes non-existent headers
9602echo " "
9603$cat >try.c <<EOCP
9604#include <inttypes.h>
9605int main() {
9606 static int32_t foo32 = 0x12345678;
9607}
9608EOCP
9609set try
9610if eval $compile; then
9611 echo "<inttypes.h> found." >&4
9612 val="$define"
9613else
9614 echo "<inttypes.h> NOT found." >&4
9615 val="$undef"
9616fi
9617$rm -f try.c try
9618set i_inttypes
9619eval $setvar
9620
9621: check for int64_t
9622echo " "
c5f05a91 9623echo "Checking to see if you have int64_t..." >&4
fe749a9f
JH
9624$cat >try.c <<EOCP
9625#include <sys/types.h>
9626#$i_inttypes I_INTTYPES
9627#ifdef I_INTTYPES
9628#include <inttypes.h>
9629#endif
9630int main() { int64_t x = 7; }
9631EOCP
9632set try
9633if eval $compile; then
9634 val="$define"
ce65dbcf 9635 echo "You have int64_t."
fe749a9f
JH
9636else
9637 val="$undef"
ce65dbcf 9638 echo "You do not have int64_t."
fe749a9f
JH
9639fi
9640$rm -f try try.*
13b3f787 9641set d_int64_t
fe749a9f
JH
9642eval $setvar
9643
a0d0e21e
LW
9644: Look for isascii
9645echo " "
9646$cat >isascii.c <<'EOCP'
9647#include <stdio.h>
9648#include <ctype.h>
d674cd6d 9649int main() {
a0d0e21e
LW
9650 int c = 'A';
9651 if (isascii(c))
9652 exit(0);
9653 else
9654 exit(1);
9655}
9656EOCP
dfe9444c
AD
9657set isascii
9658if eval $compile; then
a0d0e21e
LW
9659 echo "isascii() found." >&4
9660 val="$define"
9661else
9662 echo "isascii() NOT found." >&4
9663 val="$undef"
9664fi
9665set d_isascii
9666eval $setvar
9667$rm -f isascii*
9668
a3540c92
JH
9669: see if isnan exists
9670set isnan d_isnan
9671eval $inlibc
9672
9673: see if isnanl exists
9674set isnanl d_isnanl
9675eval $inlibc
9676
a0d0e21e
LW
9677: see if killpg exists
9678set killpg d_killpg
9679eval $inlibc
9680
dd64f1c3
AD
9681: see if lchown exists
9682echo " "
9683$cat > try.c <<'EOCP'
9684/* System header to define __stub macros and hopefully few prototypes,
9685 which can conflict with char lchown(); below. */
9686#include <assert.h>
9687/* Override any gcc2 internal prototype to avoid an error. */
9688/* We use char because int might match the return type of a gcc2
9689 builtin and then its argument prototype would still apply. */
9690char lchown();
9691int main() {
9692 /* The GNU C library defines this for functions which it implements
9693 to always fail with ENOSYS. Some functions are actually named
9694 something starting with __ and the normal name is an alias. */
9695#if defined (__stub_lchown) || defined (__stub___lchown)
9696choke me
9697#else
9698lchown();
9699#endif
9700; return 0; }
9701EOCP
9702set try
9703if eval $compile; then
9704 $echo "lchown() found." >&4
9705 val="$define"
9706else
9707 $echo "lchown() NOT found." >&4
9708 val="$undef"
9709fi
9710set d_lchown
9711eval $setvar
9712
2d4389e4
JH
9713: See if number of significant digits in a double precision number is known
9714echo " "
9715$cat >ldbl_dig.c <<EOM
9716#$i_limits I_LIMITS
9717#$i_float I_FLOAT
9718#ifdef I_LIMITS
9719#include <limits.h>
9720#endif
9721#ifdef I_FLOAT
9722#include <float.h>
9723#endif
9724#ifdef LDBL_DIG
9725printf("Contains LDBL_DIG");
9726#endif
9727EOM
9728$cppstdin $cppflags $cppminus < ldbl_dig.c >ldbl_dig.E 2>/dev/null
9729if $contains 'LDBL_DIG' ldbl_dig.E >/dev/null 2>&1; then
9730 echo "LDBL_DIG found." >&4
9731 val="$define"
9732else
9733 echo "LDBL_DIG NOT found." >&4
9734 val="$undef"
9735fi
9736$rm -f ldbl_dig.?
9737set d_ldbl_dig
9738eval $setvar
9739
a0d0e21e
LW
9740: see if link exists
9741set link d_link
9742eval $inlibc
9743
a0d0e21e
LW
9744: see if localeconv exists
9745set localeconv d_locconv
9746eval $inlibc
9747
9748: see if lockf exists
9749set lockf d_lockf
9750eval $inlibc
9751
8175356b
JH
9752: check for long long
9753echo " "
c5f05a91 9754echo "Checking to see if you have long long..." >&4
213c275f 9755echo 'int main() { long long x = 7; return 0; }' > try.c
8175356b
JH
9756set try
9757if eval $compile; then
9758 val="$define"
ce65dbcf 9759 echo "You have have long long."
8175356b
JH
9760else
9761 val="$undef"
ce65dbcf 9762 echo "You do not have long long."
8175356b
JH
9763fi
9764$rm try.*
9765set d_longlong
9766eval $setvar
9767
9768: check for length of long long
9769case "${d_longlong}${longlongsize}" in
9770$define)
9771 echo " "
49c10eea 9772 echo "Checking to see how big your long longs are..." >&4
8175356b
JH
9773 $cat >try.c <<'EOCP'
9774#include <stdio.h>
9775int main()
9776{
213c275f
JH
9777 printf("%d\n", (int)sizeof(long long));
9778 return(0);
8175356b
JH
9779}
9780EOCP
9781 set try
9782 if eval $compile_ok; then
9783 longlongsize=`./try$exe_ext`
49c10eea 9784 echo "Your long longs are $longlongsize bytes long."
8175356b
JH
9785 else
9786 dflt='8'
9787 echo " "
9788 echo "(I can't seem to compile the test program. Guessing...)"
9789 rp="What is the size of a long long (in bytes)?"
9790 . ./myread
9791 longlongsize="$ans"
9792 fi
9793 if $test "X$longsize" = "X$longlongsize"; then
9794 echo "(That isn't any different from an ordinary long.)"
9795 fi
9796 ;;
9797esac
9798$rm -f try.* try
9799
49c10eea
JH
9800: see if prototype for lseek is available
9801echo " "
9802set d_lseekproto lseek $i_systypes sys/types.h $i_unistd unistd.h
9803eval $hasproto
9804
a0d0e21e
LW
9805: see if lstat exists
9806set lstat d_lstat
9807eval $inlibc
9808
1e8c3fde
JH
9809: see if madvise exists
9810set madvise d_madvise
9811eval $inlibc
9812
a0d0e21e
LW
9813: see if mblen exists
9814set mblen d_mblen
9815eval $inlibc
9816
9817: see if mbstowcs exists
9818set mbstowcs d_mbstowcs
9819eval $inlibc
9820
9821: see if mbtowc exists
9822set mbtowc d_mbtowc
9823eval $inlibc
9824
0f27ced1
JH
9825: see if memchr exists
9826set memchr d_memchr
9827eval $inlibc
9828
a0d0e21e
LW
9829: see if memcmp exists
9830set memcmp d_memcmp
9831eval $inlibc
9832
9833: see if memcpy exists
9834set memcpy d_memcpy
9835eval $inlibc
9836
9837: see if memmove exists
9838set memmove d_memmove
2304df62
AD
9839eval $inlibc
9840
9841: see if memset exists
9842set memset d_memset
9843eval $inlibc
9844
9845: see if mkdir exists
9846set mkdir d_mkdir
9847eval $inlibc
9848
fe749a9f
JH
9849: see if mkdtemp exists
9850set mkdtemp d_mkdtemp
9851eval $inlibc
9852
a0d0e21e
LW
9853: see if mkfifo exists
9854set mkfifo d_mkfifo
9855eval $inlibc
9856
fe749a9f
JH
9857: see if mkstemp exists
9858set mkstemp d_mkstemp
9859eval $inlibc
9860
9861: see if mkstemps exists
9862set mkstemps d_mkstemps
9863eval $inlibc
9864
a0d0e21e
LW
9865: see if mktime exists
9866set mktime d_mktime
9867eval $inlibc
9868
87b71857
JH
9869: see if this is a sys/mman.h system
9870set sys/mman.h i_sysmman
9871eval $inhdr
9872
9873: see if mmap exists
9874set mmap d_mmap
9875eval $inlibc
9876: see what shmat returns
9877: default to something harmless
9878mmaptype='void *'
9879case "$i_sysmman$d_mmap" in
9880"$define$define")
9881 $cat >mmap.c <<'END'
9882#include <sys/mman.h>
9883void *mmap();
9884END
9885 if $cc $ccflags -c mmap.c >/dev/null 2>&1; then
9886 mmaptype='void *'
9887 else
9888 mmaptype='caddr_t'
9889 fi
9890 echo "and it returns ($mmaptype)." >&4
9891 ;;
9892esac
9893
9894
9895
a3540c92
JH
9896: see if modfl exists
9897set modfl d_modfl
9898eval $inlibc
9899
fe749a9f
JH
9900: see if mprotect exists
9901set mprotect d_mprotect
9902eval $inlibc
9903
2304df62
AD
9904: see if msgctl exists
9905set msgctl d_msgctl
9906eval $inlibc
9907
9908: see if msgget exists
9909set msgget d_msgget
9910eval $inlibc
9911
9912: see if msgsnd exists
9913set msgsnd d_msgsnd
9914eval $inlibc
9915
9916: see if msgrcv exists
9917set msgrcv d_msgrcv
9918eval $inlibc
9919
9920: see how much of the 'msg*(2)' library is present.
9921h_msg=true
9922echo " "
9923case "$d_msgctl$d_msgget$d_msgsnd$d_msgrcv" in
9924*"$undef"*) h_msg=false;;
9925esac
6087ac44
JH
9926case "$osname" in
9927freebsd)
9928 case "`ipcs 2>&1`" in
9929 "SVID messages"*"not configured"*)
5ff3f7a4 9930 echo "Your $osname does not have the msg*(2) configured." >&4
6087ac44
JH
9931 h_msg=false
9932 val="$undef"
9933 set msgctl d_msgctl
9934 eval $setvar
9935 set msgget d_msgget
9936 eval $setvar
9937 set msgsnd d_msgsnd
9938 eval $setvar
9939 set msgrcv d_msgrcv
9940 eval $setvar
9941 ;;
9942 esac
9943 ;;
9944esac
2304df62
AD
9945: we could also check for sys/ipc.h ...
9946if $h_msg && $test `./findhdr sys/msg.h`; then
9947 echo "You have the full msg*(2) library." >&4
9948 val="$define"
9949else
9950 echo "You don't have the full msg*(2) library." >&4
9951 val="$undef"
9952fi
9953set d_msg
9954eval $setvar
9955
fe749a9f
JH
9956: see if msync exists
9957set msync d_msync
dfe9444c
AD
9958eval $inlibc
9959
fe749a9f
JH
9960: see if munmap exists
9961set munmap d_munmap
9962eval $inlibc
ff935051 9963
fe749a9f
JH
9964: see if nice exists
9965set nice d_nice
9966eval $inlibc
ff935051 9967
de1c2614
JH
9968
9969echo " "
6b8eaf93 9970echo "Checking which 64-bit integer type we could use..." >&4
de1c2614
JH
9971
9972case "$intsize" in
99738) val=int
9974 set quadtype
9975 eval $setvar
9976 val='"unsigned int"'
9977 set uquadtype
9978 eval $setvar
6b8eaf93 9979 quadkind=1
de1c2614
JH
9980 ;;
9981*) case "$longsize" in
9982 8) val=long
9983 set quadtype
9984 eval $setvar
9985 val='"unsigned long"'
9986 set uquadtype
9987 eval $setvar
6b8eaf93 9988 quadkind=2
de1c2614 9989 ;;
43999f95
JH
9990 *) case "$d_longlong:$longlongsize" in
9991 define:8)
de1c2614
JH
9992 val='"long long"'
9993 set quadtype
9994 eval $setvar
9995 val='"unsigned long long"'
9996 set uquadtype
9997 eval $setvar
6b8eaf93 9998 quadkind=3
de1c2614 9999 ;;
13b3f787 10000 *) case "$d_int64_t" in
de1c2614
JH
10001 define)
10002 val=int64_t
10003 set quadtype
10004 eval $setvar
10005 val=uint64_t
10006 set uquadtype
10007 eval $setvar
6b8eaf93 10008 quadkind=4
de1c2614
JH
10009 ;;
10010 esac
10011 ;;
10012 esac
10013 ;;
10014 esac
10015 ;;
10016esac
10017
10018case "$quadtype" in
ad551343 10019'') echo "Alas, no 64-bit integer types in sight." >&4
de1c2614
JH
10020 d_quad="$undef"
10021 ;;
10cc9d2a 10022*) if test X"$use64bitint" = Xdefine -o X"$longsize" = X8; then
1eeb0f31
JH
10023 verb="will"
10024 else
10025 verb="could"
10026 fi
10027 echo "We $verb use '$quadtype' for 64-bit integers." >&4
de1c2614
JH
10028 d_quad="$define"
10029 ;;
10030esac
10031
cce08f5b
JH
10032: check for length of character
10033echo " "
10034case "$charsize" in
10035'')
10036 echo "Checking to see how big your characters are (hey, you never know)..." >&4
10037 $cat >try.c <<'EOCP'
10038#include <stdio.h>
10039int main()
10040{
10041 printf("%d\n", (int)sizeof(char));
10042 exit(0);
10043}
10044EOCP
10045 set try
10046 if eval $compile_ok; then
10047 dflt=`./try`
10048 else
10049 dflt='1'
10050 echo "(I can't seem to compile the test program. Guessing...)"
10051 fi
10052 ;;
10053*)
10054 dflt="$charsize"
10055 ;;
10056esac
10057rp="What is the size of a character (in bytes)?"
10058. ./myread
10059charsize="$ans"
10060$rm -f try.c try
10061
10062
10063echo " "
10064$echo "Choosing the C types to be used for Perl's internal types..." >&4
10065
10cc9d2a 10066case "$use64bitint:$d_quad:$quadtype" in
cce08f5b
JH
10067define:define:?*)
10068 ivtype="$quadtype"
10069 uvtype="$uquadtype"
10070 ivsize=8
10071 uvsize=8
10072 ;;
10073*) ivtype="long"
10074 uvtype="unsigned long"
10075 ivsize=$longsize
10076 uvsize=$longsize
10077 ;;
10078esac
10079
10080case "$uselongdouble:$d_longdbl" in
10081define:define)
10082 nvtype="long double"
10083 nvsize=$longdblsize
10084 ;;
10085*) nvtype=double
10086 nvsize=$doublesize
10087 ;;
10088esac
10089
10090$echo "(IV will be "$ivtype", $ivsize bytes)"
10091$echo "(UV will be "$uvtype", $uvsize bytes)"
10092$echo "(NV will be "$nvtype", $nvsize bytes)"
10093
10094$cat >try.c <<EOCP
10095#$i_inttypes I_INTTYPES
10096#ifdef I_INTTYPES
10097#include <inttypes.h>
10098#endif
10099#include <stdio.h>
10100int main() {
10101#ifdef INT8
10102 int8_t i = INT8_MAX;
10103 uint8_t u = UINT8_MAX;
10104 printf("int8_t\n");
10105#endif
10106#ifdef INT16
10107 int16_t i = INT16_MAX;
10108 uint16_t i = UINT16_MAX;
10109 printf("int16_t\n");
10110#endif
10111#ifdef INT32
10112 int32_t i = INT32_MAX;
10113 uint32_t u = UINT32_MAX;
10114 printf("int32_t\n");
10115#endif
10116}
10117EOCP
10118
10119case "$i8type" in
10120'') case "$charsize" in
10121 1) i8type=char
10122 u8type="unsigned char"
10123 i8size=$charsize
10124 u8size=$charsize
10125 ;;
10126 esac
10127 ;;
10128esac
10129case "$i8type" in
10130'') set try -DINT8
10131 if eval $compile; then
10132 case "`./try$exe_ext`" in
10133 int8_t) i8type=int8_t
10134 u8type=uint8_t
10135 i8size=1
10136 u8size=1
10137 ;;
10138 esac
10139 fi
10140 ;;
10141esac
10142case "$i8type" in
10143'') if $test $charsize -ge 1; then
10144 i8type=char
10145 u8type="unsigned char"
10146 i8size=$charsize
10147 u8size=$charsize
10148 fi
10149 ;;
10150esac
10151
10152case "$i16type" in
10153'') case "$shortsize" in
10154 2) i16type=short
10155 u16type="unsigned short"
10156 i16size=$shortsize
10157 u16size=$shortsize
10158 ;;
10159 esac
10160 ;;
10161esac
10162case "$i16type" in
10163'') set try -DINT16
10164 if eval $compile; then
10165 case "`./try$exe_ext`" in
10166 int16_t)
10167 i16type=int16_t
10168 u16type=uint16_t
10169 i16size=2
10170 u16size=2
10171 ;;
10172 esac
10173 fi
10174 ;;
10175esac
10176case "$i16type" in
10177'') if $test $shortsize -ge 2; then
10178 i16type=short
10179 u16type="unsigned short"
10180 i16size=$shortsize
10181 u16size=$shortsize
10182 fi
10183 ;;
10184esac
10185
10186case "$i32type" in
10187'') case "$longsize" in
10188 4) i32type=long
10189 u32type="unsigned long"
10190 i32size=$longsize
10191 u32size=$longsize
10192 ;;
10193 *) case "$intsize" in
10194 4) i32type=int
10195 u32type="unsigned int"
10196 i32size=$intsize
10197 u32size=$intsize
10198 ;;
10199 esac
10200 ;;
10201 esac
10202 ;;
10203esac
10204case "$i32type" in
10205'') set try -DINT32
10206 if eval $compile; then
10207 case "`./try$exe_ext`" in
10208 int32_t)
10209 i32type=int32_t
10210 u32type=uint32_t
10211 i32size=4
10212 u32size=4
10213 ;;
10214 esac
10215 fi
10216 ;;
10217esac
10218case "$i32type" in
10219'') if $test $intsize -ge 4; then
10220 i32type=int
10221 u32type="unsigned int"
10222 i32size=$intsize
10223 u32size=$intsize
10224 fi
10225 ;;
10226esac
10227
10228case "$i64type" in
10229'') case "$d_quad:$quadtype" in
10230 define:?*)
10231 i64type="$quadtype"
10232 u64type="$uquadtype"
10233 i64size=8
10234 u64size=8
10235 ;;
10236 esac
10237 ;;
10238esac
10239
10240$echo "Checking whether your NVs can preserve your UVs..." >&4
10241$cat <<EOP >try.c
10242#include <stdio.h>
10243int main() {
10244 $uvtype k = ($uvtype)~0, l;
10245 $nvtype d;
10246 l = k;
10247 d = ($nvtype)l;
10248 l = ($uvtype)d;
10249 if (l == k)
10250 printf("preserve\n");
10251 exit(0);
10252}
10253EOP
10254set try
10255if eval $compile; then
10256 case "`./try$exe_ext`" in
78691af5 10257 preserve) d_nv_preserves_uv="$define" ;;
cce08f5b
JH
10258 esac
10259fi
78691af5 10260case "$d_nv_preserves_uv" in
cce08f5b
JH
10261$define) $echo "Yes, they can." 2>&1 ;;
10262*) $echo "No, they can't." 2>&1
78691af5 10263 d_nv_preserves_uv="$undef"
cce08f5b
JH
10264 ;;
10265esac
10266
10267$rm -f try.* try
10268
bd026c32 10269case "$d_nv_preserves_uv" in
d6c14000 10270"$define") d_nv_preserves_uv_bits=`expr $uvsize \* 8` ;;
bd026c32
JH
10271*) $echo "Checking how many bits of your UVs your NVs can preserve..." >&4
10272 $cat <<EOP >try.c
10273#include <stdio.h>
10274int main() {
10275 $uvtype u = 0;
10276 int n = 8 * $uvsize;
10277 int i;
10278 for (i = 0; i < n; i++) {
10279 u = u << 1 | ($uvtype)1;
10280 if (($uvtype)($nvtype)u != u)
10281 break;
10282 }
10283 printf("%d\n", i);
10284 exit(0);
10285}
10286EOP
10287 set try
10288 if eval $compile; then
d6c14000 10289 d_nv_preserves_uv_bits="`./try$exe_ext`"
bd026c32 10290 fi
d6c14000
JH
10291 case "$d_nv_preserves_uv_bits" in
10292 [1-9]*) $echo "Your NVs can preserve $d_nv_preserves_uv_bits bits of your UVs." 2>&1 ;;
bd026c32 10293 *) $echo "Can't figure out how many bits your NVs preserve." 2>&1
d6c14000 10294 d_nv_preserves_uv_bits="$undef"
bd026c32
JH
10295 ;;
10296 esac
10297 $rm -f try.* try
10298 ;;
10299esac
10300
10301
c5f05a91
JH
10302
10303: check for off64_t
10304echo " "
10305echo "Checking to see if you have off64_t..." >&4
10306$cat >try.c <<EOCP
10307#include <sys/types.h>
10308#include <unistd.h>
10309int main() { off64_t x = 7; }
10310EOCP
10311set try
10312if eval $compile; then
10313 val="$define"
10314 echo "You have off64_t."
10315else
10316 val="$undef"
10317 echo "You do not have off64_t."
10318 case "$lseeksize" in
10319 8) echo "(Your off_t is 64 bits, so you could use that.)" ;;
10320 esac
10321fi
10322$rm -f try.* try
10323set d_off64_t
10324eval $setvar
10325
c4747d3e 10326: see if POSIX threads are available
1f5ae88c
JH
10327set pthread.h i_pthread
10328eval $inhdr
10329
c4747d3e
JH
10330
10331
10332
10333: how to create joinable pthreads
10334if test "X$usethreads" = "X$define" -a "X$i_pthread" = "X$define"; then
13666627
JH
10335 echo " "
10336 echo "Checking what constant to use for creating joinable pthreads..." >&4
10337 $cat >try.c <<'EOCP'
10338#include <pthread.h>
10339int main() {
10340 int detachstate = JOINABLE;
10341}
10342EOCP
10343 set try -DJOINABLE=PTHREAD_CREATE_JOINABLE
10344 if eval $compile; then
c6912327 10345 echo "You seem to use PTHREAD_CREATE_JOINABLE." >&4
ef4af2be
JH
10346 val="$undef" # Yes, undef.
10347 set d_old_pthread_create_joinable
13666627 10348 eval $setvar
ef4af2be
JH
10349 val=""
10350 set old_pthread_create_joinable
13666627
JH
10351 eval $setvar
10352 else
10353 set try -DJOINABLE=PTHREAD_CREATE_UNDETACHED
10354 if eval $compile; then
c6912327 10355 echo "You seem to use PTHREAD_CREATE_UNDETACHED." >&4
13666627 10356 val="$define"
ef4af2be 10357 set d_old_pthread_create_joinable
13666627
JH
10358 eval $setvar
10359 val=PTHREAD_CREATE_UNDETACHED
ef4af2be 10360 set old_pthread_create_joinable
13666627
JH
10361 eval $setvar
10362 else
10363 set try -DJOINABLE=__UNDETACHED
10364 if eval $compile; then
c6912327 10365 echo "You seem to use __UNDETACHED." >&4
13666627 10366 val="$define"
ef4af2be 10367 set d_old_pthread_create_joinable
13666627
JH
10368 eval $setvar
10369 val=__UNDETACHED
ef4af2be 10370 set old_pthread_create_joinable
13666627
JH
10371 eval $setvar
10372 else
c6912327 10373 echo "Egads, nothing obvious found. Guessing that you use 0." >&4
13666627 10374 val="$define"
ef4af2be 10375 set d_old_pthread_create_joinable
13666627
JH
10376 eval $setvar
10377 val=0
ef4af2be 10378 set old_pthread_create_joinable
13666627
JH
10379 eval $setvar
10380 fi
10381 fi
10382 fi
10383 $rm -f try try.*
10384else
ef4af2be
JH
10385 d_old_pthread_create_joinable="$undef"
10386 old_pthread_create_joinable=""
13666627
JH
10387fi
10388
ef4af2be
JH
10389: see if pause exists
10390set pause d_pause
10391eval $inlibc
10392
10393: see if pipe exists
10394set pipe d_pipe
10395eval $inlibc
10396
10397: see if poll exists
10398set poll d_poll
10399eval $inlibc
10400
31dfa2f6
JH
10401
10402: see whether the various POSIXish _yields exist
10403$cat >try.c <<EOP
10404#include <pthread.h>
10405#include <stdio.h>
5a411a32 10406int main() {
31dfa2f6
JH
10407#ifdef SCHED_YIELD
10408 sched_yield();
10409#else
10410#ifdef PTHREAD_YIELD
10411 pthread_yield();
10412#else
10413#ifdef PTHREAD_YIELD_NULL
10414 pthread_yield(NULL);
10415#endif
10416#endif
10417#endif
10418}
10419EOP
10420: see if sched_yield exists
10421set try -DSCHED_YIELD
10422if eval $compile; then
10423 val="$define"
10424 sched_yield='sched_yield()'
10425else
10426 val="$undef"
10427fi
10428case "$usethreads" in
10429$define)
10430 case "$val" in
10431 $define) echo 'sched_yield() found.' >&4 ;;
10432 *) echo 'sched_yield() NOT found.' >&4 ;;
10433 esac
10434esac
10435set d_sched_yield
10436eval $setvar
10437
10438: see if pthread_yield exists
10439set try -DPTHREAD_YIELD
10440if eval $compile; then
10441 val="$define"
10442 case "$sched_yield" in
10443 '') sched_yield='pthread_yield()' ;;
10444 esac
10445else
10446 set try -DPTHREAD_YIELD_NULL
10447 if eval $compile; then
10448 val="$define"
10449 case "$sched_yield" in
10450 '') sched_yield='pthread_yield(NULL)' ;;
10451 esac
10452 else
10453 val="$undef"
10454 fi
10455fi
10456case "$usethreads" in
10457$define)
10458 case "$val" in
10459 $define) echo 'pthread_yield() found.' >&4 ;;
10460 *) echo 'pthread_yield() NOT found.' >&4 ;;
10461 esac
10462 ;;
10463esac
10464set d_pthread_yield
10465eval $setvar
10466
10467case "$sched_yield" in
10468'') sched_yield=undef ;;
10469esac
10470
10471$rm -f try try.*
10472
4aa0a1f7
AD
10473: see if this is a pwd.h system
10474set pwd.h i_pwd
10475eval $inhdr
10476
10477case "$i_pwd" in
10478$define)
10479 xxx=`./findhdr pwd.h`
85e6fe83 10480 $cppstdin $cppflags $cppminus < $xxx >$$.h
4aa0a1f7 10481
2304df62 10482 if $contains 'pw_quota' $$.h >/dev/null 2>&1; then
4aa0a1f7 10483 val="$define"
2304df62 10484 else
4aa0a1f7 10485 val="$undef"
2304df62 10486 fi
4aa0a1f7
AD
10487 set d_pwquota
10488 eval $setvar
10489
2304df62 10490 if $contains 'pw_age' $$.h >/dev/null 2>&1; then
4aa0a1f7 10491 val="$define"
2304df62 10492 else
4aa0a1f7 10493 val="$undef"
2304df62 10494 fi
4aa0a1f7
AD
10495 set d_pwage
10496 eval $setvar
10497
2304df62 10498 if $contains 'pw_change' $$.h >/dev/null 2>&1; then
4aa0a1f7 10499 val="$define"
2304df62 10500 else
4aa0a1f7 10501 val="$undef"
2304df62 10502 fi
4aa0a1f7
AD
10503 set d_pwchange
10504 eval $setvar
10505
2304df62 10506 if $contains 'pw_class' $$.h >/dev/null 2>&1; then
4aa0a1f7 10507 val="$define"
2304df62 10508 else
4aa0a1f7 10509 val="$undef"
2304df62 10510 fi
4aa0a1f7
AD
10511 set d_pwclass
10512 eval $setvar
10513
2304df62 10514 if $contains 'pw_expire' $$.h >/dev/null 2>&1; then
4aa0a1f7 10515 val="$define"
2304df62 10516 else
4aa0a1f7 10517 val="$undef"
2304df62 10518 fi
4aa0a1f7 10519 set d_pwexpire
cce08f5b 10520 eval $setvar
de1c2614 10521
cce08f5b
JH
10522 if $contains 'pw_comment' $$.h >/dev/null 2>&1; then
10523 val="$define"
1eeb0f31 10524 else
cce08f5b 10525 val="$undef"
1eeb0f31 10526 fi
cce08f5b
JH
10527 set d_pwcomment
10528 eval $setvar
10529
10530 if $contains 'pw_gecos' $$.h >/dev/null 2>&1; then
10531 val="$define"
10532 else
10533 val="$undef"
10534 fi
10535 set d_pwgecos
10536 eval $setvar
10537
10538 if $contains 'pw_passwd' $$.h >/dev/null 2>&1; then
10539 val="$define"
10540 else
10541 val="$undef"
10542 fi
10543 set d_pwpasswd
10544 eval $setvar
10545
10546 $rm -f $$.h
10547 ;;
10548*)
10549 val="$undef";
10550 set d_pwquota; eval $setvar
10551 set d_pwage; eval $setvar
10552 set d_pwchange; eval $setvar
10553 set d_pwclass; eval $setvar
10554 set d_pwexpire; eval $setvar
10555 set d_pwcomment; eval $setvar
10556 set d_pwgecos; eval $setvar
10557 set d_pwpasswd; eval $setvar
de1c2614
JH
10558 ;;
10559esac
10560
85e6fe83 10561: see if readdir and friends exist
2304df62
AD
10562set readdir d_readdir
10563eval $inlibc
85e6fe83
LW
10564set seekdir d_seekdir
10565eval $inlibc
10566set telldir d_telldir
10567eval $inlibc
10568set rewinddir d_rewinddir
10569eval $inlibc
2304df62 10570
a0d0e21e
LW
10571: see if readlink exists
10572set readlink d_readlink
10573eval $inlibc
10574
2304df62
AD
10575: see if rename exists
10576set rename d_rename
10577eval $inlibc
10578
10579: see if rmdir exists
10580set rmdir d_rmdir
10581eval $inlibc
10582
8ff267be 10583: see if memory.h is available.
10584val=''
10585set memory.h val
10586eval $inhdr
10587
10588: See if it conflicts with string.h
10589case "$val" in
10590$define)
10591 case "$strings" in
10592 '') ;;
10593 *)
10594 $cppstdin $cppflags $cppminus < $strings > mem.h
10595 if $contains 'memcpy' mem.h >/dev/null 2>&1; then
10596 echo " "
10597 echo "We won't be including <memory.h>."
10598 val="$undef"
10599 fi
10600 $rm -f mem.h
10601 ;;
10602 esac
10603esac
10604set i_memory
10605eval $setvar
10606
2304df62
AD
10607: can bcopy handle overlapping blocks?
10608val="$undef"
10609case "$d_bcopy" in
10610"$define")
10611 echo " "
10612 echo "Checking to see if your bcopy() can do overlapping copies..." >&4
dfe9444c 10613 $cat >try.c <<EOCP
8ff267be 10614#$i_memory I_MEMORY
10615#$i_stdlib I_STDLIB
10616#$i_string I_STRING
10617#$i_unistd I_UNISTD
10618EOCP
dfe9444c 10619 $cat >>try.c <<'EOCP'
8ff267be 10620#include <stdio.h>
8ff267be 10621#ifdef I_MEMORY
10622# include <memory.h>
10623#endif
10624#ifdef I_STDLIB
10625# include <stdlib.h>
10626#endif
10627#ifdef I_STRING
10628# include <string.h>
10629#else
10630# include <strings.h>
10631#endif
10632#ifdef I_UNISTD
10633# include <unistd.h> /* Needed for NetBSD */
10634#endif
d674cd6d 10635int main()
2304df62 10636{
85e6fe83
LW
10637char buf[128], abc[128];
10638char *b;
10639int len;
10640int off;
10641int align;
a0d0e21e 10642
85e6fe83 10643bcopy("abcdefghijklmnopqrstuvwxyz0123456789", abc, 36);
2304df62
AD
10644
10645for (align = 7; align >= 0; align--) {
10646 for (len = 36; len; len--) {
10647 b = buf+align;
85e6fe83 10648 bcopy(abc, b, len);
2304df62
AD
10649 for (off = 1; off <= len; off++) {
10650 bcopy(b, b+off, len);
10651 bcopy(b+off, b, len);
85e6fe83 10652 if (bcmp(b, abc, len))
2304df62
AD
10653 exit(1);
10654 }
10655 }
10656}
10657exit(0);
10658}
10659EOCP
dfe9444c 10660 set try
dc45a647 10661 if eval $compile_ok; then
dfe9444c 10662 if ./try 2>/dev/null; then
2304df62
AD
10663 echo "Yes, it can."
10664 val="$define"
10665 else
10666 echo "It can't, sorry."
8ff267be 10667 case "$d_memmove" in
10668 "$define") echo "But that's Ok since you have memmove()." ;;
10669 esac
2304df62
AD
10670 fi
10671 else
10672 echo "(I can't compile the test program, so we'll assume not...)"
8ff267be 10673 case "$d_memmove" in
10674 "$define") echo "But that's Ok since you have memmove()." ;;
10675 esac
2304df62
AD
10676 fi
10677 ;;
10678esac
dfe9444c 10679$rm -f try.* try core
2304df62
AD
10680set d_safebcpy
10681eval $setvar
10682
10683: can memcpy handle overlapping blocks?
10684val="$undef"
10685case "$d_memcpy" in
10686"$define")
10687 echo " "
10688 echo "Checking to see if your memcpy() can do overlapping copies..." >&4
dfe9444c 10689 $cat >try.c <<EOCP
8ff267be 10690#$i_memory I_MEMORY
10691#$i_stdlib I_STDLIB
10692#$i_string I_STRING
10693#$i_unistd I_UNISTD
10694EOCP
dfe9444c 10695 $cat >>try.c <<'EOCP'
8ff267be 10696#include <stdio.h>
8ff267be 10697#ifdef I_MEMORY
10698# include <memory.h>
10699#endif
10700#ifdef I_STDLIB
10701# include <stdlib.h>
10702#endif
10703#ifdef I_STRING
10704# include <string.h>
10705#else
10706# include <strings.h>
10707#endif
10708#ifdef I_UNISTD
10709# include <unistd.h> /* Needed for NetBSD */
10710#endif
d674cd6d 10711int main()
2304df62 10712{
85e6fe83
LW
10713char buf[128], abc[128];
10714char *b;
10715int len;
10716int off;
10717int align;
10718
8ff267be 10719/* Copy "abcde..." string to char abc[] so that gcc doesn't
10720 try to store the string in read-only memory. */
85e6fe83 10721memcpy(abc, "abcdefghijklmnopqrstuvwxyz0123456789", 36);
2304df62
AD
10722
10723for (align = 7; align >= 0; align--) {
10724 for (len = 36; len; len--) {
10725 b = buf+align;
232e078e 10726 memcpy(b, abc, len);
2304df62 10727 for (off = 1; off <= len; off++) {
2304df62 10728 memcpy(b+off, b, len);
232e078e 10729 memcpy(b, b+off, len);
85e6fe83 10730 if (memcmp(b, abc, len))
2304df62
AD
10731 exit(1);
10732 }
10733 }
10734}
10735exit(0);
10736}
10737EOCP
dfe9444c 10738 set try
dc45a647 10739 if eval $compile_ok; then
dfe9444c 10740 if ./try 2>/dev/null; then
2304df62
AD
10741 echo "Yes, it can."
10742 val="$define"
10743 else
10744 echo "It can't, sorry."
8ff267be 10745 case "$d_memmove" in
10746 "$define") echo "But that's Ok since you have memmove()." ;;
10747 esac
2304df62
AD
10748 fi
10749 else
10750 echo "(I can't compile the test program, so we'll assume not...)"
8ff267be 10751 case "$d_memmove" in
10752 "$define") echo "But that's Ok since you have memmove()." ;;
10753 esac
2304df62
AD
10754 fi
10755 ;;
10756esac
dfe9444c 10757$rm -f try.* try core
2304df62
AD
10758set d_safemcpy
10759eval $setvar
10760
36477c24 10761: can memcmp be trusted to compare relative magnitude?
10762val="$undef"
10763case "$d_memcmp" in
10764"$define")
10765 echo " "
dfe9444c
AD
10766 echo "Checking if your memcmp() can compare relative magnitude..." >&4
10767 $cat >try.c <<EOCP
36477c24 10768#$i_memory I_MEMORY
10769#$i_stdlib I_STDLIB
10770#$i_string I_STRING
10771#$i_unistd I_UNISTD
10772EOCP
dfe9444c 10773 $cat >>try.c <<'EOCP'
36477c24 10774#include <stdio.h>
36477c24 10775#ifdef I_MEMORY
10776# include <memory.h>
10777#endif
10778#ifdef I_STDLIB
10779# include <stdlib.h>
10780#endif
10781#ifdef I_STRING
10782# include <string.h>
10783#else
10784# include <strings.h>
10785#endif
10786#ifdef I_UNISTD
10787# include <unistd.h> /* Needed for NetBSD */
10788#endif
d674cd6d 10789int main()
36477c24 10790{
10791char a = -1;
10792char b = 0;
10793if ((a < b) && memcmp(&a, &b, 1) < 0)
10794 exit(1);
10795exit(0);
10796}
10797EOCP
dfe9444c 10798 set try
dc45a647 10799 if eval $compile_ok; then
dfe9444c 10800 if ./try 2>/dev/null; then
36477c24 10801 echo "Yes, it can."
10802 val="$define"
10803 else
10804 echo "No, it can't (it uses signed chars)."
10805 fi
10806 else
10807 echo "(I can't compile the test program, so we'll assume not...)"
10808 fi
10809 ;;
10810esac
dfe9444c 10811$rm -f try.* try core
36477c24 10812set d_sanemcmp
10813eval $setvar
10814
2304df62
AD
10815: see if select exists
10816set select d_select
10817eval $inlibc
10818
10819: see if semctl exists
10820set semctl d_semctl
10821eval $inlibc
10822
10823: see if semget exists
10824set semget d_semget
10825eval $inlibc
10826
10827: see if semop exists
10828set semop d_semop
10829eval $inlibc
10830
10831: see how much of the 'sem*(2)' library is present.
10832h_sem=true
10833echo " "
10834case "$d_semctl$d_semget$d_semop" in
10835*"$undef"*) h_sem=false;;
10836esac
6087ac44
JH
10837case "$osname" in
10838freebsd)
10839 case "`ipcs 2>&1`" in
10840 "SVID messages"*"not configured"*)
5ff3f7a4 10841 echo "Your $osname does not have the sem*(2) configured." >&4
6087ac44
JH
10842 h_sem=false
10843 val="$undef"
10844 set semctl d_semctl
10845 eval $setvar
10846 set semget d_semget
10847 eval $setvar
10848 set semop d_semop
10849 eval $setvar
10850 ;;
10851 esac
10852 ;;
10853esac
2304df62
AD
10854: we could also check for sys/ipc.h ...
10855if $h_sem && $test `./findhdr sys/sem.h`; then
10856 echo "You have the full sem*(2) library." >&4
10857 val="$define"
10858else
10859 echo "You don't have the full sem*(2) library." >&4
10860 val="$undef"
10861fi
10862set d_sem
10863eval $setvar
10864
bd89102f
AD
10865: see whether sys/sem.h defines union semun
10866echo " "
10867$cat > try.c <<'END'
10868#include <sys/types.h>
10869#include <sys/ipc.h>
10870#include <sys/sem.h>
10871int main () { union semun semun; semun.buf = 0; }
10872END
10873set try
10874if eval $compile; then
10875 echo "You have union semun in <sys/sem.h>." >&4
10876 val="$define"
10877else
10878 echo "You do not have union semun in <sys/sem.h>." >&4
10879 val="$undef"
10880fi
85ab1d1d 10881$rm -f try try.c try.h
bd89102f
AD
10882set d_union_semun
10883eval $setvar
10884
10885: see how to do semctl IPC_STAT
10886case "$d_sem" in
10887$define)
10888 : see whether semctl IPC_STAT can use union semun
10889 echo " "
85ab1d1d
JH
10890 $cat > try.h <<END
10891#ifndef S_IRUSR
10892# ifdef S_IREAD
10893# define S_IRUSR S_IREAD
10894# define S_IWUSR S_IWRITE
10895# define S_IXUSR S_IEXEC
10896# else
10897# define S_IRUSR 0400
10898# define S_IWUSR 0200
10899# define S_IXUSR 0100
10900# endif
10901# define S_IRGRP (S_IRUSR>>3)
10902# define S_IWGRP (S_IWUSR>>3)
10903# define S_IXGRP (S_IXUSR>>3)
10904# define S_IROTH (S_IRUSR>>6)
10905# define S_IWOTH (S_IWUSR>>6)
10906# define S_IXOTH (S_IXUSR>>6)
10907#endif
10908#ifndef S_IRWXU
10909# define S_IRWXU (S_IRUSR|S_IWUSR|S_IXUSR)
10910# define S_IRWXG (S_IRGRP|S_IWGRP|S_IXGRP)
10911# define S_IRWXO (S_IROTH|S_IWOTH|S_IXOTH)
10912#endif
10913END
10914
bd89102f
AD
10915 $cat > try.c <<END
10916#include <sys/types.h>
10917#include <sys/ipc.h>
10918#include <sys/sem.h>
10919#include <sys/stat.h>
10920#include <stdio.h>
10921#include <errno.h>
85ab1d1d 10922#include "try.h"
bd89102f
AD
10923#ifndef errno
10924extern int errno;
10925#endif
10926#$d_union_semun HAS_UNION_SEMUN
10927int main() {
10928 union semun
10929#ifndef HAS_UNION_SEMUN
10930 {
10931 int val;
10932 struct semid_ds *buf;
10933 unsigned short *array;
10934 }
10935#endif
10936 arg;
10937 int sem, st;
10938
10939#if defined(IPC_PRIVATE) && defined(S_IRWXU) && defined(S_IRWXG) && defined(S_IRWXO) && defined(IPC_CREAT)
10940 sem = semget(IPC_PRIVATE, 1, S_IRWXU|S_IRWXG|S_IRWXO|IPC_CREAT);
10941 if (sem > -1) {
10942 struct semid_ds argbuf;
10943 arg.buf = &argbuf;
10944# ifdef IPC_STAT
10945 st = semctl(sem, 0, IPC_STAT, arg);
10946 if (st == 0)
10947 printf("semun\n");
10948 else
10949# endif /* IPC_STAT */
10950 printf("semctl IPC_STAT failed: errno = %d\n", errno);
10951# ifdef IPC_RMID
10952 if (semctl(sem, 0, IPC_RMID, arg) != 0)
10953# endif /* IPC_RMID */
10954 printf("semctl IPC_RMID failed: errno = %d\n", errno);
10955 } else
10956#endif /* IPC_PRIVATE && ... */
10957 printf("semget failed: errno = %d\n", errno);
10958 return 0;
10959}
10960END
10961 val="$undef"
10962 set try
10963 if eval $compile; then
10964 xxx=`./try`
10965 case "$xxx" in
10966 semun) val="$define" ;;
10967 esac
10968 fi
10969 $rm -f try try.c
10970 set d_semctl_semun
10971 eval $setvar
10972 case "$d_semctl_semun" in
10973 $define)
10974 echo "You can use union semun for semctl IPC_STAT." >&4
10975 also='also'
10976 ;;
10977 *) echo "You cannot use union semun for semctl IPC_STAT." >&4
10978 also=''
10979 ;;
10980 esac
10981
10982 : see whether semctl IPC_STAT can use struct semid_ds pointer
10983 $cat > try.c <<'END'
10984#include <sys/types.h>
10985#include <sys/ipc.h>
10986#include <sys/sem.h>
10987#include <sys/stat.h>
85ab1d1d 10988#include "try.h"
bd89102f
AD
10989#include <stdio.h>
10990#include <errno.h>
10991#ifndef errno
10992extern int errno;
10993#endif
10994int main() {
10995 struct semid_ds arg;
10996 int sem, st;
10997
10998#if defined(IPC_PRIVATE) && defined(S_IRWXU) && defined(S_IRWXG) && defined(S_IRWXO) && defined(IPC_CREAT)
10999 sem = semget(IPC_PRIVATE, 1, S_IRWXU|S_IRWXG|S_IRWXO|IPC_CREAT);
11000 if (sem > -1) {
11001# ifdef IPC_STAT
11002 st = semctl(sem, 0, IPC_STAT, &arg);
11003 if (st == 0)
11004 printf("semid_ds\n");
11005 else
11006# endif /* IPC_STAT */
11007 printf("semctl IPC_STAT failed: errno = %d\n", errno);
11008# ifdef IPC_RMID
11009 if (semctl(sem, 0, IPC_RMID, &arg) != 0)
11010# endif /* IPC_RMID */
11011 printf("semctl IPC_RMID failed: errno = %d\n", errno);
11012 } else
11013#endif /* IPC_PRIVATE && ... */
11014 printf("semget failed: errno = %d\n", errno);
11015
11016 return 0;
11017}
11018END
11019 val="$undef"
11020 set try
11021 if eval $compile; then
11022 xxx=`./try`
11023 case "$xxx" in
11024 semid_ds) val="$define" ;;
11025 esac
11026 fi
11027 $rm -f try try.c
11028 set d_semctl_semid_ds
11029 eval $setvar
11030 case "$d_semctl_semid_ds" in
11031 $define)
7f3d1cf1 11032 echo "You can $also use struct semid_ds* for semctl IPC_STAT." >&4
bd89102f 11033 ;;
7f3d1cf1 11034 *) echo "You cannot use struct semid_ds* for semctl IPC_STAT." >&4
bd89102f
AD
11035 ;;
11036 esac
85ab1d1d 11037 $rm -f try.h
bd89102f
AD
11038 ;;
11039*) val="$undef"
11040
11041 # We do not have the full sem*(2) library, so assume we can not
11042 # use either.
11043
11044 set d_semctl_semun
11045 eval $setvar
11046
11047 set d_semctl_semid_ds
11048 eval $setvar
11049 ;;
11050esac
11051
2304df62
AD
11052: see if setegid exists
11053set setegid d_setegid
11054eval $inlibc
11055
11056: see if seteuid exists
11057set seteuid d_seteuid
11058eval $inlibc
11059
5ff3f7a4
GS
11060: see if setgrent exists
11061set setgrent d_setgrent
11062eval $inlibc
11063
693762b4
AD
11064: see if sethostent exists
11065set sethostent d_sethent
11066eval $inlibc
11067
a0d0e21e
LW
11068: see if setlinebuf exists
11069set setlinebuf d_setlinebuf
11070eval $inlibc
11071
2304df62
AD
11072: see if setlocale exists
11073set setlocale d_setlocale
11074eval $inlibc
a0d0e21e 11075
e5c9fcd0
AD
11076: see if setnetent exists
11077set setnetent d_setnent
11078eval $inlibc
11079
11080: see if setprotoent exists
11081set setprotoent d_setpent
11082eval $inlibc
11083
2304df62
AD
11084: see if setpgid exists
11085set setpgid d_setpgid
11086eval $inlibc
11087
2304df62
AD
11088: see if setpgrp2 exists
11089set setpgrp2 d_setpgrp2
11090eval $inlibc
11091
11092: see if setpriority exists
11093set setpriority d_setprior
11094eval $inlibc
11095
5ff3f7a4
GS
11096: see if setpwent exists
11097set setpwent d_setpwent
11098eval $inlibc
11099
2304df62
AD
11100: see if setregid exists
11101set setregid d_setregid
11102eval $inlibc
11103set setresgid d_setresgid
11104eval $inlibc
11105
11106: see if setreuid exists
11107set setreuid d_setreuid
11108eval $inlibc
11109set setresuid d_setresuid
11110eval $inlibc
11111
11112: see if setrgid exists
11113set setrgid d_setrgid
11114eval $inlibc
11115
11116: see if setruid exists
11117set setruid d_setruid
11118eval $inlibc
11119
e5c9fcd0
AD
11120: see if setservent exists
11121set setservent d_setsent
11122eval $inlibc
11123
2304df62
AD
11124: see if setsid exists
11125set setsid d_setsid
11126eval $inlibc
11127
e5c9fcd0
AD
11128: see if setvbuf exists
11129set setvbuf d_setvbuf
11130eval $inlibc
11131
760ac839
LW
11132: see if sfio.h is available
11133set sfio.h i_sfio
11134eval $inhdr
11135
11136
8ff267be 11137: see if sfio library is available
760ac839
LW
11138case "$i_sfio" in
11139$define)
11140 val=''
11141 set sfreserve val
11142 eval $inlibc
11143 ;;
11144*)
11145 val="$undef"
11146 ;;
11147esac
8ff267be 11148: Ok, but do we want to use it.
760ac839
LW
11149case "$val" in
11150$define)
11151 case "$usesfio" in
8ff267be 11152 true|$define|[yY]*) dflt='y';;
760ac839
LW
11153 *) dflt='n';;
11154 esac
8ff267be 11155 echo "$package can use the sfio library, but it is experimental."
760ac839
LW
11156 rp="You seem to have sfio available, do you want to try using it?"
11157 . ./myread
11158 case "$ans" in
8ff267be 11159 y|Y) ;;
11160 *) echo "Ok, avoiding sfio this time. I'll use stdio instead."
760ac839 11161 val="$undef"
ff0cee69 11162 : Remove sfio from list of libraries to use
11163 set `echo X $libs | $sed -e 's/-lsfio / /' -e 's/-lsfio$//'`
11164 shift
11165 libs="$*"
11166 echo "libs = $libs" >&4
760ac839
LW
11167 ;;
11168 esac
11169 ;;
8ff267be 11170*) case "$usesfio" in
11171 true|$define|[yY]*)
11172 echo "Sorry, cannot find sfio on this machine" >&4
11173 echo "Ignoring your setting of usesfio=$usesfio" >&4
760ac839
LW
11174 ;;
11175 esac
11176 ;;
11177esac
8ff267be 11178set d_sfio
11179eval $setvar
760ac839
LW
11180case "$d_sfio" in
11181$define) usesfio='true';;
11182*) usesfio='false';;
11183esac
11184
2304df62
AD
11185: see if shmctl exists
11186set shmctl d_shmctl
11187eval $inlibc
11188
11189: see if shmget exists
11190set shmget d_shmget
11191eval $inlibc
11192
a0d0e21e
LW
11193: see if shmat exists
11194set shmat d_shmat
11195eval $inlibc
11196: see what shmat returns
11197case "$d_shmat" in
11198"$define")
11199 $cat >shmat.c <<'END'
11200#include <sys/shm.h>
11201void *shmat();
11202END
11203 if $cc $ccflags -c shmat.c >/dev/null 2>&1; then
11204 shmattype='void *'
11205 else
11206 shmattype='char *'
11207 fi
11208 echo "and it returns ($shmattype)." >&4
11209 : see if a prototype for shmat is available
e50aee73
AD
11210 xxx=`./findhdr sys/shm.h`
11211 $cppstdin $cppflags $cppminus < $xxx > shmat.c 2>/dev/null
a0d0e21e
LW
11212 if $contains 'shmat.*(' shmat.c >/dev/null 2>&1; then
11213 val="$define"
11214 else
11215 val="$undef"
11216 fi
11217 $rm -f shmat.[co]
11218 ;;
11219*)
11220 val="$undef"
11221 ;;
11222esac
11223set d_shmatprototype
11224eval $setvar
11225
11226: see if shmdt exists
11227set shmdt d_shmdt
11228eval $inlibc
11229
11230: see how much of the 'shm*(2)' library is present.
11231h_shm=true
11232echo " "
11233case "$d_shmctl$d_shmget$d_shmat$d_shmdt" in
11234*"$undef"*) h_shm=false;;
11235esac
6087ac44
JH
11236case "$osname" in
11237freebsd)
11238 case "`ipcs 2>&1`" in
11239 "SVID shared memory"*"not configured"*)
5ff3f7a4 11240 echo "Your $osname does not have the shm*(2) configured." >&4
6087ac44
JH
11241 h_shm=false
11242 val="$undef"
11243 set shmctl d_shmctl
11244 evat $setvar
11245 set shmget d_shmget
11246 evat $setvar
11247 set shmat d_shmat
11248 evat $setvar
11249 set shmdt d_shmdt
11250 evat $setvar
11251 ;;
11252 esac
11253 ;;
11254esac
a0d0e21e
LW
11255: we could also check for sys/ipc.h ...
11256if $h_shm && $test `./findhdr sys/shm.h`; then
11257 echo "You have the full shm*(2) library." >&4
11258 val="$define"
11259else
11260 echo "You don't have the full shm*(2) library." >&4
11261 val="$undef"
11262fi
11263set d_shm
11264eval $setvar
11265
2c7991dc 11266echo " "
8ff267be 11267: see if we have sigaction
11268if set sigaction val -f d_sigaction; eval $csym; $val; then
11269 echo 'sigaction() found.' >&4
dc45a647 11270 $cat > try.c <<'EOP'
8ff267be 11271#include <stdio.h>
11272#include <sys/types.h>
11273#include <signal.h>
d674cd6d 11274int main()
8ff267be 11275{
11276 struct sigaction act, oact;
190b66db 11277 act.sa_flags = 0;
48159a0c 11278 oact.sa_handler = 0;
14e4fe40
JH
11279 /* so that act and oact are used */
11280 exit(act.sa_flags == 0 && oact.sa_handler == 0);
8ff267be 11281}
11282EOP
dc45a647
MB
11283 set try
11284 if eval $compile_ok; then
11285 val="$define"
11286 else
11287 echo "But you don't seem to have a useable struct sigaction." >&4
11288 val="$undef"
11289 fi
8ff267be 11290else
dc45a647 11291 echo 'sigaction NOT found.' >&4
8ff267be 11292 val="$undef"
11293fi
11294set d_sigaction; eval $setvar
dfe9444c 11295$rm -f try try$_o try.c
2c7991dc 11296
a5f75d66
AD
11297: see if sigsetjmp exists
11298echo " "
921b2963
JH
11299case "$d_sigsetjmp" in
11300'')
11301 $cat >try.c <<'EOP'
11302#include <setjmp.h>
11303sigjmp_buf env;
11304int set = 1;
d674cd6d 11305int main()
921b2963
JH
11306{
11307 if (sigsetjmp(env,1))
11308 exit(set);
11309 set = 0;
11310 siglongjmp(env, 1);
11311 exit(1);
11312}
11313EOP
11314 set try
11315 if eval $compile; then
11316 if ./try >/dev/null 2>&1; then
11317 echo "POSIX sigsetjmp found." >&4
11318 val="$define"
11319 else
11320 $cat >&4 <<EOM
11321Uh-Oh! You have POSIX sigsetjmp and siglongjmp, but they do not work properly!!
11322I'll ignore them.
11323EOM
11324 val="$undef"
a0d0e21e 11325 fi
921b2963
JH
11326 else
11327 echo "sigsetjmp not found." >&4
11328 val="$undef"
a0d0e21e 11329 fi
921b2963
JH
11330 ;;
11331*) val="$d_sigsetjmp"
11332 case "$d_sigsetjmp" in
11333 $define) echo "POSIX sigsetjmp found." >&4;;
11334 $undef) echo "sigsetjmp not found." >&4;;
11335 esac
11336 ;;
11337esac
11338set d_sigsetjmp
11339eval $setvar
11340$rm -f try.c try
2304df62 11341
d9b3e12d
JH
11342: see if sys/stat.h is available
11343set sys/stat.h i_sysstat
11344eval $inhdr
11345
b7b35fc2 11346
2304df62
AD
11347: see if stat knows about block sizes
11348echo " "
b7b35fc2 11349echo "Checking to see if your struct stat has st_blocks field..." >&4
5ff3f7a4
GS
11350set d_statblks stat st_blocks $i_sysstat sys/stat.h
11351eval $hasfield
2304df62 11352
b7b35fc2 11353
ad27e871
JH
11354: see if this is a sys/vfs.h system
11355set sys/vfs.h i_sysvfs
11356eval $inhdr
11357
b7b35fc2 11358
ad27e871
JH
11359: see if this is a sys/statfs.h system
11360set sys/statfs.h i_sysstatfs
11361eval $inhdr
11362
11363
11364echo " "
8175356b 11365echo "Checking to see if your system supports struct statfs..." >&4
ad27e871
JH
11366set 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
11367eval $hasstruct
11368case "$d_statfs_s" in
a22e52b9
JH
11369"$define") echo "Yes, it does." ;;
11370*) echo "No, it doesn't." ;;
ad27e871
JH
11371esac
11372
11373
11374
11375: see if struct statfs knows about f_flags
11376case "$d_statfs_s" in
11377define)
11378 echo " "
8175356b 11379 echo "Checking to see if your struct statfs has f_flags field..." >&4
ad27e871
JH
11380 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
11381 eval $hasfield
11382 ;;
11383*) val="$undef"
11384 set d_statfs_f_flags
11385 eval $setvar
11386 ;;
11387esac
11388case "$d_statfs_f_flags" in
a22e52b9
JH
11389"$define") echo "Yes, it does." ;;
11390*) echo "No, it doesn't." ;;
ad27e871
JH
11391esac
11392
16d20bd9
AD
11393: see if _ptr and _cnt from stdio act std
11394echo " "
dca663ed 11395if $contains '_IO_fpos_t' `./findhdr stdio.h` `./findhdr libio.h` >/dev/null 2>&1 ; then
16d20bd9
AD
11396 echo "(Looks like you have stdio.h from Linux.)"
11397 case "$stdio_ptr" in
c2960299
AD
11398 '') stdio_ptr='((fp)->_IO_read_ptr)'
11399 ptr_lval=$define
11400 ;;
8e07c86e 11401 *) ptr_lval=$d_stdio_ptr_lval;;
16d20bd9
AD
11402 esac
11403 case "$stdio_cnt" in
c2960299
AD
11404 '') stdio_cnt='((fp)->_IO_read_end - (fp)->_IO_read_ptr)'
11405 cnt_lval=$undef
11406 ;;
8e07c86e 11407 *) cnt_lval=$d_stdio_cnt_lval;;
16d20bd9
AD
11408 esac
11409 case "$stdio_base" in
11410 '') stdio_base='((fp)->_IO_read_base)';;
11411 esac
11412 case "$stdio_bufsiz" in
c2960299 11413 '') stdio_bufsiz='((fp)->_IO_read_end - (fp)->_IO_read_base)';;
16d20bd9
AD
11414 esac
11415else
11416 case "$stdio_ptr" in
c2960299
AD
11417 '') stdio_ptr='((fp)->_ptr)'
11418 ptr_lval=$define
11419 ;;
8e07c86e 11420 *) ptr_lval=$d_stdio_ptr_lval;;
16d20bd9
AD
11421 esac
11422 case "$stdio_cnt" in
c2960299
AD
11423 '') stdio_cnt='((fp)->_cnt)'
11424 cnt_lval=$define
11425 ;;
8e07c86e 11426 *) cnt_lval=$d_stdio_cnt_lval;;
16d20bd9
AD
11427 esac
11428 case "$stdio_base" in
11429 '') stdio_base='((fp)->_base)';;
11430 esac
11431 case "$stdio_bufsiz" in
11432 '') stdio_bufsiz='((fp)->_cnt + (fp)->_ptr - (fp)->_base)';;
11433 esac
11434fi
11435: test whether _ptr and _cnt really work
11436echo "Checking how std your stdio is..." >&4
11437$cat >try.c <<EOP
11438#include <stdio.h>
11439#define FILE_ptr(fp) $stdio_ptr
11440#define FILE_cnt(fp) $stdio_cnt
d674cd6d 11441int main() {
16d20bd9
AD
11442 FILE *fp = fopen("try.c", "r");
11443 char c = getc(fp);
11444 if (
11445 18 <= FILE_cnt(fp) &&
11446 strncmp(FILE_ptr(fp), "include <stdio.h>\n", 18) == 0
11447 )
11448 exit(0);
11449 exit(1);
11450}
11451EOP
11452val="$undef"
dfe9444c
AD
11453set try
11454if eval $compile; then
16d20bd9
AD
11455 if ./try; then
11456 echo "Your stdio acts pretty std."
11457 val="$define"
11458 else
11459 echo "Your stdio isn't very std."
11460 fi
11461else
11462 echo "Your stdio doesn't appear very std."
11463fi
11464$rm -f try.c try
11465set d_stdstdio
11466eval $setvar
11467
8e07c86e 11468: Can _ptr be used as an lvalue?
e50aee73
AD
11469case "$d_stdstdio$ptr_lval" in
11470$define$define) val=$define ;;
c2960299
AD
11471*) val=$undef ;;
11472esac
11473set d_stdio_ptr_lval
11474eval $setvar
11475
8e07c86e 11476: Can _cnt be used as an lvalue?
e50aee73
AD
11477case "$d_stdstdio$cnt_lval" in
11478$define$define) val=$define ;;
c2960299
AD
11479*) val=$undef ;;
11480esac
11481set d_stdio_cnt_lval
11482eval $setvar
11483
16d20bd9
AD
11484: see if _base is also standard
11485val="$undef"
11486case "$d_stdstdio" in
11487$define)
11488 $cat >try.c <<EOP
11489#include <stdio.h>
11490#define FILE_base(fp) $stdio_base
11491#define FILE_bufsiz(fp) $stdio_bufsiz
d674cd6d 11492int main() {
16d20bd9
AD
11493 FILE *fp = fopen("try.c", "r");
11494 char c = getc(fp);
11495 if (
11496 19 <= FILE_bufsiz(fp) &&
11497 strncmp(FILE_base(fp), "#include <stdio.h>\n", 19) == 0
11498 )
11499 exit(0);
11500 exit(1);
11501}
11502EOP
dfe9444c
AD
11503 set try
11504 if eval $compile; then
16d20bd9 11505 if ./try; then
8ff267be 11506 echo "And its _base field acts std."
16d20bd9
AD
11507 val="$define"
11508 else
11509 echo "But its _base field isn't std."
11510 fi
11511 else
11512 echo "However, it seems to be lacking the _base field."
11513 fi
11514 $rm -f try.c try
11515 ;;
11516esac
11517set d_stdiobase
11518eval $setvar
11519
ed39a0f2
JH
11520$cat >&4 <<EOM
11521Checking how to access stdio streams by file descriptor number...
11522EOM
11523case "$stdio_stream_array" in
11524'') $cat >try.c <<EOCP
11525#include <stdio.h>
11526int main() {
11527 if (&STDIO_STREAM_ARRAY[fileno(stdin)] == stdin)
11528 printf("yes\n");
11529}
11530EOCP
11531 for s in _iob __iob __sF
11532 do
11533 set try -DSTDIO_STREAM_ARRAY=$s
11534 if eval $compile; then
11535 case "`./try$exe_ext`" in
11536 yes) stdio_stream_array=$s; break ;;
11537 esac
11538 fi
11539 done
11540 $rm -f try.* try$exe_ext
11541esac
11542case "$stdio_stream_array" in
11543'') $cat >&4 <<EOM
11544I can't figure out how to access stdio streams by file descriptor number.
11545EOM
11546 d_stdio_stream_array="$undef"
11547 ;;
11548*) $cat >&4 <<EOM
11549You can access stdio streams by file descriptor number by the $stdio_stream_array array.
11550EOM
11551 d_stdio_stream_array="$define"
11552 ;;
11553esac
11554
a0d0e21e
LW
11555: see if strcoll exists
11556set strcoll d_strcoll
11557eval $inlibc
2304df62
AD
11558
11559: check for structure copying
11560echo " "
11561echo "Checking to see if your C compiler can copy structs..." >&4
11562$cat >try.c <<'EOCP'
5a411a32 11563int main()
2304df62
AD
11564{
11565 struct blurfl {
11566 int dyick;
11567 } foo, bar;
11568
11569 foo = bar;
11570}
11571EOCP
11572if $cc -c try.c >/dev/null 2>&1 ; then
11573 val="$define"
11574 echo "Yup, it can."
11575else
11576 val="$undef"
11577 echo "Nope, it can't."
11578fi
11579set d_strctcpy
11580eval $setvar
11581$rm -f try.*
11582
11583: see if strerror and/or sys_errlist[] exist
11584echo " "
28e8609d
JH
11585if test "X$d_strerror" = X -o "X$d_syserrlst" = X; then
11586 if set strerror val -f d_strerror; eval $csym; $val; then
5ff3f7a4
GS
11587 echo 'strerror() found.' >&4
11588 d_strerror="$define"
11589 d_strerrm='strerror(e)'
11590 if set sys_errlist val -a d_syserrlst; eval $csym; $val; then
11591 echo "(You also have sys_errlist[], so we could roll our own strerror.)"
11592 d_syserrlst="$define"
11593 else
11594 echo "(Since you don't have sys_errlist[], sterror() is welcome.)"
11595 d_syserrlst="$undef"
11596 fi
28e8609d 11597 elif xxx=`./findhdr string.h`; test "$xxx" || xxx=`./findhdr strings.h`; \
5ff3f7a4
GS
11598 $contains '#[ ]*define.*strerror' "$xxx" >/dev/null 2>&1; then
11599 echo 'strerror() found in string header.' >&4
11600 d_strerror="$define"
11601 d_strerrm='strerror(e)'
11602 if set sys_errlist val -a d_syserrlst; eval $csym; $val; then
11603 echo "(Most probably, strerror() uses sys_errlist[] for descriptions.)"
11604 d_syserrlst="$define"
11605 else
11606 echo "(You don't appear to have any sys_errlist[], how can this be?)"
11607 d_syserrlst="$undef"
11608 fi
28e8609d 11609 elif set sys_errlist val -a d_syserrlst; eval $csym; $val; then
5ff3f7a4
GS
11610 echo "strerror() not found, but you have sys_errlist[] so we'll use that." >&4
11611 d_strerror="$undef"
11612 d_syserrlst="$define"
11613 d_strerrm='((e)<0||(e)>=sys_nerr?"unknown":sys_errlist[e])'
28e8609d 11614 else
5ff3f7a4
GS
11615 echo 'strerror() and sys_errlist[] NOT found.' >&4
11616 d_strerror="$undef"
11617 d_syserrlst="$undef"
11618 d_strerrm='"unknown"'
28e8609d 11619 fi
2304df62
AD
11620fi
11621
a89d8a78
DH
11622: see if strtod exists
11623set strtod d_strtod
11624eval $inlibc
11625
11626: see if strtol exists
11627set strtol d_strtol
11628eval $inlibc
11629
ff935051
JH
11630: see if strtold exists
11631set strtold d_strtold
11632eval $inlibc
11633
76d49b1c
JH
11634: see if strtoll exists
11635set strtoll d_strtoll
11636eval $inlibc
11637
358a0a84
JH
11638case "$d_longlong-$d_strtoll" in
11639"$define-$define")
11640 $cat <<EOM
11641Checking whether your strtoll() works okay...
11642EOM
11643 $cat >try.c <<'EOCP'
11644#include <errno.h>
11645#ifdef __hpux
11646#define strtoll __strtoll
11647#endif
11648#include <stdio.h>
11649extern long long int strtoll(char *s, char **, int);
11650static int bad = 0;
11651int check(char *s, long long ell, int een) {
11652 long long gll;
11653 errno = 0;
11654 gll = strtoll(s, 0, 10);
11655 if (!((gll == ell) && (errno == een)))
11656 bad++;
11657}
11658int main() {
11659 check(" 1", 1LL, 0);
11660 check(" 0", 0LL, 0);
11661 check("-1", -1LL, 0);
11662 check("-9223372036854775808", -9223372036854775808LL, 0);
11663 check("-9223372036854775808", -9223372036854775808LL, 0);
11664 check(" 9223372036854775807", 9223372036854775807LL, 0);
11665 check("-9223372036854775808", -9223372036854775808LL, 0);
11666 check(" 9223372036854775808", 9223372036854775807LL, ERANGE);
11667 check("-9223372036854775809", -9223372036854775808LL, ERANGE);
11668 if (!bad)
11669 printf("ok\n");
11670}
11671EOCP
11672 set try
11673 if eval $compile; then
11674 case "`./try`" in
11675 ok) echo "Your strtoll() seems to be working okay." ;;
11676 *) cat <<EOM >&4
11677Your strtoll() doesn't seem to be working okay.
11678EOM
11679 d_strtoll="$undef"
11680 ;;
11681 esac
11682 fi
11683 ;;
11684esac
11685
a89d8a78
DH
11686: see if strtoul exists
11687set strtoul d_strtoul
11688eval $inlibc
11689
cf2093f6
JH
11690: see if strtoull exists
11691set strtoull d_strtoull
11692eval $inlibc
11693
358a0a84
JH
11694case "$d_longlong-$d_strtoull" in
11695"$define-$define")
11696 $cat <<EOM
11697Checking whether your strtoull() works okay...
11698EOM
11699 $cat >try.c <<'EOCP'
11700#include <errno.h>
11701#ifdef __hpux
11702#define strtoull __strtoull
11703#endif
11704#include <stdio.h>
11705extern unsigned long long int strtoull(char *s, char **, int);
11706static int bad = 0;
11707int check(char *s, long long eull, int een) {
11708 long long gull;
11709 errno = 0;
11710 gull = strtoull(s, 0, 10);
11711 if (!((gull == eull) && (errno == een)))
11712 bad++;
11713}
11714int main() {
11715 check(" 1", 1LL, 0);
11716 check(" 0", 0LL, 0);
11717 check("18446744073709551615", 18446744073709551615ULL, 0);
11718 check("18446744073709551616", 18446744073709551615ULL, ERANGE);
11719 if (!bad)
11720 printf("ok\n");
11721}
11722EOCP
11723 set try
11724 if eval $compile; then
11725 case "`./try`" in
11726 ok) echo "Your strtoull() seems to be working okay." ;;
11727 *) cat <<EOM >&4
11728Your strtoull() doesn't seem to be working okay.
11729EOM
11730 d_strtoull="$undef"
11731 ;;
11732 esac
11733 fi
11734 ;;
11735esac
11736
ff935051
JH
11737: see if strtouq exists
11738set strtouq d_strtouq
11739eval $inlibc
11740
a0d0e21e
LW
11741: see if strxfrm exists
11742set strxfrm d_strxfrm
11743eval $inlibc
11744
8175356b
JH
11745: see if symlink exists
11746set symlink d_symlink
11747eval $inlibc
11748
11749: see if syscall exists
11750set syscall d_syscall
11751eval $inlibc
11752
11753: see if sysconf exists
11754set sysconf d_sysconf
11755eval $inlibc
11756
11757: see if system exists
11758set system d_system
11759eval $inlibc
11760
11761: see if tcgetpgrp exists
11762set tcgetpgrp d_tcgetpgrp
11763eval $inlibc
11764
11765: see if tcsetpgrp exists
11766set tcsetpgrp d_tcsetpgrp
11767eval $inlibc
11768
11769: see if prototype for telldir is available
11770echo " "
11771set d_telldirproto telldir $i_systypes sys/types.h $i_dirent dirent.h
11772eval $hasproto
dc45a647 11773
2c7991dc 11774: see if this is a sys/times.h system
11775set sys/times.h i_systimes
11776eval $inhdr
4633a7c4 11777
2c7991dc 11778: see if times exists
4633a7c4 11779echo " "
2c7991dc 11780if set times val -f d_times; eval $csym; $val; then
11781 echo 'times() found.' >&4
11782 d_times="$define"
11783 inc=''
11784 case "$i_systimes" in
11785 "$define") inc='sys/times.h';;
11786 esac
dc45a647 11787 rp="What is the type returned by times() on this system?"
2c7991dc 11788 set clock_t clocktype long stdio.h sys/types.h $inc
dc45a647 11789 eval $typedef_ask
2c7991dc 11790else
11791 echo 'times() NOT found, hope that will do.' >&4
11792 d_times="$undef"
11793 clocktype='int'
11794fi
2304df62 11795
2c7991dc 11796: see if truncate exists
11797set truncate d_truncate
11798eval $inlibc
2304df62 11799
2c7991dc 11800: see if tzname[] exists
11801echo " "
11802if set tzname val -a d_tzname; eval $csym; $val; then
11803 val="$define"
11804 echo 'tzname[] found.' >&4
11805else
11806 val="$undef"
11807 echo 'tzname[] NOT found.' >&4
11808fi
11809set d_tzname
11810eval $setvar
11811
11812: see if umask exists
11813set umask d_umask
11814eval $inlibc
85e6fe83 11815
0545a864
JH
11816: see if ustat exists
11817set ustat d_ustat
11818eval $inlibc
11819
4633a7c4
LW
11820: backward compatibility for d_hvfork
11821if test X$d_hvfork != X; then
11822 d_vfork="$d_hvfork"
11823 d_hvfork=''
11824fi
11825: see if there is a vfork
11826val=''
11827set vfork val
11828eval $inlibc
ecfc5424 11829
4633a7c4
LW
11830: Ok, but do we want to use it. vfork is reportedly unreliable in
11831: perl on Solaris 2.x, and probably elsewhere.
11832case "$val" in
11833$define)
16d20bd9 11834 echo " "
4633a7c4
LW
11835 case "$usevfork" in
11836 false) dflt='n';;
11837 *) dflt='y';;
11838 esac
f10488a3
JH
11839 cat <<'EOM'
11840
11841Perl can only use a vfork() that doesn't suffer from strict
11842restrictions on calling functions or modifying global data in
11843the child. For example, glibc-2.1 contains such a vfork()
11844that is unsuitable. If your system provides a proper fork()
11845call, chances are that you do NOT want perl to use vfork().
11846
11847EOM
11848 rp="Do you still want to use vfork()?"
4633a7c4
LW
11849 . ./myread
11850 case "$ans" in
11851 y|Y) ;;
11852 *)
11853 echo "Ok, we won't use vfork()."
11854 val="$undef"
11855 ;;
11856 esac
ecfc5424
AD
11857 ;;
11858esac
4633a7c4
LW
11859set d_vfork
11860eval $setvar
11861case "$d_vfork" in
11862$define) usevfork='true';;
11863*) usevfork='false';;
11864esac
ecfc5424 11865
4633a7c4
LW
11866: see if this is an sysdir system
11867set sys/dir.h i_sysdir
11868eval $inhdr
11869
11870: see if this is an sysndir system
11871set sys/ndir.h i_sysndir
11872eval $inhdr
11873
11874: see if closedir exists
11875set closedir d_closedir
11876eval $inlibc
11877
11878case "$d_closedir" in
11879"$define")
16d20bd9 11880 echo " "
4633a7c4
LW
11881 echo "Checking whether closedir() returns a status..." >&4
11882 cat > closedir.c <<EOM
11883#$i_dirent I_DIRENT /**/
11884#$i_sysdir I_SYS_DIR /**/
11885#$i_sysndir I_SYS_NDIR /**/
bfb7748a 11886#$i_systypes I_SYS_TYPES /**/
4633a7c4 11887
bfb7748a
AD
11888#if defined(I_SYS_TYPES)
11889#include <sys/types.h>
11890#endif
4633a7c4
LW
11891#if defined(I_DIRENT)
11892#include <dirent.h>
11893#if defined(NeXT) && defined(I_SYS_DIR) /* NeXT needs dirent + sys/dir.h */
11894#include <sys/dir.h>
4aa0a1f7 11895#endif
4633a7c4
LW
11896#else
11897#ifdef I_SYS_NDIR
11898#include <sys/ndir.h>
11899#else
11900#ifdef I_SYS_DIR
11901#ifdef hp9000s500
11902#include <ndir.h> /* may be wrong in the future */
11903#else
11904#include <sys/dir.h>
11905#endif
11906#endif
11907#endif
11908#endif
11909int main() { return closedir(opendir(".")); }
11910EOM
dfe9444c 11911 set closedir
dc45a647 11912 if eval $compile_ok; then
4633a7c4
LW
11913 if ./closedir > /dev/null 2>&1 ; then
11914 echo "Yes, it does."
11915 val="$undef"
ecfc5424 11916 else
4633a7c4
LW
11917 echo "No, it doesn't."
11918 val="$define"
ecfc5424
AD
11919 fi
11920 else
4633a7c4
LW
11921 echo "(I can't seem to compile the test program--assuming it doesn't)"
11922 val="$define"
ecfc5424 11923 fi
ecfc5424 11924 ;;
4633a7c4
LW
11925*)
11926 val="$undef";
ecfc5424
AD
11927 ;;
11928esac
4633a7c4
LW
11929set d_void_closedir
11930eval $setvar
11931$rm -f closedir*
11932: check for volatile keyword
ecfc5424 11933echo " "
4633a7c4
LW
11934echo 'Checking to see if your C compiler knows about "volatile"...' >&4
11935$cat >try.c <<'EOCP'
5a411a32 11936int main()
4633a7c4
LW
11937{
11938 typedef struct _goo_struct goo_struct;
11939 goo_struct * volatile goo = ((goo_struct *)0);
11940 struct _goo_struct {
11941 long long_int;
11942 int reg_int;
11943 char char_var;
11944 };
11945 typedef unsigned short foo_t;
11946 char *volatile foo;
11947 volatile int bar;
11948 volatile foo_t blech;
11949 foo = foo;
a0d0e21e
LW
11950}
11951EOCP
4633a7c4
LW
11952if $cc -c $ccflags try.c >/dev/null 2>&1 ; then
11953 val="$define"
11954 echo "Yup, it does."
11955else
11956 val="$undef"
11957 echo "Nope, it doesn't."
11958fi
11959set d_volatile
11960eval $setvar
11961$rm -f try.*
a0d0e21e 11962
4633a7c4
LW
11963: see if there is a wait4
11964set wait4 d_wait4
8e07c86e
AD
11965eval $inlibc
11966
4633a7c4
LW
11967: see if waitpid exists
11968set waitpid d_waitpid
11969eval $inlibc
11970
11971: see if wcstombs exists
11972set wcstombs d_wcstombs
11973eval $inlibc
11974
11975: see if wctomb exists
11976set wctomb d_wctomb
11977eval $inlibc
11978
11979: preserve RCS keywords in files with variable substitution, grrr
11980Date='$Date'
11981Id='$Id'
11982Log='$Log'
11983RCSfile='$RCSfile'
11984Revision='$Revision'
11985
ca8cfa54
JH
11986case "$crosscompile" in
11987''|[nN]*) crosscompile="$undef" ;;
11988esac
11989
11990case "$osname" in
f556e5b9 11991next|rhapsody|darwin) multiarch="$define" ;;
ca8cfa54
JH
11992esac
11993case "$multiarch" in
11994''|[nN]*) multiarch="$undef" ;;
11995esac
11996
4633a7c4
LW
11997: check for alignment requirements
11998echo " "
68c15b6f
HM
11999case "$crosscompile$multiarch" in
12000*$define*)
ca8cfa54
JH
12001 $cat <<EOM
12002You seem to be either cross-compiling or doing a multiarchitecture build,
12003skipping the memory alignment check.
68c15b6f
HM
12004
12005EOM
12006 case "$alignbytes" in
12007 '') alignbytes=8 ;;
12008 esac
12009 ;;
12010*)
12011 case "$alignbytes" in
12012 '') echo "Checking alignment constraints..." >&4
87b71857
JH
12013 if $test "X$uselongdouble" = Xdefine -a "X$d_longdbl" = Xdefine; then
12014 $cat >try.c <<'EOCP'
12015typedef long double NV;
12016EOCP
12017 else
12018 $cat >try.c <<'EOCP'
12019typedef double NV;
12020EOCP
12021 fi
12022 $cat >>try.c <<'EOCP'
14e4fe40 12023#include <stdio.h>
4633a7c4
LW
12024struct foobar {
12025 char foo;
87b71857 12026 NV bar;
732c9516 12027} try_algn;
d674cd6d 12028int main()
4633a7c4 12029{
213c275f
JH
12030 printf("%d\n", (int)((char *)&try_algn.bar - (char *)&try_algn.foo));
12031 return(0);
4633a7c4
LW
12032}
12033EOCP
68c15b6f
HM
12034 set try
12035 if eval $compile_ok; then
12036 dflt=`./try`
12037 else
12038 dflt='8'
12039 echo "(I can't seem to compile the test program...)"
12040 fi
12041 ;;
12042 *) dflt="$alignbytes"
12043 ;;
12044 esac
12045 rp="Doubles must be aligned on a how-many-byte boundary?"
12046 . ./myread
12047 alignbytes="$ans"
12048 $rm -f try.c try
8e07c86e 12049 ;;
ecfc5424 12050esac
68c15b6f 12051
85e6fe83 12052
49c10eea
JH
12053: set the base revision
12054baserev=5.0
12055
4633a7c4 12056: check for ordering of bytes in a long
68c15b6f
HM
12057echo " "
12058case "$crosscompile$multiarch" in
12059*$define*)
12060 $cat <<EOM
ca8cfa54
JH
12061You seem to be either cross-compiling or doing a multiarchitecture build,
12062skipping the byteorder check.
68c15b6f
HM
12063
12064EOM
d9b3e12d 12065 byteorder='0xffff'
68c15b6f
HM
12066 ;;
12067*)
12068 case "$byteorder" in
12069 '')
12070 $cat <<'EOM'
4633a7c4
LW
12071In the following, larger digits indicate more significance. A big-endian
12072machine like a Pyramid or a Motorola 680?0 chip will come out to 4321. A
12073little-endian machine like a Vax or an Intel 80?86 chip would be 1234. Other
d9b3e12d
JH
12074machines may have weird orders like 3412. A Cray will report 87654321,
12075an Alpha will report 12345678. If the test program works the default is
12076probably right.
4633a7c4
LW
12077I'm now running the test program...
12078EOM
68c15b6f 12079 $cat >try.c <<'EOCP'
4633a7c4 12080#include <stdio.h>
d674cd6d 12081int main()
4633a7c4
LW
12082{
12083 int i;
12084 union {
12085 unsigned long l;
12086 char c[sizeof(long)];
12087 } u;
12088
12089 if (sizeof(long) > 4)
12090 u.l = (0x08070605L << 32) | 0x04030201L;
12091 else
12092 u.l = 0x04030201L;
12093 for (i = 0; i < sizeof(long); i++)
12094 printf("%c", u.c[i]+'0');
12095 printf("\n");
12096 exit(0);
12097}
12098EOCP
68c15b6f
HM
12099 xxx_prompt=y
12100 set try
12101 if eval $compile && ./try > /dev/null; then
12102 dflt=`./try`
12103 case "$dflt" in
12104 [1-4][1-4][1-4][1-4]|12345678|87654321)
12105 echo "(The test program ran ok.)"
12106 echo "byteorder=$dflt"
12107 xxx_prompt=n
4633a7c4 12108 ;;
68c15b6f
HM
12109 ????|????????) echo "(The test program ran ok.)" ;;
12110 *) echo "(The test program didn't run right for some reason.)" ;;
12111 esac
12112 else
12113 dflt='4321'
12114 cat <<'EOM'
4633a7c4
LW
12115(I can't seem to compile the test program. Guessing big-endian...)
12116EOM
68c15b6f
HM
12117 fi
12118 case "$xxx_prompt" in
12119 y)
12120 rp="What is the order of bytes in a long?"
12121 . ./myread
12122 byteorder="$ans"
12123 ;;
12124 *) byteorder=$dflt
12125 ;;
12126 esac
ecfc5424
AD
12127 ;;
12128 esac
68c15b6f 12129 $rm -f try.c try
ecfc5424
AD
12130 ;;
12131esac
68c15b6f 12132
85e6fe83 12133
4633a7c4 12134: how do we catenate cpp tokens here?
2304df62 12135echo " "
4633a7c4
LW
12136echo "Checking to see how your cpp does stuff like catenate tokens..." >&4
12137$cat >cpp_stuff.c <<'EOCP'
12138#define RCAT(a,b)a/**/b
12139#define ACAT(a,b)a ## b
12140RCAT(Rei,ser)
12141ACAT(Cir,cus)
12142EOCP
12143$cppstdin $cppflags $cppminus <cpp_stuff.c >cpp_stuff.out 2>&1
12144if $contains 'Circus' cpp_stuff.out >/dev/null 2>&1; then
dfe9444c 12145 echo "Oh! Smells like ANSI's been here." >&4
4633a7c4
LW
12146 echo "We can catify or stringify, separately or together!"
12147 cpp_stuff=42
12148elif $contains 'Reiser' cpp_stuff.out >/dev/null 2>&1; then
dfe9444c 12149 echo "Ah, yes! The good old days!" >&4
4633a7c4
LW
12150 echo "However, in the good old days we don't know how to stringify and"
12151 echo "catify at the same time."
12152 cpp_stuff=1
12153else
12154 $cat >&4 <<EOM
12155Hmm, I don't seem to be able to catenate tokens with your cpp. You're going
12156to have to edit the values of CAT[2-5] in config.h...
a0d0e21e 12157EOM
4633a7c4
LW
12158 cpp_stuff="/* Help! How do we handle cpp_stuff? */*/"
12159fi
12160$rm -f cpp_stuff.*
a0d0e21e 12161
4633a7c4
LW
12162: see if this is a db.h system
12163set db.h i_db
12164eval $inhdr
12165
12166case "$i_db" in
68dc0745 12167$define)
1f70e1ea 12168 : Check db version.
68dc0745 12169 echo " "
12170 echo "Checking Berkeley DB version ..." >&4
12171 $cat >try.c <<EOCP
12172#$d_const HASCONST
12173#ifndef HASCONST
12174#define const
12175#endif
12176#include <sys/types.h>
12177#include <stdio.h>
12178#include <db.h>
d674cd6d 12179int main()
68dc0745 12180{
1f70e1ea
PM
12181#ifdef DB_VERSION_MAJOR /* DB version >= 2 */
12182 int Major, Minor, Patch ;
ee02776e 12183 unsigned long Version ;
1f70e1ea
PM
12184 (void)db_version(&Major, &Minor, &Patch) ;
12185 printf("You have Berkeley DB Version 2 or greater\n");
12186
12187 printf("db.h is from Berkeley DB Version %d.%d.%d\n",
12188 DB_VERSION_MAJOR, DB_VERSION_MINOR, DB_VERSION_PATCH);
12189 printf("libdb is from Berkeley DB Version %d.%d.%d\n",
12190 Major, Minor, Patch) ;
12191
12192 /* check that db.h & libdb are compatible */
12193 if (DB_VERSION_MAJOR != Major || DB_VERSION_MINOR != Minor || DB_VERSION_PATCH != Patch) {
12194 printf("db.h and libdb are incompatible\n") ;
12195 exit(3);
12196 }
12197
12198 printf("db.h and libdb are compatible\n") ;
ee02776e
PM
12199
12200 Version = DB_VERSION_MAJOR * 1000000 + DB_VERSION_MINOR * 1000
693762b4 12201 + DB_VERSION_PATCH ;
ee02776e
PM
12202
12203 /* needs to be >= 2.3.4 */
12204 if (Version < 2003004) {
693762b4 12205 /* if (DB_VERSION_MAJOR == 2 && DB_VERSION_MINOR == 0 && DB_VERSION_PATCH < 5) { */
ee02776e 12206 printf("but Perl needs Berkeley DB 2.3.4 or greater\n") ;
1f70e1ea
PM
12207 exit(2);
12208 }
12209
12210 exit(0);
68dc0745 12211#else
6a1b87e5 12212#if defined(_DB_H_) && defined(BTREEMAGIC) && defined(HASHMAGIC)
1f70e1ea 12213 printf("You have Berkeley DB Version 1\n");
6a1b87e5
JH
12214 exit(0); /* DB version < 2: the coast is clear. */
12215#else
12216 exit(1); /* <db.h> not Berkeley DB? */
12217#endif
68dc0745 12218#endif
12219}
12220EOCP
dfe9444c 12221 set try
cf21f3c6 12222 if eval $compile_ok && ./try; then
1f70e1ea 12223 echo 'Looks OK.' >&4
68dc0745 12224 else
c90c0ff4 12225 echo "I can't use Berkeley DB with your <db.h>. I'll disable Berkeley DB." >&4
68dc0745 12226 i_db=$undef
12227 case " $libs " in
12228 *"-ldb "*)
12229 : Remove db from list of libraries to use
12230 echo "Removing unusable -ldb from library list" >&4
12231 set `echo X $libs | $sed -e 's/-ldb / /' -e 's/-ldb$//'`
12232 shift
12233 libs="$*"
12234 echo "libs = $libs" >&4
12235 ;;
12236 esac
12237 fi
12238 $rm -f try.*
12239 ;;
12240esac
12241
12242case "$i_db" in
4633a7c4 12243define)
dc45a647
MB
12244 : Check the return type needed for hash
12245 echo " "
12246 echo "Checking return type needed for hash for Berkeley DB ..." >&4
12247 $cat >try.c <<EOCP
12248#$d_const HASCONST
12249#ifndef HASCONST
12250#define const
12251#endif
12252#include <sys/types.h>
12253#include <db.h>
12254
12255#ifndef DB_VERSION_MAJOR
12256u_int32_t hash_cb (ptr, size)
12257const void *ptr;
12258size_t size;
12259{
12260}
12261HASHINFO info;
d674cd6d 12262int main()
dc45a647
MB
12263{
12264 info.hash = hash_cb;
12265}
12266#endif
12267EOCP
12268 if $cc $ccflags -c try.c >try.out 2>&1 ; then
12269 if $contains warning try.out >>/dev/null 2>&1 ; then
12270 db_hashtype='int'
12271 else
12272 db_hashtype='u_int32_t'
12273 fi
12274 else
12275 : XXX Maybe we should just give up here.
12276 db_hashtype=u_int32_t
12277 $cat try.out >&4
12278 echo "Help: I can't seem to compile the db test program." >&4
12279 echo "Something's wrong, but I'll assume you use $db_hashtype." >&4
12280 fi
12281 $rm -f try.*
12282 echo "Your version of Berkeley DB uses $db_hashtype for hash."
12283 ;;
12284*) db_hashtype=u_int32_t
12285 ;;
12286esac
12287case "$i_db" in
12288define)
4633a7c4
LW
12289 : Check the return type needed for prefix
12290 echo " "
12291 echo "Checking return type needed for prefix for Berkeley DB ..." >&4
12292 cat >try.c <<EOCP
12293#$d_const HASCONST
12294#ifndef HASCONST
12295#define const
12296#endif
12297#include <sys/types.h>
12298#include <db.h>
1f70e1ea
PM
12299
12300#ifndef DB_VERSION_MAJOR
4633a7c4
LW
12301size_t prefix_cb (key1, key2)
12302const DBT *key1;
12303const DBT *key2;
12304{
12305}
12306BTREEINFO info;
d674cd6d 12307int main()
4633a7c4
LW
12308{
12309 info.prefix = prefix_cb;
12310}
1f70e1ea 12311#endif
4633a7c4
LW
12312EOCP
12313 if $cc $ccflags -c try.c >try.out 2>&1 ; then
12314 if $contains warning try.out >>/dev/null 2>&1 ; then
12315 db_prefixtype='int'
12316 else
12317 db_prefixtype='size_t'
12318 fi
12319 else
68dc0745 12320 db_prefixtype='size_t'
12321 : XXX Maybe we should just give up here.
dc45a647 12322 $cat try.out >&4
68dc0745 12323 echo "Help: I can't seem to compile the db test program." >&4
12324 echo "Something's wrong, but I'll assume you use $db_prefixtype." >&4
4633a7c4
LW
12325 fi
12326 $rm -f try.*
12327 echo "Your version of Berkeley DB uses $db_prefixtype for prefix."
a0d0e21e 12328 ;;
68dc0745 12329*) db_prefixtype='size_t'
4633a7c4
LW
12330 ;;
12331esac
a0d0e21e 12332
4633a7c4
LW
12333: check for void type
12334echo " "
12335echo "Checking to see how well your C compiler groks the void type..." >&4
4633a7c4
LW
12336case "$voidflags" in
12337'')
12338 $cat >try.c <<'EOCP'
12339#if TRY & 1
760ac839 12340void sub() {
4633a7c4 12341#else
760ac839 12342sub() {
4633a7c4
LW
12343#endif
12344 extern void moo(); /* function returning void */
12345 void (*goo)(); /* ptr to func returning void */
12346#if TRY & 8
12347 void *hue; /* generic ptr */
12348#endif
12349#if TRY & 2
12350 void (*foo[10])();
12351#endif
a0d0e21e 12352
4633a7c4
LW
12353#if TRY & 4
12354 if(goo == moo) {
12355 exit(0);
12356 }
12357#endif
12358 exit(0);
12359}
d674cd6d 12360int main() { sub(); }
4633a7c4 12361EOCP
760ac839 12362 if $cc $ccflags -c -DTRY=$defvoidused try.c >.out 2>&1 ; then
4633a7c4 12363 voidflags=$defvoidused
bfb7748a 12364 echo "Good. It appears to support void to the level $package wants.">&4
4633a7c4
LW
12365 if $contains warning .out >/dev/null 2>&1; then
12366 echo "However, you might get some warnings that look like this:"
12367 $cat .out
12368 fi
12369 else
12370echo "Hmm, your compiler has some difficulty with void. Checking further..." >&4
760ac839 12371 if $cc $ccflags -c -DTRY=1 try.c >/dev/null 2>&1; then
4633a7c4 12372 echo "It supports 1..."
760ac839 12373 if $cc $ccflags -c -DTRY=3 try.c >/dev/null 2>&1; then
4633a7c4 12374 echo "It also supports 2..."
760ac839 12375 if $cc $ccflags -c -DTRY=7 try.c >/dev/null 2>&1; then
4633a7c4
LW
12376 voidflags=7
12377 echo "And it supports 4 but not 8 definitely."
12378 else
12379 echo "It doesn't support 4..."
760ac839 12380 if $cc $ccflags -c -DTRY=11 try.c >/dev/null 2>&1; then
4633a7c4
LW
12381 voidflags=11
12382 echo "But it supports 8."
12383 else
12384 voidflags=3
12385 echo "Neither does it support 8."
12386 fi
12387 fi
12388 else
12389 echo "It does not support 2..."
760ac839 12390 if $cc $ccflags -c -DTRY=13 try.c >/dev/null 2>&1; then
4633a7c4
LW
12391 voidflags=13
12392 echo "But it supports 4 and 8."
12393 else
760ac839 12394 if $cc $ccflags -c -DTRY=5 try.c >/dev/null 2>&1; then
4633a7c4
LW
12395 voidflags=5
12396 echo "And it supports 4 but has not heard about 8."
12397 else
12398 echo "However it supports 8 but not 4."
12399 fi
12400 fi
12401 fi
12402 else
12403 echo "There is no support at all for void."
12404 voidflags=0
12405 fi
12406 fi
12407esac
4633a7c4 12408case "$voidflags" in
2c7991dc 12409"$defvoidused") ;;
bfb7748a
AD
12410*) $cat >&4 <<'EOM'
12411 Support flag bits are:
12412 1: basic void declarations.
12413 2: arrays of pointers to functions returning void.
12414 4: operations between pointers to and addresses of void functions.
12415 8: generic void pointers.
12416EOM
2c7991dc 12417 dflt="$voidflags";
4633a7c4 12418 rp="Your void support flags add up to what?"
a0d0e21e 12419 . ./myread
4633a7c4 12420 voidflags="$ans"
a0d0e21e
LW
12421 ;;
12422esac
4633a7c4 12423$rm -f try.* .out
a0d0e21e 12424
85ab1d1d
JH
12425
12426: How can we generate normalized random numbers ?
693762b4 12427echo " "
de4597cb 12428echo "Looking for a random number function..." >&4
85ab1d1d 12429case "$randfunc" in
693762b4 12430'')
85ab1d1d
JH
12431 if set drand48 val -f; eval $csym; $val; then
12432 dflt="drand48"
12433 echo "Good, found drand48()." >&4
12434 elif set random val -f; eval $csym; $val; then
12435 dflt="random"
12436 echo "OK, found random()." >&4
12437 else
12438 dflt="rand"
12439 echo "Yick, looks like I have to use rand()." >&4
12440 fi
12441 echo " "
12442 ;;
12443*)
12444 dflt="$randfunc"
12445 ;;
12446esac
12447cont=true
12448
12449case "$ccflags" in
12450*-Dmy_rand=*|*-Dmy_srand=*)
12451 echo "Removing obsolete -Dmy_rand, -Dmy_srand, and -Drandbits from ccflags." >&4
12452 ccflags="`echo $ccflags | sed -e 's/-Dmy_rand=random/ /'`"
12453 ccflags="`echo $ccflags | sed -e 's/-Dmy_srand=srandom/ /'`"
12454 ccflags="`echo $ccflags | sed -e 's/-Drandbits=[0-9][0-9]*/ /'`"
12455 ;;
12456esac
12457
12458while $test "$cont"; do
12459 rp="Use which function to generate random numbers?"
12460 . ./myread
12461 if $test "$ans" = "$dflt"; then
12462 : null
12463 else
12464 randbits=''
12465 fi
12466 randfunc="$ans"
12467 if set $ans val -f; eval $csym; $val; then
12468 cont=''
12469 else
ef4af2be
JH
12470 dflt=y
12471 rp="I cannot find function $ans. Use that name anyway?"
85ab1d1d
JH
12472 . ./myread
12473 dflt=rand
12474 case "$ans" in
12475 [yY]*) cont='';;
12476 esac
12477 fi
12478 case "$cont" in
12479 '')
12480 case "$randfunc" in
12481 drand48)
12482 drand01="drand48()"
12483 seedfunc="srand48"
12484 randbits=48
12485 randseedtype=long
12486 ;;
12487 rand|random)
12488 case "$randbits" in
12489 '')
12490echo "Checking to see how many bits your $randfunc() function produces..." >&4
12491 $cat >try.c <<EOCP
12492#$i_unistd I_UNISTD
12493#$i_stdlib I_STDLIB
693762b4 12494#include <stdio.h>
85ab1d1d
JH
12495#ifdef I_UNISTD
12496# include <unistd.h>
12497#endif
12498#ifdef I_STDLIB
12499# include <stdlib.h>
12500#endif
d674cd6d 12501int main()
693762b4 12502{
85ab1d1d
JH
12503 register int i;
12504 register unsigned long tmp;
12505 register unsigned long max = 0L;
12506
12507 for (i = 1000; i; i--) {
12508 tmp = (unsigned long) $randfunc();
12509 if (tmp > max) max = tmp;
12510 }
12511 for (i = 0; max; i++)
12512 max /= 2;
12513 printf("%d\n",i);
693762b4
AD
12514}
12515EOCP
85ab1d1d
JH
12516 set try
12517 if eval $compile_ok; then
12518 dflt=`try`
12519 else
12520 dflt='?'
12521 echo "(I can't seem to compile the test program...)"
12522 fi
12523 ;;
12524 *)
12525 dflt="$randbits"
12526 ;;
12527 esac
12528 rp="How many bits does your $randfunc() function produce?"
12529 . ./myread
12530 randbits="$ans"
12531 $rm -f try.c try
12532 drand01="($randfunc() / (double) ((unsigned long)1 << $randbits))"
12533 seedfunc="s$randfunc"
12534 randseedtype=unsigned
12535 ;;
12536 *)
12537 dflt="31"
12538 rp="How many bits does your $randfunc() function produce?"
12539 . ./myread
12540 randbits="$ans"
12541 seedfunc="s$randfunc"
12542 drand01="($randfunc() / (double) ((unsigned long)1 << $randbits))"
12543 if set $seedfunc val -f; eval $csym; $val; then
12544 echo "(Using $seedfunc() to seed random generator)"
12545 else
12546 echo "(Warning: no $seedfunc() to seed random generator)"
12547 seedfunc=rand
12548 fi
12549 randseedtype=unsigned
12550 ;;
12551 esac
12552 ;;
12553 esac
12554done
693762b4 12555
5ff3f7a4
GS
12556echo " "
12557echo "Determining whether or not we are on an EBCDIC system..." >&4
12558$cat >tebcdic.c <<'EOM'
12559int main()
12560{
12561 if ('M'==0xd4) return 0;
12562 return 1;
12563}
12564EOM
12565
12566val=$undef
12567set tebcdic
12568if eval $compile_ok; then
12569 if ./tebcdic; then
12570 echo "You have EBCDIC." >&4
12571 val="$define"
12572 else
57def98f 12573 echo "Nope, no EBCDIC, probably ASCII or some ISO Latin." >&4
5ff3f7a4
GS
12574 fi
12575else
5cc3184f 12576 echo "I'm unable to compile the test program." >&4
5ff3f7a4
GS
12577 echo "I'll assume ASCII or some ISO Latin." >&4
12578fi
12579$rm -f tebcdic.c tebcdic
12580set ebcdic
12581eval $setvar
12582
29209bc5 12583echo " "
767df6a1
JH
12584$cat >&4 <<EOM
12585Checking how to flush all pending stdio output...
66fe083f 12586EOM
d2201af2
AD
12587# I only know how to find the first 32 possibly open files on SunOS.
12588# See also hints/sunos_4_1.sh and util.c --AD
12589case "$osname" in
12590sunos) $echo '#define PERL_FFLUSH_ALL_FOPEN_MAX 32' > try.c ;;
12591esac
12592$cat >>try.c <<EOCP
66fe083f 12593#include <stdio.h>
d2201af2 12594#$i_unistd I_UNISTD
767df6a1 12595#ifdef I_UNISTD
a32a45b6 12596# include <unistd.h>
767df6a1
JH
12597#endif
12598#$d_sysconf HAS_SYSCONF
a71cd7cd
JH
12599#$d_stdio_stream_array HAS_STDIO_STREAM_ARRAY
12600#ifdef HAS_STDIO_STREAM_ARRAY
12601# define STDIO_STREAM_ARRAY $stdio_stream_array
12602#endif
66fe083f
JH
12603int main() {
12604 FILE* p = fopen("try.out", "w");
0f27ced1 12605#ifdef TRY_FPUTC
66fe083f 12606 fputc('x', p);
0f27ced1
JH
12607#else
12608# ifdef TRY_FPRINTF
12609 fprintf(p, "x");
12610# endif
12611#endif
767df6a1 12612#ifdef TRY_FFLUSH_NULL
66fe083f 12613 fflush(NULL);
767df6a1
JH
12614#endif
12615#ifdef TRY_FFLUSH_ALL
12616 {
12617 long open_max = -1;
d2201af2
AD
12618# ifdef PERL_FFLUSH_ALL_FOPEN_MAX
12619 open_max = PERL_FFLUSH_ALL_FOPEN_MAX;
767df6a1 12620# else
d2201af2
AD
12621# if defined(HAS_SYSCONF) && defined(_SC_OPEN_MAX)
12622 open_max = sysconf(_SC_OPEN_MAX);
767df6a1 12623# else
4b257aef 12624# ifdef FOPEN_MAX
d2201af2 12625 open_max = FOPEN_MAX;
767df6a1 12626# else
d2201af2
AD
12627# ifdef OPEN_MAX
12628 open_max = OPEN_MAX;
12629# else
12630# ifdef _NFILE
12631 open_max = _NFILE;
12632# endif
767df6a1
JH
12633# endif
12634# endif
12635# endif
4b257aef 12636# endif
ed39a0f2 12637# ifdef HAS_STDIO_STREAM_ARRAY
767df6a1
JH
12638 if (open_max > 0) {
12639 long i;
12640 for (i = 0; i < open_max; i++)
d2201af2
AD
12641 if (STDIO_STREAM_ARRAY[i]._file >= 0 &&
12642 STDIO_STREAM_ARRAY[i]._file < open_max &&
12643 STDIO_STREAM_ARRAY[i]._flag)
12644 fflush(&STDIO_STREAM_ARRAY[i]);
767df6a1
JH
12645 }
12646 }
ed39a0f2 12647# endif
767df6a1
JH
12648#endif
12649 _exit(42);
66fe083f
JH
12650}
12651EOCP
0f27ced1
JH
12652: first we have to find out how _not_ to flush
12653if $test "X$fflushNULL" = X -o "X$fflushall" = X; then
12654 output=''
12655 set try -DTRY_FPUTC
6626660c 12656 if eval $compile; then
4b257aef 12657 $rm -f try.out
0f27ced1
JH
12658 ./try$exe_ext 2>/dev/null
12659 if $test ! -s try.out -a "X$?" = X42; then
12660 output=-DTRY_FPUTC
12661 fi
12662 fi
12663 case "$output" in
12664 '')
12665 set try -DTRY_FPRINTF
12666 $rm -f try.out
6626660c 12667 if eval $compile; then
4b257aef 12668 $rm -f try.out
0f27ced1
JH
12669 ./try$exe_ext 2>/dev/null
12670 if $test ! -s try.out -a "X$?" = X42; then
12671 output=-DTRY_FPRINTF
12672 fi
12673 fi
12674 ;;
12675 esac
12676fi
767df6a1
JH
12677: check for fflush NULL behaviour
12678case "$fflushNULL" in
0f27ced1 12679'') set try -DTRY_FFLUSH_NULL $output
6626660c 12680 if eval $compile; then
4b257aef 12681 $rm -f try.out
196fa3d2 12682 ./try$exe_ext 2>/dev/null
a32a45b6
JH
12683 code="$?"
12684 if $test -s try.out -a "X$code" = X42; then
c2fddd50 12685 fflushNULL="`$cat try.out`"
a32a45b6
JH
12686 else
12687 if $test "X$code" != X42; then
12688 $cat >&4 <<EOM
12689(If this test failed, don't worry, we'll try another method shortly.)
12690EOM
12691 fi
c2fddd50
JH
12692 fi
12693 fi
0f27ced1 12694 $rm -f core try.core core.try.*
c2fddd50 12695 case "$fflushNULL" in
6626660c 12696 x) $cat >&4 <<EOM
2b8ee124
JH
12697Your fflush(NULL) works okay for output streams.
12698Let's see if it clobbers input pipes...
66fe083f 12699EOM
2b8ee124
JH
12700# As of mid-March 2000 all versions of Solaris appear to have a stdio
12701# bug that improperly flushes the input end of pipes. So we avoid the
12702# autoflush on fork/system/exec support for now. :-(
12703$cat >tryp.c <<EOCP
12704#include <stdio.h>
12705int
12706main(int argc, char **argv)
12707{
12708 char buf[1024];
12709 int i;
12710 char *bp = buf;
12711 while (1) {
12712 while ((i = getc(stdin)) != -1
12713 && (*bp++ = i) != '\n'
12714 && bp < &buf[1024])
12715 /* DO NOTHING */ ;
12716 *bp = '\0';
12717 fprintf(stdout, "%s", buf);
12718 fflush(NULL);
12719 if (i == -1)
b354742d 12720 return 0;
2b8ee124
JH
12721 bp = buf;
12722 }
12723}
12724EOCP
12725 fflushNULL="$define"
12726 set tryp
12727 if eval $compile; then
12728 $rm -f tryp.out
12729 $cat tryp.c | ./tryp$exe_ext 2>/dev/null > tryp.out
12730 if cmp tryp.c tryp.out >/dev/null 2>&1; then
12731 $cat >&4 <<EOM
12732fflush(NULL) seems to behave okay with input streams.
12733EOM
12734 fflushNULL="$define"
12735 else
12736 $cat >&4 <<EOM
12737Ouch, fflush(NULL) clobbers input pipes! We will not use it.
12738EOM
12739 fflushNULL="$undef"
12740 fi
12741 fi
b354742d 12742 $rm -f core tryp.c tryp.core core.tryp.*
c2fddd50 12743 ;;
6626660c 12744 '') $cat >&4 <<EOM
66fe083f
JH
12745Your fflush(NULL) isn't working (contrary to ANSI C).
12746EOM
ed39a0f2 12747 fflushNULL="$undef"
c2fddd50 12748 ;;
6626660c 12749 *) $cat >&4 <<EOM
66fe083f
JH
12750Cannot figure out whether your fflush(NULL) works or not.
12751I'm assuming it doesn't (contrary to ANSI C).
12752EOM
ed39a0f2 12753 fflushNULL="$undef"
c2fddd50
JH
12754 ;;
12755 esac
66fe083f
JH
12756 ;;
12757$define|true|[yY]*)
ed39a0f2 12758 fflushNULL="$define"
66fe083f
JH
12759 ;;
12760*)
ed39a0f2 12761 fflushNULL="$undef"
66fe083f
JH
12762 ;;
12763esac
b354742d
GS
12764: check explicit looping only if NULL did not work, and if the pipe
12765: bug does not show up on an explicit flush too
a32a45b6
JH
12766case "$fflushNULL" in
12767"$undef")
b354742d
GS
12768 $cat >tryp.c <<EOCP
12769#include <stdio.h>
12770int
12771main(int argc, char **argv)
12772{
12773 char buf[1024];
12774 int i;
12775 char *bp = buf;
12776 while (1) {
12777 while ((i = getc(stdin)) != -1
12778 && (*bp++ = i) != '\n'
12779 && bp < &buf[1024])
12780 /* DO NOTHING */ ;
12781 *bp = '\0';
12782 fprintf(stdout, "%s", buf);
12783 fflush(stdin);
12784 if (i == -1)
12785 return 0;
12786 bp = buf;
12787 }
12788}
12789EOCP
12790 set tryp
12791 if eval $compile; then
12792 $rm -f tryp.out
12793 $cat tryp.c | ./tryp$exe_ext 2>/dev/null > tryp.out
12794 if cmp tryp.c tryp.out >/dev/null 2>&1; then
12795 $cat >&4 <<EOM
12796Good, at least fflush(stdin) seems to behave okay when stdin is a pipe.
a71cd7cd 12797EOM
b354742d 12798 : now check for fflushall behaviour
a32a45b6 12799 case "$fflushall" in
b354742d
GS
12800 '') set try -DTRY_FFLUSH_ALL $output
12801 if eval $compile; then
12802 $cat >&4 <<EOM
12803(Now testing the other method--but note that this also may fail.)
12804EOM
12805 $rm -f try.out
12806 ./try$exe_ext 2>/dev/null
12807 if $test -s try.out -a "X$?" = X42; then
12808 fflushall="`$cat try.out`"
12809 fi
12810 fi
12811 $rm -f core try.core core.try.*
12812 case "$fflushall" in
12813 x) $cat >&4 <<EOM
a32a45b6 12814Whew. Flushing explicitly all the stdio streams works.
767df6a1 12815EOM
b354742d
GS
12816 fflushall="$define"
12817 ;;
12818 '') $cat >&4 <<EOM
a32a45b6 12819Sigh. Flushing explicitly all the stdio streams doesn't work.
767df6a1 12820EOM
b354742d
GS
12821 fflushall="$undef"
12822 ;;
12823 *) $cat >&4 <<EOM
6626660c 12824Cannot figure out whether flushing stdio streams explicitly works or not.
767df6a1
JH
12825I'm assuming it doesn't.
12826EOM
b354742d
GS
12827 fflushall="$undef"
12828 ;;
12829 esac
12830 ;;
12831 "$define"|true|[yY]*)
12832 fflushall="$define"
12833 ;;
12834 *)
a32a45b6
JH
12835 fflushall="$undef"
12836 ;;
12837 esac
b354742d
GS
12838 else
12839 $cat >&4 <<EOM
12840All is futile. Even fflush(stdin) clobbers input pipes!
12841EOM
a32a45b6 12842 fflushall="$undef"
b354742d
GS
12843 fi
12844 else
12845 fflushall="$undef"
12846 fi
12847 $rm -f core tryp.c tryp.core core.tryp.*
767df6a1 12848 ;;
b354742d 12849*) fflushall="$undef"
767df6a1
JH
12850 ;;
12851esac
b354742d 12852
767df6a1
JH
12853case "$fflushNULL$fflushall" in
12854undefundef)
6626660c 12855 $cat <<EOM
b354742d
GS
12856OK, I give up. I cannot figure out how to flush pending stdio output.
12857We won't be flushing handles at all before fork/exec/popen.
767df6a1
JH
12858EOM
12859 ;;
12860esac
12861$rm -f try.* try$exe_ext
66fe083f 12862
ccc7f9b3
KS
12863: Store the full pathname to the ar program for use in the C program
12864: Respect a hint or command line value for full_ar.
12865case "$full_ar" in
12866'') full_ar=$ar ;;
12867esac
12868
1aef975c
AD
12869: Store the full pathname to the sed program for use in the C program
12870full_sed=$sed
12871
2304df62 12872: see what type gids are declared as in the kernel
dc45a647
MB
12873echo " "
12874echo "Looking for the type for group ids returned by getgid()."
a0d0e21e
LW
12875set gid_t gidtype xxx stdio.h sys/types.h
12876eval $typedef
2304df62 12877case "$gidtype" in
a0d0e21e
LW
12878xxx)
12879 xxx=`./findhdr sys/user.h`
12880 set `grep 'groups\[NGROUPS\];' "$xxx" 2>/dev/null` unsigned short
12881 case $1 in
12882 unsigned) dflt="$1 $2" ;;
12883 *) dflt="$1" ;;
12884 esac
2304df62 12885 ;;
8175356b
JH
12886*) dflt="$gidtype";;
12887esac
12888case "$gidtype" in
12889gid_t) echo "gid_t found." ;;
12890*) rp="What is the type for group ids returned by getgid()?"
12891 . ./myread
12892 gidtype="$ans"
12893 ;;
12894esac
12895
12896echo " "
12897case "$gidtype" in
12898*_t) zzz="$gidtype" ;;
12899*) zzz="gid" ;;
12900esac
a22e52b9 12901echo "Checking the size of $zzz..." >&4
8175356b
JH
12902cat > try.c <<EOCP
12903#include <sys/types.h>
12904#include <stdio.h>
12905int main() {
213c275f 12906 printf("%d\n", (int)sizeof($gidtype));
14e4fe40 12907 exit(0);
8175356b
JH
12908}
12909EOCP
12910set try
a22e52b9 12911if eval $compile_ok; then
8175356b
JH
12912 yyy=`./try`
12913 case "$yyy" in
a22e52b9
JH
12914 '') gidsize=4
12915 echo "(I can't execute the test program--guessing $gidsize.)" >&4
8175356b 12916 ;;
a22e52b9 12917 *) gidsize=$yyy
49c10eea 12918 echo "Your $zzz is $gidsize bytes long."
8175356b
JH
12919 ;;
12920 esac
12921else
a22e52b9
JH
12922 gidsize=4
12923 echo "(I can't compile the test program--guessing $gidsize.)" >&4
8175356b
JH
12924fi
12925
12926
12927echo " "
12928case "$gidtype" in
12929*_t) zzz="$gidtype" ;;
12930*) zzz="gid" ;;
12931esac
a22e52b9 12932echo "Checking the sign of $zzz..." >&4
8175356b
JH
12933cat > try.c <<EOCP
12934#include <sys/types.h>
12935#include <stdio.h>
12936int main() {
a22e52b9
JH
12937 $gidtype foo = -1;
12938 if (foo < 0)
12939 printf("-1\n");
12940 else
12941 printf("1\n");
8175356b
JH
12942}
12943EOCP
12944set try
a22e52b9 12945if eval $compile; then
8175356b
JH
12946 yyy=`./try`
12947 case "$yyy" in
a22e52b9
JH
12948 '') gidsign=1
12949 echo "(I can't execute the test program--guessing unsigned.)" >&4
8175356b 12950 ;;
a22e52b9
JH
12951 *) gidsign=$yyy
12952 case "$gidsign" in
12953 1) echo "Your $zzz is unsigned." ;;
12954 -1) echo "Your $zzz is signed." ;;
12955 esac
8175356b
JH
12956 ;;
12957 esac
12958else
a22e52b9
JH
12959 gidsign=1
12960 echo "(I can't compile the test program--guessing unsigned.)" >&4
8175356b
JH
12961fi
12962
12963
785fb66b 12964echo " "
8175356b
JH
12965
12966if $test X"$quadtype" != X; then
12967
12968echo "Checking how to print 64-bit integers..." >&4
12969
12970if $test X"$sPRId64" = X -a X"$quadtype" = Xint; then
12971 $cat >try.c <<'EOCP'
785fb66b
JH
12972#include <sys/types.h>
12973#include <stdio.h>
12974int main() {
8175356b
JH
12975 int q = 12345678901;
12976 printf("%ld\n", q);
785fb66b
JH
12977}
12978EOCP
8175356b
JH
12979 set try
12980 if eval $compile; then
12981 yyy=`./try$exe_ext`
12982 case "$yyy" in
12983 12345678901)
12984 sPRId64='"d"'; sPRIi64='"i"'; sPRIu64='"u"';
12985 sPRIo64='"o"'; sPRIx64='"x"'; sPRIX64='"X"';
12986 echo "We will use %d."
12987 ;;
785fb66b 12988 esac
8175356b 12989 fi
785fb66b
JH
12990fi
12991
8175356b
JH
12992if $test X"$sPRId64" = X -a X"$quadtype" = Xlong; then
12993 $cat >try.c <<'EOCP'
12994#include <sys/types.h>
12995#include <stdio.h>
12996int main() {
12997 long q = 12345678901;
12998 printf("%ld\n", q);
12999}
13000EOCP
13001 set try
13002 if eval $compile; then
13003 yyy=`./try$exe_ext`
13004 case "$yyy" in
13005 12345678901)
13006 sPRId64='"ld"'; sPRIi64='"li"'; sPRIu64='"lu"';
13007 sPRIo64='"lo"'; sPRIx64='"lx"'; sPRIX64='"lX"';
13008 echo "We will use %ld."
13009 ;;
13010 esac
13011 fi
13012fi
785fb66b 13013
8afc5b8d 13014if $test X"$sPRId64" = X -a X"$i_inttypes" = X"$define" -a X"$quadtype" = Xint64_t; then
8175356b 13015 $cat >try.c <<'EOCP'
785fb66b 13016#include <sys/types.h>
8175356b 13017#include <inttypes.h>
785fb66b
JH
13018#include <stdio.h>
13019int main() {
8175356b
JH
13020 int64_t q = 12345678901;
13021 printf("%" PRId64 "\n", q);
785fb66b
JH
13022}
13023EOCP
8175356b
JH
13024 set try
13025 if eval $compile; then
13026 yyy=`./try$exe_ext`
13027 case "$yyy" in
13028 12345678901)
13029 sPRId64=PRId64; sPRIi64=PRIi64; sPRIu64=PRIu64;
13030 sPRIo64=PRIo64; sPRIx64=PRIx64; sPRIX64=PRIX64;
13031 echo "We will use the C9X style."
13032 ;;
13033 esac
13034 fi
13035fi
13036
13037if $test X"$sPRId64" = X -a X"$quadtype" = X"long long"; then
13038 $cat >try.c <<'EOCP'
13039#include <sys/types.h>
13040#include <stdio.h>
13041int main() {
13042 long long q = 12345678901LL; /* AIX cc requires the LL prefix. */
13043 printf("%lld\n", q);
13044}
13045EOCP
13046 set try
13047 if eval $compile; then
13048 yyy=`./try$exe_ext`
13049 case "$yyy" in
13050 12345678901)
13051 sPRId64='"lld"'; sPRIi64='"lli"'; sPRIu64='"llu"';
13052 sPRIo64='"llo"'; sPRIx64='"llx"'; sPRIX64='"llX"';
13053 echo "We will use the %lld style."
13054 ;;
13055 esac
13056 fi
785fb66b
JH
13057fi
13058
8175356b
JH
13059if $test X"$sPRId64" = X -a X"$quadtype" != X; then
13060 $cat >try.c <<EOCP
13061#include <sys/types.h>
13062#include <stdio.h>
13063int main() {
13064 $quadtype q = 12345678901;
13065 printf("%Ld\n", q);
13066}
13067EOCP
13068 set try
13069 if eval $compile; then
13070 yyy=`./try$exe_ext`
13071 case "$yyy" in
13072 12345678901)
13073 sPRId64='"Ld"'; sPRIi64='"Li"'; sPRIu64='"Lu"';
13074 sPRIo64='"Lo"'; sPRIx64='"Lx"'; sPRIX64='"LX"';
13075 echo "We will use %Ld."
13076 ;;
13077 esac
13078 fi
13079fi
785fb66b 13080
8175356b
JH
13081if $test X"$sPRId64" = X -a X"$quadtype" != X; then
13082 $cat >try.c <<EOCP
13083#include <sys/types.h>
13084#include <stdio.h>
13085int main() {
13086 $quadtype q = 12345678901;
13087 printf("%qd\n", q);
13088}
13089EOCP
13090 set try
13091 if eval $compile; then
13092 yyy=`./try$exe_ext`
13093 case "$yyy" in
13094 12345678901)
13095 sPRId64='"qd"'; sPRIi64='"qi"'; sPRIu64='"qu"';
13096 sPRIo64='"qo"'; sPRIx64='"qx"'; sPRIX64='"qX"';
13097 echo "We will use %qd."
13098 ;;
13099 esac
13100 fi
13101fi
2304df62 13102
8175356b
JH
13103if $test X"$sPRId64" = X; then
13104 echo "Cannot figure out how to print 64-bit integers." >&4
13105fi
5cd24f17 13106
8175356b 13107$rm -f try try.*
dfe9444c 13108
8175356b 13109fi
2304df62 13110
8175356b
JH
13111case "$sPRId64" in
13112'') d_PRId64="$undef"; d_PRIi64="$undef"; d_PRIu64="$undef";
13113 d_PRIo64="$undef"; d_PRIx64="$undef"; d_PRIX64="$undef";
13114 ;;
13115*) d_PRId64="$define"; d_PRIi64="$define"; d_PRIu64="$define";
13116 d_PRIo64="$define"; d_PRIx64="$define"; d_PRIX64="$define";
a0d0e21e 13117 ;;
2304df62 13118esac
2304df62 13119
2304df62 13120
8ff267be 13121echo " "
8175356b
JH
13122$echo "Checking the format strings to be used for Perl's internal types..." >&4
13123
13124if $test X"$ivsize" = X8; then
13125 ivdformat="$sPRId64"
13126 uvuformat="$sPRIu64"
13127 uvoformat="$sPRIo64"
13128 uvxformat="$sPRIx64"
5ff3f7a4 13129else
8175356b
JH
13130 if $test X"$ivsize" = X"$longsize"; then
13131 ivdformat='"ld"'
13132 uvuformat='"lu"'
13133 uvoformat='"lo"'
13134 uvxformat='"lx"'
13135 else
13136 if $test X"$ivsize" = X"$intsize"; then
13137 ivdformat='"d"'
13138 uvuformat='"u"'
13139 uvoformat='"o"'
13140 uvxformat='"x"'
13141 else
13142 : far out
13143 if $test X"$ivsize" = X"$shortsize"; then
13144 ivdformat='"hd"'
13145 uvuformat='"hu"'
13146 uvoformat='"ho"'
13147 uvxformat='"hx"'
13148 fi
13149 fi
13150 fi
5ff3f7a4 13151fi
8175356b
JH
13152
13153case "$ivdformat" in
13154'') echo "$0: Fatal: failed to find format strings, cannot continue." >& 4
13155 exit 1
13156 ;;
13157esac
5ff3f7a4 13158
a22e52b9
JH
13159
13160echo " "
13161$echo "Checking the format string to be used for gids..." >&4
13162
13163case "$gidsign" in
13164-1) if $test X"$gidsize" = X"$ivsize"; then
13165 gidformat="$ivdformat"
13166 else
13167 if $test X"$gidsize" = X"$longsize"; then
13168 gidformat='"ld"'
13169 else
13170 if $test X"$gidsize" = X"$intsize"; then
13171 gidformat='"d"'
13172 else
13173 if $test X"$gidsize" = X"$shortsize"; then
13174 gidformat='"hd"'
13175 fi
13176 fi
13177 fi
13178 fi
13179 ;;
13180*) if $test X"$gidsize" = X"$uvsize"; then
13181 gidformat="$uvuformat"
13182 else
13183 if $test X"$gidsize" = X"$longsize"; then
13184 gidformat='"lu"'
13185 else
13186 if $test X"$gidsize" = X"$intsize"; then
13187 gidformat='"u"'
13188 else
13189 if $test X"$gidsize" = X"$shortsize"; then
13190 gidformat='"hu"'
13191 fi
13192 fi
13193 fi
13194 fi
13195 ;;
13196esac
13197
13198: see if getgroups exists
13199set getgroups d_getgrps
13200eval $inlibc
13201
13202: see if setgroups exists
13203set setgroups d_setgrps
13204eval $inlibc
13205
13206
13207: Find type of 2nd arg to 'getgroups()' and 'setgroups()'
13208echo " "
13209case "$d_getgrps$d_setgrps" in
13210*define*)
13211 case "$groupstype" in
13212 '') dflt="$gidtype" ;;
13213 *) dflt="$groupstype" ;;
13214 esac
13215 $cat <<EOM
13216What type of pointer is the second argument to getgroups() and setgroups()?
13217Usually this is the same as group ids, $gidtype, but not always.
13218
13219EOM
13220 rp='What type pointer is the second argument to getgroups() and setgroups()?'
13221 . ./myread
13222 groupstype="$ans"
13223 ;;
13224*) groupstype="$gidtype";;
13225esac
13226
5ff3f7a4 13227echo " "
dfe9444c 13228echo "Checking if your $make program sets \$(MAKE)..." >&4
8ff267be 13229case "$make_set_make" in
13230'')
13231 $sed 's/^X //' > testmake.mak << 'EOF'
13232Xall:
dfe9444c 13233X @echo 'maketemp="$(MAKE)"'
8ff267be 13234EOF
8ff267be 13235 case "`$make -f testmake.mak 2>/dev/null`" in
dfe9444c 13236 *maketemp=*) make_set_make='#' ;;
8ff267be 13237 *) make_set_make="MAKE=$make" ;;
13238 esac
dfe9444c
AD
13239 $rm -f testmake.mak
13240 ;;
13241esac
13242case "$make_set_make" in
13243'#') echo "Yup, it does.";;
13244*) echo "Nope, it doesn't.";;
13245esac
13246
13247: see what type is used for mode_t
dc45a647 13248rp="What is the type used for file modes for system calls (e.g. fchmod())?"
dfe9444c 13249set mode_t modetype int stdio.h sys/types.h
dc45a647 13250eval $typedef_ask
dfe9444c 13251
dfe9444c
AD
13252: define a fucntion to check prototypes
13253$cat > protochk <<EOSH
13254$startsh
13255cc="$cc"
13256optimize="$optimize"
13257ccflags="$ccflags"
13258prototype="$prototype"
13259define="$define"
13260rm=$rm
13261EOSH
13262
13263$cat >> protochk <<'EOSH'
13264
13265$rm -f try.c
13266foo="$1"
13267shift
13268while test $# -ge 2; do
13269 case "$1" in
13270 $define) echo "#include <$2>" >> try.c ;;
13271 literal) echo "$2" >> try.c ;;
13272 esac
13273 shift 2
13274done
13275test "$prototype" = "$define" && echo '#define CAN_PROTOTYPE' >> try.c
13276cat >> try.c <<'EOCP'
13277#ifdef CAN_PROTOTYPE
13278#define _(args) args
13279#else
13280#define _(args) ()
13281#endif
13282EOCP
13283echo "$foo" >> try.c
13284echo 'int no_real_function_has_this_name _((void)) { return 0; }' >> try.c
13285$cc $optimize $ccflags -c try.c > /dev/null 2>&1
13286status=$?
13287$rm -f try.[co]
13288exit $status
13289EOSH
13290chmod +x protochk
13291$eunicefix protochk
13292
c890dc6c
JH
13293: see what type is used for size_t
13294rp="What is the type used for the length parameter for string functions?"
13295set size_t sizetype 'unsigned int' stdio.h sys/types.h
13296eval $typedef_ask
13297
dfe9444c
AD
13298: check for type of arguments to gethostbyaddr.
13299if test "X$netdb_host_type" = X -o "X$netdb_hlen_type" = X; then
13300 case "$d_gethbyaddr" in
13301 $define)
13302 $cat <<EOM
13303
13304Checking to see what type of arguments are accepted by gethostbyaddr().
13305EOM
13306 hdrs="$define sys/types.h
13307 $d_socket sys/socket.h
13308 $i_niin netinet/in.h
13309 $i_netdb netdb.h
13310 $i_unistd unistd.h"
13311 : The first arg can 'char *' or 'void *'
13312 : The second arg is some of integral type
13313 for xxx in in_addr_t 'const void *' 'const char *' 'void *' 'char *'; do
13314 for yyy in size_t long int; do
13315 case "$netdb_host_type" in
13316 '') try="extern struct hostent *gethostbyaddr($xxx, $yyy, int);"
13317 if ./protochk "$try" $hdrs; then
13318 echo "Your system accepts $xxx for the first arg."
13319 echo "...and $yyy for the second arg."
13320 netdb_host_type="$xxx"
13321 netdb_hlen_type="$yyy"
13322 fi
13323 ;;
13324 esac
13325 done
13326 done
13327 : In case none of those worked, prompt the user.
13328 case "$netdb_host_type" in
13329 '') rp='What is the type for the 1st argument to gethostbyaddr?'
13330 dflt='char *'
13331 . ./myread
13332 netdb_host_type=$ans
13333 rp='What is the type for the 2nd argument to gethostbyaddr?'
13334 dflt="$sizetype"
13335 . ./myread
13336 netdb_hlen_type=$ans
13337 ;;
13338 esac
13339 ;;
13340 *) : no gethostbyaddr, so pick harmless defaults
13341 netdb_host_type='char *'
13342 netdb_hlen_type="$sizetype"
13343 ;;
13344 esac
13345 # Remove the "const" if needed. -- but then we'll have a
13346 # prototype clash!
13347 # netdb_host_type=`echo "$netdb_host_type" | sed 's/^const //'`
13348fi
13349
13350: check for type of argument to gethostbyname.
13351if test "X$netdb_name_type" = X ; then
13352 case "$d_gethbyname" in
13353 $define)
13354 $cat <<EOM
13355
13356Checking to see what type of argument is accepted by gethostbyname().
13357EOM
13358 hdrs="$define sys/types.h
13359 $d_socket sys/socket.h
13360 $i_niin netinet/in.h
13361 $i_netdb netdb.h
13362 $i_unistd unistd.h"
13363 for xxx in "const char *" "char *"; do
13364 case "$netdb_name_type" in
13365 '') try="extern struct hostent *gethostbyname($xxx);"
13366 if ./protochk "$try" $hdrs; then
13367 echo "Your system accepts $xxx."
13368 netdb_name_type="$xxx"
13369 fi
13370 ;;
13371 esac
13372 done
13373 : In case none of those worked, prompt the user.
13374 case "$netdb_name_type" in
13375 '') rp='What is the type for the 1st argument to gethostbyname?'
13376 dflt='char *'
13377 . ./myread
13378 netdb_name_type=$ans
13379 ;;
13380 esac
13381 ;;
13382 *) : no gethostbyname, so pick harmless default
13383 netdb_name_type='char *'
13384 ;;
13385 esac
13386fi
8ff267be 13387
dfe9444c
AD
13388: check for type of 1st argument to getnetbyaddr.
13389if test "X$netdb_net_type" = X ; then
13390 case "$d_getnbyaddr" in
13391 $define)
13392 $cat <<EOM
85e6fe83 13393
dfe9444c
AD
13394Checking to see what type of 1st argument is accepted by getnetbyaddr().
13395EOM
13396 hdrs="$define sys/types.h
13397 $d_socket sys/socket.h
13398 $i_niin netinet/in.h
13399 $i_netdb netdb.h
13400 $i_unistd unistd.h"
13401 for xxx in in_addr_t "unsigned long" long "unsigned int" int; do
13402 case "$netdb_net_type" in
13403 '') try="extern struct netent *getnetbyaddr($xxx, int);"
13404 if ./protochk "$try" $hdrs; then
13405 echo "Your system accepts $xxx."
13406 netdb_net_type="$xxx"
13407 fi
13408 ;;
13409 esac
13410 done
13411 : In case none of those worked, prompt the user.
13412 case "$netdb_net_type" in
13413 '') rp='What is the type for the 1st argument to getnetbyaddr?'
13414 dflt='long'
13415 . ./myread
13416 netdb_net_type=$ans
13417 ;;
13418 esac
13419 ;;
13420 *) : no getnetbyaddr, so pick harmless default
e5c9fcd0 13421 netdb_net_type='long'
dfe9444c
AD
13422 ;;
13423 esac
13424fi
2c7991dc 13425: locate the preferred pager for this system
13426case "$pager" in
13427'')
13428 dflt=''
13429 case "$pg" in
13430 /*) dflt=$pg;;
13431 esac
13432 case "$more" in
13433 /*) dflt=$more;;
13434 esac
13435 case "$less" in
13436 /*) dflt=$less;;
13437 esac
13438 case "$dflt" in
13439 '') dflt=/usr/ucb/more;;
13440 esac
13441 ;;
13442*) dflt="$pager";;
13443esac
13444echo " "
13445fn=f/
13446rp='What pager is used on your system?'
13447. ./getfile
13448pager="$ans"
13449
dfe9444c 13450: see what type pids are declared as in the kernel
dc45a647 13451rp="What is the type of process ids on this system?"
dfe9444c 13452set pid_t pidtype int stdio.h sys/types.h
dc45a647 13453eval $typedef_ask
2304df62 13454
fe749a9f
JH
13455: Find earliest binary compatible site_perl subdirectory perl can use.
13456case "$bincompat5005" in
13457"$define") xs_apiversion='5.005' ;;
13458*) xs_apiversion=$version ;; # The current site_perl version.
13459esac
13460: Find earliest pure perl site_perl subdirectory perl can use.
13461: The versioned directories started at 5.005.
13462pm_apiversion='5.005'
13463
693762b4
AD
13464: check for length of pointer
13465echo " "
13466case "$ptrsize" in
13467'')
49c10eea 13468 echo "Checking to see how big your pointers are..." >&4
693762b4
AD
13469 if test "$voidflags" -gt 7; then
13470 echo '#define VOID_PTR char *' > try.c
13471 else
13472 echo '#define VOID_PTR void *' > try.c
13473 fi
13474 $cat >>try.c <<'EOCP'
13475#include <stdio.h>
d674cd6d 13476int main()
693762b4 13477{
213c275f 13478 printf("%d\n", (int)sizeof(VOID_PTR));
14e4fe40 13479 exit(0);
693762b4
AD
13480}
13481EOCP
13482 set try
dc45a647 13483 if eval $compile_ok; then
693762b4 13484 ptrsize=`./try`
49c10eea 13485 echo "Your pointers are $ptrsize bytes long."
693762b4
AD
13486 else
13487 dflt='4'
13488 echo "(I can't seem to compile the test program. Guessing...)" >&4
13489 rp="What is the size of a pointer (in bytes)?"
13490 . ./myread
13491 ptrsize="$ans"
13492 fi
13493 ;;
13494esac
13495$rm -f try.c try
13496
a0d0e21e
LW
13497: see if ar generates random libraries by itself
13498echo " "
13499echo "Checking how to generate random libraries on your machine..." >&4
13500echo 'int bar1() { return bar2(); }' > bar1.c
13501echo 'int bar2() { return 2; }' > bar2.c
13502$cat > foo.c <<'EOP'
d674cd6d 13503int main() { printf("%d\n", bar1()); exit(0); }
a0d0e21e
LW
13504EOP
13505$cc $ccflags -c bar1.c >/dev/null 2>&1
13506$cc $ccflags -c bar2.c >/dev/null 2>&1
13507$cc $ccflags -c foo.c >/dev/null 2>&1
dfe9444c
AD
13508$ar rc bar$_a bar2$_o bar1$_o >/dev/null 2>&1
13509if $cc $ccflags $ldflags -o foobar foo$_o bar$_a $libs > /dev/null 2>&1 &&
a0d0e21e 13510 ./foobar >/dev/null 2>&1; then
4e2a5f63 13511 echo "$ar appears to generate random libraries itself."
a0d0e21e
LW
13512 orderlib=false
13513 ranlib=":"
dfe9444c
AD
13514elif $ar ts bar$_a >/dev/null 2>&1 &&
13515 $cc $ccflags $ldflags -o foobar foo$_o bar$_a $libs > /dev/null 2>&1 &&
a0d0e21e 13516 ./foobar >/dev/null 2>&1; then
4e2a5f63 13517 echo "a table of contents needs to be added with '$ar ts'."
a0d0e21e 13518 orderlib=false
dfe9444c 13519 ranlib="$ar ts"
a0d0e21e 13520else
ecfc5424
AD
13521 case "$ranlib" in
13522 :) ranlib='';;
13523 '')
13524 ranlib=`./loc ranlib X /usr/bin /bin /usr/local/bin`
13525 $test -f $ranlib || ranlib=''
13526 ;;
13527 esac
a0d0e21e 13528 if $test -n "$ranlib"; then
ecfc5424 13529 echo "your system has '$ranlib'; we'll use that."
a0d0e21e
LW
13530 orderlib=false
13531 else
13532 echo "your system doesn't seem to support random libraries"
13533 echo "so we'll use lorder and tsort to order the libraries."
13534 orderlib=true
13535 ranlib=":"
13536 fi
13537fi
13538$rm -f foo* bar*
13539
dfe9444c
AD
13540: check for type of arguments to select.
13541case "$selecttype" in
13542'') case "$d_select" in
13543 $define)
cce08f5b 13544 echo " "
dfe9444c
AD
13545 $cat <<EOM
13546Checking to see what type of arguments are accepted by select().
13547EOM
13548 hdrs="$define sys/types.h
13549 $i_systime sys/time.h
13550 $i_sysselct sys/select.h
13551 $d_socket sys/socket.h"
13552 : The first arg can be int, unsigned, or size_t
13553 : The last arg may or may not be 'const'
13554 val=''
7f3d1cf1
BH
13555 : void pointer has been seen but using that
13556 : breaks the selectminbits test
13557 for xxx in 'fd_set *' 'int *'; do
1cfa4ec7 13558 for nfd in 'int' 'size_t' 'unsigned long' 'unsigned' ; do
dfe9444c
AD
13559 for tmo in 'struct timeval *' 'const struct timeval *'; do
13560 case "$val" in
13561 '') try="extern select _(($nfd, $xxx, $xxx, $xxx, $tmo));"
13562 if ./protochk "$try" $hdrs; then
13563 echo "Your system accepts $xxx."
13564 val="$xxx"
13565 fi
13566 ;;
13567 esac
13568 done
13569 done
13570 done
13571 case "$val" in
13572 '') rp='What is the type for the 2nd, 3rd, and 4th arguments to select?'
13573 case "$d_fd_set" in
13574 $define) dflt="fd_set *" ;;
13575 *) dflt="int *" ;;
13576 esac
13577 . ./myread
13578 val=$ans
13579 ;;
a0d0e21e 13580 esac
dfe9444c 13581 selecttype="$val"
a0d0e21e 13582 ;;
dfe9444c
AD
13583 *) : no select, so pick a harmless default
13584 selecttype='int *'
a0d0e21e
LW
13585 ;;
13586 esac
a0d0e21e
LW
13587 ;;
13588esac
2304df62 13589
5ff3f7a4
GS
13590: check for the select 'width'
13591case "$selectminbits" in
13592'') case "$d_select" in
13593 $define)
13594 $cat <<EOM
13595
85ab1d1d 13596Checking to see on how many bits at a time your select() operates...
5ff3f7a4
GS
13597EOM
13598 $cat >try.c <<EOCP
13599#include <sys/types.h>
13600#$i_time I_TIME
13601#$i_systime I_SYS_TIME
13602#$i_systimek I_SYS_TIME_KERNEL
13603#ifdef I_TIME
13604# include <time.h>
13605#endif
13606#ifdef I_SYS_TIME
13607# ifdef I_SYS_TIME_KERNEL
13608# define KERNEL
13609# endif
13610# include <sys/time.h>
13611# ifdef I_SYS_TIME_KERNEL
13612# undef KERNEL
13613# endif
13614#endif
13615#$i_sysselct I_SYS_SELECT
13616#ifdef I_SYS_SELECT
13617#include <sys/select.h>
13618#endif
bd628c73
AD
13619#$d_socket HAS_SOCKET
13620#ifdef HAS_SOCKET
13621# include <sys/socket.h> /* Might include <sys/bsdtypes.h> */
13622#endif
5ff3f7a4 13623#include <stdio.h>
fb164848
JH
13624$selecttype b;
13625#define S sizeof(*(b))
5ff3f7a4
GS
13626#define MINBITS 64
13627#define NBYTES (S * 8 > MINBITS ? S : MINBITS/8)
13628#define NBITS (NBYTES * 8)
13629int main() {
13630 char s[NBYTES];
5ff3f7a4
GS
13631 struct timeval t;
13632 int i;
13633 FILE* fp;
13634 int fd;
13635
13636 fclose(stdin);
13637 fp = fopen("try.c", "r");
13638 if (fp == 0)
13639 exit(1);
13640 fd = fileno(fp);
13641 if (fd < 0)
13642 exit(2);
13643 b = ($selecttype)s;
13644 for (i = 0; i < NBITS; i++)
13645 FD_SET(i, b);
13646 t.tv_sec = 0;
13647 t.tv_usec = 0;
13648 select(fd + 1, b, 0, 0, &t);
13649 for (i = NBITS - 1; i > fd && FD_ISSET(i, b); i--);
13650 printf("%d\n", i + 1);
13651 return 0;
13652}
13653EOCP
13654 set try
13655 if eval $compile_ok; then
13656 selectminbits=`./try`
85ab1d1d 13657 case "$selectminbits" in
fb164848
JH
13658 '') cat >&4 <<EOM
13659Cannot figure out on how many bits at a time your select() operates.
13660I'll play safe and guess it is 32 bits.
13661EOM
13662 selectminbits=32
13663 bits="32 bits"
13664 ;;
85ab1d1d
JH
13665 1) bits="1 bit" ;;
13666 *) bits="$selectminbits bits" ;;
13667 esac
13668 echo "Your select() operates on $bits at a time." >&4
5ff3f7a4
GS
13669 else
13670 rp='What is the minimum number of bits your select() operates on?'
13671 case "$byteorder" in
13672 1234|12345678) dflt=32 ;;
13673 *) dflt=1 ;;
13674 esac
13675 . ./myread
13676 val=$ans
13677 selectminbits="$val"
13678 fi
13679 $rm -f try.* try
13680 ;;
13681 *) : no select, so pick a harmless default
13682 selectminbits='32'
13683 ;;
13684 esac
13685 ;;
13686esac
13687
8e07c86e
AD
13688: Trace out the files included by signal.h, then look for SIGxxx names.
13689: Remove SIGARRAYSIZE used by HPUX.
af4c28eb
CS
13690: Remove SIGSTKSIZE used by Linux.
13691: Remove SIGSTKSZ used by Posix.
4633a7c4 13692: Remove SIGTYP void lines used by OS2.
6764938d 13693: Some cpps, like os390, dont give the file name anywhere
53d4e464 13694if [ "X$fieldn" = X ]; then
6764938d
GS
13695 : Just make some guesses. We check them later.
13696 xxx='/usr/include/signal.h /usr/include/sys/signal.h'
53d4e464 13697else
6764938d 13698 xxx=`echo '#include <signal.h>' |
8e07c86e
AD
13699 $cppstdin $cppminus $cppflags 2>/dev/null |
13700 $grep '^[ ]*#.*include' |
13701 $awk "{print \\$$fieldn}" | $sed 's!"!!g' | $sort | $uniq`
53d4e464 13702fi
8e07c86e
AD
13703: Check this list of files to be sure we have parsed the cpp output ok.
13704: This will also avoid potentially non-existent files, such
13705: as ../foo/bar.h
13706xxxfiles=''
13707for xx in $xxx /dev/null ; do
13708 $test -f "$xx" && xxxfiles="$xxxfiles $xx"
13709done
13710: If we have found no files, at least try signal.h
13711case "$xxxfiles" in
13712'') xxxfiles=`./findhdr signal.h` ;;
13713esac
13714xxx=`awk '
af4c28eb 13715$1 ~ /^#define$/ && $2 ~ /^SIG[A-Z0-9]*$/ && $2 !~ /SIGARRAYSIZE/ && $2 !~ /SIGSTKSIZE/ && $2 !~ /SIGSTKSZ/ && $3 !~ /void/ {
8e07c86e
AD
13716 print substr($2, 4, 20)
13717}
4633a7c4 13718$1 == "#" && $2 ~ /^define$/ && $3 ~ /^SIG[A-Z0-9]*$/ && $3 !~ /SIGARRAYSIZE/ && $4 !~ /void/ {
8e07c86e
AD
13719 print substr($3, 4, 20)
13720}' $xxxfiles`
13721: Append some common names just in case the awk scan failed.
6764938d
GS
13722xxx="$xxx ABRT ALRM BUS CANCEL CHLD CLD CONT DIL EMT FPE"
13723xxx="$xxx FREEZE HUP ILL INT IO IOT KILL LOST LWP PHONE"
13724xxx="$xxx PIPE POLL PROF PWR QUIT RTMAX RTMIN SEGV STKFLT STOP"
13725xxx="$xxx SYS TERM THAW TRAP TSTP TTIN TTOU URG USR1 USR2"
13726xxx="$xxx USR3 USR4 VTALRM WAITING WINCH WIND WINDOW XCPU XFSZ"
13727
8e07c86e 13728: generate a few handy files for later
dc45a647 13729$cat > signal.c <<'EOCP'
4633a7c4
LW
13730#include <sys/types.h>
13731#include <signal.h>
dc45a647 13732#include <stdio.h>
4633a7c4 13733int main() {
760ac839
LW
13734
13735/* Strange style to avoid deeply-nested #if/#else/#endif */
13736#ifndef NSIG
13737# ifdef _NSIG
13738# define NSIG (_NSIG)
13739# endif
13740#endif
13741
13742#ifndef NSIG
13743# ifdef SIGMAX
13744# define NSIG (SIGMAX+1)
13745# endif
13746#endif
13747
13748#ifndef NSIG
13749# ifdef SIG_MAX
13750# define NSIG (SIG_MAX+1)
13751# endif
13752#endif
13753
13754#ifndef NSIG
13755# ifdef MAXSIG
13756# define NSIG (MAXSIG+1)
13757# endif
4633a7c4 13758#endif
760ac839
LW
13759
13760#ifndef NSIG
13761# ifdef MAX_SIG
13762# define NSIG (MAX_SIG+1)
13763# endif
13764#endif
13765
13766#ifndef NSIG
13767# ifdef SIGARRAYSIZE
13768# define NSIG (SIGARRAYSIZE+1) /* Not sure of the +1 */
13769# endif
13770#endif
13771
13772#ifndef NSIG
13773# ifdef _sys_nsig
13774# define NSIG (_sys_nsig) /* Solaris 2.5 */
13775# endif
13776#endif
13777
13778/* Default to some arbitrary number that's big enough to get most
13779 of the common signals.
13780*/
13781#ifndef NSIG
13782# define NSIG 50
4633a7c4 13783#endif
760ac839
LW
13784
13785printf("NSIG %d\n", NSIG);
13786
dc45a647
MB
13787#ifndef JUST_NSIG
13788
13789EOCP
13790
28e8609d 13791echo $xxx | $tr ' ' $trnl | $sort | $uniq | $awk '
8e07c86e
AD
13792{
13793 printf "#ifdef SIG"; printf $1; printf "\n"
13794 printf "printf(\""; printf $1; printf " %%d\\n\",SIG";
13795 printf $1; printf ");\n"
13796 printf "#endif\n"
2304df62 13797}
2304df62 13798END {
dc45a647 13799 printf "#endif /* JUST_NSIG */\n";
14e4fe40 13800 printf "exit(0);\n}\n";
2304df62 13801}
4633a7c4
LW
13802' >>signal.c
13803$cat >signal.awk <<'EOP'
13804BEGIN { ndups = 0 }
13805$1 ~ /^NSIG$/ { nsig = $2 }
13806($1 !~ /^NSIG$/) && (NF == 2) {
13807 if ($2 > maxsig) { maxsig = $2 }
13808 if (sig_name[$2]) {
13809 dup_name[ndups] = $1
13810 dup_num[ndups] = $2
13811 ndups++
13812 }
13813 else {
13814 sig_name[$2] = $1
13815 sig_num[$2] = $2
13816 }
4633a7c4
LW
13817}
13818END {
af4c28eb
CS
13819 if (nsig == 0) {
13820 nsig = maxsig + 1
13821 }
13822 printf("NSIG %d\n", nsig);
13823 for (n = 1; n < nsig; n++) {
13824 if (sig_name[n]) {
13825 printf("%s %d\n", sig_name[n], sig_num[n])
4633a7c4 13826 }
af4c28eb
CS
13827 else {
13828 printf("NUM%d %d\n", n, n)
13829 }
13830 }
4633a7c4 13831 for (n = 0; n < ndups; n++) {
af4c28eb 13832 printf("%s %d\n", dup_name[n], dup_num[n])
4633a7c4
LW
13833 }
13834}
13835EOP
13836$cat >signal_cmd <<EOS
8e07c86e 13837$startsh
dc45a647
MB
13838if $test -s signal.lst; then
13839 echo "Using your existing signal.lst file"
13840 exit 0
13841fi
13842xxx="$xxx"
13843EOS
13844$cat >>signal_cmd <<'EOS'
13845
13846set signal
13847if eval $compile_ok; then
dfe9444c 13848 ./signal$_exe | $sort -n +1 | $uniq | $awk -f signal.awk >signal.lst
8e07c86e 13849else
dc45a647
MB
13850 echo "(I can't seem be able to compile the whole test program)" >&4
13851 echo "(I'll try it in little pieces.)" >&4
13852 set signal -DJUST_NSIG
13853 if eval $compile_ok; then
13854 ./signal$_exe > signal.nsg
13855 $cat signal.nsg
13856 else
13857 echo "I can't seem to figure out how many signals you have." >&4
13858 echo "Guessing 50." >&4
13859 echo 'NSIG 50' > signal.nsg
13860 fi
13861 : Now look at all the signal names, one at a time.
28e8609d 13862 for xx in `echo $xxx | $tr ' ' $trnl | $sort | $uniq`; do
dc45a647
MB
13863 $cat > signal.c <<EOCP
13864#include <sys/types.h>
13865#include <signal.h>
13866#include <stdio.h>
13867int main() {
13868printf("$xx %d\n", SIG${xx});
13869return 0;
13870}
13871EOCP
13872 set signal
13873 if eval $compile; then
13874 echo "SIG${xx} found."
13875 ./signal$_exe >> signal.ls1
13876 else
13877 echo "SIG${xx} NOT found."
13878 fi
13879 done
13880 if $test -s signal.ls1; then
13881 $cat signal.nsg signal.ls1 |
13882 $sort -n +1 | $uniq | $awk -f signal.awk >signal.lst
13883 fi
13884
13885fi
13886if $test -s signal.lst; then
13887 :
13888else
13889 echo "(AAK! I can't compile the test programs -- Guessing)" >&4
8e07c86e 13890 echo 'kill -l' >signal
dc45a647 13891 set X `csh -f <signal`
8e07c86e 13892 $rm -f signal
2304df62 13893 shift
dc45a647 13894 case $# in
8e07c86e 13895 0) set HUP INT QUIT ILL TRAP ABRT EMT FPE KILL BUS SEGV SYS PIPE ALRM TERM;;
2304df62 13896 esac
28e8609d 13897 echo $@ | $tr ' ' $trnl | \
af4c28eb
CS
13898 $awk '{ printf "%s %d\n", $1, ++s; }
13899 END { printf "NSIG %d\n", ++s }' >signal.lst
8e07c86e 13900fi
dc45a647 13901$rm -f signal.c signal$_exe signal$_o signal.nsg signal.ls1
8e07c86e 13902EOS
4633a7c4
LW
13903chmod a+x signal_cmd
13904$eunicefix signal_cmd
8e07c86e
AD
13905
13906: generate list of signal names
13907echo " "
dfe9444c 13908case "$sig_name_init" in
6626bf4c
JH
13909'') doinit=yes ;;
13910*) case "$sig_num_init" in
13911 ''|*,*) doinit=yes ;;
13912 esac ;;
13913esac
13914case "$doinit" in
13915yes)
4633a7c4 13916 echo "Generating a list of signal names and numbers..." >&4
dc45a647 13917 . ./signal_cmd
af4c28eb
CS
13918 sig_count=`$awk '/^NSIG/ { printf "%d", $2 }' signal.lst`
13919 sig_name=`$awk 'BEGIN { printf "ZERO " }
13920 !/^NSIG/ { printf "%s ", $1 }' signal.lst`
13921 sig_num=`$awk 'BEGIN { printf "0 " }
13922 !/^NSIG/ { printf "%d ", $2 }' signal.lst`
13923 sig_name_init=`$awk 'BEGIN { printf "\"ZERO\", " }
13924 !/^NSIG/ { printf "\"%s\", ", $1 }
13925 END { printf "0\n" }' signal.lst`
13926 sig_num_init=`$awk 'BEGIN { printf "0, " }
13927 !/^NSIG/ { printf "%d, ", $2}
13928 END { printf "0\n"}' signal.lst`
13929 ;;
13930esac
13931echo "The following $sig_count signals are available:"
a0d0e21e
LW
13932echo " "
13933echo $sig_name | $awk \
13934'BEGIN { linelen = 0 }
13935{
8e07c86e 13936 for (i = 1; i <= NF; i++) {
a0d0e21e
LW
13937 name = "SIG" $i " "
13938 linelen = linelen + length(name)
13939 if (linelen > 70) {
13940 printf "\n"
13941 linelen = length(name)
13942 }
13943 printf "%s", name
13944 }
8e07c86e 13945 printf "\n"
a0d0e21e 13946}'
4633a7c4 13947$rm -f signal signal.c signal.awk signal.lst signal_cmd
a0d0e21e 13948
8c99d73e
GS
13949echo " "
13950case "$sizetype" in
13951*_t) zzz="$sizetype" ;;
13952*) zzz="filesize" ;;
13953esac
13954echo "Checking the size of $zzz..." >&4
13955cat > try.c <<EOCP
13956#include <sys/types.h>
13957#include <stdio.h>
13958int main() {
13959 printf("%d\n", (int)sizeof($sizetype));
13960 exit(0);
13961}
13962EOCP
13963set try
13964if eval $compile_ok; then
13965 yyy=`./try`
13966 case "$yyy" in
13967 '') sizesize=4
13968 echo "(I can't execute the test program--guessing $sizesize.)" >&4
13969 ;;
13970 *) sizesize=$yyy
13971 echo "Your $zzz size is $sizesize bytes."
13972 ;;
13973 esac
13974else
13975 sizesize=4
13976 echo "(I can't compile the test program--guessing $sizesize.)" >&4
13977fi
13978
13979
c890dc6c
JH
13980: check for socklen_t
13981echo " "
13982echo "Checking to see if you have socklen_t..." >&4
13983$cat >try.c <<EOCP
13984#include <sys/types.h>
13985#$d_socket HAS_SOCKET
13986#ifdef HAS_SOCKET
13987#include <sys/socket.h>
13988#endif
13989int main() { socklen_t x = 16; }
13990EOCP
13991set try
13992if eval $compile; then
13993 val="$define"
13994 echo "You have socklen_t."
13995else
13996 val="$undef"
13997 echo "You do not have socklen_t."
13998 case "$sizetype" in
8c99d73e 13999 size_t) echo "(You do have size_t, that might work. Some people are happy with just an int.)" ;;
c890dc6c
JH
14000 esac
14001fi
14002$rm -f try try.*
14003set d_socklen_t
14004eval $setvar
14005
14006: check for type of the size argument to socket calls
14007case "$d_socket" in
14008"$define")
14009 $cat <<EOM
14010
14011Checking to see what type is the last argument of accept().
14012EOM
14013 hdrs="$define sys/types.h $d_socket sys/socket.h"
14014 yyy=''
14015 case "$d_socklen_t" in
14016 "$define") yyy="$yyy socklen_t"
14017 esac
6c85e8b0 14018 yyy="$yyy $sizetype int long unsigned"
c890dc6c
JH
14019 for xxx in $yyy; do
14020 case "$socksizetype" in
14021 '') try="extern int accept(int, struct sockaddr *, $xxx *);"
14022 if ./protochk "$try" $hdrs; then
14023 echo "Your system accepts '$xxx *' for the last argument of accept()."
10cc9d2a 14024 socksizetype="$xxx"
c890dc6c
JH
14025 fi
14026 ;;
14027 esac
14028 done
14029: In case none of those worked, prompt the user.
14030 case "$socksizetype" in
4f309e22 14031 '') rp='What is the type for socket address structure sizes?'
10cc9d2a 14032 dflt='int'
c890dc6c
JH
14033 . ./myread
14034 socksizetype=$ans
14035 ;;
14036 esac
14037 ;;
6c85e8b0
JH
14038*) : no sockets, so pick relatively harmless default
14039 socksizetype='int'
c890dc6c
JH
14040 ;;
14041esac
14042
a0d0e21e
LW
14043: see what type is used for signed size_t
14044set ssize_t ssizetype int stdio.h sys/types.h
14045eval $typedef
14046dflt="$ssizetype"
14047$cat > ssize.c <<EOM
14048#include <stdio.h>
14049#include <sys/types.h>
14050#define Size_t $sizetype
14051#define SSize_t $dflt
d674cd6d 14052int main()
a0d0e21e
LW
14053{
14054 if (sizeof(Size_t) == sizeof(SSize_t))
14055 printf("$dflt\n");
14056 else if (sizeof(Size_t) == sizeof(int))
14057 printf("int\n");
14058 else
14059 printf("long\n");
760ac839 14060 exit(0);
a0d0e21e
LW
14061}
14062EOM
14063echo " "
dfe9444c 14064set ssize
dc45a647 14065if eval $compile_ok && ./ssize > /dev/null; then
dfe9444c 14066 ssizetype=`./ssize`
a0d0e21e
LW
14067 echo "I'll be using $ssizetype for functions returning a byte count." >&4
14068else
24fef2a7 14069 $cat >&4 <<EOM
24fef2a7
AD
14070Help! I can't compile and run the ssize_t test program: please enlighten me!
14071(This is probably a misconfiguration in your system or libraries, and
14072you really ought to fix it. Still, I'll try anyway.)
a0d0e21e
LW
14073
14074I need a type that is the same size as $sizetype, but is guaranteed to
24fef2a7 14075be signed. Common values are ssize_t, int and long.
a0d0e21e
LW
14076
14077EOM
14078 rp="What signed type is the same size as $sizetype?"
14079 . ./myread
14080 ssizetype="$ans"
14081fi
dfe9444c 14082$rm -f ssize ssize.*
3fd537d4 14083
a0d0e21e
LW
14084: see what type of char stdio uses.
14085echo " "
14086if $contains 'unsigned.*char.*_ptr;' `./findhdr stdio.h` >/dev/null 2>&1 ; then
14087 echo "Your stdio uses unsigned chars." >&4
14088 stdchar="unsigned char"
14089else
14090 echo "Your stdio uses signed chars." >&4
14091 stdchar="char"
14092fi
14093
14094: see if time exists
14095echo " "
28e8609d
JH
14096if test "X$d_time" = X -o X"$timetype" = X; then
14097 if set time val -f d_time; eval $csym; $val; then
5ff3f7a4
GS
14098 echo 'time() found.' >&4
14099 val="$define"
14100 rp="What is the type returned by time() on this system?"
14101 set time_t timetype long stdio.h sys/types.h
14102 eval $typedef_ask
28e8609d 14103 else
5ff3f7a4
GS
14104 echo 'time() not found, hope that will do.' >&4
14105 val="$undef"
14106 timetype='int';
28e8609d
JH
14107 fi
14108 set d_time
14109 eval $setvar
a0d0e21e 14110fi
a0d0e21e
LW
14111
14112: see what type uids are declared as in the kernel
dc45a647
MB
14113echo " "
14114echo "Looking for the type for user ids returned by getuid()."
a0d0e21e
LW
14115set uid_t uidtype xxx stdio.h sys/types.h
14116eval $typedef
14117case "$uidtype" in
14118xxx)
14119 xxx=`./findhdr sys/user.h`
14120 set `grep '_ruid;' "$xxx" 2>/dev/null` unsigned short
14121 case $1 in
14122 unsigned) dflt="$1 $2" ;;
14123 *) dflt="$1" ;;
14124 esac
14125 ;;
4633a7c4
LW
14126*) dflt="$uidtype";;
14127esac
dc45a647
MB
14128case "$uidtype" in
14129uid_t) echo "uid_t found." ;;
14130*) rp="What is the type for user ids returned by getuid()?"
14131 . ./myread
14132 uidtype="$ans"
14133 ;;
14134esac
4633a7c4 14135
57def98f
JH
14136echo " "
14137case "$uidtype" in
14138*_t) zzz="$uidtype" ;;
14139*) zzz="uid" ;;
14140esac
a22e52b9 14141echo "Checking the size of $zzz..." >&4
57def98f
JH
14142cat > try.c <<EOCP
14143#include <sys/types.h>
14144#include <stdio.h>
14145int main() {
213c275f 14146 printf("%d\n", (int)sizeof($uidtype));
14e4fe40 14147 exit(0);
57def98f
JH
14148}
14149EOCP
d4265146 14150set try
a22e52b9 14151if eval $compile_ok; then
57def98f
JH
14152 yyy=`./try`
14153 case "$yyy" in
a22e52b9
JH
14154 '') uidsize=4
14155 echo "(I can't execute the test program--guessing $uidsize.)" >&4
57def98f 14156 ;;
a22e52b9 14157 *) uidsize=$yyy
49c10eea 14158 echo "Your $zzz is $uidsize bytes long."
57def98f
JH
14159 ;;
14160 esac
14161else
a22e52b9
JH
14162 uidsize=4
14163 echo "(I can't compile the test program--guessing $uidsize.)" >&4
57def98f
JH
14164fi
14165
785fb66b
JH
14166echo " "
14167case "$uidtype" in
14168*_t) zzz="$uidtype" ;;
14169*) zzz="uid" ;;
14170esac
a22e52b9 14171echo "Checking the sign of $zzz..." >&4
785fb66b
JH
14172cat > try.c <<EOCP
14173#include <sys/types.h>
14174#include <stdio.h>
14175int main() {
a22e52b9
JH
14176 $uidtype foo = -1;
14177 if (foo < 0)
14178 printf("-1\n");
14179 else
14180 printf("1\n");
785fb66b
JH
14181}
14182EOCP
14183set try
a22e52b9 14184if eval $compile; then
785fb66b
JH
14185 yyy=`./try`
14186 case "$yyy" in
a22e52b9
JH
14187 '') uidsign=1
14188 echo "(I can't execute the test program--guessing unsigned.)" >&4
785fb66b 14189 ;;
a22e52b9
JH
14190 *) uidsign=$yyy
14191 case "$uidsign" in
14192 1) echo "Your $zzz is unsigned." ;;
14193 -1) echo "Your $zzz is signed." ;;
14194 esac
785fb66b
JH
14195 ;;
14196 esac
14197else
a22e52b9
JH
14198 uidsign=1
14199 echo "(I can't compile the test program--guessing unsigned.)" >&4
785fb66b
JH
14200fi
14201
a22e52b9
JH
14202
14203
14204echo " "
14205$echo "Checking the format string to be used for uids..." >&4
14206
14207case "$uidsign" in
14208-1) if $test X"$uidsize" = X"$ivsize"; then
14209 uidformat="$ivdformat"
14210 else
14211 if $test X"$uidsize" = X"$longsize"; then
14212 uidformat='"ld"'
14213 else
14214 if $test X"$uidsize" = X"$intsize"; then
14215 uidformat='"d"'
14216 else
14217 if $test X"$uidsize" = X"$shortsize"; then
14218 uidformat='"hd"'
14219 fi
14220 fi
14221 fi
14222 fi
14223 ;;
14224*) if $test X"$uidsize" = X"$uvsize"; then
14225 uidformat="$uvuformat"
14226 else
14227 if $test X"$uidsize" = X"$longsize"; then
14228 uidformat='"lu"'
14229 else
14230 if $test X"$uidsize" = X"$intsize"; then
14231 uidformat='"u"'
14232 else
14233 if $test X"$uidsize" = X"$shortsize"; then
14234 uidformat='"hu"'
14235 fi
14236 fi
14237 fi
14238 fi
14239 ;;
14240esac
14241
4633a7c4
LW
14242: see if dbm.h is available
14243: see if dbmclose exists
14244set dbmclose d_dbmclose
14245eval $inlibc
14246
14247case "$d_dbmclose" in
14248$define)
14249 set dbm.h i_dbm
14250 eval $inhdr
5f80c64f
JH
14251 case "$i_dbm" in
14252 $define)
14253 val="$undef"
14254 set i_rpcsvcdbm
14255 eval $setvar
14256 ;;
14257 *) set rpcsvc/dbm.h i_rpcsvcdbm
14258 eval $inhdr
14259 ;;
14260 esac
14261 ;;
14262*) echo "We won't be including <dbm.h>"
14263 val="$undef"
14264 set i_dbm
14265 eval $setvar
14266 val="$undef"
14267 set i_rpcsvcdbm
14268 eval $setvar
14269 ;;
14270esac
14271
14272: see if this is a sys/file.h system
14273val=''
14274set sys/file.h val
14275eval $inhdr
14276
14277: do we need to include sys/file.h ?
14278case "$val" in
14279"$define")
14280 echo " "
14281 if $h_sysfile; then
14282 val="$define"
14283 echo "We'll be including <sys/file.h>." >&4
14284 else
14285 val="$undef"
14286 echo "We won't be including <sys/file.h>." >&4
14287 fi
14288 ;;
14289*)
14290 h_sysfile=false
14291 ;;
14292esac
14293set i_sysfile
14294eval $setvar
14295
14296: see if fcntl.h is there
14297val=''
14298set fcntl.h val
14299eval $inhdr
14300
14301: see if we can include fcntl.h
14302case "$val" in
14303"$define")
14304 echo " "
14305 if $h_fcntl; then
14306 val="$define"
14307 echo "We'll be including <fcntl.h>." >&4
14308 else
14309 val="$undef"
14310 if $h_sysfile; then
14311 echo "We don't need to include <fcntl.h> if we include <sys/file.h>." >&4
14312 else
14313 echo "We won't be including <fcntl.h>." >&4
14314 fi
14315 fi
14316 ;;
14317*)
14318 h_fcntl=false
14319 val="$undef"
14320 ;;
14321esac
14322set i_fcntl
14323eval $setvar
14324
43999f95
JH
14325: see if this is a iconv.h system
14326set iconv.h i_iconv
14327eval $inhdr
14328
792d8dab
JH
14329: see if this is a ieeefp.h system
14330set ieeefp.h i_ieeefp
14331eval $inhdr
14332
5f80c64f
JH
14333: see if locale.h is available
14334set locale.h i_locale
14335eval $inhdr
14336
7f3d1cf1 14337: see if mach cthreads are available
13666627
JH
14338if test "X$usethreads" = "X$define"; then
14339 set mach/cthreads.h i_machcthr
14340 eval $inhdr
14341else
14342 i_machcthr="$undef"
14343fi
14344
14345
7f3d1cf1 14346
5f80c64f
JH
14347: see if this is a math.h system
14348set math.h i_math
14349eval $inhdr
14350
e7fb4fcc
JH
14351: see if this is a mntent.h system
14352set mntent.h i_mntent
14353eval $inhdr
14354
5f80c64f
JH
14355: see if ndbm.h is available
14356set ndbm.h t_ndbm
14357eval $inhdr
14358case "$t_ndbm" in
14359$define)
14360 : see if dbm_open exists
14361 set dbm_open d_dbm_open
14362 eval $inlibc
14363 case "$d_dbm_open" in
14364 $undef)
14365 t_ndbm="$undef"
14366 echo "We won't be including <ndbm.h>"
14367 ;;
14368 esac
14369 ;;
14370esac
14371val="$t_ndbm"
14372set i_ndbm
14373eval $setvar
14374
14375: see if net/errno.h is available
14376val=''
14377set net/errno.h val
14378eval $inhdr
14379
14380: Unfortunately, it causes problems on some systems. Arrgh.
14381case "$val" in
14382$define)
14383 cat > try.c <<'EOM'
14384#include <stdio.h>
14385#include <errno.h>
14386#include <net/errno.h>
14387int func()
14388{
14389 return ENOTSOCK;
14390}
14391EOM
14392 if $cc $ccflags -c try.c >/dev/null 2>&1; then
14393 echo "We'll be including <net/errno.h>." >&4
14394 else
14395 echo "We won't be including <net/errno.h>." >&4
14396 val="$undef"
14397 fi
14398 $rm -f try.* try
14399 ;;
14400esac
14401set i_neterrno
14402eval $setvar
14403
9cc6feab
JH
14404: see if netinet/tcp.h is available
14405set netinet/tcp.h i_netinettcp
14406eval $inhdr
14407
5b34fd99
JH
14408: see if this is a poll.h system
14409set poll.h i_poll
14410eval $inhdr
14411
3813c136
JH
14412: see if this is a prot.h system
14413set prot.h i_prot
14414eval $inhdr
14415
5f80c64f 14416echo " "
78691af5 14417$echo "Guessing which symbols your C compiler and preprocessor define..." >&4
43999f95
JH
14418$cat <<'EOSH' > Cppsym.know
14419a29k ABI64 aegis AES_SOURCE AIX AIX32 AIX370
14420AIX41 AIX42 AIX43 AIX_SOURCE aixpc ALL_SOURCE
14421alliant alpha am29000 AM29000 amiga AMIGAOS AMIX
14422ansi ANSI_C_SOURCE apollo ardent atarist att386 att3b BeOS
14423BIG_ENDIAN BIT_MSF bsd BSD bsd43 bsd4_2 bsd4_3 BSD4_3 bsd4_4
14424BSD_4_3 BSD_4_4 BSD_NET2 BSD_TIME BSD_TYPES BSDCOMPAT bsdi
14425bull c cadmus clipper CMU COFF COMPILER_VERSION
14426concurrent convex cpu cray CRAY CRAYMPP ctix CX_UX
14427CYGWIN DGUX DGUX_SOURCE DJGPP dmert DOLPHIN DPX2 DSO
14428Dynix DynixPTX ELF encore EPI EXTENSIONS FILE_OFFSET_BITS
14429FreeBSD GCC_NEW_VARARGS gcos gcx gimpel
14430GNU_SOURCE GNUC GNUC_MINOR GO32 gould GOULD_PN
14431H3050R H3050RX hbullx20 hcx host_mips
14432hp200 hp300 hp700 HP700 hp800 hp9000
14433hp9000s200 hp9000s300 hp9000s400 hp9000s500
14434hp9000s700 hp9000s800 hp9k8 hp_osf hppa hpux HPUX_SOURCE
14435i186 i286 i386 i486 i586 i686 i8086 i80960 i860 I960
14436iAPX286 ibm ibm032 ibmesa IBMR2 ibmrt ILP32 ILP64
14437INLINE_INTRINSICS INTRINSICS INT64 interdata is68k ksr1
14438LANGUAGE_C LARGE_FILE_API LARGEFILE64_SOURCE
14439LARGEFILE_SOURCE LFS64_LARGEFILE LFS_LARGEFILE
14440Linux LITTLE_ENDIAN LONG64 LONG_DOUBLE LONG_LONG
14441LONGDOUBLE LONGLONG LP64 luna luna88k Lynx
14442M68000 m68k m88100 m88k M88KBCS_TARGET M_COFF
14443M_I186 M_I286 M_I386 M_I8086 M_I86 M_I86SM M_SYS3
14444M_SYS5 M_SYSIII M_SYSV M_UNIX M_XENIX MACH machine MachTen
14445MATH_HAS_NO_SIDE_EFFECTS
14446mc300 mc500 mc68000 mc68010 mc68020 mc68030 mc68040
14447mc68060 mc68k mc68k32 mc700 mc88000 mc88100 merlin
14448mert MiNT mips MIPS_FPSET MIPS_ISA MIPS_SIM MIPS_SZINT
14449MIPS_SZLONG MIPS_SZPTR MIPSEB MIPSEL MODERN_C motorola
14450mpeix MSDOS MTXINU MULTIMAX mvs MVS n16 ncl_el ncl_mr
14451NetBSD news1500 news1700 news1800 news1900 news3700
14452news700 news800 news900 NeXT NLS ns16000 ns32000
14453ns32016 ns32332 ns32k nsc32000
14454OCS88 OEMVS OpenBSD os OS2 OS390 osf OSF1 OSF_SOURCE
14455pa_risc PA_RISC1_1 PA_RISC2_0 PARAGON parisc
14456pc532 pdp11 PGC PIC plexus PORTAR posix
14457POSIX1B_SOURCE POSIX2_SOURCE POSIX4_SOURCE
14458POSIX_C_SOURCE POSIX_SOURCE POWER
14459PROTOTYPES PWB pyr QNX R3000 REENTRANT RES Rhapsody RISC6000
14460riscix riscos RT scs SCO sequent sgi SGI_SOURCE sinix
14461SIZE_INT SIZE_LONG SIZE_PTR SOCKET_SOURCE SOCKETS_SOURCE
14462sony sony_news sonyrisc sparc sparclite spectrum
14463stardent stdc STDC_EXT stratos sun sun3 sun386
14464Sun386i svr3 svr4 SVR4_2 SVR4_SOURCE svr5
14465SX system SYSTYPE_BSD SYSTYPE_BSD43 SYSTYPE_BSD44
14466SYSTYPE_SVR4 SYSTYPE_SVR5 SYSTYPE_SYSV SYSV SYSV3 SYSV4 SYSV5
14467sysV68 sysV88 Tek4132 Tek4300 titan
14468tower tower32 tower32_200 tower32_600 tower32_700
14469tower32_800 tower32_850 tss
14470u370 u3b u3b2 u3b20 u3b200 u3b20d u3b5
14471ultrix UMAXV UnicomPBB UnicomPBD UNICOS UNICOSMK
14472unix UNIX95 UNIX99 unixpc unos USGr4 USGr4_2
14473Utek UTek UTS UWIN uxpm uxps vax venix VMESA vms xenix Xenix286
14474XOPEN_SOURCE XOPEN_SOURCE_EXTENDED XPG2 XPG2_EXTENDED
14475XPG3 XPG3_EXTENDED XPG4 XPG4_EXTENDED
14476z8000
14477EOSH
14478# Maybe put other stuff here too.
14479cat <<EOSH >>Cppsym.know
14480$osname
14481EOSH
9b97abf7
JH
14482./tr '[a-z]' '[A-Z]' < Cppsym.know > Cppsym.a
14483./tr '[A-Z]' '[a-z]' < Cppsym.know > Cppsym.b
43999f95
JH
14484$cat Cppsym.a Cppsym.b | $tr ' ' $trnl | sort | uniq > Cppsym.know
14485$rm -f Cppsym.a Cppsym.b
14486cat <<EOSH > Cppsym
5f80c64f 14487$startsh
43999f95
JH
14488if $test \$# -gt 0; then
14489 echo \$* | $tr " " "$trnl" | ./Cppsym.try > Cppsym.got
14490 if $test -s Cppsym.got; then
14491 $rm -f Cppsym.got
14492 exit 0
14493 fi
14494 $rm -f Cppsym.got
14495 exit 1
14496else
14497 $tr " " "$trnl" | ./Cppsym.try
14498 exit 0
14499fi
14500EOSH
5f80c64f
JH
14501chmod +x Cppsym
14502$eunicefix Cppsym
43999f95
JH
14503cat <<EOSH > Cppsym.try
14504$startsh
14505cat <<'EOCP' > try.c
14506#include <stdio.h>
14507int main() {
14508EOCP
14509$awk \\
14510EOSH
14511cat <<'EOSH' >> Cppsym.try
14512'length($1) > 0 {
14513 printf "#ifdef %s\n#if %s+0\nprintf(\"%s=%%ld\\n\", %s);\n#else\nprintf(\"%s\\n\");\n#endif\n#endif\n", $1, $1, $1, $1, $1
14514 printf "#ifdef _%s\n#if _%s+0\nprintf(\"_%s=%%ld\\n\", _%s);\n#else\nprintf(\"_%s\\n\");\n#endif\n#endif\n", $1, $1, $1, $1, $1
14515 printf "#ifdef __%s\n#if __%s+0\nprintf(\"__%s=%%ld\\n\", __%s);\n#else\nprintf(\"__%s\\n\");\n#endif\n#endif\n", $1, $1, $1, $1, $1
14516 printf "#ifdef __%s__\n#if __%s__+0\nprintf(\"__%s__=%%ld\\n\", __%s__);\n#else\nprintf(\"__%s__\\n\");\n#endif\n#endif\n", $1, $1, $1, $1, $1
14517}' >> try.c
14518echo '}' >> try.c
14519EOSH
14520cat <<EOSH >> Cppsym.try
43999f95 14521ccflags="$ccflags"
a3489f11
JH
14522case "$osname-$gccversion" in
14523irix-) ccflags="\$ccflags -woff 1178" ;;
14524esac
14525$cc $optimize \$ccflags $ldflags -o try try.c $libs && ./try$exe_ext
43999f95
JH
14526EOSH
14527chmod +x Cppsym.try
14528$eunicefix Cppsym.try
14529./Cppsym < Cppsym.know > Cppsym.true
5f80c64f 14530: now check the C compiler for additional symbols
c4747d3e
JH
14531postprocess_cc_v=''
14532case "$osname" in
14533aix) postprocess_cc_v="|$tr , ' '" ;;
14534esac
5f80c64f
JH
14535$cat >ccsym <<EOS
14536$startsh
14537$cat >tmp.c <<EOF
14538extern int foo;
14539EOF
c4747d3e 14540for i in \`$cc -v -c tmp.c 2>&1 $postprocess_cc_v\`
5f80c64f
JH
14541do
14542 case "\$i" in
14543 -D*) echo "\$i" | $sed 's/^-D//';;
14544 -A*) $test "$gccversion" && echo "\$i" | $sed 's/^-A\(.*\)(\(.*\))/\1=\2/';;
14545 esac
14546done
14547$rm -f try.c
14548EOS
2000072c 14549postprocess_cc_v=''
5f80c64f
JH
14550chmod +x ccsym
14551$eunicefix ccsym
14552./ccsym > ccsym1.raw
14553if $test -s ccsym1.raw; then
14554 $sort ccsym1.raw | $uniq >ccsym.raw
14555else
14556 mv ccsym1.raw ccsym.raw
14557fi
14558
14559$awk '/\=/ { print $0; next }
14560 { print $0"=1" }' ccsym.raw >ccsym.list
43999f95
JH
14561$awk '/\=/ { print $0; next }
14562 { print $0"=1" }' Cppsym.true >ccsym.true
5f80c64f
JH
14563$comm -13 ccsym.true ccsym.list >ccsym.own
14564$comm -12 ccsym.true ccsym.list >ccsym.com
14565$comm -23 ccsym.true ccsym.list >ccsym.cpp
14566also=''
5f80c64f 14567if $test -z ccsym.raw; then
ff49bff8 14568 echo "Your C compiler doesn't seem to define any symbols!" >&4
5f80c64f 14569 echo " "
ff49bff8 14570 echo "However, your C preprocessor defines the following symbols:"
5f80c64f 14571 $cat Cppsym.true
ff49bff8
JH
14572 ccsymbols=''
14573 cppsymbols=`$cat Cppsym.true`
918c3d21 14574 cppsymbols=`echo $cppsymbols`
ff49bff8 14575 cppccsymbols="$cppsymbols"
5f80c64f
JH
14576else
14577 if $test -s ccsym.com; then
14578 echo "Your C compiler and pre-processor define these symbols:"
14579 $sed -e 's/\(.*\)=.*/\1/' ccsym.com
14580 also='also '
14581 symbols='ones'
ff49bff8 14582 cppccsymbols=`$cat ccsym.com`
918c3d21 14583 cppccsymbols=`echo $cppccsymbols`
5f80c64f
JH
14584 $test "$silent" || sleep 1
14585 fi
14586 if $test -s ccsym.cpp; then
14587 $test "$also" && echo " "
ff49bff8 14588 echo "Your C pre-processor ${also}defines the following symbols:"
5f80c64f
JH
14589 $sed -e 's/\(.*\)=.*/\1/' ccsym.cpp
14590 also='further '
ff49bff8 14591 cppsymbols=`$cat ccsym.cpp`
918c3d21 14592 cppsymbols=`echo $cppsymbols`
5f80c64f
JH
14593 $test "$silent" || sleep 1
14594 fi
14595 if $test -s ccsym.own; then
14596 $test "$also" && echo " "
ff49bff8 14597 echo "Your C compiler ${also}defines the following cpp symbols:"
5f80c64f
JH
14598 $sed -e 's/\(.*\)=1/\1/' ccsym.own
14599 $sed -e 's/\(.*\)=.*/\1/' ccsym.own | $uniq >>Cppsym.true
ff49bff8 14600 ccsymbols=`$cat ccsym.own`
918c3d21 14601 ccsymbols=`echo $ccsymbols`
5f80c64f
JH
14602 $test "$silent" || sleep 1
14603 fi
14604fi
14605$rm -f ccsym*
14606
14607: see if this is a termio system
14608val="$undef"
14609val2="$undef"
14610val3="$undef"
14611if $test `./findhdr termios.h`; then
14612 set tcsetattr i_termios
14613 eval $inlibc
14614 val3="$i_termios"
14615fi
14616echo " "
14617case "$val3" in
14618"$define") echo "You have POSIX termios.h... good!" >&4;;
14619*) if ./Cppsym pyr; then
14620 case "`/bin/universe`" in
14621 ucb) if $test `./findhdr sgtty.h`; then
14622 val2="$define"
14623 echo "<sgtty.h> found." >&4
14624 else
14625 echo "System is pyramid with BSD universe."
14626 echo "<sgtty.h> not found--you could have problems." >&4
14627 fi;;
14628 *) if $test `./findhdr termio.h`; then
14629 val="$define"
14630 echo "<termio.h> found." >&4
14631 else
14632 echo "System is pyramid with USG universe."
14633 echo "<termio.h> not found--you could have problems." >&4
14634 fi;;
14635 esac
14636 elif ./usg; then
14637 if $test `./findhdr termio.h`; then
14638 echo "<termio.h> found." >&4
14639 val="$define"
14640 elif $test `./findhdr sgtty.h`; then
14641 echo "<sgtty.h> found." >&4
14642 val2="$define"
14643 else
14644echo "Neither <termio.h> nor <sgtty.h> found--you could have problems." >&4
14645 fi
14646 else
14647 if $test `./findhdr sgtty.h`; then
14648 echo "<sgtty.h> found." >&4
14649 val2="$define"
14650 elif $test `./findhdr termio.h`; then
14651 echo "<termio.h> found." >&4
14652 val="$define"
14653 else
14654echo "Neither <sgtty.h> nor <termio.h> found--you could have problems." >&4
14655 fi
14656 fi;;
14657esac
14658set i_termio; eval $setvar
14659val=$val2; set i_sgtty; eval $setvar
14660val=$val3; set i_termios; eval $setvar
14661
f1066039
JH
14662: see if this is a shadow.h system
14663set shadow.h i_shadow
14664eval $inhdr
14665
86959918
JH
14666: see if this is a socks.h system
14667set socks.h i_socks
14668eval $inhdr
14669
5f80c64f
JH
14670: see if stdarg is available
14671echo " "
14672if $test `./findhdr stdarg.h`; then
14673 echo "<stdarg.h> found." >&4
14674 valstd="$define"
14675else
14676 echo "<stdarg.h> NOT found." >&4
14677 valstd="$undef"
14678fi
14679
14680: see if varags is available
14681echo " "
14682if $test `./findhdr varargs.h`; then
14683 echo "<varargs.h> found." >&4
14684else
14685 echo "<varargs.h> NOT found, but that's ok (I hope)." >&4
14686fi
14687
14688: set up the varargs testing programs
14689$cat > varargs.c <<EOP
14690#ifdef I_STDARG
14691#include <stdarg.h>
14692#endif
14693#ifdef I_VARARGS
14694#include <varargs.h>
14695#endif
14696
14697#ifdef I_STDARG
14698int f(char *p, ...)
14699#else
14700int f(va_alist)
14701va_dcl
14702#endif
14703{
14704 va_list ap;
14705#ifndef I_STDARG
14706 char *p;
14707#endif
14708#ifdef I_STDARG
14709 va_start(ap,p);
14710#else
14711 va_start(ap);
14712 p = va_arg(ap, char *);
14713#endif
14714 va_end(ap);
14715}
14716EOP
14717$cat > varargs <<EOP
14718$startsh
14719if $cc -c $ccflags -D\$1 varargs.c >/dev/null 2>&1; then
14720 echo "true"
14721else
14722 echo "false"
14723fi
14724$rm -f varargs$_o
14725EOP
14726chmod +x varargs
14727
14728: now check which varargs header should be included
14729echo " "
14730i_varhdr=''
14731case "$valstd" in
14732"$define")
14733 if `./varargs I_STDARG`; then
14734 val='stdarg.h'
14735 elif `./varargs I_VARARGS`; then
14736 val='varargs.h'
14737 fi
14738 ;;
14739*)
14740 if `./varargs I_VARARGS`; then
14741 val='varargs.h'
14742 fi
14743 ;;
14744esac
14745case "$val" in
14746'')
14747echo "I could not find the definition for va_dcl... You have problems..." >&4
14748 val="$undef"; set i_stdarg; eval $setvar
14749 val="$undef"; set i_varargs; eval $setvar
14750 ;;
14751*)
14752 set i_varhdr
14753 eval $setvar
14754 case "$i_varhdr" in
14755 stdarg.h)
14756 val="$define"; set i_stdarg; eval $setvar
14757 val="$undef"; set i_varargs; eval $setvar
14758 ;;
14759 varargs.h)
14760 val="$undef"; set i_stdarg; eval $setvar
14761 val="$define"; set i_varargs; eval $setvar
14762 ;;
14763 esac
14764 echo "We'll include <$i_varhdr> to get va_dcl definition." >&4;;
14765esac
14766$rm -f varargs*
14767
14768: see if stddef is available
14769set stddef.h i_stddef
14770eval $inhdr
14771
923fc586
JH
14772: see if this is a sunmath.h system
14773set sunmath.h i_sunmath
14774eval $inhdr
14775
5f80c64f
JH
14776: see if sys/access.h is available
14777set sys/access.h i_sysaccess
14778eval $inhdr
14779
14780: see if ioctl defs are in sgtty, termio, sys/filio or sys/ioctl
14781set sys/filio.h i_sysfilio
14782eval $inhdr
14783echo " "
14784if $test `./findhdr sys/ioctl.h`; then
14785 val="$define"
14786 echo '<sys/ioctl.h> found.' >&4
14787else
14788 val="$undef"
14789 if $test $i_sysfilio = "$define"; then
14790 echo '<sys/ioctl.h> NOT found.' >&4
14791 else
14792 $test $i_sgtty = "$define" && xxx="sgtty.h"
14793 $test $i_termio = "$define" && xxx="termio.h"
14794 $test $i_termios = "$define" && xxx="termios.h"
14795echo "No <sys/ioctl.h> found, assuming ioctl args are defined in <$xxx>." >&4
14796 fi
14797fi
14798set i_sysioctl
14799eval $setvar
14800
ca52efda
JH
14801
14802: see if this is a syslog.h system
14803set syslog.h i_syslog
14804eval $inhdr
14805
bf0c440f
JH
14806
14807: see if this is a sys/mode.h system
14808set sys/mode.h i_sysmode
14809eval $inhdr
14810
5f80c64f
JH
14811: see if sys/resource.h has to be included
14812set sys/resource.h i_sysresrc
14813eval $inhdr
14814
14815: see if sys/security.h is available
14816set sys/security.h i_syssecrt
14817eval $inhdr
14818
104d25b7
JH
14819: see if this is a sys/statvfs.h system
14820set sys/statvfs.h i_sysstatvfs
14821eval $inhdr
14822
b7b35fc2
JH
14823: see if this is a sys/uio.h system
14824set sys/uio.h i_sysuio
14825eval $inhdr
14826
5f80c64f
JH
14827: see if this is a sys/un.h system
14828set sys/un.h i_sysun
14829eval $inhdr
14830
d4935d7f
JH
14831
14832: see if this is a sys/utsname.h system
14833set sys/utsname.h i_sysutsname
14834eval $inhdr
14835
5f80c64f
JH
14836: see if this is a syswait system
14837set sys/wait.h i_syswait
14838eval $inhdr
14839
0545a864
JH
14840: see if this is a ustat.h system
14841set ustat.h i_ustat
14842eval $inhdr
14843
5f80c64f
JH
14844: see if this is an utime system
14845set utime.h i_utime
14846eval $inhdr
14847
14848: see if this is a values.h system
14849set values.h i_values
14850eval $inhdr
14851
14852: see if this is a vfork system
14853case "$d_vfork" in
14854"$define")
14855 set vfork.h i_vfork
14856 eval $inhdr
14857 ;;
14858*)
14859 i_vfork="$undef"
14860 ;;
14861esac
14862
14863: see if gdbm.h is available
14864set gdbm.h t_gdbm
14865eval $inhdr
14866case "$t_gdbm" in
14867$define)
14868 : see if gdbm_open exists
14869 set gdbm_open d_gdbm_open
14870 eval $inlibc
14871 case "$d_gdbm_open" in
14872 $undef)
14873 t_gdbm="$undef"
14874 echo "We won't be including <gdbm.h>"
14875 ;;
14876 esac
14877 ;;
14878esac
14879val="$t_gdbm"
14880set i_gdbm
14881eval $setvar
14882
14883echo " "
14884echo "Looking for extensions..." >&4
5f80c64f
JH
14885: If we are using the old config.sh, known_extensions may contain
14886: old or inaccurate or duplicate values.
14887known_extensions=''
14888nonxs_extensions=''
14889: We do not use find because it might not be available.
14890: We do not just use MANIFEST because the user may have dropped
14891: some additional extensions into the source tree and expect them
14892: to be built.
7e791ca9
NK
14893
14894: Function to recursively find available extensions, ignoring DynaLoader
14895: NOTE: recursion limit of 10 to prevent runaway in case of symlink madness
14896find_extensions='
14897 for xxx in *; do
14898 case "$xxx" in
14899 DynaLoader|dynaload) ;;
14900 *)
14901 if $test -f $xxx/$xxx.xs; then
14902 known_extensions="$known_extensions $1$xxx";
14903 elif $test -f $xxx/Makefile.PL; then
14904 nonxs_extensions="$nonxs_extensions $1$xxx";
14905 else
14906 if $test -d $xxx -a $# -lt 10; then
14907 set $1$xxx/ $*;
14908 cd $xxx;
14909 eval $find_extensions;
14910 cd ..;
14911 shift;
9f50e519 14912 fi;
7e791ca9
NK
14913 fi
14914 ;;
9f50e519 14915 esac;
7e791ca9
NK
14916 done'
14917tdir=`pwd`
14918cd $rsrc/ext
a3635516 14919set X
efdb23e1 14920shift
7e791ca9 14921eval $find_extensions
5f80c64f
JH
14922set X $nonxs_extensions
14923shift
14924nonxs_extensions="$*"
14925set X $known_extensions
14926shift
14927known_extensions="$*"
14928cd $tdir
14929
14930: Now see which are supported on this system.
14931avail_ext=''
14932for xxx in $known_extensions ; do
14933 case "$xxx" in
14934 DB_File|db_file)
14935 case "$i_db" in
14936 $define) avail_ext="$avail_ext $xxx" ;;
14937 esac
14938 ;;
14939 GDBM_File|gdbm_fil)
14940 case "$i_gdbm" in
14941 $define) avail_ext="$avail_ext $xxx" ;;
14942 esac
14943 ;;
14944 NDBM_File|ndbm_fil)
14945 case "$i_ndbm" in
f7dd4e7f 14946 $define)
10cc9d2a 14947 case "$osname-$use64bitint" in
f7dd4e7f
JH
14948 hpux-define)
14949 case "$libs" in
14950 *-lndbm*) avail_ext="$avail_ext $xxx" ;;
14951 esac
14952 ;;
14953 *) avail_ext="$avail_ext $xxx" ;;
14954 esac
14955 ;;
5f80c64f
JH
14956 esac
14957 ;;
14958 ODBM_File|odbm_fil)
14959 case "${i_dbm}${i_rpcsvcdbm}" in
f7dd4e7f 14960 *"${define}"*)
10cc9d2a 14961 case "$osname-$use64bitint" in
f7dd4e7f
JH
14962 hpux-define)
14963 case "$libs" in
14964 *-ldbm*) avail_ext="$avail_ext $xxx" ;;
14965 esac
14966 ;;
14967 *) avail_ext="$avail_ext $xxx" ;;
14968 esac
14969 ;;
5f80c64f
JH
14970 esac
14971 ;;
14972 POSIX|posix)
14973 case "$useposix" in
14974 true|define|y) avail_ext="$avail_ext $xxx" ;;
14975 esac
14976 ;;
14977 Opcode|opcode)
14978 case "$useopcode" in
14979 true|define|y) avail_ext="$avail_ext $xxx" ;;
14980 esac
14981 ;;
14982 Socket|socket)
14983 case "$d_socket" in
14984 true|$define|y) avail_ext="$avail_ext $xxx" ;;
14985 esac
14986 ;;
14987 Thread|thread)
14988 case "$usethreads" in
14989 true|$define|y) avail_ext="$avail_ext $xxx" ;;
14990 esac
14991 ;;
14992 IPC/SysV|ipc/sysv)
14993 : XXX Do we need a useipcsysv variable here
14994 case "${d_msg}${d_sem}${d_shm}" in
14995 *"${define}"*) avail_ext="$avail_ext $xxx" ;;
14996 esac
14997 ;;
14998 *) avail_ext="$avail_ext $xxx"
14999 ;;
15000 esac
15001done
15002
15003set X $avail_ext
15004shift
15005avail_ext="$*"
15006
15007: Now see which nonxs extensions are supported on this system.
15008: For now assume all are.
15009nonxs_ext=''
15010for xxx in $nonxs_extensions ; do
15011 case "$xxx" in
15012 *) nonxs_ext="$nonxs_ext $xxx"
15013 ;;
15014 esac
15015done
15016
15017set X $nonxs_ext
15018shift
15019nonxs_ext="$*"
15020
15021case $usedl in
15022$define)
15023 $cat <<EOM
15024A number of extensions are supplied with $package. You may choose to
15025compile these extensions for dynamic loading (the default), compile
15026them into the $package executable (static loading), or not include
15027them at all. Answer "none" to include no extensions.
15028Note that DynaLoader is always built and need not be mentioned here.
15029
15030EOM
15031 case "$dynamic_ext" in
15032 '') dflt="$avail_ext" ;;
15033 *) dflt="$dynamic_ext"
15034 # Perhaps we are reusing an old out-of-date config.sh.
15035 case "$hint" in
15036 previous)
15037 if test X"$dynamic_ext" != X"$avail_ext"; then
15038 $cat <<EOM
15039NOTICE: Your previous config.sh list may be incorrect.
15040The extensions now available to you are
15041 ${avail_ext}
15042but the default list from your previous config.sh is
15043 ${dynamic_ext}
15044
15045EOM
15046 fi
15047 ;;
15048 esac
15049 ;;
15050 esac
15051 case "$dflt" in
15052 '') dflt=none;;
15053 esac
15054 rp="What extensions do you wish to load dynamically?"
15055 . ./myread
15056 case "$ans" in
15057 none) dynamic_ext=' ' ;;
15058 *) dynamic_ext="$ans" ;;
15059 esac
15060
15061 case "$static_ext" in
15062 '')
15063 : Exclude those already listed in dynamic linking
15064 dflt=''
15065 for xxx in $avail_ext; do
15066 case " $dynamic_ext " in
15067 *" $xxx "*) ;;
15068 *) dflt="$dflt $xxx" ;;
15069 esac
15070 done
15071 set X $dflt
15072 shift
15073 dflt="$*"
15074 ;;
15075 *) dflt="$static_ext"
15076 ;;
15077 esac
15078
15079 case "$dflt" in
15080 '') dflt=none;;
15081 esac
15082 rp="What extensions do you wish to load statically?"
15083 . ./myread
15084 case "$ans" in
15085 none) static_ext=' ' ;;
15086 *) static_ext="$ans" ;;
15087 esac
15088 ;;
15089*)
15090 $cat <<EOM
15091A number of extensions are supplied with $package. Answer "none"
15092to include no extensions.
15093Note that DynaLoader is always built and need not be mentioned here.
15094
15095EOM
15096 case "$static_ext" in
15097 '') dflt="$avail_ext" ;;
15098 *) dflt="$static_ext"
15099 # Perhaps we are reusing an old out-of-date config.sh.
15100 case "$hint" in
15101 previous)
15102 if test X"$static_ext" != X"$avail_ext"; then
15103 $cat <<EOM
15104NOTICE: Your previous config.sh list may be incorrect.
15105The extensions now available to you are
15106 ${avail_ext}
15107but the default list from your previous config.sh is
15108 ${static_ext}
15109
15110EOM
15111 fi
15112 ;;
15113 esac
15114 ;;
15115 esac
15116 : Exclude those that are not xs extensions
15117 case "$dflt" in
15118 '') dflt=none;;
15119 esac
15120 rp="What extensions do you wish to include?"
15121 . ./myread
15122 case "$ans" in
15123 none) static_ext=' ' ;;
15124 *) static_ext="$ans" ;;
15125 esac
15126 ;;
15127esac
15128
15129set X $dynamic_ext $static_ext $nonxs_ext
15130shift
15131extensions="$*"
15132
15133: Remove build directory name from cppstdin so it can be used from
15134: either the present location or the final installed location.
15135echo " "
15136: Get out of the UU directory to get correct path name.
15137cd ..
15138case "$cppstdin" in
15139`pwd`/cppstdin)
15140 echo "Stripping down cppstdin path name"
15141 cppstdin=cppstdin
15142 ;;
15143esac
15144cd UU
15145
15146: end of configuration questions
15147echo " "
15148echo "End of configuration questions."
15149echo " "
15150
15151: back to where it started
15152if test -d ../UU; then
15153 cd ..
15154fi
15155
15156: configuration may be patched via a 'config.over' file
15157if $test -f config.over; then
15158 echo " "
15159 dflt=y
15160 rp='I see a config.over file. Do you wish to load it?'
15161 . UU/myread
15162 case "$ans" in
15163 n*) echo "OK, I'll ignore it.";;
15164 *) . ./config.over
15165 echo "Configuration override changes have been loaded."
15166 ;;
15167 esac
15168fi
15169
15170: in case they want portability, strip down executable paths
15171case "$d_portable" in
15172"$define")
15173 echo " "
15174 echo "Stripping down executable paths..." >&4
15175 for file in $loclist $trylist; do
534ac15a
JH
15176 eval temp=\$$file
15177 eval $file=`basename $temp`
5f80c64f
JH
15178 done
15179 ;;
15180esac
15181
15182: create config.sh file
15183echo " "
15184echo "Creating config.sh..." >&4
15185$spitshell <<EOT >config.sh
15186$startsh
15187#
15188# This file was produced by running the Configure script. It holds all the
15189# definitions figured out by Configure. Should you modify one of these values,
15190# do not forget to propagate your changes by running "Configure -der". You may
15191# instead choose to run each of the .SH files by yourself, or "Configure -S".
15192#
15193
15194# Package name : $package
15195# Source directory : $src
15196# Configuration time: $cf_time
15197# Configured by : $cf_by
15198# Target system : $myuname
15199
15200Author='$Author'
15201Date='$Date'
15202Header='$Header'
15203Id='$Id'
15204Locker='$Locker'
15205Log='$Log'
15206Mcc='$Mcc'
15207RCSfile='$RCSfile'
15208Revision='$Revision'
15209Source='$Source'
15210State='$State'
15211_a='$_a'
15212_exe='$_exe'
15213_o='$_o'
15214afs='$afs'
15215alignbytes='$alignbytes'
15216ansi2knr='$ansi2knr'
15217aphostname='$aphostname'
ff935051
JH
15218api_revision='$api_revision'
15219api_subversion='$api_subversion'
15220api_version='$api_version'
15221api_versionstring='$api_versionstring'
5f80c64f
JH
15222ar='$ar'
15223archlib='$archlib'
15224archlibexp='$archlibexp'
15225archname64='$archname64'
15226archname='$archname'
15227archobjs='$archobjs'
15228awk='$awk'
15229baserev='$baserev'
15230bash='$bash'
15231bin='$bin'
d71b2b6b 15232bincompat5005='$bincompat5005'
5f80c64f
JH
15233binexp='$binexp'
15234bison='$bison'
15235byacc='$byacc'
15236byteorder='$byteorder'
15237c='$c'
15238castflags='$castflags'
15239cat='$cat'
15240cc='$cc'
15241cccdlflags='$cccdlflags'
15242ccdlflags='$ccdlflags'
15243ccflags='$ccflags'
ff49bff8 15244ccsymbols='$ccsymbols'
5f80c64f
JH
15245cf_by='$cf_by'
15246cf_email='$cf_email'
15247cf_time='$cf_time'
8175356b 15248charsize='$charsize'
5f80c64f
JH
15249chgrp='$chgrp'
15250chmod='$chmod'
15251chown='$chown'
15252clocktype='$clocktype'
15253comm='$comm'
15254compress='$compress'
15255contains='$contains'
15256cp='$cp'
15257cpio='$cpio'
15258cpp='$cpp'
15259cpp_stuff='$cpp_stuff'
ff49bff8 15260cppccsymbols='$cppccsymbols'
5f80c64f
JH
15261cppflags='$cppflags'
15262cpplast='$cpplast'
15263cppminus='$cppminus'
15264cpprun='$cpprun'
15265cppstdin='$cppstdin'
ff49bff8 15266cppsymbols='$cppsymbols'
68c15b6f 15267crosscompile='$crosscompile'
5f80c64f
JH
15268cryptlib='$cryptlib'
15269csh='$csh'
15270d_Gconvert='$d_Gconvert'
cf2093f6
JH
15271d_PRIEldbl='$d_PRIEldbl'
15272d_PRIFldbl='$d_PRIFldbl'
15273d_PRIGldbl='$d_PRIGldbl'
15274d_PRIX64='$d_PRIX64'
15275d_PRId64='$d_PRId64'
15276d_PRIeldbl='$d_PRIeldbl'
15277d_PRIfldbl='$d_PRIfldbl'
15278d_PRIgldbl='$d_PRIgldbl'
15279d_PRIi64='$d_PRIi64'
15280d_PRIo64='$d_PRIo64'
15281d_PRIu64='$d_PRIu64'
15282d_PRIx64='$d_PRIx64'
5f80c64f
JH
15283d_access='$d_access'
15284d_accessx='$d_accessx'
15285d_alarm='$d_alarm'
15286d_archlib='$d_archlib'
cf2093f6
JH
15287d_atolf='$d_atolf'
15288d_atoll='$d_atoll'
5f80c64f
JH
15289d_attribut='$d_attribut'
15290d_bcmp='$d_bcmp'
15291d_bcopy='$d_bcopy'
d71b2b6b 15292d_bincompat5005='$d_bincompat5005'
5f80c64f
JH
15293d_bsd='$d_bsd'
15294d_bsdgetpgrp='$d_bsdgetpgrp'
15295d_bsdsetpgrp='$d_bsdsetpgrp'
15296d_bzero='$d_bzero'
15297d_casti32='$d_casti32'
15298d_castneg='$d_castneg'
15299d_charvspr='$d_charvspr'
15300d_chown='$d_chown'
15301d_chroot='$d_chroot'
15302d_chsize='$d_chsize'
15303d_closedir='$d_closedir'
15304d_const='$d_const'
15305d_crypt='$d_crypt'
15306d_csh='$d_csh'
15307d_cuserid='$d_cuserid'
15308d_dbl_dig='$d_dbl_dig'
5f80c64f 15309d_difftime='$d_difftime'
5f80c64f
JH
15310d_dirnamlen='$d_dirnamlen'
15311d_dlerror='$d_dlerror'
15312d_dlopen='$d_dlopen'
15313d_dlsymun='$d_dlsymun'
15314d_dosuid='$d_dosuid'
15315d_drand48proto='$d_drand48proto'
15316d_dup2='$d_dup2'
15317d_eaccess='$d_eaccess'
15318d_endgrent='$d_endgrent'
15319d_endhent='$d_endhent'
15320d_endnent='$d_endnent'
15321d_endpent='$d_endpent'
15322d_endpwent='$d_endpwent'
15323d_endsent='$d_endsent'
15324d_eofnblk='$d_eofnblk'
15325d_eunice='$d_eunice'
15326d_fchmod='$d_fchmod'
15327d_fchown='$d_fchown'
15328d_fcntl='$d_fcntl'
15329d_fd_macros='$d_fd_macros'
15330d_fd_set='$d_fd_set'
15331d_fds_bits='$d_fds_bits'
5f80c64f 15332d_fgetpos='$d_fgetpos'
5f80c64f 15333d_flexfnam='$d_flexfnam'
5f80c64f 15334d_flock='$d_flock'
5f80c64f
JH
15335d_fork='$d_fork'
15336d_fpathconf='$d_fpathconf'
d9b3e12d 15337d_fpos64_t='$d_fpos64_t'
a3540c92 15338d_frexpl='$d_frexpl'
0545a864 15339d_fs_data_s='$d_fs_data_s'
5f80c64f 15340d_fseeko='$d_fseeko'
5f80c64f 15341d_fsetpos='$d_fsetpos'
104d25b7
JH
15342d_fstatfs='$d_fstatfs'
15343d_fstatvfs='$d_fstatvfs'
5f80c64f
JH
15344d_ftello='$d_ftello'
15345d_ftime='$d_ftime'
49dabb45 15346d_getcwd='$d_getcwd'
3813c136 15347d_getespwnam='$d_getespwnam'
c890dc6c 15348d_getfsstat='$d_getfsstat'
5f80c64f
JH
15349d_getgrent='$d_getgrent'
15350d_getgrps='$d_getgrps'
15351d_gethbyaddr='$d_gethbyaddr'
15352d_gethbyname='$d_gethbyname'
15353d_gethent='$d_gethent'
15354d_gethname='$d_gethname'
15355d_gethostprotos='$d_gethostprotos'
15356d_getlogin='$d_getlogin'
ad27e871 15357d_getmnt='$d_getmnt'
ccc7f9b3 15358d_getmntent='$d_getmntent'
5f80c64f
JH
15359d_getnbyaddr='$d_getnbyaddr'
15360d_getnbyname='$d_getnbyname'
15361d_getnent='$d_getnent'
15362d_getnetprotos='$d_getnetprotos'
15363d_getpbyname='$d_getpbyname'
15364d_getpbynumber='$d_getpbynumber'
15365d_getpent='$d_getpent'
15366d_getpgid='$d_getpgid'
15367d_getpgrp2='$d_getpgrp2'
15368d_getpgrp='$d_getpgrp'
15369d_getppid='$d_getppid'
15370d_getprior='$d_getprior'
15371d_getprotoprotos='$d_getprotoprotos'
3813c136 15372d_getprpwnam='$d_getprpwnam'
5f80c64f
JH
15373d_getpwent='$d_getpwent'
15374d_getsbyname='$d_getsbyname'
15375d_getsbyport='$d_getsbyport'
15376d_getsent='$d_getsent'
15377d_getservprotos='$d_getservprotos'
f1066039 15378d_getspnam='$d_getspnam'
5f80c64f
JH
15379d_gettimeod='$d_gettimeod'
15380d_gnulibc='$d_gnulibc'
15381d_grpasswd='$d_grpasswd'
ccc7f9b3 15382d_hasmntopt='$d_hasmntopt'
5f80c64f 15383d_htonl='$d_htonl'
43999f95 15384d_iconv='$d_iconv'
5f80c64f
JH
15385d_index='$d_index'
15386d_inetaton='$d_inetaton'
13b3f787 15387d_int64_t='$d_int64_t'
5f80c64f 15388d_isascii='$d_isascii'
a3540c92
JH
15389d_isnan='$d_isnan'
15390d_isnanl='$d_isnanl'
5f80c64f
JH
15391d_killpg='$d_killpg'
15392d_lchown='$d_lchown'
2d4389e4 15393d_ldbl_dig='$d_ldbl_dig'
5f80c64f
JH
15394d_link='$d_link'
15395d_locconv='$d_locconv'
5f80c64f
JH
15396d_lockf='$d_lockf'
15397d_longdbl='$d_longdbl'
15398d_longlong='$d_longlong'
49c10eea 15399d_lseekproto='$d_lseekproto'
5f80c64f 15400d_lstat='$d_lstat'
1e8c3fde 15401d_madvise='$d_madvise'
5f80c64f
JH
15402d_mblen='$d_mblen'
15403d_mbstowcs='$d_mbstowcs'
15404d_mbtowc='$d_mbtowc'
0f27ced1 15405d_memchr='$d_memchr'
5f80c64f
JH
15406d_memcmp='$d_memcmp'
15407d_memcpy='$d_memcpy'
15408d_memmove='$d_memmove'
15409d_memset='$d_memset'
15410d_mkdir='$d_mkdir'
fe749a9f 15411d_mkdtemp='$d_mkdtemp'
5f80c64f 15412d_mkfifo='$d_mkfifo'
fe749a9f
JH
15413d_mkstemp='$d_mkstemp'
15414d_mkstemps='$d_mkstemps'
5f80c64f 15415d_mktime='$d_mktime'
fe749a9f 15416d_mmap='$d_mmap'
a3540c92 15417d_modfl='$d_modfl'
fe749a9f 15418d_mprotect='$d_mprotect'
5f80c64f 15419d_msg='$d_msg'
de4597cb
JH
15420d_msg_ctrunc='$d_msg_ctrunc'
15421d_msg_dontroute='$d_msg_dontroute'
15422d_msg_oob='$d_msg_oob'
15423d_msg_peek='$d_msg_peek'
15424d_msg_proxy='$d_msg_proxy'
5f80c64f
JH
15425d_msgctl='$d_msgctl'
15426d_msgget='$d_msgget'
15427d_msgrcv='$d_msgrcv'
15428d_msgsnd='$d_msgsnd'
fe749a9f
JH
15429d_msync='$d_msync'
15430d_munmap='$d_munmap'
5f80c64f 15431d_mymalloc='$d_mymalloc'
5f80c64f 15432d_nice='$d_nice'
78691af5 15433d_nv_preserves_uv='$d_nv_preserves_uv'
d6c14000 15434d_nv_preserves_uv_bits='$d_nv_preserves_uv_bits'
2000072c 15435d_off64_t='$d_off64_t'
ef4af2be 15436d_old_pthread_create_joinable='$d_old_pthread_create_joinable'
5f80c64f
JH
15437d_oldpthreads='$d_oldpthreads'
15438d_oldsock='$d_oldsock'
15439d_open3='$d_open3'
5f80c64f
JH
15440d_pathconf='$d_pathconf'
15441d_pause='$d_pause'
3b777bb4 15442d_perl_otherlibdirs='$d_perl_otherlibdirs'
5f80c64f
JH
15443d_phostname='$d_phostname'
15444d_pipe='$d_pipe'
15445d_poll='$d_poll'
15446d_portable='$d_portable'
15447d_pthread_yield='$d_pthread_yield'
5f80c64f
JH
15448d_pwage='$d_pwage'
15449d_pwchange='$d_pwchange'
15450d_pwclass='$d_pwclass'
15451d_pwcomment='$d_pwcomment'
15452d_pwexpire='$d_pwexpire'
15453d_pwgecos='$d_pwgecos'
15454d_pwpasswd='$d_pwpasswd'
15455d_pwquota='$d_pwquota'
bbe6c963 15456d_qgcvt='$d_qgcvt'
de1c2614 15457d_quad='$d_quad'
5f80c64f
JH
15458d_readdir='$d_readdir'
15459d_readlink='$d_readlink'
15460d_rename='$d_rename'
15461d_rewinddir='$d_rewinddir'
15462d_rmdir='$d_rmdir'
15463d_safebcpy='$d_safebcpy'
15464d_safemcpy='$d_safemcpy'
15465d_sanemcmp='$d_sanemcmp'
15466d_sched_yield='$d_sched_yield'
de4597cb 15467d_scm_rights='$d_scm_rights'
5f80c64f
JH
15468d_seekdir='$d_seekdir'
15469d_select='$d_select'
15470d_sem='$d_sem'
15471d_semctl='$d_semctl'
15472d_semctl_semid_ds='$d_semctl_semid_ds'
15473d_semctl_semun='$d_semctl_semun'
15474d_semget='$d_semget'
15475d_semop='$d_semop'
15476d_setegid='$d_setegid'
15477d_seteuid='$d_seteuid'
15478d_setgrent='$d_setgrent'
15479d_setgrps='$d_setgrps'
15480d_sethent='$d_sethent'
15481d_setlinebuf='$d_setlinebuf'
15482d_setlocale='$d_setlocale'
15483d_setnent='$d_setnent'
15484d_setpent='$d_setpent'
15485d_setpgid='$d_setpgid'
15486d_setpgrp2='$d_setpgrp2'
15487d_setpgrp='$d_setpgrp'
15488d_setprior='$d_setprior'
15489d_setpwent='$d_setpwent'
15490d_setregid='$d_setregid'
15491d_setresgid='$d_setresgid'
15492d_setresuid='$d_setresuid'
15493d_setreuid='$d_setreuid'
15494d_setrgid='$d_setrgid'
15495d_setruid='$d_setruid'
15496d_setsent='$d_setsent'
15497d_setsid='$d_setsid'
15498d_setvbuf='$d_setvbuf'
15499d_sfio='$d_sfio'
15500d_shm='$d_shm'
15501d_shmat='$d_shmat'
15502d_shmatprototype='$d_shmatprototype'
15503d_shmctl='$d_shmctl'
15504d_shmdt='$d_shmdt'
15505d_shmget='$d_shmget'
15506d_sigaction='$d_sigaction'
15507d_sigsetjmp='$d_sigsetjmp'
15508d_socket='$d_socket'
13b3f787 15509d_socklen_t='$d_socklen_t'
5f80c64f 15510d_sockpair='$d_sockpair'
68d4903c 15511d_sqrtl='$d_sqrtl'
5f80c64f 15512d_statblks='$d_statblks'
0545a864
JH
15513d_statfs_f_flags='$d_statfs_f_flags'
15514d_statfs_s='$d_statfs_s'
104d25b7 15515d_statvfs='$d_statvfs'
5f80c64f
JH
15516d_stdio_cnt_lval='$d_stdio_cnt_lval'
15517d_stdio_ptr_lval='$d_stdio_ptr_lval'
ed39a0f2 15518d_stdio_stream_array='$d_stdio_stream_array'
5f80c64f
JH
15519d_stdiobase='$d_stdiobase'
15520d_stdstdio='$d_stdstdio'
5f80c64f
JH
15521d_strchr='$d_strchr'
15522d_strcoll='$d_strcoll'
15523d_strctcpy='$d_strctcpy'
15524d_strerrm='$d_strerrm'
15525d_strerror='$d_strerror'
15526d_strtod='$d_strtod'
15527d_strtol='$d_strtol'
ff935051 15528d_strtold='$d_strtold'
76d49b1c 15529d_strtoll='$d_strtoll'
5f80c64f 15530d_strtoul='$d_strtoul'
cf2093f6 15531d_strtoull='$d_strtoull'
ff935051 15532d_strtouq='$d_strtouq'
5f80c64f
JH
15533d_strxfrm='$d_strxfrm'
15534d_suidsafe='$d_suidsafe'
15535d_symlink='$d_symlink'
15536d_syscall='$d_syscall'
15537d_sysconf='$d_sysconf'
15538d_sysernlst='$d_sysernlst'
15539d_syserrlst='$d_syserrlst'
15540d_system='$d_system'
15541d_tcgetpgrp='$d_tcgetpgrp'
15542d_tcsetpgrp='$d_tcsetpgrp'
5f80c64f 15543d_telldir='$d_telldir'
cb86ce0e 15544d_telldirproto='$d_telldirproto'
5f80c64f
JH
15545d_time='$d_time'
15546d_times='$d_times'
5f80c64f
JH
15547d_truncate='$d_truncate'
15548d_tzname='$d_tzname'
15549d_umask='$d_umask'
15550d_uname='$d_uname'
15551d_union_semun='$d_union_semun'
0545a864 15552d_ustat='$d_ustat'
526fdc24 15553d_vendorarch='$d_vendorarch'
717c4fcc 15554d_vendorbin='$d_vendorbin'
a3635516 15555d_vendorlib='$d_vendorlib'
5f80c64f
JH
15556d_vfork='$d_vfork'
15557d_void_closedir='$d_void_closedir'
15558d_voidsig='$d_voidsig'
15559d_voidtty='$d_voidtty'
15560d_volatile='$d_volatile'
15561d_vprintf='$d_vprintf'
15562d_wait4='$d_wait4'
15563d_waitpid='$d_waitpid'
15564d_wcstombs='$d_wcstombs'
15565d_wctomb='$d_wctomb'
15566d_xenix='$d_xenix'
15567date='$date'
15568db_hashtype='$db_hashtype'
15569db_prefixtype='$db_prefixtype'
15570defvoidused='$defvoidused'
15571direntrytype='$direntrytype'
15572dlext='$dlext'
15573dlsrc='$dlsrc'
15574doublesize='$doublesize'
15575drand01='$drand01'
15576dynamic_ext='$dynamic_ext'
15577eagain='$eagain'
15578ebcdic='$ebcdic'
15579echo='$echo'
15580egrep='$egrep'
15581emacs='$emacs'
15582eunicefix='$eunicefix'
15583exe_ext='$exe_ext'
15584expr='$expr'
15585extensions='$extensions'
66fe083f 15586fflushNULL='$fflushNULL'
767df6a1 15587fflushall='$fflushall'
5f80c64f
JH
15588find='$find'
15589firstmakefile='$firstmakefile'
15590flex='$flex'
8175356b 15591fpossize='$fpossize'
5f80c64f
JH
15592fpostype='$fpostype'
15593freetype='$freetype'
ccc7f9b3 15594full_ar='$full_ar'
5f80c64f
JH
15595full_csh='$full_csh'
15596full_sed='$full_sed'
15597gccversion='$gccversion'
a22e52b9 15598gidformat='$gidformat'
785fb66b
JH
15599gidsign='$gidsign'
15600gidsize='$gidsize'
5f80c64f
JH
15601gidtype='$gidtype'
15602glibpth='$glibpth'
15603grep='$grep'
15604groupcat='$groupcat'
15605groupstype='$groupstype'
15606gzip='$gzip'
15607h_fcntl='$h_fcntl'
15608h_sysfile='$h_sysfile'
15609hint='$hint'
15610hostcat='$hostcat'
15611huge='$huge'
8175356b
JH
15612i16size='$i16size'
15613i16type='$i16type'
15614i32size='$i32size'
15615i32type='$i32type'
15616i64size='$i64size'
15617i64type='$i64type'
15618i8size='$i8size'
15619i8type='$i8type'
5f80c64f
JH
15620i_arpainet='$i_arpainet'
15621i_bsdioctl='$i_bsdioctl'
15622i_db='$i_db'
15623i_dbm='$i_dbm'
15624i_dirent='$i_dirent'
15625i_dld='$i_dld'
15626i_dlfcn='$i_dlfcn'
15627i_fcntl='$i_fcntl'
15628i_float='$i_float'
15629i_gdbm='$i_gdbm'
15630i_grp='$i_grp'
43999f95 15631i_iconv='$i_iconv'
792d8dab 15632i_ieeefp='$i_ieeefp'
5f80c64f
JH
15633i_inttypes='$i_inttypes'
15634i_limits='$i_limits'
15635i_locale='$i_locale'
7f3d1cf1 15636i_machcthr='$i_machcthr'
5f80c64f
JH
15637i_malloc='$i_malloc'
15638i_math='$i_math'
15639i_memory='$i_memory'
e7fb4fcc 15640i_mntent='$i_mntent'
5f80c64f
JH
15641i_ndbm='$i_ndbm'
15642i_netdb='$i_netdb'
15643i_neterrno='$i_neterrno'
9cc6feab 15644i_netinettcp='$i_netinettcp'
5f80c64f 15645i_niin='$i_niin'
5b34fd99 15646i_poll='$i_poll'
3813c136 15647i_prot='$i_prot'
c4747d3e 15648i_pthread='$i_pthread'
5f80c64f
JH
15649i_pwd='$i_pwd'
15650i_rpcsvcdbm='$i_rpcsvcdbm'
15651i_sfio='$i_sfio'
15652i_sgtty='$i_sgtty'
f1066039 15653i_shadow='$i_shadow'
86959918 15654i_socks='$i_socks'
5f80c64f
JH
15655i_stdarg='$i_stdarg'
15656i_stddef='$i_stddef'
15657i_stdlib='$i_stdlib'
15658i_string='$i_string'
923fc586 15659i_sunmath='$i_sunmath'
5f80c64f
JH
15660i_sysaccess='$i_sysaccess'
15661i_sysdir='$i_sysdir'
15662i_sysfile='$i_sysfile'
15663i_sysfilio='$i_sysfilio'
15664i_sysin='$i_sysin'
15665i_sysioctl='$i_sysioctl'
ca52efda 15666i_syslog='$i_syslog'
fe749a9f 15667i_sysmman='$i_sysmman'
bf0c440f 15668i_sysmode='$i_sysmode'
104d25b7 15669i_sysmount='$i_sysmount'
5f80c64f
JH
15670i_sysndir='$i_sysndir'
15671i_sysparam='$i_sysparam'
15672i_sysresrc='$i_sysresrc'
15673i_syssecrt='$i_syssecrt'
15674i_sysselct='$i_sysselct'
15675i_syssockio='$i_syssockio'
15676i_sysstat='$i_sysstat'
0545a864 15677i_sysstatfs='$i_sysstatfs'
104d25b7 15678i_sysstatvfs='$i_sysstatvfs'
5f80c64f
JH
15679i_systime='$i_systime'
15680i_systimek='$i_systimek'
15681i_systimes='$i_systimes'
15682i_systypes='$i_systypes'
de4597cb 15683i_sysuio='$i_sysuio'
5f80c64f 15684i_sysun='$i_sysun'
d4935d7f 15685i_sysutsname='$i_sysutsname'
0545a864 15686i_sysvfs='$i_sysvfs'
5f80c64f
JH
15687i_syswait='$i_syswait'
15688i_termio='$i_termio'
15689i_termios='$i_termios'
15690i_time='$i_time'
15691i_unistd='$i_unistd'
0545a864 15692i_ustat='$i_ustat'
5f80c64f
JH
15693i_utime='$i_utime'
15694i_values='$i_values'
15695i_varargs='$i_varargs'
15696i_varhdr='$i_varhdr'
15697i_vfork='$i_vfork'
15698ignore_versioned_solibs='$ignore_versioned_solibs'
ff935051 15699inc_version_list='$inc_version_list'
3a096bf3 15700inc_version_list_init='$inc_version_list_init'
5f80c64f
JH
15701incpath='$incpath'
15702inews='$inews'
15703installarchlib='$installarchlib'
15704installbin='$installbin'
15705installman1dir='$installman1dir'
15706installman3dir='$installman3dir'
dd4e71fd
JH
15707installprefix='$installprefix'
15708installprefixexp='$installprefixexp'
5f80c64f
JH
15709installprivlib='$installprivlib'
15710installscript='$installscript'
15711installsitearch='$installsitearch'
717c4fcc 15712installsitebin='$installsitebin'
5f80c64f 15713installsitelib='$installsitelib'
dd4e71fd 15714installstyle='$installstyle'
104d25b7 15715installusrbinperl='$installusrbinperl'
526fdc24 15716installvendorarch='$installvendorarch'
717c4fcc 15717installvendorbin='$installvendorbin'
a3635516 15718installvendorlib='$installvendorlib'
5f80c64f 15719intsize='$intsize'
8175356b
JH
15720ivdformat='$ivdformat'
15721ivsize='$ivsize'
15722ivtype='$ivtype'
5f80c64f
JH
15723known_extensions='$known_extensions'
15724ksh='$ksh'
15725large='$large'
15726ld='$ld'
15727lddlflags='$lddlflags'
15728ldflags='$ldflags'
5cf1d1f1 15729ldlibpthname='$ldlibpthname'
5f80c64f
JH
15730less='$less'
15731lib_ext='$lib_ext'
15732libc='$libc'
15733libperl='$libperl'
15734libpth='$libpth'
15735libs='$libs'
43999f95
JH
15736libsdirs='$libsdirs'
15737libsfiles='$libsfiles'
15738libsfound='$libsfound'
13b3f787 15739libspath='$libspath'
5f80c64f
JH
15740libswanted='$libswanted'
15741line='$line'
15742lint='$lint'
15743lkflags='$lkflags'
15744ln='$ln'
15745lns='$lns'
15746locincpth='$locincpth'
15747loclibpth='$loclibpth'
15748longdblsize='$longdblsize'
15749longlongsize='$longlongsize'
15750longsize='$longsize'
15751lp='$lp'
15752lpr='$lpr'
15753ls='$ls'
15754lseeksize='$lseeksize'
15755lseektype='$lseektype'
15756mail='$mail'
15757mailx='$mailx'
15758make='$make'
15759make_set_make='$make_set_make'
15760mallocobj='$mallocobj'
15761mallocsrc='$mallocsrc'
15762malloctype='$malloctype'
15763man1dir='$man1dir'
15764man1direxp='$man1direxp'
15765man1ext='$man1ext'
15766man3dir='$man3dir'
15767man3direxp='$man3direxp'
15768man3ext='$man3ext'
15769medium='$medium'
5f80c64f
JH
15770mips_type='$mips_type'
15771mkdir='$mkdir'
fe749a9f 15772mmaptype='$mmaptype'
5f80c64f
JH
15773models='$models'
15774modetype='$modetype'
15775more='$more'
68c15b6f 15776multiarch='$multiarch'
5f80c64f
JH
15777mv='$mv'
15778myarchname='$myarchname'
15779mydomain='$mydomain'
15780myhostname='$myhostname'
15781myuname='$myuname'
15782n='$n'
15783netdb_hlen_type='$netdb_hlen_type'
15784netdb_host_type='$netdb_host_type'
15785netdb_name_type='$netdb_name_type'
15786netdb_net_type='$netdb_net_type'
15787nm='$nm'
15788nm_opt='$nm_opt'
15789nm_so_opt='$nm_so_opt'
15790nonxs_ext='$nonxs_ext'
15791nroff='$nroff'
8175356b
JH
15792nvsize='$nvsize'
15793nvtype='$nvtype'
5f80c64f
JH
15794o_nonblock='$o_nonblock'
15795obj_ext='$obj_ext'
ef4af2be 15796old_pthread_create_joinable='$old_pthread_create_joinable'
5f80c64f
JH
15797optimize='$optimize'
15798orderlib='$orderlib'
15799osname='$osname'
15800osvers='$osvers'
3b777bb4 15801otherlibdirs='$otherlibdirs'
5f80c64f
JH
15802package='$package'
15803pager='$pager'
15804passcat='$passcat'
15805patchlevel='$patchlevel'
15806path_sep='$path_sep'
49c10eea 15807perl5='$perl5'
5f80c64f
JH
15808perl='$perl'
15809perladmin='$perladmin'
15810perlpath='$perlpath'
15811pg='$pg'
15812phostname='$phostname'
15813pidtype='$pidtype'
15814plibpth='$plibpth'
fe749a9f 15815pm_apiversion='$pm_apiversion'
5f80c64f
JH
15816pmake='$pmake'
15817pr='$pr'
15818prefix='$prefix'
15819prefixexp='$prefixexp'
15820privlib='$privlib'
15821privlibexp='$privlibexp'
15822prototype='$prototype'
15823ptrsize='$ptrsize'
6b8eaf93 15824quadkind='$quadkind'
d7d93a81 15825quadtype='$quadtype'
5f80c64f
JH
15826randbits='$randbits'
15827randfunc='$randfunc'
15828randseedtype='$randseedtype'
15829ranlib='$ranlib'
15830rd_nodata='$rd_nodata'
49c10eea 15831revision='$revision'
5f80c64f
JH
15832rm='$rm'
15833rmail='$rmail'
15834runnm='$runnm'
cf2093f6
JH
15835sPRIEldbl='$sPRIEldbl'
15836sPRIFldbl='$sPRIFldbl'
15837sPRIGldbl='$sPRIGldbl'
15838sPRIX64='$sPRIX64'
15839sPRId64='$sPRId64'
15840sPRIeldbl='$sPRIeldbl'
15841sPRIfldbl='$sPRIfldbl'
15842sPRIgldbl='$sPRIgldbl'
15843sPRIi64='$sPRIi64'
15844sPRIo64='$sPRIo64'
15845sPRIu64='$sPRIu64'
15846sPRIx64='$sPRIx64'
5f80c64f
JH
15847sched_yield='$sched_yield'
15848scriptdir='$scriptdir'
15849scriptdirexp='$scriptdirexp'
15850sed='$sed'
15851seedfunc='$seedfunc'
15852selectminbits='$selectminbits'
15853selecttype='$selecttype'
15854sendmail='$sendmail'
15855sh='$sh'
15856shar='$shar'
15857sharpbang='$sharpbang'
15858shmattype='$shmattype'
15859shortsize='$shortsize'
15860shrpenv='$shrpenv'
15861shsharp='$shsharp'
af4c28eb 15862sig_count='$sig_count'
5f80c64f
JH
15863sig_name='$sig_name'
15864sig_name_init='$sig_name_init'
15865sig_num='$sig_num'
824a2ba3 15866sig_num_init='$sig_num_init'
5f80c64f
JH
15867signal_t='$signal_t'
15868sitearch='$sitearch'
15869sitearchexp='$sitearchexp'
717c4fcc
JH
15870sitebin='$sitebin'
15871sitebinexp='$sitebinexp'
5f80c64f 15872sitelib='$sitelib'
526fdc24 15873sitelib_stem='$sitelib_stem'
5f80c64f 15874sitelibexp='$sitelibexp'
dd4e71fd
JH
15875siteprefix='$siteprefix'
15876siteprefixexp='$siteprefixexp'
8c99d73e 15877sizesize='$sizesize'
5f80c64f
JH
15878sizetype='$sizetype'
15879sleep='$sleep'
15880smail='$smail'
15881small='$small'
15882so='$so'
15883sockethdr='$sockethdr'
15884socketlib='$socketlib'
c890dc6c 15885socksizetype='$socksizetype'
5f80c64f
JH
15886sort='$sort'
15887spackage='$spackage'
15888spitshell='$spitshell'
15889split='$split'
15890src='$src'
15891ssizetype='$ssizetype'
15892startperl='$startperl'
15893startsh='$startsh'
15894static_ext='$static_ext'
15895stdchar='$stdchar'
15896stdio_base='$stdio_base'
15897stdio_bufsiz='$stdio_bufsiz'
15898stdio_cnt='$stdio_cnt'
15899stdio_filbuf='$stdio_filbuf'
15900stdio_ptr='$stdio_ptr'
767df6a1 15901stdio_stream_array='$stdio_stream_array'
5f80c64f
JH
15902strings='$strings'
15903submit='$submit'
15904subversion='$subversion'
15905sysman='$sysman'
15906tail='$tail'
15907tar='$tar'
15908tbl='$tbl'
15909tee='$tee'
15910test='$test'
15911timeincl='$timeincl'
15912timetype='$timetype'
15913touch='$touch'
15914tr='$tr'
15915trnl='$trnl'
15916troff='$troff'
8175356b
JH
15917u16size='$u16size'
15918u16type='$u16type'
15919u32size='$u32size'
15920u32type='$u32type'
15921u64size='$u64size'
15922u64type='$u64type'
15923u8size='$u8size'
15924u8type='$u8type'
a22e52b9 15925uidformat='$uidformat'
57def98f 15926uidsign='$uidsign'
785fb66b 15927uidsize='$uidsize'
5f80c64f
JH
15928uidtype='$uidtype'
15929uname='$uname'
15930uniq='$uniq'
d7d93a81 15931uquadtype='$uquadtype'
aaacdc8b 15932use5005threads='$use5005threads'
10cc9d2a
JH
15933use64bitall='$use64bitall'
15934use64bitint='$use64bitint'
5f80c64f 15935usedl='$usedl'
aaacdc8b 15936useithreads='$useithreads'
249b38c6 15937uselargefiles='$uselargefiles'
b0ce926a 15938uselongdouble='$uselongdouble'
09458382 15939usemorebits='$usemorebits'
5f80c64f
JH
15940usemultiplicity='$usemultiplicity'
15941usemymalloc='$usemymalloc'
15942usenm='$usenm'
15943useopcode='$useopcode'
15944useperlio='$useperlio'
15945useposix='$useposix'
15946usesfio='$usesfio'
15947useshrplib='$useshrplib'
29209bc5 15948usesocks='$usesocks'
5f80c64f 15949usethreads='$usethreads'
a3635516 15950usevendorprefix='$usevendorprefix'
5f80c64f
JH
15951usevfork='$usevfork'
15952usrinc='$usrinc'
15953uuname='$uuname'
8175356b
JH
15954uvoformat='$uvoformat'
15955uvsize='$uvsize'
15956uvtype='$uvtype'
15957uvuformat='$uvuformat'
15958uvxformat='$uvxformat'
526fdc24
MS
15959vendorarch='$vendorarch'
15960vendorarchexp='$vendorarchexp'
717c4fcc
JH
15961vendorbin='$vendorbin'
15962vendorbinexp='$vendorbinexp'
a3635516 15963vendorlib='$vendorlib'
526fdc24 15964vendorlib_stem='$vendorlib_stem'
a3635516
JH
15965vendorlibexp='$vendorlibexp'
15966vendorprefix='$vendorprefix'
15967vendorprefixexp='$vendorprefixexp'
5f80c64f
JH
15968version='$version'
15969vi='$vi'
15970voidflags='$voidflags'
15971xlibpth='$xlibpth'
fe749a9f 15972xs_apiversion='$xs_apiversion'
5f80c64f
JH
15973zcat='$zcat'
15974zip='$zip'
15975EOT
15976
15977: Add in command line options if available
15978$test -f UU/cmdline.opt && $cat UU/cmdline.opt >> config.sh
15979
15980: add special variables
15981$test -f $src/patchlevel.h && \
d00b958f 15982awk '/^#define[ ]+PERL_/ {printf "%s=%s\n",$2,$3}' $src/patchlevel.h >>config.sh
2000072c 15983echo "CONFIGDOTSH=true" >>config.sh
5f80c64f
JH
15984
15985: propagate old symbols
15986if $test -f UU/config.sh; then
15987 <UU/config.sh sort | uniq >UU/oldconfig.sh
15988 sed -n 's/^\([a-zA-Z_0-9]*\)=.*/\1/p' config.sh config.sh UU/oldconfig.sh |\
15989 sort | uniq -u >UU/oldsyms
15990 set X `cat UU/oldsyms`
15991 shift
15992 case $# in
15993 0) ;;
15994 *)
15995 cat <<EOM
15996Hmm...You had some extra variables I don't know about...I'll try to keep 'em...
15997EOM
15998 echo "# Variables propagated from previous config.sh file." >>config.sh
15999 for sym in `cat UU/oldsyms`; do
16000 echo " Propagating $hint variable "'$'"$sym..."
16001 eval 'tmp="$'"${sym}"'"'
16002 echo "$tmp" | \
16003 sed -e "s/'/'\"'\"'/g" -e "s/^/$sym='/" -e "s/$/'/" >>config.sh
16004 done
16005 ;;
16006 esac
16007fi
16008
16009: Finish up by extracting the .SH files
16010case "$alldone" in
16011exit)
16012 $rm -rf UU
16013 echo "Done."
16014 exit 0
16015 ;;
16016cont)
16017 ;;
16018'')
16019 dflt=''
16020 nostick=true
16021 $cat <<EOM
16022
16023If you'd like to make any changes to the config.sh file before I begin
16024to configure things, do it as a shell escape now (e.g. !vi config.sh).
16025
16026EOM
16027 rp="Press return or use a shell escape to edit config.sh:"
16028 . UU/myread
16029 nostick=''
16030 case "$ans" in
16031 '') ;;
16032 *) : in case they cannot read
16033 sh 1>&4 -c "$ans";;
16034 esac
16035 ;;
16036esac
16037
16038: if this fails, just run all the .SH files by hand
16039. ./config.sh
16040
16041echo " "
16042exec 1>&4
16043. ./UU/extract
16044
16045if $contains '^depend:' [Mm]akefile >/dev/null 2>&1; then
16046 dflt=y
16047 case "$silent" in
16048 true) ;;
16049 *)
16050 $cat <<EOM
16051
16052Now you need to generate make dependencies by running "$make depend".
16053You might prefer to run it in background: "$make depend > makedepend.out &"
16054It can take a while, so you might not want to run it right now.
16055
16056EOM
16057 ;;
16058 esac
16059 rp="Run $make depend now?"
16060 . UU/myread
16061 case "$ans" in
16062 y*)
16063 $make depend && echo "Now you must run a $make."
16064 ;;
16065 *)
16066 echo "You must run '$make depend' then '$make'."
16067 ;;
16068 esac
16069elif test -f [Mm]akefile; then
16070 echo " "
16071 echo "Now you must run a $make."
16072else
16073 echo "Done."
16074fi
16075
16076if $test -f Policy.sh; then
16077 $cat <<EOM
16078
16079If you compile $package on a different machine or from a different object
16080directory, copy the Policy.sh file from this object directory to the
16081new one before you run Configure -- this will help you with most of
16082the policy defaults.
16083
16084EOM
16085fi
16086if $test -f config.msg; then
16087 echo "Hmm. I also noted the following information while running:"
16088 echo " "
16089 $cat config.msg >&4
16090 $rm -f config.msg
16091fi
16092$rm -f kit*isdone ark*isdone
16093$rm -rf UU
16094
16095: End of Configure
16096