This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
thinko in change#5029
[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#
04fa8c41 23# Generated on Fri Feb 4 21:57:24 EET 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=''
291gccversion=''
292ccflags=''
293cppflags=''
294ldflags=''
295lkflags=''
8e07c86e 296locincpth=''
2304df62 297optimize=''
8e07c86e 298cf_email=''
2304df62
AD
299cf_by=''
300cf_time=''
8175356b 301charsize=''
2304df62 302contains=''
a0d0e21e 303cpp_stuff=''
2304df62
AD
304cpplast=''
305cppminus=''
306cpprun=''
307cppstdin=''
68c15b6f 308crosscompile=''
2304df62 309d_access=''
5ff3f7a4 310d_accessx=''
a0d0e21e 311d_alarm=''
ecfc5424 312d_attribut=''
2304df62
AD
313d_bcmp=''
314d_bcopy=''
315d_bzero=''
316d_casti32=''
317castflags=''
318d_castneg=''
a0d0e21e
LW
319d_chown=''
320d_chroot=''
2304df62 321d_chsize=''
a0d0e21e
LW
322d_closedir=''
323d_void_closedir=''
2304df62
AD
324d_const=''
325cryptlib=''
326d_crypt=''
327d_csh=''
1aef975c 328full_csh=''
a0d0e21e
LW
329d_cuserid=''
330d_dbl_dig=''
331d_difftime=''
332d_dlerror=''
333d_dlopen=''
334d_dlsymun=''
2304df62 335d_dosuid=''
a0d0e21e 336d_suidsafe=''
85ab1d1d 337d_drand48proto=''
2304df62 338d_dup2=''
5ff3f7a4
GS
339d_eaccess=''
340d_endgrent=''
e5c9fcd0
AD
341d_endhent=''
342d_endnent=''
343d_endpent=''
5ff3f7a4 344d_endpwent=''
e5c9fcd0 345d_endsent=''
f1066039 346d_endspent=''
2304df62
AD
347d_fchmod=''
348d_fchown=''
349d_fcntl=''
a0d0e21e
LW
350d_fd_macros=''
351d_fd_set=''
352d_fds_bits=''
353d_fgetpos=''
2304df62
AD
354d_flexfnam=''
355d_flock=''
a0d0e21e 356d_fork=''
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=''
5ff3f7a4 365d_getgrent=''
2304df62 366d_getgrps=''
4599a1de 367d_gethbyaddr=''
4599a1de 368d_gethbyname=''
dfe9444c 369d_gethent=''
2304df62
AD
370aphostname=''
371d_gethname=''
372d_phostname=''
373d_uname=''
dc45a647 374d_gethostprotos=''
a0d0e21e 375d_getlogin=''
ad27e871 376d_getmnt=''
ccc7f9b3 377d_getmntent=''
dfe9444c 378d_getnbyaddr=''
693762b4 379d_getnbyname=''
e5c9fcd0 380d_getnent=''
dc45a647 381d_getnetprotos=''
e5c9fcd0 382d_getpent=''
2afac517 383d_getpgid=''
2304df62 384d_getpgrp2=''
2afac517 385d_bsdgetpgrp=''
2304df62 386d_getpgrp=''
a0d0e21e 387d_getppid=''
2304df62 388d_getprior=''
693762b4
AD
389d_getpbyname=''
390d_getpbynumber=''
dc45a647 391d_getprotoprotos=''
5ff3f7a4 392d_getpwent=''
e5c9fcd0 393d_getsent=''
dc45a647 394d_getservprotos=''
f1066039
JH
395d_getspent=''
396d_getspnam=''
693762b4
AD
397d_getsbyname=''
398d_getsbyport=''
a4f3eea9 399d_gnulibc=''
ccc7f9b3 400d_hasmntopt=''
2304df62 401d_htonl=''
43999f95 402d_iconv=''
7e1af8bc 403d_inetaton=''
6b8eaf93 404d_int64t=''
2304df62
AD
405d_isascii=''
406d_killpg=''
dd64f1c3 407d_lchown=''
2d4389e4 408d_ldbl_dig=''
2304df62 409d_link=''
a0d0e21e
LW
410d_locconv=''
411d_lockf=''
e5c9fcd0
AD
412d_longdbl=''
413longdblsize=''
dc45a647
MB
414d_longlong=''
415longlongsize=''
2304df62 416d_lstat=''
a0d0e21e
LW
417d_mblen=''
418d_mbstowcs=''
419d_mbtowc=''
0f27ced1 420d_memchr=''
2304df62
AD
421d_memcmp=''
422d_memcpy=''
423d_memmove=''
424d_memset=''
425d_mkdir=''
a0d0e21e
LW
426d_mkfifo=''
427d_mktime=''
2304df62
AD
428d_msg=''
429d_msgctl=''
430d_msgget=''
431d_msgrcv=''
432d_msgsnd=''
a0d0e21e 433d_nice=''
2304df62 434d_open3=''
a0d0e21e
LW
435d_fpathconf=''
436d_pathconf=''
437d_pause=''
438d_pipe=''
8e07c86e 439d_poll=''
2304df62 440d_portable=''
ef4af2be
JH
441d_old_pthread_create_joinable=''
442old_pthread_create_joinable=''
dfe9444c
AD
443d_pthread_yield=''
444d_sched_yield=''
1cfa4ec7 445sched_yield=''
2304df62 446d_readdir=''
85e6fe83
LW
447d_rewinddir=''
448d_seekdir=''
449d_telldir=''
a0d0e21e 450d_readlink=''
2304df62
AD
451d_rename=''
452d_rmdir=''
453d_safebcpy=''
454d_safemcpy=''
36477c24 455d_sanemcmp=''
2304df62
AD
456d_select=''
457d_sem=''
458d_semctl=''
459d_semget=''
460d_semop=''
461d_setegid=''
462d_seteuid=''
5ff3f7a4 463d_setgrent=''
dfe9444c 464d_setgrps=''
693762b4 465d_sethent=''
a0d0e21e 466d_setlinebuf=''
2304df62 467d_setlocale=''
e5c9fcd0
AD
468d_setnent=''
469d_setpent=''
2304df62
AD
470d_setpgid=''
471d_setpgrp2=''
2afac517 472d_bsdsetpgrp=''
2304df62
AD
473d_setpgrp=''
474d_setprior=''
5ff3f7a4 475d_setpwent=''
2304df62
AD
476d_setregid=''
477d_setresgid=''
478d_setresuid=''
479d_setreuid=''
480d_setrgid=''
481d_setruid=''
e5c9fcd0 482d_setsent=''
2304df62 483d_setsid=''
f1066039 484d_setspent=''
e5c9fcd0 485d_setvbuf=''
760ac839 486d_sfio=''
8ff267be 487usesfio=''
2304df62
AD
488d_shm=''
489d_shmat=''
a0d0e21e
LW
490d_shmatprototype=''
491shmattype=''
2304df62
AD
492d_shmctl=''
493d_shmdt=''
494d_shmget=''
2c7991dc 495d_sigaction=''
8ff267be 496d_sigsetjmp=''
de4597cb
JH
497d_msg_ctrunc=''
498d_msg_dontroute=''
499d_msg_oob=''
500d_msg_peek=''
501d_msg_proxy=''
2304df62 502d_oldsock=''
de4597cb 503d_scm_rights=''
2304df62
AD
504d_socket=''
505d_sockpair=''
506sockethdr=''
507socketlib=''
68d4903c 508d_sqrtl=''
2304df62 509d_statblks=''
0545a864
JH
510d_statfs_f_flags=''
511d_statfs_s=''
104d25b7
JH
512d_fstatvfs=''
513d_statvfs=''
c2960299
AD
514d_stdio_cnt_lval=''
515d_stdio_ptr_lval=''
16d20bd9 516d_stdiobase=''
2304df62 517d_stdstdio=''
16d20bd9
AD
518stdio_base=''
519stdio_bufsiz=''
520stdio_cnt=''
dfe9444c 521stdio_filbuf=''
16d20bd9 522stdio_ptr=''
2304df62
AD
523d_index=''
524d_strchr=''
a0d0e21e 525d_strcoll=''
2304df62
AD
526d_strctcpy=''
527d_strerrm=''
528d_strerror=''
529d_sysernlst=''
530d_syserrlst=''
a89d8a78
DH
531d_strtod=''
532d_strtol=''
ff935051 533d_strtold=''
76d49b1c 534d_strtoll=''
a89d8a78 535d_strtoul=''
ff935051
JH
536d_strtoull=''
537d_strtouq=''
a0d0e21e 538d_strxfrm=''
2304df62
AD
539d_symlink=''
540d_syscall=''
a0d0e21e 541d_sysconf=''
2304df62 542d_system=''
a0d0e21e
LW
543d_tcgetpgrp=''
544d_tcsetpgrp=''
cb86ce0e 545d_telldirproto=''
85e6fe83
LW
546d_time=''
547timetype=''
2304df62
AD
548clocktype=''
549d_times=''
550d_truncate=''
a0d0e21e
LW
551d_tzname=''
552d_umask=''
bd89102f
AD
553d_semctl_semid_ds=''
554d_semctl_semun=''
555d_union_semun=''
0545a864 556d_ustat=''
2304df62 557d_vfork=''
a0d0e21e 558usevfork=''
2304df62
AD
559d_voidsig=''
560signal_t=''
561d_volatile=''
562d_charvspr=''
563d_vprintf=''
564d_wait4=''
565d_waitpid=''
a0d0e21e
LW
566d_wcstombs=''
567d_wctomb=''
568dlext=''
85e6fe83
LW
569cccdlflags=''
570ccdlflags=''
2304df62 571dlsrc=''
232e078e 572ld=''
85e6fe83 573lddlflags=''
2304df62 574usedl=''
693762b4 575doublesize=''
5ff3f7a4 576ebcdic=''
66fe083f 577fflushNULL=''
767df6a1 578fflushall=''
8175356b 579fpossize=''
a0d0e21e 580fpostype=''
a22e52b9 581gidformat=''
785fb66b
JH
582gidsign=''
583gidsize=''
2304df62
AD
584gidtype=''
585groupstype=''
586h_fcntl=''
587h_sysfile=''
5ff3f7a4 588i_arpainet=''
ecfc5424
AD
589db_hashtype=''
590db_prefixtype=''
a0d0e21e 591i_db=''
2304df62 592i_dbm=''
8e07c86e 593i_rpcsvcdbm=''
2304df62 594d_dirnamlen=''
a0d0e21e 595direntrytype=''
2304df62 596i_dirent=''
a0d0e21e 597i_dld=''
2304df62
AD
598i_dlfcn=''
599i_fcntl=''
a0d0e21e 600i_float=''
2304df62 601i_gdbm=''
28e8609d 602d_grpasswd=''
2304df62 603i_grp=''
43999f95 604i_iconv=''
5ff3f7a4 605i_inttypes=''
a0d0e21e 606i_limits=''
4633a7c4 607i_locale=''
7f3d1cf1 608i_machcthr=''
a0d0e21e
LW
609i_malloc=''
610i_math=''
85e6fe83 611i_memory=''
e7fb4fcc 612i_mntent=''
2304df62 613i_ndbm=''
3fd537d4 614i_netdb=''
85e6fe83 615i_neterrno=''
9cc6feab 616i_netinettcp=''
2304df62
AD
617i_niin=''
618i_sysin=''
5b34fd99 619i_poll=''
c4747d3e 620i_pthread=''
2304df62
AD
621d_pwage=''
622d_pwchange=''
623d_pwclass=''
624d_pwcomment=''
625d_pwexpire=''
c4f23d77 626d_pwgecos=''
28e8609d 627d_pwpasswd=''
2304df62
AD
628d_pwquota=''
629i_pwd=''
760ac839 630i_sfio=''
f1066039 631i_shadow=''
86959918 632i_socks=''
2304df62 633i_stddef=''
a0d0e21e 634i_stdlib=''
2304df62
AD
635i_string=''
636strings=''
5ff3f7a4 637i_sysaccess=''
2304df62
AD
638i_sysdir=''
639i_sysfile=''
640d_voidtty=''
641i_bsdioctl=''
a0d0e21e 642i_sysfilio=''
2304df62
AD
643i_sysioctl=''
644i_syssockio=''
104d25b7 645i_sysmount=''
2304df62 646i_sysndir=''
a0d0e21e 647i_sysparam=''
8ff267be 648i_sysresrc=''
5ff3f7a4 649i_syssecrt=''
2304df62 650i_sysselct=''
1aef975c 651i_sysstat=''
0545a864 652i_sysstatfs=''
104d25b7 653i_sysstatvfs=''
a0d0e21e 654i_systimes=''
fed7345c 655i_systypes=''
de4597cb 656i_sysuio=''
25f94b33 657i_sysun=''
0545a864 658i_sysvfs=''
8ff267be 659i_syswait=''
2304df62
AD
660i_sgtty=''
661i_termio=''
662i_termios=''
663i_systime=''
664i_systimek=''
665i_time=''
666timeincl=''
85e6fe83 667i_unistd=''
0545a864 668i_ustat=''
2304df62 669i_utime=''
760ac839 670i_values=''
a0d0e21e 671i_stdarg=''
2304df62
AD
672i_varargs=''
673i_varhdr=''
674i_vfork=''
ff935051 675inc_version_list=''
3a096bf3 676inc_version_list_init=''
dd4e71fd
JH
677installprefix=''
678installprefixexp=''
679installstyle=''
104d25b7 680installusrbinperl=''
2304df62 681intsize=''
24fef2a7
AD
682longsize=''
683shortsize=''
d9b3e12d 684d_fpos64_t=''
2000072c 685d_off64_t=''
2304df62 686libc=''
5cf1d1f1 687ldlibpthname=''
8ff267be 688libperl=''
2afac517 689shrpenv=''
8ff267be 690useshrplib=''
a0d0e21e 691glibpth=''
2304df62 692libpth=''
8e07c86e 693loclibpth=''
2304df62
AD
694plibpth=''
695xlibpth=''
1cfa4ec7 696ignore_versioned_solibs=''
2304df62 697libs=''
43999f95
JH
698libsdirs=''
699libsfiles=''
700libsfound=''
85e6fe83 701lns=''
cf2093f6
JH
702d_PRIEldbl=''
703d_PRIFldbl=''
704d_PRIGldbl=''
705d_PRIeldbl=''
706d_PRIfldbl=''
707d_PRIgldbl=''
708sPRIEldbl=''
709sPRIFldbl=''
710sPRIGldbl=''
711sPRIeldbl=''
712sPRIfldbl=''
713sPRIgldbl=''
5ff3f7a4 714lseeksize=''
85e6fe83 715lseektype=''
8ff267be 716make_set_make=''
85e6fe83 717d_mymalloc=''
94b6baf5 718freetype=''
2304df62
AD
719mallocobj=''
720mallocsrc=''
721malloctype=''
722usemymalloc=''
16d20bd9
AD
723installman1dir=''
724man1dir=''
725man1direxp=''
726man1ext=''
727installman3dir=''
728man3dir=''
729man3direxp=''
730man3ext=''
2304df62
AD
731huge=''
732large=''
733medium=''
734models=''
735small=''
736split=''
a0d0e21e 737modetype=''
68c15b6f 738multiarch=''
2304df62
AD
739mydomain=''
740myhostname=''
741phostname=''
742c=''
743n=''
8e07c86e
AD
744d_eofnblk=''
745eagain=''
746o_nonblock=''
747rd_nodata=''
dfe9444c
AD
748netdb_hlen_type=''
749netdb_host_type=''
750netdb_name_type=''
751netdb_net_type=''
2304df62
AD
752groupcat=''
753hostcat=''
754passcat=''
85e6fe83
LW
755orderlib=''
756ranlib=''
2304df62
AD
757package=''
758spackage=''
2c7991dc 759pager=''
ff935051
JH
760api_revision=''
761api_subversion=''
762api_version=''
763api_versionstring=''
ecfc5424 764patchlevel=''
760ac839 765subversion=''
bfb7748a 766version=''
8e07c86e 767perladmin=''
4633a7c4 768perlpath=''
78691af5 769d_nv_preserves_uv=''
8175356b
JH
770i16size=''
771i16type=''
772i32size=''
773i32type=''
774i64size=''
775i64type=''
776i8size=''
777i8type=''
778ivsize=''
779ivtype=''
780nvsize=''
781nvtype=''
782u16size=''
783u16type=''
784u32size=''
785u32type=''
786u64size=''
787u64type=''
788u8size=''
789u8type=''
790uvsize=''
791uvtype=''
792ivdformat=''
793uvoformat=''
794uvuformat=''
795uvxformat=''
dfe9444c 796pidtype=''
a0d0e21e 797prefix=''
1aef975c 798prefixexp=''
2304df62
AD
799installprivlib=''
800privlib=''
801privlibexp=''
802prototype=''
693762b4 803ptrsize=''
cf2093f6
JH
804d_PRIX64=''
805d_PRId64=''
806d_PRIi64=''
807d_PRIo64=''
808d_PRIu64=''
809d_PRIx64=''
810sPRIX64=''
811sPRId64=''
812sPRIi64=''
813sPRIo64=''
814sPRIu64=''
815sPRIx64=''
de1c2614 816d_quad=''
6b8eaf93 817quadkind=''
d7d93a81
JH
818quadtype=''
819uquadtype=''
85ab1d1d 820drand01=''
2304df62 821randbits=''
85ab1d1d
JH
822randfunc=''
823randseedtype=''
824seedfunc=''
2304df62
AD
825installscript=''
826scriptdir=''
827scriptdirexp=''
5ff3f7a4 828selectminbits=''
a0d0e21e 829selecttype=''
8ff267be 830sh=''
af4c28eb 831sig_count=''
2304df62 832sig_name=''
dfe9444c 833sig_name_init=''
8e07c86e 834sig_num=''
824a2ba3 835sig_num_init=''
4633a7c4
LW
836installsitearch=''
837sitearch=''
838sitearchexp=''
717c4fcc
JH
839installsitebin=''
840sitebin=''
841sitebinexp=''
25f94b33
AD
842installsitelib=''
843sitelib=''
844sitelibexp=''
dd4e71fd
JH
845siteprefix=''
846siteprefixexp=''
a0d0e21e
LW
847sizetype=''
848so=''
2304df62
AD
849sharpbang=''
850shsharp=''
851spitshell=''
dfe9444c 852src=''
a0d0e21e 853ssizetype=''
4633a7c4 854startperl=''
2304df62
AD
855startsh=''
856stdchar=''
ed39a0f2 857d_stdio_stream_array=''
767df6a1 858stdio_stream_array=''
2304df62 859sysman=''
5ff3f7a4 860trnl=''
a22e52b9 861uidformat=''
57def98f 862uidsign=''
785fb66b 863uidsize=''
2304df62 864uidtype=''
85ab1d1d 865archname64=''
5ff3f7a4 866use64bits=''
249b38c6 867uselargefiles=''
b0ce926a 868uselongdouble=''
d7d93a81 869uselonglong=''
09458382 870usemorebits=''
85ab1d1d 871usemultiplicity=''
2304df62 872nm_opt=''
40a7a20a 873nm_so_opt=''
2304df62
AD
874runnm=''
875usenm=''
8ff267be 876useperlio=''
29209bc5 877usesocks=''
693762b4 878d_oldpthreads=''
aaacdc8b
GS
879use5005threads=''
880useithreads=''
dfe9444c 881usethreads=''
2304df62 882incpath=''
2304df62
AD
883mips_type=''
884usrinc=''
717c4fcc
JH
885d_vendorbin=''
886installvendorbin=''
887vendorbin=''
888vendorbinexp=''
a3635516
JH
889d_vendorlib=''
890installvendorlib=''
891vendorlib=''
892vendorlibexp=''
893usevendorprefix=''
894vendorprefix=''
895vendorprefixexp=''
2304df62
AD
896defvoidused=''
897voidflags=''
2304df62
AD
898CONFIG=''
899
ecfc5424
AD
900define='define'
901undef='undef'
902smallmach='pdp11 i8086 z8000 i80286 iAPX286'
903rmlist=''
904
905: We must find out about Eunice early
906eunicefix=':'
907if test -f /etc/unixtovms; then
908 eunicefix=/etc/unixtovms
909fi
910if test -f /etc/unixtovms.exe; then
911 eunicefix=/etc/unixtovms.exe
912fi
913
5ff3f7a4 914i_whoami=''
ff935051
JH
915: set useposix=false in your hint file to disable the POSIX extension.
916useposix=true
917: set useopcode=false in your hint file to disable the Opcode extension.
918useopcode=true
dfe9444c 919: Trailing extension. Override this in a hint file, if needed.
4e2a5f63 920_exe=''
dfe9444c
AD
921: Extra object files, if any, needed on this platform.
922archobjs=''
ff935051
JH
923: Possible local include directories to search.
924: Set locincpth to "" in a hint file to defeat local include searches.
925locincpth="/usr/local/include /opt/local/include /usr/gnu/include"
926locincpth="$locincpth /opt/gnu/include /usr/GNU/include /opt/GNU/include"
927:
928: no include file wanted by default
929inclwanted=''
930
dfe9444c 931groupstype=''
732c9516
JH
932: change the next line if compiling for Xenix/286 on Xenix/386
933xlibpth='/usr/lib/386 /lib/386'
934
935: Possible local library directories to search.
936loclibpth="/usr/local/lib /opt/local/lib /usr/gnu/lib"
937loclibpth="$loclibpth /opt/gnu/lib /usr/GNU/lib /opt/GNU/lib"
938
939: general looking path for locating libraries
940glibpth="/shlib /usr/shlib /lib/pa1.1 /usr/lib/large"
941glibpth="$glibpth /lib /usr/lib $xlibpth"
942glibpth="$glibpth /lib/large /usr/lib/small /lib/small"
943glibpth="$glibpth /usr/ccs/lib /usr/ucblib /usr/local/lib"
944
945: Private path used by Configure to find libraries. Its value
946: is prepended to libpth. This variable takes care of special
947: machines, like the mips. Usually, it should be empty.
948plibpth=''
949
1cfa4ec7
GS
950: default library list
951libswanted=''
921b2963 952: some systems want to use only the non-versioned libso:s
1cfa4ec7 953ignore_versioned_solibs=''
85ab1d1d 954: set usemultiplicity on the Configure command line to enable multiplicity.
29209bc5 955: set usesocks on the Configure command line to enable socks.
dfe9444c 956: set usethreads on the Configure command line to enable threads.
ff935051
JH
957: full support for void wanted by default
958defvoidused=15
959
ecfc5424 960: List of libraries we want.
693762b4
AD
961: If anyone needs -lnet, put it in a hint file.
962libswanted='sfio socket inet nsl nm ndbm gdbm dbm db malloc dl'
69e84d1d 963libswanted="$libswanted dld ld sun m c cposix posix"
f1066039 964libswanted="$libswanted ndir dir crypt sec"
ecfc5424 965libswanted="$libswanted ucb bsd BSD PW x"
1aef975c 966: We probably want to search /usr/shlib before most other libraries.
94b6baf5 967: This is only used by the lib/ExtUtils/MakeMaker.pm routine extliblist.
ecfc5424
AD
968glibpth=`echo " $glibpth " | sed -e 's! /usr/shlib ! !'`
969glibpth="/usr/shlib $glibpth"
970: Do not use vfork unless overridden by a hint file.
971usevfork=false
972
8ff267be 973: Find the basic shell for Bourne shell scripts
974case "$sh" in
975'')
8ff267be 976 case "$SYSTYPE" in
977 *bsd*|sys5*) xxx="/$SYSTYPE/bin/sh";;
978 *) xxx='/bin/sh';;
979 esac
980 if test -f "$xxx"; then
981 sh="$xxx"
982 else
983 : Build up a list and do a single loop so we can 'break' out.
984 pth=`echo $PATH | sed -e "s/$p_/ /g"`
985 for xxx in sh bash ksh pdksh ash; do
986 for p in $pth; do
987 try="$try ${p}/${xxx}"
988 done
989 done
990 for xxx in $try; do
991 if test -f "$xxx"; then
992 sh="$xxx";
8ff267be 993 break
994 elif test -f "$xxx.exe"; then
995 sh="$xxx";
8ff267be 996 break
997 fi
998 done
999 fi
1000 ;;
1001esac
1002
1003case "$sh" in
1004'') cat <<EOM >&2
1005$me: Fatal Error: I can't find a Bourne Shell anywhere.
dfe9444c 1006
8ff267be 1007Usually it's in /bin/sh. How did you even get this far?
46193409 1008Please contact me (Perl Maintainers) at perlbug@perl.com and
dfe9444c 1009we'll try to straighten this all out.
8ff267be 1010EOM
1011 exit 1
1012 ;;
1013esac
1014
760ac839 1015: see if sh knows # comments
8ff267be 1016if `$sh -c '#' >/dev/null 2>&1`; then
760ac839
LW
1017 shsharp=true
1018 spitshell=cat
760ac839
LW
1019 xcat=/bin/cat
1020 test -f $xcat || xcat=/usr/bin/cat
1021 echo "#!$xcat" >try
1022 $eunicefix try
1023 chmod +x try
1024 ./try > today
1025 if test -s today; then
760ac839
LW
1026 sharpbang='#!'
1027 else
1028 echo "#! $xcat" > try
1029 $eunicefix try
1030 chmod +x try
1031 ./try > today
1032 if test -s today; then
760ac839
LW
1033 sharpbang='#! '
1034 else
760ac839
LW
1035 sharpbang=': use '
1036 fi
1037 fi
1038else
dfe9444c 1039 echo " "
8ff267be 1040 echo "Your $sh doesn't grok # comments--I will strip them later on."
760ac839
LW
1041 shsharp=false
1042 cd ..
1043 echo "exec grep -v '^[ ]*#'" >spitshell
1044 chmod +x spitshell
1045 $eunicefix spitshell
1046 spitshell=`pwd`/spitshell
1047 cd UU
1048 echo "I presume that if # doesn't work, #! won't work either!"
1049 sharpbang=': use '
1050fi
1051rm -f try today
1052
1053: figure out how to guarantee sh startup
8ff267be 1054case "$startsh" in
1055'') startsh=${sharpbang}${sh} ;;
1056*)
760ac839 1057esac
760ac839
LW
1058cat >try <<EOSS
1059$startsh
1060set abc
1061test "$?abc" != 1
1062EOSS
1063
1064chmod +x try
1065$eunicefix try
1066if ./try; then
8ff267be 1067 : echo "Yup, it does."
760ac839 1068else
dfe9444c
AD
1069 echo "Hmm... '$startsh' does not guarantee sh startup..."
1070 echo "You may have to fix up the shell scripts to make sure $sh runs them."
760ac839
LW
1071fi
1072rm -f try
1073
aebf16e7
AD
1074
1075: Save command line options in file UU/cmdline.opt for later use in
1076: generating config.sh.
1077cat > cmdline.opt <<EOSH
1078# Configure command line arguments.
1079config_arg0='$0'
1080config_args='$*'
1081config_argc=$#
1082EOSH
1083argn=1
1084for arg in "$@"; do
1085 cat >>cmdline.opt <<EOSH
1086config_arg$argn='$arg'
1087EOSH
1088 argn=`expr $argn + 1`
1089done
1090
2304df62
AD
1091: produce awk script to parse command line options
1092cat >options.awk <<'EOF'
1093BEGIN {
02e93a22 1094 optstr = "A:dD:eEf:hKOrsSU:V"; # getopt-style specification
2304df62
AD
1095
1096 len = length(optstr);
1097 for (i = 1; i <= len; i++) {
1098 c = substr(optstr, i, 1);
1099 if (i < len) a = substr(optstr, i + 1, 1); else a = "";
1100 if (a == ":") {
1101 arg[c] = 1;
1102 i++;
1103 }
1104 opt[c] = 1;
1105 }
1106}
1107{
1108 expect = 0;
1109 str = $0;
1110 if (substr(str, 1, 1) != "-") {
1111 printf("'%s'\n", str);
1112 next;
1113 }
1114 len = length($0);
1115 for (i = 2; i <= len; i++) {
1116 c = substr(str, i, 1);
1117 if (!opt[c]) {
1118 printf("-%s\n", substr(str, i));
1119 next;
1120 }
1121 printf("-%s\n", c);
1122 if (arg[c]) {
1123 if (i < len)
1124 printf("'%s'\n", substr(str, i + 1));
1125 else
1126 expect = 1;
1127 next;
1128 }
1129 }
1130}
1131END {
1132 if (expect)
1133 print "?";
1134}
1135EOF
1136
1137: process the command line options
4633a7c4
LW
1138set X `for arg in "$@"; do echo "X$arg"; done |
1139 sed -e s/X// | awk -f options.awk`
2304df62
AD
1140eval "set $*"
1141shift
1142rm -f options.awk
1143
1144: set up default values
1145fastread=''
1146reuseval=false
1147config_sh=''
1148alldone=''
1149error=''
1150silent=''
1151extractsh=''
ecfc5424 1152override=''
16d20bd9 1153knowitall=''
02e93a22 1154rm -f optdef.sh posthint.sh
28757baa 1155cat >optdef.sh <<EOS
1156$startsh
1157EOS
2304df62 1158
dfe9444c 1159
2304df62
AD
1160: option parsing
1161while test $# -gt 0; do
1162 case "$1" in
1163 -d) shift; fastread=yes;;
1164 -e) shift; alldone=cont;;
1165 -f)
1166 shift
1167 cd ..
1168 if test -r "$1"; then
1169 config_sh="$1"
1170 else
a0d0e21e 1171 echo "$me: cannot read config file $1." >&2
2304df62
AD
1172 error=true
1173 fi
1174 cd UU
1175 shift;;
1176 -h) shift; error=true;;
1177 -r) shift; reuseval=true;;
dfe9444c 1178 -s) shift; silent=true; realsilent=true;;
2304df62 1179 -E) shift; alldone=exit;;
16d20bd9 1180 -K) shift; knowitall=true;;
ecfc5424 1181 -O) shift; override=true;;
dfe9444c 1182 -S) shift; silent=true; extractsh=true;;
a0d0e21e
LW
1183 -D)
1184 shift
1185 case "$1" in
1186 *=)
1187 echo "$me: use '-U symbol=', not '-D symbol='." >&2
1188 echo "$me: ignoring -D $1" >&2
1189 ;;
ecfc5424 1190 *=*) echo "$1" | \
1aef975c
AD
1191 sed -e "s/'/'\"'\"'/g" -e "s/=\(.*\)/='\1'/" >> optdef.sh;;
1192 *) echo "$1='define'" >> optdef.sh;;
a0d0e21e
LW
1193 esac
1194 shift
1195 ;;
1196 -U)
1197 shift
1198 case "$1" in
1aef975c 1199 *=) echo "$1" >> optdef.sh;;
a0d0e21e
LW
1200 *=*)
1201 echo "$me: use '-D symbol=val', not '-U symbol=val'." >&2
1202 echo "$me: ignoring -U $1" >&2
1203 ;;
1aef975c 1204 *) echo "$1='undef'" >> optdef.sh;;
a0d0e21e
LW
1205 esac
1206 shift
1207 ;;
02e93a22
JH
1208 -A)
1209 shift
1210 xxx=''
1211 yyy="$1"
02e93a22 1212 zzz=''
5f83a3e9 1213 uuu=undef
02e93a22 1214 case "$yyy" in
5f83a3e9
JH
1215 *=*) zzz=`echo $yyy|sed 's!=.*!!'`
1216 case "$zzz" in
1217 *:*) zzz='' ;;
1218 *) xxx=append
1219 zzz=" "`echo $yyy|sed 's!^[^=]*=!!'`
1220 yyy=`echo $yyy|sed 's!=.*!!'` ;;
1221 esac
1222 ;;
1223 esac
1224 case "$xxx" in
1225 '') case "$yyy" in
1226 *:*) xxx=`echo $yyy|sed 's!:.*!!'`
1227 yyy=`echo $yyy|sed 's!^[^:]*:!!'`
1228 zzz=`echo $yyy|sed 's!^[^=]*=!!'`
1229 yyy=`echo $yyy|sed 's!=.*!!'` ;;
1230 *) xxx=`echo $yyy|sed 's!:.*!!'`
1231 yyy=`echo $yyy|sed 's!^[^:]*:!!'` ;;
1232 esac
1233 ;;
1234 esac
02e93a22
JH
1235 case "$xxx" in
1236 append)
5f83a3e9 1237 echo "$yyy=\"\${$yyy}$zzz\"" >> posthint.sh ;;
02e93a22 1238 clear)
5f83a3e9 1239 echo "$yyy=''" >> posthint.sh ;;
02e93a22
JH
1240 define)
1241 case "$zzz" in
1242 '') zzz=define ;;
1243 esac
5f83a3e9 1244 echo "$yyy='$zzz'" >> posthint.sh ;;
02e93a22 1245 eval)
5f83a3e9 1246 echo "eval \"$yyy=$zzz\"" >> posthint.sh ;;
02e93a22 1247 prepend)
5f83a3e9 1248 echo "$yyy=\"$zzz\${$yyy}\"" >> posthint.sh ;;
02e93a22
JH
1249 undef)
1250 case "$zzz" in
1251 '') zzz="$uuu" ;;
1252 esac
5f83a3e9
JH
1253 echo "$yyy=$zzz" >> posthint.sh ;;
1254 *) echo "$me: unknown -A command '$xxx', ignoring -A $1" >&2 ;;
02e93a22
JH
1255 esac
1256 ;;
dfe9444c 1257 -V) echo "$me generated by metaconfig 3.0 PL70." >&2
5f83a3e9 1258 exit 0;;
2304df62 1259 --) break;;
a0d0e21e 1260 -*) echo "$me: unknown option $1" >&2; shift; error=true;;
2304df62
AD
1261 *) break;;
1262 esac
1263done
1264
1265case "$error" in
1266true)
1267 cat >&2 <<EOM
2afac517 1268Usage: $me [-dehrsEKOSV] [-f config.sh] [-D symbol] [-D symbol=value]
02e93a22 1269 [-U symbol] [-U symbol=] [-A command:symbol...]
2304df62
AD
1270 -d : use defaults for all answers.
1271 -e : go on without questioning past the production of config.sh.
1272 -f : specify an alternate default configuration file.
1273 -h : print this help message and exit (with an error status).
1274 -r : reuse C symbols value if possible (skips costly nm extraction).
1275 -s : silent mode, only echoes questions and essential information.
a0d0e21e
LW
1276 -D : define symbol to have some value:
1277 -D symbol symbol gets the value 'define'
1278 -D symbol=value symbol gets the value 'value'
2304df62 1279 -E : stop at the end of questions, after having produced config.sh.
16d20bd9 1280 -K : do not use unless you know what you are doing.
ecfc5424 1281 -O : let -D and -U override definitions from loaded configuration file.
2304df62 1282 -S : perform variable substitutions on all .SH files (can mix with -f)
a0d0e21e
LW
1283 -U : undefine symbol:
1284 -U symbol symbol gets the value 'undef'
1285 -U symbol= symbol gets completely empty
02e93a22 1286 -A : manipulate symbol after the platform specific hints have been applied:
5f83a3e9 1287 -A symbol=value append " "value to symbol
02e93a22
JH
1288 -A append:symbol=value append value to symbol
1289 -A define:symbol=value define symbol to have value
02e93a22
JH
1290 -A clear:symbol define symbol to be ''
1291 -A define:symbol define symbol to be 'define'
1292 -A eval:symbol=value define symbol to be eval of value
1293 -A prepend:symbol=value prepend value to symbol
1294 -A undef:symbol define symbol to be 'undef'
1295 -A undef:symbol= define symbol to be ''
2304df62
AD
1296 -V : print version number and exit (with a zero status).
1297EOM
1298 exit 1
1299 ;;
1300esac
1301
dfe9444c
AD
1302: Sanity checks
1303case "$fastread$alldone" in
1304yescont|yesexit) ;;
1305*)
1306 if test ! -t 0; then
1307 echo "Say 'sh Configure', not 'sh <Configure'"
1308 exit 1
1309 fi
1310 ;;
1311esac
1312
2304df62
AD
1313exec 4>&1
1314case "$silent" in
1315true) exec 1>/dev/null;;
1316esac
1317
ecfc5424 1318: run the defines and the undefines, if any, but leave the file out there...
1aef975c
AD
1319touch optdef.sh
1320. ./optdef.sh
02e93a22
JH
1321: create the posthint manipulation script and leave the file out there...
1322touch posthint.sh
a0d0e21e 1323
2304df62 1324: set package name
85e6fe83 1325package=perl5
1aef975c
AD
1326first=`echo $package | sed -e 's/^\(.\).*/\1/'`
1327last=`echo $package | sed -e 's/^.\(.*\)/\1/'`
1328case "`echo AbyZ | tr '[:lower:]' '[:upper:]' 2>/dev/null`" in
1329ABYZ) spackage=`echo $first | tr '[:lower:]' '[:upper:]'`$last;;
1330*) spackage=`echo $first | tr '[a-z]' '[A-Z]'`$last;;
1331esac
2304df62 1332
2304df62
AD
1333: Some greps do not return status, grrr.
1334echo "grimblepritz" >grimble
1335if grep blurfldyick grimble >/dev/null 2>&1 ; then
1336 contains=contains
1337elif grep grimblepritz grimble >/dev/null 2>&1 ; then
1338 contains=grep
1339else
1340 contains=contains
1341fi
1342rm -f grimble
1343: the following should work in any shell
1344case "$contains" in
1345contains*)
1346 echo " "
1347 echo "AGH! Grep doesn't return a status. Attempting remedial action."
1348 cat >contains <<'EOSS'
1349grep "$1" "$2" >.greptmp && cat .greptmp && test -s .greptmp
1350EOSS
1351chmod +x contains
1352esac
1353
dfe9444c
AD
1354: Find the path to the source tree
1355case "$src" in
1356'') case "$0" in
b233458b
JH
1357 */*) src=`echo $0 | sed -e 's%/[^/][^/]*$%%'`
1358 case "$src" in
1359 /*) ;;
1360 *) src=`cd ../$src && pwd` ;;
1361 esac
1362 ;;
dfe9444c
AD
1363 *) src='.';;
1364 esac;;
1365esac
1366case "$src" in
1367'') src=/
1368 rsrc=/
1369 ;;
1370/*) rsrc="$src";;
1371*) rsrc="../$src";;
1372esac
1373if test -f $rsrc/Configure && \
1374 $contains "^package=$package$" $rsrc/Configure >/dev/null 2>&1
1375then
1376 : found it, so we are ok.
1377else
1378 rsrc=''
1379 for src in . .. ../.. ../../.. ../../../..; do
1380 if test -f ../$src/Configure && \
1381 $contains "^package=$package$" ../$src/Configure >/dev/null 2>&1
1382 then
1383 rsrc=../$src
1384 break
1385 fi
1386 done
1387fi
1388case "$rsrc" in
1389'')
1390 cat <<EOM >&4
1391
1392Sorry, I can't seem to locate the source dir for $package. Please start
1393Configure with an explicit path -- i.e. /some/path/Configure.
1394
1395EOM
1396 exit 1
1397 ;;
1398../.) rsrc='..';;
1399*)
1400 echo " "
1401 echo "Sources for $package found in \"$src\"." >&4
1402 ;;
1403esac
1404
1405: script used to extract .SH files with variable substitutions
1406cat >extract <<'EOS'
2000072c 1407CONFIGDOTSH=true
dfe9444c
AD
1408echo "Doing variable substitutions on .SH files..."
1409if test -f $src/MANIFEST; then
f7ab18e9 1410 set x `awk '{print $1}' <$src/MANIFEST | grep '\.SH$'`
dfe9444c
AD
1411else
1412 echo "(Looking for .SH files under the source directory.)"
1413 set x `(cd $src; find . -name "*.SH" -print)`
1414fi
1415shift
1416case $# in
14170) set x `(cd $src; echo *.SH)`; shift;;
1418esac
1419if test ! -f $src/$1; then
1420 shift
1421fi
1422mkdir_p='
1423name=$1;
1424create="";
1425while test $name; do
1426 if test ! -d "$name"; then
1427 create="$name $create";
1428 name=`echo $name | sed -e "s|^[^/]*$||"`;
1429 name=`echo $name | sed -e "s|\(.*\)/.*|\1|"`;
1430 else
1431 name="";
1432 fi;
1433done;
1434for file in $create; do
1435 mkdir $file;
1436done
1437'
1438for file in $*; do
1439 case "$src" in
1440 ".")
1441 case "$file" in
1442 */*)
1443 dir=`expr X$file : 'X\(.*\)/'`
1444 file=`expr X$file : 'X.*/\(.*\)'`
1445 (cd $dir && . ./$file)
1446 ;;
1447 *)
1448 . ./$file
1449 ;;
1450 esac
1451 ;;
1452 *)
1453 case "$file" in
1454 */*)
1455 dir=`expr X$file : 'X\(.*\)/'`
1456 file=`expr X$file : 'X.*/\(.*\)'`
1457 (set x $dir; shift; eval $mkdir_p)
1458 sh <$src/$dir/$file
1459 ;;
1460 *)
1461 sh <$src/$file
1462 ;;
1463 esac
1464 ;;
1465 esac
1466done
1467if test -f $src/config_h.SH; then
1468 if test ! -f config.h; then
1469 : oops, they left it out of MANIFEST, probably, so do it anyway.
1470 . $src/config_h.SH
1471 fi
1472fi
1473EOS
1474
1475: extract files and exit if asked to do so
1476case "$extractsh" in
1477true)
1478 case "$realsilent" in
1479 true) ;;
1480 *) exec 1>&4;;
1481 esac
1482 case "$config_sh" in
1483 '') config_sh='config.sh';;
1484 esac
1485 echo " "
1486 echo "Fetching answers from $config_sh..."
1487 cd ..
1488 . $config_sh
1489 test "$override" && . ./optdef.sh
1490 echo " "
1491 . UU/extract
1492 rm -rf UU
1493 echo "Done."
1494 exit 0
1495 ;;
1496esac
1497
1498: Eunice requires " " instead of "", can you believe it
1499echo " "
1500: Here we go...
1501echo "Beginning of configuration questions for $package."
1502
1503trap 'echo " "; test -d ../UU && rm -rf X $rmlist; exit 1' 1 2 3 15
1504
2304df62
AD
1505: first determine how to suppress newline on echo command
1506echo " "
1507echo "Checking echo to see how to suppress newlines..."
1508(echo "hi there\c" ; echo " ") >.echotmp
1509if $contains c .echotmp >/dev/null 2>&1 ; then
1510 echo "...using -n."
1511 n='-n'
1512 c=''
1513else
1514 cat <<'EOM'
1515...using \c
1516EOM
1517 n=''
1518 c='\c'
1519fi
1520echo $n "The star should be here-->$c"
1521echo '*'
1522rm -f .echotmp
1523
1524: Now test for existence of everything in MANIFEST
1525echo " "
dfe9444c 1526if test -f $rsrc/MANIFEST; then
2304df62 1527 echo "First let's make sure your kit is complete. Checking..." >&4
dfe9444c 1528 awk '$1 !~ /PACK[A-Z]+/ {print $1}' $rsrc/MANIFEST | split -50
2304df62 1529 rm -f missing
dfe9444c 1530 tmppwd=`pwd`
2304df62 1531 for filelist in x??; do
dfe9444c 1532 (cd $rsrc; ls `cat $tmppwd/$filelist` >/dev/null 2>>$tmppwd/missing)
2304df62
AD
1533 done
1534 if test -s missing; then
1535 cat missing >&4
1536 cat >&4 <<'EOM'
1537
1538THIS PACKAGE SEEMS TO BE INCOMPLETE.
1539
1540You have the option of continuing the configuration process, despite the
1541distinct possibility that your kit is damaged, by typing 'y'es. If you
1542do, don't blame me if something goes wrong. I advise you to type 'n'o
46193409 1543and contact the author (perlbug@perl.com).
2304df62
AD
1544
1545EOM
1546 echo $n "Continue? [n] $c" >&4
1547 read ans
1548 case "$ans" in
1549 y*)
1550 echo "Continuing..." >&4
1551 rm -f missing
1552 ;;
1553 *)
1554 echo "ABORTING..." >&4
1555 kill $$
1556 ;;
1557 esac
1558 else
dfe9444c 1559 echo "Looks good..."
2304df62
AD
1560 fi
1561else
1562 echo "There is no MANIFEST file. I hope your kit is complete !"
1563fi
1564rm -f missing x??
1565
5ff3f7a4
GS
1566echo " "
1567: Find the appropriate value for a newline for tr
1568if test -n "$DJGPP"; then
1569 trnl='\012'
1570fi
1571if test X"$trnl" = X; then
1572 case "`echo foo|tr '\n' x 2>/dev/null`" in
1573 foox) trnl='\n' ;;
1574 esac
1575fi
1576if test X"$trnl" = X; then
1577 case "`echo foo|tr '\012' x 2>/dev/null`" in
1578 foox) trnl='\012' ;;
1579 esac
1580fi
1581if test X"$trnl" = X; then
1582 cat <<EOM >&2
1583
1584$me: Fatal Error: cannot figure out how to translate newlines with 'tr'.
1585
1586EOM
1587 exit 1
1588fi
1589
2304df62
AD
1590: compute the number of columns on the terminal for proper question formatting
1591case "$COLUMNS" in
1592'') COLUMNS='80';;
1593esac
1594
1595: set up the echo used in my read
1596myecho="case \"\$xxxm\" in
1597'') echo $n \"\$rp $c\" >&4;;
1598*) case \"\$rp\" in
1599 '') echo $n \"[\$xxxm] $c\";;
1600 *)
1601 if test \`echo \"\$rp [\$xxxm] \" | wc -c\` -ge $COLUMNS; then
1602 echo \"\$rp\" >&4
1603 echo $n \"[\$xxxm] $c\" >&4
1604 else
1605 echo $n \"\$rp [\$xxxm] $c\" >&4
1606 fi
1607 ;;
1608 esac;;
1609esac"
1610
1611: now set up to do reads with possible shell escape and default assignment
1612cat <<EOSC >myread
28757baa 1613$startsh
2304df62
AD
1614xxxm=\$dflt
1615$myecho
1616ans='!'
1617case "\$fastread" in
1618yes) case "\$dflt" in
1619 '') ;;
1620 *) ans='';
1621 case "\$silent-\$rp" in
1622 true-) ;;
1623 *) echo " " >&4;;
1624 esac;;
1625 esac;;
1626*) case "\$silent" in
1627 true) case "\$rp" in
1628 '') ans='';;
1629 esac;;
1630 esac;;
1631esac
1632while expr "X\$ans" : "X!" >/dev/null; do
1633 read answ
1634 set x \$xxxm
1635 shift
dfe9444c 1636 aok=''; eval "ans=\\"\$answ\\"" && aok=y
2304df62 1637 case "\$answ" in
dfe9444c
AD
1638 "!")
1639 sh 1>&4
1640 echo " "
1641 $myecho
1642 ;;
1643 !*)
1644 set x \`expr "X\$ans" : "X!\(.*\)\$"\`
1645 shift
1646 sh 1>&4 -c "\$*"
1647 echo " "
1648 $myecho
1649 ;;
2304df62
AD
1650 "\$ans")
1651 case "\$ans" in
ecfc5424
AD
1652 \\&*)
1653 set x \`expr "X\$ans" : "X&\(.*\)\$"\`
1654 shift
1655 case "\$1" in
1656 -d)
1657 fastread=yes
40a7a20a 1658 echo "(OK, I'll run with -d after this question.)" >&4
ecfc5424
AD
1659 ;;
1660 -*)
40a7a20a 1661 echo "*** Sorry, \$1 not supported yet." >&4
ecfc5424
AD
1662 ;;
1663 esac
1664 $myecho
1665 ans=!
1666 ;;
2304df62
AD
1667 esac;;
1668 *)
1669 case "\$aok" in
1670 y)
1671 echo "*** Substitution done -- please confirm."
1672 xxxm="\$ans"
c9795ab7 1673 ans=\`echo $n "\$ans$c" | tr '$trnl' ' '\`
2304df62
AD
1674 xxxm="\$ans"
1675 ans=!
1676 ;;
1677 *)
1678 echo "*** Error -- try again."
1679 ans=!
1680 ;;
1681 esac
1682 $myecho
1683 ;;
1684 esac
1685 case "\$ans\$xxxm\$nostick" in
1686 '')
1687 ans=!
1688 $myecho
1689 ;;
1690 esac
1691done
1692case "\$ans" in
1693'') ans="\$xxxm";;
1694esac
1695EOSC
1696
1697: create .config dir to save info across Configure sessions
1698test -d ../.config || mkdir ../.config
1699cat >../.config/README <<EOF
1700This directory created by Configure to save information that should
dfe9444c 1701persist across sessions for $package.
2304df62
AD
1702
1703You may safely delete it if you wish.
1704EOF
1705
1706: general instructions
1707needman=true
1708firsttime=true
760ac839 1709user=`(logname) 2>/dev/null`
dfe9444c
AD
1710case "$user" in
1711'') user=`whoami 2>&1`;;
760ac839 1712esac
2304df62
AD
1713if $contains "^$user\$" ../.config/instruct >/dev/null 2>&1; then
1714 firsttime=false
1715 echo " "
1716 rp='Would you like to see the instructions?'
1717 dflt=n
1718 . ./myread
1719 case "$ans" in
1720 [yY]*) ;;
1721 *) needman=false;;
1722 esac
1723fi
1724if $needman; then
1725 cat <<EOH
4e2a5f63 1726
2304df62 1727This installation shell script will examine your system and ask you questions
a0d0e21e 1728to determine how the perl5 package should be installed. If you get
2304df62
AD
1729stuck on a question, you may use a ! shell escape to start a subshell or
1730execute a command. Many of the questions will have default answers in square
1731brackets; typing carriage return will give you the default.
1732
1733On some of the questions which ask for file or directory names you are allowed
1734to use the ~name construct to specify the login directory belonging to "name",
1735even if you don't have a shell which knows about that. Questions where this is
1736allowed will be marked "(~name ok)".
1737
1738EOH
1739 rp=''
1740 dflt='Type carriage return to continue'
1741 . ./myread
1742 cat <<'EOH'
1743
1744The prompter used in this script allows you to use shell variables and
1745backticks in your answers. You may use $1, $2, etc... to refer to the words
1746in the default answer, as if the default line was a set of arguments given to a
1747script shell. This means you may also use $* to repeat the whole default line,
1748so you do not have to re-type everything to add something to the default.
1749
1750Everytime there is a substitution, you will have to confirm. If there is an
1751error (e.g. an unmatched backtick), the default answer will remain unchanged
1752and you will be prompted again.
1753
1754If you are in a hurry, you may run 'Configure -d'. This will bypass nearly all
1755the questions and use the computed defaults (or the previous answers if there
1756was already a config.sh file). Type 'Configure -h' for a list of options.
ecfc5424 1757You may also start interactively and then answer '& -d' at any prompt to turn
dfe9444c 1758on the non-interactive behaviour for the remainder of the execution.
2304df62
AD
1759
1760EOH
1761 . ./myread
1762 cat <<EOH
1763
1764Much effort has been expended to ensure that this shell script will run on any
1765Unix system. If despite that it blows up on yours, your best bet is to edit
40000a8c
AD
1766Configure and run it again. If you can't run Configure for some reason,
1767you'll have to generate a config.sh file by hand. Whatever problems you
46193409 1768have, let me (perlbug@perl.com) know how I blew it.
2304df62
AD
1769
1770This installation script affects things in two ways:
1771
17721) it may do direct variable substitutions on some of the files included
1773 in this kit.
17742) it builds a config.h file for inclusion in C programs. You may edit
1775 any of these files as the need arises after running this script.
1776
1777If you make a mistake on a question, there is no easy way to back up to it
1778currently. The easiest thing to do is to edit config.sh and rerun all the SH
1779files. Configure will offer to let you do this before it runs the SH files.
1780
1781EOH
1782 dflt='Type carriage return to continue'
1783 . ./myread
1784 case "$firsttime" in
1785 true) echo $user >>../.config/instruct;;
1786 esac
1787fi
1788
2304df62
AD
1789: find out where common programs are
1790echo " "
1791echo "Locating common programs..." >&4
1792cat <<EOSC >loc
1793$startsh
1794case \$# in
17950) exit 1;;
1796esac
1797thing=\$1
1798shift
1799dflt=\$1
1800shift
1801for dir in \$*; do
1802 case "\$thing" in
1803 .)
1804 if test -d \$dir/\$thing; then
1805 echo \$dir
1806 exit 0
1807 fi
1808 ;;
1809 *)
a0d0e21e 1810 for thisthing in \$dir/\$thing; do
ecfc5424 1811 : just loop through to pick last item
a0d0e21e 1812 done
25f94b33 1813 if test -f \$thisthing; then
a0d0e21e 1814 echo \$thisthing
2304df62
AD
1815 exit 0
1816 elif test -f \$dir/\$thing.exe; then
c4f23d77
AD
1817 if test -n "$DJGPP"; then
1818 echo \$dir/\$thing.exe
1819 else
1820 : on Eunice apparently
1821 echo \$dir/\$thing
1822 fi
2304df62
AD
1823 exit 0
1824 fi
1825 ;;
1826 esac
1827done
1828echo \$dflt
1829exit 1
1830EOSC
1831chmod +x loc
1832$eunicefix loc
1833loclist="
1834awk
1835cat
ecfc5424 1836comm
2304df62
AD
1837cp
1838echo
1839expr
1840grep
a0d0e21e 1841ls
dfe9444c 1842make
2304df62 1843mkdir
2304df62
AD
1844rm
1845sed
1846sort
85e6fe83 1847touch
2304df62
AD
1848tr
1849uniq
1850"
1851trylist="
1852Mcc
dfe9444c 1853ar
2304df62
AD
1854byacc
1855cpp
1856csh
1857date
1858egrep
8ff267be 1859gzip
2c7991dc 1860less
8ff267be 1861ln
2c7991dc 1862more
693762b4 1863nm
2304df62 1864nroff
aaacdc8b 1865perl
2c7991dc 1866pg
2304df62
AD
1867test
1868uname
8ff267be 1869zip
2304df62 1870"
8e07c86e 1871pth=`echo $PATH | sed -e "s/$p_/ /g"`
2304df62
AD
1872pth="$pth /lib /usr/lib"
1873for file in $loclist; do
dfe9444c
AD
1874 eval xxx=\$$file
1875 case "$xxx" in
1876 /*|?:[\\/]*)
1877 if test -f "$xxx"; then
1878 : ok
1879 else
1880 echo "WARNING: no $xxx -- ignoring your setting for $file." >&4
1881 xxx=`./loc $file $file $pth`
1882 fi
1883 ;;
1884 '') xxx=`./loc $file $file $pth`;;
1885 *) xxx=`./loc $xxx $xxx $pth`;;
1886 esac
2304df62
AD
1887 eval $file=$xxx
1888 eval _$file=$xxx
1889 case "$xxx" in
1890 /*)
1891 echo $file is in $xxx.
1892 ;;
8e07c86e
AD
1893 ?:[\\/]*)
1894 echo $file is in $xxx.
1895 ;;
2304df62 1896 *)
25f94b33
AD
1897 echo "I don't know where '$file' is, and my life depends on it." >&4
1898 echo "Go find a public domain implementation or fix your PATH setting!" >&4
4633a7c4 1899 exit 1
2304df62
AD
1900 ;;
1901 esac
1902done
1903echo " "
1904echo "Don't worry if any of the following aren't found..."
1905say=offhand
1906for file in $trylist; do
dfe9444c
AD
1907 eval xxx=\$$file
1908 case "$xxx" in
1909 /*|?:[\\/]*)
1910 if test -f "$xxx"; then
1911 : ok
1912 else
1913 echo "WARNING: no $xxx -- ignoring your setting for $file." >&4
1914 xxx=`./loc $file $file $pth`
1915 fi
1916 ;;
1917 '') xxx=`./loc $file $file $pth`;;
1918 *) xxx=`./loc $xxx $xxx $pth`;;
1919 esac
2304df62
AD
1920 eval $file=$xxx
1921 eval _$file=$xxx
1922 case "$xxx" in
1923 /*)
1924 echo $file is in $xxx.
1925 ;;
8e07c86e
AD
1926 ?:[\\/]*)
1927 echo $file is in $xxx.
1928 ;;
2304df62
AD
1929 *)
1930 echo "I don't see $file out there, $say."
1931 say=either
1932 ;;
1933 esac
1934done
1935case "$egrep" in
1936egrep)
1937 echo "Substituting grep for egrep."
1938 egrep=$grep
1939 ;;
1940esac
8ff267be 1941case "$ln" in
1942ln)
1943 echo "Substituting cp for ln."
1944 ln=$cp
1945 ;;
1946esac
2304df62
AD
1947case "$test" in
1948test)
1949 echo "Hopefully test is built into your sh."
1950 ;;
1951*)
ecfc5424 1952 if `sh -c "PATH= test true" >/dev/null 2>&1`; then
2304df62
AD
1953 echo "Using the test built into your sh."
1954 test=test
1955 _test=test
1956 fi
1957 ;;
1958esac
1959case "$echo" in
1960echo)
1961 echo "Hopefully echo is built into your sh."
1962 ;;
1963'') ;;
1964*)
1965 echo " "
1966echo "Checking compatibility between $echo and builtin echo (if any)..." >&4
1967 $echo $n "hi there$c" >foo1
1968 echo $n "hi there$c" >foo2
1969 if cmp foo1 foo2 >/dev/null 2>&1; then
1970 echo "They are compatible. In fact, they may be identical."
1971 else
1972 case "$n" in
1973 '-n') n='' c='\c';;
1974 *) n='-n' c='';;
1975 esac
1976 cat <<FOO
1977They are not compatible! You are probably running ksh on a non-USG system.
1978I'll have to use $echo instead of the builtin, since Bourne shell doesn't
1979have echo built in and we may have to run some Bourne shell scripts. That
1980means I'll have to use '$n$c' to suppress newlines now. Life is ridiculous.
1981
1982FOO
1983 $echo $n "The star should be here-->$c"
1984 $echo "*"
1985 fi
1986 $rm -f foo1 foo2
1987 ;;
1988esac
1989
a0d0e21e
LW
1990: determine whether symbolic links are supported
1991echo " "
1992$touch blurfl
1993if $ln -s blurfl sym > /dev/null 2>&1 ; then
1994 echo "Symbolic links are supported." >&4
1995 lns="$ln -s"
1996else
1997 echo "Symbolic links are NOT supported." >&4
1998 lns="$ln"
1999fi
2000$rm -f blurfl sym
2001
ecfc5424
AD
2002: see whether [:lower:] and [:upper:] are supported character classes
2003echo " "
ecfc5424
AD
2004case "`echo AbyZ | $tr '[:lower:]' '[:upper:]' 2>/dev/null`" in
2005ABYZ)
2006 echo "Good, your tr supports [:lower:] and [:upper:] to convert case." >&4
2007 up='[:upper:]'
2008 low='[:lower:]'
2009 ;;
28e8609d
JH
2010*) # There is a discontinuity in EBCDIC between 'I' and 'J'
2011 # (0xc9 and 0xd1), therefore that is a nice testing point.
2012 if test "X$up" = X -o "X$low" = X; then
3eaeeeae 2013 case "`echo IJ | $tr '[I-J]' '[i-j]' 2>/dev/null`" in
28e8609d
JH
2014 ij) up='[A-Z]'
2015 low='[a-z]'
2016 ;;
2017 esac
2018 fi
2019 if test "X$up" = X -o "X$low" = X; then
3eaeeeae 2020 case "`echo IJ | $tr I-J i-j 2>/dev/null`" in
28e8609d
JH
2021 ij) up='A-Z'
2022 low='a-z'
2023 ;;
2024 esac
2025 fi
2026 if test "X$up" = X -o "X$low" = X; then
2027 case "`echo IJ | od -x 2>/dev/null`" in
2028 *C9D1*|*c9d1*)
2029 echo "Hey, this might be EBCDIC." >&4
2030 if test "X$up" = X -o "X$low" = X; then
5ff3f7a4 2031 case "`echo IJ | $tr '[A-IJ-RS-Z]' '[a-ij-rs-z]' 2>/dev/null`" in
28e8609d
JH
2032 ij) up='[A-IJ-RS-Z]'
2033 low='[a-ij-rs-z]'
2034 ;;
2035 esac
2036 fi
2037 if test "X$up" = X -o "X$low" = X; then
5ff3f7a4 2038 case "`echo IJ | $tr A-IJ-RS-Z a-ij-rs-z 2>/dev/null`" in
28e8609d
JH
2039 ij) up='A-IJ-RS-Z'
2040 low='a-ij-rs-z'
2041 ;;
2042 esac
2043 fi
2044 ;;
2045 esac
2046 fi
2047esac
3eaeeeae 2048case "`echo IJ | $tr \"$up\" \"$low\" 2>/dev/null`" in
28e8609d
JH
2049ij)
2050 echo "Using $up and $low to convert case." >&4
2051 ;;
ecfc5424 2052*)
28e8609d
JH
2053 echo "I don't know how to translate letters from upper to lower case." >&4
2054 echo "Your tr is not acting any way I know of." >&4
2055 exit 1
2056 ;;
ecfc5424
AD
2057esac
2058: set up the translation script tr, must be called with ./tr of course
2059cat >tr <<EOSC
2060$startsh
2061case "\$1\$2" in
2062'[A-Z][a-z]') exec $tr '$up' '$low';;
2063'[a-z][A-Z]') exec $tr '$low' '$up';;
2064esac
2065exec $tr "\$@"
2066EOSC
2067chmod +x tr
2068$eunicefix tr
2069
2304df62
AD
2070: Try to determine whether config.sh was made on this system
2071case "$config_sh" in
2072'')
43999f95
JH
2073myuname=`$uname -a 2>/dev/null`
2074$test -z "$myuname" && myuname=`hostname 2>/dev/null`
28e8609d
JH
2075# tr '[A-Z]' '[a-z]' would not work in EBCDIC
2076# because the A-Z/a-z are not consecutive.
a0d0e21e 2077myuname=`echo $myuname | $sed -e 's/^[^=]*=//' -e 's/\///g' | \
3eaeeeae 2078 ./tr '[A-Z]' '[a-z]' | $tr $trnl ' '`
1aef975c 2079newmyuname="$myuname"
2304df62 2080dflt=n
16d20bd9
AD
2081case "$knowitall" in
2082'')
2083 if test -f ../config.sh; then
2084 if $contains myuname= ../config.sh >/dev/null 2>&1; then
2085 eval "`grep myuname= ../config.sh`"
2086 fi
2087 if test "X$myuname" = "X$newmyuname"; then
2088 dflt=y
2089 fi
2304df62 2090 fi
16d20bd9
AD
2091 ;;
2092*) dflt=y;;
2093esac
2304df62
AD
2094
2095: Get old answers from old config file if Configure was run on the
2096: same system, otherwise use the hints.
2097hint=default
2098cd ..
2099if test -f config.sh; then
16d20bd9
AD
2100 echo " "
2101 rp="I see a config.sh file. Shall I use it to set the defaults?"
2304df62
AD
2102 . UU/myread
2103 case "$ans" in
2104 n*|N*) echo "OK, I'll ignore it."; mv config.sh config.sh.old;;
2105 *) echo "Fetching default answers from your old config.sh file..." >&4
ecfc5424
AD
2106 tmp_n="$n"
2107 tmp_c="$c"
85cad39c 2108 tmp_sh="$sh"
2304df62
AD
2109 . ./config.sh
2110 cp config.sh UU
ecfc5424
AD
2111 n="$tmp_n"
2112 c="$tmp_c"
85cad39c 2113 : Older versions did not always set $sh. Catch re-use of such
2114 : an old config.sh.
2115 case "$sh" in
2116 '') sh="$tmp_sh" ;;
2117 esac
2304df62
AD
2118 hint=previous
2119 ;;
2120 esac
2121fi
2122if test ! -f config.sh; then
2123 $cat <<EOM
2124
4e2a5f63
AD
2125First time through, eh? I have some defaults handy for some systems
2126that need some extra help getting the Configure answers right:
2304df62
AD
2127
2128EOM
dfe9444c 2129 (cd $src/hints; ls -C *.sh) | $sed 's/\.sh/ /g' >&4
2304df62
AD
2130 dflt=''
2131 : Half the following guesses are probably wrong... If you have better
46193409 2132 : tests or hints, please send them to perlbug@perl.com
2304df62 2133 : The metaconfig authors would also appreciate a copy...
a0d0e21e 2134 $test -f /irix && osname=irix
85e6fe83
LW
2135 $test -f /xenix && osname=sco_xenix
2136 $test -f /dynix && osname=dynix
2137 $test -f /dnix && osname=dnix
5f05dabc 2138 $test -f /lynx.os && osname=lynxos
2139 $test -f /unicos && osname=unicos && osvers=`$uname -r`
c71a9cee 2140 $test -f /unicosmk && osname=unicosmk && osvers=`$uname -r`
7a4c00b4 2141 $test -f /unicosmk.ar && osname=unicosmk && osvers=`$uname -r`
85e6fe83 2142 $test -f /bin/mips && /bin/mips && osname=mips
ecfc5424
AD
2143 $test -d /NextApps && set X `hostinfo | grep 'NeXT Mach.*:' | \
2144 $sed -e 's/://' -e 's/\./_/'` && osname=next && osvers=$4
a0d0e21e
LW
2145 $test -d /usr/apollo/bin && osname=apollo
2146 $test -f /etc/saf/_sactab && osname=svr4
85e6fe83 2147 $test -d /usr/include/minix && osname=minix
e060872b 2148 if $test -d /MachTen -o -d /MachTen_Folder; then
dfe9444c 2149 osname=machten
4633a7c4 2150 if $test -x /sbin/version; then
dfe9444c 2151 osvers=`/sbin/version | $awk '{print $2}' |
4633a7c4
LW
2152 $sed -e 's/[A-Za-z]$//'`
2153 elif $test -x /usr/etc/version; then
dfe9444c 2154 osvers=`/usr/etc/version | $awk '{print $2}' |
4633a7c4
LW
2155 $sed -e 's/[A-Za-z]$//'`
2156 else
2157 osvers="$2.$3"
2158 fi
2159 fi
aaacdc8b
GS
2160
2161 $test -f /sys/posix.dll &&
2162 $test -f /usr/bin/what &&
2163 set X `/usr/bin/what /sys/posix.dll` &&
2164 $test "$3" = UWIN &&
2165 osname=uwin &&
2166 osvers="$5"
2167
2304df62
AD
2168 if $test -f $uname; then
2169 set X $myuname
2170 shift
2171
2304df62 2172 case "$5" in
85e6fe83 2173 fps*) osname=fps ;;
2304df62
AD
2174 mips*)
2175 case "$4" in
85e6fe83
LW
2176 umips) osname=umips ;;
2177 *) osname=mips ;;
2304df62 2178 esac;;
85e6fe83
LW
2179 [23]100) osname=mips ;;
2180 next*) osname=next ;;
ecfc5424 2181 i386*)
c6912327
JH
2182 tmp=`/bin/uname -X 2>/dev/null|awk '/3\.2v[45]/{ print $(NF) }'`
2183 if $test "$tmp" != "" -a "$3" = "3.2" -a -f '/etc/systemid'; then
619ffc2b
JH
2184 osname='sco'
2185 osvers=$tmp
2186 elif $test -f /etc/kconfig; then
ecfc5424 2187 osname=isc
bd628c73 2188 if test "$lns" = "$ln -s"; then
a0d0e21e
LW
2189 osvers=4
2190 elif $contains _SYSV3 /usr/include/stdio.h > /dev/null 2>&1 ; then
2191 osvers=3
2304df62 2192 elif $contains _POSIX_SOURCE /usr/include/stdio.h > /dev/null 2>&1 ; then
a0d0e21e 2193 osvers=2
ecfc5424
AD
2194 fi
2195 fi
2000072c 2196 tmp=''
ecfc5424 2197 ;;
c4f23d77
AD
2198 pc*)
2199 if test -n "$DJGPP"; then
2200 osname=dos
2201 osvers=djgpp
2202 fi
2203 ;;
2304df62
AD
2204 esac
2205
2206 case "$1" in
a0d0e21e
LW
2207 aix) osname=aix
2208 tmp=`( (oslevel) 2>/dev/null || echo "not found") 2>&1`
2209 case "$tmp" in
1aef975c 2210 'not found') osvers="$4"."$3" ;;
a0d0e21e
LW
2211 '<3240'|'<>3240') osvers=3.2.0 ;;
2212 '=3240'|'>3240'|'<3250'|'<>3250') osvers=3.2.4 ;;
2213 '=3250'|'>3250') osvers=3.2.5 ;;
1aef975c 2214 *) osvers=$tmp;;
a0d0e21e
LW
2215 esac
2216 ;;
aaacdc8b
GS
2217 bsd386) osname=bsd386
2218 osvers=`$uname -r`
2219 ;;
2220 cygwin*) osname=cygwin
2221 osvers="$3"
2222 ;;
23f87696
SZ
2223 *dc.osx) osname=dcosx
2224 osvers="$3"
2225 ;;
a0d0e21e
LW
2226 dnix) osname=dnix
2227 osvers="$3"
2228 ;;
2229 domainos) osname=apollo
2230 osvers="$3"
2231 ;;
2232 dgux) osname=dgux
2233 osvers="$3"
2234 ;;
760ac839 2235 dynixptx*) osname=dynixptx
e58e581d 2236 osvers=`echo "$4"|sed 's/^v//'`
760ac839 2237 ;;
a0d0e21e
LW
2238 freebsd) osname=freebsd
2239 osvers="$3" ;;
2240 genix) osname=genix ;;
2241 hp*) osname=hpux
bfb7748a 2242 osvers=`echo "$3" | $sed 's,.*\.\([0-9]*\.[0-9]*\),\1,'`
a0d0e21e 2243 ;;
a78b0d02 2244 irix*) osname=irix
a0d0e21e
LW
2245 case "$3" in
2246 4*) osvers=4 ;;
2247 5*) osvers=5 ;;
ecfc5424 2248 *) osvers="$3" ;;
a0d0e21e
LW
2249 esac
2250 ;;
2251 linux) osname=linux
2252 case "$3" in
a0d0e21e
LW
2253 *) osvers="$3" ;;
2254 esac
2255 ;;
28e8609d
JH
2256 MiNT) osname=mint
2257 ;;
2258 netbsd*) osname=netbsd
ecfc5424
AD
2259 osvers="$3"
2260 ;;
4e81affe
MM
2261 news-os) osvers="$3"
2262 case "$3" in
2263 4*) osname=newsos4 ;;
2264 *) osname=newsos ;;
2265 esac
2266 ;;
aaacdc8b
GS
2267 next*) osname=next ;;
2268 POSIX-BC | posix-bc ) osname=posix-bc
2269 osvers="$3"
a0d0e21e 2270 ;;
ae3afa4e
TH
2271 powerux | power_ux | powermax_os | powermaxos | \
2272 powerunix | power_unix) osname=powerux
2273 osvers="$3"
2274 ;;
aaacdc8b
GS
2275 qnx) osname=qnx
2276 osvers="$4"
2277 ;;
a0d0e21e
LW
2278 solaris) osname=solaris
2279 case "$3" in
2280 5*) osvers=`echo $3 | $sed 's/^5/2/g'` ;;
ecfc5424 2281 *) osvers="$3" ;;
a0d0e21e
LW
2282 esac
2283 ;;
85e6fe83
LW
2284 sunos) osname=sunos
2285 case "$3" in
85e6fe83
LW
2286 5*) osname=solaris
2287 osvers=`echo $3 | $sed 's/^5/2/g'` ;;
a0d0e21e 2288 *) osvers="$3" ;;
2304df62
AD
2289 esac
2290 ;;
a0d0e21e 2291 titanos) osname=titanos
85e6fe83 2292 case "$3" in
a0d0e21e
LW
2293 1*) osvers=1 ;;
2294 2*) osvers=2 ;;
2295 3*) osvers=3 ;;
2296 4*) osvers=4 ;;
ecfc5424 2297 *) osvers="$3" ;;
2304df62
AD
2298 esac
2299 ;;
85e6fe83 2300 ultrix) osname=ultrix
ecfc5424 2301 osvers="$3"
2304df62 2302 ;;
28757baa 2303 osf1|mls+) case "$5" in
fed7345c
AD
2304 alpha)
2305 osname=dec_osf
313489a2 2306 osvers=`echo "$3" | sed 's/^[xvt]//'`
ecfc5424
AD
2307 ;;
2308 hp*) osname=hp_osf1 ;;
2309 mips) osname=mips_osf1 ;;
85e6fe83
LW
2310 esac
2311 ;;
0337d152
BG
2312 unixware) osname=svr5
2313 osvers="$4"
2314 ;;
2315 uts) osname=uts
a0d0e21e
LW
2316 osvers="$3"
2317 ;;
85e6fe83 2318 $2) case "$osname" in
2304df62 2319 *isc*) ;;
a0d0e21e 2320 *freebsd*) ;;
5f05dabc 2321 svr*)
a0d0e21e
LW
2322 : svr4.x or possibly later
2323 case "svr$3" in
2324 ${osname}*)
2325 osname=svr$3
2326 osvers=$4
2327 ;;
2328 esac
2329 case "$osname" in
2330 svr4.0)
2331 : Check for ESIX
2332 if test -f /stand/boot ; then
2333 eval `grep '^INITPROG=[a-z/0-9]*$' /stand/boot`
ecfc5424
AD
2334 if test -n "$INITPROG" -a -f "$INITPROG"; then
2335 isesix=`strings -a $INITPROG|grep 'ESIX SYSTEM V/386 Release 4.0'`
2336 if test -n "$isesix"; then
a0d0e21e
LW
2337 osname=esix4
2338 fi
2339 fi
2340 fi
2341 ;;
2342 esac
2343 ;;
2304df62 2344 *) if test -f /etc/systemid; then
a0d0e21e
LW
2345 osname=sco
2346 set `echo $3 | $sed 's/\./ /g'` $4
c4f23d77 2347 if $test -f $src/hints/sco_$1_$2_$3.sh; then
85e6fe83 2348 osvers=$1.$2.$3
c4f23d77 2349 elif $test -f $src/hints/sco_$1_$2.sh; then
85e6fe83 2350 osvers=$1.$2
c4f23d77 2351 elif $test -f $src/hints/sco_$1.sh; then
85e6fe83 2352 osvers=$1
2304df62 2353 fi
a0d0e21e
LW
2354 else
2355 case "$osname" in
2356 '') : Still unknown. Probably a generic Sys V.
2357 osname="sysv"
2358 osvers="$3"
2359 ;;
2360 esac
2304df62
AD
2361 fi
2362 ;;
2363 esac
2364 ;;
a0d0e21e
LW
2365 *) case "$osname" in
2366 '') : Still unknown. Probably a generic BSD.
2367 osname="$1"
2368 osvers="$3"
2369 ;;
2370 esac
2371 ;;
2304df62
AD
2372 esac
2373 else
dfe9444c
AD
2374 if test -f /vmunix -a -f $src/hints/news_os.sh; then
2375 (what /vmunix | UU/tr '[A-Z]' '[a-z]') > UU/kernel.what 2>&1
2376 if $contains news-os UU/kernel.what >/dev/null 2>&1; then
2377 osname=news_os
2304df62 2378 fi
dfe9444c 2379 $rm -f UU/kernel.what
8e07c86e
AD
2380 elif test -d c:/.; then
2381 set X $myuname
2382 osname=os2
2383 osvers="$5"
2304df62
AD
2384 fi
2385 fi
85e6fe83 2386
a0d0e21e
LW
2387 : Now look for a hint file osname_osvers, unless one has been
2388 : specified already.
2389 case "$hintfile" in
2390 ''|' ')
ecfc5424 2391 file=`echo "${osname}_${osvers}" | $sed -e 's@\.@_@g' -e 's@_$@@'`
a0d0e21e 2392 : Also try without trailing minor version numbers.
ecfc5424
AD
2393 xfile=`echo $file | $sed -e 's@_[^_]*$@@'`
2394 xxfile=`echo $xfile | $sed -e 's@_[^_]*$@@'`
2395 xxxfile=`echo $xxfile | $sed -e 's@_[^_]*$@@'`
2396 xxxxfile=`echo $xxxfile | $sed -e 's@_[^_]*$@@'`
a0d0e21e
LW
2397 case "$file" in
2398 '') dflt=none ;;
2399 *) case "$osvers" in
2400 '') dflt=$file
2401 ;;
dfe9444c 2402 *) if $test -f $src/hints/$file.sh ; then
a0d0e21e 2403 dflt=$file
dfe9444c 2404 elif $test -f $src/hints/$xfile.sh ; then
a0d0e21e 2405 dflt=$xfile
dfe9444c 2406 elif $test -f $src/hints/$xxfile.sh ; then
a0d0e21e 2407 dflt=$xxfile
dfe9444c 2408 elif $test -f $src/hints/$xxxfile.sh ; then
a0d0e21e 2409 dflt=$xxxfile
dfe9444c 2410 elif $test -f $src/hints/$xxxxfile.sh ; then
a0d0e21e 2411 dflt=$xxxxfile
dfe9444c 2412 elif $test -f "$src/hints/${osname}.sh" ; then
a0d0e21e
LW
2413 dflt="${osname}"
2414 else
2415 dflt=none
2416 fi
2417 ;;
2418 esac
85e6fe83
LW
2419 ;;
2420 esac
4e2a5f63
AD
2421 if $test -f Policy.sh ; then
2422 case "$dflt" in
2423 *Policy*) ;;
2424 none) dflt="Policy" ;;
2425 *) dflt="Policy $dflt" ;;
2426 esac
2427 fi
85e6fe83 2428 ;;
a0d0e21e 2429 *)
ecfc5424 2430 dflt=`echo $hintfile | $sed 's/\.sh$//'`
a0d0e21e 2431 ;;
2304df62 2432 esac
1aef975c 2433
4e2a5f63
AD
2434 if $test -f Policy.sh ; then
2435 $cat <<EOM
2436
2437There's also a Policy hint file available, which should make the
2438site-specific (policy) questions easier to answer.
2439EOM
2440
2441 fi
2442
2304df62
AD
2443 $cat <<EOM
2444
2445You may give one or more space-separated answers, or "none" if appropriate.
4e2a5f63 2446A well-behaved OS will have no hints, so answering "none" or just "Policy"
a3635516 2447is a good thing. DO NOT give a wrong version or a wrong OS.
2304df62
AD
2448
2449EOM
4e2a5f63 2450
2304df62 2451 rp="Which of these apply, if any?"
dfe9444c 2452 . UU/myread
85e6fe83
LW
2453 tans=$ans
2454 for file in $tans; do
4e2a5f63
AD
2455 if $test X$file = XPolicy -a -f Policy.sh; then
2456 . Policy.sh
2457 $cat Policy.sh >> UU/config.sh
2458 elif $test -f $src/hints/$file.sh; then
dfe9444c
AD
2459 . $src/hints/$file.sh
2460 $cat $src/hints/$file.sh >> UU/config.sh
85e6fe83 2461 elif $test X$tans = X -o X$tans = Xnone ; then
2304df62
AD
2462 : nothing
2463 else
85e6fe83
LW
2464 : Give one chance to correct a possible typo.
2465 echo "$file.sh does not exist"
2466 dflt=$file
2467 rp="hint to use instead?"
dfe9444c 2468 . UU/myread
85e6fe83 2469 for file in $ans; do
dfe9444c
AD
2470 if $test -f "$src/hints/$file.sh"; then
2471 . $src/hints/$file.sh
2472 $cat $src/hints/$file.sh >> UU/config.sh
85e6fe83
LW
2473 elif $test X$ans = X -o X$ans = Xnone ; then
2474 : nothing
2475 else
2476 echo "$file.sh does not exist -- ignored."
2477 fi
2478 done
2304df62
AD
2479 fi
2480 done
85e6fe83 2481
2304df62 2482 hint=recommended
85e6fe83 2483 : Remember our hint file for later.
dfe9444c 2484 if $test -f "$src/hints/$file.sh" ; then
a0d0e21e 2485 hintfile="$file"
85e6fe83 2486 else
a0d0e21e 2487 hintfile=''
85e6fe83 2488 fi
2304df62
AD
2489fi
2490cd UU
2491;;
2492*)
2493 echo " "
2494 echo "Fetching default answers from $config_sh..." >&4
ecfc5424
AD
2495 tmp_n="$n"
2496 tmp_c="$c"
2304df62
AD
2497 cd ..
2498 cp $config_sh config.sh 2>/dev/null
a78b0d02 2499 chmod +w config.sh
2304df62
AD
2500 . ./config.sh
2501 cd UU
2502 cp ../config.sh .
ecfc5424
AD
2503 n="$tmp_n"
2504 c="$tmp_c"
2304df62
AD
2505 hint=previous
2506 ;;
2507esac
1aef975c
AD
2508test "$override" && . ./optdef.sh
2509myuname="$newmyuname"
2304df62
AD
2510
2511: Restore computed paths
2512for file in $loclist $trylist; do
2513 eval $file="\$_$file"
2514done
2515
85e6fe83 2516cat << EOM
a0d0e21e 2517
85e6fe83 2518Configure uses the operating system name and version to set some defaults.
ecfc5424
AD
2519The default value is probably right if the name rings a bell. Otherwise,
2520since spelling matters for me, either accept the default or answer "none"
2521to leave it blank.
a0d0e21e 2522
85e6fe83 2523EOM
85e6fe83 2524case "$osname" in
a0d0e21e 2525 ''|' ')
85e6fe83 2526 case "$hintfile" in
a0d0e21e 2527 ''|' '|none) dflt=none ;;
ecfc5424 2528 *) dflt=`echo $hintfile | $sed -e 's/\.sh$//' -e 's/_.*$//'` ;;
85e6fe83
LW
2529 esac
2530 ;;
2531 *) dflt="$osname" ;;
2532esac
2533rp="Operating system name?"
2534. ./myread
2535case "$ans" in
ecfc5424
AD
2536none) osname='' ;;
2537*) osname=`echo "$ans" | $sed -e 's/[ ][ ]*/_/g' | ./tr '[A-Z]' '[a-z]'`;;
85e6fe83 2538esac
8ff267be 2539echo " "
2540case "$osvers" in
2541 ''|' ')
2542 case "$hintfile" in
2543 ''|' '|none) dflt=none ;;
2544 *) dflt=`echo $hintfile | $sed -e 's/\.sh$//' -e 's/^[^_]*//'`
2545 dflt=`echo $dflt | $sed -e 's/^_//' -e 's/_/./g'`
2546 case "$dflt" in
2547 ''|' ') dflt=none ;;
2548 esac
2549 ;;
2550 esac
2551 ;;
2552 *) dflt="$osvers" ;;
2553esac
2554rp="Operating system version?"
2555. ./myread
2556case "$ans" in
2557none) osvers='' ;;
2558*) osvers="$ans" ;;
2559esac
2560
02e93a22
JH
2561
2562. ./posthint.sh
2563
2304df62 2564: who configured the system
59b83a6f 2565cf_time=`LC_ALL=C; LANGUAGE=C; export LC_ALL; export LANGUAGE; $date 2>&1`
8ff267be 2566cf_by=`(logname) 2>/dev/null`
dfe9444c
AD
2567case "$cf_by" in
2568"")
8ff267be 2569 cf_by=`(whoami) 2>/dev/null`
dfe9444c
AD
2570 case "$cf_by" in
2571 "") cf_by=unknown ;;
8ff267be 2572 esac ;;
2573esac
2304df62 2574
dfe9444c
AD
2575: set up the script used to warn in case of inconsistency
2576cat <<EOS >whoa
2577$startsh
2578EOS
2579cat <<'EOSC' >>whoa
2580dflt=y
2581echo " "
2582echo "*** WHOA THERE!!! ***" >&4
2583echo " The $hint value for \$$var on this machine was \"$was\"!" >&4
2584rp=" Keep the $hint value?"
2585. ./myread
2586case "$ans" in
2587y) td=$was; tu=$was;;
2588esac
2589EOSC
2590
2591: function used to set $1 to $val
2592setvar='var=$1; eval "was=\$$1"; td=$define; tu=$undef;
2593case "$val$was" in
2594$define$undef) . ./whoa; eval "$var=\$td";;
2595$undef$define) . ./whoa; eval "$var=\$tu";;
2596*) eval "$var=$val";;
2597esac'
2598
64e689dc
JH
2599cat <<EOM
2600
3645a519 2601Perl can be built to take advantage of threads on some systems.
64e689dc 2602To do so, Configure must be run with -Dusethreads.
d00b958f
JH
2603
2604Note that threading is a highly experimental feature, and
2605some known race conditions still remain. If you choose to try
2606it, be very sure to not actually deploy it for production
2607purposes. README.threads has more details, and is required
2608reading if you enable threads.
64e689dc 2609EOM
dfe9444c 2610case "$usethreads" in
b691c02f 2611$define|true|[yY]*) dflt='y';;
64e689dc
JH
2612*) dflt='n';;
2613esac
2614rp='Build a threading Perl?'
2615. ./myread
2616case "$ans" in
aaacdc8b 2617y|Y) val="$define" ;;
64e689dc 2618*) val="$undef" ;;
dfe9444c 2619esac
64e689dc 2620set usethreads
aaacdc8b
GS
2621eval $setvar
2622
2623case "$usethreads" in
2624$define)
2625 $cat <<EOM
2626
ff42dc34 2627As of 5.5.640, Perl has two different internal threading implementations,
aaacdc8b
GS
2628the 5.005 version (5005threads) and an interpreter-based version
2629(ithreads) that has one interpreter per thread. Both are very
2630experimental. This arrangement exists to help developers work out
2631which one is better.
3645a519
JH
2632
2633If you're a casual user, you probably don't want interpreter-threads
2634at this time. There doesn't yet exist a way to create threads from
2635within Perl in this model, i.e., "use Thread;" will NOT work.
aaacdc8b
GS
2636EOM
2637 : Default to ithreads unless overridden on command line or with
2638 : old config.sh
2639 dflt='y'
2640 case "$use5005threads" in
2641 $define|true|[yY]*) dflt='n';;
2642 esac
2643 case "$useithreads" in
2644 $undef|false|[nN]*) dflt='n';;
2645 esac
2646 rp='Use interpreter-based ithreads?'
2647 . ./myread
2648 case "$ans" in
2649 y|Y) val="$define" ;;
2650 *) val="$undef" ;;
2651 esac
2652 set useithreads
2653 eval $setvar
2654 : Now set use5005threads to the opposite value.
2655 case "$useithreads" in
2656 $define) val="$undef" ;;
2657 *) val="$define" ;;
2658 esac
2659 set use5005threads
2660 eval $setvar
2661 ;;
2662*)
2663 useithreads="$undef"
2664 use5005threads="$undef"
2665 ;;
2666esac
104d25b7 2667
693762b4
AD
2668case "$d_oldpthreads" in
2669'') : Configure tests would be welcome here. For now, assume undef.
2670 val="$undef" ;;
2671*) val="$d_oldpthreads" ;;
2672esac
2673set d_oldpthreads
2674eval $setvar
dfe9444c 2675
b691c02f
JH
2676
2677case "$usethreads" in
104d25b7
JH
2678"$define"|true|[yY]*)
2679: Look for a hint-file generated 'call-back-unit'. If the
2680: user has specified that a threading perl is to be built,
2681: we may need to set or change some other defaults.
2682 if $test -f usethreads.cbu; then
e5e20432 2683 echo "Your platform has some specific hints for threaded builds, using them..."
104d25b7 2684 . ./usethreads.cbu
e5e20432
JH
2685 else
2686 $cat <<EOM
2687(Your platform doesn't have any specific hints for threaded builds.
2688 Assuming POSIX threads, then.)
b691c02f 2689EOM
e5e20432 2690 fi
aaacdc8b 2691 ;;
e5e20432 2692esac
104d25b7 2693
ff935051 2694cat <<EOM
64e689dc 2695
ff935051
JH
2696Perl can be built so that multiple Perl interpreters can coexist
2697within the same Perl executable.
2698EOM
64e689dc 2699
ff935051
JH
2700case "$useithreads" in
2701$define)
2702 cat <<EOM
2703This multiple interpreter support is required for interpreter-based threads.
64e689dc 2704EOM
ff935051
JH
2705 val="$define"
2706 ;;
2707*)
2708 echo 'Normally you do not need this and you should answer no.'
ff42dc34
GS
2709 case "$usemultiplicity" in
2710 $define|true|[yY]*) dflt='y';;
2711 *) dflt='n';;
2712 esac
2713 rp='Build Perl for multiplicity?'
2714 . ./myread
2715 case "$ans" in
ff935051 2716 y|Y) val="$define" ;;
ff42dc34
GS
2717 *) val="$undef" ;;
2718 esac
2719 ;;
64e689dc
JH
2720esac
2721set usemultiplicity
ff935051 2722eval $setvar
64e689dc 2723
e5e20432
JH
2724: determine where manual pages are on this system
2725echo " "
2726case "$sysman" in
2727'')
2728 syspath='/usr/man/man1 /usr/man/mann /usr/man/manl /usr/man/local/man1'
2729 syspath="$syspath /usr/man/u_man/man1 /usr/share/man/man1"
2730 syspath="$syspath /usr/catman/u_man/man1 /usr/man/l_man/man1"
2731 syspath="$syspath /usr/local/man/u_man/man1 /usr/local/man/l_man/man1"
2732 syspath="$syspath /usr/man/man.L /local/man/man1 /usr/local/man/man1"
2733 sysman=`./loc . /usr/man/man1 $syspath`
2734 ;;
2735esac
2736if $test -d "$sysman"; then
2737 echo "System manual is in $sysman." >&4
2738else
2739 echo "Could not find manual pages in source form." >&4
2740fi
2741
2742: see what memory models we can support
2743case "$models" in
2744'')
2745 $cat >pdp11.c <<'EOP'
2746int main() {
2747#ifdef pdp11
2748 exit(0);
2749#else
2750 exit(1);
2751#endif
2752}
2753EOP
2754 ( cc -o pdp11 pdp11.c ) >/dev/null 2>&1
2755 if $test -f pdp11 && ./pdp11 2>/dev/null; then
2756 dflt='unsplit split'
2757 else
2758 tans=`./loc . X /lib/small /lib/large /usr/lib/small /usr/lib/large /lib/medium /usr/lib/medium /lib/huge`
2759 case "$tans" in
2760 X) dflt='none';;
2761 *) if $test -d /lib/small || $test -d /usr/lib/small; then
2762 dflt='small'
2763 else
2764 dflt=''
2765 fi
2766 if $test -d /lib/medium || $test -d /usr/lib/medium; then
2767 dflt="$dflt medium"
2768 fi
2769 if $test -d /lib/large || $test -d /usr/lib/large; then
2770 dflt="$dflt large"
2771 fi
2772 if $test -d /lib/huge || $test -d /usr/lib/huge; then
2773 dflt="$dflt huge"
2774 fi
2775 esac
2776 fi;;
2777*) dflt="$models";;
2778esac
2779$cat <<EOM
2780
2781Some systems have different model sizes. On most systems they are called
2782small, medium, large, and huge. On the PDP11 they are called unsplit and
2783split. If your system doesn't support different memory models, say "none".
2784If you wish to force everything to one memory model, say "none" here and
2785put the appropriate flags later when it asks you for other cc and ld flags.
2786Venix systems may wish to put "none" and let the compiler figure things out.
2787(In the following question multiple model names should be space separated.)
2788
2789The default for most systems is "none".
2790
2791EOM
2792rp="Which memory models are supported?"
2793. ./myread
2794models="$ans"
2795
2796case "$models" in
2797none)
2798 small=''
2799 medium=''
2800 large=''
2801 huge=''
2802 unsplit=''
2803 split=''
2804 ;;
2805*split)
2806 case "$split" in
2807 '') if $contains '\-i' $sysman/ld.1 >/dev/null 2>&1 || \
2808 $contains '\-i' $sysman/cc.1 >/dev/null 2>&1; then
2809 dflt='-i'
2810 else
2811 dflt='none'
2812 fi;;
2813 *) dflt="$split";;
2814 esac
2815 rp="What flag indicates separate I and D space?"
2816 . ./myread
2817 tans="$ans"
2818 case "$tans" in
2819 none) tans='';;
2820 esac
2821 split="$tans"
2822 unsplit='';;
2823*large*|*small*|*medium*|*huge*)
2824 case "$models" in
2825 *large*)
2826 case "$large" in
2827 '') dflt='-Ml';;
2828 *) dflt="$large";;
2829 esac
2830 rp="What flag indicates large model?"
2831 . ./myread
2832 tans="$ans"
2833 case "$tans" in
2834 none) tans='';
2835 esac
2836 large="$tans";;
2837 *) large='';;
2838 esac
2839 case "$models" in
2840 *huge*) case "$huge" in
2841 '') dflt='-Mh';;
2842 *) dflt="$huge";;
2843 esac
2844 rp="What flag indicates huge model?"
2845 . ./myread
2846 tans="$ans"
2847 case "$tans" in
2848 none) tans='';
2849 esac
2850 huge="$tans";;
2851 *) huge="$large";;
2852 esac
2853 case "$models" in
2854 *medium*) case "$medium" in
2855 '') dflt='-Mm';;
2856 *) dflt="$medium";;
2857 esac
2858 rp="What flag indicates medium model?"
2859 . ./myread
2860 tans="$ans"
2861 case "$tans" in
2862 none) tans='';
2863 esac
2864 medium="$tans";;
2865 *) medium="$large";;
2866 esac
2867 case "$models" in
2868 *small*) case "$small" in
2869 '') dflt='none';;
2870 *) dflt="$small";;
2871 esac
2872 rp="What flag indicates small model?"
2873 . ./myread
2874 tans="$ans"
2875 case "$tans" in
2876 none) tans='';
2877 esac
2878 small="$tans";;
2879 *) small='';;
2880 esac
2881 ;;
2882*)
2883 echo "Unrecognized memory models--you may have to edit Makefile.SH" >&4
2884 ;;
2885esac
2886$rm -f pdp11.* pdp11
2887
2888: make some quick guesses about what we are up against
2889echo " "
2890$echo $n "Hmm... $c"
2891echo exit 1 >bsd
2892echo exit 1 >usg
2893echo exit 1 >v7
2894echo exit 1 >osf1
2895echo exit 1 >eunice
2896echo exit 1 >xenix
2897echo exit 1 >venix
2898echo exit 1 >os2
2899d_bsd="$undef"
2900$cat /usr/include/signal.h /usr/include/sys/signal.h >foo 2>/dev/null
2901if test -f /osf_boot || $contains 'OSF/1' /usr/include/ctype.h >/dev/null 2>&1
2902then
2903 echo "Looks kind of like an OSF/1 system, but we'll see..."
2904 echo exit 0 >osf1
2905elif test `echo abc | tr a-z A-Z` = Abc ; then
2906 xxx=`./loc addbib blurfl $pth`
2907 if $test -f $xxx; then
2908 echo "Looks kind of like a USG system with BSD features, but we'll see..."
2909 echo exit 0 >bsd
2910 echo exit 0 >usg
2911 else
2912 if $contains SIGTSTP foo >/dev/null 2>&1 ; then
2913 echo "Looks kind of like an extended USG system, but we'll see..."
2914 else
2915 echo "Looks kind of like a USG system, but we'll see..."
2916 fi
2917 echo exit 0 >usg
2918 fi
2919elif $contains SIGTSTP foo >/dev/null 2>&1 ; then
2920 echo "Looks kind of like a BSD system, but we'll see..."
2921 d_bsd="$define"
2922 echo exit 0 >bsd
2923else
2924 echo "Looks kind of like a Version 7 system, but we'll see..."
2925 echo exit 0 >v7
2926fi
2927case "$eunicefix" in
2928*unixtovms*)
2929 $cat <<'EOI'
2930There is, however, a strange, musty smell in the air that reminds me of
2931something...hmm...yes...I've got it...there's a VMS nearby, or I'm a Blit.
2932EOI
2933 echo exit 0 >eunice
2934 d_eunice="$define"
2935: it so happens the Eunice I know will not run shell scripts in Unix format
2936 ;;
2937*)
2938 echo " "
2939 echo "Congratulations. You aren't running Eunice."
2940 d_eunice="$undef"
2941 ;;
2942esac
2943: Detect OS2. The p_ variable is set above in the Head.U unit.
2944case "$p_" in
2945:) ;;
2946*)
2947 $cat <<'EOI'
2948I have the feeling something is not exactly right, however...don't tell me...
2949lemme think...does HAL ring a bell?...no, of course, you're only running OS/2!
2950EOI
2951 echo exit 0 >os2
2952 ;;
2953esac
2954if test -f /xenix; then
2955 echo "Actually, this looks more like a XENIX system..."
2956 echo exit 0 >xenix
2957 d_xenix="$define"
2958else
2959 echo " "
2960 echo "It's not Xenix..."
2961 d_xenix="$undef"
2962fi
2963chmod +x xenix
2964$eunicefix xenix
2965if test -f /venix; then
2966 echo "Actually, this looks more like a VENIX system..."
2967 echo exit 0 >venix
2968else
2969 echo " "
2970 if ./xenix; then
2971 : null
2972 else
2973 echo "Nor is it Venix..."
2974 fi
2975fi
2976chmod +x bsd usg v7 osf1 eunice xenix venix os2
2977$eunicefix bsd usg v7 osf1 eunice xenix venix os2
2978$rm -f foo
2979
2980: see if we need a special compiler
2981echo " "
2982if ./usg; then
2983 case "$cc" in
2984 '') case "$Mcc" in
2985 /*) dflt='Mcc';;
2986 *) case "$large" in
2987 -M*) dflt='cc';;
2988 *) if $contains '\-M' $sysman/cc.1 >/dev/null 2>&1 ; then
2989 if $contains '\-M' $sysman/cpp.1 >/dev/null 2>&1; then
2990 dflt='cc'
2991 else
2992 dflt='cc -M'
2993 fi
2994 else
2995 dflt='cc'
2996 fi;;
2997 esac;;
2998 esac;;
2999 *) dflt="$cc";;
3000 esac
3001 case "$dflt" in
3002 *M*) $cat <<'EOM'
3003On some older systems the default C compiler will not resolve multiple global
3004references that happen to have the same name. On some such systems the "Mcc"
3005command may be used to force these to be resolved. On other systems a "cc -M"
3006command is required. (Note that the -M flag on other systems indicates a
3007memory model to use!) If you have the Gnu C compiler, you might wish to use
3008that instead.
3009
3010EOM
3011 ;;
3012 esac
3013 rp="Use which C compiler?"
3014 . ./myread
3015 cc="$ans"
3016else
3017 case "$cc" in
3018 '') dflt=cc;;
3019 *) dflt="$cc";;
3020 esac
3021 rp="Use which C compiler?"
3022 . ./myread
3023 cc="$ans"
3024fi
3025: Look for a hint-file generated 'call-back-unit'. Now that the
3026: user has specified the compiler, we may need to set or change some
3027: other defaults.
3028if $test -f cc.cbu; then
3029 . ./cc.cbu
3030fi
3031echo " "
3032echo "Checking for GNU cc in disguise and/or its version number..." >&4
3033$cat >gccvers.c <<EOM
3034#include <stdio.h>
3035int main() {
3036#ifdef __GNUC__
3037#ifdef __VERSION__
3038 printf("%s\n", __VERSION__);
3039#else
3040 printf("%s\n", "1");
3041#endif
3042#endif
3043 exit(0);
3044}
3045EOM
3046if $cc -o gccvers gccvers.c; then
3047 gccversion=`./gccvers`
3048 case "$gccversion" in
3049 '') echo "You are not using GNU cc." ;;
fc68435e 3050 *) echo "You are using GNU cc $gccversion."
fc68435e 3051 ;;
e5e20432
JH
3052 esac
3053else
3054 echo " "
3055 echo "*** WHOA THERE!!! ***" >&4
3056 echo " Your C compiler \"$cc\" doesn't seem to be working!" >&4
3057 case "$knowitall" in
3058 '')
3059 echo " You'd better start hunting for one and let me know about it." >&4
3060 exit 1
3061 ;;
3062 esac
3063fi
3064$rm -f gccvers*
3065case "$gccversion" in
30661*) cpp=`./loc gcc-cpp $cpp $pth` ;;
3067esac
3068
bd9b35c9
JH
3069: decide how portable to be. Allow command line overrides.
3070case "$d_portable" in
3071"$undef") ;;
3072*) d_portable="$define" ;;
104d25b7 3073esac
85ab1d1d 3074
bd9b35c9
JH
3075: set up shell script to do ~ expansion
3076cat >filexp <<EOSS
3077$startsh
3078: expand filename
3079case "\$1" in
3080 ~/*|~)
3081 echo \$1 | $sed "s|~|\${HOME-\$LOGDIR}|"
3082 ;;
3083 ~*)
3084 if $test -f /bin/csh; then
3085 /bin/csh -f -c "glob \$1"
3086 failed=\$?
3087 echo ""
3088 exit \$failed
e5e20432 3089 else
bd9b35c9
JH
3090 name=\`$expr x\$1 : '..\([^/]*\)'\`
3091 dir=\`$sed -n -e "/^\${name}:/{s/^[^:]*:[^:]*:[^:]*:[^:]*:[^:]*:\([^:]*\).*"'\$'"/\1/" -e p -e q -e '}' </etc/passwd\`
3092 if $test ! -d "\$dir"; then
3093 me=\`basename \$0\`
3094 echo "\$me: can't locate home directory for: \$name" >&2
3095 exit 1
3096 fi
3097 case "\$1" in
3098 */*)
3099 echo \$dir/\`$expr x\$1 : '..[^/]*/\(.*\)'\`
3100 ;;
3101 *)
3102 echo \$dir
e5e20432
JH
3103 ;;
3104 esac
3105 fi
b691c02f 3106 ;;
4633a7c4 3107*)
bd9b35c9 3108 echo \$1
2304df62
AD
3109 ;;
3110esac
4633a7c4
LW
3111EOSS
3112chmod +x filexp
3113$eunicefix filexp
2304df62
AD
3114
3115: now set up to get a file name
28757baa 3116cat <<EOS >getfile
3117$startsh
3118EOS
3119cat <<'EOSC' >>getfile
2304df62
AD
3120tilde=''
3121fullpath=''
3122already=''
3123skip=''
3124none_ok=''
3125exp_file=''
a0d0e21e 3126nopath_ok=''
2304df62
AD
3127orig_rp="$rp"
3128orig_dflt="$dflt"
b233458b
JH
3129case "$gfpth" in
3130'') gfpth='.' ;;
3131esac
2304df62
AD
3132
3133case "$fn" in
ecfc5424 3134*\(*)
28e8609d 3135 expr $fn : '.*(\(.*\)).*' | tr ',' $trnl >getfile.ok
ecfc5424
AD
3136 fn=`echo $fn | sed 's/(.*)//'`
3137 ;;
3138esac
3139
3140case "$fn" in
a0d0e21e
LW
3141*:*)
3142 loc_file=`expr $fn : '.*:\(.*\)'`
3143 fn=`expr $fn : '\(.*\):.*'`
3144 ;;
3145esac
3146
3147case "$fn" in
2304df62
AD
3148*~*) tilde=true;;
3149esac
3150case "$fn" in
3151*/*) fullpath=true;;
3152esac
3153case "$fn" in
3154*+*) skip=true;;
3155esac
3156case "$fn" in
3157*n*) none_ok=true;;
3158esac
3159case "$fn" in
3160*e*) exp_file=true;;
3161esac
a0d0e21e
LW
3162case "$fn" in
3163*p*) nopath_ok=true;;
3164esac
2304df62
AD
3165
3166case "$fn" in
3167*f*) type='File';;
3168*d*) type='Directory';;
a0d0e21e 3169*l*) type='Locate';;
2304df62
AD
3170esac
3171
3172what="$type"
3173case "$what" in
3174Locate) what='File';;
3175esac
3176
3177case "$exp_file" in
3178'')
3179 case "$d_portable" in
3180 "$define") ;;
3181 *) exp_file=true;;
3182 esac
3183 ;;
3184esac
3185
3186cd ..
3187while test "$type"; do
3188 redo=''
3189 rp="$orig_rp"
3190 dflt="$orig_dflt"
3191 case "$tilde" in
3192 true) rp="$rp (~name ok)";;
3193 esac
3194 . UU/myread
ecfc5424
AD
3195 if test -f UU/getfile.ok && \
3196 $contains "^$ans\$" UU/getfile.ok >/dev/null 2>&1
3197 then
3198 value="$ans"
3199 ansexp="$ans"
3200 break
3201 fi
2304df62
AD
3202 case "$ans" in
3203 none)
3204 value=''
3205 ansexp=''
3206 case "$none_ok" in
3207 true) type='';;
3208 esac
3209 ;;
3210 *)
3211 case "$tilde" in
3212 '') value="$ans"
3213 ansexp="$ans";;
3214 *)
3215 value=`UU/filexp $ans`
3216 case $? in
3217 0)
3218 if test "$ans" != "$value"; then
ecfc5424 3219 echo "(That expands to $value on this system.)"
2304df62
AD
3220 fi
3221 ;;
3222 *) value="$ans";;
3223 esac
3224 ansexp="$value"
3225 case "$exp_file" in
3226 '') value="$ans";;
3227 esac
3228 ;;
3229 esac
3230 case "$fullpath" in
3231 true)
3232 case "$ansexp" in
3233 /*) value="$ansexp" ;;
3234 *)
3235 redo=true
3236 case "$already" in
3237 true)
3238 echo "I shall only accept a full path name, as in /bin/ls." >&4
3239 echo "Use a ! shell escape if you wish to check pathnames." >&4
3240 ;;
3241 *)
3242 echo "Please give a full path name, starting with slash." >&4
3243 case "$tilde" in
3244 true)
3245 echo "Note that using ~name is ok provided it expands well." >&4
3246 already=true
3247 ;;
3248 esac
3249 esac
3250 ;;
3251 esac
3252 ;;
3253 esac
3254 case "$redo" in
3255 '')
3256 case "$type" in
3257 File)
b233458b
JH
3258 for fp in $gfpth; do
3259 if test "X$fp" = X.; then
3260 pf="$ansexp"
3261 else
3262 pf="$fp/$ansexp"
3263 fi
3264 if test -f "$pf"; then
3265 type=''
3266 elif test -r "$pf" || (test -h "$pf") >/dev/null 2>&1
3267 then
3268 echo "($value is not a plain file, but that's ok.)"
3269 type=''
3270 fi
3271 if test X"$type" = X; then
3272 value="$pf"
3273 break
3274 fi
3275 done
2304df62
AD
3276 ;;
3277 Directory)
b233458b
JH
3278 for fp in $gfpth; do
3279 if test "X$fp" = X.; then
3280 pf="$ansexp"
3281 else
3282 pf="$fp/$ansexp"
3283 fi
3284 if test -d "$pf"; then
3285 type=''
3286 value="$pf"
3287 break
3288 fi
3289 done
2304df62
AD
3290 ;;
3291 Locate)
40000a8c 3292 if test -d "$ansexp"; then
a0d0e21e
LW
3293 echo "(Looking for $loc_file in directory $value.)"
3294 value="$value/$loc_file"
40000a8c 3295 ansexp="$ansexp/$loc_file"
2304df62 3296 fi
40000a8c 3297 if test -f "$ansexp"; then
2304df62
AD
3298 type=''
3299 fi
a0d0e21e
LW
3300 case "$nopath_ok" in
3301 true) case "$value" in
3302 */*) ;;
3303 *) echo "Assuming $value will be in people's path."
3304 type=''
3305 ;;
3306 esac
3307 ;;
3308 esac
2304df62
AD
3309 ;;
3310 esac
3311
3312 case "$skip" in
3313 true) type='';
3314 esac
3315
3316 case "$type" in
3317 '') ;;
3318 *)
3319 if test "$fastread" = yes; then
3320 dflt=y
3321 else
3322 dflt=n
3323 fi
3324 rp="$what $value doesn't exist. Use that name anyway?"
3325 . UU/myread
3326 dflt=''
3327 case "$ans" in
3328 y*) type='';;
3329 *) echo " ";;
3330 esac
3331 ;;
3332 esac
3333 ;;
3334 esac
3335 ;;
3336 esac
3337done
3338cd UU
3339ans="$value"
3340rp="$orig_rp"
3341dflt="$orig_dflt"
ecfc5424 3342rm -f getfile.ok
b233458b 3343test "X$gfpthkeep" != Xy && gfpth=""
2304df62
AD
3344EOSC
3345
bd9b35c9
JH
3346: What should the include directory be ?
3347echo " "
3348$echo $n "Hmm... $c"
3349dflt='/usr/include'
3350incpath=''
3351mips_type=''
3352if $test -f /bin/mips && /bin/mips; then
3353 echo "Looks like a MIPS system..."
3354 $cat >usr.c <<'EOCP'
3355#ifdef SYSTYPE_BSD43
3356/bsd43
3357#endif
3358EOCP
3359 if $cc -E usr.c > usr.out && $contains / usr.out >/dev/null 2>&1; then
3360 dflt='/bsd43/usr/include'
3361 incpath='/bsd43'
3362 mips_type='BSD 4.3'
3363 else
3364 mips_type='System V'
3365 fi
3366 $rm -f usr.c usr.out
3367 echo "and you're compiling with the $mips_type compiler and libraries."
3368 xxx_prompt=y
3369 echo "exit 0" >mips
3370else
3371 echo "Doesn't look like a MIPS system."
3372 xxx_prompt=n
3373 echo "exit 1" >mips
3374fi
3375chmod +x mips
3376$eunicefix mips
3377case "$usrinc" in
3378'') ;;
3379*) dflt="$usrinc";;
3380esac
3381case "$xxx_prompt" in
3382y) fn=d/
3383 echo " "
3384 rp='Where are the include files you want to use?'
3385 . ./getfile
3386 usrinc="$ans"
8e07c86e 3387 ;;
bd9b35c9 3388*) usrinc="$dflt"
8e07c86e
AD
3389 ;;
3390esac
2304df62 3391
fc68435e
JH
3392: see how we invoke the C preprocessor
3393echo " "
3394echo "Now, how can we feed standard input to your C preprocessor..." >&4
3395cat <<'EOT' >testcpp.c
3396#define ABC abc
3397#define XYZ xyz
3398ABC.XYZ
3399EOT
3400cd ..
3401if test ! -f cppstdin; then
3402 if test "X$osname" = "Xaix" -a "X$gccversion" = X; then
3403 # AIX cc -E doesn't show the absolute headerfile
3404 # locations but we'll cheat by using the -M flag.
3405 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
3406 else
3407 echo 'cat >.$$.c; '"$cc"' -E ${1+"$@"} .$$.c; rm .$$.c' >cppstdin
3408 fi
3409else
3410 echo "Keeping your $hint cppstdin wrapper."
3411fi
3412chmod 755 cppstdin
3413wrapper=`pwd`/cppstdin
3414ok='false'
3415cd UU
3416
3417if $test "X$cppstdin" != "X" && \
3418 $cppstdin $cppminus <testcpp.c >testcpp.out 2>&1 && \
3419 $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1
3420then
3421 echo "You used to use $cppstdin $cppminus so we'll use that again."
3422 case "$cpprun" in
3423 '') echo "But let's see if we can live without a wrapper..." ;;
3424 *)
3425 if $cpprun $cpplast <testcpp.c >testcpp.out 2>&1 && \
3426 $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1
3427 then
3428 echo "(And we'll use $cpprun $cpplast to preprocess directly.)"
3429 ok='true'
3430 else
3431 echo "(However, $cpprun $cpplast does not work, let's see...)"
3432 fi
3433 ;;
3434 esac
3435else
3436 case "$cppstdin" in
3437 '') ;;
3438 *)
3439 echo "Good old $cppstdin $cppminus does not seem to be of any help..."
3440 ;;
3441 esac
3442fi
3443
3444if $ok; then
3445 : nothing
3446elif echo 'Maybe "'"$cc"' -E" will work...'; \
3447 $cc -E <testcpp.c >testcpp.out 2>&1; \
3448 $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3449 echo "Yup, it does."
3450 x_cpp="$cc -E"
3451 x_minus='';
3452elif echo 'Nope...maybe "'"$cc"' -E -" will work...'; \
3453 $cc -E - <testcpp.c >testcpp.out 2>&1; \
3454 $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3455 echo "Yup, it does."
3456 x_cpp="$cc -E"
3457 x_minus='-';
3458elif echo 'Nope...maybe "'"$cc"' -P" will work...'; \
3459 $cc -P <testcpp.c >testcpp.out 2>&1; \
3460 $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3461 echo "Yipee, that works!"
3462 x_cpp="$cc -P"
3463 x_minus='';
3464elif echo 'Nope...maybe "'"$cc"' -P -" will work...'; \
3465 $cc -P - <testcpp.c >testcpp.out 2>&1; \
3466 $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3467 echo "At long last!"
3468 x_cpp="$cc -P"
3469 x_minus='-';
3470elif echo 'No such luck, maybe "'$cpp'" will work...'; \
3471 $cpp <testcpp.c >testcpp.out 2>&1; \
3472 $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3473 echo "It works!"
3474 x_cpp="$cpp"
3475 x_minus='';
3476elif echo 'Nixed again...maybe "'$cpp' -" will work...'; \
3477 $cpp - <testcpp.c >testcpp.out 2>&1; \
3478 $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3479 echo "Hooray, it works! I was beginning to wonder."
3480 x_cpp="$cpp"
3481 x_minus='-';
3482elif echo 'Uh-uh. Time to get fancy. Trying a wrapper...'; \
3483 $wrapper <testcpp.c >testcpp.out 2>&1; \
3484 $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3485 x_cpp="$wrapper"
3486 x_minus=''
3487 echo "Eureka!"
3488else
3489 dflt=''
3490 rp="No dice. I can't find a C preprocessor. Name one:"
3491 . ./myread
3492 x_cpp="$ans"
3493 x_minus=''
3494 $x_cpp <testcpp.c >testcpp.out 2>&1
3495 if $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3496 echo "OK, that will do." >&4
3497 else
3498echo "Sorry, I can't get that to work. Go find one and rerun Configure." >&4
3499 exit 1
3500 fi
3501fi
3502
3503case "$ok" in
3504false)
3505 cppstdin="$x_cpp"
3506 cppminus="$x_minus"
3507 cpprun="$x_cpp"
3508 cpplast="$x_minus"
3509 set X $x_cpp
3510 shift
3511 case "$1" in
3512 "$cpp")
3513 echo "Perhaps can we force $cc -E using a wrapper..."
3514 if $wrapper <testcpp.c >testcpp.out 2>&1; \
3515 $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1
3516 then
3517 echo "Yup, we can."
3518 cppstdin="$wrapper"
3519 cppminus='';
3520 else
3521 echo "Nope, we'll have to live without it..."
3522 fi
3523 ;;
3524 esac
3525 case "$cpprun" in
3526 "$wrapper")
3527 cpprun=''
3528 cpplast=''
3529 ;;
3530 esac
3531 ;;
3532esac
3533
3534case "$cppstdin" in
3535"$wrapper"|'cppstdin') ;;
3536*) $rm -f $wrapper;;
3537esac
3538$rm -f testcpp.c testcpp.out
3539
bd9b35c9
JH
3540: Set private lib path
3541case "$plibpth" in
3542'') if ./mips; then
3543 plibpth="$incpath/usr/lib /usr/local/lib /usr/ccs/lib"
3544 fi;;
3545esac
3546case "$libpth" in
3547' ') dlist='';;
3548'') dlist="$loclibpth $plibpth $glibpth";;
3549*) dlist="$libpth";;
3550esac
3551
3552: Now check and see which directories actually exist, avoiding duplicates
3553libpth=''
3554for xxx in $dlist
3555do
3556 if $test -d $xxx; then
3557 case " $libpth " in
3558 *" $xxx "*) ;;
3559 *) libpth="$libpth $xxx";;
3560 esac
3561 fi
3562done
3563$cat <<'EOM'
3564
3565Some systems have incompatible or broken versions of libraries. Among
3566the directories listed in the question below, please remove any you
3567know not to be holding relevant libraries, and add any that are needed.
3568Say "none" for none.
8e07c86e
AD
3569
3570EOM
bd9b35c9
JH
3571case "$libpth" in
3572'') dflt='none';;
8e07c86e 3573*)
bd9b35c9
JH
3574 set X $libpth
3575 shift
3576 dflt=${1+"$@"}
8e07c86e 3577 ;;
a0d0e21e 3578esac
bd9b35c9
JH
3579rp="Directories to use for library searches?"
3580. ./myread
3581case "$ans" in
3582none) libpth=' ';;
3583*) libpth="$ans";;
3584esac
a0d0e21e 3585
bd9b35c9
JH
3586: compute shared library extension
3587case "$so" in
3588'')
3589 if xxx=`./loc libc.sl X $libpth`; $test -f "$xxx"; then
3590 dflt='sl'
dd4e71fd 3591 else
bd9b35c9 3592 dflt='so'
dd4e71fd
JH
3593 fi
3594 ;;
bd9b35c9 3595*) dflt="$so";;
dd4e71fd 3596esac
dd4e71fd
JH
3597$cat <<EOM
3598
bd9b35c9 3599On some systems, shared libraries may be available. Answer 'none' if
7f95ee77 3600you want to suppress searching of shared libraries for the remainder
bd9b35c9 3601of this configuration.
dd4e71fd
JH
3602
3603EOM
bd9b35c9
JH
3604rp='What is the file extension used for shared libraries?'
3605. ./myread
3606so="$ans"
dd4e71fd 3607
bd9b35c9
JH
3608: Define several unixisms.
3609: Hints files or command line option can be used to override them.
3610: The convoluted testing is in case hints files set either the old
3611: or the new name.
3612case "$_exe" in
3613'') case "$exe_ext" in
3614 '') ;;
3615 *) _exe="$exe_ext" ;;
dd4e71fd 3616 esac
bd9b35c9 3617 ;;
bfb7748a 3618esac
bd9b35c9
JH
3619case "$_a" in
3620'') case "$lib_ext" in
3621 '') _a='.a';;
3622 *) _a="$lib_ext" ;;
dd4e71fd
JH
3623 esac
3624 ;;
dd4e71fd 3625esac
bd9b35c9
JH
3626case "$_o" in
3627'') case "$obj_ext" in
3628 '') _o='.o';;
3629 *) _o="$obj_ext";;
3630 esac
3631 ;;
3632esac
3633case "$p_" in
3634'') case "$path_sep" in
3635 '') p_=':';;
3636 *) p_="$path_sep";;
3637 esac
3638 ;;
3639esac
3640exe_ext=$_exe
3641lib_ext=$_a
3642obj_ext=$_o
3643path_sep=$p_
dd4e71fd 3644
bd9b35c9
JH
3645: Which makefile gets called first. This is used by make depend.
3646case "$firstmakefile" in
3647'') firstmakefile='makefile';;
4633a7c4 3648esac
4633a7c4 3649
bd9b35c9 3650cat <<EOM
4633a7c4 3651
bd9b35c9
JH
3652Perl can be built to use the SOCKS proxy protocol library. To do so,
3653Configure must be run with -Dusesocks.
4633a7c4 3654
bd9b35c9 3655Normally you do not need this and you should answer no.
8e07c86e 3656
bd9b35c9
JH
3657EOM
3658case "$usesocks" in
3659$define|true|[yY]*) dflt='y';;
3660*) dflt='n';;
3661esac
3662rp='Build Perl for SOCKS?'
3663. ./myread
3664case "$ans" in
3665y|Y) val="$define" ;;
3666*) val="$undef" ;;
3667esac
3668set usesocks
3669eval $setvar
3670
3671: Looking for optional libraries
3672echo " "
3673echo "Checking for optional libraries..." >&4
3674case "$libs" in
3675' '|'') dflt='';;
3676*) dflt="$libs";;
3677esac
3678case "$libswanted" in
3679'') libswanted='c_s';;
3680esac
3681case "$usesocks" in
3682$define)
3683 libswanted="$libswanted socks5 socks5_sh"
8e07c86e
AD
3684 ;;
3685esac
bd9b35c9
JH
3686for thislib in $libswanted; do
3687
43999f95
JH
3688 libname="$thislib"
3689 if xxx=`./loc lib$thislib.$so.[0-9]'*' X $libpth`; $test -f "$xxx"; then
45009801 3690 if $test "X$ignore_versioned_solibs" = "X"; then
43999f95
JH
3691 xxx=/ignored$xxx
3692 else
3693 libstyle=shared
3694 fi
bd9b35c9 3695 elif xxx=`./loc lib$thislib.$so X $libpth` ; $test -f "$xxx"; then
43999f95 3696 libstyle=shared
bd9b35c9 3697 elif xxx=`./loc lib$thislib$_a X $libpth`; $test -f "$xxx"; then
43999f95 3698 libstyle=static
bd9b35c9 3699 elif xxx=`./loc $thislib$_a X $libpth`; $test -f "$xxx"; then
43999f95 3700 libstyle=static
bd9b35c9 3701 elif xxx=`./loc lib${thislib}_s$_a X $libpth`; $test -f "$xxx"; then
43999f95
JH
3702 libstyle=static
3703 libname=${thislib}_s
bd9b35c9 3704 elif xxx=`./loc Slib$thislib$_a X $xlibpth`; $test -f "$xxx"; then
43999f95
JH
3705 libstyle="static"
3706 fi
3707 if $test -f "$xxx"; then
3708 eval $libscheck
3709 fi
3710 if $test -f "$xxx"; then
3711 case "$libstyle" in
3712 shared) echo "Found -l$libname (shared)." ;;
3713 static) echo "Found -l$libname." ;;
3714 *) echo "Found -l$libname ($libstyle)." ;;
3715 esac
bd9b35c9
JH
3716 case " $dflt " in
3717 *"-l$thislib "*);;
43999f95
JH
3718 *) dflt="$dflt -l$libname"
3719 libsfound="$libsfound $xxx"
3720 yyy=`basename $xxx`
3721 libsfiles="$libsfiles $yyy"
3722 yyy=`echo $xxx|sed "s@/$yyy\\$@@"`
3723 case " $libsdirs " in
3724 *" $yyy "*) ;;
3725 *) libsdirs="$libsdirs $yyy" ;;
3726 esac
3727 ;;
bd9b35c9
JH
3728 esac
3729 else
3730 echo "No -l$thislib."
3731 fi
3732done
3733set X $dflt
3734shift
3735dflt="$*"
3736case "$libs" in
3737'') dflt="$dflt";;
3738*) dflt="$libs";;
3739esac
3740case "$dflt" in
3741' '|'') dflt='none';;
3742esac
4633a7c4 3743
04fa8c41
JH
3744case "$libsfound" in
3745*libm*) ;;
3746*) cat <<EOM >&4
3747
3748I could not find -lm, the mathematics library.
3749This means that something went awfully wrong.
3750
3751EOM
3752 exit 1
3753 ;;
3754esac
3755
bd9b35c9 3756$cat <<EOM
4633a7c4 3757
bd9b35c9
JH
3758In order to compile $package on your machine, a number of libraries
3759are usually needed. Include any other special libraries here as well.
3760Say "none" for none. The default list is almost always right.
8e07c86e 3761EOM
8e07c86e 3762
bd9b35c9
JH
3763echo " "
3764rp="What libraries to use?"
3765. ./myread
3766case "$ans" in
3767none) libs=' ';;
3768*) libs="$ans";;
3769esac
d71b2b6b 3770
bd9b35c9
JH
3771: determine optimization, if desired, or use for debug flag also
3772case "$optimize" in
3773' '|$undef) dflt='none';;
3774'') dflt='-O';;
3775*) dflt="$optimize";;
3776esac
3777$cat <<EOH
d71b2b6b 3778
bd9b35c9
JH
3779By default, $package compiles with the -O flag to use the optimizer.
3780Alternately, you might want to use the symbolic debugger, which uses
3781the -g flag (on traditional Unix systems). Either flag can be
3782specified here. To use neither flag, specify the word "none".
d71b2b6b 3783
bd9b35c9
JH
3784EOH
3785rp="What optimizer/debugger flag should be used?"
3786. ./myread
3787optimize="$ans"
3788case "$optimize" in
3789'none') optimize=" ";;
3790esac
3791
3792dflt=''
3793: We will not override a previous value, but we might want to
3794: augment a hint file
3795case "$hint" in
3796default|recommended)
3797 case "$gccversion" in
3798 1*) dflt='-fpcc-struct-return' ;;
d71b2b6b 3799 esac
bd9b35c9
JH
3800 case "$optimize" in
3801 *-g*) dflt="$dflt -DDEBUGGING";;
d71b2b6b 3802 esac
bd9b35c9
JH
3803 case "$gccversion" in
3804 2*) if test -d /etc/conf/kconfig.d &&
3805 $contains _POSIX_VERSION $usrinc/sys/unistd.h >/dev/null 2>&1
3806 then
3807 dflt="$dflt -posix"
3808 fi
f0d04425 3809 ;;
bd9b35c9
JH
3810 esac
3811 case "$gccversion" in
3812 1*) ;;
3813 2.[0-8]*) ;;
3814 ?*) echo " "
3815 echo "Checking if your compiler accepts -fno-strict-aliasing" 2>&1
3816 echo 'int main(void) { return 0; }' > gcctest.c
3817 if $cc -O2 -fno-strict-aliasing -o gcctest gcctest.c; then
3818 echo "Yes, it does." 2>&1
3819 case "$ccflags" in
3820 *strict-aliasing*)
3821 echo "Leaving current flags $ccflags alone." 2>&1
3822 ;;
3823 *) dflt="$dflt -fno-strict-aliasing" ;;
3824 esac
3825 else
3826 echo "Nope, it doesn't, but that's ok." 2>&1
3827 fi
f0d04425 3828 ;;
e5e20432
JH
3829 esac
3830 ;;
3831esac
3832
bd9b35c9
JH
3833case "$mips_type" in
3834*BSD*|'') inclwanted="$locincpth $usrinc";;
3835*) inclwanted="$locincpth $inclwanted $usrinc/bsd";;
3836esac
3837for thisincl in $inclwanted; do
3838 if $test -d $thisincl; then
3839 if $test x$thisincl != x$usrinc; then
3840 case "$dflt" in
3841 *$thisincl*);;
3842 *) dflt="$dflt -I$thisincl";;
3843 esac
3844 fi
3845 fi
3846done
40a7a20a 3847
bd9b35c9
JH
3848inctest='if $contains $2 $usrinc/$1 >/dev/null 2>&1; then
3849 xxx=true;
3850elif $contains $2 $usrinc/sys/$1 >/dev/null 2>&1; then
3851 xxx=true;
3852else
3853 xxx=false;
3854fi;
3855if $xxx; then
3856 case "$dflt" in
3857 *$2*);;
3858 *) dflt="$dflt -D$2";;
3859 esac;
3860fi'
40a7a20a 3861
bd9b35c9 3862set signal.h LANGUAGE_C; eval $inctest
40a7a20a 3863
bd9b35c9
JH
3864case "$usesocks" in
3865$define)
3866 ccflags="$ccflags -DSOCKS"
3867 ;;
3868esac
40a7a20a 3869
bd9b35c9
JH
3870case "$hint" in
3871default|recommended) dflt="$ccflags $dflt" ;;
3872*) dflt="$ccflags";;
3873esac
40a7a20a 3874
bd9b35c9
JH
3875case "$dflt" in
3876''|' ') dflt=none;;
3877esac
3878$cat <<EOH
40a7a20a 3879
bd9b35c9
JH
3880Your C compiler may want other flags. For this question you should include
3881-I/whatever and -DWHATEVER flags and any other flags used by the C compiler,
3882but you should NOT include libraries or ld flags like -lwhatever. If you
3883want $package to honor its debug switch, you should include -DDEBUGGING here.
3884Your C compiler might also need additional flags, such as -D_POSIX_SOURCE.
40a7a20a 3885
bd9b35c9 3886To use no flags, specify the word "none".
40a7a20a 3887
bd9b35c9
JH
3888EOH
3889set X $dflt
3890shift
3891dflt=${1+"$@"}
3892rp="Any additional cc flags?"
3893. ./myread
3894case "$ans" in
3895none) ccflags='';;
3896*) ccflags="$ans";;
3897esac
8e07c86e 3898
bd9b35c9
JH
3899: the following weeds options from ccflags that are of no interest to cpp
3900cppflags="$ccflags"
3901case "$gccversion" in
39021*) cppflags="$cppflags -D__GNUC__"
4633a7c4 3903esac
bd9b35c9
JH
3904case "$mips_type" in
3905'');;
3906*BSD*) cppflags="$cppflags -DSYSTYPE_BSD43";;
3907esac
3908case "$cppflags" in
3909'');;
3910*)
3911 echo " "
3912 echo "Let me guess what the preprocessor flags are..." >&4
3913 set X $cppflags
3914 shift
3915 cppflags=''
3916 $cat >cpp.c <<'EOM'
3917#define BLURFL foo
8e07c86e 3918
bd9b35c9
JH
3919BLURFL xx LFRULB
3920EOM
3921 previous=''
3922 for flag in $*
3923 do
3924 case "$flag" in
3925 -*) ftry="$flag";;
3926 *) ftry="$previous $flag";;
3927 esac
3928 if $cppstdin -DLFRULB=bar $cppflags $ftry $cppminus <cpp.c \
3929 >cpp1.out 2>/dev/null && \
3930 $cpprun -DLFRULB=bar $cppflags $ftry $cpplast <cpp.c \
3931 >cpp2.out 2>/dev/null && \
3932 $contains 'foo.*xx.*bar' cpp1.out >/dev/null 2>&1 && \
3933 $contains 'foo.*xx.*bar' cpp2.out >/dev/null 2>&1
3934 then
3935 cppflags="$cppflags $ftry"
3936 previous=''
3937 else
3938 previous="$flag"
3939 fi
3940 done
3941 set X $cppflags
3942 shift
3943 cppflags=${1+"$@"}
3944 case "$cppflags" in
3945 *-*) echo "They appear to be: $cppflags";;
3946 esac
3947 $rm -f cpp.c cpp?.out
2afac517 3948 ;;
3949esac
8e07c86e 3950
bd9b35c9
JH
3951: flags used in final linking phase
3952case "$ldflags" in
3953'') if ./venix; then
3954 dflt='-i -z'
10a23457 3955 else
bd9b35c9 3956 dflt=''
10a23457 3957 fi
bd9b35c9
JH
3958 case "$ccflags" in
3959 *-posix*) dflt="$dflt -posix" ;;
c4f23d77 3960 esac
bd9b35c9
JH
3961 ;;
3962*) dflt="$ldflags";;
3963esac
3964
3965: Try to guess additional flags to pick up local libraries.
3966for thislibdir in $libpth; do
3967 case " $loclibpth " in
3968 *" $thislibdir "*)
3969 case "$dflt " in
3970 *"-L$thislibdir "*) ;;
3971 *) dflt="$dflt -L$thislibdir" ;;
3972 esac
c4f23d77
AD
3973 ;;
3974 esac
bd9b35c9 3975done
c4f23d77 3976
bd9b35c9
JH
3977case "$dflt" in
3978'') dflt='none' ;;
3979esac
c4f23d77 3980
bd9b35c9
JH
3981$cat <<EOH
3982
3983Your C linker may need flags. For this question you should
3984include -L/whatever and any other flags used by the C linker, but you
3985should NOT include libraries like -lwhatever.
3986
3987Make sure you include the appropriate -L/path flags if your C linker
3988does not normally search all of the directories you specified above,
3989namely
3990 $libpth
3991To use no flags, specify the word "none".
3992
3993EOH
3994
3995rp="Any additional ld flags (NOT including libraries)?"
3996. ./myread
3997case "$ans" in
3998none) ldflags='';;
3999*) ldflags="$ans";;
4000esac
4001rmlist="$rmlist pdp11"
4002
4003: coherency check
4004echo " "
4005echo "Checking your choice of C compiler and flags for coherency..." >&4
4006$cat > try.c <<'EOF'
4007#include <stdio.h>
4008int main() { printf("Ok\n"); exit(0); }
4009EOF
4010set X $cc $optimize $ccflags -o try $ldflags try.c $libs
4011shift
4012$cat >try.msg <<'EOM'
4013I've tried to compile and run the following simple program:
4014
4015EOM
4016$cat try.c >> try.msg
4017
4018$cat >> try.msg <<EOM
4019
4020I used the command:
4021
4022 $*
4023 ./try
4024
4025and I got the following output:
4026
4027EOM
4028dflt=y
4029if sh -c "$cc $optimize $ccflags -o try $ldflags try.c $libs" >>try.msg 2>&1; then
4030 if sh -c './try' >>try.msg 2>&1; then
4031 xxx=`./try`
4032 case "$xxx" in
4033 "Ok") dflt=n ;;
4034 *) echo 'The program compiled OK, but produced no output.' >> try.msg
4035 case " $libs " in
4036 *" -lsfio "*)
4037 cat >> try.msg <<'EOQS'
4038If $libs contains -lsfio, and sfio is mis-configured, then it
4039sometimes (apparently) runs and exits with a 0 status, but with no
4040output! It may have to do with sfio's use of _exit vs. exit.
4041
4042EOQS
4043 rp="You have a big problem. Shall I abort Configure"
4044 dflt=y
4045 ;;
4046 esac
4047 ;;
4048 esac
4049 else
4050 echo "The program compiled OK, but exited with status $?." >>try.msg
4051 rp="You have a problem. Shall I abort Configure"
4052 dflt=y
4053 fi
4054else
4055 echo "I can't compile the test program." >>try.msg
4056 rp="You have a BIG problem. Shall I abort Configure"
4057 dflt=y
4058fi
4059case "$dflt" in
4060y)
4061 $cat try.msg >&4
4062 case "$knowitall" in
4063 '')
4064 echo "(The supplied flags or libraries might be incorrect.)"
c4f23d77 4065 ;;
bd9b35c9 4066 *) dflt=n;;
c4f23d77 4067 esac
bd9b35c9
JH
4068 echo " "
4069 . ./myread
4070 case "$ans" in
4071 n*|N*) ;;
4072 *) echo "Ok. Stopping Configure." >&4
4073 exit 1
c4f23d77
AD
4074 ;;
4075 esac
4076 ;;
bd9b35c9 4077n) echo "OK, that should do.";;
c4f23d77 4078esac
bd9b35c9 4079$rm -f try try.* core
c4f23d77 4080
bd9b35c9
JH
4081: define an is-a-typedef? function
4082typedef='type=$1; var=$2; def=$3; shift; shift; shift; inclist=$@;
4083case "$inclist" in
4084"") inclist="sys/types.h";;
4085esac;
4086eval "varval=\$$var";
4087case "$varval" in
4088"")
4089 $rm -f temp.c;
4090 for inc in $inclist; do
4091 echo "#include <$inc>" >>temp.c;
4092 done;
4093 echo "#ifdef $type" >> temp.c;
4094 echo "printf(\"We have $type\");" >> temp.c;
4095 echo "#endif" >> temp.c;
4096 $cppstdin $cppflags $cppminus < temp.c >temp.E 2>/dev/null;
4097 if $contains $type temp.E >/dev/null 2>&1; then
4098 eval "$var=\$type";
4099 else
4100 eval "$var=\$def";
4101 fi;
4102 $rm -f temp.?;;
4103*) eval "$var=\$varval";;
4104esac'
8e07c86e 4105
bd9b35c9
JH
4106: define an is-a-typedef? function that prompts if the type is not available.
4107typedef_ask='type=$1; var=$2; def=$3; shift; shift; shift; inclist=$@;
4108case "$inclist" in
4109"") inclist="sys/types.h";;
4110esac;
4111eval "varval=\$$var";
4112case "$varval" in
4113"")
4114 $rm -f temp.c;
4115 for inc in $inclist; do
4116 echo "#include <$inc>" >>temp.c;
4117 done;
4118 echo "#ifdef $type" >> temp.c;
4119 echo "printf(\"We have $type\");" >> temp.c;
4120 echo "#endif" >> temp.c;
4121 $cppstdin $cppflags $cppminus < temp.c >temp.E 2>/dev/null;
4122 echo " " ;
4123 echo "$rp" | $sed -e "s/What is/Looking for/" -e "s/?/./";
4124 if $contains $type temp.E >/dev/null 2>&1; then
4125 echo "$type found." >&4;
4126 eval "$var=\$type";
4127 else
4128 echo "$type NOT found." >&4;
4129 dflt="$def";
4130 . ./myread ;
4131 eval "$var=\$ans";
4132 fi;
4133 $rm -f temp.?;;
4134*) eval "$var=\$varval";;
4135esac'
8e07c86e 4136
bd9b35c9
JH
4137: define a shorthand compile call
4138compile='
4139mc_file=$1;
4140shift;
4141$cc $optimize $ccflags $ldflags -o ${mc_file} $* ${mc_file}.c $libs > /dev/null 2>&1;'
4142: define a shorthand compile call for compilations that should be ok.
4143compile_ok='
4144mc_file=$1;
4145shift;
4146$cc $optimize $ccflags $ldflags -o ${mc_file} $* ${mc_file}.c $libs;'
8e07c86e 4147
bd9b35c9
JH
4148: check for lengths of integral types
4149echo " "
4150case "$intsize" in
2afac517 4151'')
bd9b35c9
JH
4152 echo "Checking to see how big your integers are..." >&4
4153 $cat >intsize.c <<'EOCP'
4154#include <stdio.h>
4155int main()
4156{
4157 printf("intsize=%d;\n", (int)sizeof(int));
4158 printf("longsize=%d;\n", (int)sizeof(long));
4159 printf("shortsize=%d;\n", (int)sizeof(short));
4160 exit(0);
4161}
4162EOCP
4163 set intsize
4164 if eval $compile_ok && ./intsize > /dev/null; then
4165 eval `./intsize`
4166 echo "Your integers are $intsize bytes long."
4167 echo "Your long integers are $longsize bytes long."
4168 echo "Your short integers are $shortsize bytes long."
2afac517 4169 else
bd9b35c9
JH
4170 $cat >&4 <<EOM
4171!
4172Help! I can't compile and run the intsize test program: please enlighten me!
4173(This is probably a misconfiguration in your system or libraries, and
4174you really ought to fix it. Still, I'll try anyway.)
4175!
4176EOM
4177 dflt=4
4178 rp="What is the size of an integer (in bytes)?"
4179 . ./myread
4180 intsize="$ans"
4181 dflt=$intsize
4182 rp="What is the size of a long integer (in bytes)?"
4183 . ./myread
4184 longsize="$ans"
4185 dflt=2
4186 rp="What is the size of a short integer (in bytes)?"
4187 . ./myread
4188 shortsize="$ans"
2afac517 4189 fi
4190 ;;
8e07c86e 4191esac
bd9b35c9
JH
4192$rm -f intsize intsize.*
4193
4194: see what type lseek is declared as in the kernel
4195rp="What is the type used for lseek's offset on this system?"
4196set off_t lseektype long stdio.h sys/types.h
4197eval $typedef_ask
4198
4199echo " "
4200$echo $n "Checking to see how big your file offsets are...$c" >&4
4201$cat >try.c <<EOCP
4202#include <sys/types.h>
4203#include <stdio.h>
4204int main()
4205{
4206 printf("%d\n", (int)sizeof($lseektype));
4207 return(0);
4208}
4209EOCP
4210set try
4211if eval $compile_ok; then
4212 lseeksize=`./try`
4213 $echo " $lseeksize bytes." >&4
4214else
4215 dflt=$longsize
4216 echo " "
4217 echo "(I can't seem to compile the test program. Guessing...)"
4218 rp="What is the size of your file offsets (in bytes)?"
4219 . ./myread
4220 lseeksize="$ans"
4221fi
4222$rm -f try.c try
4223
4224: see what type file positions are declared as in the library
4225rp="What is the type for file position used by fsetpos()?"
4226set fpos_t fpostype long stdio.h sys/types.h
4227eval $typedef_ask
4228
4229echo " "
4230case "$fpostype" in
4231*_t) zzz="$fpostype" ;;
4232*) zzz="fpos_t" ;;
4233esac
4234$echo $n "Checking the size of $zzz...$c" >&4
4235cat > try.c <<EOCP
4236#include <sys/types.h>
4237#include <stdio.h>
4238int main() {
4239 printf("%d\n", (int)sizeof($fpostype));
4240 exit(0);
4241}
4242EOCP
4243set try
4244if eval $compile_ok; then
4245 yyy=`./try`
4246 case "$yyy" in
4247 '') fpossize=4
4248 echo " "
4249 echo "(I can't execute the test program--guessing $fpossize.)" >&4
4250 ;;
4251 *) fpossize=$yyy
4252 echo " $fpossize bytes."
4253 ;;
4254 esac
4255else
4256 dflt="$longsize"
4257 echo " "
4258 echo "(I can't compile the test program. Guessing...)" >&4
4259 rp="What is the size of your file positions (in bytes)?"
4260 . ./myread
4261 fpossize="$ans"
4262fi
4263
4264
8e07c86e 4265
bd9b35c9
JH
4266case "$lseeksize:$fpossize" in
42678:8) cat <<EOM
8e07c86e 4268
bd9b35c9 4269You can have files larger than 2 gigabytes.
8e07c86e 4270EOM
bd9b35c9
JH
4271 val="$define" ;;
4272*) cat <<EOM
8e07c86e 4273
bd9b35c9
JH
4274Perl can be built to understand large files (files larger than 2 gigabytes)
4275on some systems. To do so, Configure must be run with -Duselargefiles.
4276
4277If this doesn't make any sense to you, just accept the default 'y'.
4278EOM
4279 case "$uselargefiles" in
4280 "$undef"|false|[nN]*) dflt='n' ;;
4281 *) dflt='y' ;;
4282 esac
4283 rp='Try to understand large files, if available?'
4284 . ./myread
4285 case "$ans" in
4286 y|Y) val="$define" ;;
4287 *) val="$undef" ;;
4288 esac
4289 ;;
dfe9444c 4290esac
bd9b35c9
JH
4291set uselargefiles
4292eval $setvar
4293case "$uselargefiles" in
4294"$define")
4295: Look for a hint-file generated 'call-back-unit'. If the
4296: user has specified that a large files perl is to be built,
4297: we may need to set or change some other defaults.
4298 if $test -f uselfs.cbu; then
4299 echo "Your platform has some specific hints for large file builds, using them..."
4300 . ./uselfs.cbu
4301 echo " "
4302 $echo $n "Rechecking to see how big your file offsets are...$c" >&4
4303 $cat >try.c <<EOCP
4304#include <sys/types.h>
4305#include <stdio.h>
4306int main()
4307{
4308 printf("%d\n", (int)sizeof($lseektype));
4309 return(0);
4310}
4311EOCP
4312 set try
4313 if eval $compile_ok; then
4314 lseeksize=`./try`
4315 $echo " $lseeksize bytes." >&4
4316 else
4317 dflt="$lseeksize"
4318 echo " "
4319 echo "(I can't seem to compile the test program. Guessing...)"
4320 rp="What is the size of your file offsets (in bytes)?"
4321 . ./myread
4322 lseeksize="$ans"
4323 fi
4324 case "$fpostype" in
4325 *_t) zzz="$fpostype" ;;
4326 *) zzz="fpos_t" ;;
4327 esac
4328 $echo $n "Rechecking the size of $zzz...$c" >&4
4329 $cat > try.c <<EOCP
4330#include <sys/types.h>
4331#include <stdio.h>
4332int main() {
4333 printf("%d\n", (int)sizeof($fpostype));
4334 exit(0);
4335}
4336EOCP
4337 set try
4338 if eval $compile_ok; then
4339 yyy=`./try`
4340 dflt="$lseeksize"
4341 case "$yyy" in
4342 '') echo " "
4343 echo "(I can't execute the test program--guessing $fpossize.)" >&4
4344 ;;
4345 *) fpossize=$yyy
4346 echo " $fpossize bytes."
4347 ;;
4348 esac
4349 else
4350 dflt="$fpossize"
4351 echo " "
4352 echo "(I can't compile the test program. Guessing...)" >&4
4353 rp="What is the size of your file positions (in bytes)?"
4354 . ./myread
4355 fpossize="$ans"
4356 fi
4357 $rm -f try.c try
4358 fi
dfe9444c
AD
4359 ;;
4360esac
bd9b35c9
JH
4361
4362
4363case "$usemorebits" in
4364"$define"|true|[yY]*)
4365 use64bits="$define"
4366 uselongdouble="$define"
4367 usemorebits="$define"
dfe9444c 4368 ;;
bd9b35c9 4369*) usemorebits="$undef"
dfe9444c
AD
4370 ;;
4371esac
dfe9444c 4372
dfe9444c 4373
bd9b35c9
JH
4374case "$intsize:$longsize" in
43758:*|*:8) cat <<EOM
29209bc5 4376
bd9b35c9
JH
4377You have natively 64-bit integers.
4378EOM
4379 val="$define" ;;
4380*) cat <<EOM
29209bc5 4381
bd9b35c9
JH
4382Perl can be built to take advantage of 64-bit integer types
4383on some systems. To do so, Configure must be run with -Duse64bits.
29209bc5 4384
bd9b35c9 4385If this doesn't make any sense to you, just accept the default.
29209bc5 4386EOM
bd9b35c9
JH
4387 case "$use64bits" in
4388 $define|true|[yY]*) dflt='y';;
4389 *) dflt='n';;
4390 esac
4391 rp='Try to use 64-bit integers, if available?'
4392 . ./myread
4393 case "$ans" in
4394 y|Y) val="$define" ;;
4395 *) val="$undef" ;;
4396 esac
4397 ;;
29209bc5 4398esac
bd9b35c9 4399set use64bits
29209bc5
JH
4400eval $setvar
4401
bd9b35c9
JH
4402case "$archname64" in
4403'') archname64='' ;; # not a typo
4404esac
4405
4406case "$use64bits" in
4407"$define"|true|[yY]*)
4408: Look for a hint-file generated 'call-back-unit'. If the
4409: user has specified that a 64-bit perl is to be built,
4410: we may need to set or change some other defaults.
4411 if $test -f use64bits.cbu; then
4412 echo "Your platform has some specific hints for 64-bit builds, using them..."
4413 . ./use64bits.cbu
4414 else
4415 $cat <<EOM
4416(Your platform doesn't have any specific hints for 64-bit builds.)
4417EOM
4418 case "$intsize:$longsize" in
44198:*|*:8) cat <<EOM
4420(This is probably okay, as your system is a natively 64-bit system.)
4421EOM
4422 ;;
4423 esac
4424 case "$gccversion" in
4425 '') ;;
4426 *) case "$ccflags" in
4427 *-DUSE_LONG_LONG*) ;;
4428 *) $cat <<EOM
4429But since you seem to be using gcc, I will now add -DUSE_LONG_LONG
4430to the compilation flags.
4431EOM
4432 ccflags="$ccflags -DUSE_LONG_LONG"
4433 ;;
4434 esac
4435 ;;
4436 esac
4437 fi
4438 ;;
4439esac
4440
4441: determine the architecture name
2afac517 4442echo " "
bd9b35c9
JH
4443if xxx=`./loc arch blurfl $pth`; $test -f "$xxx"; then
4444 tarch=`arch`"-$osname"
4445elif xxx=`./loc uname blurfl $pth`; $test -f "$xxx" ; then
4446 if uname -m > tmparch 2>&1 ; then
4447 tarch=`$sed -e 's/ *$//' -e 's/ /_/g' \
4448 -e 's/$/'"-$osname/" tmparch`
4449 else
4450 tarch="$osname"
4451 fi
4452 $rm -f tmparch
4453else
4454 tarch="$osname"
4455fi
4456case "$myarchname" in
4457''|"$tarch") ;;
4458*)
4459 echo "(Your architecture name used to be $myarchname.)"
4460 archname=''
4461 ;;
8e07c86e 4462esac
bd9b35c9
JH
4463myarchname="$tarch"
4464case "$archname" in
4465'') dflt="$tarch";;
4466*) dflt="$archname";;
2afac517 4467esac
bd9b35c9
JH
4468rp='What is your architecture name'
4469. ./myread
4470archname="$ans"
4471case "$usethreads" in
29209bc5 4472$define)
bd9b35c9
JH
4473 echo "Threads selected." >&4
4474 case "$archname" in
4475 *-thread*) echo "...and architecture name already has -thread." >&4
4476 ;;
4477 *) archname="$archname-thread"
4478 echo "...setting architecture name to $archname." >&4
4479 ;;
4480 esac
29209bc5
JH
4481 ;;
4482esac
bd9b35c9
JH
4483case "$usemultiplicity" in
4484$define)
4485 echo "Multiplicity selected." >&4
4486 case "$archname" in
4487 *-multi*) echo "...and architecture name already has -multi." >&4
4488 ;;
4489 *) archname="$archname-multi"
4490 echo "...setting architecture name to $archname." >&4
4491 ;;
4492 esac
4493 ;;
4494esac
4495case "$use64bits" in
4496$define)
4497 case "$archname64" in
4498 '')
4499 ;;
4500 *)
4501 case "$archname" in
4502 *-$archname64*) echo "...and architecture name already has $archname64." >&4
4503 ;;
4504 *) archname="$archname-$archname64"
4505 echo "...setting architecture name to $archname." >&4
4506 ;;
4507 esac
4508 ;;
4509 esac
4510esac
4511
4512: determine root of directory hierarchy where package will be installed.
4513case "$prefix" in
4514'')
4515 dflt=`./loc . /usr/local /usr/local /local /opt /usr`
4516 ;;
4517*)
4518 dflt="$prefix"
4519 ;;
4520esac
4521$cat <<EOM
4522
4523By default, $package will be installed in $dflt/bin, manual pages
4524under $dflt/man, etc..., i.e. with $dflt as prefix for all
4525installation directories. Typically this is something like /usr/local.
4526If you wish to have binaries under /usr/bin but other parts of the
4527installation under /usr/local, that's ok: you will be prompted
4528separately for each of the installation directories, the prefix being
4529only used to set the defaults.
4530
4531EOM
4532fn=d~
4533rp='Installation prefix to use?'
4534. ./getfile
4535oldprefix=''
4536case "$prefix" in
4537'') ;;
4538*)
4539 case "$ans" in
4540 "$prefix") ;;
4541 *) oldprefix="$prefix";;
4542 esac
4543 ;;
4544esac
4545prefix="$ans"
4546prefixexp="$ansexp"
4547
4548: is AFS running?
4549echo " "
4550case "$afs" in
4551$define|true) afs=true ;;
4552$undef|false) afs=false ;;
4553*) if test -d /afs; then
4554 afs=true
2afac517 4555 else
bd9b35c9 4556 afs=false
2afac517 4557 fi
bd9b35c9 4558 ;;
8e07c86e 4559esac
bd9b35c9
JH
4560if $afs; then
4561 echo "AFS may be running... I'll be extra cautious then..." >&4
4562else
4563 echo "AFS does not seem to be running..." >&4
4564fi
2afac517 4565
bd9b35c9
JH
4566: determine installation prefix for where package is to be installed.
4567if $afs; then
4633a7c4 4568$cat <<EOM
29209bc5 4569
bd9b35c9
JH
4570Since you are running AFS, I need to distinguish the directory in which
4571files will reside from the directory in which they are installed (and from
4572which they are presumably copied to the former directory by occult means).
4573
4633a7c4 4574EOM
bd9b35c9
JH
4575 case "$installprefix" in
4576 '') dflt=`echo $prefix | sed 's#^/afs/#/afs/.#'`;;
4577 *) dflt="$installprefix";;
4578 esac
4579else
4580$cat <<EOM
2afac517 4581
bd9b35c9
JH
4582In some special cases, particularly when building $package for distribution,
4583it is convenient to distinguish between the directory in which files should
4584be installed from the directory ($prefix) in which they
4585will eventually reside. For most users, these two directories are the same.
8e07c86e 4586
bd9b35c9
JH
4587EOM
4588 case "$installprefix" in
4589 '') dflt=$prefix ;;
4590 *) dflt=$installprefix;;
4591 esac
4592fi
4593fn=d~
4594rp='What installation prefix should I use for installing files?'
4595. ./getfile
4596installprefix="$ans"
4597installprefixexp="$ansexp"
4633a7c4 4598
bd9b35c9
JH
4599: set the prefixit variable, to compute a suitable default value
4600prefixit='case "$3" in
4601""|none)
4602 case "$oldprefix" in
4603 "") eval "$1=\"\$$2\"";;
4604 *)
4605 case "$3" in
4606 "") eval "$1=";;
4607 none)
4608 eval "tp=\"\$$2\"";
4609 case "$tp" in
4610 ""|" ") eval "$1=\"\$$2\"";;
4611 *) eval "$1=";;
4612 esac;;
4613 esac;;
4614 esac;;
4615*)
4616 eval "tp=\"$oldprefix-\$$2-\""; eval "tp=\"$tp\"";
4617 case "$tp" in
4618 --|/*--|\~*--) eval "$1=\"$prefix/$3\"";;
4619 /*-$oldprefix/*|\~*-$oldprefix/*)
4620 eval "$1=\`echo \$$2 | sed \"s,^$oldprefix,$prefix,\"\`";;
4621 *) eval "$1=\"\$$2\"";;
4622 esac;;
4623esac'
4633a7c4 4624
ff935051
JH
4625: set the base revision
4626baserev=5.0
4627
4628
4629: get the patchlevel
bd9b35c9
JH
4630echo " "
4631echo "Getting the current patchlevel..." >&4
4632if $test -r $rsrc/patchlevel.h;then
4633 patchlevel=`awk '/define[ ]+PERL_VERSION/ {print $3}' $rsrc/patchlevel.h`
4634 subversion=`awk '/define[ ]+PERL_SUBVERSION/ {print $3}' $rsrc/patchlevel.h`
ff935051
JH
4635 api_revision=`awk '/define[ ]+PERL_API_REVISION/ {print $3}' $rsrc/patchlevel.h`
4636 api_version=`awk '/define[ ]+PERL_API_VERSION/ {print $3}' $rsrc/patchlevel.h`
4637 api_subversion=`awk '/define[ ]+PERL_API_SUBVERSION/ {print $3}' $rsrc/patchlevel.h`
bd9b35c9
JH
4638else
4639 patchlevel=0
4640 subversion=0
ff935051
JH
4641 api_revision=0
4642 api_version=0
4643 api_subversion=0
bd9b35c9
JH
4644fi
4645$echo $n "(You have $package" $c
4646case "$package" in
4647"*$baserev") ;;
4648*) $echo $n " $baserev" $c ;;
4633a7c4 4649esac
bd9b35c9
JH
4650$echo $n " patchlevel $patchlevel" $c
4651test 0 -eq "$subversion" || $echo $n " subversion $subversion" $c
4652echo ".)"
ff935051 4653case "$osname" in
3645a519 4654dos|vms)
ff935051
JH
4655 : XXX Should be a Configure test for double-dots in filenames.
4656 version=`echo $baserev $patchlevel $subversion | \
273cf8d1 4657 $awk '{ printf "%d_%d_%d\n", $1, $2, $3 }'`
ff935051
JH
4658 api_versionstring=`echo $api_revision $api_version $api_subversion | \
4659 $awk '{ printf "%d_%d_%d\n", $1, $2, $3 }'`
4660 ;;
4661*)
4662 version=`echo $baserev $patchlevel $subversion | \
4663 $awk '{ printf "%d.%d.%d\n", $1, $2, $3 }'`
4664 api_versionstring=`echo $api_revision $api_version $api_subversion | \
273cf8d1 4665 $awk '{ printf "%d.%d.%d\n", $1, $2, $3 }'`
ff935051
JH
4666 ;;
4667esac
4668: Special case the 5.005_xx maintenance series, which used 5.005
4669: without any subversion label as a subdirectory in $sitelib
4670if test "${api_revision}${api_version}${api_subversion}" = "550"; then
4671 api_versionstring='5.005'
273cf8d1 4672fi
bd9b35c9
JH
4673
4674: determine installation style
4675: For now, try to deduce it from prefix unless it is already set.
4676: Reproduce behavior of 5.005 and earlier, maybe drop that in 5.7.
4677case "$installstyle" in
4678'') case "$prefix" in
4679 *perl*) dflt='lib';;
4680 *) dflt='lib/perl5' ;;
34d1710f 4681 esac
4633a7c4 4682 ;;
bd9b35c9 4683*) dflt='lib/perl5' ;;
4633a7c4 4684esac
bd9b35c9
JH
4685: Probably not worth prompting for this since we prompt for all
4686: the directories individually, and the prompt would be too long and
4687: confusing anyway.
4688installstyle=$dflt
4633a7c4 4689
bd9b35c9
JH
4690: determine where private library files go
4691: Usual default is /usr/local/lib/perl5/$version.
4692: Also allow things like /opt/perl/lib/$version, since
4693: /opt/perl/lib/perl5... would be redundant.
4694: The default "style" setting is made in installstyle.U
4695case "$installstyle" in
4696*lib/perl5*) set dflt privlib lib/$package/$version ;;
4697*) set dflt privlib lib/$version ;;
a4f3eea9 4698esac
bd9b35c9
JH
4699eval $prefixit
4700$cat <<EOM
a4f3eea9 4701
bd9b35c9
JH
4702There are some auxiliary files for $package that need to be put into a
4703private library directory that is accessible by everyone.
4704
4705EOM
4706fn=d~+
4707rp='Pathname where the private library files will reside?'
4708. ./getfile
4709privlib="$ans"
4710privlibexp="$ansexp"
4711: Change installation prefix, if necessary.
4712if $test X"$prefix" != X"$installprefix"; then
4713 installprivlib=`echo $privlibexp | sed "s#^$prefix#$installprefix#"`
a4f3eea9 4714else
bd9b35c9
JH
4715 installprivlib="$privlibexp"
4716fi
a4f3eea9 4717
bd9b35c9
JH
4718: set the prefixup variable, to restore leading tilda escape
4719prefixup='case "$prefixexp" in
4720"$prefix") ;;
4721*) eval "$1=\`echo \$$1 | sed \"s,^$prefixexp,$prefix,\"\`";;
4722esac'
a4f3eea9 4723
bd9b35c9
JH
4724: determine where public architecture dependent libraries go
4725set archlib archlib
4726eval $prefixit
4727: privlib default is /usr/local/lib/$package/$version
4728: archlib default is /usr/local/lib/$package/$version/$archname
4729: privlib may have an optional trailing /share.
4730tdflt=`echo $privlib | $sed 's,/share$,,'`
4731tdflt=$tdflt/$archname
4732case "$archlib" in
4733'') dflt=$tdflt
29209bc5 4734 ;;
bd9b35c9
JH
4735*) dflt="$archlib"
4736 ;;
29209bc5 4737esac
bd9b35c9 4738$cat <<EOM
29209bc5 4739
bd9b35c9
JH
4740$spackage contains architecture-dependent library files. If you are
4741sharing libraries in a heterogeneous environment, you might store
4742these files in a separate location. Otherwise, you can just include
4743them with the rest of the public library files.
a4f3eea9 4744
bd9b35c9
JH
4745EOM
4746fn=d+~
4747rp='Where do you want to put the public architecture-dependent libraries?'
4748. ./getfile
4749archlib="$ans"
4750archlibexp="$ansexp"
4751if $test X"$archlib" = X"$privlib"; then
4752 d_archlib="$undef"
4753else
4754 d_archlib="$define"
4755fi
4756: Change installation prefix, if necessary.
4757if $test X"$prefix" != X"$installprefix"; then
4758 installarchlib=`echo $archlibexp | sed "s#^$prefix#$installprefix#"`
4759else
4760 installarchlib="$archlibexp"
4761fi
a4f3eea9 4762
a4f3eea9 4763
bd9b35c9
JH
4764: Binary compatibility with 5.005 is not possible for builds
4765: with advanced features
4766case "$usethreads$usemultiplicity" in
4767*define*)
4768 bincompat5005="$undef"
4769 d_bincompat5005="$undef"
4770 ;;
4771*) $cat <<EOM
a4f3eea9 4772
bd9b35c9
JH
4773Perl 5.006 can be compiled for binary compatibility with 5.005.
4774If you decide to do so, you will be able to continue using most
4775of the extensions that were compiled for Perl 5.005.
a4f3eea9 4776
a4f3eea9 4777EOM
bd9b35c9
JH
4778 case "$bincompat5005$d_bincompat5005" in
4779 *"$undef"*) dflt=n ;;
4780 *) dflt=y ;;
a4f3eea9 4781 esac
bd9b35c9
JH
4782 rp='Binary compatibility with Perl 5.005?'
4783 . ./myread
4784 case "$ans" in
4785 y*) val="$define" ;;
4786 *) val="$undef" ;;
a4f3eea9 4787 esac
bd9b35c9
JH
4788 set d_bincompat5005
4789 eval $setvar
4790 case "$d_bincompat5005" in
4791 "$define")
4792 bincompat5005="$define"
4793 ;;
4794 *) bincompat5005="$undef"
4795 d_bincompat5005="$undef"
a4f3eea9 4796 ;;
4797 esac
bd9b35c9 4798 ;;
a4f3eea9 4799esac
4800
a4f3eea9 4801
bd9b35c9
JH
4802: see if setuid scripts can be secure
4803$cat <<EOM
a4f3eea9 4804
bd9b35c9
JH
4805Some kernels have a bug that prevents setuid #! scripts from being
4806secure. Some sites have disabled setuid #! scripts because of this.
a4f3eea9 4807
bd9b35c9
JH
4808First let's decide if your kernel supports secure setuid #! scripts.
4809(If setuid #! scripts would be secure but have been disabled anyway,
4810don't say that they are secure if asked.)
5ff3f7a4
GS
4811
4812EOM
a4f3eea9 4813
bd9b35c9
JH
4814val="$undef"
4815if $test -d /dev/fd; then
4816 echo "#!$ls" >reflect
4817 chmod +x,u+s reflect
4818 ./reflect >flect 2>&1
4819 if $contains "/dev/fd" flect >/dev/null; then
4820 echo "Congratulations, your kernel has secure setuid scripts!" >&4
4821 val="$define"
4822 else
4823 $cat <<EOM
4824If you are not sure if they are secure, I can check but I'll need a
4825username and password different from the one you are using right now.
4826If you don't have such a username or don't want me to test, simply
4827enter 'none'.
a4f3eea9 4828
4829EOM
bd9b35c9
JH
4830 rp='Other username to test security of setuid scripts with?'
4831 dflt='none'
4832 . ./myread
4833 case "$ans" in
4834 n|none)
4835 case "$d_suidsafe" in
4836 '') echo "I'll assume setuid scripts are *not* secure." >&4
4837 dflt=n;;
4838 "$undef")
4839 echo "Well, the $hint value is *not* secure." >&4
4840 dflt=n;;
4841 *) echo "Well, the $hint value *is* secure." >&4
4842 dflt=y;;
dfe9444c
AD
4843 esac
4844 ;;
bd9b35c9
JH
4845 *)
4846 $rm -f reflect flect
4847 echo "#!$ls" >reflect
4848 chmod +x,u+s reflect
4849 echo >flect
4850 chmod a+w flect
4851 echo '"su" will (probably) prompt you for '"$ans's password."
4852 su $ans -c './reflect >flect'
4853 if $contains "/dev/fd" flect >/dev/null; then
4854 echo "Okay, it looks like setuid scripts are secure." >&4
4855 dflt=y
4856 else
4857 echo "I don't think setuid scripts are secure." >&4
4858 dflt=n
4859 fi
4860 ;;
4861 esac
4862 rp='Does your kernel have *secure* setuid scripts?'
4863 . ./myread
4864 case "$ans" in
4865 [yY]*) val="$define";;
4866 *) val="$undef";;
dfe9444c 4867 esac
a4f3eea9 4868 fi
4869else
bd9b35c9
JH
4870 echo "I don't think setuid scripts are secure (no /dev/fd directory)." >&4
4871 echo "(That's for file descriptors, not floppy disks.)"
4872 val="$undef"
a4f3eea9 4873fi
bd9b35c9
JH
4874set d_suidsafe
4875eval $setvar
4876
4877$rm -f reflect flect
4878
4879: now see if they want to do setuid emulation
4880echo " "
4881val="$undef"
4882case "$d_suidsafe" in
4883"$define")
4884 val="$undef"
4885 echo "No need to emulate SUID scripts since they are secure here." >& 4
4886 ;;
4887*)
4888 $cat <<EOM
4889Some systems have disabled setuid scripts, especially systems where
4890setuid scripts cannot be secure. On systems where setuid scripts have
4891been disabled, the setuid/setgid bits on scripts are currently
4892useless. It is possible for $package to detect those bits and emulate
4893setuid/setgid in a secure fashion. This emulation will only work if
4894setuid scripts have been disabled in your kernel.
4895
4896EOM
4897 case "$d_dosuid" in
4898 "$define") dflt=y ;;
4899 *) dflt=n ;;
a4f3eea9 4900 esac
bd9b35c9 4901 rp="Do you want to do setuid/setgid emulation?"
a4f3eea9 4902 . ./myread
4903 case "$ans" in
bd9b35c9
JH
4904 [yY]*) val="$define";;
4905 *) val="$undef";;
a4f3eea9 4906 esac
4907 ;;
a4f3eea9 4908esac
bd9b35c9
JH
4909set d_dosuid
4910eval $setvar
a4f3eea9 4911
bfb7748a
AD
4912: determine filename position in cpp output
4913echo " "
4914echo "Computing filename position in cpp output for #include directives..." >&4
4915echo '#include <stdio.h>' > foo.c
4916$cat >fieldn <<EOF
4917$startsh
4918$cppstdin $cppflags $cppminus <foo.c 2>/dev/null | \
4919$grep '^[ ]*#.*stdio\.h' | \
4920while read cline; do
4921 pos=1
4922 set \$cline
4923 while $test \$# -gt 0; do
4924 if $test -r \`echo \$1 | $tr -d '"'\`; then
4925 echo "\$pos"
4926 exit 0
4927 fi
4928 shift
4929 pos=\`expr \$pos + 1\`
4930 done
4931done
4932EOF
4933chmod +x fieldn
4934fieldn=`./fieldn`
4935$rm -f foo.c fieldn
4936case $fieldn in
4937'') pos='???';;
49381) pos=first;;
49392) pos=second;;
49403) pos=third;;
4941*) pos="${fieldn}th";;
4942esac
4943echo "Your cpp writes the filename in the $pos field of the line."
4944
4945: locate header file
4946$cat >findhdr <<EOF
4947$startsh
4948wanted=\$1
9cc6feab 4949name=''
3656fc86
JH
4950for usrincdir in $usrinc
4951do
4952 if test -f \$usrincdir/\$wanted; then
4953 echo "\$usrincdir/\$wanted"
4954 exit 0
4955 fi
4956done
bfb7748a
AD
4957awkprg='{ print \$$fieldn }'
4958echo "#include <\$wanted>" > foo\$\$.c
4959$cppstdin $cppminus $cppflags < foo\$\$.c 2>/dev/null | \
4960$grep "^[ ]*#.*\$wanted" | \
4961while read cline; do
4962 name=\`echo \$cline | $awk "\$awkprg" | $tr -d '"'\`
4963 case "\$name" in
4e400192
JH
4964 *[/\\\\]\$wanted) echo "\$name"; exit 1;;
4965 *[\\\\/]\$wanted) echo "\$name"; exit 1;;
4966 *) exit 2;;
bfb7748a
AD
4967 esac;
4968done;
4e400192
JH
4969#
4970# status = 0: grep returned 0 lines, case statement not executed
4971# status = 1: headerfile found
4972# status = 2: while loop executed, no headerfile found
4973#
4974status=\$?
bfb7748a 4975$rm -f foo\$\$.c;
4e400192
JH
4976if test \$status -eq 1; then
4977 exit 0;
4978fi
4979exit 1
bfb7748a
AD
4980EOF
4981chmod +x findhdr
4982
4983: define an alternate in-header-list? function
4984inhdr='echo " "; td=$define; tu=$undef; yyy=$@;
4985cont=true; xxf="echo \"<\$1> found.\" >&4";
4986case $# in 2) xxnf="echo \"<\$1> NOT found.\" >&4";;
4987*) xxnf="echo \"<\$1> NOT found, ...\" >&4";;
4988esac;
4989case $# in 4) instead=instead;; *) instead="at last";; esac;
4990while $test "$cont"; do
4991 xxx=`./findhdr $1`
4992 var=$2; eval "was=\$$2";
4993 if $test "$xxx" && $test -r "$xxx";
4994 then eval $xxf;
4995 eval "case \"\$$var\" in $undef) . ./whoa; esac"; eval "$var=\$td";
4996 cont="";
4997 else eval $xxnf;
4998 eval "case \"\$$var\" in $define) . ./whoa; esac"; eval "$var=\$tu"; fi;
4999 set $yyy; shift; shift; yyy=$@;
5000 case $# in 0) cont="";;
5001 2) xxf="echo \"but I found <\$1> $instead.\" >&4";
5002 xxnf="echo \"and I did not find <\$1> either.\" >&4";;
5003 *) xxf="echo \"but I found <\$1\> instead.\" >&4";
5004 xxnf="echo \"there is no <\$1>, ...\" >&4";;
5005 esac;
5006done;
5007while $test "$yyy";
5008do set $yyy; var=$2; eval "was=\$$2";
5009 eval "case \"\$$var\" in $define) . ./whoa; esac"; eval "$var=\$tu";
5010 set $yyy; shift; shift; yyy=$@;
5011done'
5012
5013: see if this is a malloc.h system
5014set malloc.h i_malloc
5015eval $inhdr
5016
5017: see if stdlib is available
5018set stdlib.h i_stdlib
5019eval $inhdr
5020
5021: determine which malloc to compile in
5022echo " "
5023case "$usemymalloc" in
5ff3f7a4
GS
5024''|[yY]*|true|$define) dflt='y' ;;
5025*) dflt='n' ;;
bfb7748a
AD
5026esac
5027rp="Do you wish to attempt to use the malloc that comes with $package?"
5028. ./myread
5029usemymalloc="$ans"
5030case "$ans" in
5031y*|true)
5032 usemymalloc='y'
5033 mallocsrc='malloc.c'
5034 mallocobj="malloc$_o"
5035 d_mymalloc="$define"
5036 case "$libs" in
5037 *-lmalloc*)
5038 : Remove malloc from list of libraries to use
5039 echo "Removing unneeded -lmalloc from library list" >&4
5040 set `echo X $libs | $sed -e 's/-lmalloc / /' -e 's/-lmalloc$//'`
5041 shift
5042 libs="$*"
5043 echo "libs = $libs" >&4
5044 ;;
5045 esac
5046 ;;
5047*)
5048 usemymalloc='n'
5049 mallocsrc=''
5050 mallocobj=''
5051 d_mymalloc="$undef"
5052 ;;
5053esac
5054
5055: compute the return types of malloc and free
5056echo " "
5057$cat >malloc.c <<END
5058#$i_malloc I_MALLOC
5059#$i_stdlib I_STDLIB
5060#include <stdio.h>
5061#include <sys/types.h>
5062#ifdef I_MALLOC
5063#include <malloc.h>
5064#endif
5065#ifdef I_STDLIB
5066#include <stdlib.h>
5067#endif
5068#ifdef TRY_MALLOC
5069void *malloc();
5070#endif
5071#ifdef TRY_FREE
5072void free();
5073#endif
5074END
5075case "$malloctype" in
5076'')
5077 if $cc $ccflags -c -DTRY_MALLOC malloc.c >/dev/null 2>&1; then
5078 malloctype='void *'
5079 else
5080 malloctype='char *'
5081 fi
5082 ;;
5083esac
5084echo "Your system wants malloc to return '$malloctype', it would seem." >&4
5085
5086case "$freetype" in
5087'')
5088 if $cc $ccflags -c -DTRY_FREE malloc.c >/dev/null 2>&1; then
5089 freetype='void'
5090 else
5091 freetype='int'
5092 fi
5093 ;;
5094esac
5095echo "Your system uses $freetype free(), it would seem." >&4
5096$rm -f malloc.[co]
a3635516
JH
5097$cat <<EOM
5098
5099The installation process will also create a directory for
5100vendor-supplied add-ons. Vendors who supply perl with their system
5101may find it convenient to place all vendor-supplied files in this
5102directory rather than in the main distribution directory. This will
5103ease upgrades between binary-compatible maintenance versions of perl.
5104
5105Of course you may also use these directories in whatever way you see
5106fit. For example, you might use them to access modules shared over a
5107company-wide network.
5108
5109The default answer should be fine for most people.
5110This causes further questions about vendor add-ons to be skipped
5111and no vendor-specific directories will be configured for perl.
5112
5113EOM
5114rp='Do you want to configure vendor-specific add-on directories?'
5115case "$usevendorprefix" in
5116define|true|[yY]*) dflt=y ;;
5117*) dflt=n ;;
5118esac
5119. ./myread
5120case "$ans" in
5121[yY]*) fn=d~+
5122 rp='Installation prefix to use for vendor-supplied add-ons?'
5123 case "$vendorprefix" in
5124 '') dflt='' ;;
5125 *) dflt=$vendorprefix ;;
5126 esac
5127 . ./getfile
5128 oldvendorprefix=''
5129 case "$vendorprefix" in
5130 '') ;;
5131 *) case "$ans" in
5132 "$prefix") ;;
5133 *) oldvendorprefix="$prefix";;
5134 esac
5135 ;;
5136 esac
5137 usevendorprefix="$define"
5138 vendorprefix="$ans"
5139 vendorprefixexp="$ansexp"
5140 ;;
5141*) usevendorprefix="$undef"
5142 vendorprefix=''
5143 vendorprefixexp=''
5144 ;;
5145esac
5146
5147case "$vendorprefix" in
5148'') d_vendorlib="$undef"
5149 vendorlib=''
5150 vendorlibexp=''
5151 ;;
5152*) d_vendorlib="$define"
5153 : determine where vendor-supplied modules go.
629ae163 5154 : Usual default is /usr/local/lib/perl5/vendor_perl/$version
a3635516
JH
5155 prog=`echo $package | $sed 's/-*[0-9.]*$//'`
5156 case "$installstyle" in
629ae163
GS
5157 *lib/perl5*) dflt=$vendorprefix/lib/$package/vendor_$prog/$version ;;
5158 *) dflt=$vendorprefix/lib/vendor_$prog/$version ;;
a3635516
JH
5159 esac
5160 fn=d~+
5161 rp='Pathname for the vendor-supplied library files?'
5162 . ./getfile
5163 vendorlib="$ans"
5164 vendorlibexp="$ansexp"
5165 : Change installation prefix, if necessary.
5166 if $test X"$prefix" != X"$installprefix"; then
ec897fb9 5167 installvendorlib=`echo $vendorlibexp | $sed "s#^$prefix#$installprefix#"`
a3635516
JH
5168 else
5169 installvendorlib="$vendorlibexp"
5170 fi
5171 ;;
5172esac
5173
c4f23d77
AD
5174: Cruising for prototypes
5175echo " "
5176echo "Checking out function prototypes..." >&4
5177$cat >prototype.c <<'EOCP'
5a411a32 5178int main(int argc, char *argv[]) {
c4f23d77
AD
5179 exit(0);}
5180EOCP
5181if $cc $ccflags -c prototype.c >prototype.out 2>&1 ; then
5182 echo "Your C compiler appears to support function prototypes."
5183 val="$define"
5184else
5185 echo "Your C compiler doesn't seem to understand function prototypes."
5186 val="$undef"
5187fi
5188set prototype
5189eval $setvar
5190$rm -f prototype*
5191
5192case "$prototype" in
5193"$define") ;;
5194*) ansi2knr='ansi2knr'
5195 echo " "
5196 cat <<EOM >&4
5197
5198$me: FATAL ERROR:
5199This version of $package can only be compiled by a compiler that
5200understands function prototypes. Unfortunately, your C compiler
5201 $cc $ccflags
5202doesn't seem to understand them. Sorry about that.
5203
5ff3f7a4 5204If GNU cc is available for your system, perhaps you could try that instead.
c4f23d77
AD
5205
5206Eventually, we hope to support building Perl with pre-ANSI compilers.
5207If you would like to help in that effort, please contact <perlbug@perl.org>.
5208
5209Aborting Configure now.
5210EOM
5211 exit 2
5212 ;;
5213esac
5214
5215: determine where public executables go
5216echo " "
5217set dflt bin bin
5218eval $prefixit
5219fn=d~
5220rp='Pathname where the public executables will reside?'
5221. ./getfile
5222if $test "X$ansexp" != "X$binexp"; then
5223 installbin=''
5224fi
5225bin="$ans"
5226binexp="$ansexp"
dd4e71fd
JH
5227: Change installation prefix, if necessary.
5228: XXX Bug? -- ignores Configure -Dinstallprefix setting.
5229if $test X"$prefix" != X"$installprefix"; then
ec897fb9 5230 installbin=`echo $binexp | sed "s#^$prefix#$installprefix#"`
71c4afb4
JH
5231else
5232 installbin="$binexp"
c4f23d77
AD
5233fi
5234
ff935051
JH
5235$cat <<EOM
5236
5237After $package is installed, you may wish to install various
5238add-on modules and utilities. Typically, these add-ons will
5239be installed under $prefix with the rest
5240of this package. However, you may wish to install such add-ons
5241elsewhere under a different prefix.
5242
5243If you do not wish to put everything under a single prefix, that's
5244ok. You will be prompted for the individual locations; this siteprefix
5245is only used to suggest the defaults.
5246
5247The default should be fine for most people.
5248
5249EOM
5250fn=d~+
5251rp='Installation prefix to use for add-on modules and utilities?'
5252: XXX Here might be another good place for an installstyle setting.
5253case "$siteprefix" in
5254'') dflt=$prefix ;;
5255*) dflt=$siteprefix ;;
5256esac
5257. ./getfile
5258oldsiteprefix=''
5259case "$siteprefix" in
5260'') ;;
5261*)
5262 case "$ans" in
5263 "$prefix") ;;
5264 *) oldsiteprefix="$prefix";;
5265 esac
5266 ;;
5267esac
5268siteprefix="$ans"
5269siteprefixexp="$ansexp"
5270
5271: determine where site specific libraries go.
5272: Usual default is /usr/local/lib/perl5/site_perl/$version
5273: The default "style" setting is made in installstyle.U
5274: XXX No longer works with Prefixit stuff.
5275prog=`echo $package | $sed 's/-*[0-9.]*$//'`
5276case "$installstyle" in
5277*lib/perl5*) dflt=$siteprefix/lib/$package/site_$prog/$version ;;
5278*) dflt=$siteprefix/lib/site_$prog/$version ;;
5279esac
5280$cat <<EOM
5281
5282The installation process will create a directory for
5283site-specific extensions and modules. Most users find it convenient
5284to place all site-specific files in this directory rather than in the
5285main distribution directory.
5286
5287EOM
5288fn=d~+
5289rp='Pathname for the site-specific library files?'
5290. ./getfile
5291sitelib="$ans"
5292sitelibexp="$ansexp"
5293: Change installation prefix, if necessary.
5294if $test X"$prefix" != X"$installprefix"; then
5295 installsitelib=`echo $sitelibexp | sed "s#^$prefix#$installprefix#"`
5296else
5297 installsitelib="$sitelibexp"
5298fi
5299
5300: Determine list of previous versions to include in @INC
5301$cat > getverlist <<EOPL
5302#!$perl -w
5303use File::Basename;
5304\$api_versionstring = "$api_versionstring";
5305\$version = "$version";
5306\$sitelib = "$sitelib";
5307\$archname = "$archname";
5308EOPL
5309 $cat >> getverlist <<'EOPL'
5310# Can't have leading @ because metaconfig interprets it as a command!
5311;@inc_version_list=();
5312$stem=dirname($sitelib);
5313# Redo to do opendir/readdir?
5314if (-d $stem) {
5315 chdir($stem);
5316 ;@candidates = glob("5.*");
5317}
5318else {
5319 ;@candidates = ();
5320}
5321
937ac629
JH
5322# XXX ToDo: These comparisons must be reworked when two-digit
5323# subversions come along, so that 5.7.10 compares as greater than
5324# 5.7.3! By that time, hope that 5.6.x is sufficiently
5325# widespread that we can use the built-in version vectors rather
5326# than reinventing them here. For 5.6.0, however, we must
5327# assume this script will likely be run by 5.005_0x. --AD 1/2000.
ff935051
JH
5328foreach $d (@candidates) {
5329 if ($d lt $version) {
5330 if ($d ge $api_versionstring) {
5331 unshift(@inc_version_list, "$d/$archname", $d);
5332 }
5333 elsif ($d ge "5.005") {
5334 unshift(@inc_version_list, $d);
5335 }
5336 }
5337 else {
5338 # Skip newer version. I.e. don't look in
5339 # 5.7.0 if we're installing 5.6.1.
5340 }
5341}
5342
5343if (@inc_version_list) {
3a096bf3 5344 print join(' ', @inc_version_list);
ff935051
JH
5345}
5346else {
5347 # Blank space to preserve value for next Configure run.
5348 print " ";
5349}
5350EOPL
5351chmod +x getverlist
5352case "$inc_version_list" in
5353'') if test -x $perl; then
5354 dflt=`$perl getverlist`
5355 else
3a096bf3 5356 dflt='none'
ff935051
JH
5357 fi
5358 ;;
3a096bf3 5359$undef) dflt='none' ;;
ff935051
JH
5360*) dflt="$inc_version_list" ;;
5361esac
5362$cat <<'EOM'
5363
5364In order to ease the process of upgrading, this version of perl
5365can be configured to use modules built and installed with earlier
5366versions of perl that were installed under $prefix. Specify here
5367the list of earlier versions that this version of perl should check.
5368If Configure detected no earlier versions of perl installed under
3a096bf3
JH
5369$prefix, then the list will be empty. Answer 'none' to tell perl
5370to not search earlier versions.
ff935051
JH
5371
5372The default should almost always be sensible, so if you're not sure,
5373just accept the default.
5374EOM
5375
3a096bf3 5376rp='List of earlier versions to include in @INC?'
ff935051 5377. ./myread
3a096bf3
JH
5378case "$ans" in
5379[Nn]one) inc_version_list=' ' ;;
5380*) inc_version_list="$ans" ;;
5381esac
5382case "$inc_version_list" in
5383''|' ')
8353b874 5384 inc_version_list_init='0';;
3a096bf3 5385*) inc_version_list_init=`echo $inc_version_list |
8353b874 5386 $sed -e 's/^/"/' -e 's/ /","/g' -e 's/$/",0/'`
3a096bf3
JH
5387 ;;
5388esac
ff935051
JH
5389$rm -f getverlist
5390
104d25b7
JH
5391: determine whether to install perl also as /usr/bin/perl
5392
5393echo " "
dd4e71fd 5394if $test -d /usr/bin -a "X$installbin" != X/usr/bin; then
104d25b7
JH
5395 $cat <<EOM
5396Many scripts expect to perl to be installed as /usr/bin/perl.
5397I can install the perl you are about to compile also as /usr/bin/perl
5398(in addition to $installbin/perl).
5399EOM
472a4973
JH
5400 case "$installusrbinperl" in
5401 "$undef"|[nN]*) dflt='n';;
5402 *) dflt='y';;
5403 esac
104d25b7
JH
5404 rp="Do you want to install perl as /usr/bin/perl?"
5405 . ./myread
5406 case "$ans" in
5407 [yY]*) val="$define";;
472a4973 5408 *) val="$undef" ;;
104d25b7 5409 esac
472a4973
JH
5410else
5411 val="$undef"
5412fi
104d25b7
JH
5413set installusrbinperl
5414eval $setvar
5415
a4f3eea9 5416echo " "
5417echo "Checking for GNU C Library..." >&4
5418cat >gnulibc.c <<EOM
aebf16e7 5419#include <stdio.h>
5a411a32 5420int main()
a4f3eea9 5421{
aebf16e7
AD
5422#ifdef __GLIBC__
5423 exit(0);
5424#else
5425 exit(1);
5426#endif
a4f3eea9 5427}
5428EOM
dfe9444c 5429set gnulibc
aebf16e7 5430if eval $compile_ok && ./gnulibc; then
a4f3eea9 5431 val="$define"
5432 echo "You are using the GNU C Library"
4633a7c4 5433else
a4f3eea9 5434 val="$undef"
5435 echo "You are not using the GNU C Library"
4633a7c4 5436fi
a4f3eea9 5437$rm -f gnulibc*
5438set d_gnulibc
5439eval $setvar
25f94b33 5440
a4f3eea9 5441: see if nm is to be used to determine whether a symbol is defined or not
5442case "$usenm" in
5443'')
dc45a647 5444 dflt=''
a4f3eea9 5445 case "$d_gnulibc" in
dc45a647
MB
5446 "$define")
5447 echo " "
5448 echo "nm probably won't work on the GNU C Library." >&4
a4f3eea9 5449 dflt=n
5450 ;;
dc45a647
MB
5451 esac
5452 case "$dflt" in
5453 '')
5454 if $test "$osname" = aix -a ! -f /lib/syscalls.exp; then
5455 echo " "
5456 echo "Whoops! This is an AIX system without /lib/syscalls.exp!" >&4
5457 echo "'nm' won't be sufficient on this sytem." >&4
5458 dflt=n
5459 fi
5460 ;;
5461 esac
5462 case "$dflt" in
c4f23d77 5463 '') dflt=`$egrep 'inlibc|csym' $rsrc/Configure | wc -l 2>/dev/null`
a4f3eea9 5464 if $test $dflt -gt 20; then
5465 dflt=y
5466 else
5467 dflt=n
5468 fi
5469 ;;
5470 esac
5471 ;;
5472*)
5473 case "$usenm" in
dc45a647 5474 true|$define) dflt=y;;
a4f3eea9 5475 *) dflt=n;;
5476 esac
5477 ;;
25f94b33 5478esac
a4f3eea9 5479$cat <<EOM
4633a7c4 5480
dc45a647
MB
5481I can use $nm to extract the symbols from your C libraries. This
5482is a time consuming task which may generate huge output on the disk (up
5483to 3 megabytes) but that should make the symbols extraction faster. The
5484alternative is to skip the 'nm' extraction part and to compile a small
5485test program instead to determine whether each symbol is present. If
5486you have a fast C compiler and/or if your 'nm' output cannot be parsed,
5487this may be the best solution.
5488
5489You probably shouldn't let me use 'nm' if you are using the GNU C Library.
4633a7c4 5490
a4f3eea9 5491EOM
693762b4 5492rp="Shall I use $nm to extract C symbols from the libraries?"
4633a7c4
LW
5493. ./myread
5494case "$ans" in
dc45a647 5495[Nn]*) usenm=false;;
a4f3eea9 5496*) usenm=true;;
4633a7c4
LW
5497esac
5498
a4f3eea9 5499runnm=$usenm
5500case "$reuseval" in
5501true) runnm=false;;
4633a7c4 5502esac
a4f3eea9 5503
5504: nm options which may be necessary
5505case "$nm_opt" in
5506'') if $test -f /mach_boot; then
1e422769 5507 nm_opt='' # Mach
a4f3eea9 5508 elif $test -d /usr/ccs/lib; then
1e422769 5509 nm_opt='-p' # Solaris (and SunOS?)
a4f3eea9 5510 elif $test -f /dgux; then
1e422769 5511 nm_opt='-p' # DG-UX
2ae324a7 5512 elif $test -f /lib64/rld; then
1e422769 5513 nm_opt='-p' # 64-bit Irix
a4f3eea9 5514 else
5515 nm_opt=''
5516 fi;;
4633a7c4 5517esac
4633a7c4 5518
a4f3eea9 5519: nm options which may be necessary for shared libraries but illegal
5520: for archive libraries. Thank you, Linux.
5521case "$nm_so_opt" in
5522'') case "$myuname" in
5523 *linux*)
693762b4 5524 if $nm --help | $grep 'dynamic' > /dev/null 2>&1; then
a4f3eea9 5525 nm_so_opt='--dynamic'
4633a7c4 5526 fi
a4f3eea9 5527 ;;
4633a7c4 5528 esac
4633a7c4
LW
5529 ;;
5530esac
5531
a4f3eea9 5532case "$runnm" in
5533true)
5534: get list of predefined functions in a handy place
5535echo " "
5536case "$libc" in
5537'') libc=unknown
5538 case "$libs" in
dfe9444c 5539 *-lc_s*) libc=`./loc libc_s$_a $libc $libpth`
a4f3eea9 5540 esac
5541 ;;
5542esac
5543libnames='';
5544case "$libs" in
5545'') ;;
5546*) for thislib in $libs; do
5547 case "$thislib" in
5548 -lc|-lc_s)
5549 : Handle C library specially below.
5550 ;;
5551 -l*)
5552 thislib=`echo $thislib | $sed -e 's/^-l//'`
5553 if try=`./loc lib$thislib.$so.'*' X $libpth`; $test -f "$try"; then
5554 :
5555 elif try=`./loc lib$thislib.$so X $libpth`; $test -f "$try"; then
5556 :
dfe9444c 5557 elif try=`./loc lib$thislib$_a X $libpth`; $test -f "$try"; then
a4f3eea9 5558 :
dfe9444c 5559 elif try=`./loc $thislib$_a X $libpth`; $test -f "$try"; then
d97d40b5 5560 :
a4f3eea9 5561 elif try=`./loc lib$thislib X $libpth`; $test -f "$try"; then
5562 :
5563 elif try=`./loc $thislib X $libpth`; $test -f "$try"; then
5564 :
dfe9444c 5565 elif try=`./loc Slib$thislib$_a X $xlibpth`; $test -f "$try"; then
a4f3eea9 5566 :
5567 else
5568 try=''
5569 fi
5570 libnames="$libnames $try"
5571 ;;
5572 *) libnames="$libnames $thislib" ;;
5573 esac
5574 done
5575 ;;
5576esac
5577xxx=normal
5578case "$libc" in
5579unknown)
5580 set /lib/libc.$so
5581 for xxx in $libpth; do
5582 $test -r $1 || set $xxx/libc.$so
5583 : The messy sed command sorts on library version numbers.
5584 $test -r $1 || \
5585 set `echo blurfl; echo $xxx/libc.$so.[0-9]* | \
28e8609d 5586 tr ' ' $trnl | egrep -v '\.[A-Za-z]*$' | $sed -e '
a4f3eea9 5587 h
5588 s/[0-9][0-9]*/0000&/g
5589 s/0*\([0-9][0-9][0-9][0-9][0-9]\)/\1/g
5590 G
5591 s/\n/ /' | \
dfe9444c 5592 sort | $sed -e 's/^.* //'`
a4f3eea9 5593 eval set \$$#
5594 done
5595 $test -r $1 || set /usr/ccs/lib/libc.$so
dfe9444c
AD
5596 $test -r $1 || set /lib/libsys_s$_a
5597 ;;
a4f3eea9 5598*)
5599 set blurfl
5600 ;;
5601esac
5602if $test -r "$1"; then
5603 echo "Your (shared) C library seems to be in $1."
5604 libc="$1"
5605elif $test -r /lib/libc && $test -r /lib/clib; then
5606 echo "Your C library seems to be in both /lib/clib and /lib/libc."
5607 xxx=apollo
5608 libc='/lib/clib /lib/libc'
5609 if $test -r /lib/syslib; then
5610 echo "(Your math library is in /lib/syslib.)"
5611 libc="$libc /lib/syslib"
5612 fi
5613elif $test -r "$libc" || (test -h "$libc") >/dev/null 2>&1; then
5614 echo "Your C library seems to be in $libc, as you said before."
dfe9444c
AD
5615elif $test -r $incpath/usr/lib/libc$_a; then
5616 libc=$incpath/usr/lib/libc$_a;
a4f3eea9 5617 echo "Your C library seems to be in $libc. That's fine."
dfe9444c
AD
5618elif $test -r /lib/libc$_a; then
5619 libc=/lib/libc$_a;
a4f3eea9 5620 echo "Your C library seems to be in $libc. You're normal."
5621else
dfe9444c 5622 if tans=`./loc libc$_a blurfl/dyick $libpth`; $test -r "$tans"; then
a4f3eea9 5623 :
5624 elif tans=`./loc libc blurfl/dyick $libpth`; $test -r "$tans"; then
5625 libnames="$libnames "`./loc clib blurfl/dyick $libpth`
5626 elif tans=`./loc clib blurfl/dyick $libpth`; $test -r "$tans"; then
5627 :
dfe9444c 5628 elif tans=`./loc Slibc$_a blurfl/dyick $xlibpth`; $test -r "$tans"; then
a4f3eea9 5629 :
dfe9444c 5630 elif tans=`./loc Mlibc$_a blurfl/dyick $xlibpth`; $test -r "$tans"; then
a4f3eea9 5631 :
4633a7c4 5632 else
dfe9444c 5633 tans=`./loc Llibc$_a blurfl/dyick $xlibpth`
4633a7c4 5634 fi
a4f3eea9 5635 if $test -r "$tans"; then
5636 echo "Your C library seems to be in $tans, of all places."
5637 libc=$tans
5638 else
5639 libc='blurfl'
5640 fi
5641fi
5642if $test $xxx = apollo -o -r "$libc" || (test -h "$libc") >/dev/null 2>&1; then
5643 dflt="$libc"
5644 cat <<EOM
4633a7c4 5645
a4f3eea9 5646If the guess above is wrong (which it might be if you're using a strange
5647compiler, or your machine supports multiple models), you can override it here.
4633a7c4 5648
a4f3eea9 5649EOM
5650else
5651 dflt=''
28e8609d 5652 echo $libpth | tr ' ' $trnl | sort | uniq > libpath
a4f3eea9 5653 cat >&4 <<EOM
5654I can't seem to find your C library. I've looked in the following places:
4633a7c4 5655
a4f3eea9 5656EOM
5657 $sed 's/^/ /' libpath
5658 cat <<EOM
4633a7c4 5659
a4f3eea9 5660None of these seems to contain your C library. I need to get its name...
4633a7c4 5661
a4f3eea9 5662EOM
5663fi
5664fn=f
5665rp='Where is your C library?'
5666. ./getfile
5667libc="$ans"
4633a7c4 5668
4633a7c4 5669echo " "
28e8609d 5670echo $libc $libnames | tr ' ' $trnl | sort | uniq > libnames
a4f3eea9 5671set X `cat libnames`
4633a7c4 5672shift
a4f3eea9 5673xxx=files
5674case $# in 1) xxx=file; esac
5675echo "Extracting names from the following $xxx for later perusal:" >&4
5676echo " "
5677$sed 's/^/ /' libnames >&4
5678echo " "
5679$echo $n "This may take a while...$c" >&4
4633a7c4 5680
dfe9444c
AD
5681for file in $*; do
5682 case $file in
693762b4
AD
5683 *$so*) $nm $nm_so_opt $nm_opt $file 2>/dev/null;;
5684 *) $nm $nm_opt $file 2>/dev/null;;
a4f3eea9 5685 esac
dfe9444c 5686done >libc.tmp
4633a7c4 5687
a4f3eea9 5688$echo $n ".$c"
5689$grep fprintf libc.tmp > libc.ptf
5690xscan='eval "<libc.ptf $com >libc.list"; $echo $n ".$c" >&4'
5691xrun='eval "<libc.tmp $com >libc.list"; echo "done" >&4'
5692xxx='[ADTSIW]'
5693if com="$sed -n -e 's/__IO//' -e 's/^.* $xxx *_[_.]*//p' -e 's/^.* $xxx *//p'";\
5694 eval $xscan;\
5695 $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5696 eval $xrun
5697elif com="$sed -n -e 's/^__*//' -e 's/^\([a-zA-Z_0-9$]*\).*xtern.*/\1/p'";\
5698 eval $xscan;\
5699 $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5700 eval $xrun
5701elif com="$sed -n -e '/|UNDEF/d' -e '/FUNC..GL/s/^.*|__*//p'";\
5702 eval $xscan;\
5703 $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5704 eval $xrun
5705elif com="$sed -n -e 's/^.* D __*//p' -e 's/^.* D //p'";\
5706 eval $xscan;\
5707 $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5708 eval $xrun
5709elif com="$sed -n -e 's/^_//' -e 's/^\([a-zA-Z_0-9]*\).*xtern.*text.*/\1/p'";\
5710 eval $xscan;\
5711 $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5712 eval $xrun
5713elif com="$sed -n -e 's/^.*|FUNC |GLOB .*|//p'";\
5714 eval $xscan;\
5715 $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5716 eval $xrun
5717elif com="$grep '|' | $sed -n -e '/|COMMON/d' -e '/|DATA/d' \
5718 -e '/ file/d' -e 's/^\([^ ]*\).*/\1/p'";\
5719 eval $xscan;\
5720 $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5721 eval $xrun
5722elif com="$sed -n -e 's/^.*|FUNC |GLOB .*|//p' -e 's/^.*|FUNC |WEAK .*|//p'";\
5723 eval $xscan;\
5724 $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5725 eval $xrun
5726elif com="$sed -n -e 's/^__//' -e '/|Undef/d' -e '/|Proc/s/ .*//p'";\
5727 eval $xscan;\
5728 $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5729 eval $xrun
1e422769 5730elif com="$sed -n -e 's/^.*|Proc .*|Text *| *//p'";\
5731 eval $xscan;\
5732 $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5733 eval $xrun
a4f3eea9 5734elif com="$sed -n -e '/Def. Text/s/.* \([^ ]*\)\$/\1/p'";\
5735 eval $xscan;\
5736 $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5737 eval $xrun
5738elif com="$sed -n -e 's/^[-0-9a-f ]*_\(.*\)=.*/\1/p'";\
5739 eval $xscan;\
5740 $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5741 eval $xrun
44a8e56a 5742elif com="$sed -n -e 's/.*\.text n\ \ \ \.//p'";\
5743 eval $xscan;\
5744 $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5745 eval $xrun
0f502cca
BL
5746elif com="sed -n -e 's/^__.*//' -e 's/[ ]*D[ ]*[0-9]*.*//p'";\
5747 eval $xscan;\
5748 $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5749 eval $xrun
a4f3eea9 5750else
693762b4 5751 $nm -p $* 2>/dev/null >libc.tmp
a4f3eea9 5752 $grep fprintf libc.tmp > libc.ptf
5753 if com="$sed -n -e 's/^.* [ADTSIW] *_[_.]*//p' -e 's/^.* [ADTSIW] //p'";\
5754 eval $xscan; $contains '^fprintf$' libc.list >/dev/null 2>&1
5755 then
5756 nm_opt='-p'
5757 eval $xrun
4633a7c4 5758 else
a4f3eea9 5759 echo " "
e5c9fcd0 5760 echo "$nm didn't seem to work right. Trying $ar instead..." >&4
a4f3eea9 5761 com=''
dc45a647
MB
5762 if $ar t $libc > libc.tmp && $contains '^fprintf$' libc.tmp >/dev/null 2>&1; then
5763 for thisname in $libnames $libc; do
e5c9fcd0 5764 $ar t $thisname >>libc.tmp
a4f3eea9 5765 done
dfe9444c 5766 $sed -e "s/\\$_o\$//" < libc.tmp > libc.list
a4f3eea9 5767 echo "Ok." >&4
dc45a647
MB
5768 elif test "X$osname" = "Xos2" && $ar tv $libc > libc.tmp; then
5769 # Repeat libc to extract forwarders to DLL entries too
5770 for thisname in $libnames $libc; do
5771 $ar tv $thisname >>libc.tmp
5772 # Revision 50 of EMX has bug in $ar.
5773 # it will not extract forwarders to DLL entries
5774 # Use emximp which will extract exactly them.
5775 emximp -o tmp.imp $thisname \
5776 2>/dev/null && \
5777 $sed -e 's/^\([_a-zA-Z0-9]*\) .*$/\1/p' \
5778 < tmp.imp >>libc.tmp
5779 $rm tmp.imp
5780 done
5781 $sed -e "s/\\$_o\$//" -e 's/^ \+//' < libc.tmp > libc.list
5782 echo "Ok." >&4
a4f3eea9 5783 else
e5c9fcd0 5784 echo "$ar didn't seem to work right." >&4
a4f3eea9 5785 echo "Maybe this is a Cray...trying bld instead..." >&4
dfe9444c 5786 if bld t $libc | $sed -e 's/.*\///' -e "s/\\$_o:.*\$//" > libc.list
a4f3eea9 5787 then
5788 for thisname in $libnames; do
5789 bld t $libnames | \
dfe9444c 5790 $sed -e 's/.*\///' -e "s/\\$_o:.*\$//" >>libc.list
e5c9fcd0 5791 $ar t $thisname >>libc.tmp
a4f3eea9 5792 done
5793 echo "Ok." >&4
5794 else
5795 echo "That didn't work either. Giving up." >&4
5796 exit 1
5797 fi
5798 fi
4633a7c4 5799 fi
4633a7c4 5800fi
a4f3eea9 5801nm_extract="$com"
5802if $test -f /lib/syscalls.exp; then
4633a7c4 5803 echo " "
a4f3eea9 5804 echo "Also extracting names from /lib/syscalls.exp for good ole AIX..." >&4
c6912327 5805 $sed -n 's/^\([^ ]*\)[ ]*syscall[0-9]*$/\1/p' /lib/syscalls.exp >>libc.list
a4f3eea9 5806fi
5807;;
5808esac
5809$rm -f libnames libpath
5810
2afac517 5811: see if dld is available
5812set dld.h i_dld
5813eval $inhdr
4633a7c4 5814
2afac517 5815: is a C symbol defined?
5816csym='tlook=$1;
5817case "$3" in
5818-v) tf=libc.tmp; tc=""; tdc="";;
5819-a) tf=libc.tmp; tc="[0]"; tdc="[]";;
5820*) tlook="^$1\$"; tf=libc.list; tc="()"; tdc="()";;
5821esac;
5822tx=yes;
5823case "$reuseval-$4" in
5824true-) ;;
5825true-*) tx=no; eval "tval=\$$4"; case "$tval" in "") tx=yes;; esac;;
5826esac;
5827case "$tx" in
5828yes)
5829 case "$runnm" in
5830 true)
5831 if $contains $tlook $tf >/dev/null 2>&1;
5832 then tval=true;
5833 else tval=false;
5834 fi;;
5835 *)
d674cd6d 5836 echo "int main() { extern short $1$tdc; printf(\"%hd\", $1$tc); }" > t.c;
dfe9444c 5837 if $cc $optimize $ccflags $ldflags -o t t.c $libs >/dev/null 2>&1;
2afac517 5838 then tval=true;
5839 else tval=false;
5840 fi;
5841 $rm -f t t.c;;
5842 esac;;
5843*)
5844 case "$tval" in
5845 $define) tval=true;;
5846 *) tval=false;;
5847 esac;;
5848esac;
5849eval "$2=$tval"'
4633a7c4 5850
2afac517 5851: define an is-in-libc? function
5852inlibc='echo " "; td=$define; tu=$undef;
5853sym=$1; var=$2; eval "was=\$$2";
5854tx=yes;
5855case "$reuseval$was" in
5856true) ;;
5857true*) tx=no;;
5858esac;
5859case "$tx" in
5860yes)
5861 set $sym tres -f;
5862 eval $csym;
5863 case "$tres" in
5864 true)
5865 echo "$sym() found." >&4;
5866 case "$was" in $undef) . ./whoa; esac; eval "$var=\$td";;
5867 *)
5868 echo "$sym() NOT found." >&4;
5869 case "$was" in $define) . ./whoa; esac; eval "$var=\$tu";;
5870 esac;;
5871*)
5872 case "$was" in
5873 $define) echo "$sym() found." >&4;;
5874 *) echo "$sym() NOT found." >&4;;
5875 esac;;
5876esac'
4633a7c4 5877
2afac517 5878: see if dlopen exists
5879xxx_runnm="$runnm"
5880runnm=false
5881set dlopen d_dlopen
5882eval $inlibc
5883runnm="$xxx_runnm"
40a7a20a 5884
2afac517 5885: determine which dynamic loading, if any, to compile in
4633a7c4 5886echo " "
2afac517 5887dldir="ext/DynaLoader"
5888case "$usedl" in
5889$define|y|true)
5890 dflt='y'
5891 usedl="$define"
5892 ;;
5893$undef|n|false)
5894 dflt='n'
5895 usedl="$undef"
5896 ;;
5897*)
5898 dflt='n'
5899 case "$d_dlopen" in
5900 $define) dflt='y' ;;
5901 esac
5902 case "$i_dld" in
5903 $define) dflt='y' ;;
4633a7c4 5904 esac
2afac517 5905 : Does a dl_xxx.xs file exist for this operating system
dc45a647 5906 $test -f $rsrc/$dldir/dl_${osname}.xs && dflt='y'
4633a7c4
LW
5907 ;;
5908esac
2afac517 5909rp="Do you wish to use dynamic loading?"
5910. ./myread
5911usedl="$ans"
5912case "$ans" in
5913y*) usedl="$define"
5914 case "$dlsrc" in
5915 '')
dc45a647 5916 if $test -f $rsrc/$dldir/dl_${osname}.xs ; then
2afac517 5917 dflt="$dldir/dl_${osname}.xs"
5918 elif $test "$d_dlopen" = "$define" ; then
5919 dflt="$dldir/dl_dlopen.xs"
5920 elif $test "$i_dld" = "$define" ; then
5921 dflt="$dldir/dl_dld.xs"
4633a7c4 5922 else
2afac517 5923 dflt=''
4633a7c4 5924 fi
4633a7c4 5925 ;;
2afac517 5926 *) dflt="$dldir/$dlsrc"
5927 ;;
4633a7c4 5928 esac
2afac517 5929 echo "The following dynamic loading files are available:"
5930 : Can not go over to $dldir because getfile has path hard-coded in.
dc45a647
MB
5931 tdir=`pwd`; cd $rsrc; $ls -C $dldir/dl*.xs; cd $tdir
5932 rp="Source file to use for dynamic loading"
5933 fn="fne"
b233458b 5934 gfpth="$src"
dc45a647 5935 . ./getfile
2afac517 5936 usedl="$define"
5937 : emulate basename
5938 dlsrc=`echo $ans | $sed -e 's@.*/\([^/]*\)$@\1@'`
2304df62 5939
dc45a647 5940 $cat << EOM
2304df62 5941
2afac517 5942Some systems may require passing special flags to $cc -c to
5943compile modules that will be used to create a shared library.
5944To use no flags, say "none".
2304df62
AD
5945
5946EOM
2afac517 5947 case "$cccdlflags" in
5948 '') case "$gccversion" in
5949 '') case "$osname" in
5950 hpux) dflt='+z' ;;
5951 next) dflt='none' ;;
8cc95fdb 5952 irix*) dflt='-KPIC' ;;
3a6175e1 5953 svr4*|esix*|solaris) dflt='-KPIC' ;;
2afac517 5954 sunos) dflt='-pic' ;;
5955 *) dflt='none' ;;
dfe9444c
AD
5956 esac
5957 ;;
5958 *) case "$osname" in
3a6175e1 5959 svr4*|esix*|solaris) dflt='-fPIC' ;;
dfe9444c 5960 *) dflt='-fpic' ;;
81d89818 5961 esac ;;
2afac517 5962 esac ;;
bfb7748a 5963 ' ') dflt='none' ;;
2afac517 5964 *) dflt="$cccdlflags" ;;
5965 esac
5966 rp="Any special flags to pass to $cc -c to compile shared library modules?"
5967 . ./myread
5968 case "$ans" in
5969 none) cccdlflags=' ' ;;
5970 *) cccdlflags="$ans" ;;
5971 esac
2304df62 5972
2afac517 5973 cat << EOM
ecfc5424 5974
2afac517 5975Some systems use ld to create libraries that can be dynamically loaded,
5976while other systems (such as those using ELF) use $cc.
a0f45b59 5977
2afac517 5978EOM
5979 case "$ld" in
5980 '') $cat >try.c <<'EOM'
5981/* Test for whether ELF binaries are produced */
5982#include <fcntl.h>
5983#include <stdlib.h>
5a411a32 5984int main() {
2afac517 5985 char b[4];
5986 int i = open("a.out",O_RDONLY);
5987 if(i == -1)
5988 exit(1); /* fail */
5989 if(read(i,b,4)==4 && b[0]==127 && b[1]=='E' && b[2]=='L' && b[3]=='F')
5990 exit(0); /* succeed (yes, it's ELF) */
2304df62 5991 else
2afac517 5992 exit(1); /* fail */
5993}
5994EOM
5995 if $cc $ccflags try.c >/dev/null 2>&1 && ./a.out; then
5996 cat <<EOM
5997You appear to have ELF support. I'll use $cc to build dynamic libraries.
5998EOM
5999 dflt="$cc"
2304df62 6000 else
2afac517 6001 echo "I'll use ld to build dynamic libraries."
6002 dflt='ld'
2304df62 6003 fi
2afac517 6004 rm -f try.c a.out
6005 ;;
6006 *) dflt="$ld"
6007 ;;
6008 esac
6009
6010 rp="What command should be used to create dynamic libraries?"
6011 . ./myread
6012 ld="$ans"
6013
6014 cat << EOM
6015
6016Some systems may require passing special flags to $ld to create a
6017library that can be dynamically loaded. If your ld flags include
6018-L/other/path options to locate libraries outside your loader's normal
6019search path, you may need to specify those -L options here as well. To
6020use no flags, say "none".
6021
6022EOM
6023 case "$lddlflags" in
6024 '') case "$osname" in
46193409 6025 beos) dflt='-nostart' ;;
2afac517 6026 hpux) dflt='-b' ;;
6027 linux|irix*) dflt='-shared' ;;
6028 next) dflt='none' ;;
6029 solaris) dflt='-G' ;;
6030 sunos) dflt='-assert nodefinitions' ;;
6031 svr4*|esix*) dflt="-G $ldflags" ;;
6032 *) dflt='none' ;;
6033 esac
6034 ;;
6035 *) dflt="$lddlflags" ;;
6036 esac
6037
bfb7748a 6038 : Try to guess additional flags to pick up local libraries.
a0915cb7
AD
6039 : Be careful not to append to a plain 'none'
6040 case "$dflt" in
6041 none) dflt='' ;;
6042 esac
bfb7748a
AD
6043 for thisflag in $ldflags; do
6044 case "$thisflag" in
6045 -L*)
6046 case " $dflt " in
6047 *" $thisflag "*) ;;
6048 *) dflt="$dflt $thisflag" ;;
6049 esac
6050 ;;
2afac517 6051 esac
bfb7748a 6052 done
2afac517 6053
bfb7748a
AD
6054 case "$dflt" in
6055 ''|' ') dflt='none' ;;
6056 esac
2afac517 6057
6058 rp="Any special flags to pass to $ld to create a dynamically loaded library?"
6059 . ./myread
6060 case "$ans" in
6061 none) lddlflags=' ' ;;
6062 *) lddlflags="$ans" ;;
6063 esac
6064
6065 cat <<EOM
6066
6067Some systems may require passing special flags to $cc to indicate that
6068the resulting executable will use dynamic linking. To use no flags,
6069say "none".
6070
6071EOM
6072 case "$ccdlflags" in
6073 '') case "$osname" in
6074 hpux) dflt='-Wl,-E' ;;
6075 linux) dflt='-rdynamic' ;;
6076 next) dflt='none' ;;
6077 sunos) dflt='none' ;;
6078 *) dflt='none' ;;
6079 esac ;;
bfb7748a 6080 ' ') dflt='none' ;;
2afac517 6081 *) dflt="$ccdlflags" ;;
6082 esac
7f95ee77 6083 rp="Any special flags to pass to $cc to use dynamic linking?"
2afac517 6084 . ./myread
6085 case "$ans" in
6086 none) ccdlflags=' ' ;;
6087 *) ccdlflags="$ans" ;;
6088 esac
6089 ;;
6090*) usedl="$undef"
6091 ld='ld'
6092 dlsrc='dl_none.xs'
6093 lddlflags=''
6094 ccdlflags=''
6095 ;;
6096esac
6097
6098also=''
6099case "$usedl" in
6100$undef)
6101 # No dynamic loading being used, so don't bother even to prompt.
6102 useshrplib='false'
6103 ;;
6104*) case "$useshrplib" in
6105 '') case "$osname" in
4fabb596 6106 svr4*|dgux|dynixptx|esix|powerux|beos|cygwin*)
3e3baf6d 6107 dflt=y
2afac517 6108 also='Building a shared libperl is required for dynamic loading to work on your system.'
6109 ;;
6110 next*)
6111 case "$osvers" in
3e3baf6d 6112 4*) dflt=y
2afac517 6113 also='Building a shared libperl is needed for MAB support.'
6114 ;;
3e3baf6d 6115 *) dflt=n
2afac517 6116 ;;
6117 esac
6118 ;;
3e3baf6d 6119 *) dflt=n
2afac517 6120 ;;
6121 esac
6122 ;;
6123 $define|true|[Yy]*)
3e3baf6d 6124 dflt=y
2afac517 6125 ;;
3e3baf6d 6126 *) dflt=n
2afac517 6127 ;;
6128 esac
6129 $cat << EOM
6130
6131The perl executable is normally obtained by linking perlmain.c with
dfe9444c 6132libperl${_a}, any static extensions (usually just DynaLoader), and
2afac517 6133any other libraries needed on this system (such as -lm, etc.). Since
6134your system supports dynamic loading, it is probably possible to build
6135a shared libperl.$so. If you will have more than one executable linked
6136to libperl.$so, this will significantly reduce the size of each
6137executable, but it may have a noticeable affect on performance. The
6138default is probably sensible for your system.
6139$also
6140
6141EOM
6142 rp="Build a shared libperl.$so (y/n)"
6143 . ./myread
6144 case "$ans" in
6145 true|$define|[Yy]*)
5cf1d1f1 6146 useshrplib='true' ;;
2afac517 6147 *) useshrplib='false' ;;
6148 esac
6149 ;;
6150esac
6151
6152case "$useshrplib" in
6153true)
6154 case "$libperl" in
6155 '')
6156 # Figure out a good name for libperl.so. Since it gets stored in
6157 # a version-specific architecture-dependent library, the version
6158 # number isn't really that important, except for making cc/ld happy.
6159 #
6160 # A name such as libperl.so.3.1
6161 majmin="libperl.$so.$patchlevel.$subversion"
6162 # A name such as libperl.so.301
6163 majonly=`echo $patchlevel $subversion |
6164 $awk '{printf "%d%02d", $1, $2}'`
6165 majonly=libperl.$so.$majonly
6166 # I'd prefer to keep the os-specific stuff here to a minimum, and
6167 # rely on figuring it out from the naming of libc.
6168 case "${osname}${osvers}" in
6169 next4*)
6170 dflt=libperl.5.$so
6171 # XXX How handle the --version stuff for MAB?
6172 ;;
6173 linux*) # ld won't link with a bare -lperl otherwise.
6174 dflt=libperl.$so
6175 ;;
4fabb596
GS
6176 cygwin*) # include version
6177 dflt=`echo libperl$version | sed -e 's/\./_/g'`$lib_ext
6178 ;;
2afac517 6179 *) # Try to guess based on whether libc has major.minor.
6180 case "$libc" in
6181 *libc.$so.[0-9]*.[0-9]*) dflt=$majmin ;;
6182 *libc.$so.[0-9]*) dflt=$majonly ;;
6183 *) dflt=libperl.$so ;;
6184 esac
6185 ;;
6186 esac
6187 ;;
6188 *) dflt=$libperl
6189 ;;
6190 esac
6191 cat << EOM
6192
6193I need to select a good name for the shared libperl. If your system uses
6194library names with major and minor numbers, then you might want something
6195like $majmin. Alternatively, if your system uses a single version
6196number for shared libraries, then you might want to use $majonly.
6197Or, your system might be quite happy with a simple libperl.$so.
6198
6199Since the shared libperl will get installed into a version-specific
6200architecture-dependent directory, the version number of the shared perl
6201library probably isn't important, so the default should be o.k.
6202
6203EOM
6204 rp='What name do you want to give to the shared libperl?'
6205 . ./myread
6206 libperl=$ans
6207 echo "Ok, I'll use $libperl"
6208 ;;
6209*)
dfe9444c 6210 libperl="libperl${_a}"
2afac517 6211 ;;
6212esac
6213
6214# Detect old use of shrpdir via undocumented Configure -Dshrpdir
6215case "$shrpdir" in
6216'') ;;
6217*) $cat >&4 <<EOM
6218WARNING: Use of the shrpdir variable for the installation location of
6219the shared $libperl is not supported. It was never documented and
46193409 6220will not work in this version. Let me (perlbug@perl.com)
dfe9444c 6221know of any problems this may cause.
2afac517 6222
6223EOM
6224 case "$shrpdir" in
6225 "$archlibexp/CORE")
6226 $cat >&4 <<EOM
6227But your current setting of $shrpdir is
6228the default anyway, so it's harmless.
6229EOM
6230 ;;
6231 *)
4e2a5f63
AD
6232 $cat >&4 <<EOM
6233Further, your current attempted setting of $shrpdir
6234conflicts with the value of $archlibexp/CORE
6235that installperl will use.
6236EOM
dc45a647
MB
6237 ;;
6238 esac
6239 ;;
6240esac
6241
6242# How will the perl executable find the installed shared $libperl?
6243# Add $xxx to ccdlflags.
6244# If we can't figure out a command-line option, use $shrpenv to
6245# set env LD_RUN_PATH. The main perl makefile uses this.
6246shrpdir=$archlibexp/CORE
6247xxx=''
6248tmp_shrpenv=''
6249if "$useshrplib"; then
6250 case "$osname" in
6251 aix)
6252 # We'll set it in Makefile.SH...
6253 ;;
6254 solaris|netbsd)
6255 xxx="-R $shrpdir"
6256 ;;
6257 freebsd)
6258 xxx="-Wl,-R$shrpdir"
6259 ;;
6260 linux|irix*|dec_osf)
6261 xxx="-Wl,-rpath,$shrpdir"
6262 ;;
6263 next)
6264 # next doesn't like the default...
6265 ;;
46193409
JH
6266 beos)
6267 # beos doesn't like the default, either.
6268 ;;
3656fc86
JH
6269 hpux*)
6270 # hpux doesn't like the default, either.
6271 tmp_shrpenv="env LDOPTS=\"+s +b${shrpdir}\""
6272 ;;
dc45a647
MB
6273 *)
6274 tmp_shrpenv="env LD_RUN_PATH=$shrpdir"
6275 ;;
6276 esac
6277 case "$xxx" in
6278 '') ;;
6279 *)
6280 # Only add $xxx if it isn't already in ccdlflags.
6281 case " $ccdlflags " in
6282 *" $xxx "*) ;;
6283 *) ccdlflags="$ccdlflags $xxx"
6284 cat <<EOM >&4
6285
6286Adding $xxx to the flags
6287passed to $ld so that the perl executable will find the
6288installed shared $libperl.
6289
6290EOM
6291 ;;
6292 esac
6293 ;;
6294 esac
6295fi
5cf1d1f1
JH
6296# Fix ccdlflags in AIX for building external extensions.
6297# (For building Perl itself bare -bE:perl.exp is needed,
6298# Makefile.SH takes care of this.)
5f9d9a17 6299case "$osname" in
5cf1d1f1 6300aix) ccdlflags="$ccdlflags -bE:$installarchlib/CORE/perl.exp" ;;
5f9d9a17 6301esac
dc45a647
MB
6302# Respect a hint or command-line value.
6303case "$shrpenv" in
6304'') shrpenv="$tmp_shrpenv" ;;
6305esac
5cf1d1f1
JH
6306case "$ldlibpthname" in
6307'') ldlibpthname=LD_LIBRARY_PATH ;;
6308none) ldlibpthname='' ;;
6309esac
dc45a647
MB
6310
6311: determine where manual pages go
6312set man1dir man1dir none
6313eval $prefixit
6314$cat <<EOM
6315
6316$spackage has manual pages available in source form.
6317EOM
6318case "$nroff" in
6319nroff)
6320 echo "However, you don't have nroff, so they're probably useless to you."
6321 case "$man1dir" in
6322 '') man1dir="none";;
6323 esac;;
6324esac
6325echo "If you don't want the manual sources installed, answer 'none'."
6326case "$man1dir" in
6327' ') dflt=none
6328 ;;
6329'')
6330 lookpath="$prefixexp/man/man1 $prefixexp/man/l_man/man1"
6331 lookpath="$lookpath $prefixexp/man/p_man/man1"
6332 lookpath="$lookpath $prefixexp/man/u_man/man1"
6333 lookpath="$lookpath $prefixexp/man/man.1"
6334 case "$sysman" in
6335 */?_man*) dflt=`./loc . $prefixexp/l_man/man1 $lookpath` ;;
6336 *) dflt=`./loc . $prefixexp/man/man1 $lookpath` ;;
6337 esac
6338 set dflt
6339 eval $prefixup
6340 ;;
6341*) dflt="$man1dir"
6342 ;;
6343esac
6344echo " "
6345fn=dn+~
6346rp="Where do the main $spackage manual pages (source) go?"
6347. ./getfile
6348if $test "X$man1direxp" != "X$ansexp"; then
6349 installman1dir=''
6350fi
6351man1dir="$ans"
6352man1direxp="$ansexp"
6353case "$man1dir" in
dd4e71fd 6354'') man1dir=' '
dc45a647
MB
6355 installman1dir='';;
6356esac
dc45a647 6357
dd4e71fd
JH
6358: Change installation prefix, if necessary.
6359if $test X"$prefix" != X"$installprefix"; then
ec897fb9 6360 installman1dir=`echo $man1direxp | $sed "s#^$prefix#$installprefix#"`
71c4afb4
JH
6361else
6362 installman1dir="$man1direxp"
dc45a647
MB
6363fi
6364
6365: What suffix to use on installed man pages
6366
6367case "$man1dir" in
6368' ')
6369 man1ext='0'
6370 ;;
6371*)
6372 rp="What suffix should be used for the main $spackage man pages?"
6373 case "$man1ext" in
6374 '') case "$man1dir" in
6375 *1) dflt=1 ;;
6376 *1p) dflt=1p ;;
6377 *1pm) dflt=1pm ;;
6378 *l) dflt=l;;
6379 *n) dflt=n;;
6380 *o) dflt=o;;
6381 *p) dflt=p;;
6382 *C) dflt=C;;
6383 *L) dflt=L;;
6384 *L1) dflt=L1;;
6385 *) dflt=1;;
6386 esac
6387 ;;
6388 *) dflt="$man1ext";;
6389 esac
6390 . ./myread
6391 man1ext="$ans"
6392 ;;
6393esac
6394
6395: see if we can have long filenames
6396echo " "
6397rmlist="$rmlist /tmp/cf$$"
6398$test -d /tmp/cf$$ || mkdir /tmp/cf$$
6399first=123456789abcdef
6400second=/tmp/cf$$/$first
6401$rm -f $first $second
6402if (echo hi >$first) 2>/dev/null; then
6403 if $test -f 123456789abcde; then
6404 echo 'You cannot have filenames longer than 14 characters. Sigh.' >&4
6405 val="$undef"
6406 else
6407 if (echo hi >$second) 2>/dev/null; then
6408 if $test -f /tmp/cf$$/123456789abcde; then
6409 $cat <<'EOM'
6410That's peculiar... You can have filenames longer than 14 characters, but only
6411on some of the filesystems. Maybe you are using NFS. Anyway, to avoid problems
6412I shall consider your system cannot support long filenames at all.
6413EOM
6414 val="$undef"
6415 else
6416 echo 'You can have filenames longer than 14 characters.' >&4
6417 val="$define"
6418 fi
6419 else
6420 $cat <<'EOM'
6421How confusing! Some of your filesystems are sane enough to allow filenames
6422longer than 14 characters but some others like /tmp can't even think about them.
6423So, for now on, I shall assume your kernel does not allow them at all.
6424EOM
6425 val="$undef"
6426 fi
6427 fi
6428else
6429 $cat <<'EOM'
6430You can't have filenames longer than 14 chars. You can't even think about them!
6431EOM
6432 val="$undef"
6433fi
6434set d_flexfnam
6435eval $setvar
6436$rm -rf /tmp/cf$$ 123456789abcde*
6437
6438: determine where library module manual pages go
6439set man3dir man3dir none
6440eval $prefixit
6441$cat <<EOM
6442
6443$spackage has manual pages for many of the library modules.
6444EOM
6445
6446case "$nroff" in
6447nroff)
6448 $cat <<'EOM'
6449However, you don't have nroff, so they're probably useless to you.
6450EOM
6451 case "$man3dir" in
6452 '') man3dir="none";;
6453 esac;;
6454esac
6455
6456case "$d_flexfnam" in
6457undef)
6458 $cat <<'EOM'
6459However, your system can't handle the long file names like File::Basename.3.
6460EOM
6461 case "$man3dir" in
6462 '') man3dir="none";;
6463 esac;;
6464esac
6465
6466echo "If you don't want the manual sources installed, answer 'none'."
6467prog=`echo $package | $sed 's/-*[0-9.]*$//'`
6468case "$man3dir" in
dd4e71fd
JH
6469'') dflt=`echo $man1dir | $sed -e 's/man1/man3/g' -e 's/man\.1/man\.3/g'`
6470 if $test -d "$privlib/man/man3"; then
6471 cat <<EOM >&4
6472
6473WARNING: Previous versions of perl installed man3 pages into
6474$privlib/man/man3. This version will suggest a
6475new default of $dflt.
6476EOM
6477 tdflt=$dflt
6478 dflt='n'
6479 rp='Do you wish to preserve the old behavior?(y/n)'
6480 . ./myread
6481 case "$ans" in
6482 y*) dflt="$privlib/man/man3" ;;
6483 *) dflt=$tdflt ;;
6484 esac
6485 fi
2afac517 6486 ;;
dc45a647
MB
6487' ') dflt=none;;
6488*) dflt="$man3dir" ;;
2afac517 6489esac
dc45a647 6490echo " "
dc45a647
MB
6491fn=dn+~
6492rp="Where do the $package library man pages (source) go?"
6493. ./getfile
dc45a647
MB
6494man3dir="$ans"
6495man3direxp="$ansexp"
dd4e71fd
JH
6496case "$man1dir" in
6497'') man3dir=' '
dc45a647
MB
6498 installman3dir='';;
6499esac
dc45a647 6500
dd4e71fd
JH
6501: Change installation prefix, if necessary.
6502if $test X"$prefix" != X"$installprefix"; then
ec897fb9 6503 installman3dir=`echo $man3direxp | $sed "s#^$prefix#$installprefix#"`
71c4afb4
JH
6504else
6505 installman3dir="$man3direxp"
dc45a647
MB
6506fi
6507
6508: What suffix to use on installed man pages
dc45a647
MB
6509case "$man3dir" in
6510' ')
6511 man3ext='0'
6512 ;;
6513*)
6514 rp="What suffix should be used for the $package library man pages?"
6515 case "$man3ext" in
6516 '') case "$man3dir" in
6517 *3) dflt=3 ;;
6518 *3p) dflt=3p ;;
6519 *3pm) dflt=3pm ;;
6520 *l) dflt=l;;
6521 *n) dflt=n;;
6522 *o) dflt=o;;
6523 *p) dflt=p;;
6524 *C) dflt=C;;
6525 *L) dflt=L;;
6526 *L3) dflt=L3;;
6527 *) dflt=3;;
2afac517 6528 esac
6529 ;;
dc45a647 6530 *) dflt="$man3ext";;
2afac517 6531 esac
dc45a647
MB
6532 . ./myread
6533 man3ext="$ans"
6534 ;;
2afac517 6535esac
6536
6537: see if we have to deal with yellow pages, now NIS.
6538if $test -d /usr/etc/yp || $test -d /etc/yp; then
6539 if $test -f /usr/etc/nibindd; then
6540 echo " "
6541 echo "I'm fairly confident you're on a NeXT."
6542 echo " "
6543 rp='Do you get the hosts file via NetInfo?'
6544 dflt=y
6545 case "$hostcat" in
6546 nidump*) ;;
6547 '') ;;
6548 *) dflt=n;;
6549 esac
6550 . ./myread
6551 case "$ans" in
6552 y*) hostcat='nidump hosts .';;
6553 *) case "$hostcat" in
6554 nidump*) hostcat='';;
6555 esac
6556 ;;
6557 esac
6558 fi
6559 case "$hostcat" in
6560 nidump*) ;;
6561 *)
6562 case "$hostcat" in
6563 *ypcat*) dflt=y;;
6564 '') if $contains '^\+' /etc/passwd >/dev/null 2>&1; then
6565 dflt=y
6566 else
6567 dflt=n
6568 fi;;
6569 *) dflt=n;;
6570 esac
6571 echo " "
6572 rp='Are you getting the hosts file via yellow pages?'
6573 . ./myread
6574 case "$ans" in
6575 y*) hostcat='ypcat hosts';;
6576 *) hostcat='cat /etc/hosts';;
6577 esac
6578 ;;
6579 esac
6580fi
dfe9444c 6581case "$hostcat" in
7599c0b3 6582'') test -f /etc/hosts && hostcat='cat /etc/hosts';;
dfe9444c
AD
6583esac
6584case "$groupcat" in
7599c0b3 6585'') test -f /etc/group && groupcat='cat /etc/group';;
dfe9444c
AD
6586esac
6587case "$passcat" in
7599c0b3 6588'') test -f /etc/passwd && passcat='cat /etc/passwd';;
dfe9444c 6589esac
2afac517 6590
6591: now get the host name
6592echo " "
6593echo "Figuring out host name..." >&4
6594case "$myhostname" in
6595'') cont=true
6596 echo 'Maybe "hostname" will work...'
6597 if tans=`sh -c hostname 2>&1` ; then
6598 myhostname=$tans
6599 phostname=hostname
6600 cont=''
6601 fi
6602 ;;
6603*) cont='';;
6604esac
6605if $test "$cont"; then
6606 if ./xenix; then
6607 echo 'Oh, dear. Maybe "/etc/systemid" is the key...'
6608 if tans=`cat /etc/systemid 2>&1` ; then
6609 myhostname=$tans
6610 phostname='cat /etc/systemid'
6611 echo "Whadyaknow. Xenix always was a bit strange..."
6612 cont=''
6613 fi
6614 elif $test -r /etc/systemid; then
6615 echo "(What is a non-Xenix system doing with /etc/systemid?)"
6616 fi
6617fi
6618if $test "$cont"; then
6619 echo 'No, maybe "uuname -l" will work...'
6620 if tans=`sh -c 'uuname -l' 2>&1` ; then
6621 myhostname=$tans
6622 phostname='uuname -l'
6623 else
6624 echo 'Strange. Maybe "uname -n" will work...'
6625 if tans=`sh -c 'uname -n' 2>&1` ; then
6626 myhostname=$tans
6627 phostname='uname -n'
6628 else
6629 echo 'Oh well, maybe I can mine it out of whoami.h...'
6630 if tans=`sh -c $contains' sysname $usrinc/whoami.h' 2>&1` ; then
6631 myhostname=`echo "$tans" | $sed 's/^.*"\(.*\)"/\1/'`
6632 phostname="sed -n -e '"'/sysname/s/^.*\"\\(.*\\)\"/\1/{'"' -e p -e q -e '}' <$usrinc/whoami.h"
6633 else
6634 case "$myhostname" in
6635 '') echo "Does this machine have an identity crisis or something?"
6636 phostname='';;
6637 *)
6638 echo "Well, you said $myhostname before..."
6639 phostname='echo $myhostname';;
6640 esac
6641 fi
6642 fi
6643 fi
6644fi
6645: you do not want to know about this
6646set $myhostname
6647myhostname=$1
6648
6649: verify guess
6650if $test "$myhostname" ; then
6651 dflt=y
6652 rp='Your host name appears to be "'$myhostname'".'" Right?"
6653 . ./myread
6654 case "$ans" in
6655 y*) ;;
6656 *) myhostname='';;
6657 esac
6658fi
6659
6660: bad guess or no guess
6661while $test "X$myhostname" = X ; do
6662 dflt=''
6663 rp="Please type the (one word) name of your host:"
6664 . ./myread
6665 myhostname="$ans"
6666done
6667
6668: translate upper to lower if necessary
6669case "$myhostname" in
6670*[A-Z]*)
6671 echo "(Normalizing case in your host name)"
6672 myhostname=`echo $myhostname | ./tr '[A-Z]' '[a-z]'`
6673 ;;
6674esac
6675
6676case "$myhostname" in
6677*.*)
6678 dflt=`expr "X$myhostname" : "X[^.]*\(\..*\)"`
6679 myhostname=`expr "X$myhostname" : "X\([^.]*\)\."`
6680 echo "(Trimming domain name from host name--host name is now $myhostname)"
6681 ;;
6682*) case "$mydomain" in
6683 '')
6684 {
2afac517 6685 test "X$hostcat" = "Xypcat hosts" &&
6686 ypmatch "$myhostname" hosts 2>/dev/null |\
6687 $sed -e 's/[ ]*#.*//; s/$/ /' > hosts && \
6688 $test -s hosts
6689 } || {
7599c0b3 6690 test "X$hostcat" != "X" &&
2afac517 6691 $hostcat | $sed -n -e "s/[ ]*#.*//; s/\$/ /
6692 /[ ]$myhostname[ . ]/p" > hosts
6693 }
6694 tmp_re="[ . ]"
6695 $test x`$awk "/[0-9].*[ ]$myhostname$tmp_re/ { sum++ }
6696 END { print sum }" hosts` = x1 || tmp_re="[ ]"
6697 dflt=.`$awk "/[0-9].*[ ]$myhostname$tmp_re/ {for(i=2; i<=NF;i++) print \\\$i}" \
6698 hosts | $sort | $uniq | \
6699 $sed -n -e "s/$myhostname\.\([-a-zA-Z0-9_.]\)/\1/p"`
6700 case `$echo X$dflt` in
6701 X*\ *) echo "(Several hosts in /etc/hosts matched hostname)"
6702 dflt=.
6703 ;;
6704 X.) echo "(You do not have fully-qualified names in /etc/hosts)"
6705 ;;
6706 esac
6707 case "$dflt" in
6708 .)
6709 tans=`./loc resolv.conf X /etc /usr/etc`
6710 if $test -f "$tans"; then
6711 echo "(Attempting domain name extraction from $tans)"
a6006777 6712 dflt=.`$sed -n -e 's/ / /g' \
28757baa 6713 -e 's/^search *\([^ ]*\).*/\1/p' $tans \
a6006777 6714 | ./tr '[A-Z]' '[a-z]' 2>/dev/null`
2afac517 6715 case "$dflt" in
a6006777 6716 .) dflt=.`$sed -n -e 's/ / /g' \
28757baa 6717 -e 's/^domain *\([^ ]*\).*/\1/p' $tans \
a6006777 6718 | ./tr '[A-Z]' '[a-z]' 2>/dev/null`
774d564b 6719 ;;
2afac517 6720 esac
6721 fi
6722 ;;
6723 esac
6724 case "$dflt" in
6725 .) echo "(No help from resolv.conf either -- attempting clever guess)"
6726 dflt=.`sh -c domainname 2>/dev/null`
6727 case "$dflt" in
6728 '') dflt='.';;
6729 .nis.*|.yp.*|.main.*) dflt=`echo $dflt | $sed -e 's/^\.[^.]*//'`;;
6730 esac
6731 ;;
6732 esac
6733 case "$dflt" in
6734 .) echo "(Lost all hope -- silly guess then)"
6735 dflt='.uucp'
6736 ;;
6737 esac
6738 $rm -f hosts
6739 ;;
6740 *) dflt="$mydomain";;
6741 esac;;
6742esac
6743echo " "
6744rp="What is your domain name?"
6745. ./myread
6746tans="$ans"
6747case "$ans" in
6748'') ;;
6749.*) ;;
6750*) tans=".$tans";;
6751esac
6752mydomain="$tans"
6753
6754: translate upper to lower if necessary
6755case "$mydomain" in
6756*[A-Z]*)
6757 echo "(Normalizing case in your domain name)"
6758 mydomain=`echo $mydomain | ./tr '[A-Z]' '[a-z]'`
6759 ;;
6760esac
6761
6762: a little sanity check here
6763case "$phostname" in
6764'') ;;
6765*)
6766 case `$phostname | ./tr '[A-Z]' '[a-z]'` in
6767 $myhostname$mydomain|$myhostname) ;;
6768 *)
6769 case "$phostname" in
6770 sed*)
6771 echo "(That doesn't agree with your whoami.h file, by the way.)"
6772 ;;
6773 *)
6774 echo "(That doesn't agree with your $phostname command, by the way.)"
6775 ;;
6776 esac
6777 ;;
6778 esac
6779 ;;
6780esac
6781
6782$cat <<EOM
6783
6784I need to get your e-mail address in Internet format if possible, i.e.
6785something like user@host.domain. Please answer accurately since I have
6786no easy means to double check it. The default value provided below
7f95ee77 6787is most probably close to reality but may not be valid from outside
2afac517 6788your organization...
6789
6790EOM
6791cont=x
6792while test "$cont"; do
6793 case "$cf_email" in
6794 '') dflt="$cf_by@$myhostname$mydomain";;
6795 *) dflt="$cf_email";;
6796 esac
6797 rp='What is your e-mail address?'
6798 . ./myread
6799 cf_email="$ans"
6800 case "$cf_email" in
6801 *@*.*) cont='' ;;
6802 *)
6803 rp='Address does not look like an Internet one. Use it anyway?'
6804 case "$fastread" in
6805 yes) dflt=y ;;
6806 *) dflt=n ;;
6807 esac
6808 . ./myread
6809 case "$ans" in
6810 y*) cont='' ;;
6811 *) echo " " ;;
6812 esac
6813 ;;
6814 esac
6815done
6816
6817$cat <<EOM
6818
6819If you or somebody else will be maintaining perl at your site, please
6820fill in the correct e-mail address here so that they may be contacted
6821if necessary. Currently, the "perlbug" program included with perl
6822will send mail to this address in addition to perlbug@perl.com. You may
6823enter "none" for no administrator.
6824
6825EOM
6826case "$perladmin" in
6827'') dflt="$cf_email";;
6828*) dflt="$perladmin";;
6829esac
6830rp='Perl administrator e-mail address'
6831. ./myread
6832perladmin="$ans"
6833
5f05dabc 6834: figure out how to guarantee perl startup
6835case "$startperl" in
6836'')
6837 case "$sharpbang" in
6838 *!)
6839 $cat <<EOH
6840
6841I can use the #! construct to start perl on your system. This will
6842make startup of perl scripts faster, but may cause problems if you
6843want to share those scripts and perl is not in a standard place
6844($binexp/perl) on all your platforms. The alternative is to force
6845a shell by starting the script with a single ':' character.
6846
6847EOH
6848 dflt="$binexp/perl"
6849 rp='What shall I put after the #! to start up perl ("none" to not use #!)?'
6850 . ./myread
6851 case "$ans" in
68dc0745 6852 none) startperl=": # use perl";;
6853 *) startperl="#!$ans"
3e3baf6d 6854 if $test 30 -lt `echo "$ans" | wc -c`; then
68dc0745 6855 $cat >&4 <<EOM
6856
6857WARNING: Some systems limit the #! command to 32 characters.
6858If you experience difficulty running Perl scripts with #!, try
6859installing Perl in a directory with a shorter pathname.
6860
6861EOM
6862 fi ;;
5f05dabc 6863 esac
6864 ;;
6865 *) startperl=": # use perl"
6866 ;;
6867 esac
6868 ;;
6869esac
6870echo "I'll use $startperl to start perl scripts."
6871
6872: figure best path for perl in scripts
6873case "$perlpath" in
6874'')
6875 perlpath="$binexp/perl"
6876 case "$startperl" in
6877 *!*) ;;
6878 *)
6879 $cat <<EOH
6880
6881I will use the "eval 'exec'" idiom to start Perl on your system.
6882I can use the full path of your Perl binary for this purpose, but
6883doing so may cause problems if you want to share those scripts and
6884Perl is not always in a standard place ($binexp/perl).
6885
6886EOH
6887 dflt="$binexp/perl"
6888 rp="What path shall I use in \"eval 'exec'\"?"
6889 . ./myread
6890 perlpath="$ans"
6891 ;;
6892 esac
6893 ;;
6894esac
6895case "$startperl" in
6896*!*) ;;
6897*) echo "I'll use $perlpath in \"eval 'exec'\"" ;;
6898esac
6899
dc45a647
MB
6900: determine where public executable scripts go
6901set scriptdir scriptdir
6902eval $prefixit
6903case "$scriptdir" in
6904'')
6905 dflt="$bin"
6906 : guess some guesses
6907 $test -d /usr/share/scripts && dflt=/usr/share/scripts
dd4e71fd
JH
6908 $test -d /usr/share/bin && dflt=/usr/share/bin
6909 $test -d /usr/local/script && dflt=/usr/local/script
6910 $test -d /usr/local/scripts && dflt=/usr/local/scripts
6911 $test -d $prefixexp/script && dflt=$prefixexp/script
dc45a647
MB
6912 set dflt
6913 eval $prefixup
6914 ;;
6915*) dflt="$scriptdir"
6916 ;;
6917esac
6918$cat <<EOM
6919
6920Some installations have a separate directory just for executable scripts so
6921that they can mount it across multiple architectures but keep the scripts in
6922one spot. You might, for example, have a subdirectory of /usr/share for this.
6923Or you might just lump your scripts in with all your other executables.
6924
6925EOM
6926fn=d~
6927rp='Where do you keep publicly executable scripts?'
6928. ./getfile
6929if $test "X$ansexp" != "X$scriptdirexp"; then
6930 installscript=''
6931fi
6932scriptdir="$ans"
6933scriptdirexp="$ansexp"
dd4e71fd
JH
6934: Change installation prefix, if necessary.
6935if $test X"$prefix" != X"$installprefix"; then
ec897fb9 6936 installscript=`echo $scriptdirexp | sed "s#^$prefix#$installprefix#"`
dd4e71fd
JH
6937else
6938 installscript="$scriptdirexp"
6939fi
dc45a647 6940
dc45a647 6941: determine where site specific architecture-dependent libraries go.
273cf8d1
GS
6942: sitelib default is /usr/local/lib/perl5/site_perl/$version
6943: sitearch default is /usr/local/lib/perl5/site_perl/$version/$archname
3a6175e1 6944: sitelib may have an optional trailing /share.
bfb7748a 6945tdflt=`echo $sitelib | $sed 's,/share$,,'`
273cf8d1 6946tdflt="$tdflt/$archname"
dc45a647
MB
6947set sitearch sitearch none
6948eval $prefixit
6949case "$sitearch" in
bfb7748a 6950'') dflt="$tdflt" ;;
dc45a647
MB
6951*) dflt="$sitearch" ;;
6952esac
6953$cat <<EOM
6954
6955The installation process will also create a directory for
6956architecture-dependent site-specific extensions and modules.
6957
6958EOM
6959fn=nd~+
6960rp='Pathname for the site-specific architecture-dependent library files?'
6961. ./getfile
dc45a647
MB
6962sitearch="$ans"
6963sitearchexp="$ansexp"
dd4e71fd
JH
6964: Change installation prefix, if necessary.
6965if $test X"$prefix" != X"$installprefix"; then
ec897fb9 6966 installsitearch=`echo $sitearchexp | sed "s#^$prefix#$installprefix#"`
71c4afb4
JH
6967else
6968 installsitearch="$sitearchexp"
dc45a647
MB
6969fi
6970
717c4fcc
JH
6971: determine where add-on public executables go
6972case "$sitebin" in
6973'') dflt=$siteprefix/bin ;;
6974*) dflt=$sitebin ;;
6975esac
6976fn=d~
6977rp='Pathname where the add-on public executables should be installed?'
6978. ./getfile
6979sitebin="$ans"
6980sitebinexp="$ansexp"
6981: Change installation prefix, if necessary.
6982if $test X"$prefix" != X"$installprefix"; then
6983 installsitebin=`echo $sitebinexp | sed "s#^$prefix#$installprefix#"`
6984else
6985 installsitebin="$sitebinexp"
6986fi
6987
43999f95
JH
6988: see if sqrtl exists
6989set sqrtl d_sqrtl
6990eval $inlibc
6991
2afac517 6992cat <<EOM
6993
b0ce926a 6994Perl can be built to take advantage of long doubles which
d7d93a81 6995(if available) may give more accuracy and range for floating point numbers.
b0ce926a
JH
6996
6997If this doesn't make any sense to you, just accept the default 'n'.
6998EOM
d7d93a81
JH
6999
7000case "$ccflags" in
7001*-DUSE_LONG_DOUBLE*|*-DUSE_MORE_BITS*) uselongdouble="$define" ;;
7002esac
7003
b0ce926a
JH
7004case "$uselongdouble" in
7005$define|true|[yY]*) dflt='y';;
7006*) dflt='n';;
7007esac
7008rp='Try to use long doubles if available?'
7009. ./myread
7010case "$ans" in
309d43cf
JH
7011y|Y) val="$define" ;;
7012*) val="$undef" ;;
b0ce926a
JH
7013esac
7014set uselongdouble
7015eval $setvar
7016
d9b3e12d 7017case "$uselongdouble" in
d7d93a81
JH
7018true|[yY]*) uselongdouble="$define" ;;
7019esac
7020
7021case "$uselongdouble" in
7022$define)
d9b3e12d
JH
7023: Look for a hint-file generated 'call-back-unit'. If the
7024: user has specified that long doubles should be used,
7025: we may need to set or change some other defaults.
7026 if $test -f uselongdouble.cbu; then
7027 echo "Your platform has some specific hints for long doubles, using them..."
7028 . ./uselongdouble.cbu
7029 else
7030 $cat <<EOM
7031(Your platform doesn't have any specific hints for long doubles.)
7032EOM
7033 fi
7034 ;;
7035esac
b0ce926a 7036
43999f95
JH
7037case "$uselongdouble:$d_sqrtl" in
7038$define:$undef)
7039 $cat <<EOM >&4
7040
7041You requested the use of long doubles but you do not seem to have
7042the mathematic functions for long doubles. I'm disabling the use
7043of long doubles.
7044EOM
7045 uselongdouble=$undef
7046 ;;
7047esac
7048
b0ce926a
JH
7049cat <<EOM
7050
d7d93a81
JH
7051Perl can be built to take advantage of long longs which
7052(if available) may give more range for integer numbers.
7053
7054If this doesn't make any sense to you, just accept the default 'n'.
7055EOM
7056
7057case "$ccflags" in
7058*-DUSE_LONG_LONG*) uselonglong="$define" ;;
7059esac
7060
7061case "$uselonglong" in
43999f95 7062'') dflt='y';;
d7d93a81
JH
7063esac
7064rp='Try to use long longs if available?'
7065. ./myread
7066case "$ans" in
7067y|Y) val="$define" ;;
7068*) val="$undef" ;;
7069esac
7070set uselonglong
7071eval $setvar
7072
7073case "$uselonglong" in
7074true|[yY]*) uselonglong="$define" ;;
7075esac
7076
7077case "$uselonglong" in
7078$define)
7079: Look for a hint-file generated 'call-back-unit'. If the
7080: user has specified that long longs should be used,
7081: we may need to set or change some other defaults.
7082 if $test -f uselonglong.cbu; then
7083 echo "Your platform has some specific hints for long longs, using them..."
7084 . ./uselonglong.cbu
7085 else
7086 $cat <<EOM
7087(Your platform doesn't have any specific hints for long longs.)
7088EOM
7089 fi
7090 ;;
7091esac
7092
7093cat <<EOM
7094
85aff577
CS
7095Previous version of $package used the standard IO mechanisms as defined
7096in <stdio.h>. Versions 5.003_02 and later of perl allow alternate IO
2afac517 7097mechanisms via a "PerlIO" abstraction, but the stdio mechanism is still
85aff577
CS
7098the default. This abstraction layer can use AT&T's sfio (if you already
7099have sfio installed) or regular stdio. Using PerlIO with sfio may cause
7100problems with some extension modules. Using PerlIO with stdio is safe,
7101but it is slower than plain stdio and therefore is not the default.
2afac517 7102
7103If this doesn't make any sense to you, just accept the default 'n'.
7104EOM
7105case "$useperlio" in
7106$define|true|[yY]*) dflt='y';;
7107*) dflt='n';;
7108esac
7109rp='Use the experimental PerlIO abstraction layer?'
7110. ./myread
7111case "$ans" in
7112y|Y)
7113 val="$define"
7114 ;;
7115*)
7116 echo "Ok, doing things the stdio way"
7117 val="$undef"
7118 ;;
7119esac
7120set useperlio
7121eval $setvar
2304df62 7122
717c4fcc
JH
7123case "$vendorprefix" in
7124'') d_vendorbin="$undef"
7125 vendorbin=''
7126 vendorbinexp=''
7127 ;;
7128*) d_vendorbin="$define"
7129 : determine where vendor-supplied executables go.
7130 dflt=$vendorprefix/bin
7131 fn=d~+
7132 rp='Pathname for the vendor-supplied executables directory?'
7133 . ./getfile
7134 vendorbin="$ans"
7135 vendorbinexp="$ansexp"
7136 : Change installation prefix, if necessary.
7137 if $test X"$prefix" != X"$installprefix"; then
7138 installvendorbin=`echo $vendorbinexp | $sed "s#^$prefix#$installprefix#"`
7139 else
7140 installvendorbin="$vendorbinexp"
7141 fi
7142 ;;
7143esac
7144
628e1a40
JH
7145: check for length of double
7146echo " "
7147case "$doublesize" in
7148'')
7149 $echo $n "Checking to see how big your double precision numbers are...$c" >&4
7150 $cat >try.c <<'EOCP'
7151#include <stdio.h>
7152int main()
7153{
7154 printf("%d\n", (int)sizeof(double));
7155 exit(0);
7156}
7157EOCP
7158 set try
7159 if eval $compile_ok; then
7160 doublesize=`./try`
7161 $echo " $doublesize bytes." >&4
7162 else
7163 dflt='8'
7164 echo "(I can't seem to compile the test program. Guessing...)"
7165 rp="What is the size of a double precision number (in bytes)?"
7166 . ./myread
7167 doublesize="$ans"
7168 fi
7169 ;;
7170esac
7171$rm -f try.c try
7172
7173: check for long doubles
7174echo " "
7175$echo $n "Checking to see if your system supports long double..." $c >&4
7176echo 'int main() { long double x = 7.0; }' > try.c
7177set try
7178if eval $compile; then
7179 val="$define"
7180 echo " Yes, it does." >&4
7181else
7182 val="$undef"
7183 echo " No, it doesn't." >&4
7184fi
7185$rm try.*
7186set d_longdbl
7187eval $setvar
7188
7189: check for length of long double
7190case "${d_longdbl}${longdblsize}" in
7191$define)
7192 echo " "
7193 $echo $n "Checking to see how big your long doubles are..." $c >&4
7194 $cat >try.c <<'EOCP'
7195#include <stdio.h>
7196int main()
7197{
7198 printf("%d\n", sizeof(long double));
7199}
7200EOCP
7201 set try
7202 set try
7203 if eval $compile; then
7204 longdblsize=`./try$exe_ext`
7205 $echo " $longdblsize bytes." >&4
7206 else
7207 dflt='8'
7208 echo " "
7209 echo "(I can't seem to compile the test program. Guessing...)" >&4
7210 rp="What is the size of a long double (in bytes)?"
7211 . ./myread
7212 longdblsize="$ans"
7213 fi
7214 if $test "X$doublesize" = "X$longdblsize"; then
7215 echo "(That isn't any different from an ordinary double.)"
7216 fi
7217 ;;
7218esac
7219$rm -f try.* try
ff935051 7220
8e07c86e 7221: Check how to convert floats to strings.
28e8609d 7222if test "X$d_Gconvert" = X; then
5ff3f7a4
GS
7223 echo " "
7224 echo "Checking for an efficient way to convert floats to strings."
628e1a40 7225 $cat >try.c <<EOP
8e07c86e
AD
7226#ifdef TRY_gconvert
7227#define Gconvert(x,n,t,b) gconvert((x),(n),(t),(b))
8ff267be 7228char *myname = "gconvert";
8e07c86e
AD
7229#endif
7230#ifdef TRY_gcvt
7231#define Gconvert(x,n,t,b) gcvt((x),(n),(b))
8ff267be 7232char *myname = "gcvt";
8e07c86e 7233#endif
ff935051
JH
7234#ifdef TRY_qgcvt
7235#define Gconvert(x,n,t,b) qgcvt((x),(n),(b))
7236char *myname = "qgcvt";
628e1a40 7237#define DOUBLETYPE long double
ff935051 7238#endif
8e07c86e
AD
7239#ifdef TRY_sprintf
7240#define Gconvert(x,n,t,b) sprintf((b),"%.*g",(n),(x))
8ff267be 7241char *myname = "sprintf";
8e07c86e 7242#endif
8ff267be 7243
628e1a40
JH
7244#ifndef DOUBLETYPE
7245#define DOUBLETYPE double
7246#endif
7247
8ff267be 7248#include <stdio.h>
7249
43999f95 7250#define I_STDLIB $i_stdlib
628e1a40
JH
7251#ifdef I_STDLIB
7252#include <stdlib.h>
7253#endif
7254
8ff267be 7255int
7256checkit(expect, got)
7257char *expect;
7258char *got;
7259{
7260 if (strcmp(expect, got)) {
7261 printf("%s oddity: Expected %s, got %s\n",
7262 myname, expect, got);
7263 exit(1);
7264 }
7265}
7266
5a411a32 7267int main()
8ff267be 7268{
ecfc5424 7269 char buf[64];
8ff267be 7270 buf[63] = '\0';
7271
7272 /* This must be 1st test on (which?) platform */
7273 /* Alan Burlison <AlanBurlsin@unn.unisys.com> */
628e1a40 7274 Gconvert((DOUBLETYPE)0.1, 8, 0, buf);
8ff267be 7275 checkit("0.1", buf);
7276
628e1a40 7277 Gconvert((DOUBLETYPE)1.0, 8, 0, buf);
8ff267be 7278 checkit("1", buf);
7279
628e1a40 7280 Gconvert((DOUBLETYPE)0.0, 8, 0, buf);
8ff267be 7281 checkit("0", buf);
7282
628e1a40 7283 Gconvert((DOUBLETYPE)-1.0, 8, 0, buf);
8ff267be 7284 checkit("-1", buf);
7285
7286 /* Some Linux gcvt's give 1.e+5 here. */
628e1a40 7287 Gconvert((DOUBLETYPE)100000.0, 8, 0, buf);
8ff267be 7288 checkit("100000", buf);
7289
7290 /* Some Linux gcvt's give -1.e+5 here. */
628e1a40 7291 Gconvert((DOUBLETYPE)-100000.0, 8, 0, buf);
8ff267be 7292 checkit("-100000", buf);
7293
ecfc5424 7294 exit(0);
a0d0e21e
LW
7295}
7296EOP
5ff3f7a4
GS
7297 case "$d_Gconvert" in
7298 gconvert*) xxx_list='gconvert gcvt sprintf' ;;
7299 gcvt*) xxx_list='gcvt gconvert sprintf' ;;
7300 sprintf*) xxx_list='sprintf gconvert gcvt' ;;
7301 *) xxx_list='gconvert gcvt sprintf' ;;
7302 esac
8e07c86e 7303
628e1a40
JH
7304 case "$d_longdbl$uselongdouble" in
7305 definedefine) xxx_list="`echo $xxx_list|sed 's/gcvt/qgcvt gcvt/'`" ;;
ff935051
JH
7306 esac
7307
5ff3f7a4 7308 for xxx_convert in $xxx_list; do
ff935051 7309 echo "Trying $xxx_convert..."
5ff3f7a4
GS
7310 $rm -f try try$_o
7311 set try -DTRY_$xxx_convert
7312 if eval $compile; then
628e1a40 7313 echo "$xxx_convert() found." >&4
5ff3f7a4
GS
7314 if ./try; then
7315 echo "I'll use $xxx_convert to convert floats into a string." >&4
7316 break;
7317 else
7318 echo "...But $xxx_convert didn't work as I expected."
7319 fi
2304df62 7320 else
5ff3f7a4 7321 echo "$xxx_convert NOT found." >&4
2304df62 7322 fi
5ff3f7a4 7323 done
8e07c86e 7324
5ff3f7a4
GS
7325 case "$xxx_convert" in
7326 gconvert) d_Gconvert='gconvert((x),(n),(t),(b))' ;;
7327 gcvt) d_Gconvert='gcvt((x),(n),(b))' ;;
ff935051 7328 qgcvt) d_Gconvert='qgcvt((x),(n),(b))' ;;
5ff3f7a4
GS
7329 *) d_Gconvert='sprintf((b),"%.*g",(n),(x))' ;;
7330 esac
28e8609d 7331fi
2304df62 7332
cf2093f6
JH
7333echo " "
7334
ea1c3b15 7335if $test X"$d_longdbl" = X"$define"; then
cf2093f6
JH
7336
7337echo "Checking how to print long doubles..." >&4
7338
7339if $test X"$sPRIfldbl" = X -a X"$doublesize" = X"$longdblsize"; then
7340 $cat >try.c <<'EOCP'
7341#include <sys/types.h>
7342#include <stdio.h>
7343int main() {
7344 double d = 123.456;
7345 printf("%.3f\n", d);
7346}
7347EOCP
7348 set try
7349 if eval $compile; then
7350 yyy=`./try$exe_ext`
7351 case "$yyy" in
7352 123.456)
7353 sPRIfldbl='"f"'; sPRIgldbl='"g"'; sPRIeldbl='"e"';
7354 sPRIFldbl='"F"'; sPRIGldbl='"G"'; sPRIEldbl='"E"';
7355 echo "We will use %f."
7356 ;;
7357 esac
7358 fi
7359fi
7360
7361if $test X"$sPRIfldbl" = X; then
7362 $cat >try.c <<'EOCP'
7363#include <sys/types.h>
7364#include <stdio.h>
7365int main() {
7366 long double d = 123.456;
ea1c3b15 7367 printf("%.3llf\n", d);
cf2093f6
JH
7368}
7369EOCP
7370 set try
7371 if eval $compile; then
7372 yyy=`./try$exe_ext`
7373 case "$yyy" in
7374 123.456)
ea1c3b15
JH
7375 sPRIfldbl='"llf"'; sPRIgldbl='"llg"'; sPRIeldbl='"lle"';
7376 sPRIFldbl='"llF"'; sPRIGldbl='"llG"'; sPRIEldbl='"llE"';
7377 echo "We will use %llf."
cf2093f6
JH
7378 ;;
7379 esac
7380 fi
7381fi
7382
7383if $test X"$sPRIfldbl" = X; then
7384 $cat >try.c <<'EOCP'
7385#include <sys/types.h>
7386#include <stdio.h>
7387int main() {
7388 long double d = 123.456;
ea1c3b15 7389 printf("%.3Lf\n", d);
cf2093f6
JH
7390}
7391EOCP
7392 set try
7393 if eval $compile; then
7394 yyy=`./try$exe_ext`
7395 case "$yyy" in
7396 123.456)
ea1c3b15
JH
7397 sPRIfldbl='"Lf"'; sPRIgldbl='"Lg"'; sPRIeldbl='"Le"';
7398 sPRIFldbl='"LF"'; sPRIGldbl='"LG"'; sPRIEldbl='"LE"';
7399 echo "We will use %Lf."
cf2093f6
JH
7400 ;;
7401 esac
7402 fi
7403fi
7404
11dc3f68 7405if $test X"$sPRIfldbl" = X; then
cf2093f6
JH
7406 $cat >try.c <<'EOCP'
7407#include <sys/types.h>
7408#include <stdio.h>
7409int main() {
7410 long double d = 123.456;
ea1c3b15 7411 printf("%.3lf\n", d);
cf2093f6
JH
7412}
7413EOCP
7414 set try
7415 if eval $compile; then
7416 yyy=`./try$exe_ext`
7417 case "$yyy" in
7418 123.456)
ea1c3b15
JH
7419 sPRIfldbl='"lf"'; sPRIgldbl='"lg"'; sPRIeldbl='"le"';
7420 sPRIFldbl='"lF"'; sPRIGldbl='"lG"'; sPRIEldbl='"lE"';
7421 echo "We will use %lf."
cf2093f6
JH
7422 ;;
7423 esac
7424 fi
7425fi
7426
09e3ef00
JH
7427if $test X"$sPRIfldbl" = X; then
7428 echo "Cannot figure out how to print long doubles." >&4
7429fi
7430
ea1c3b15 7431$rm -f try try.*
cf2093f6 7432
ea1c3b15 7433fi # d_longdbl
cf2093f6
JH
7434
7435case "$sPRIfldbl" in
7436'') d_PRIfldbl="$undef"; d_PRIgldbl="$undef"; d_PRIeldbl="$undef";
7437 d_PRIFldbl="$undef"; d_PRIGldbl="$undef"; d_PRIEldbl="$undef";
7438 ;;
7439*) d_PRIfldbl="$define"; d_PRIgldbl="$define"; d_PRIeldbl="$define";
7440 d_PRIFldbl="$define"; d_PRIGldbl="$define"; d_PRIEldbl="$define";
7441 ;;
7442esac
7443
a0d0e21e
LW
7444: Initialize h_fcntl
7445h_fcntl=false
7446
7447: Initialize h_sysfile
7448h_sysfile=false
2304df62 7449
2304df62
AD
7450: access call always available on UNIX
7451set access d_access
7452eval $inlibc
7453
7454: locate the flags for 'access()'
7455case "$d_access" in
7456"$define")
7457 echo " "
7458 $cat >access.c <<'EOCP'
7459#include <sys/types.h>
7460#ifdef I_FCNTL
7461#include <fcntl.h>
7462#endif
7463#ifdef I_SYS_FILE
7464#include <sys/file.h>
7465#endif
7466#ifdef I_UNISTD
7467#include <unistd.h>
7468#endif
d674cd6d 7469int main() {
2304df62
AD
7470 exit(R_OK);
7471}
8e07c86e
AD
7472EOCP
7473 : check sys/file.h first, no particular reason here
7474 if $test `./findhdr sys/file.h` && \
dfe9444c 7475 $cc $cppflags -DI_SYS_FILE -o access access.c >/dev/null 2>&1 ; then
8e07c86e
AD
7476 h_sysfile=true;
7477 echo "<sys/file.h> defines the *_OK access constants." >&4
7478 elif $test `./findhdr fcntl.h` && \
dfe9444c 7479 $cc $cppflags -DI_FCNTL -o access access.c >/dev/null 2>&1 ; then
8e07c86e
AD
7480 h_fcntl=true;
7481 echo "<fcntl.h> defines the *_OK access constants." >&4
7482 elif $test `./findhdr unistd.h` && \
dfe9444c 7483 $cc $cppflags -DI_UNISTD -o access access.c >/dev/null 2>&1 ; then
8e07c86e
AD
7484 echo "<unistd.h> defines the *_OK access constants." >&4
7485 else
7486 echo "I can't find the four *_OK access constants--I'll use mine." >&4
7487 fi
7488 ;;
7489esac
7490$rm -f access*
a0d0e21e 7491
5ff3f7a4
GS
7492: see if accessx exists
7493set accessx d_accessx
7494eval $inlibc
7495
8e07c86e
AD
7496: see if alarm exists
7497set alarm d_alarm
7498eval $inlibc
2304df62 7499
cf2093f6
JH
7500: see if atolf exists
7501set atolf d_atolf
7502eval $inlibc
7503
7504: see if atoll exists
7505set atoll d_atoll
7506eval $inlibc
7507
ecfc5424 7508: Look for GNU-cc style attribute checking
2304df62 7509echo " "
a0d0e21e
LW
7510echo "Checking whether your compiler can handle __attribute__ ..." >&4
7511$cat >attrib.c <<'EOCP'
1aef975c 7512#include <stdio.h>
ecfc5424 7513void croak (char* pat,...) __attribute__((format(printf,1,2),noreturn));
a0d0e21e
LW
7514EOCP
7515if $cc $ccflags -c attrib.c >attrib.out 2>&1 ; then
7516 if $contains 'warning' attrib.out >/dev/null 2>&1; then
ecfc5424 7517 echo "Your C compiler doesn't fully support __attribute__."
a0d0e21e
LW
7518 val="$undef"
7519 else
ecfc5424 7520 echo "Your C compiler supports __attribute__."
a0d0e21e
LW
7521 val="$define"
7522 fi
7523else
ecfc5424 7524 echo "Your C compiler doesn't seem to understand __attribute__ at all."
a0d0e21e
LW
7525 val="$undef"
7526fi
ecfc5424 7527set d_attribut
a0d0e21e
LW
7528eval $setvar
7529$rm -f attrib*
7530
7531: see if bcmp exists
7532set bcmp d_bcmp
7533eval $inlibc
7534
7535: see if bcopy exists
7536set bcopy d_bcopy
7537eval $inlibc
7538
2afac517 7539: see if this is a unistd.h system
7540set unistd.h i_unistd
7541eval $inhdr
7542
7543: see if getpgrp exists
7544set getpgrp d_getpgrp
7545eval $inlibc
7546
2afac517 7547case "$d_getpgrp" in
7548"$define")
7549 echo " "
dfe9444c 7550 echo "Checking to see which flavor of getpgrp is in use..."
2afac517 7551 $cat >set.c <<EOP
7552#$i_unistd I_UNISTD
7553#include <sys/types.h>
7554#ifdef I_UNISTD
7555# include <unistd.h>
7556#endif
5a411a32 7557int main()
2afac517 7558{
7559 if (getuid() == 0) {
7560 printf("(I see you are running Configure as super-user...)\n");
7561 setuid(1);
7562 }
7563#ifdef TRY_BSD_PGRP
7564 if (getpgrp(1) == 0)
7565 exit(0);
7566#else
7567 if (getpgrp() > 0)
7568 exit(0);
7569#endif
7570 exit(1);
7571}
7572EOP
7573 if $cc -DTRY_BSD_PGRP $ccflags $ldflags -o set set.c $libs >/dev/null 2>&1 && ./set; then
7574 echo "You have to use getpgrp(pid) instead of getpgrp()." >&4
7575 val="$define"
7576 elif $cc $ccflags $ldflags -o set set.c $libs >/dev/null 2>&1 && ./set; then
7577 echo "You have to use getpgrp() instead of getpgrp(pid)." >&4
7578 val="$undef"
7579 else
7580 echo "I can't seem to compile and run the test program."
7581 if ./usg; then
7582 xxx="a USG one, i.e. you use getpgrp()."
7583 else
7584 # SVR4 systems can appear rather BSD-ish.
7585 case "$i_unistd" in
7586 $undef)
7587 xxx="a BSD one, i.e. you use getpgrp(pid)."
7588 val="$define"
7589 ;;
7590 $define)
7591 xxx="probably a USG one, i.e. you use getpgrp()."
7592 val="$undef"
7593 ;;
7594 esac
7595 fi
7596 echo "Assuming your getpgrp is $xxx" >&4
7597 fi
7598 ;;
7599*) val="$undef";;
7600esac
7601set d_bsdgetpgrp
7602eval $setvar
7603$rm -f set set.c
7604
a0d0e21e
LW
7605: see if setpgrp exists
7606set setpgrp d_setpgrp
7607eval $inlibc
7608
a0d0e21e
LW
7609case "$d_setpgrp" in
7610"$define")
7611 echo " "
dfe9444c 7612 echo "Checking to see which flavor of setpgrp is in use..."
a0d0e21e 7613 $cat >set.c <<EOP
2afac517 7614#$i_unistd I_UNISTD
7615#include <sys/types.h>
7616#ifdef I_UNISTD
7617# include <unistd.h>
7618#endif
5a411a32 7619int main()
a0d0e21e
LW
7620{
7621 if (getuid() == 0) {
7622 printf("(I see you are running Configure as super-user...)\n");
7623 setuid(1);
7624 }
2afac517 7625#ifdef TRY_BSD_PGRP
a0d0e21e 7626 if (-1 == setpgrp(1, 1))
2afac517 7627 exit(0);
7628#else
7629 if (setpgrp() != -1)
7630 exit(0);
7631#endif
7632 exit(1);
a0d0e21e
LW
7633}
7634EOP
2afac517 7635 if $cc -DTRY_BSD_PGRP $ccflags $ldflags -o set set.c $libs >/dev/null 2>&1 && ./set; then
7636 echo 'You have to use setpgrp(pid,pgrp) instead of setpgrp().' >&4
7637 val="$define"
7638 elif $cc $ccflags $ldflags -o set set.c $libs >/dev/null 2>&1 && ./set; then
7639 echo 'You have to use setpgrp() instead of setpgrp(pid,pgrp).' >&4
7640 val="$undef"
a0d0e21e 7641 else
dfe9444c 7642 echo "(I can't seem to compile and run the test program.)"
ecfc5424 7643 if ./usg; then
2afac517 7644 xxx="a USG one, i.e. you use setpgrp()."
a0d0e21e 7645 else
2afac517 7646 # SVR4 systems can appear rather BSD-ish.
7647 case "$i_unistd" in
7648 $undef)
7649 xxx="a BSD one, i.e. you use setpgrp(pid,pgrp)."
7650 val="$define"
7651 ;;
7652 $define)
7653 xxx="probably a USG one, i.e. you use setpgrp()."
7654 val="$undef"
7655 ;;
7656 esac
a0d0e21e 7657 fi
2afac517 7658 echo "Assuming your setpgrp is $xxx" >&4
a0d0e21e
LW
7659 fi
7660 ;;
7661*) val="$undef";;
7662esac
2afac517 7663set d_bsdsetpgrp
a0d0e21e
LW
7664eval $setvar
7665$rm -f set set.c
a0d0e21e
LW
7666: see if bzero exists
7667set bzero d_bzero
7668eval $inlibc
7669
ecfc5424 7670: see if signal is declared as pointer to function returning int or void
a0d0e21e 7671echo " "
ecfc5424
AD
7672xxx=`./findhdr signal.h`
7673$test "$xxx" && $cppstdin $cppminus $cppflags < $xxx >$$.tmp 2>/dev/null
7674if $contains 'int.*\*[ ]*signal' $$.tmp >/dev/null 2>&1 ; then
7675 echo "You have int (*signal())() instead of void." >&4
7676 val="$undef"
7677elif $contains 'void.*\*[ ]*signal' $$.tmp >/dev/null 2>&1 ; then
dfe9444c 7678 echo "You have void (*signal())()." >&4
ecfc5424
AD
7679 val="$define"
7680elif $contains 'extern[ ]*[(\*]*signal' $$.tmp >/dev/null 2>&1 ; then
7681 echo "You have int (*signal())() instead of void." >&4
7682 val="$undef"
dfe9444c
AD
7683elif $contains 'void.*\*.*sig' $$.tmp >/dev/null 2>&1 ; then
7684 echo "You have void (*signal())()." >&4
7685 val="$define"
a0d0e21e 7686else
ecfc5424
AD
7687 case "$d_voidsig" in
7688 '')
7689 echo "I can't determine whether signal handler returns void or int..." >&4
7690 dflt=void
7691 rp="What type does your signal handler return?"
7692 . ./myread
7693 case "$ans" in
7694 v*) val="$define";;
7695 *) val="$undef";;
7696 esac;;
7697 "$define")
dfe9444c
AD
7698 echo "As you already told me, signal handler returns void." >&4
7699 val="$define"
7700 ;;
7701 *) echo "As you already told me, signal handler returns int." >&4
7702 val="$undef"
7703 ;;
ecfc5424
AD
7704 esac
7705fi
7706set d_voidsig
7707eval $setvar
7708case "$d_voidsig" in
7709"$define") signal_t="void";;
7710*) signal_t="int";;
7711esac
7712$rm -f $$.tmp
7713
7714: check for ability to cast large floats to 32-bit ints.
7715echo " "
7716echo 'Checking whether your C compiler can cast large floats to int32.' >&4
e5c9fcd0 7717if $test "$intsize" -ge 4; then
ecfc5424
AD
7718 xxx=int
7719else
7720 xxx=long
7721fi
7722$cat >try.c <<EOCP
e5c9fcd0 7723#include <stdio.h>
ecfc5424
AD
7724#include <sys/types.h>
7725#include <signal.h>
a1896f58 7726$signal_t blech(s) int s; { exit(3); }
d674cd6d 7727int main()
2304df62 7728{
a0d0e21e 7729 $xxx i32;
e5c9fcd0 7730 double f, g;
2304df62 7731 int result = 0;
89434db5 7732 char str[16];
2304df62
AD
7733 signal(SIGFPE, blech);
7734
89434db5
AD
7735 /* Don't let compiler optimize the test away. Store the number
7736 in a writable string for gcc to pass to sscanf under HP/UX.
7737 */
7738 sprintf(str, "2147483647");
7739 sscanf(str, "%lf", &f); /* f = (double) 0x7fffffff; */
e5c9fcd0
AD
7740 g = 10 * f;
7741 i32 = ($xxx) g;
2304df62 7742
e5c9fcd0
AD
7743 /* x86 processors will probably give 0x8000 0000, which is a
7744 sign change. We don't want that. We want to mimic SPARC
7745 behavior here, which is to preserve the sign and give
7746 back 0x7fff ffff.
7747 */
a0d0e21e 7748 if (i32 != ($xxx) f)
2304df62
AD
7749 result |= 1;
7750 exit(result);
7751}
7752EOCP
dfe9444c 7753set try
dc45a647 7754if eval $compile_ok; then
2304df62
AD
7755 ./try
7756 yyy=$?
7757else
a0d0e21e 7758 echo "(I can't seem to compile the test program--assuming it can't)"
2304df62
AD
7759 yyy=1
7760fi
7761case "$yyy" in
77620) val="$define"
7763 echo "Yup, it can."
7764 ;;
7765*) val="$undef"
7766 echo "Nope, it can't."
7767 ;;
7768esac
7769set d_casti32
7770eval $setvar
85e6fe83 7771$rm -f try try.*
a0d0e21e 7772
2304df62
AD
7773: check for ability to cast negative floats to unsigned
7774echo " "
7775echo 'Checking whether your C compiler can cast negative float to unsigned.' >&4
ecfc5424 7776$cat >try.c <<EOCP
e5c9fcd0 7777#include <stdio.h>
ecfc5424 7778#include <sys/types.h>
2304df62 7779#include <signal.h>
a1896f58
AD
7780$signal_t blech(s) int s; { exit(7); }
7781$signal_t blech_in_list(s) int s; { exit(4); }
232e078e
AD
7782unsigned long dummy_long(p) unsigned long p; { return p; }
7783unsigned int dummy_int(p) unsigned int p; { return p; }
7784unsigned short dummy_short(p) unsigned short p; { return p; }
d674cd6d 7785int main()
2304df62 7786{
e5c9fcd0 7787 double f;
2304df62
AD
7788 unsigned long along;
7789 unsigned int aint;
7790 unsigned short ashort;
7791 int result = 0;
89434db5
AD
7792 char str[16];
7793
e5c9fcd0
AD
7794 /* Frustrate gcc-2.7.2's optimizer which failed this test with
7795 a direct f = -123. assignment. gcc-2.8.0 reportedly
7796 optimized the whole file away
7797 */
89434db5
AD
7798 /* Store the number in a writable string for gcc to pass to
7799 sscanf under HP/UX.
7800 */
7801 sprintf(str, "-123");
7802 sscanf(str, "%lf", &f); /* f = -123.; */
2304df62
AD
7803
7804 signal(SIGFPE, blech);
7805 along = (unsigned long)f;
7806 aint = (unsigned int)f;
7807 ashort = (unsigned short)f;
7808 if (along != (unsigned long)-123)
7809 result |= 1;
7810 if (aint != (unsigned int)-123)
7811 result |= 1;
7812 if (ashort != (unsigned short)-123)
7813 result |= 1;
89434db5
AD
7814 sprintf(str, "1073741824.");
7815 sscanf(str, "%lf", &f); /* f = (double)0x40000000; */
2304df62
AD
7816 f = f + f;
7817 along = 0;
7818 along = (unsigned long)f;
7819 if (along != 0x80000000)
7820 result |= 2;
7821 f -= 1.;
7822 along = 0;
7823 along = (unsigned long)f;
7824 if (along != 0x7fffffff)
7825 result |= 1;
7826 f += 2.;
7827 along = 0;
7828 along = (unsigned long)f;
7829 if (along != 0x80000001)
7830 result |= 2;
232e078e
AD
7831 if (result)
7832 exit(result);
7833 signal(SIGFPE, blech_in_list);
89434db5
AD
7834 sprintf(str, "123.");
7835 sscanf(str, "%lf", &f); /* f = 123.; */
232e078e
AD
7836 along = dummy_long((unsigned long)f);
7837 aint = dummy_int((unsigned int)f);
7838 ashort = dummy_short((unsigned short)f);
7839 if (along != (unsigned long)123)
7840 result |= 4;
7841 if (aint != (unsigned int)123)
7842 result |= 4;
7843 if (ashort != (unsigned short)123)
7844 result |= 4;
2304df62
AD
7845 exit(result);
7846
7847}
7848EOCP
dfe9444c 7849set try
dc45a647 7850if eval $compile_ok; then
2304df62
AD
7851 ./try
7852 castflags=$?
7853else
ecfc5424 7854 echo "(I can't seem to compile the test program--assuming it can't)"
232e078e 7855 castflags=7
2304df62
AD
7856fi
7857case "$castflags" in
78580) val="$define"
7859 echo "Yup, it can."
7860 ;;
7861*) val="$undef"
7862 echo "Nope, it can't."
7863 ;;
7864esac
7865set d_castneg
7866eval $setvar
7867$rm -f try.*
7868
2304df62
AD
7869: see if vprintf exists
7870echo " "
7871if set vprintf val -f d_vprintf; eval $csym; $val; then
7872 echo 'vprintf() found.' >&4
7873 val="$define"
7874 $cat >vprintf.c <<'EOF'
7875#include <varargs.h>
7876
d674cd6d 7877int main() { xxx("foo"); }
2304df62
AD
7878
7879xxx(va_alist)
7880va_dcl
7881{
7882 va_list args;
7883 char buf[10];
7884
7885 va_start(args);
7886 exit((unsigned long)vsprintf(buf,"%s",args) > 10L);
7887}
7888EOF
dfe9444c
AD
7889 set vprintf
7890 if eval $compile && ./vprintf; then
2304df62
AD
7891 echo "Your vsprintf() returns (int)." >&4
7892 val2="$undef"
7893 else
7894 echo "Your vsprintf() returns (char*)." >&4
7895 val2="$define"
7896 fi
7897else
7898 echo 'vprintf() NOT found.' >&4
7899 val="$undef"
7900 val2="$undef"
7901fi
7902set d_vprintf
7903eval $setvar
7904val=$val2
7905set d_charvspr
7906eval $setvar
7907
a0d0e21e
LW
7908: see if chown exists
7909set chown d_chown
7910eval $inlibc
7911
7912: see if chroot exists
7913set chroot d_chroot
7914eval $inlibc
7915
2304df62
AD
7916: see if chsize exists
7917set chsize d_chsize
7918eval $inlibc
7919
7920: check for const keyword
7921echo " "
7922echo 'Checking to see if your C compiler knows about "const"...' >&4
7923$cat >const.c <<'EOCP'
7924typedef struct spug { int drokk; } spug;
5a411a32 7925int main()
2304df62
AD
7926{
7927 const char *foo;
7928 const spug y;
7929}
7930EOCP
7931if $cc -c $ccflags const.c >/dev/null 2>&1 ; then
7932 val="$define"
7933 echo "Yup, it does."
7934else
7935 val="$undef"
7936 echo "Nope, it doesn't."
7937fi
7938set d_const
7939eval $setvar
7940
7941: see if crypt exists
7942echo " "
7943if set crypt val -f d_crypt; eval $csym; $val; then
7944 echo 'crypt() found.' >&4
7945 val="$define"
7946 cryptlib=''
7947else
dfe9444c 7948 cryptlib=`./loc Slibcrypt$_a "" $xlibpth`
2304df62 7949 if $test -z "$cryptlib"; then
dfe9444c 7950 cryptlib=`./loc Mlibcrypt$_a "" $xlibpth`
2304df62
AD
7951 else
7952 cryptlib=-lcrypt
7953 fi
7954 if $test -z "$cryptlib"; then
dfe9444c 7955 cryptlib=`./loc Llibcrypt$_a "" $xlibpth`
2304df62
AD
7956 else
7957 cryptlib=-lcrypt
7958 fi
7959 if $test -z "$cryptlib"; then
dfe9444c 7960 cryptlib=`./loc libcrypt$_a "" $libpth`
2304df62
AD
7961 else
7962 cryptlib=-lcrypt
7963 fi
7964 if $test -z "$cryptlib"; then
7965 echo 'crypt() NOT found.' >&4
7966 val="$undef"
7967 else
7968 val="$define"
7969 fi
7970fi
7971set d_crypt
7972eval $setvar
7973
921b2963
JH
7974: get csh whereabouts
7975case "$csh" in
7976'csh') val="$undef" ;;
7977*) val="$define" ;;
7978esac
7979set d_csh
7980eval $setvar
7981: Respect a hint or command line value for full_csh.
7982case "$full_csh" in
7983'') full_csh=$csh ;;
7984esac
7985
a0d0e21e
LW
7986: see if cuserid exists
7987set cuserid d_cuserid
2304df62
AD
7988eval $inlibc
7989
a0d0e21e
LW
7990: see if this is a limits.h system
7991set limits.h i_limits
85e6fe83
LW
7992eval $inhdr
7993
a0d0e21e
LW
7994: see if this is a float.h system
7995set float.h i_float
7996eval $inhdr
7997
7998: See if number of significant digits in a double precision number is known
7999echo " "
8000$cat >dbl_dig.c <<EOM
8001#$i_limits I_LIMITS
8002#$i_float I_FLOAT
8003#ifdef I_LIMITS
8004#include <limits.h>
85e6fe83 8005#endif
a0d0e21e
LW
8006#ifdef I_FLOAT
8007#include <float.h>
8008#endif
8009#ifdef DBL_DIG
8010printf("Contains DBL_DIG");
85e6fe83 8011#endif
85e6fe83 8012EOM
a0d0e21e
LW
8013$cppstdin $cppflags $cppminus < dbl_dig.c >dbl_dig.E 2>/dev/null
8014if $contains 'DBL_DIG' dbl_dig.E >/dev/null 2>&1; then
8015 echo "DBL_DIG found." >&4
8016 val="$define"
2304df62 8017else
a0d0e21e
LW
8018 echo "DBL_DIG NOT found." >&4
8019 val="$undef"
2304df62 8020fi
a0d0e21e
LW
8021$rm -f dbl_dig.?
8022set d_dbl_dig
2304df62 8023eval $setvar
2304df62 8024
a0d0e21e
LW
8025: see if difftime exists
8026set difftime d_difftime
2304df62
AD
8027eval $inlibc
8028
a0d0e21e
LW
8029: see if this is a dirent system
8030echo " "
8031if xinc=`./findhdr dirent.h`; $test "$xinc"; then
8032 val="$define"
8033 echo "<dirent.h> found." >&4
8034else
8035 val="$undef"
8036 if xinc=`./findhdr sys/dir.h`; $test "$xinc"; then
8037 echo "<sys/dir.h> found." >&4
8038 echo " "
8039 else
8040 xinc=`./findhdr sys/ndir.h`
8041 fi
8042 echo "<dirent.h> NOT found." >&4
8043fi
8044set i_dirent
8045eval $setvar
8046
8047: Look for type of directory structure.
8048echo " "
8049$cppstdin $cppflags $cppminus < "$xinc" > try.c
8050
8051case "$direntrytype" in
8052''|' ')
8053 case "$i_dirent" in
8054 $define) guess1='struct dirent' ;;
8055 *) guess1='struct direct' ;;
2afac517 8056 esac
8057 ;;
8058*) guess1="$direntrytype"
8059 ;;
8e07c86e
AD
8060esac
8061
2afac517 8062case "$guess1" in
8063'struct dirent') guess2='struct direct' ;;
8064*) guess2='struct dirent' ;;
8065esac
8066
8067if $contains "$guess1" try.c >/dev/null 2>&1; then
8068 direntrytype="$guess1"
8069 echo "Your directory entries are $direntrytype." >&4
8070elif $contains "$guess2" try.c >/dev/null 2>&1; then
8071 direntrytype="$guess2"
8072 echo "Your directory entries seem to be $direntrytype." >&4
8073else
8074 echo "I don't recognize your system's directory entries." >&4
8075 rp="What type is used for directory entries on this system?"
8076 dflt="$guess1"
8077 . ./myread
8078 direntrytype="$ans"
8079fi
8080$rm -f try.c
a0d0e21e 8081
a0d0e21e 8082
2afac517 8083: see if the directory entry stores field length
8084echo " "
8085$cppstdin $cppflags $cppminus < "$xinc" > try.c
8086if $contains 'd_namlen' try.c >/dev/null 2>&1; then
8087 echo "Good, your directory entry keeps length information in d_namlen." >&4
8088 val="$define"
8089else
8090 echo "Your directory entry does not know about the d_namlen field." >&4
8091 val="$undef"
8092fi
8093set d_dirnamlen
8094eval $setvar
8095$rm -f try.c
a0d0e21e 8096
5ff3f7a4
GS
8097: see if dlerror exists
8098xxx_runnm="$runnm"
8099runnm=false
8100set dlerror d_dlerror
8101eval $inlibc
8102runnm="$xxx_runnm"
8103
8104: see if dlfcn is available
8105set dlfcn.h i_dlfcn
8106eval $inhdr
8107
8108case "$usedl" in
8109$define|y|true)
8110 $cat << EOM
8111
8112On a few systems, the dynamically loaded modules that perl generates and uses
8113will need a different extension than shared libs. The default will probably
8114be appropriate.
8115
8116EOM
8117 case "$dlext" in
8118 '') dflt="$so" ;;
8119 *) dflt="$dlext" ;;
8120 esac
8121 rp='What is the extension of dynamically loaded modules'
8122 . ./myread
8123 dlext="$ans"
8124 ;;
8125*)
8126 dlext="none"
8127 ;;
8128esac
8129
8130: Check if dlsym need a leading underscore
a0d0e21e
LW
8131echo " "
8132val="$undef"
8133
8134case "$dlsrc" in
8135dl_dlopen.xs)
8136 echo "Checking whether your dlsym() needs a leading underscore ..." >&4
8137 $cat >dyna.c <<'EOM'
8138fred () { }
8139EOM
8140
8141$cat >fred.c<<EOM
8142
8143#include <stdio.h>
8144#$i_dlfcn I_DLFCN
8145#ifdef I_DLFCN
8146#include <dlfcn.h> /* the dynamic linker include file for Sunos/Solaris */
8147#else
8148#include <sys/types.h>
8149#include <nlist.h>
8150#include <link.h>
8151#endif
8152
8153extern int fred() ;
8154
5a411a32 8155int main()
a0d0e21e
LW
8156{
8157 void * handle ;
8158 void * symbol ;
8159#ifndef RTLD_LAZY
8160 int mode = 1 ;
8161#else
8162 int mode = RTLD_LAZY ;
8163#endif
8164 handle = dlopen("./dyna.$dlext", mode) ;
8165 if (handle == NULL) {
5f05dabc 8166 printf ("1\n") ;
8167 fflush (stdout) ;
8168 exit(0);
a0d0e21e
LW
8169 }
8170 symbol = dlsym(handle, "fred") ;
8171 if (symbol == NULL) {
5f05dabc 8172 /* try putting a leading underscore */
8173 symbol = dlsym(handle, "_fred") ;
8174 if (symbol == NULL) {
8175 printf ("2\n") ;
8176 fflush (stdout) ;
8177 exit(0);
8178 }
8179 printf ("3\n") ;
a0d0e21e
LW
8180 }
8181 else
5f05dabc 8182 printf ("4\n") ;
36477c24 8183 fflush (stdout) ;
8184 exit(0);
a0d0e21e
LW
8185}
8186EOM
760ac839 8187 : Call the object file tmp-dyna.o in case dlext=o.
a0d0e21e 8188 if $cc $ccflags $cccdlflags -c dyna.c > /dev/null 2>&1 &&
dfe9444c
AD
8189 mv dyna${_o} tmp-dyna${_o} > /dev/null 2>&1 &&
8190 $ld $lddlflags -o dyna.$dlext tmp-dyna${_o} > /dev/null 2>&1 &&
87563a30 8191 $cc $ccflags -o fred $ldflags $cccdlflags $ccdlflags fred.c $libs > /dev/null 2>&1; then
a0d0e21e
LW
8192 xxx=`./fred`
8193 case $xxx in
8194 1) echo "Test program failed using dlopen." >&4
8195 echo "Perhaps you should not use dynamic loading." >&4;;
8196 2) echo "Test program failed using dlsym." >&4
8197 echo "Perhaps you should not use dynamic loading." >&4;;
8198 3) echo "dlsym needs a leading underscore" >&4
8199 val="$define" ;;
8200 4) echo "dlsym doesn't need a leading underscore." >&4;;
8201 esac
8202 else
8203 echo "I can't compile and run the test program." >&4
88d5303d 8204 echo "I'm guessing that dlsym doesn't need a leading underscore." >&4
a0d0e21e
LW
8205 fi
8206 ;;
8207esac
8208
a78b0d02 8209$rm -f fred fred.? dyna.$dlext dyna.? tmp-dyna.?
a0d0e21e
LW
8210
8211set d_dlsymun
8212eval $setvar
8213
85ab1d1d
JH
8214hasproto='varname=$1; func=$2; shift; shift;
8215while $test $# -ge 2; do
8216 case "$1" in
8217 $define) echo "#include <$2>";;
8218 esac ;
8219 shift 2;
8220done > try.c;
8221$cppstdin $cppflags $cppminus < try.c > tryout.c 2>/dev/null;
8222if $contains "$func.*(" tryout.c >/dev/null 2>&1; then
8223 echo "$func() prototype found.";
8224 val="$define";
8225else
8226 echo "$func() prototype NOT found.";
8227 val="$undef";
8228fi;
8229set $varname;
8230eval $setvar;
8231$rm -f try.c tryout.c'
8232
8233: see if prototype for drand48 is available
8234echo " "
8235set d_drand48proto drand48 $i_stdlib stdlib.h $i_unistd unistd.h
8236eval $hasproto
8237
a0d0e21e
LW
8238: see if dup2 exists
8239set dup2 d_dup2
8240eval $inlibc
8241
5ff3f7a4
GS
8242: see if eaccess exists
8243set eaccess d_eaccess
8244eval $inlibc
8245
8246: see if endgrent exists
8247set endgrent d_endgrent
8248eval $inlibc
8249
e5c9fcd0
AD
8250: see if endhostent exists
8251set endhostent d_endhent
8252eval $inlibc
8253
8254: see if endnetent exists
8255set endnetent d_endnent
8256eval $inlibc
8257
8258: see if endprotoent exists
8259set endprotoent d_endpent
8260eval $inlibc
8261
5ff3f7a4
GS
8262: see if endpwent exists
8263set endpwent d_endpwent
8264eval $inlibc
8265
e5c9fcd0
AD
8266: see if endservent exists
8267set endservent d_endsent
8268eval $inlibc
8269
f1066039
JH
8270: see if endspent exists
8271set endspent d_endspent
8272eval $inlibc
8273
8e07c86e
AD
8274: Locate the flags for 'open()'
8275echo " "
8276$cat >open3.c <<'EOCP'
8277#include <sys/types.h>
8278#ifdef I_FCNTL
8279#include <fcntl.h>
8280#endif
8281#ifdef I_SYS_FILE
8282#include <sys/file.h>
8283#endif
d674cd6d 8284int main() {
8e07c86e
AD
8285 if(O_RDONLY);
8286#ifdef O_TRUNC
8287 exit(0);
8288#else
8289 exit(1);
8290#endif
8291}
8292EOCP
8293: check sys/file.h first to get FREAD on Sun
8294if $test `./findhdr sys/file.h` && \
dfe9444c 8295 set open3 -DI_SYS_FILE && eval $compile; then
8e07c86e
AD
8296 h_sysfile=true;
8297 echo "<sys/file.h> defines the O_* constants..." >&4
8298 if ./open3; then
8299 echo "and you have the 3 argument form of open()." >&4
8300 val="$define"
8301 else
8302 echo "but not the 3 argument form of open(). Oh, well." >&4
8303 val="$undef"
8304 fi
8305elif $test `./findhdr fcntl.h` && \
dfe9444c 8306 set open3 -DI_FCNTL && eval $compile; then
8e07c86e
AD
8307 h_fcntl=true;
8308 echo "<fcntl.h> defines the O_* constants..." >&4
8309 if ./open3; then
8310 echo "and you have the 3 argument form of open()." >&4
8311 val="$define"
8312 else
8313 echo "but not the 3 argument form of open(). Oh, well." >&4
8314 val="$undef"
8315 fi
8316else
8317 val="$undef"
8318 echo "I can't find the O_* constant definitions! You got problems." >&4
8319fi
8320set d_open3
8321eval $setvar
8322$rm -f open3*
8323
213c275f
JH
8324: see which of string.h or strings.h is needed
8325echo " "
8326strings=`./findhdr string.h`
8327if $test "$strings" && $test -r "$strings"; then
8328 echo "Using <string.h> instead of <strings.h>." >&4
8329 val="$define"
8330else
8331 val="$undef"
8332 strings=`./findhdr strings.h`
8333 if $test "$strings" && $test -r "$strings"; then
8334 echo "Using <strings.h> instead of <string.h>." >&4
8335 else
8336 echo "No string header found -- You'll surely have problems." >&4
8337 fi
8338fi
8339set i_string
8340eval $setvar
8341case "$i_string" in
8342"$undef") strings=`./findhdr strings.h`;;
8343*) strings=`./findhdr string.h`;;
8344esac
8345
8e07c86e
AD
8346: check for non-blocking I/O stuff
8347case "$h_sysfile" in
8348true) echo "#include <sys/file.h>" > head.c;;
8349*)
8350 case "$h_fcntl" in
8351 true) echo "#include <fcntl.h>" > head.c;;
8352 *) echo "#include <sys/fcntl.h>" > head.c;;
8353 esac
8354 ;;
8355esac
8356echo " "
8357echo "Figuring out the flag used by open() for non-blocking I/O..." >&4
8358case "$o_nonblock" in
8359'')
8360 $cat head.c > try.c
8361 $cat >>try.c <<'EOCP'
213c275f 8362#include <stdio.h>
d674cd6d 8363int main() {
8e07c86e
AD
8364#ifdef O_NONBLOCK
8365 printf("O_NONBLOCK\n");
8366 exit(0);
8367#endif
8368#ifdef O_NDELAY
8369 printf("O_NDELAY\n");
8370 exit(0);
8371#endif
8372#ifdef FNDELAY
8373 printf("FNDELAY\n");
8374 exit(0);
8375#endif
8376 exit(0);
8377}
8378EOCP
dfe9444c 8379 set try
dc45a647 8380 if eval $compile_ok; then
8e07c86e
AD
8381 o_nonblock=`./try`
8382 case "$o_nonblock" in
8383 '') echo "I can't figure it out, assuming O_NONBLOCK will do.";;
8384 *) echo "Seems like we can use $o_nonblock.";;
8385 esac
8386 else
8387 echo "(I can't compile the test program; pray O_NONBLOCK is right!)"
8388 fi
8389 ;;
8390*) echo "Using $hint value $o_nonblock.";;
8391esac
8392$rm -f try try.* .out core
8393
8394echo " "
8395echo "Let's see what value errno gets from read() on a $o_nonblock file..." >&4
8396case "$eagain" in
8397'')
8398 $cat head.c > try.c
8399 $cat >>try.c <<EOCP
8400#include <errno.h>
8401#include <sys/types.h>
8402#include <signal.h>
213c275f 8403#include <stdio.h>
4633a7c4 8404#define MY_O_NONBLOCK $o_nonblock
dc45a647 8405#ifndef errno /* XXX need better Configure test */
8e07c86e 8406extern int errno;
dc45a647 8407#endif
14e4fe40
JH
8408#$i_unistd I_UNISTD
8409#ifdef I_UNISTD
213c275f
JH
8410#include <unistd.h>
8411#endif
8412#ifdef $i_string
8413#include <string.h>
8414#else
8415#include <strings.h>
8416#endif
8e07c86e 8417$signal_t blech(x) int x; { exit(3); }
4633a7c4
LW
8418EOCP
8419 $cat >> try.c <<'EOCP'
d674cd6d 8420int main()
8e07c86e
AD
8421{
8422 int pd[2];
8423 int pu[2];
8424 char buf[1];
8425 char string[100];
8426
8427 pipe(pd); /* Down: child -> parent */
8428 pipe(pu); /* Up: parent -> child */
8429 if (0 != fork()) {
8430 int ret;
8431 close(pd[1]); /* Parent reads from pd[0] */
8432 close(pu[0]); /* Parent writes (blocking) to pu[1] */
4633a7c4 8433 if (-1 == fcntl(pd[0], F_SETFL, MY_O_NONBLOCK))
8e07c86e
AD
8434 exit(1);
8435 signal(SIGALRM, blech);
8436 alarm(5);
8437 if ((ret = read(pd[0], buf, 1)) > 0) /* Nothing to read! */
8438 exit(2);
8439 sprintf(string, "%d\n", ret);
8440 write(2, string, strlen(string));
8441 alarm(0);
8442#ifdef EAGAIN
8443 if (errno == EAGAIN) {
8444 printf("EAGAIN\n");
8445 goto ok;
8446 }
8447#endif
8448#ifdef EWOULDBLOCK
8449 if (errno == EWOULDBLOCK)
8450 printf("EWOULDBLOCK\n");
8451#endif
8452 ok:
8453 write(pu[1], buf, 1); /* Unblocks child, tell it to close our pipe */
8454 sleep(2); /* Give it time to close our pipe */
8455 alarm(5);
8456 ret = read(pd[0], buf, 1); /* Should read EOF */
8457 alarm(0);
8458 sprintf(string, "%d\n", ret);
8459 write(3, string, strlen(string));
8460 exit(0);
8461 }
8462
8463 close(pd[0]); /* We write to pd[1] */
8464 close(pu[1]); /* We read from pu[0] */
8465 read(pu[0], buf, 1); /* Wait for parent to signal us we may continue */
8466 close(pd[1]); /* Pipe pd is now fully closed! */
8467 exit(0); /* Bye bye, thank you for playing! */
8468}
8469EOCP
dfe9444c 8470 set try
dc45a647 8471 if eval $compile_ok; then
774d564b 8472 echo "$startsh" >mtry
40a7a20a 8473 echo "./try >try.out 2>try.ret 3>try.err || exit 4" >>mtry
8e07c86e
AD
8474 chmod +x mtry
8475 ./mtry >/dev/null 2>&1
8476 case $? in
8477 0) eagain=`$cat try.out`;;
8478 1) echo "Could not perform non-blocking setting!";;
8479 2) echo "I did a successful read() for something that was not there!";;
8480 3) echo "Hmm... non-blocking I/O does not seem to be working!";;
8481 *) echo "Something terribly wrong happened during testing.";;
8482 esac
8483 rd_nodata=`$cat try.ret`
8484 echo "A read() system call with no data present returns $rd_nodata."
8485 case "$rd_nodata" in
8486 0|-1) ;;
8487 *)
8488 echo "(That's peculiar, fixing that to be -1.)"
8489 rd_nodata=-1
8490 ;;
8491 esac
8492 case "$eagain" in
8493 '')
8494 echo "Forcing errno EAGAIN on read() with no data available."
8495 eagain=EAGAIN
8496 ;;
8497 *)
8498 echo "Your read() sets errno to $eagain when no data is available."
8499 ;;
8500 esac
8501 status=`$cat try.err`
8502 case "$status" in
8503 0) echo "And it correctly returns 0 to signal EOF.";;
8504 -1) echo "But it also returns -1 to signal EOF, so be careful!";;
8505 *) echo "However, your read() returns '$status' on EOF??";;
8506 esac
8507 val="$define"
28757baa 8508 if test "$status" = "$rd_nodata"; then
8e07c86e
AD
8509 echo "WARNING: you can't distinguish between EOF and no data!"
8510 val="$undef"
8511 fi
8512 else
8513 echo "I can't compile the test program--assuming errno EAGAIN will do."
8514 eagain=EAGAIN
8515 fi
8516 set d_eofnblk
8517 eval $setvar
8518 ;;
8519*)
8520 echo "Using $hint value $eagain."
8521 echo "Your read() returns $rd_nodata when no data is present."
8522 case "$d_eofnblk" in
8523 "$define") echo "And you can see EOF because read() returns 0.";;
8524 "$undef") echo "But you can't see EOF status from read() returned value.";;
8525 *)
8526 echo "(Assuming you can't see EOF status from read anyway.)"
8527 d_eofnblk=$undef
8528 ;;
8529 esac
8530 ;;
8531esac
8532$rm -f try try.* .out core head.c mtry
8533
a0d0e21e
LW
8534: see if fchmod exists
8535set fchmod d_fchmod
8536eval $inlibc
8537
8538: see if fchown exists
8539set fchown d_fchown
8540eval $inlibc
8541
8542: see if this is an fcntl system
8543set fcntl d_fcntl
8544eval $inlibc
8545
b7b35fc2
JH
8546hasfield='varname=$1; struct=$2; field=$3; shift; shift; shift;
8547while $test $# -ge 2; do
8548 case "$1" in
8549 $define) echo "#include <$2>";;
8550 esac ;
8551 shift 2;
8552done > try.c;
8553echo "int main () { struct $struct foo; char* bar; bar = (char*)foo.$field; }" >> try.c;
8554set try;
8555if eval $compile; then
8556 val="$define";
8557else
8558 val="$undef";
8559fi;
8560set $varname;
8561eval $setvar;
8562$rm -f try.c try.o'
8563
8564socketlib=''
8565sockethdr=''
8566: see whether socket exists
8567echo " "
8568$echo $n "Hmm... $c" >&4
8569if set socket val -f d_socket; eval $csym; $val; then
8570 echo "Looks like you have Berkeley networking support." >&4
8571 d_socket="$define"
8572 if set setsockopt val -f; eval $csym; $val; then
8573 d_oldsock="$undef"
8574 else
8575 echo "...but it uses the old BSD 4.1c interface, rather than 4.2." >&4
8576 d_oldsock="$define"
8577 fi
8578else
8579 if $contains socklib libc.list >/dev/null 2>&1; then
8580 echo "Looks like you have Berkeley networking support." >&4
8581 d_socket="$define"
8582 : we will have to assume that it supports the 4.2 BSD interface
8583 d_oldsock="$undef"
8584 else
8585 echo "You don't have Berkeley networking in libc$_a..." >&4
8586 if test "X$d_socket" = "X$define"; then
8587 echo "...but you seem to believe that you have sockets." >&4
8588 else
8589 for net in net socket
8590 do
8591 if test -f /usr/lib/lib$net$_a; then
8592 ( ($nm $nm_opt /usr/lib/lib$net$_a | eval $nm_extract) || \
8593 $ar t /usr/lib/lib$net$_a) 2>/dev/null >> libc.list
8594 if $contains socket libc.list >/dev/null 2>&1; then
8595 d_socket="$define"
8596 socketlib="-l$net"
8597 case "$net" in
8598 net)
8599 echo "...but the Wollongong group seems to have hacked it in." >&4
8600 sockethdr="-I/usr/netinclude"
8601 ;;
8602 esac
8603 echo "Found Berkeley sockets interface in lib$net." >& 4
8604 if $contains setsockopt libc.list >/dev/null 2>&1; then
8605 d_oldsock="$undef"
8606 else
8607 echo "...using the old BSD 4.1c interface, rather than 4.2." >&4
8608 d_oldsock="$define"
8609 fi
8610 break
8611 fi
8612 fi
8613 done
8614 if test "X$d_socket" != "X$define"; then
8615 echo "or anywhere else I see." >&4
8616 d_socket="$undef"
8617 d_oldsock="$undef"
8618 fi
8619 fi
8620 fi
8621fi
8622
8623: see if socketpair exists
8624set socketpair d_sockpair
8625eval $inlibc
8626
8627
8628echo " "
8629echo "Checking the availability of certain socket constants..." >& 4
8630for ENUM in MSG_CTRUNC MSG_DONTROUTE MSG_OOB MSG_PEEK MSG_PROXY SCM_RIGHTS; do
8631 enum=`$echo $ENUM|./tr '[A-Z]' '[a-z]'`
8632 $cat >try.c <<EOF
8633#include <sys/types.h>
8634#include <sys/socket.h>
8635int main() {
8636 int i = $ENUM;
8637}
8638EOF
8639 val="$undef"
8640 set try; if eval $compile; then
8641 val="$define"
8642 fi
8643 set d_${enum}; eval $setvar
8644 $rm -f try.c try
8645done
8646
921b2963
JH
8647: see if sys/select.h has to be included
8648set sys/select.h i_sysselct
8649eval $inhdr
8650
8651: see if we should include time.h, sys/time.h, or both
8652echo " "
8653if test "X$timeincl" = X; then
8654 echo "Testing to see if we should include <time.h>, <sys/time.h> or both." >&4
8655 $echo $n "I'm now running the test program...$c"
8656 $cat >try.c <<'EOCP'
8657#include <sys/types.h>
8658#ifdef I_TIME
8659#include <time.h>
8660#endif
8661#ifdef I_SYSTIME
8662#ifdef SYSTIMEKERNEL
8663#define KERNEL
8664#endif
8665#include <sys/time.h>
8666#endif
8667#ifdef I_SYSSELECT
8668#include <sys/select.h>
8669#endif
d674cd6d 8670int main()
921b2963
JH
8671{
8672 struct tm foo;
8673#ifdef S_TIMEVAL
8674 struct timeval bar;
8675#endif
8676#ifdef S_TIMEZONE
8677 struct timezone tzp;
8678#endif
8679 if (foo.tm_sec == foo.tm_sec)
8680 exit(0);
8681#ifdef S_TIMEVAL
8682 if (bar.tv_sec == bar.tv_sec)
8683 exit(0);
8684#endif
8685 exit(1);
8686}
8687EOCP
8688 flags=''
8689 for s_timezone in '-DS_TIMEZONE' ''; do
8690 sysselect=''
8691 for s_timeval in '-DS_TIMEVAL' ''; do
8692 for i_systimek in '' '-DSYSTIMEKERNEL'; do
8693 for i_time in '' '-DI_TIME'; do
8694 for i_systime in '-DI_SYSTIME' ''; do
8695 case "$flags" in
8696 '') $echo $n ".$c"
8697 set try $i_time $i_systime $i_systimek $sysselect $s_timeval $s_timezone
8698 if eval $compile; then
8699 set X $i_time $i_systime $i_systimek $sysselect $s_timeval
8700 shift
8701 flags="$*"
8702 echo " "
8703 $echo $n "Succeeded with $flags$c"
8704 fi
8705 ;;
8706 esac
8707 done
8708 done
8709 done
8710 done
8711 done
8712 timeincl=''
8713 echo " "
8714 case "$flags" in
8715 *SYSTIMEKERNEL*) i_systimek="$define"
8716 timeincl=`./findhdr sys/time.h`
8717 echo "We'll include <sys/time.h> with KERNEL defined." >&4;;
8718 *) i_systimek="$undef";;
8719 esac
8720 case "$flags" in
8721 *I_TIME*) i_time="$define"
8722 timeincl=`./findhdr time.h`" $timeincl"
8723 echo "We'll include <time.h>." >&4;;
8724 *) i_time="$undef";;
8725 esac
8726 case "$flags" in
8727 *I_SYSTIME*) i_systime="$define"
8728 timeincl=`./findhdr sys/time.h`" $timeincl"
8729 echo "We'll include <sys/time.h>." >&4;;
8730 *) i_systime="$undef";;
8731 esac
8732 $rm -f try.c try
8733fi
8734
8735: check for fd_set items
8736$cat <<EOM
8737
8738Checking to see how well your C compiler handles fd_set and friends ...
8739EOM
8740$cat >fd_set.c <<EOCP
8741#$i_systime I_SYS_TIME
8742#$i_sysselct I_SYS_SELECT
8743#$d_socket HAS_SOCKET
8744#include <sys/types.h>
8745#ifdef HAS_SOCKET
8746#include <sys/socket.h> /* Might include <sys/bsdtypes.h> */
8747#endif
8748#ifdef I_SYS_TIME
8749#include <sys/time.h>
8750#endif
8751#ifdef I_SYS_SELECT
8752#include <sys/select.h>
8753#endif
d674cd6d 8754int main() {
921b2963
JH
8755 fd_set fds;
8756
8757#ifdef TRYBITS
8758 if(fds.fds_bits);
8759#endif
8760
8761#if defined(FD_SET) && defined(FD_CLR) && defined(FD_ISSET) && defined(FD_ZERO)
8762 exit(0);
8763#else
8764 exit(1);
8765#endif
8766}
8767EOCP
8768set fd_set -DTRYBITS
8769if eval $compile; then
8770 d_fds_bits="$define"
8771 d_fd_set="$define"
8772 echo "Well, your system knows about the normal fd_set typedef..." >&4
8773 if ./fd_set; then
8774 echo "and you have the normal fd_set macros (just as I'd expect)." >&4
8775 d_fd_macros="$define"
8776 else
8777 $cat >&4 <<'EOM'
8778but not the normal fd_set macros! Gaaack! I'll have to cover for you.
8779EOM
8780 d_fd_macros="$undef"
8781 fi
8782else
8783 $cat <<'EOM'
8784Hmm, your compiler has some difficulty with fd_set. Checking further...
8785EOM
8786 set fd_set
8787 if eval $compile; then
8788 d_fds_bits="$undef"
8789 d_fd_set="$define"
8790 echo "Well, your system has some sort of fd_set available..." >&4
8791 if ./fd_set; then
8792 echo "and you have the normal fd_set macros." >&4
8793 d_fd_macros="$define"
8794 else
8795 $cat <<'EOM'
8796but not the normal fd_set macros! Gross! More work for me...
8797EOM
8798 d_fd_macros="$undef"
8799 fi
8800 else
8801 echo "Well, you got zip. That's OK, I can roll my own fd_set stuff." >&4
8802 d_fd_set="$undef"
8803 d_fds_bits="$undef"
8804 d_fd_macros="$undef"
8805 fi
8806fi
8807$rm -f fd_set*
8808
a0d0e21e
LW
8809: see if fgetpos exists
8810set fgetpos d_fgetpos
8811eval $inlibc
8812
8175356b
JH
8813: see if flock exists
8814set flock d_flock
8815eval $inlibc
8816
8817: see if fork exists
8818set fork d_fork
8819eval $inlibc
8820
8821: see if pathconf exists
8822set pathconf d_pathconf
8823eval $inlibc
8824
8825: see if fpathconf exists
8826set fpathconf d_fpathconf
8827eval $inlibc
8828
d9b3e12d
JH
8829
8830: check for off64_t
8831echo " "
8175356b 8832echo "Checking to see if your system supports off64_t..." >&4
d9b3e12d
JH
8833$cat >try.c <<EOCP
8834#include <sys/types.h>
8835#include <unistd.h>
8175356b 8836int main() { off64_t x = 7; }'
d9b3e12d 8837EOCP
8175356b
JH
8838set try
8839if eval $compile; then
d9b3e12d 8840 val="$define"
a22e52b9 8841 echo "Yes, it does."
d9b3e12d
JH
8842else
8843 val="$undef"
a22e52b9 8844 echo "No, it doesn't."
8175356b 8845 case "$lseeksize" in
1eeb0f31 8846 8) echo "(Your off_t is 64 bits, so you could use that.)" ;;
8175356b 8847 esac
d9b3e12d 8848fi
8175356b 8849$rm -f try.* try
d9b3e12d
JH
8850set d_off64_t
8851eval $setvar
8852
8853: check for fpos64_t
8854echo " "
8175356b 8855echo "Checking to see if your system supports fpos64_t..." >&4
d9b3e12d
JH
8856$cat >try.c <<EOCP
8857#include <sys/stdio.h>
8175356b 8858int main() { fpos64_t x x = 7; }'
d9b3e12d 8859EOCP
8175356b
JH
8860set try
8861if eval $compile; then
d9b3e12d 8862 val="$define"
a22e52b9 8863 echo "Yes, it does."
d9b3e12d
JH
8864else
8865 val="$undef"
a22e52b9 8866 echo "No, it doesn't."
8175356b 8867 case "$fpossize" in
1eeb0f31 8868 8) echo "(Your fpos_t is 64 bits, so you could use that.)" ;;
8175356b 8869 esac
d9b3e12d 8870fi
8175356b 8871$rm -f try.* try
d9b3e12d
JH
8872set d_fpos64_t
8873eval $setvar
8874
0545a864
JH
8875hasstruct='varname=$1; struct=$2; shift; shift;
8876while $test $# -ge 2; do
8877 case "$1" in
8878 $define) echo "#include <$2>";;
8879 esac ;
8880 shift 2;
8881done > try.c;
8882echo "int main () { struct $struct foo; }" >> try.c;
8883set try;
8884if eval $compile; then
8885 val="$define";
8886else
8887 val="$undef";
8888fi;
8889set $varname;
8890eval $setvar;
8891$rm -f try.c try.o'
d9b3e12d 8892
9b9c89a3
JH
8893: see if this is a sys/param system
8894set sys/param.h i_sysparam
8895eval $inhdr
8896
104d25b7
JH
8897: see if this is a sys/mount.h system
8898set sys/mount.h i_sysmount
8899eval $inhdr
8900
0545a864
JH
8901: see if sys/types.h has to be included
8902set sys/types.h i_systypes
8903eval $inhdr
8904
0545a864 8905
ad27e871 8906echo " "
8175356b 8907echo "Checking to see if your system supports struct fs_data..." >&4
0545a864
JH
8908set d_fs_data_s fs_data $i_systypes sys/types.h $i_sysparam sys/param.h $i_sysmount sys/mount.h
8909eval $hasstruct
8910case "$d_fs_data_s" in
a22e52b9
JH
8911"$define") echo "Yes, it does." ;;
8912*) echo "No, it doesn't." ;;
0545a864
JH
8913esac
8914
8915: see if fseeko exists
8916set fseeko d_fseeko
8917eval $inlibc
1eeb0f31 8918case "$longsize" in
43999f95 89198) echo "(Your long is 64 bits, so you could use fseek.)" ;;
1eeb0f31 8920esac
0545a864
JH
8921
8922: see if fsetpos exists
8923set fsetpos d_fsetpos
8924eval $inlibc
8925
8926
8927: see if fstatfs exists
8928set fstatfs d_fstatfs
8929eval $inlibc
104d25b7
JH
8930
8931
8932: see if statvfs exists
8933set statvfs d_statvfs
8934eval $inlibc
8935
8936: see if fstatvfs exists
8937set fstatvfs d_fstatvfs
8938eval $inlibc
8939
8940
5ff3f7a4
GS
8941: see if ftello exists
8942set ftello d_ftello
8943eval $inlibc
1eeb0f31 8944case "$longsize" in
43999f95 89458) echo "(Your long is 64 bits, so you could use ftell.)" ;;
1eeb0f31 8946esac
5ff3f7a4
GS
8947
8948: see if getgrent exists
8949set getgrent d_getgrent
8950eval $inlibc
8951
693762b4
AD
8952: see if gethostbyaddr exists
8953set gethostbyaddr d_gethbyaddr
8954eval $inlibc
8955
8956: see if gethostbyname exists
8957set gethostbyname d_gethbyname
8958eval $inlibc
8959
a0d0e21e
LW
8960: see if gethostent exists
8961set gethostent d_gethent
8962eval $inlibc
8963
921b2963
JH
8964: see how we will look up host name
8965echo " "
a63faeb8
JH
8966call=''
8967if set gethostname val -f d_gethname; eval $csym; $val; then
921b2963
JH
8968 echo 'gethostname() found.' >&4
8969 d_gethname="$define"
8970 call=gethostname
a63faeb8
JH
8971fi
8972if set uname val -f d_uname; eval $csym; $val; then
921b2963
JH
8973 if ./xenix; then
8974 $cat <<'EOM'
8975uname() was found, but you're running xenix, and older versions of xenix
8976have a broken uname(). If you don't really know whether your xenix is old
8977enough to have a broken system call, use the default answer.
8978
8979EOM
8980 dflt=y
8981 case "$d_uname" in
8982 "$define") dflt=n;;
8983 esac
8984 rp='Is your uname() broken?'
8985 . ./myread
8986 case "$ans" in
8987 n*) d_uname="$define"; call=uname;;
8988 esac
8989 else
8990 echo 'uname() found.' >&4
8991 d_uname="$define"
a63faeb8
JH
8992 case "$call" in
8993 '') call=uname ;;
8994 esac
921b2963
JH
8995 fi
8996fi
8997case "$d_gethname" in
8998'') d_gethname="$undef";;
8999esac
9000case "$d_uname" in
9001'') d_uname="$undef";;
9002esac
9003case "$d_uname$d_gethname" in
9004*define*)
9005 dflt=n
9006 cat <<EOM
9007
9008Every now and then someone has a $call() that lies about the hostname
9009but can't be fixed for political or economic reasons. If you wish, I can
9010pretend $call() isn't there and maybe compute hostname at run-time
9011thanks to the '$phostname' command.
9012
9013EOM
9014 rp="Shall I ignore $call() from now on?"
9015 . ./myread
9016 case "$ans" in
9017 y*) d_uname="$undef" d_gethname="$undef"; $echo $n "Okay...$c";;
9018 esac;;
9019esac
9020case "$phostname" in
9021'') aphostname='';;
9022*) case "$aphostname" in
9023 /*) ;;
9024 *) set X $phostname
9025 shift
9026 file=$1
9027 shift
9028 file=`./loc $file $file $pth`
9029 aphostname=`echo $file $*`
9030 ;;
9031 esac
9032 ;;
9033esac
9034case "$d_uname$d_gethname" in
9035*define*) ;;
9036*)
9037 case "$phostname" in
9038 '')
9039 echo "There will be no way for $package to get your hostname." >&4;;
9040 *)
9041 echo "I'll use 'popen("'"'$aphostname'", "r")'"' to get your hostname." >&4
9042 ;;
9043 esac;;
9044esac
9045case "$d_phostname" in
9046'') d_phostname="$undef";;
9047esac
9048
dc45a647
MB
9049: see if this is a netdb.h system
9050set netdb.h i_netdb
9051eval $inhdr
9052
9053: see if prototypes for various gethostxxx netdb.h functions are available
9054echo " "
9055set d_gethostprotos gethostent $i_netdb netdb.h
9056eval $hasproto
9057
a0d0e21e
LW
9058: see if getlogin exists
9059set getlogin d_getlogin
9060eval $inlibc
9061
ad27e871
JH
9062: see if getmnt exists
9063set getmnt d_getmnt
9064eval $inlibc
9065
ccc7f9b3
KS
9066: see if getmntent exists
9067set getmntent d_getmntent
9068eval $inlibc
9069
693762b4
AD
9070: see if getnetbyaddr exists
9071set getnetbyaddr d_getnbyaddr
9072eval $inlibc
9073
9074: see if getnetbyname exists
9075set getnetbyname d_getnbyname
9076eval $inlibc
9077
e5c9fcd0
AD
9078: see if getnetent exists
9079set getnetent d_getnent
9080eval $inlibc
9081
dc45a647
MB
9082: see if prototypes for various getnetxxx netdb.h functions are available
9083echo " "
9084set d_getnetprotos getnetent $i_netdb netdb.h
9085eval $hasproto
9086
693762b4
AD
9087
9088: see if getprotobyname exists
9089set getprotobyname d_getpbyname
9090eval $inlibc
9091
9092: see if getprotobynumber exists
9093set getprotobynumber d_getpbynumber
9094eval $inlibc
e5c9fcd0
AD
9095
9096: see if getprotoent exists
9097set getprotoent d_getpent
9098eval $inlibc
9099
2afac517 9100: see if getpgid exists
9101set getpgid d_getpgid
a0d0e21e
LW
9102eval $inlibc
9103
9104: see if getpgrp2 exists
9105set getpgrp2 d_getpgrp2
9106eval $inlibc
9107
9108: see if getppid exists
9109set getppid d_getppid
9110eval $inlibc
9111
9112: see if getpriority exists
9113set getpriority d_getprior
9114eval $inlibc
9115
dc45a647
MB
9116: see if prototypes for various getprotoxxx netdb.h functions are available
9117echo " "
9118set d_getprotoprotos getprotoent $i_netdb netdb.h
9119eval $hasproto
9120
5ff3f7a4
GS
9121: see if getpwent exists
9122set getpwent d_getpwent
9123eval $inlibc
9124
9125
693762b4
AD
9126: see if getservbyname exists
9127set getservbyname d_getsbyname
9128eval $inlibc
9129
9130: see if getservbyport exists
9131set getservbyport d_getsbyport
9132eval $inlibc
e5c9fcd0
AD
9133
9134: see if getservent exists
9135set getservent d_getsent
9136eval $inlibc
9137
dc45a647
MB
9138: see if prototypes for various getservxxx netdb.h functions are available
9139echo " "
9140set d_getservprotos getservent $i_netdb netdb.h
9141eval $hasproto
9142
f1066039
JH
9143: see if getspent exists
9144set getspent d_getspent
9145eval $inlibc
9146
9147: see if getspnam exists
9148set getspnam d_getspnam
9149eval $inlibc
9150
5f05dabc 9151: see if gettimeofday or ftime exists
9152set gettimeofday d_gettimeod
9153eval $inlibc
9154case "$d_gettimeod" in
9155"$undef")
9156 set ftime d_ftime
9157 eval $inlibc
9158 ;;
9159*)
9160 val="$undef"; set d_ftime; eval $setvar
9161 ;;
9162esac
9163case "$d_gettimeod$d_ftime" in
9164"$undef$undef")
9165 echo " "
9166 echo 'No ftime() nor gettimeofday() -- timing may be less accurate.' >&4
9167 ;;
9168esac
9169
5ff3f7a4
GS
9170: see if this is an grp system
9171set grp.h i_grp
9172eval $inhdr
9173
9174case "$i_grp" in
9175$define)
9176 xxx=`./findhdr grp.h`
9177 $cppstdin $cppflags $cppminus < $xxx >$$.h
9178
9179 if $contains 'gr_passwd' $$.h >/dev/null 2>&1; then
9180 val="$define"
9181 else
9182 val="$undef"
9183 fi
9184 set d_grpasswd
9185 eval $setvar
9186
9187 $rm -f $$.h
9188 ;;
9189*)
9190 val="$undef";
9191 set d_grpasswd; eval $setvar
9192 ;;
9193esac
9194
ccc7f9b3
KS
9195: see if hasmntopt exists
9196set hasmntopt d_hasmntopt
9197eval $inlibc
9198
a0d0e21e
LW
9199: see if this is a netinet/in.h or sys/in.h system
9200set netinet/in.h i_niin sys/in.h i_sysin
9201eval $inhdr
9202
5ff3f7a4 9203: see if arpa/inet.h has to be included
93341792 9204set arpa/inet.h i_arpainet
28e8609d
JH
9205eval $inhdr
9206
a0d0e21e
LW
9207: see if htonl --and friends-- exists
9208val=''
9209set htonl val
9210eval $inlibc
9211
9212: Maybe they are macros.
9213case "$val" in
9214$undef)
9215 $cat >htonl.c <<EOM
9216#include <stdio.h>
9217#include <sys/types.h>
9218#$i_niin I_NETINET_IN
9219#$i_sysin I_SYS_IN
93341792 9220#$i_arpainet I_ARPA_INET
a0d0e21e
LW
9221#ifdef I_NETINET_IN
9222#include <netinet/in.h>
9223#endif
9224#ifdef I_SYS_IN
9225#include <sys/in.h>
9226#endif
28e8609d
JH
9227#ifdef I_ARPA_INET
9228#include <arpa/inet.h>
9229#endif
a0d0e21e
LW
9230#ifdef htonl
9231printf("Defined as a macro.");
9232#endif
9233EOM
9234 $cppstdin $cppflags $cppminus < htonl.c >htonl.E 2>/dev/null
9235 if $contains 'Defined as a macro' htonl.E >/dev/null 2>&1; then
9236 val="$define"
9237 echo "But it seems to be defined as a macro." >&4
9238 fi
9239 $rm -f htonl.?
9240 ;;
9241esac
9242set d_htonl
9243eval $setvar
9244
43999f95
JH
9245: see if iconv exists
9246set iconv d_iconv
9247eval $inlibc
9248
a0d0e21e
LW
9249: index or strchr
9250echo " "
9251if set index val -f; eval $csym; $val; then
9252 if set strchr val -f d_strchr; eval $csym; $val; then
9253 if $contains strchr "$strings" >/dev/null 2>&1 ; then
9254 val="$define"
9255 vali="$undef"
9256 echo "strchr() found." >&4
9257 else
9258 val="$undef"
9259 vali="$define"
9260 echo "index() found." >&4
9261 fi
9262 else
9263 val="$undef"
9264 vali="$define"
9265 echo "index() found." >&4
9266 fi
9267else
9268 if set strchr val -f d_strchr; eval $csym; $val; then
9269 val="$define"
9270 vali="$undef"
9271 echo "strchr() found." >&4
9272 else
9273 echo "No index() or strchr() found!" >&4
9274 val="$undef"
9275 vali="$undef"
9276 fi
9277fi
9278set d_strchr; eval $setvar
9279val="$vali"
9280set d_index; eval $setvar
9281
7e1af8bc 9282: check whether inet_aton exists
9283set inet_aton d_inetaton
9284eval $inlibc
9285
a0d0e21e
LW
9286: Look for isascii
9287echo " "
9288$cat >isascii.c <<'EOCP'
9289#include <stdio.h>
9290#include <ctype.h>
d674cd6d 9291int main() {
a0d0e21e
LW
9292 int c = 'A';
9293 if (isascii(c))
9294 exit(0);
9295 else
9296 exit(1);
9297}
9298EOCP
dfe9444c
AD
9299set isascii
9300if eval $compile; then
a0d0e21e
LW
9301 echo "isascii() found." >&4
9302 val="$define"
9303else
9304 echo "isascii() NOT found." >&4
9305 val="$undef"
9306fi
9307set d_isascii
9308eval $setvar
9309$rm -f isascii*
9310
9311: see if killpg exists
9312set killpg d_killpg
9313eval $inlibc
9314
dd64f1c3
AD
9315: see if lchown exists
9316echo " "
9317$cat > try.c <<'EOCP'
9318/* System header to define __stub macros and hopefully few prototypes,
9319 which can conflict with char lchown(); below. */
9320#include <assert.h>
9321/* Override any gcc2 internal prototype to avoid an error. */
9322/* We use char because int might match the return type of a gcc2
9323 builtin and then its argument prototype would still apply. */
9324char lchown();
9325int main() {
9326 /* The GNU C library defines this for functions which it implements
9327 to always fail with ENOSYS. Some functions are actually named
9328 something starting with __ and the normal name is an alias. */
9329#if defined (__stub_lchown) || defined (__stub___lchown)
9330choke me
9331#else
9332lchown();
9333#endif
9334; return 0; }
9335EOCP
9336set try
9337if eval $compile; then
9338 $echo "lchown() found." >&4
9339 val="$define"
9340else
9341 $echo "lchown() NOT found." >&4
9342 val="$undef"
9343fi
9344set d_lchown
9345eval $setvar
9346
2d4389e4
JH
9347: See if number of significant digits in a double precision number is known
9348echo " "
9349$cat >ldbl_dig.c <<EOM
9350#$i_limits I_LIMITS
9351#$i_float I_FLOAT
9352#ifdef I_LIMITS
9353#include <limits.h>
9354#endif
9355#ifdef I_FLOAT
9356#include <float.h>
9357#endif
9358#ifdef LDBL_DIG
9359printf("Contains LDBL_DIG");
9360#endif
9361EOM
9362$cppstdin $cppflags $cppminus < ldbl_dig.c >ldbl_dig.E 2>/dev/null
9363if $contains 'LDBL_DIG' ldbl_dig.E >/dev/null 2>&1; then
9364 echo "LDBL_DIG found." >&4
9365 val="$define"
9366else
9367 echo "LDBL_DIG NOT found." >&4
9368 val="$undef"
9369fi
9370$rm -f ldbl_dig.?
9371set d_ldbl_dig
9372eval $setvar
9373
a0d0e21e
LW
9374: see if link exists
9375set link d_link
9376eval $inlibc
9377
a0d0e21e
LW
9378: see if localeconv exists
9379set localeconv d_locconv
9380eval $inlibc
9381
9382: see if lockf exists
9383set lockf d_lockf
9384eval $inlibc
9385
8175356b
JH
9386: check for long long
9387echo " "
9388$echo $n "Checking to see if your system supports long long..." $c >&4
213c275f 9389echo 'int main() { long long x = 7; return 0; }' > try.c
8175356b
JH
9390set try
9391if eval $compile; then
9392 val="$define"
9393 echo " Yes, it does." >&4
9394else
9395 val="$undef"
9396 echo " No, it doesn't." >&4
9397fi
9398$rm try.*
9399set d_longlong
9400eval $setvar
9401
9402: check for length of long long
9403case "${d_longlong}${longlongsize}" in
9404$define)
9405 echo " "
9406 $echo $n "Checking to see how big your long longs are..." $c >&4
9407 $cat >try.c <<'EOCP'
9408#include <stdio.h>
9409int main()
9410{
213c275f
JH
9411 printf("%d\n", (int)sizeof(long long));
9412 return(0);
8175356b
JH
9413}
9414EOCP
9415 set try
9416 if eval $compile_ok; then
9417 longlongsize=`./try$exe_ext`
9418 $echo " $longlongsize bytes." >&4
9419 else
9420 dflt='8'
9421 echo " "
9422 echo "(I can't seem to compile the test program. Guessing...)"
9423 rp="What is the size of a long long (in bytes)?"
9424 . ./myread
9425 longlongsize="$ans"
9426 fi
9427 if $test "X$longsize" = "X$longlongsize"; then
9428 echo "(That isn't any different from an ordinary long.)"
9429 fi
9430 ;;
9431esac
9432$rm -f try.* try
9433
a0d0e21e
LW
9434: see if lstat exists
9435set lstat d_lstat
9436eval $inlibc
9437
9438: see if mblen exists
9439set mblen d_mblen
9440eval $inlibc
9441
9442: see if mbstowcs exists
9443set mbstowcs d_mbstowcs
9444eval $inlibc
9445
9446: see if mbtowc exists
9447set mbtowc d_mbtowc
9448eval $inlibc
9449
0f27ced1
JH
9450: see if memchr exists
9451set memchr d_memchr
9452eval $inlibc
9453
a0d0e21e
LW
9454: see if memcmp exists
9455set memcmp d_memcmp
9456eval $inlibc
9457
9458: see if memcpy exists
9459set memcpy d_memcpy
9460eval $inlibc
9461
9462: see if memmove exists
9463set memmove d_memmove
2304df62
AD
9464eval $inlibc
9465
9466: see if memset exists
9467set memset d_memset
9468eval $inlibc
9469
9470: see if mkdir exists
9471set mkdir d_mkdir
9472eval $inlibc
9473
a0d0e21e
LW
9474: see if mkfifo exists
9475set mkfifo d_mkfifo
9476eval $inlibc
9477
9478: see if mktime exists
9479set mktime d_mktime
9480eval $inlibc
9481
2304df62
AD
9482: see if msgctl exists
9483set msgctl d_msgctl
9484eval $inlibc
9485
9486: see if msgget exists
9487set msgget d_msgget
9488eval $inlibc
9489
9490: see if msgsnd exists
9491set msgsnd d_msgsnd
9492eval $inlibc
9493
9494: see if msgrcv exists
9495set msgrcv d_msgrcv
9496eval $inlibc
9497
9498: see how much of the 'msg*(2)' library is present.
9499h_msg=true
9500echo " "
9501case "$d_msgctl$d_msgget$d_msgsnd$d_msgrcv" in
9502*"$undef"*) h_msg=false;;
9503esac
6087ac44
JH
9504case "$osname" in
9505freebsd)
9506 case "`ipcs 2>&1`" in
9507 "SVID messages"*"not configured"*)
5ff3f7a4 9508 echo "Your $osname does not have the msg*(2) configured." >&4
6087ac44
JH
9509 h_msg=false
9510 val="$undef"
9511 set msgctl d_msgctl
9512 eval $setvar
9513 set msgget d_msgget
9514 eval $setvar
9515 set msgsnd d_msgsnd
9516 eval $setvar
9517 set msgrcv d_msgrcv
9518 eval $setvar
9519 ;;
9520 esac
9521 ;;
9522esac
2304df62
AD
9523: we could also check for sys/ipc.h ...
9524if $h_msg && $test `./findhdr sys/msg.h`; then
9525 echo "You have the full msg*(2) library." >&4
9526 val="$define"
9527else
9528 echo "You don't have the full msg*(2) library." >&4
9529 val="$undef"
9530fi
9531set d_msg
9532eval $setvar
9533
dfe9444c
AD
9534: see if nice exists
9535set nice d_nice
9536eval $inlibc
9537
ff935051
JH
9538: see if inttypes.h is available
9539: we want a real compile instead of Inhdr because some systems
9540: have an inttypes.h which includes non-existent headers
9541echo " "
9542$cat >try.c <<EOCP
9543#include <inttypes.h>
9544int main() {
9545 static int32_t foo32 = 0x12345678;
9546}
9547EOCP
9548set try
9549if eval $compile; then
9550 echo "<inttypes.h> found." >&4
9551 val="$define"
9552else
9553 echo "<inttypes.h> NOT found." >&4
9554 val="$undef"
9555fi
9556$rm -f try.c try
9557set i_inttypes
9558eval $setvar
9559
9560: check for int64_t
9561echo " "
9562$echo $n "Checking to see if your system supports int64_t...$c" >&4
9563$cat >try.c <<EOCP
9564#include <sys/types.h>
9565#$i_inttypes I_INTTYPES
9566#ifdef I_INTTYPES
9567#include <inttypes.h>
9568#endif
9569int main() { int64_t x = 7; }
9570EOCP
9571set try
9572if eval $compile; then
9573 val="$define"
9574 echo " Yes, it does." >&4
9575else
9576 val="$undef"
9577 echo " No, it doesn't." >&4
9578fi
9579$rm -f try try.*
9580set d_int64t
9581eval $setvar
9582
de1c2614
JH
9583
9584echo " "
6b8eaf93 9585echo "Checking which 64-bit integer type we could use..." >&4
de1c2614
JH
9586
9587case "$intsize" in
95888) val=int
9589 set quadtype
9590 eval $setvar
9591 val='"unsigned int"'
9592 set uquadtype
9593 eval $setvar
6b8eaf93 9594 quadkind=1
de1c2614
JH
9595 ;;
9596*) case "$longsize" in
9597 8) val=long
9598 set quadtype
9599 eval $setvar
9600 val='"unsigned long"'
9601 set uquadtype
9602 eval $setvar
6b8eaf93 9603 quadkind=2
de1c2614 9604 ;;
43999f95
JH
9605 *) case "$d_longlong:$longlongsize" in
9606 define:8)
de1c2614
JH
9607 val='"long long"'
9608 set quadtype
9609 eval $setvar
9610 val='"unsigned long long"'
9611 set uquadtype
9612 eval $setvar
6b8eaf93 9613 quadkind=3
de1c2614
JH
9614 ;;
9615 *) case "$d_int64t" in
9616 define)
9617 val=int64_t
9618 set quadtype
9619 eval $setvar
9620 val=uint64_t
9621 set uquadtype
9622 eval $setvar
6b8eaf93 9623 quadkind=4
de1c2614
JH
9624 ;;
9625 esac
9626 ;;
9627 esac
9628 ;;
9629 esac
9630 ;;
9631esac
9632
9633case "$quadtype" in
6b8eaf93
JH
9634'') case "$uselonglong:$d_longlong:$longlongsize" in
9635 undef:define:8)
9636 echo "(You would have 'long long', but you are not using it.)" >&4 ;;
9637 *) echo "Alas, no 64-bit integer types in sight." >&4 ;;
9638 esac
de1c2614
JH
9639 d_quad="$undef"
9640 ;;
1eeb0f31
JH
9641*) if test X"$use64bits" = Xdefine -o X"$longsize" = X8; then
9642 verb="will"
9643 else
9644 verb="could"
9645 fi
9646 echo "We $verb use '$quadtype' for 64-bit integers." >&4
de1c2614
JH
9647 d_quad="$define"
9648 ;;
9649esac
9650
cce08f5b
JH
9651: check for length of character
9652echo " "
9653case "$charsize" in
9654'')
9655 echo "Checking to see how big your characters are (hey, you never know)..." >&4
9656 $cat >try.c <<'EOCP'
9657#include <stdio.h>
9658int main()
9659{
9660 printf("%d\n", (int)sizeof(char));
9661 exit(0);
9662}
9663EOCP
9664 set try
9665 if eval $compile_ok; then
9666 dflt=`./try`
9667 else
9668 dflt='1'
9669 echo "(I can't seem to compile the test program. Guessing...)"
9670 fi
9671 ;;
9672*)
9673 dflt="$charsize"
9674 ;;
9675esac
9676rp="What is the size of a character (in bytes)?"
9677. ./myread
9678charsize="$ans"
9679$rm -f try.c try
9680
9681
9682echo " "
9683$echo "Choosing the C types to be used for Perl's internal types..." >&4
9684
9685case "$use64bits:$d_quad:$quadtype" in
9686define:define:?*)
9687 ivtype="$quadtype"
9688 uvtype="$uquadtype"
9689 ivsize=8
9690 uvsize=8
9691 ;;
9692*) ivtype="long"
9693 uvtype="unsigned long"
9694 ivsize=$longsize
9695 uvsize=$longsize
9696 ;;
9697esac
9698
9699case "$uselongdouble:$d_longdbl" in
9700define:define)
9701 nvtype="long double"
9702 nvsize=$longdblsize
9703 ;;
9704*) nvtype=double
9705 nvsize=$doublesize
9706 ;;
9707esac
9708
9709$echo "(IV will be "$ivtype", $ivsize bytes)"
9710$echo "(UV will be "$uvtype", $uvsize bytes)"
9711$echo "(NV will be "$nvtype", $nvsize bytes)"
9712
9713$cat >try.c <<EOCP
9714#$i_inttypes I_INTTYPES
9715#ifdef I_INTTYPES
9716#include <inttypes.h>
9717#endif
9718#include <stdio.h>
9719int main() {
9720#ifdef INT8
9721 int8_t i = INT8_MAX;
9722 uint8_t u = UINT8_MAX;
9723 printf("int8_t\n");
9724#endif
9725#ifdef INT16
9726 int16_t i = INT16_MAX;
9727 uint16_t i = UINT16_MAX;
9728 printf("int16_t\n");
9729#endif
9730#ifdef INT32
9731 int32_t i = INT32_MAX;
9732 uint32_t u = UINT32_MAX;
9733 printf("int32_t\n");
9734#endif
9735}
9736EOCP
9737
9738case "$i8type" in
9739'') case "$charsize" in
9740 1) i8type=char
9741 u8type="unsigned char"
9742 i8size=$charsize
9743 u8size=$charsize
9744 ;;
9745 esac
9746 ;;
9747esac
9748case "$i8type" in
9749'') set try -DINT8
9750 if eval $compile; then
9751 case "`./try$exe_ext`" in
9752 int8_t) i8type=int8_t
9753 u8type=uint8_t
9754 i8size=1
9755 u8size=1
9756 ;;
9757 esac
9758 fi
9759 ;;
9760esac
9761case "$i8type" in
9762'') if $test $charsize -ge 1; then
9763 i8type=char
9764 u8type="unsigned char"
9765 i8size=$charsize
9766 u8size=$charsize
9767 fi
9768 ;;
9769esac
9770
9771case "$i16type" in
9772'') case "$shortsize" in
9773 2) i16type=short
9774 u16type="unsigned short"
9775 i16size=$shortsize
9776 u16size=$shortsize
9777 ;;
9778 esac
9779 ;;
9780esac
9781case "$i16type" in
9782'') set try -DINT16
9783 if eval $compile; then
9784 case "`./try$exe_ext`" in
9785 int16_t)
9786 i16type=int16_t
9787 u16type=uint16_t
9788 i16size=2
9789 u16size=2
9790 ;;
9791 esac
9792 fi
9793 ;;
9794esac
9795case "$i16type" in
9796'') if $test $shortsize -ge 2; then
9797 i16type=short
9798 u16type="unsigned short"
9799 i16size=$shortsize
9800 u16size=$shortsize
9801 fi
9802 ;;
9803esac
9804
9805case "$i32type" in
9806'') case "$longsize" in
9807 4) i32type=long
9808 u32type="unsigned long"
9809 i32size=$longsize
9810 u32size=$longsize
9811 ;;
9812 *) case "$intsize" in
9813 4) i32type=int
9814 u32type="unsigned int"
9815 i32size=$intsize
9816 u32size=$intsize
9817 ;;
9818 esac
9819 ;;
9820 esac
9821 ;;
9822esac
9823case "$i32type" in
9824'') set try -DINT32
9825 if eval $compile; then
9826 case "`./try$exe_ext`" in
9827 int32_t)
9828 i32type=int32_t
9829 u32type=uint32_t
9830 i32size=4
9831 u32size=4
9832 ;;
9833 esac
9834 fi
9835 ;;
9836esac
9837case "$i32type" in
9838'') if $test $intsize -ge 4; then
9839 i32type=int
9840 u32type="unsigned int"
9841 i32size=$intsize
9842 u32size=$intsize
9843 fi
9844 ;;
9845esac
9846
9847case "$i64type" in
9848'') case "$d_quad:$quadtype" in
9849 define:?*)
9850 i64type="$quadtype"
9851 u64type="$uquadtype"
9852 i64size=8
9853 u64size=8
9854 ;;
9855 esac
9856 ;;
9857esac
9858
9859$echo "Checking whether your NVs can preserve your UVs..." >&4
9860$cat <<EOP >try.c
9861#include <stdio.h>
9862int main() {
9863 $uvtype k = ($uvtype)~0, l;
9864 $nvtype d;
9865 l = k;
9866 d = ($nvtype)l;
9867 l = ($uvtype)d;
9868 if (l == k)
9869 printf("preserve\n");
9870 exit(0);
9871}
9872EOP
9873set try
9874if eval $compile; then
9875 case "`./try$exe_ext`" in
78691af5 9876 preserve) d_nv_preserves_uv="$define" ;;
cce08f5b
JH
9877 esac
9878fi
78691af5 9879case "$d_nv_preserves_uv" in
cce08f5b
JH
9880$define) $echo "Yes, they can." 2>&1 ;;
9881*) $echo "No, they can't." 2>&1
78691af5 9882 d_nv_preserves_uv="$undef"
cce08f5b
JH
9883 ;;
9884esac
9885
9886$rm -f try.* try
9887
c4747d3e 9888: see if POSIX threads are available
1f5ae88c
JH
9889set pthread.h i_pthread
9890eval $inhdr
9891
c4747d3e
JH
9892
9893
9894
9895: how to create joinable pthreads
9896if test "X$usethreads" = "X$define" -a "X$i_pthread" = "X$define"; then
13666627
JH
9897 echo " "
9898 echo "Checking what constant to use for creating joinable pthreads..." >&4
9899 $cat >try.c <<'EOCP'
9900#include <pthread.h>
9901int main() {
9902 int detachstate = JOINABLE;
9903}
9904EOCP
9905 set try -DJOINABLE=PTHREAD_CREATE_JOINABLE
9906 if eval $compile; then
c6912327 9907 echo "You seem to use PTHREAD_CREATE_JOINABLE." >&4
ef4af2be
JH
9908 val="$undef" # Yes, undef.
9909 set d_old_pthread_create_joinable
13666627 9910 eval $setvar
ef4af2be
JH
9911 val=""
9912 set old_pthread_create_joinable
13666627
JH
9913 eval $setvar
9914 else
9915 set try -DJOINABLE=PTHREAD_CREATE_UNDETACHED
9916 if eval $compile; then
c6912327 9917 echo "You seem to use PTHREAD_CREATE_UNDETACHED." >&4
13666627 9918 val="$define"
ef4af2be 9919 set d_old_pthread_create_joinable
13666627
JH
9920 eval $setvar
9921 val=PTHREAD_CREATE_UNDETACHED
ef4af2be 9922 set old_pthread_create_joinable
13666627
JH
9923 eval $setvar
9924 else
9925 set try -DJOINABLE=__UNDETACHED
9926 if eval $compile; then
c6912327 9927 echo "You seem to use __UNDETACHED." >&4
13666627 9928 val="$define"
ef4af2be 9929 set d_old_pthread_create_joinable
13666627
JH
9930 eval $setvar
9931 val=__UNDETACHED
ef4af2be 9932 set old_pthread_create_joinable
13666627
JH
9933 eval $setvar
9934 else
c6912327 9935 echo "Egads, nothing obvious found. Guessing that you use 0." >&4
13666627 9936 val="$define"
ef4af2be 9937 set d_old_pthread_create_joinable
13666627
JH
9938 eval $setvar
9939 val=0
ef4af2be 9940 set old_pthread_create_joinable
13666627
JH
9941 eval $setvar
9942 fi
9943 fi
9944 fi
9945 $rm -f try try.*
9946else
ef4af2be
JH
9947 d_old_pthread_create_joinable="$undef"
9948 old_pthread_create_joinable=""
13666627
JH
9949fi
9950
ef4af2be
JH
9951: see if pause exists
9952set pause d_pause
9953eval $inlibc
9954
9955: see if pipe exists
9956set pipe d_pipe
9957eval $inlibc
9958
9959: see if poll exists
9960set poll d_poll
9961eval $inlibc
9962
31dfa2f6
JH
9963
9964: see whether the various POSIXish _yields exist
9965$cat >try.c <<EOP
9966#include <pthread.h>
9967#include <stdio.h>
5a411a32 9968int main() {
31dfa2f6
JH
9969#ifdef SCHED_YIELD
9970 sched_yield();
9971#else
9972#ifdef PTHREAD_YIELD
9973 pthread_yield();
9974#else
9975#ifdef PTHREAD_YIELD_NULL
9976 pthread_yield(NULL);
9977#endif
9978#endif
9979#endif
9980}
9981EOP
9982: see if sched_yield exists
9983set try -DSCHED_YIELD
9984if eval $compile; then
9985 val="$define"
9986 sched_yield='sched_yield()'
9987else
9988 val="$undef"
9989fi
9990case "$usethreads" in
9991$define)
9992 case "$val" in
9993 $define) echo 'sched_yield() found.' >&4 ;;
9994 *) echo 'sched_yield() NOT found.' >&4 ;;
9995 esac
9996esac
9997set d_sched_yield
9998eval $setvar
9999
10000: see if pthread_yield exists
10001set try -DPTHREAD_YIELD
10002if eval $compile; then
10003 val="$define"
10004 case "$sched_yield" in
10005 '') sched_yield='pthread_yield()' ;;
10006 esac
10007else
10008 set try -DPTHREAD_YIELD_NULL
10009 if eval $compile; then
10010 val="$define"
10011 case "$sched_yield" in
10012 '') sched_yield='pthread_yield(NULL)' ;;
10013 esac
10014 else
10015 val="$undef"
10016 fi
10017fi
10018case "$usethreads" in
10019$define)
10020 case "$val" in
10021 $define) echo 'pthread_yield() found.' >&4 ;;
10022 *) echo 'pthread_yield() NOT found.' >&4 ;;
10023 esac
10024 ;;
10025esac
10026set d_pthread_yield
10027eval $setvar
10028
10029case "$sched_yield" in
10030'') sched_yield=undef ;;
10031esac
10032
10033$rm -f try try.*
10034
4aa0a1f7
AD
10035: see if this is a pwd.h system
10036set pwd.h i_pwd
10037eval $inhdr
10038
10039case "$i_pwd" in
10040$define)
10041 xxx=`./findhdr pwd.h`
85e6fe83 10042 $cppstdin $cppflags $cppminus < $xxx >$$.h
4aa0a1f7 10043
2304df62 10044 if $contains 'pw_quota' $$.h >/dev/null 2>&1; then
4aa0a1f7 10045 val="$define"
2304df62 10046 else
4aa0a1f7 10047 val="$undef"
2304df62 10048 fi
4aa0a1f7
AD
10049 set d_pwquota
10050 eval $setvar
10051
2304df62 10052 if $contains 'pw_age' $$.h >/dev/null 2>&1; then
4aa0a1f7 10053 val="$define"
2304df62 10054 else
4aa0a1f7 10055 val="$undef"
2304df62 10056 fi
4aa0a1f7
AD
10057 set d_pwage
10058 eval $setvar
10059
2304df62 10060 if $contains 'pw_change' $$.h >/dev/null 2>&1; then
4aa0a1f7 10061 val="$define"
2304df62 10062 else
4aa0a1f7 10063 val="$undef"
2304df62 10064 fi
4aa0a1f7
AD
10065 set d_pwchange
10066 eval $setvar
10067
2304df62 10068 if $contains 'pw_class' $$.h >/dev/null 2>&1; then
4aa0a1f7 10069 val="$define"
2304df62 10070 else
4aa0a1f7 10071 val="$undef"
2304df62 10072 fi
4aa0a1f7
AD
10073 set d_pwclass
10074 eval $setvar
10075
2304df62 10076 if $contains 'pw_expire' $$.h >/dev/null 2>&1; then
4aa0a1f7 10077 val="$define"
2304df62 10078 else
4aa0a1f7 10079 val="$undef"
2304df62 10080 fi
4aa0a1f7 10081 set d_pwexpire
cce08f5b 10082 eval $setvar
de1c2614 10083
cce08f5b
JH
10084 if $contains 'pw_comment' $$.h >/dev/null 2>&1; then
10085 val="$define"
1eeb0f31 10086 else
cce08f5b 10087 val="$undef"
1eeb0f31 10088 fi
cce08f5b
JH
10089 set d_pwcomment
10090 eval $setvar
10091
10092 if $contains 'pw_gecos' $$.h >/dev/null 2>&1; then
10093 val="$define"
10094 else
10095 val="$undef"
10096 fi
10097 set d_pwgecos
10098 eval $setvar
10099
10100 if $contains 'pw_passwd' $$.h >/dev/null 2>&1; then
10101 val="$define"
10102 else
10103 val="$undef"
10104 fi
10105 set d_pwpasswd
10106 eval $setvar
10107
10108 $rm -f $$.h
10109 ;;
10110*)
10111 val="$undef";
10112 set d_pwquota; eval $setvar
10113 set d_pwage; eval $setvar
10114 set d_pwchange; eval $setvar
10115 set d_pwclass; eval $setvar
10116 set d_pwexpire; eval $setvar
10117 set d_pwcomment; eval $setvar
10118 set d_pwgecos; eval $setvar
10119 set d_pwpasswd; eval $setvar
de1c2614
JH
10120 ;;
10121esac
10122
85e6fe83 10123: see if readdir and friends exist
2304df62
AD
10124set readdir d_readdir
10125eval $inlibc
85e6fe83
LW
10126set seekdir d_seekdir
10127eval $inlibc
10128set telldir d_telldir
10129eval $inlibc
10130set rewinddir d_rewinddir
10131eval $inlibc
2304df62 10132
a0d0e21e
LW
10133: see if readlink exists
10134set readlink d_readlink
10135eval $inlibc
10136
2304df62
AD
10137: see if rename exists
10138set rename d_rename
10139eval $inlibc
10140
10141: see if rmdir exists
10142set rmdir d_rmdir
10143eval $inlibc
10144
8ff267be 10145: see if memory.h is available.
10146val=''
10147set memory.h val
10148eval $inhdr
10149
10150: See if it conflicts with string.h
10151case "$val" in
10152$define)
10153 case "$strings" in
10154 '') ;;
10155 *)
10156 $cppstdin $cppflags $cppminus < $strings > mem.h
10157 if $contains 'memcpy' mem.h >/dev/null 2>&1; then
10158 echo " "
10159 echo "We won't be including <memory.h>."
10160 val="$undef"
10161 fi
10162 $rm -f mem.h
10163 ;;
10164 esac
10165esac
10166set i_memory
10167eval $setvar
10168
2304df62
AD
10169: can bcopy handle overlapping blocks?
10170val="$undef"
10171case "$d_bcopy" in
10172"$define")
10173 echo " "
10174 echo "Checking to see if your bcopy() can do overlapping copies..." >&4
dfe9444c 10175 $cat >try.c <<EOCP
8ff267be 10176#$i_memory I_MEMORY
10177#$i_stdlib I_STDLIB
10178#$i_string I_STRING
10179#$i_unistd I_UNISTD
10180EOCP
dfe9444c 10181 $cat >>try.c <<'EOCP'
8ff267be 10182#include <stdio.h>
8ff267be 10183#ifdef I_MEMORY
10184# include <memory.h>
10185#endif
10186#ifdef I_STDLIB
10187# include <stdlib.h>
10188#endif
10189#ifdef I_STRING
10190# include <string.h>
10191#else
10192# include <strings.h>
10193#endif
10194#ifdef I_UNISTD
10195# include <unistd.h> /* Needed for NetBSD */
10196#endif
d674cd6d 10197int main()
2304df62 10198{
85e6fe83
LW
10199char buf[128], abc[128];
10200char *b;
10201int len;
10202int off;
10203int align;
a0d0e21e 10204
85e6fe83 10205bcopy("abcdefghijklmnopqrstuvwxyz0123456789", abc, 36);
2304df62
AD
10206
10207for (align = 7; align >= 0; align--) {
10208 for (len = 36; len; len--) {
10209 b = buf+align;
85e6fe83 10210 bcopy(abc, b, len);
2304df62
AD
10211 for (off = 1; off <= len; off++) {
10212 bcopy(b, b+off, len);
10213 bcopy(b+off, b, len);
85e6fe83 10214 if (bcmp(b, abc, len))
2304df62
AD
10215 exit(1);
10216 }
10217 }
10218}
10219exit(0);
10220}
10221EOCP
dfe9444c 10222 set try
dc45a647 10223 if eval $compile_ok; then
dfe9444c 10224 if ./try 2>/dev/null; then
2304df62
AD
10225 echo "Yes, it can."
10226 val="$define"
10227 else
10228 echo "It can't, sorry."
8ff267be 10229 case "$d_memmove" in
10230 "$define") echo "But that's Ok since you have memmove()." ;;
10231 esac
2304df62
AD
10232 fi
10233 else
10234 echo "(I can't compile the test program, so we'll assume not...)"
8ff267be 10235 case "$d_memmove" in
10236 "$define") echo "But that's Ok since you have memmove()." ;;
10237 esac
2304df62
AD
10238 fi
10239 ;;
10240esac
dfe9444c 10241$rm -f try.* try core
2304df62
AD
10242set d_safebcpy
10243eval $setvar
10244
10245: can memcpy handle overlapping blocks?
10246val="$undef"
10247case "$d_memcpy" in
10248"$define")
10249 echo " "
10250 echo "Checking to see if your memcpy() can do overlapping copies..." >&4
dfe9444c 10251 $cat >try.c <<EOCP
8ff267be 10252#$i_memory I_MEMORY
10253#$i_stdlib I_STDLIB
10254#$i_string I_STRING
10255#$i_unistd I_UNISTD
10256EOCP
dfe9444c 10257 $cat >>try.c <<'EOCP'
8ff267be 10258#include <stdio.h>
8ff267be 10259#ifdef I_MEMORY
10260# include <memory.h>
10261#endif
10262#ifdef I_STDLIB
10263# include <stdlib.h>
10264#endif
10265#ifdef I_STRING
10266# include <string.h>
10267#else
10268# include <strings.h>
10269#endif
10270#ifdef I_UNISTD
10271# include <unistd.h> /* Needed for NetBSD */
10272#endif
d674cd6d 10273int main()
2304df62 10274{
85e6fe83
LW
10275char buf[128], abc[128];
10276char *b;
10277int len;
10278int off;
10279int align;
10280
8ff267be 10281/* Copy "abcde..." string to char abc[] so that gcc doesn't
10282 try to store the string in read-only memory. */
85e6fe83 10283memcpy(abc, "abcdefghijklmnopqrstuvwxyz0123456789", 36);
2304df62
AD
10284
10285for (align = 7; align >= 0; align--) {
10286 for (len = 36; len; len--) {
10287 b = buf+align;
232e078e 10288 memcpy(b, abc, len);
2304df62 10289 for (off = 1; off <= len; off++) {
2304df62 10290 memcpy(b+off, b, len);
232e078e 10291 memcpy(b, b+off, len);
85e6fe83 10292 if (memcmp(b, abc, len))
2304df62
AD
10293 exit(1);
10294 }
10295 }
10296}
10297exit(0);
10298}
10299EOCP
dfe9444c 10300 set try
dc45a647 10301 if eval $compile_ok; then
dfe9444c 10302 if ./try 2>/dev/null; then
2304df62
AD
10303 echo "Yes, it can."
10304 val="$define"
10305 else
10306 echo "It can't, sorry."
8ff267be 10307 case "$d_memmove" in
10308 "$define") echo "But that's Ok since you have memmove()." ;;
10309 esac
2304df62
AD
10310 fi
10311 else
10312 echo "(I can't compile the test program, so we'll assume not...)"
8ff267be 10313 case "$d_memmove" in
10314 "$define") echo "But that's Ok since you have memmove()." ;;
10315 esac
2304df62
AD
10316 fi
10317 ;;
10318esac
dfe9444c 10319$rm -f try.* try core
2304df62
AD
10320set d_safemcpy
10321eval $setvar
10322
36477c24 10323: can memcmp be trusted to compare relative magnitude?
10324val="$undef"
10325case "$d_memcmp" in
10326"$define")
10327 echo " "
dfe9444c
AD
10328 echo "Checking if your memcmp() can compare relative magnitude..." >&4
10329 $cat >try.c <<EOCP
36477c24 10330#$i_memory I_MEMORY
10331#$i_stdlib I_STDLIB
10332#$i_string I_STRING
10333#$i_unistd I_UNISTD
10334EOCP
dfe9444c 10335 $cat >>try.c <<'EOCP'
36477c24 10336#include <stdio.h>
36477c24 10337#ifdef I_MEMORY
10338# include <memory.h>
10339#endif
10340#ifdef I_STDLIB
10341# include <stdlib.h>
10342#endif
10343#ifdef I_STRING
10344# include <string.h>
10345#else
10346# include <strings.h>
10347#endif
10348#ifdef I_UNISTD
10349# include <unistd.h> /* Needed for NetBSD */
10350#endif
d674cd6d 10351int main()
36477c24 10352{
10353char a = -1;
10354char b = 0;
10355if ((a < b) && memcmp(&a, &b, 1) < 0)
10356 exit(1);
10357exit(0);
10358}
10359EOCP
dfe9444c 10360 set try
dc45a647 10361 if eval $compile_ok; then
dfe9444c 10362 if ./try 2>/dev/null; then
36477c24 10363 echo "Yes, it can."
10364 val="$define"
10365 else
10366 echo "No, it can't (it uses signed chars)."
10367 fi
10368 else
10369 echo "(I can't compile the test program, so we'll assume not...)"
10370 fi
10371 ;;
10372esac
dfe9444c 10373$rm -f try.* try core
36477c24 10374set d_sanemcmp
10375eval $setvar
10376
2304df62
AD
10377: see if select exists
10378set select d_select
10379eval $inlibc
10380
10381: see if semctl exists
10382set semctl d_semctl
10383eval $inlibc
10384
10385: see if semget exists
10386set semget d_semget
10387eval $inlibc
10388
10389: see if semop exists
10390set semop d_semop
10391eval $inlibc
10392
10393: see how much of the 'sem*(2)' library is present.
10394h_sem=true
10395echo " "
10396case "$d_semctl$d_semget$d_semop" in
10397*"$undef"*) h_sem=false;;
10398esac
6087ac44
JH
10399case "$osname" in
10400freebsd)
10401 case "`ipcs 2>&1`" in
10402 "SVID messages"*"not configured"*)
5ff3f7a4 10403 echo "Your $osname does not have the sem*(2) configured." >&4
6087ac44
JH
10404 h_sem=false
10405 val="$undef"
10406 set semctl d_semctl
10407 eval $setvar
10408 set semget d_semget
10409 eval $setvar
10410 set semop d_semop
10411 eval $setvar
10412 ;;
10413 esac
10414 ;;
10415esac
2304df62
AD
10416: we could also check for sys/ipc.h ...
10417if $h_sem && $test `./findhdr sys/sem.h`; then
10418 echo "You have the full sem*(2) library." >&4
10419 val="$define"
10420else
10421 echo "You don't have the full sem*(2) library." >&4
10422 val="$undef"
10423fi
10424set d_sem
10425eval $setvar
10426
bd89102f
AD
10427: see whether sys/sem.h defines union semun
10428echo " "
10429$cat > try.c <<'END'
10430#include <sys/types.h>
10431#include <sys/ipc.h>
10432#include <sys/sem.h>
10433int main () { union semun semun; semun.buf = 0; }
10434END
10435set try
10436if eval $compile; then
10437 echo "You have union semun in <sys/sem.h>." >&4
10438 val="$define"
10439else
10440 echo "You do not have union semun in <sys/sem.h>." >&4
10441 val="$undef"
10442fi
85ab1d1d 10443$rm -f try try.c try.h
bd89102f
AD
10444set d_union_semun
10445eval $setvar
10446
10447: see how to do semctl IPC_STAT
10448case "$d_sem" in
10449$define)
10450 : see whether semctl IPC_STAT can use union semun
10451 echo " "
85ab1d1d
JH
10452 $cat > try.h <<END
10453#ifndef S_IRUSR
10454# ifdef S_IREAD
10455# define S_IRUSR S_IREAD
10456# define S_IWUSR S_IWRITE
10457# define S_IXUSR S_IEXEC
10458# else
10459# define S_IRUSR 0400
10460# define S_IWUSR 0200
10461# define S_IXUSR 0100
10462# endif
10463# define S_IRGRP (S_IRUSR>>3)
10464# define S_IWGRP (S_IWUSR>>3)
10465# define S_IXGRP (S_IXUSR>>3)
10466# define S_IROTH (S_IRUSR>>6)
10467# define S_IWOTH (S_IWUSR>>6)
10468# define S_IXOTH (S_IXUSR>>6)
10469#endif
10470#ifndef S_IRWXU
10471# define S_IRWXU (S_IRUSR|S_IWUSR|S_IXUSR)
10472# define S_IRWXG (S_IRGRP|S_IWGRP|S_IXGRP)
10473# define S_IRWXO (S_IROTH|S_IWOTH|S_IXOTH)
10474#endif
10475END
10476
bd89102f
AD
10477 $cat > try.c <<END
10478#include <sys/types.h>
10479#include <sys/ipc.h>
10480#include <sys/sem.h>
10481#include <sys/stat.h>
10482#include <stdio.h>
10483#include <errno.h>
85ab1d1d 10484#include "try.h"
bd89102f
AD
10485#ifndef errno
10486extern int errno;
10487#endif
10488#$d_union_semun HAS_UNION_SEMUN
10489int main() {
10490 union semun
10491#ifndef HAS_UNION_SEMUN
10492 {
10493 int val;
10494 struct semid_ds *buf;
10495 unsigned short *array;
10496 }
10497#endif
10498 arg;
10499 int sem, st;
10500
10501#if defined(IPC_PRIVATE) && defined(S_IRWXU) && defined(S_IRWXG) && defined(S_IRWXO) && defined(IPC_CREAT)
10502 sem = semget(IPC_PRIVATE, 1, S_IRWXU|S_IRWXG|S_IRWXO|IPC_CREAT);
10503 if (sem > -1) {
10504 struct semid_ds argbuf;
10505 arg.buf = &argbuf;
10506# ifdef IPC_STAT
10507 st = semctl(sem, 0, IPC_STAT, arg);
10508 if (st == 0)
10509 printf("semun\n");
10510 else
10511# endif /* IPC_STAT */
10512 printf("semctl IPC_STAT failed: errno = %d\n", errno);
10513# ifdef IPC_RMID
10514 if (semctl(sem, 0, IPC_RMID, arg) != 0)
10515# endif /* IPC_RMID */
10516 printf("semctl IPC_RMID failed: errno = %d\n", errno);
10517 } else
10518#endif /* IPC_PRIVATE && ... */
10519 printf("semget failed: errno = %d\n", errno);
10520 return 0;
10521}
10522END
10523 val="$undef"
10524 set try
10525 if eval $compile; then
10526 xxx=`./try`
10527 case "$xxx" in
10528 semun) val="$define" ;;
10529 esac
10530 fi
10531 $rm -f try try.c
10532 set d_semctl_semun
10533 eval $setvar
10534 case "$d_semctl_semun" in
10535 $define)
10536 echo "You can use union semun for semctl IPC_STAT." >&4
10537 also='also'
10538 ;;
10539 *) echo "You cannot use union semun for semctl IPC_STAT." >&4
10540 also=''
10541 ;;
10542 esac
10543
10544 : see whether semctl IPC_STAT can use struct semid_ds pointer
10545 $cat > try.c <<'END'
10546#include <sys/types.h>
10547#include <sys/ipc.h>
10548#include <sys/sem.h>
10549#include <sys/stat.h>
85ab1d1d 10550#include "try.h"
bd89102f
AD
10551#include <stdio.h>
10552#include <errno.h>
10553#ifndef errno
10554extern int errno;
10555#endif
10556int main() {
10557 struct semid_ds arg;
10558 int sem, st;
10559
10560#if defined(IPC_PRIVATE) && defined(S_IRWXU) && defined(S_IRWXG) && defined(S_IRWXO) && defined(IPC_CREAT)
10561 sem = semget(IPC_PRIVATE, 1, S_IRWXU|S_IRWXG|S_IRWXO|IPC_CREAT);
10562 if (sem > -1) {
10563# ifdef IPC_STAT
10564 st = semctl(sem, 0, IPC_STAT, &arg);
10565 if (st == 0)
10566 printf("semid_ds\n");
10567 else
10568# endif /* IPC_STAT */
10569 printf("semctl IPC_STAT failed: errno = %d\n", errno);
10570# ifdef IPC_RMID
10571 if (semctl(sem, 0, IPC_RMID, &arg) != 0)
10572# endif /* IPC_RMID */
10573 printf("semctl IPC_RMID failed: errno = %d\n", errno);
10574 } else
10575#endif /* IPC_PRIVATE && ... */
10576 printf("semget failed: errno = %d\n", errno);
10577
10578 return 0;
10579}
10580END
10581 val="$undef"
10582 set try
10583 if eval $compile; then
10584 xxx=`./try`
10585 case "$xxx" in
10586 semid_ds) val="$define" ;;
10587 esac
10588 fi
10589 $rm -f try try.c
10590 set d_semctl_semid_ds
10591 eval $setvar
10592 case "$d_semctl_semid_ds" in
10593 $define)
7f3d1cf1 10594 echo "You can $also use struct semid_ds* for semctl IPC_STAT." >&4
bd89102f 10595 ;;
7f3d1cf1 10596 *) echo "You cannot use struct semid_ds* for semctl IPC_STAT." >&4
bd89102f
AD
10597 ;;
10598 esac
85ab1d1d 10599 $rm -f try.h
bd89102f
AD
10600 ;;
10601*) val="$undef"
10602
10603 # We do not have the full sem*(2) library, so assume we can not
10604 # use either.
10605
10606 set d_semctl_semun
10607 eval $setvar
10608
10609 set d_semctl_semid_ds
10610 eval $setvar
10611 ;;
10612esac
10613
2304df62
AD
10614: see if setegid exists
10615set setegid d_setegid
10616eval $inlibc
10617
10618: see if seteuid exists
10619set seteuid d_seteuid
10620eval $inlibc
10621
5ff3f7a4
GS
10622: see if setgrent exists
10623set setgrent d_setgrent
10624eval $inlibc
10625
693762b4
AD
10626: see if sethostent exists
10627set sethostent d_sethent
10628eval $inlibc
10629
a0d0e21e
LW
10630: see if setlinebuf exists
10631set setlinebuf d_setlinebuf
10632eval $inlibc
10633
2304df62
AD
10634: see if setlocale exists
10635set setlocale d_setlocale
10636eval $inlibc
a0d0e21e 10637
e5c9fcd0
AD
10638: see if setnetent exists
10639set setnetent d_setnent
10640eval $inlibc
10641
10642: see if setprotoent exists
10643set setprotoent d_setpent
10644eval $inlibc
10645
2304df62
AD
10646: see if setpgid exists
10647set setpgid d_setpgid
10648eval $inlibc
10649
2304df62
AD
10650: see if setpgrp2 exists
10651set setpgrp2 d_setpgrp2
10652eval $inlibc
10653
10654: see if setpriority exists
10655set setpriority d_setprior
10656eval $inlibc
10657
5ff3f7a4
GS
10658: see if setpwent exists
10659set setpwent d_setpwent
10660eval $inlibc
10661
2304df62
AD
10662: see if setregid exists
10663set setregid d_setregid
10664eval $inlibc
10665set setresgid d_setresgid
10666eval $inlibc
10667
10668: see if setreuid exists
10669set setreuid d_setreuid
10670eval $inlibc
10671set setresuid d_setresuid
10672eval $inlibc
10673
10674: see if setrgid exists
10675set setrgid d_setrgid
10676eval $inlibc
10677
10678: see if setruid exists
10679set setruid d_setruid
10680eval $inlibc
10681
e5c9fcd0
AD
10682: see if setservent exists
10683set setservent d_setsent
10684eval $inlibc
10685
2304df62
AD
10686: see if setsid exists
10687set setsid d_setsid
10688eval $inlibc
10689
f1066039
JH
10690: see if setspent exists
10691set setspent d_setspent
10692eval $inlibc
10693
e5c9fcd0
AD
10694: see if setvbuf exists
10695set setvbuf d_setvbuf
10696eval $inlibc
10697
760ac839
LW
10698: see if sfio.h is available
10699set sfio.h i_sfio
10700eval $inhdr
10701
10702
8ff267be 10703: see if sfio library is available
760ac839
LW
10704case "$i_sfio" in
10705$define)
10706 val=''
10707 set sfreserve val
10708 eval $inlibc
10709 ;;
10710*)
10711 val="$undef"
10712 ;;
10713esac
8ff267be 10714: Ok, but do we want to use it.
760ac839
LW
10715case "$val" in
10716$define)
10717 case "$usesfio" in
8ff267be 10718 true|$define|[yY]*) dflt='y';;
760ac839
LW
10719 *) dflt='n';;
10720 esac
8ff267be 10721 echo "$package can use the sfio library, but it is experimental."
760ac839
LW
10722 rp="You seem to have sfio available, do you want to try using it?"
10723 . ./myread
10724 case "$ans" in
8ff267be 10725 y|Y) ;;
10726 *) echo "Ok, avoiding sfio this time. I'll use stdio instead."
760ac839 10727 val="$undef"
ff0cee69 10728 : Remove sfio from list of libraries to use
10729 set `echo X $libs | $sed -e 's/-lsfio / /' -e 's/-lsfio$//'`
10730 shift
10731 libs="$*"
10732 echo "libs = $libs" >&4
760ac839
LW
10733 ;;
10734 esac
10735 ;;
8ff267be 10736*) case "$usesfio" in
10737 true|$define|[yY]*)
10738 echo "Sorry, cannot find sfio on this machine" >&4
10739 echo "Ignoring your setting of usesfio=$usesfio" >&4
760ac839
LW
10740 ;;
10741 esac
10742 ;;
10743esac
8ff267be 10744set d_sfio
10745eval $setvar
760ac839
LW
10746case "$d_sfio" in
10747$define) usesfio='true';;
10748*) usesfio='false';;
10749esac
10750
2304df62
AD
10751: see if shmctl exists
10752set shmctl d_shmctl
10753eval $inlibc
10754
10755: see if shmget exists
10756set shmget d_shmget
10757eval $inlibc
10758
a0d0e21e
LW
10759: see if shmat exists
10760set shmat d_shmat
10761eval $inlibc
10762: see what shmat returns
10763case "$d_shmat" in
10764"$define")
10765 $cat >shmat.c <<'END'
10766#include <sys/shm.h>
10767void *shmat();
10768END
10769 if $cc $ccflags -c shmat.c >/dev/null 2>&1; then
10770 shmattype='void *'
10771 else
10772 shmattype='char *'
10773 fi
10774 echo "and it returns ($shmattype)." >&4
10775 : see if a prototype for shmat is available
e50aee73
AD
10776 xxx=`./findhdr sys/shm.h`
10777 $cppstdin $cppflags $cppminus < $xxx > shmat.c 2>/dev/null
a0d0e21e
LW
10778 if $contains 'shmat.*(' shmat.c >/dev/null 2>&1; then
10779 val="$define"
10780 else
10781 val="$undef"
10782 fi
10783 $rm -f shmat.[co]
10784 ;;
10785*)
10786 val="$undef"
10787 ;;
10788esac
10789set d_shmatprototype
10790eval $setvar
10791
10792: see if shmdt exists
10793set shmdt d_shmdt
10794eval $inlibc
10795
10796: see how much of the 'shm*(2)' library is present.
10797h_shm=true
10798echo " "
10799case "$d_shmctl$d_shmget$d_shmat$d_shmdt" in
10800*"$undef"*) h_shm=false;;
10801esac
6087ac44
JH
10802case "$osname" in
10803freebsd)
10804 case "`ipcs 2>&1`" in
10805 "SVID shared memory"*"not configured"*)
5ff3f7a4 10806 echo "Your $osname does not have the shm*(2) configured." >&4
6087ac44
JH
10807 h_shm=false
10808 val="$undef"
10809 set shmctl d_shmctl
10810 evat $setvar
10811 set shmget d_shmget
10812 evat $setvar
10813 set shmat d_shmat
10814 evat $setvar
10815 set shmdt d_shmdt
10816 evat $setvar
10817 ;;
10818 esac
10819 ;;
10820esac
a0d0e21e
LW
10821: we could also check for sys/ipc.h ...
10822if $h_shm && $test `./findhdr sys/shm.h`; then
10823 echo "You have the full shm*(2) library." >&4
10824 val="$define"
10825else
10826 echo "You don't have the full shm*(2) library." >&4
10827 val="$undef"
10828fi
10829set d_shm
10830eval $setvar
10831
2c7991dc 10832echo " "
8ff267be 10833: see if we have sigaction
10834if set sigaction val -f d_sigaction; eval $csym; $val; then
10835 echo 'sigaction() found.' >&4
dc45a647 10836 $cat > try.c <<'EOP'
8ff267be 10837#include <stdio.h>
10838#include <sys/types.h>
10839#include <signal.h>
d674cd6d 10840int main()
8ff267be 10841{
10842 struct sigaction act, oact;
190b66db 10843 act.sa_flags = 0;
48159a0c 10844 oact.sa_handler = 0;
14e4fe40
JH
10845 /* so that act and oact are used */
10846 exit(act.sa_flags == 0 && oact.sa_handler == 0);
8ff267be 10847}
10848EOP
dc45a647
MB
10849 set try
10850 if eval $compile_ok; then
10851 val="$define"
10852 else
10853 echo "But you don't seem to have a useable struct sigaction." >&4
10854 val="$undef"
10855 fi
8ff267be 10856else
dc45a647 10857 echo 'sigaction NOT found.' >&4
8ff267be 10858 val="$undef"
10859fi
10860set d_sigaction; eval $setvar
dfe9444c 10861$rm -f try try$_o try.c
2c7991dc 10862
a5f75d66
AD
10863: see if sigsetjmp exists
10864echo " "
921b2963
JH
10865case "$d_sigsetjmp" in
10866'')
10867 $cat >try.c <<'EOP'
10868#include <setjmp.h>
10869sigjmp_buf env;
10870int set = 1;
d674cd6d 10871int main()
921b2963
JH
10872{
10873 if (sigsetjmp(env,1))
10874 exit(set);
10875 set = 0;
10876 siglongjmp(env, 1);
10877 exit(1);
10878}
10879EOP
10880 set try
10881 if eval $compile; then
10882 if ./try >/dev/null 2>&1; then
10883 echo "POSIX sigsetjmp found." >&4
10884 val="$define"
10885 else
10886 $cat >&4 <<EOM
10887Uh-Oh! You have POSIX sigsetjmp and siglongjmp, but they do not work properly!!
10888I'll ignore them.
10889EOM
10890 val="$undef"
a0d0e21e 10891 fi
921b2963
JH
10892 else
10893 echo "sigsetjmp not found." >&4
10894 val="$undef"
a0d0e21e 10895 fi
921b2963
JH
10896 ;;
10897*) val="$d_sigsetjmp"
10898 case "$d_sigsetjmp" in
10899 $define) echo "POSIX sigsetjmp found." >&4;;
10900 $undef) echo "sigsetjmp not found." >&4;;
10901 esac
10902 ;;
10903esac
10904set d_sigsetjmp
10905eval $setvar
10906$rm -f try.c try
2304df62 10907
d9b3e12d
JH
10908: see if sys/stat.h is available
10909set sys/stat.h i_sysstat
10910eval $inhdr
10911
b7b35fc2 10912
2304df62
AD
10913: see if stat knows about block sizes
10914echo " "
b7b35fc2 10915echo "Checking to see if your struct stat has st_blocks field..." >&4
5ff3f7a4
GS
10916set d_statblks stat st_blocks $i_sysstat sys/stat.h
10917eval $hasfield
2304df62 10918
b7b35fc2 10919
ad27e871
JH
10920: see if this is a sys/vfs.h system
10921set sys/vfs.h i_sysvfs
10922eval $inhdr
10923
b7b35fc2 10924
ad27e871
JH
10925: see if this is a sys/statfs.h system
10926set sys/statfs.h i_sysstatfs
10927eval $inhdr
10928
10929
10930echo " "
8175356b 10931echo "Checking to see if your system supports struct statfs..." >&4
ad27e871
JH
10932set 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
10933eval $hasstruct
10934case "$d_statfs_s" in
a22e52b9
JH
10935"$define") echo "Yes, it does." ;;
10936*) echo "No, it doesn't." ;;
ad27e871
JH
10937esac
10938
10939
10940
10941: see if struct statfs knows about f_flags
10942case "$d_statfs_s" in
10943define)
10944 echo " "
8175356b 10945 echo "Checking to see if your struct statfs has f_flags field..." >&4
ad27e871
JH
10946 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
10947 eval $hasfield
10948 ;;
10949*) val="$undef"
10950 set d_statfs_f_flags
10951 eval $setvar
10952 ;;
10953esac
10954case "$d_statfs_f_flags" in
a22e52b9
JH
10955"$define") echo "Yes, it does." ;;
10956*) echo "No, it doesn't." ;;
ad27e871
JH
10957esac
10958
16d20bd9
AD
10959: see if _ptr and _cnt from stdio act std
10960echo " "
dca663ed 10961if $contains '_IO_fpos_t' `./findhdr stdio.h` `./findhdr libio.h` >/dev/null 2>&1 ; then
16d20bd9
AD
10962 echo "(Looks like you have stdio.h from Linux.)"
10963 case "$stdio_ptr" in
c2960299
AD
10964 '') stdio_ptr='((fp)->_IO_read_ptr)'
10965 ptr_lval=$define
10966 ;;
8e07c86e 10967 *) ptr_lval=$d_stdio_ptr_lval;;
16d20bd9
AD
10968 esac
10969 case "$stdio_cnt" in
c2960299
AD
10970 '') stdio_cnt='((fp)->_IO_read_end - (fp)->_IO_read_ptr)'
10971 cnt_lval=$undef
10972 ;;
8e07c86e 10973 *) cnt_lval=$d_stdio_cnt_lval;;
16d20bd9
AD
10974 esac
10975 case "$stdio_base" in
10976 '') stdio_base='((fp)->_IO_read_base)';;
10977 esac
10978 case "$stdio_bufsiz" in
c2960299 10979 '') stdio_bufsiz='((fp)->_IO_read_end - (fp)->_IO_read_base)';;
16d20bd9
AD
10980 esac
10981else
10982 case "$stdio_ptr" in
c2960299
AD
10983 '') stdio_ptr='((fp)->_ptr)'
10984 ptr_lval=$define
10985 ;;
8e07c86e 10986 *) ptr_lval=$d_stdio_ptr_lval;;
16d20bd9
AD
10987 esac
10988 case "$stdio_cnt" in
c2960299
AD
10989 '') stdio_cnt='((fp)->_cnt)'
10990 cnt_lval=$define
10991 ;;
8e07c86e 10992 *) cnt_lval=$d_stdio_cnt_lval;;
16d20bd9
AD
10993 esac
10994 case "$stdio_base" in
10995 '') stdio_base='((fp)->_base)';;
10996 esac
10997 case "$stdio_bufsiz" in
10998 '') stdio_bufsiz='((fp)->_cnt + (fp)->_ptr - (fp)->_base)';;
10999 esac
11000fi
11001: test whether _ptr and _cnt really work
11002echo "Checking how std your stdio is..." >&4
11003$cat >try.c <<EOP
11004#include <stdio.h>
11005#define FILE_ptr(fp) $stdio_ptr
11006#define FILE_cnt(fp) $stdio_cnt
d674cd6d 11007int main() {
16d20bd9
AD
11008 FILE *fp = fopen("try.c", "r");
11009 char c = getc(fp);
11010 if (
11011 18 <= FILE_cnt(fp) &&
11012 strncmp(FILE_ptr(fp), "include <stdio.h>\n", 18) == 0
11013 )
11014 exit(0);
11015 exit(1);
11016}
11017EOP
11018val="$undef"
dfe9444c
AD
11019set try
11020if eval $compile; then
16d20bd9
AD
11021 if ./try; then
11022 echo "Your stdio acts pretty std."
11023 val="$define"
11024 else
11025 echo "Your stdio isn't very std."
11026 fi
11027else
11028 echo "Your stdio doesn't appear very std."
11029fi
11030$rm -f try.c try
11031set d_stdstdio
11032eval $setvar
11033
8e07c86e 11034: Can _ptr be used as an lvalue?
e50aee73
AD
11035case "$d_stdstdio$ptr_lval" in
11036$define$define) val=$define ;;
c2960299
AD
11037*) val=$undef ;;
11038esac
11039set d_stdio_ptr_lval
11040eval $setvar
11041
8e07c86e 11042: Can _cnt be used as an lvalue?
e50aee73
AD
11043case "$d_stdstdio$cnt_lval" in
11044$define$define) val=$define ;;
c2960299
AD
11045*) val=$undef ;;
11046esac
11047set d_stdio_cnt_lval
11048eval $setvar
11049
16d20bd9
AD
11050: see if _base is also standard
11051val="$undef"
11052case "$d_stdstdio" in
11053$define)
11054 $cat >try.c <<EOP
11055#include <stdio.h>
11056#define FILE_base(fp) $stdio_base
11057#define FILE_bufsiz(fp) $stdio_bufsiz
d674cd6d 11058int main() {
16d20bd9
AD
11059 FILE *fp = fopen("try.c", "r");
11060 char c = getc(fp);
11061 if (
11062 19 <= FILE_bufsiz(fp) &&
11063 strncmp(FILE_base(fp), "#include <stdio.h>\n", 19) == 0
11064 )
11065 exit(0);
11066 exit(1);
11067}
11068EOP
dfe9444c
AD
11069 set try
11070 if eval $compile; then
16d20bd9 11071 if ./try; then
8ff267be 11072 echo "And its _base field acts std."
16d20bd9
AD
11073 val="$define"
11074 else
11075 echo "But its _base field isn't std."
11076 fi
11077 else
11078 echo "However, it seems to be lacking the _base field."
11079 fi
11080 $rm -f try.c try
11081 ;;
11082esac
11083set d_stdiobase
11084eval $setvar
11085
ed39a0f2
JH
11086$cat >&4 <<EOM
11087Checking how to access stdio streams by file descriptor number...
11088EOM
11089case "$stdio_stream_array" in
11090'') $cat >try.c <<EOCP
11091#include <stdio.h>
11092int main() {
11093 if (&STDIO_STREAM_ARRAY[fileno(stdin)] == stdin)
11094 printf("yes\n");
11095}
11096EOCP
11097 for s in _iob __iob __sF
11098 do
11099 set try -DSTDIO_STREAM_ARRAY=$s
11100 if eval $compile; then
11101 case "`./try$exe_ext`" in
11102 yes) stdio_stream_array=$s; break ;;
11103 esac
11104 fi
11105 done
11106 $rm -f try.* try$exe_ext
11107esac
11108case "$stdio_stream_array" in
11109'') $cat >&4 <<EOM
11110I can't figure out how to access stdio streams by file descriptor number.
11111EOM
11112 d_stdio_stream_array="$undef"
11113 ;;
11114*) $cat >&4 <<EOM
11115You can access stdio streams by file descriptor number by the $stdio_stream_array array.
11116EOM
11117 d_stdio_stream_array="$define"
11118 ;;
11119esac
11120
a0d0e21e
LW
11121: see if strcoll exists
11122set strcoll d_strcoll
11123eval $inlibc
2304df62
AD
11124
11125: check for structure copying
11126echo " "
11127echo "Checking to see if your C compiler can copy structs..." >&4
11128$cat >try.c <<'EOCP'
5a411a32 11129int main()
2304df62
AD
11130{
11131 struct blurfl {
11132 int dyick;
11133 } foo, bar;
11134
11135 foo = bar;
11136}
11137EOCP
11138if $cc -c try.c >/dev/null 2>&1 ; then
11139 val="$define"
11140 echo "Yup, it can."
11141else
11142 val="$undef"
11143 echo "Nope, it can't."
11144fi
11145set d_strctcpy
11146eval $setvar
11147$rm -f try.*
11148
11149: see if strerror and/or sys_errlist[] exist
11150echo " "
28e8609d
JH
11151if test "X$d_strerror" = X -o "X$d_syserrlst" = X; then
11152 if set strerror val -f d_strerror; eval $csym; $val; then
5ff3f7a4
GS
11153 echo 'strerror() found.' >&4
11154 d_strerror="$define"
11155 d_strerrm='strerror(e)'
11156 if set sys_errlist val -a d_syserrlst; eval $csym; $val; then
11157 echo "(You also have sys_errlist[], so we could roll our own strerror.)"
11158 d_syserrlst="$define"
11159 else
11160 echo "(Since you don't have sys_errlist[], sterror() is welcome.)"
11161 d_syserrlst="$undef"
11162 fi
28e8609d 11163 elif xxx=`./findhdr string.h`; test "$xxx" || xxx=`./findhdr strings.h`; \
5ff3f7a4
GS
11164 $contains '#[ ]*define.*strerror' "$xxx" >/dev/null 2>&1; then
11165 echo 'strerror() found in string header.' >&4
11166 d_strerror="$define"
11167 d_strerrm='strerror(e)'
11168 if set sys_errlist val -a d_syserrlst; eval $csym; $val; then
11169 echo "(Most probably, strerror() uses sys_errlist[] for descriptions.)"
11170 d_syserrlst="$define"
11171 else
11172 echo "(You don't appear to have any sys_errlist[], how can this be?)"
11173 d_syserrlst="$undef"
11174 fi
28e8609d 11175 elif set sys_errlist val -a d_syserrlst; eval $csym; $val; then
5ff3f7a4
GS
11176 echo "strerror() not found, but you have sys_errlist[] so we'll use that." >&4
11177 d_strerror="$undef"
11178 d_syserrlst="$define"
11179 d_strerrm='((e)<0||(e)>=sys_nerr?"unknown":sys_errlist[e])'
28e8609d 11180 else
5ff3f7a4
GS
11181 echo 'strerror() and sys_errlist[] NOT found.' >&4
11182 d_strerror="$undef"
11183 d_syserrlst="$undef"
11184 d_strerrm='"unknown"'
28e8609d 11185 fi
2304df62
AD
11186fi
11187
a89d8a78
DH
11188: see if strtod exists
11189set strtod d_strtod
11190eval $inlibc
11191
11192: see if strtol exists
11193set strtol d_strtol
11194eval $inlibc
11195
ff935051
JH
11196: see if strtold exists
11197set strtold d_strtold
11198eval $inlibc
11199
76d49b1c
JH
11200: see if strtoll exists
11201set strtoll d_strtoll
11202eval $inlibc
11203
a89d8a78
DH
11204: see if strtoul exists
11205set strtoul d_strtoul
11206eval $inlibc
11207
cf2093f6
JH
11208: see if strtoull exists
11209set strtoull d_strtoull
11210eval $inlibc
11211
ff935051
JH
11212: see if strtouq exists
11213set strtouq d_strtouq
11214eval $inlibc
11215
a0d0e21e
LW
11216: see if strxfrm exists
11217set strxfrm d_strxfrm
11218eval $inlibc
11219
8175356b
JH
11220: see if symlink exists
11221set symlink d_symlink
11222eval $inlibc
11223
11224: see if syscall exists
11225set syscall d_syscall
11226eval $inlibc
11227
11228: see if sysconf exists
11229set sysconf d_sysconf
11230eval $inlibc
11231
11232: see if system exists
11233set system d_system
11234eval $inlibc
11235
11236: see if tcgetpgrp exists
11237set tcgetpgrp d_tcgetpgrp
11238eval $inlibc
11239
11240: see if tcsetpgrp exists
11241set tcsetpgrp d_tcsetpgrp
11242eval $inlibc
11243
11244: see if prototype for telldir is available
11245echo " "
11246set d_telldirproto telldir $i_systypes sys/types.h $i_dirent dirent.h
11247eval $hasproto
dc45a647 11248
2c7991dc 11249: see if this is a sys/times.h system
11250set sys/times.h i_systimes
11251eval $inhdr
4633a7c4 11252
2c7991dc 11253: see if times exists
4633a7c4 11254echo " "
2c7991dc 11255if set times val -f d_times; eval $csym; $val; then
11256 echo 'times() found.' >&4
11257 d_times="$define"
11258 inc=''
11259 case "$i_systimes" in
11260 "$define") inc='sys/times.h';;
11261 esac
dc45a647 11262 rp="What is the type returned by times() on this system?"
2c7991dc 11263 set clock_t clocktype long stdio.h sys/types.h $inc
dc45a647 11264 eval $typedef_ask
2c7991dc 11265else
11266 echo 'times() NOT found, hope that will do.' >&4
11267 d_times="$undef"
11268 clocktype='int'
11269fi
2304df62 11270
2c7991dc 11271: see if truncate exists
11272set truncate d_truncate
11273eval $inlibc
2304df62 11274
2c7991dc 11275: see if tzname[] exists
11276echo " "
11277if set tzname val -a d_tzname; eval $csym; $val; then
11278 val="$define"
11279 echo 'tzname[] found.' >&4
11280else
11281 val="$undef"
11282 echo 'tzname[] NOT found.' >&4
11283fi
11284set d_tzname
11285eval $setvar
11286
11287: see if umask exists
11288set umask d_umask
11289eval $inlibc
85e6fe83 11290
0545a864
JH
11291: see if ustat exists
11292set ustat d_ustat
11293eval $inlibc
11294
4633a7c4
LW
11295: backward compatibility for d_hvfork
11296if test X$d_hvfork != X; then
11297 d_vfork="$d_hvfork"
11298 d_hvfork=''
11299fi
11300: see if there is a vfork
11301val=''
11302set vfork val
11303eval $inlibc
ecfc5424 11304
4633a7c4
LW
11305: Ok, but do we want to use it. vfork is reportedly unreliable in
11306: perl on Solaris 2.x, and probably elsewhere.
11307case "$val" in
11308$define)
16d20bd9 11309 echo " "
4633a7c4
LW
11310 case "$usevfork" in
11311 false) dflt='n';;
11312 *) dflt='y';;
11313 esac
f10488a3
JH
11314 cat <<'EOM'
11315
11316Perl can only use a vfork() that doesn't suffer from strict
11317restrictions on calling functions or modifying global data in
11318the child. For example, glibc-2.1 contains such a vfork()
11319that is unsuitable. If your system provides a proper fork()
11320call, chances are that you do NOT want perl to use vfork().
11321
11322EOM
11323 rp="Do you still want to use vfork()?"
4633a7c4
LW
11324 . ./myread
11325 case "$ans" in
11326 y|Y) ;;
11327 *)
11328 echo "Ok, we won't use vfork()."
11329 val="$undef"
11330 ;;
11331 esac
ecfc5424
AD
11332 ;;
11333esac
4633a7c4
LW
11334set d_vfork
11335eval $setvar
11336case "$d_vfork" in
11337$define) usevfork='true';;
11338*) usevfork='false';;
11339esac
ecfc5424 11340
4633a7c4
LW
11341: see if this is an sysdir system
11342set sys/dir.h i_sysdir
11343eval $inhdr
11344
11345: see if this is an sysndir system
11346set sys/ndir.h i_sysndir
11347eval $inhdr
11348
11349: see if closedir exists
11350set closedir d_closedir
11351eval $inlibc
11352
11353case "$d_closedir" in
11354"$define")
16d20bd9 11355 echo " "
4633a7c4
LW
11356 echo "Checking whether closedir() returns a status..." >&4
11357 cat > closedir.c <<EOM
11358#$i_dirent I_DIRENT /**/
11359#$i_sysdir I_SYS_DIR /**/
11360#$i_sysndir I_SYS_NDIR /**/
bfb7748a 11361#$i_systypes I_SYS_TYPES /**/
4633a7c4 11362
bfb7748a
AD
11363#if defined(I_SYS_TYPES)
11364#include <sys/types.h>
11365#endif
4633a7c4
LW
11366#if defined(I_DIRENT)
11367#include <dirent.h>
11368#if defined(NeXT) && defined(I_SYS_DIR) /* NeXT needs dirent + sys/dir.h */
11369#include <sys/dir.h>
4aa0a1f7 11370#endif
4633a7c4
LW
11371#else
11372#ifdef I_SYS_NDIR
11373#include <sys/ndir.h>
11374#else
11375#ifdef I_SYS_DIR
11376#ifdef hp9000s500
11377#include <ndir.h> /* may be wrong in the future */
11378#else
11379#include <sys/dir.h>
11380#endif
11381#endif
11382#endif
11383#endif
11384int main() { return closedir(opendir(".")); }
11385EOM
dfe9444c 11386 set closedir
dc45a647 11387 if eval $compile_ok; then
4633a7c4
LW
11388 if ./closedir > /dev/null 2>&1 ; then
11389 echo "Yes, it does."
11390 val="$undef"
ecfc5424 11391 else
4633a7c4
LW
11392 echo "No, it doesn't."
11393 val="$define"
ecfc5424
AD
11394 fi
11395 else
4633a7c4
LW
11396 echo "(I can't seem to compile the test program--assuming it doesn't)"
11397 val="$define"
ecfc5424 11398 fi
ecfc5424 11399 ;;
4633a7c4
LW
11400*)
11401 val="$undef";
ecfc5424
AD
11402 ;;
11403esac
4633a7c4
LW
11404set d_void_closedir
11405eval $setvar
11406$rm -f closedir*
11407: check for volatile keyword
ecfc5424 11408echo " "
4633a7c4
LW
11409echo 'Checking to see if your C compiler knows about "volatile"...' >&4
11410$cat >try.c <<'EOCP'
5a411a32 11411int main()
4633a7c4
LW
11412{
11413 typedef struct _goo_struct goo_struct;
11414 goo_struct * volatile goo = ((goo_struct *)0);
11415 struct _goo_struct {
11416 long long_int;
11417 int reg_int;
11418 char char_var;
11419 };
11420 typedef unsigned short foo_t;
11421 char *volatile foo;
11422 volatile int bar;
11423 volatile foo_t blech;
11424 foo = foo;
a0d0e21e
LW
11425}
11426EOCP
4633a7c4
LW
11427if $cc -c $ccflags try.c >/dev/null 2>&1 ; then
11428 val="$define"
11429 echo "Yup, it does."
11430else
11431 val="$undef"
11432 echo "Nope, it doesn't."
11433fi
11434set d_volatile
11435eval $setvar
11436$rm -f try.*
a0d0e21e 11437
4633a7c4
LW
11438: see if there is a wait4
11439set wait4 d_wait4
8e07c86e
AD
11440eval $inlibc
11441
4633a7c4
LW
11442: see if waitpid exists
11443set waitpid d_waitpid
11444eval $inlibc
11445
11446: see if wcstombs exists
11447set wcstombs d_wcstombs
11448eval $inlibc
11449
11450: see if wctomb exists
11451set wctomb d_wctomb
11452eval $inlibc
11453
11454: preserve RCS keywords in files with variable substitution, grrr
11455Date='$Date'
11456Id='$Id'
11457Log='$Log'
11458RCSfile='$RCSfile'
11459Revision='$Revision'
11460
ca8cfa54
JH
11461case "$crosscompile" in
11462''|[nN]*) crosscompile="$undef" ;;
11463esac
11464
11465case "$osname" in
8f1f23e8 11466next|rhapsody) multiarch="$define" ;;
ca8cfa54
JH
11467esac
11468case "$multiarch" in
11469''|[nN]*) multiarch="$undef" ;;
11470esac
11471
4633a7c4
LW
11472: check for alignment requirements
11473echo " "
68c15b6f
HM
11474case "$crosscompile$multiarch" in
11475*$define*)
ca8cfa54
JH
11476 $cat <<EOM
11477You seem to be either cross-compiling or doing a multiarchitecture build,
11478skipping the memory alignment check.
68c15b6f
HM
11479
11480EOM
11481 case "$alignbytes" in
11482 '') alignbytes=8 ;;
11483 esac
11484 ;;
11485*)
11486 case "$alignbytes" in
11487 '') echo "Checking alignment constraints..." >&4
11488 $cat >try.c <<'EOCP'
14e4fe40 11489#include <stdio.h>
4633a7c4
LW
11490struct foobar {
11491 char foo;
11492 double bar;
732c9516 11493} try_algn;
d674cd6d 11494int main()
4633a7c4 11495{
213c275f
JH
11496 printf("%d\n", (int)((char *)&try_algn.bar - (char *)&try_algn.foo));
11497 return(0);
4633a7c4
LW
11498}
11499EOCP
68c15b6f
HM
11500 set try
11501 if eval $compile_ok; then
11502 dflt=`./try`
11503 else
11504 dflt='8'
11505 echo "(I can't seem to compile the test program...)"
11506 fi
11507 ;;
11508 *) dflt="$alignbytes"
11509 ;;
11510 esac
11511 rp="Doubles must be aligned on a how-many-byte boundary?"
11512 . ./myread
11513 alignbytes="$ans"
11514 $rm -f try.c try
8e07c86e 11515 ;;
ecfc5424 11516esac
68c15b6f 11517
85e6fe83 11518
4633a7c4 11519: check for ordering of bytes in a long
68c15b6f
HM
11520echo " "
11521case "$crosscompile$multiarch" in
11522*$define*)
11523 $cat <<EOM
ca8cfa54
JH
11524You seem to be either cross-compiling or doing a multiarchitecture build,
11525skipping the byteorder check.
68c15b6f
HM
11526
11527EOM
d9b3e12d 11528 byteorder='0xffff'
68c15b6f
HM
11529 ;;
11530*)
11531 case "$byteorder" in
11532 '')
11533 $cat <<'EOM'
4633a7c4
LW
11534In the following, larger digits indicate more significance. A big-endian
11535machine like a Pyramid or a Motorola 680?0 chip will come out to 4321. A
11536little-endian machine like a Vax or an Intel 80?86 chip would be 1234. Other
d9b3e12d
JH
11537machines may have weird orders like 3412. A Cray will report 87654321,
11538an Alpha will report 12345678. If the test program works the default is
11539probably right.
4633a7c4
LW
11540I'm now running the test program...
11541EOM
68c15b6f 11542 $cat >try.c <<'EOCP'
4633a7c4 11543#include <stdio.h>
d674cd6d 11544int main()
4633a7c4
LW
11545{
11546 int i;
11547 union {
11548 unsigned long l;
11549 char c[sizeof(long)];
11550 } u;
11551
11552 if (sizeof(long) > 4)
11553 u.l = (0x08070605L << 32) | 0x04030201L;
11554 else
11555 u.l = 0x04030201L;
11556 for (i = 0; i < sizeof(long); i++)
11557 printf("%c", u.c[i]+'0');
11558 printf("\n");
11559 exit(0);
11560}
11561EOCP
68c15b6f
HM
11562 xxx_prompt=y
11563 set try
11564 if eval $compile && ./try > /dev/null; then
11565 dflt=`./try`
11566 case "$dflt" in
11567 [1-4][1-4][1-4][1-4]|12345678|87654321)
11568 echo "(The test program ran ok.)"
11569 echo "byteorder=$dflt"
11570 xxx_prompt=n
4633a7c4 11571 ;;
68c15b6f
HM
11572 ????|????????) echo "(The test program ran ok.)" ;;
11573 *) echo "(The test program didn't run right for some reason.)" ;;
11574 esac
11575 else
11576 dflt='4321'
11577 cat <<'EOM'
4633a7c4
LW
11578(I can't seem to compile the test program. Guessing big-endian...)
11579EOM
68c15b6f
HM
11580 fi
11581 case "$xxx_prompt" in
11582 y)
11583 rp="What is the order of bytes in a long?"
11584 . ./myread
11585 byteorder="$ans"
11586 ;;
11587 *) byteorder=$dflt
11588 ;;
11589 esac
ecfc5424
AD
11590 ;;
11591 esac
68c15b6f 11592 $rm -f try.c try
ecfc5424
AD
11593 ;;
11594esac
68c15b6f 11595
85e6fe83 11596
4633a7c4 11597: how do we catenate cpp tokens here?
2304df62 11598echo " "
4633a7c4
LW
11599echo "Checking to see how your cpp does stuff like catenate tokens..." >&4
11600$cat >cpp_stuff.c <<'EOCP'
11601#define RCAT(a,b)a/**/b
11602#define ACAT(a,b)a ## b
11603RCAT(Rei,ser)
11604ACAT(Cir,cus)
11605EOCP
11606$cppstdin $cppflags $cppminus <cpp_stuff.c >cpp_stuff.out 2>&1
11607if $contains 'Circus' cpp_stuff.out >/dev/null 2>&1; then
dfe9444c 11608 echo "Oh! Smells like ANSI's been here." >&4
4633a7c4
LW
11609 echo "We can catify or stringify, separately or together!"
11610 cpp_stuff=42
11611elif $contains 'Reiser' cpp_stuff.out >/dev/null 2>&1; then
dfe9444c 11612 echo "Ah, yes! The good old days!" >&4
4633a7c4
LW
11613 echo "However, in the good old days we don't know how to stringify and"
11614 echo "catify at the same time."
11615 cpp_stuff=1
11616else
11617 $cat >&4 <<EOM
11618Hmm, I don't seem to be able to catenate tokens with your cpp. You're going
11619to have to edit the values of CAT[2-5] in config.h...
a0d0e21e 11620EOM
4633a7c4
LW
11621 cpp_stuff="/* Help! How do we handle cpp_stuff? */*/"
11622fi
11623$rm -f cpp_stuff.*
a0d0e21e 11624
4633a7c4
LW
11625: see if this is a db.h system
11626set db.h i_db
11627eval $inhdr
11628
11629case "$i_db" in
68dc0745 11630$define)
1f70e1ea 11631 : Check db version.
68dc0745 11632 echo " "
11633 echo "Checking Berkeley DB version ..." >&4
11634 $cat >try.c <<EOCP
11635#$d_const HASCONST
11636#ifndef HASCONST
11637#define const
11638#endif
11639#include <sys/types.h>
11640#include <stdio.h>
11641#include <db.h>
d674cd6d 11642int main()
68dc0745 11643{
1f70e1ea
PM
11644#ifdef DB_VERSION_MAJOR /* DB version >= 2 */
11645 int Major, Minor, Patch ;
ee02776e 11646 unsigned long Version ;
1f70e1ea
PM
11647 (void)db_version(&Major, &Minor, &Patch) ;
11648 printf("You have Berkeley DB Version 2 or greater\n");
11649
11650 printf("db.h is from Berkeley DB Version %d.%d.%d\n",
11651 DB_VERSION_MAJOR, DB_VERSION_MINOR, DB_VERSION_PATCH);
11652 printf("libdb is from Berkeley DB Version %d.%d.%d\n",
11653 Major, Minor, Patch) ;
11654
11655 /* check that db.h & libdb are compatible */
11656 if (DB_VERSION_MAJOR != Major || DB_VERSION_MINOR != Minor || DB_VERSION_PATCH != Patch) {
11657 printf("db.h and libdb are incompatible\n") ;
11658 exit(3);
11659 }
11660
11661 printf("db.h and libdb are compatible\n") ;
ee02776e
PM
11662
11663 Version = DB_VERSION_MAJOR * 1000000 + DB_VERSION_MINOR * 1000
693762b4 11664 + DB_VERSION_PATCH ;
ee02776e
PM
11665
11666 /* needs to be >= 2.3.4 */
11667 if (Version < 2003004) {
693762b4 11668 /* if (DB_VERSION_MAJOR == 2 && DB_VERSION_MINOR == 0 && DB_VERSION_PATCH < 5) { */
ee02776e 11669 printf("but Perl needs Berkeley DB 2.3.4 or greater\n") ;
1f70e1ea
PM
11670 exit(2);
11671 }
11672
11673 exit(0);
68dc0745 11674#else
6a1b87e5 11675#if defined(_DB_H_) && defined(BTREEMAGIC) && defined(HASHMAGIC)
1f70e1ea 11676 printf("You have Berkeley DB Version 1\n");
6a1b87e5
JH
11677 exit(0); /* DB version < 2: the coast is clear. */
11678#else
11679 exit(1); /* <db.h> not Berkeley DB? */
11680#endif
68dc0745 11681#endif
11682}
11683EOCP
dfe9444c 11684 set try
cf21f3c6 11685 if eval $compile_ok && ./try; then
1f70e1ea 11686 echo 'Looks OK.' >&4
68dc0745 11687 else
c90c0ff4 11688 echo "I can't use Berkeley DB with your <db.h>. I'll disable Berkeley DB." >&4
68dc0745 11689 i_db=$undef
11690 case " $libs " in
11691 *"-ldb "*)
11692 : Remove db from list of libraries to use
11693 echo "Removing unusable -ldb from library list" >&4
11694 set `echo X $libs | $sed -e 's/-ldb / /' -e 's/-ldb$//'`
11695 shift
11696 libs="$*"
11697 echo "libs = $libs" >&4
11698 ;;
11699 esac
11700 fi
11701 $rm -f try.*
11702 ;;
11703esac
11704
11705case "$i_db" in
4633a7c4 11706define)
dc45a647
MB
11707 : Check the return type needed for hash
11708 echo " "
11709 echo "Checking return type needed for hash for Berkeley DB ..." >&4
11710 $cat >try.c <<EOCP
11711#$d_const HASCONST
11712#ifndef HASCONST
11713#define const
11714#endif
11715#include <sys/types.h>
11716#include <db.h>
11717
11718#ifndef DB_VERSION_MAJOR
11719u_int32_t hash_cb (ptr, size)
11720const void *ptr;
11721size_t size;
11722{
11723}
11724HASHINFO info;
d674cd6d 11725int main()
dc45a647
MB
11726{
11727 info.hash = hash_cb;
11728}
11729#endif
11730EOCP
11731 if $cc $ccflags -c try.c >try.out 2>&1 ; then
11732 if $contains warning try.out >>/dev/null 2>&1 ; then
11733 db_hashtype='int'
11734 else
11735 db_hashtype='u_int32_t'
11736 fi
11737 else
11738 : XXX Maybe we should just give up here.
11739 db_hashtype=u_int32_t
11740 $cat try.out >&4
11741 echo "Help: I can't seem to compile the db test program." >&4
11742 echo "Something's wrong, but I'll assume you use $db_hashtype." >&4
11743 fi
11744 $rm -f try.*
11745 echo "Your version of Berkeley DB uses $db_hashtype for hash."
11746 ;;
11747*) db_hashtype=u_int32_t
11748 ;;
11749esac
11750case "$i_db" in
11751define)
4633a7c4
LW
11752 : Check the return type needed for prefix
11753 echo " "
11754 echo "Checking return type needed for prefix for Berkeley DB ..." >&4
11755 cat >try.c <<EOCP
11756#$d_const HASCONST
11757#ifndef HASCONST
11758#define const
11759#endif
11760#include <sys/types.h>
11761#include <db.h>
1f70e1ea
PM
11762
11763#ifndef DB_VERSION_MAJOR
4633a7c4
LW
11764size_t prefix_cb (key1, key2)
11765const DBT *key1;
11766const DBT *key2;
11767{
11768}
11769BTREEINFO info;
d674cd6d 11770int main()
4633a7c4
LW
11771{
11772 info.prefix = prefix_cb;
11773}
1f70e1ea 11774#endif
4633a7c4
LW
11775EOCP
11776 if $cc $ccflags -c try.c >try.out 2>&1 ; then
11777 if $contains warning try.out >>/dev/null 2>&1 ; then
11778 db_prefixtype='int'
11779 else
11780 db_prefixtype='size_t'
11781 fi
11782 else
68dc0745 11783 db_prefixtype='size_t'
11784 : XXX Maybe we should just give up here.
dc45a647 11785 $cat try.out >&4
68dc0745 11786 echo "Help: I can't seem to compile the db test program." >&4
11787 echo "Something's wrong, but I'll assume you use $db_prefixtype." >&4
4633a7c4
LW
11788 fi
11789 $rm -f try.*
11790 echo "Your version of Berkeley DB uses $db_prefixtype for prefix."
a0d0e21e 11791 ;;
68dc0745 11792*) db_prefixtype='size_t'
4633a7c4
LW
11793 ;;
11794esac
a0d0e21e 11795
4633a7c4
LW
11796: check for void type
11797echo " "
11798echo "Checking to see how well your C compiler groks the void type..." >&4
4633a7c4
LW
11799case "$voidflags" in
11800'')
11801 $cat >try.c <<'EOCP'
11802#if TRY & 1
760ac839 11803void sub() {
4633a7c4 11804#else
760ac839 11805sub() {
4633a7c4
LW
11806#endif
11807 extern void moo(); /* function returning void */
11808 void (*goo)(); /* ptr to func returning void */
11809#if TRY & 8
11810 void *hue; /* generic ptr */
11811#endif
11812#if TRY & 2
11813 void (*foo[10])();
11814#endif
a0d0e21e 11815
4633a7c4
LW
11816#if TRY & 4
11817 if(goo == moo) {
11818 exit(0);
11819 }
11820#endif
11821 exit(0);
11822}
d674cd6d 11823int main() { sub(); }
4633a7c4 11824EOCP
760ac839 11825 if $cc $ccflags -c -DTRY=$defvoidused try.c >.out 2>&1 ; then
4633a7c4 11826 voidflags=$defvoidused
bfb7748a 11827 echo "Good. It appears to support void to the level $package wants.">&4
4633a7c4
LW
11828 if $contains warning .out >/dev/null 2>&1; then
11829 echo "However, you might get some warnings that look like this:"
11830 $cat .out
11831 fi
11832 else
11833echo "Hmm, your compiler has some difficulty with void. Checking further..." >&4
760ac839 11834 if $cc $ccflags -c -DTRY=1 try.c >/dev/null 2>&1; then
4633a7c4 11835 echo "It supports 1..."
760ac839 11836 if $cc $ccflags -c -DTRY=3 try.c >/dev/null 2>&1; then
4633a7c4 11837 echo "It also supports 2..."
760ac839 11838 if $cc $ccflags -c -DTRY=7 try.c >/dev/null 2>&1; then
4633a7c4
LW
11839 voidflags=7
11840 echo "And it supports 4 but not 8 definitely."
11841 else
11842 echo "It doesn't support 4..."
760ac839 11843 if $cc $ccflags -c -DTRY=11 try.c >/dev/null 2>&1; then
4633a7c4
LW
11844 voidflags=11
11845 echo "But it supports 8."
11846 else
11847 voidflags=3
11848 echo "Neither does it support 8."
11849 fi
11850 fi
11851 else
11852 echo "It does not support 2..."
760ac839 11853 if $cc $ccflags -c -DTRY=13 try.c >/dev/null 2>&1; then
4633a7c4
LW
11854 voidflags=13
11855 echo "But it supports 4 and 8."
11856 else
760ac839 11857 if $cc $ccflags -c -DTRY=5 try.c >/dev/null 2>&1; then
4633a7c4
LW
11858 voidflags=5
11859 echo "And it supports 4 but has not heard about 8."
11860 else
11861 echo "However it supports 8 but not 4."
11862 fi
11863 fi
11864 fi
11865 else
11866 echo "There is no support at all for void."
11867 voidflags=0
11868 fi
11869 fi
11870esac
4633a7c4 11871case "$voidflags" in
2c7991dc 11872"$defvoidused") ;;
bfb7748a
AD
11873*) $cat >&4 <<'EOM'
11874 Support flag bits are:
11875 1: basic void declarations.
11876 2: arrays of pointers to functions returning void.
11877 4: operations between pointers to and addresses of void functions.
11878 8: generic void pointers.
11879EOM
2c7991dc 11880 dflt="$voidflags";
4633a7c4 11881 rp="Your void support flags add up to what?"
a0d0e21e 11882 . ./myread
4633a7c4 11883 voidflags="$ans"
a0d0e21e
LW
11884 ;;
11885esac
4633a7c4 11886$rm -f try.* .out
a0d0e21e 11887
85ab1d1d
JH
11888
11889: How can we generate normalized random numbers ?
693762b4 11890echo " "
de4597cb 11891echo "Looking for a random number function..." >&4
85ab1d1d 11892case "$randfunc" in
693762b4 11893'')
85ab1d1d
JH
11894 if set drand48 val -f; eval $csym; $val; then
11895 dflt="drand48"
11896 echo "Good, found drand48()." >&4
11897 elif set random val -f; eval $csym; $val; then
11898 dflt="random"
11899 echo "OK, found random()." >&4
11900 else
11901 dflt="rand"
11902 echo "Yick, looks like I have to use rand()." >&4
11903 fi
11904 echo " "
11905 ;;
11906*)
11907 dflt="$randfunc"
11908 ;;
11909esac
11910cont=true
11911
11912case "$ccflags" in
11913*-Dmy_rand=*|*-Dmy_srand=*)
11914 echo "Removing obsolete -Dmy_rand, -Dmy_srand, and -Drandbits from ccflags." >&4
11915 ccflags="`echo $ccflags | sed -e 's/-Dmy_rand=random/ /'`"
11916 ccflags="`echo $ccflags | sed -e 's/-Dmy_srand=srandom/ /'`"
11917 ccflags="`echo $ccflags | sed -e 's/-Drandbits=[0-9][0-9]*/ /'`"
11918 ;;
11919esac
11920
11921while $test "$cont"; do
11922 rp="Use which function to generate random numbers?"
11923 . ./myread
11924 if $test "$ans" = "$dflt"; then
11925 : null
11926 else
11927 randbits=''
11928 fi
11929 randfunc="$ans"
11930 if set $ans val -f; eval $csym; $val; then
11931 cont=''
11932 else
ef4af2be
JH
11933 dflt=y
11934 rp="I cannot find function $ans. Use that name anyway?"
85ab1d1d
JH
11935 . ./myread
11936 dflt=rand
11937 case "$ans" in
11938 [yY]*) cont='';;
11939 esac
11940 fi
11941 case "$cont" in
11942 '')
11943 case "$randfunc" in
11944 drand48)
11945 drand01="drand48()"
11946 seedfunc="srand48"
11947 randbits=48
11948 randseedtype=long
11949 ;;
11950 rand|random)
11951 case "$randbits" in
11952 '')
11953echo "Checking to see how many bits your $randfunc() function produces..." >&4
11954 $cat >try.c <<EOCP
11955#$i_unistd I_UNISTD
11956#$i_stdlib I_STDLIB
693762b4 11957#include <stdio.h>
85ab1d1d
JH
11958#ifdef I_UNISTD
11959# include <unistd.h>
11960#endif
11961#ifdef I_STDLIB
11962# include <stdlib.h>
11963#endif
d674cd6d 11964int main()
693762b4 11965{
85ab1d1d
JH
11966 register int i;
11967 register unsigned long tmp;
11968 register unsigned long max = 0L;
11969
11970 for (i = 1000; i; i--) {
11971 tmp = (unsigned long) $randfunc();
11972 if (tmp > max) max = tmp;
11973 }
11974 for (i = 0; max; i++)
11975 max /= 2;
11976 printf("%d\n",i);
693762b4
AD
11977}
11978EOCP
85ab1d1d
JH
11979 set try
11980 if eval $compile_ok; then
11981 dflt=`try`
11982 else
11983 dflt='?'
11984 echo "(I can't seem to compile the test program...)"
11985 fi
11986 ;;
11987 *)
11988 dflt="$randbits"
11989 ;;
11990 esac
11991 rp="How many bits does your $randfunc() function produce?"
11992 . ./myread
11993 randbits="$ans"
11994 $rm -f try.c try
11995 drand01="($randfunc() / (double) ((unsigned long)1 << $randbits))"
11996 seedfunc="s$randfunc"
11997 randseedtype=unsigned
11998 ;;
11999 *)
12000 dflt="31"
12001 rp="How many bits does your $randfunc() function produce?"
12002 . ./myread
12003 randbits="$ans"
12004 seedfunc="s$randfunc"
12005 drand01="($randfunc() / (double) ((unsigned long)1 << $randbits))"
12006 if set $seedfunc val -f; eval $csym; $val; then
12007 echo "(Using $seedfunc() to seed random generator)"
12008 else
12009 echo "(Warning: no $seedfunc() to seed random generator)"
12010 seedfunc=rand
12011 fi
12012 randseedtype=unsigned
12013 ;;
12014 esac
12015 ;;
12016 esac
12017done
693762b4 12018
5ff3f7a4
GS
12019echo " "
12020echo "Determining whether or not we are on an EBCDIC system..." >&4
12021$cat >tebcdic.c <<'EOM'
12022int main()
12023{
12024 if ('M'==0xd4) return 0;
12025 return 1;
12026}
12027EOM
12028
12029val=$undef
12030set tebcdic
12031if eval $compile_ok; then
12032 if ./tebcdic; then
12033 echo "You have EBCDIC." >&4
12034 val="$define"
12035 else
57def98f 12036 echo "Nope, no EBCDIC, probably ASCII or some ISO Latin." >&4
5ff3f7a4
GS
12037 fi
12038else
5cc3184f 12039 echo "I'm unable to compile the test program." >&4
5ff3f7a4
GS
12040 echo "I'll assume ASCII or some ISO Latin." >&4
12041fi
12042$rm -f tebcdic.c tebcdic
12043set ebcdic
12044eval $setvar
12045
29209bc5 12046echo " "
767df6a1
JH
12047$cat >&4 <<EOM
12048Checking how to flush all pending stdio output...
66fe083f 12049EOM
d2201af2
AD
12050# I only know how to find the first 32 possibly open files on SunOS.
12051# See also hints/sunos_4_1.sh and util.c --AD
12052case "$osname" in
12053sunos) $echo '#define PERL_FFLUSH_ALL_FOPEN_MAX 32' > try.c ;;
12054esac
12055$cat >>try.c <<EOCP
66fe083f 12056#include <stdio.h>
d2201af2 12057#$i_unistd I_UNISTD
767df6a1 12058#ifdef I_UNISTD
a32a45b6 12059# include <unistd.h>
767df6a1
JH
12060#endif
12061#$d_sysconf HAS_SYSCONF
a71cd7cd
JH
12062#$d_stdio_stream_array HAS_STDIO_STREAM_ARRAY
12063#ifdef HAS_STDIO_STREAM_ARRAY
12064# define STDIO_STREAM_ARRAY $stdio_stream_array
12065#endif
66fe083f
JH
12066int main() {
12067 FILE* p = fopen("try.out", "w");
0f27ced1 12068#ifdef TRY_FPUTC
66fe083f 12069 fputc('x', p);
0f27ced1
JH
12070#else
12071# ifdef TRY_FPRINTF
12072 fprintf(p, "x");
12073# endif
12074#endif
767df6a1 12075#ifdef TRY_FFLUSH_NULL
66fe083f 12076 fflush(NULL);
767df6a1
JH
12077#endif
12078#ifdef TRY_FFLUSH_ALL
12079 {
12080 long open_max = -1;
d2201af2
AD
12081# ifdef PERL_FFLUSH_ALL_FOPEN_MAX
12082 open_max = PERL_FFLUSH_ALL_FOPEN_MAX;
767df6a1 12083# else
d2201af2
AD
12084# if defined(HAS_SYSCONF) && defined(_SC_OPEN_MAX)
12085 open_max = sysconf(_SC_OPEN_MAX);
767df6a1 12086# else
4b257aef 12087# ifdef FOPEN_MAX
d2201af2 12088 open_max = FOPEN_MAX;
767df6a1 12089# else
d2201af2
AD
12090# ifdef OPEN_MAX
12091 open_max = OPEN_MAX;
12092# else
12093# ifdef _NFILE
12094 open_max = _NFILE;
12095# endif
767df6a1
JH
12096# endif
12097# endif
12098# endif
4b257aef 12099# endif
ed39a0f2 12100# ifdef HAS_STDIO_STREAM_ARRAY
767df6a1
JH
12101 if (open_max > 0) {
12102 long i;
12103 for (i = 0; i < open_max; i++)
d2201af2
AD
12104 if (STDIO_STREAM_ARRAY[i]._file >= 0 &&
12105 STDIO_STREAM_ARRAY[i]._file < open_max &&
12106 STDIO_STREAM_ARRAY[i]._flag)
12107 fflush(&STDIO_STREAM_ARRAY[i]);
767df6a1
JH
12108 }
12109 }
ed39a0f2 12110# endif
767df6a1
JH
12111#endif
12112 _exit(42);
66fe083f
JH
12113}
12114EOCP
0f27ced1
JH
12115: first we have to find out how _not_ to flush
12116if $test "X$fflushNULL" = X -o "X$fflushall" = X; then
12117 output=''
12118 set try -DTRY_FPUTC
6626660c 12119 if eval $compile; then
4b257aef 12120 $rm -f try.out
0f27ced1
JH
12121 ./try$exe_ext 2>/dev/null
12122 if $test ! -s try.out -a "X$?" = X42; then
12123 output=-DTRY_FPUTC
12124 fi
12125 fi
12126 case "$output" in
12127 '')
12128 set try -DTRY_FPRINTF
12129 $rm -f try.out
6626660c 12130 if eval $compile; then
4b257aef 12131 $rm -f try.out
0f27ced1
JH
12132 ./try$exe_ext 2>/dev/null
12133 if $test ! -s try.out -a "X$?" = X42; then
12134 output=-DTRY_FPRINTF
12135 fi
12136 fi
12137 ;;
12138 esac
12139fi
767df6a1
JH
12140: check for fflush NULL behaviour
12141case "$fflushNULL" in
0f27ced1 12142'') set try -DTRY_FFLUSH_NULL $output
6626660c 12143 if eval $compile; then
4b257aef 12144 $rm -f try.out
196fa3d2 12145 ./try$exe_ext 2>/dev/null
a32a45b6
JH
12146 code="$?"
12147 if $test -s try.out -a "X$code" = X42; then
c2fddd50 12148 fflushNULL="`$cat try.out`"
a32a45b6
JH
12149 else
12150 if $test "X$code" != X42; then
12151 $cat >&4 <<EOM
12152(If this test failed, don't worry, we'll try another method shortly.)
12153EOM
12154 fi
c2fddd50
JH
12155 fi
12156 fi
0f27ced1 12157 $rm -f core try.core core.try.*
c2fddd50 12158 case "$fflushNULL" in
6626660c 12159 x) $cat >&4 <<EOM
66fe083f
JH
12160Your fflush(NULL) works okay.
12161EOM
ed39a0f2 12162 fflushNULL="$define"
c2fddd50 12163 ;;
6626660c 12164 '') $cat >&4 <<EOM
66fe083f
JH
12165Your fflush(NULL) isn't working (contrary to ANSI C).
12166EOM
ed39a0f2 12167 fflushNULL="$undef"
c2fddd50 12168 ;;
6626660c 12169 *) $cat >&4 <<EOM
66fe083f
JH
12170Cannot figure out whether your fflush(NULL) works or not.
12171I'm assuming it doesn't (contrary to ANSI C).
12172EOM
ed39a0f2 12173 fflushNULL="$undef"
c2fddd50
JH
12174 ;;
12175 esac
66fe083f
JH
12176 ;;
12177$define|true|[yY]*)
ed39a0f2 12178 fflushNULL="$define"
66fe083f
JH
12179 ;;
12180*)
ed39a0f2 12181 fflushNULL="$undef"
66fe083f
JH
12182 ;;
12183esac
a32a45b6
JH
12184: check explicit looping only if NULL did not work
12185case "$fflushNULL" in
12186"$undef")
12187 : check for fflush all behaviour
12188 case "$fflushall" in
12189 '') set try -DTRY_FFLUSH_ALL $output
a32a45b6 12190 if eval $compile; then
4b257aef 12191 $cat >&4 <<EOM
a32a45b6 12192(Now testing the other method--but note that also this may fail.)
a71cd7cd 12193EOM
4b257aef 12194 $rm -f try.out
a32a45b6
JH
12195 ./try$exe_ext 2>/dev/null
12196 if $test -s try.out -a "X$?" = X42; then
12197 fflushall="`$cat try.out`"
12198 fi
767df6a1 12199 fi
a32a45b6
JH
12200 $rm -f core try.core core.try.*
12201 case "$fflushall" in
12202 x) $cat >&4 <<EOM
12203Whew. Flushing explicitly all the stdio streams works.
767df6a1 12204EOM
a32a45b6
JH
12205 fflushall="$define"
12206 ;;
12207 '') $cat >&4 <<EOM
12208Sigh. Flushing explicitly all the stdio streams doesn't work.
767df6a1 12209EOM
a32a45b6
JH
12210 fflushall="$undef"
12211 ;;
12212 *) $cat >&4 <<EOM
6626660c 12213Cannot figure out whether flushing stdio streams explicitly works or not.
767df6a1
JH
12214I'm assuming it doesn't.
12215EOM
a32a45b6
JH
12216 fflushall="$undef"
12217 ;;
12218 esac
767df6a1 12219 ;;
a32a45b6
JH
12220 "$define"|true|[yY]*)
12221 fflushall="$define"
12222 ;;
12223 *)
12224 fflushall="$undef"
6626660c
JH
12225 ;;
12226 esac
767df6a1 12227 ;;
a32a45b6 12228*) fflushall="$undef"
767df6a1
JH
12229 ;;
12230esac
12231case "$fflushNULL$fflushall" in
12232undefundef)
6626660c 12233 $cat <<EOM
767df6a1
JH
12234I cannot figure out how to flush pending stdio output.
12235EOM
12236 ;;
12237esac
12238$rm -f try.* try$exe_ext
66fe083f 12239
ccc7f9b3
KS
12240: Store the full pathname to the ar program for use in the C program
12241: Respect a hint or command line value for full_ar.
12242case "$full_ar" in
12243'') full_ar=$ar ;;
12244esac
12245
1aef975c
AD
12246: Store the full pathname to the sed program for use in the C program
12247full_sed=$sed
12248
2304df62 12249: see what type gids are declared as in the kernel
dc45a647
MB
12250echo " "
12251echo "Looking for the type for group ids returned by getgid()."
a0d0e21e
LW
12252set gid_t gidtype xxx stdio.h sys/types.h
12253eval $typedef
2304df62 12254case "$gidtype" in
a0d0e21e
LW
12255xxx)
12256 xxx=`./findhdr sys/user.h`
12257 set `grep 'groups\[NGROUPS\];' "$xxx" 2>/dev/null` unsigned short
12258 case $1 in
12259 unsigned) dflt="$1 $2" ;;
12260 *) dflt="$1" ;;
12261 esac
2304df62 12262 ;;
8175356b
JH
12263*) dflt="$gidtype";;
12264esac
12265case "$gidtype" in
12266gid_t) echo "gid_t found." ;;
12267*) rp="What is the type for group ids returned by getgid()?"
12268 . ./myread
12269 gidtype="$ans"
12270 ;;
12271esac
12272
12273echo " "
12274case "$gidtype" in
12275*_t) zzz="$gidtype" ;;
12276*) zzz="gid" ;;
12277esac
a22e52b9 12278echo "Checking the size of $zzz..." >&4
8175356b
JH
12279cat > try.c <<EOCP
12280#include <sys/types.h>
12281#include <stdio.h>
12282int main() {
213c275f 12283 printf("%d\n", (int)sizeof($gidtype));
14e4fe40 12284 exit(0);
8175356b
JH
12285}
12286EOCP
12287set try
a22e52b9 12288if eval $compile_ok; then
8175356b
JH
12289 yyy=`./try`
12290 case "$yyy" in
a22e52b9
JH
12291 '') gidsize=4
12292 echo "(I can't execute the test program--guessing $gidsize.)" >&4
8175356b 12293 ;;
a22e52b9
JH
12294 *) gidsize=$yyy
12295 echo "Your $zzz size is $gidsize bytes."
8175356b
JH
12296 ;;
12297 esac
12298else
a22e52b9
JH
12299 gidsize=4
12300 echo "(I can't compile the test program--guessing $gidsize.)" >&4
8175356b
JH
12301fi
12302
12303
12304echo " "
12305case "$gidtype" in
12306*_t) zzz="$gidtype" ;;
12307*) zzz="gid" ;;
12308esac
a22e52b9 12309echo "Checking the sign of $zzz..." >&4
8175356b
JH
12310cat > try.c <<EOCP
12311#include <sys/types.h>
12312#include <stdio.h>
12313int main() {
a22e52b9
JH
12314 $gidtype foo = -1;
12315 if (foo < 0)
12316 printf("-1\n");
12317 else
12318 printf("1\n");
8175356b
JH
12319}
12320EOCP
12321set try
a22e52b9 12322if eval $compile; then
8175356b
JH
12323 yyy=`./try`
12324 case "$yyy" in
a22e52b9
JH
12325 '') gidsign=1
12326 echo "(I can't execute the test program--guessing unsigned.)" >&4
8175356b 12327 ;;
a22e52b9
JH
12328 *) gidsign=$yyy
12329 case "$gidsign" in
12330 1) echo "Your $zzz is unsigned." ;;
12331 -1) echo "Your $zzz is signed." ;;
12332 esac
8175356b
JH
12333 ;;
12334 esac
12335else
a22e52b9
JH
12336 gidsign=1
12337 echo "(I can't compile the test program--guessing unsigned.)" >&4
8175356b
JH
12338fi
12339
12340
785fb66b 12341echo " "
8175356b
JH
12342
12343if $test X"$quadtype" != X; then
12344
12345echo "Checking how to print 64-bit integers..." >&4
12346
12347if $test X"$sPRId64" = X -a X"$quadtype" = Xint; then
12348 $cat >try.c <<'EOCP'
785fb66b
JH
12349#include <sys/types.h>
12350#include <stdio.h>
12351int main() {
8175356b
JH
12352 int q = 12345678901;
12353 printf("%ld\n", q);
785fb66b
JH
12354}
12355EOCP
8175356b
JH
12356 set try
12357 if eval $compile; then
12358 yyy=`./try$exe_ext`
12359 case "$yyy" in
12360 12345678901)
12361 sPRId64='"d"'; sPRIi64='"i"'; sPRIu64='"u"';
12362 sPRIo64='"o"'; sPRIx64='"x"'; sPRIX64='"X"';
12363 echo "We will use %d."
12364 ;;
785fb66b 12365 esac
8175356b 12366 fi
785fb66b
JH
12367fi
12368
8175356b
JH
12369if $test X"$sPRId64" = X -a X"$quadtype" = Xlong; then
12370 $cat >try.c <<'EOCP'
12371#include <sys/types.h>
12372#include <stdio.h>
12373int main() {
12374 long q = 12345678901;
12375 printf("%ld\n", q);
12376}
12377EOCP
12378 set try
12379 if eval $compile; then
12380 yyy=`./try$exe_ext`
12381 case "$yyy" in
12382 12345678901)
12383 sPRId64='"ld"'; sPRIi64='"li"'; sPRIu64='"lu"';
12384 sPRIo64='"lo"'; sPRIx64='"lx"'; sPRIX64='"lX"';
12385 echo "We will use %ld."
12386 ;;
12387 esac
12388 fi
12389fi
785fb66b 12390
8afc5b8d 12391if $test X"$sPRId64" = X -a X"$i_inttypes" = X"$define" -a X"$quadtype" = Xint64_t; then
8175356b 12392 $cat >try.c <<'EOCP'
785fb66b 12393#include <sys/types.h>
8175356b 12394#include <inttypes.h>
785fb66b
JH
12395#include <stdio.h>
12396int main() {
8175356b
JH
12397 int64_t q = 12345678901;
12398 printf("%" PRId64 "\n", q);
785fb66b
JH
12399}
12400EOCP
8175356b
JH
12401 set try
12402 if eval $compile; then
12403 yyy=`./try$exe_ext`
12404 case "$yyy" in
12405 12345678901)
12406 sPRId64=PRId64; sPRIi64=PRIi64; sPRIu64=PRIu64;
12407 sPRIo64=PRIo64; sPRIx64=PRIx64; sPRIX64=PRIX64;
12408 echo "We will use the C9X style."
12409 ;;
12410 esac
12411 fi
12412fi
12413
12414if $test X"$sPRId64" = X -a X"$quadtype" = X"long long"; then
12415 $cat >try.c <<'EOCP'
12416#include <sys/types.h>
12417#include <stdio.h>
12418int main() {
12419 long long q = 12345678901LL; /* AIX cc requires the LL prefix. */
12420 printf("%lld\n", q);
12421}
12422EOCP
12423 set try
12424 if eval $compile; then
12425 yyy=`./try$exe_ext`
12426 case "$yyy" in
12427 12345678901)
12428 sPRId64='"lld"'; sPRIi64='"lli"'; sPRIu64='"llu"';
12429 sPRIo64='"llo"'; sPRIx64='"llx"'; sPRIX64='"llX"';
12430 echo "We will use the %lld style."
12431 ;;
12432 esac
12433 fi
785fb66b
JH
12434fi
12435
8175356b
JH
12436if $test X"$sPRId64" = X -a X"$quadtype" != X; then
12437 $cat >try.c <<EOCP
12438#include <sys/types.h>
12439#include <stdio.h>
12440int main() {
12441 $quadtype q = 12345678901;
12442 printf("%Ld\n", q);
12443}
12444EOCP
12445 set try
12446 if eval $compile; then
12447 yyy=`./try$exe_ext`
12448 case "$yyy" in
12449 12345678901)
12450 sPRId64='"Ld"'; sPRIi64='"Li"'; sPRIu64='"Lu"';
12451 sPRIo64='"Lo"'; sPRIx64='"Lx"'; sPRIX64='"LX"';
12452 echo "We will use %Ld."
12453 ;;
12454 esac
12455 fi
12456fi
785fb66b 12457
8175356b
JH
12458if $test X"$sPRId64" = X -a X"$quadtype" != X; then
12459 $cat >try.c <<EOCP
12460#include <sys/types.h>
12461#include <stdio.h>
12462int main() {
12463 $quadtype q = 12345678901;
12464 printf("%qd\n", q);
12465}
12466EOCP
12467 set try
12468 if eval $compile; then
12469 yyy=`./try$exe_ext`
12470 case "$yyy" in
12471 12345678901)
12472 sPRId64='"qd"'; sPRIi64='"qi"'; sPRIu64='"qu"';
12473 sPRIo64='"qo"'; sPRIx64='"qx"'; sPRIX64='"qX"';
12474 echo "We will use %qd."
12475 ;;
12476 esac
12477 fi
12478fi
2304df62 12479
8175356b
JH
12480if $test X"$sPRId64" = X; then
12481 echo "Cannot figure out how to print 64-bit integers." >&4
12482fi
5cd24f17 12483
8175356b 12484$rm -f try try.*
dfe9444c 12485
8175356b 12486fi
2304df62 12487
8175356b
JH
12488case "$sPRId64" in
12489'') d_PRId64="$undef"; d_PRIi64="$undef"; d_PRIu64="$undef";
12490 d_PRIo64="$undef"; d_PRIx64="$undef"; d_PRIX64="$undef";
12491 ;;
12492*) d_PRId64="$define"; d_PRIi64="$define"; d_PRIu64="$define";
12493 d_PRIo64="$define"; d_PRIx64="$define"; d_PRIX64="$define";
a0d0e21e 12494 ;;
2304df62 12495esac
2304df62 12496
2304df62 12497
8ff267be 12498echo " "
8175356b
JH
12499$echo "Checking the format strings to be used for Perl's internal types..." >&4
12500
12501if $test X"$ivsize" = X8; then
12502 ivdformat="$sPRId64"
12503 uvuformat="$sPRIu64"
12504 uvoformat="$sPRIo64"
12505 uvxformat="$sPRIx64"
5ff3f7a4 12506else
8175356b
JH
12507 if $test X"$ivsize" = X"$longsize"; then
12508 ivdformat='"ld"'
12509 uvuformat='"lu"'
12510 uvoformat='"lo"'
12511 uvxformat='"lx"'
12512 else
12513 if $test X"$ivsize" = X"$intsize"; then
12514 ivdformat='"d"'
12515 uvuformat='"u"'
12516 uvoformat='"o"'
12517 uvxformat='"x"'
12518 else
12519 : far out
12520 if $test X"$ivsize" = X"$shortsize"; then
12521 ivdformat='"hd"'
12522 uvuformat='"hu"'
12523 uvoformat='"ho"'
12524 uvxformat='"hx"'
12525 fi
12526 fi
12527 fi
5ff3f7a4 12528fi
8175356b
JH
12529
12530case "$ivdformat" in
12531'') echo "$0: Fatal: failed to find format strings, cannot continue." >& 4
12532 exit 1
12533 ;;
12534esac
5ff3f7a4 12535
a22e52b9
JH
12536
12537echo " "
12538$echo "Checking the format string to be used for gids..." >&4
12539
12540case "$gidsign" in
12541-1) if $test X"$gidsize" = X"$ivsize"; then
12542 gidformat="$ivdformat"
12543 else
12544 if $test X"$gidsize" = X"$longsize"; then
12545 gidformat='"ld"'
12546 else
12547 if $test X"$gidsize" = X"$intsize"; then
12548 gidformat='"d"'
12549 else
12550 if $test X"$gidsize" = X"$shortsize"; then
12551 gidformat='"hd"'
12552 fi
12553 fi
12554 fi
12555 fi
12556 ;;
12557*) if $test X"$gidsize" = X"$uvsize"; then
12558 gidformat="$uvuformat"
12559 else
12560 if $test X"$gidsize" = X"$longsize"; then
12561 gidformat='"lu"'
12562 else
12563 if $test X"$gidsize" = X"$intsize"; then
12564 gidformat='"u"'
12565 else
12566 if $test X"$gidsize" = X"$shortsize"; then
12567 gidformat='"hu"'
12568 fi
12569 fi
12570 fi
12571 fi
12572 ;;
12573esac
12574
12575: see if getgroups exists
12576set getgroups d_getgrps
12577eval $inlibc
12578
12579: see if setgroups exists
12580set setgroups d_setgrps
12581eval $inlibc
12582
12583
12584: Find type of 2nd arg to 'getgroups()' and 'setgroups()'
12585echo " "
12586case "$d_getgrps$d_setgrps" in
12587*define*)
12588 case "$groupstype" in
12589 '') dflt="$gidtype" ;;
12590 *) dflt="$groupstype" ;;
12591 esac
12592 $cat <<EOM
12593What type of pointer is the second argument to getgroups() and setgroups()?
12594Usually this is the same as group ids, $gidtype, but not always.
12595
12596EOM
12597 rp='What type pointer is the second argument to getgroups() and setgroups()?'
12598 . ./myread
12599 groupstype="$ans"
12600 ;;
12601*) groupstype="$gidtype";;
12602esac
12603
5ff3f7a4 12604echo " "
dfe9444c 12605echo "Checking if your $make program sets \$(MAKE)..." >&4
8ff267be 12606case "$make_set_make" in
12607'')
12608 $sed 's/^X //' > testmake.mak << 'EOF'
12609Xall:
dfe9444c 12610X @echo 'maketemp="$(MAKE)"'
8ff267be 12611EOF
8ff267be 12612 case "`$make -f testmake.mak 2>/dev/null`" in
dfe9444c 12613 *maketemp=*) make_set_make='#' ;;
8ff267be 12614 *) make_set_make="MAKE=$make" ;;
12615 esac
dfe9444c
AD
12616 $rm -f testmake.mak
12617 ;;
12618esac
12619case "$make_set_make" in
12620'#') echo "Yup, it does.";;
12621*) echo "Nope, it doesn't.";;
12622esac
12623
12624: see what type is used for mode_t
dc45a647 12625rp="What is the type used for file modes for system calls (e.g. fchmod())?"
dfe9444c 12626set mode_t modetype int stdio.h sys/types.h
dc45a647 12627eval $typedef_ask
dfe9444c 12628
dfe9444c
AD
12629: define a fucntion to check prototypes
12630$cat > protochk <<EOSH
12631$startsh
12632cc="$cc"
12633optimize="$optimize"
12634ccflags="$ccflags"
12635prototype="$prototype"
12636define="$define"
12637rm=$rm
12638EOSH
12639
12640$cat >> protochk <<'EOSH'
12641
12642$rm -f try.c
12643foo="$1"
12644shift
12645while test $# -ge 2; do
12646 case "$1" in
12647 $define) echo "#include <$2>" >> try.c ;;
12648 literal) echo "$2" >> try.c ;;
12649 esac
12650 shift 2
12651done
12652test "$prototype" = "$define" && echo '#define CAN_PROTOTYPE' >> try.c
12653cat >> try.c <<'EOCP'
12654#ifdef CAN_PROTOTYPE
12655#define _(args) args
12656#else
12657#define _(args) ()
12658#endif
12659EOCP
12660echo "$foo" >> try.c
12661echo 'int no_real_function_has_this_name _((void)) { return 0; }' >> try.c
12662$cc $optimize $ccflags -c try.c > /dev/null 2>&1
12663status=$?
12664$rm -f try.[co]
12665exit $status
12666EOSH
12667chmod +x protochk
12668$eunicefix protochk
12669
dfe9444c 12670: see what type is used for size_t
dc45a647 12671rp="What is the type used for the length parameter for string functions?"
dfe9444c 12672set size_t sizetype 'unsigned int' stdio.h sys/types.h
dc45a647 12673eval $typedef_ask
dfe9444c
AD
12674
12675: check for type of arguments to gethostbyaddr.
12676if test "X$netdb_host_type" = X -o "X$netdb_hlen_type" = X; then
12677 case "$d_gethbyaddr" in
12678 $define)
12679 $cat <<EOM
12680
12681Checking to see what type of arguments are accepted by gethostbyaddr().
12682EOM
12683 hdrs="$define sys/types.h
12684 $d_socket sys/socket.h
12685 $i_niin netinet/in.h
12686 $i_netdb netdb.h
12687 $i_unistd unistd.h"
12688 : The first arg can 'char *' or 'void *'
12689 : The second arg is some of integral type
12690 for xxx in in_addr_t 'const void *' 'const char *' 'void *' 'char *'; do
12691 for yyy in size_t long int; do
12692 case "$netdb_host_type" in
12693 '') try="extern struct hostent *gethostbyaddr($xxx, $yyy, int);"
12694 if ./protochk "$try" $hdrs; then
12695 echo "Your system accepts $xxx for the first arg."
12696 echo "...and $yyy for the second arg."
12697 netdb_host_type="$xxx"
12698 netdb_hlen_type="$yyy"
12699 fi
12700 ;;
12701 esac
12702 done
12703 done
12704 : In case none of those worked, prompt the user.
12705 case "$netdb_host_type" in
12706 '') rp='What is the type for the 1st argument to gethostbyaddr?'
12707 dflt='char *'
12708 . ./myread
12709 netdb_host_type=$ans
12710 rp='What is the type for the 2nd argument to gethostbyaddr?'
12711 dflt="$sizetype"
12712 . ./myread
12713 netdb_hlen_type=$ans
12714 ;;
12715 esac
12716 ;;
12717 *) : no gethostbyaddr, so pick harmless defaults
12718 netdb_host_type='char *'
12719 netdb_hlen_type="$sizetype"
12720 ;;
12721 esac
12722 # Remove the "const" if needed. -- but then we'll have a
12723 # prototype clash!
12724 # netdb_host_type=`echo "$netdb_host_type" | sed 's/^const //'`
12725fi
12726
12727: check for type of argument to gethostbyname.
12728if test "X$netdb_name_type" = X ; then
12729 case "$d_gethbyname" in
12730 $define)
12731 $cat <<EOM
12732
12733Checking to see what type of argument is accepted by gethostbyname().
12734EOM
12735 hdrs="$define sys/types.h
12736 $d_socket sys/socket.h
12737 $i_niin netinet/in.h
12738 $i_netdb netdb.h
12739 $i_unistd unistd.h"
12740 for xxx in "const char *" "char *"; do
12741 case "$netdb_name_type" in
12742 '') try="extern struct hostent *gethostbyname($xxx);"
12743 if ./protochk "$try" $hdrs; then
12744 echo "Your system accepts $xxx."
12745 netdb_name_type="$xxx"
12746 fi
12747 ;;
12748 esac
12749 done
12750 : In case none of those worked, prompt the user.
12751 case "$netdb_name_type" in
12752 '') rp='What is the type for the 1st argument to gethostbyname?'
12753 dflt='char *'
12754 . ./myread
12755 netdb_name_type=$ans
12756 ;;
12757 esac
12758 ;;
12759 *) : no gethostbyname, so pick harmless default
12760 netdb_name_type='char *'
12761 ;;
12762 esac
12763fi
8ff267be 12764
dfe9444c
AD
12765: check for type of 1st argument to getnetbyaddr.
12766if test "X$netdb_net_type" = X ; then
12767 case "$d_getnbyaddr" in
12768 $define)
12769 $cat <<EOM
85e6fe83 12770
dfe9444c
AD
12771Checking to see what type of 1st argument is accepted by getnetbyaddr().
12772EOM
12773 hdrs="$define sys/types.h
12774 $d_socket sys/socket.h
12775 $i_niin netinet/in.h
12776 $i_netdb netdb.h
12777 $i_unistd unistd.h"
12778 for xxx in in_addr_t "unsigned long" long "unsigned int" int; do
12779 case "$netdb_net_type" in
12780 '') try="extern struct netent *getnetbyaddr($xxx, int);"
12781 if ./protochk "$try" $hdrs; then
12782 echo "Your system accepts $xxx."
12783 netdb_net_type="$xxx"
12784 fi
12785 ;;
12786 esac
12787 done
12788 : In case none of those worked, prompt the user.
12789 case "$netdb_net_type" in
12790 '') rp='What is the type for the 1st argument to getnetbyaddr?'
12791 dflt='long'
12792 . ./myread
12793 netdb_net_type=$ans
12794 ;;
12795 esac
12796 ;;
12797 *) : no getnetbyaddr, so pick harmless default
e5c9fcd0 12798 netdb_net_type='long'
dfe9444c
AD
12799 ;;
12800 esac
12801fi
2c7991dc 12802: locate the preferred pager for this system
12803case "$pager" in
12804'')
12805 dflt=''
12806 case "$pg" in
12807 /*) dflt=$pg;;
12808 esac
12809 case "$more" in
12810 /*) dflt=$more;;
12811 esac
12812 case "$less" in
12813 /*) dflt=$less;;
12814 esac
12815 case "$dflt" in
12816 '') dflt=/usr/ucb/more;;
12817 esac
12818 ;;
12819*) dflt="$pager";;
12820esac
12821echo " "
12822fn=f/
12823rp='What pager is used on your system?'
12824. ./getfile
12825pager="$ans"
12826
dfe9444c 12827: see what type pids are declared as in the kernel
dc45a647 12828rp="What is the type of process ids on this system?"
dfe9444c 12829set pid_t pidtype int stdio.h sys/types.h
dc45a647 12830eval $typedef_ask
2304df62 12831
693762b4
AD
12832: check for length of pointer
12833echo " "
12834case "$ptrsize" in
12835'')
dc45a647 12836 $echo $n "Checking to see how big your pointers are...$c" >&4
693762b4
AD
12837 if test "$voidflags" -gt 7; then
12838 echo '#define VOID_PTR char *' > try.c
12839 else
12840 echo '#define VOID_PTR void *' > try.c
12841 fi
12842 $cat >>try.c <<'EOCP'
12843#include <stdio.h>
d674cd6d 12844int main()
693762b4 12845{
213c275f 12846 printf("%d\n", (int)sizeof(VOID_PTR));
14e4fe40 12847 exit(0);
693762b4
AD
12848}
12849EOCP
12850 set try
dc45a647 12851 if eval $compile_ok; then
693762b4 12852 ptrsize=`./try`
dc45a647 12853 $echo " $ptrsize bytes." >&4
693762b4
AD
12854 else
12855 dflt='4'
12856 echo "(I can't seem to compile the test program. Guessing...)" >&4
12857 rp="What is the size of a pointer (in bytes)?"
12858 . ./myread
12859 ptrsize="$ans"
12860 fi
12861 ;;
12862esac
12863$rm -f try.c try
12864
a0d0e21e
LW
12865: see if ar generates random libraries by itself
12866echo " "
12867echo "Checking how to generate random libraries on your machine..." >&4
12868echo 'int bar1() { return bar2(); }' > bar1.c
12869echo 'int bar2() { return 2; }' > bar2.c
12870$cat > foo.c <<'EOP'
d674cd6d 12871int main() { printf("%d\n", bar1()); exit(0); }
a0d0e21e
LW
12872EOP
12873$cc $ccflags -c bar1.c >/dev/null 2>&1
12874$cc $ccflags -c bar2.c >/dev/null 2>&1
12875$cc $ccflags -c foo.c >/dev/null 2>&1
dfe9444c
AD
12876$ar rc bar$_a bar2$_o bar1$_o >/dev/null 2>&1
12877if $cc $ccflags $ldflags -o foobar foo$_o bar$_a $libs > /dev/null 2>&1 &&
a0d0e21e 12878 ./foobar >/dev/null 2>&1; then
4e2a5f63 12879 echo "$ar appears to generate random libraries itself."
a0d0e21e
LW
12880 orderlib=false
12881 ranlib=":"
dfe9444c
AD
12882elif $ar ts bar$_a >/dev/null 2>&1 &&
12883 $cc $ccflags $ldflags -o foobar foo$_o bar$_a $libs > /dev/null 2>&1 &&
a0d0e21e 12884 ./foobar >/dev/null 2>&1; then
4e2a5f63 12885 echo "a table of contents needs to be added with '$ar ts'."
a0d0e21e 12886 orderlib=false
dfe9444c 12887 ranlib="$ar ts"
a0d0e21e 12888else
ecfc5424
AD
12889 case "$ranlib" in
12890 :) ranlib='';;
12891 '')
12892 ranlib=`./loc ranlib X /usr/bin /bin /usr/local/bin`
12893 $test -f $ranlib || ranlib=''
12894 ;;
12895 esac
a0d0e21e 12896 if $test -n "$ranlib"; then
ecfc5424 12897 echo "your system has '$ranlib'; we'll use that."
a0d0e21e
LW
12898 orderlib=false
12899 else
12900 echo "your system doesn't seem to support random libraries"
12901 echo "so we'll use lorder and tsort to order the libraries."
12902 orderlib=true
12903 ranlib=":"
12904 fi
12905fi
12906$rm -f foo* bar*
12907
dfe9444c
AD
12908: check for type of arguments to select.
12909case "$selecttype" in
12910'') case "$d_select" in
12911 $define)
cce08f5b 12912 echo " "
dfe9444c
AD
12913 $cat <<EOM
12914Checking to see what type of arguments are accepted by select().
12915EOM
12916 hdrs="$define sys/types.h
12917 $i_systime sys/time.h
12918 $i_sysselct sys/select.h
12919 $d_socket sys/socket.h"
12920 : The first arg can be int, unsigned, or size_t
12921 : The last arg may or may not be 'const'
12922 val=''
7f3d1cf1
BH
12923 : void pointer has been seen but using that
12924 : breaks the selectminbits test
12925 for xxx in 'fd_set *' 'int *'; do
1cfa4ec7 12926 for nfd in 'int' 'size_t' 'unsigned long' 'unsigned' ; do
dfe9444c
AD
12927 for tmo in 'struct timeval *' 'const struct timeval *'; do
12928 case "$val" in
12929 '') try="extern select _(($nfd, $xxx, $xxx, $xxx, $tmo));"
12930 if ./protochk "$try" $hdrs; then
12931 echo "Your system accepts $xxx."
12932 val="$xxx"
12933 fi
12934 ;;
12935 esac
12936 done
12937 done
12938 done
12939 case "$val" in
12940 '') rp='What is the type for the 2nd, 3rd, and 4th arguments to select?'
12941 case "$d_fd_set" in
12942 $define) dflt="fd_set *" ;;
12943 *) dflt="int *" ;;
12944 esac
12945 . ./myread
12946 val=$ans
12947 ;;
a0d0e21e 12948 esac
dfe9444c 12949 selecttype="$val"
a0d0e21e 12950 ;;
dfe9444c
AD
12951 *) : no select, so pick a harmless default
12952 selecttype='int *'
a0d0e21e
LW
12953 ;;
12954 esac
a0d0e21e
LW
12955 ;;
12956esac
2304df62 12957
5ff3f7a4
GS
12958: check for the select 'width'
12959case "$selectminbits" in
12960'') case "$d_select" in
12961 $define)
12962 $cat <<EOM
12963
85ab1d1d 12964Checking to see on how many bits at a time your select() operates...
5ff3f7a4
GS
12965EOM
12966 $cat >try.c <<EOCP
12967#include <sys/types.h>
12968#$i_time I_TIME
12969#$i_systime I_SYS_TIME
12970#$i_systimek I_SYS_TIME_KERNEL
12971#ifdef I_TIME
12972# include <time.h>
12973#endif
12974#ifdef I_SYS_TIME
12975# ifdef I_SYS_TIME_KERNEL
12976# define KERNEL
12977# endif
12978# include <sys/time.h>
12979# ifdef I_SYS_TIME_KERNEL
12980# undef KERNEL
12981# endif
12982#endif
12983#$i_sysselct I_SYS_SELECT
12984#ifdef I_SYS_SELECT
12985#include <sys/select.h>
12986#endif
bd628c73
AD
12987#$d_socket HAS_SOCKET
12988#ifdef HAS_SOCKET
12989# include <sys/socket.h> /* Might include <sys/bsdtypes.h> */
12990#endif
5ff3f7a4 12991#include <stdio.h>
fb164848
JH
12992$selecttype b;
12993#define S sizeof(*(b))
5ff3f7a4
GS
12994#define MINBITS 64
12995#define NBYTES (S * 8 > MINBITS ? S : MINBITS/8)
12996#define NBITS (NBYTES * 8)
12997int main() {
12998 char s[NBYTES];
5ff3f7a4
GS
12999 struct timeval t;
13000 int i;
13001 FILE* fp;
13002 int fd;
13003
13004 fclose(stdin);
13005 fp = fopen("try.c", "r");
13006 if (fp == 0)
13007 exit(1);
13008 fd = fileno(fp);
13009 if (fd < 0)
13010 exit(2);
13011 b = ($selecttype)s;
13012 for (i = 0; i < NBITS; i++)
13013 FD_SET(i, b);
13014 t.tv_sec = 0;
13015 t.tv_usec = 0;
13016 select(fd + 1, b, 0, 0, &t);
13017 for (i = NBITS - 1; i > fd && FD_ISSET(i, b); i--);
13018 printf("%d\n", i + 1);
13019 return 0;
13020}
13021EOCP
13022 set try
13023 if eval $compile_ok; then
13024 selectminbits=`./try`
85ab1d1d 13025 case "$selectminbits" in
fb164848
JH
13026 '') cat >&4 <<EOM
13027Cannot figure out on how many bits at a time your select() operates.
13028I'll play safe and guess it is 32 bits.
13029EOM
13030 selectminbits=32
13031 bits="32 bits"
13032 ;;
85ab1d1d
JH
13033 1) bits="1 bit" ;;
13034 *) bits="$selectminbits bits" ;;
13035 esac
13036 echo "Your select() operates on $bits at a time." >&4
5ff3f7a4
GS
13037 else
13038 rp='What is the minimum number of bits your select() operates on?'
13039 case "$byteorder" in
13040 1234|12345678) dflt=32 ;;
13041 *) dflt=1 ;;
13042 esac
13043 . ./myread
13044 val=$ans
13045 selectminbits="$val"
13046 fi
13047 $rm -f try.* try
13048 ;;
13049 *) : no select, so pick a harmless default
13050 selectminbits='32'
13051 ;;
13052 esac
13053 ;;
13054esac
13055
8e07c86e
AD
13056: Trace out the files included by signal.h, then look for SIGxxx names.
13057: Remove SIGARRAYSIZE used by HPUX.
af4c28eb
CS
13058: Remove SIGSTKSIZE used by Linux.
13059: Remove SIGSTKSZ used by Posix.
4633a7c4 13060: Remove SIGTYP void lines used by OS2.
6764938d 13061: Some cpps, like os390, dont give the file name anywhere
53d4e464 13062if [ "X$fieldn" = X ]; then
6764938d
GS
13063 : Just make some guesses. We check them later.
13064 xxx='/usr/include/signal.h /usr/include/sys/signal.h'
53d4e464 13065else
6764938d 13066 xxx=`echo '#include <signal.h>' |
8e07c86e
AD
13067 $cppstdin $cppminus $cppflags 2>/dev/null |
13068 $grep '^[ ]*#.*include' |
13069 $awk "{print \\$$fieldn}" | $sed 's!"!!g' | $sort | $uniq`
53d4e464 13070fi
8e07c86e
AD
13071: Check this list of files to be sure we have parsed the cpp output ok.
13072: This will also avoid potentially non-existent files, such
13073: as ../foo/bar.h
13074xxxfiles=''
13075for xx in $xxx /dev/null ; do
13076 $test -f "$xx" && xxxfiles="$xxxfiles $xx"
13077done
13078: If we have found no files, at least try signal.h
13079case "$xxxfiles" in
13080'') xxxfiles=`./findhdr signal.h` ;;
13081esac
13082xxx=`awk '
af4c28eb 13083$1 ~ /^#define$/ && $2 ~ /^SIG[A-Z0-9]*$/ && $2 !~ /SIGARRAYSIZE/ && $2 !~ /SIGSTKSIZE/ && $2 !~ /SIGSTKSZ/ && $3 !~ /void/ {
8e07c86e
AD
13084 print substr($2, 4, 20)
13085}
4633a7c4 13086$1 == "#" && $2 ~ /^define$/ && $3 ~ /^SIG[A-Z0-9]*$/ && $3 !~ /SIGARRAYSIZE/ && $4 !~ /void/ {
8e07c86e
AD
13087 print substr($3, 4, 20)
13088}' $xxxfiles`
13089: Append some common names just in case the awk scan failed.
6764938d
GS
13090xxx="$xxx ABRT ALRM BUS CANCEL CHLD CLD CONT DIL EMT FPE"
13091xxx="$xxx FREEZE HUP ILL INT IO IOT KILL LOST LWP PHONE"
13092xxx="$xxx PIPE POLL PROF PWR QUIT RTMAX RTMIN SEGV STKFLT STOP"
13093xxx="$xxx SYS TERM THAW TRAP TSTP TTIN TTOU URG USR1 USR2"
13094xxx="$xxx USR3 USR4 VTALRM WAITING WINCH WIND WINDOW XCPU XFSZ"
13095
8e07c86e 13096: generate a few handy files for later
dc45a647 13097$cat > signal.c <<'EOCP'
4633a7c4
LW
13098#include <sys/types.h>
13099#include <signal.h>
dc45a647 13100#include <stdio.h>
4633a7c4 13101int main() {
760ac839
LW
13102
13103/* Strange style to avoid deeply-nested #if/#else/#endif */
13104#ifndef NSIG
13105# ifdef _NSIG
13106# define NSIG (_NSIG)
13107# endif
13108#endif
13109
13110#ifndef NSIG
13111# ifdef SIGMAX
13112# define NSIG (SIGMAX+1)
13113# endif
13114#endif
13115
13116#ifndef NSIG
13117# ifdef SIG_MAX
13118# define NSIG (SIG_MAX+1)
13119# endif
13120#endif
13121
13122#ifndef NSIG
13123# ifdef MAXSIG
13124# define NSIG (MAXSIG+1)
13125# endif
4633a7c4 13126#endif
760ac839
LW
13127
13128#ifndef NSIG
13129# ifdef MAX_SIG
13130# define NSIG (MAX_SIG+1)
13131# endif
13132#endif
13133
13134#ifndef NSIG
13135# ifdef SIGARRAYSIZE
13136# define NSIG (SIGARRAYSIZE+1) /* Not sure of the +1 */
13137# endif
13138#endif
13139
13140#ifndef NSIG
13141# ifdef _sys_nsig
13142# define NSIG (_sys_nsig) /* Solaris 2.5 */
13143# endif
13144#endif
13145
13146/* Default to some arbitrary number that's big enough to get most
13147 of the common signals.
13148*/
13149#ifndef NSIG
13150# define NSIG 50
4633a7c4 13151#endif
760ac839
LW
13152
13153printf("NSIG %d\n", NSIG);
13154
dc45a647
MB
13155#ifndef JUST_NSIG
13156
13157EOCP
13158
28e8609d 13159echo $xxx | $tr ' ' $trnl | $sort | $uniq | $awk '
8e07c86e
AD
13160{
13161 printf "#ifdef SIG"; printf $1; printf "\n"
13162 printf "printf(\""; printf $1; printf " %%d\\n\",SIG";
13163 printf $1; printf ");\n"
13164 printf "#endif\n"
2304df62 13165}
2304df62 13166END {
dc45a647 13167 printf "#endif /* JUST_NSIG */\n";
14e4fe40 13168 printf "exit(0);\n}\n";
2304df62 13169}
4633a7c4
LW
13170' >>signal.c
13171$cat >signal.awk <<'EOP'
13172BEGIN { ndups = 0 }
13173$1 ~ /^NSIG$/ { nsig = $2 }
13174($1 !~ /^NSIG$/) && (NF == 2) {
13175 if ($2 > maxsig) { maxsig = $2 }
13176 if (sig_name[$2]) {
13177 dup_name[ndups] = $1
13178 dup_num[ndups] = $2
13179 ndups++
13180 }
13181 else {
13182 sig_name[$2] = $1
13183 sig_num[$2] = $2
13184 }
4633a7c4
LW
13185}
13186END {
af4c28eb
CS
13187 if (nsig == 0) {
13188 nsig = maxsig + 1
13189 }
13190 printf("NSIG %d\n", nsig);
13191 for (n = 1; n < nsig; n++) {
13192 if (sig_name[n]) {
13193 printf("%s %d\n", sig_name[n], sig_num[n])
4633a7c4 13194 }
af4c28eb
CS
13195 else {
13196 printf("NUM%d %d\n", n, n)
13197 }
13198 }
4633a7c4 13199 for (n = 0; n < ndups; n++) {
af4c28eb 13200 printf("%s %d\n", dup_name[n], dup_num[n])
4633a7c4
LW
13201 }
13202}
13203EOP
13204$cat >signal_cmd <<EOS
8e07c86e 13205$startsh
dc45a647
MB
13206if $test -s signal.lst; then
13207 echo "Using your existing signal.lst file"
13208 exit 0
13209fi
13210xxx="$xxx"
13211EOS
13212$cat >>signal_cmd <<'EOS'
13213
13214set signal
13215if eval $compile_ok; then
dfe9444c 13216 ./signal$_exe | $sort -n +1 | $uniq | $awk -f signal.awk >signal.lst
8e07c86e 13217else
dc45a647
MB
13218 echo "(I can't seem be able to compile the whole test program)" >&4
13219 echo "(I'll try it in little pieces.)" >&4
13220 set signal -DJUST_NSIG
13221 if eval $compile_ok; then
13222 ./signal$_exe > signal.nsg
13223 $cat signal.nsg
13224 else
13225 echo "I can't seem to figure out how many signals you have." >&4
13226 echo "Guessing 50." >&4
13227 echo 'NSIG 50' > signal.nsg
13228 fi
13229 : Now look at all the signal names, one at a time.
28e8609d 13230 for xx in `echo $xxx | $tr ' ' $trnl | $sort | $uniq`; do
dc45a647
MB
13231 $cat > signal.c <<EOCP
13232#include <sys/types.h>
13233#include <signal.h>
13234#include <stdio.h>
13235int main() {
13236printf("$xx %d\n", SIG${xx});
13237return 0;
13238}
13239EOCP
13240 set signal
13241 if eval $compile; then
13242 echo "SIG${xx} found."
13243 ./signal$_exe >> signal.ls1
13244 else
13245 echo "SIG${xx} NOT found."
13246 fi
13247 done
13248 if $test -s signal.ls1; then
13249 $cat signal.nsg signal.ls1 |
13250 $sort -n +1 | $uniq | $awk -f signal.awk >signal.lst
13251 fi
13252
13253fi
13254if $test -s signal.lst; then
13255 :
13256else
13257 echo "(AAK! I can't compile the test programs -- Guessing)" >&4
8e07c86e 13258 echo 'kill -l' >signal
dc45a647 13259 set X `csh -f <signal`
8e07c86e 13260 $rm -f signal
2304df62 13261 shift
dc45a647 13262 case $# in
8e07c86e 13263 0) set HUP INT QUIT ILL TRAP ABRT EMT FPE KILL BUS SEGV SYS PIPE ALRM TERM;;
2304df62 13264 esac
28e8609d 13265 echo $@ | $tr ' ' $trnl | \
af4c28eb
CS
13266 $awk '{ printf "%s %d\n", $1, ++s; }
13267 END { printf "NSIG %d\n", ++s }' >signal.lst
8e07c86e 13268fi
dc45a647 13269$rm -f signal.c signal$_exe signal$_o signal.nsg signal.ls1
8e07c86e 13270EOS
4633a7c4
LW
13271chmod a+x signal_cmd
13272$eunicefix signal_cmd
8e07c86e
AD
13273
13274: generate list of signal names
13275echo " "
dfe9444c 13276case "$sig_name_init" in
6626bf4c
JH
13277'') doinit=yes ;;
13278*) case "$sig_num_init" in
13279 ''|*,*) doinit=yes ;;
13280 esac ;;
13281esac
13282case "$doinit" in
13283yes)
4633a7c4 13284 echo "Generating a list of signal names and numbers..." >&4
dc45a647 13285 . ./signal_cmd
af4c28eb
CS
13286 sig_count=`$awk '/^NSIG/ { printf "%d", $2 }' signal.lst`
13287 sig_name=`$awk 'BEGIN { printf "ZERO " }
13288 !/^NSIG/ { printf "%s ", $1 }' signal.lst`
13289 sig_num=`$awk 'BEGIN { printf "0 " }
13290 !/^NSIG/ { printf "%d ", $2 }' signal.lst`
13291 sig_name_init=`$awk 'BEGIN { printf "\"ZERO\", " }
13292 !/^NSIG/ { printf "\"%s\", ", $1 }
13293 END { printf "0\n" }' signal.lst`
13294 sig_num_init=`$awk 'BEGIN { printf "0, " }
13295 !/^NSIG/ { printf "%d, ", $2}
13296 END { printf "0\n"}' signal.lst`
13297 ;;
13298esac
13299echo "The following $sig_count signals are available:"
a0d0e21e
LW
13300echo " "
13301echo $sig_name | $awk \
13302'BEGIN { linelen = 0 }
13303{
8e07c86e 13304 for (i = 1; i <= NF; i++) {
a0d0e21e
LW
13305 name = "SIG" $i " "
13306 linelen = linelen + length(name)
13307 if (linelen > 70) {
13308 printf "\n"
13309 linelen = length(name)
13310 }
13311 printf "%s", name
13312 }
8e07c86e 13313 printf "\n"
a0d0e21e 13314}'
4633a7c4 13315$rm -f signal signal.c signal.awk signal.lst signal_cmd
a0d0e21e 13316
a0d0e21e
LW
13317: see what type is used for signed size_t
13318set ssize_t ssizetype int stdio.h sys/types.h
13319eval $typedef
13320dflt="$ssizetype"
13321$cat > ssize.c <<EOM
13322#include <stdio.h>
13323#include <sys/types.h>
13324#define Size_t $sizetype
13325#define SSize_t $dflt
d674cd6d 13326int main()
a0d0e21e
LW
13327{
13328 if (sizeof(Size_t) == sizeof(SSize_t))
13329 printf("$dflt\n");
13330 else if (sizeof(Size_t) == sizeof(int))
13331 printf("int\n");
13332 else
13333 printf("long\n");
760ac839 13334 exit(0);
a0d0e21e
LW
13335}
13336EOM
13337echo " "
dfe9444c 13338set ssize
dc45a647 13339if eval $compile_ok && ./ssize > /dev/null; then
dfe9444c 13340 ssizetype=`./ssize`
a0d0e21e
LW
13341 echo "I'll be using $ssizetype for functions returning a byte count." >&4
13342else
24fef2a7 13343 $cat >&4 <<EOM
24fef2a7
AD
13344Help! I can't compile and run the ssize_t test program: please enlighten me!
13345(This is probably a misconfiguration in your system or libraries, and
13346you really ought to fix it. Still, I'll try anyway.)
a0d0e21e
LW
13347
13348I need a type that is the same size as $sizetype, but is guaranteed to
24fef2a7 13349be signed. Common values are ssize_t, int and long.
a0d0e21e
LW
13350
13351EOM
13352 rp="What signed type is the same size as $sizetype?"
13353 . ./myread
13354 ssizetype="$ans"
13355fi
dfe9444c 13356$rm -f ssize ssize.*
3fd537d4 13357
a0d0e21e
LW
13358: see what type of char stdio uses.
13359echo " "
13360if $contains 'unsigned.*char.*_ptr;' `./findhdr stdio.h` >/dev/null 2>&1 ; then
13361 echo "Your stdio uses unsigned chars." >&4
13362 stdchar="unsigned char"
13363else
13364 echo "Your stdio uses signed chars." >&4
13365 stdchar="char"
13366fi
13367
13368: see if time exists
13369echo " "
28e8609d
JH
13370if test "X$d_time" = X -o X"$timetype" = X; then
13371 if set time val -f d_time; eval $csym; $val; then
5ff3f7a4
GS
13372 echo 'time() found.' >&4
13373 val="$define"
13374 rp="What is the type returned by time() on this system?"
13375 set time_t timetype long stdio.h sys/types.h
13376 eval $typedef_ask
28e8609d 13377 else
5ff3f7a4
GS
13378 echo 'time() not found, hope that will do.' >&4
13379 val="$undef"
13380 timetype='int';
28e8609d
JH
13381 fi
13382 set d_time
13383 eval $setvar
a0d0e21e 13384fi
a0d0e21e
LW
13385
13386: see what type uids are declared as in the kernel
dc45a647
MB
13387echo " "
13388echo "Looking for the type for user ids returned by getuid()."
a0d0e21e
LW
13389set uid_t uidtype xxx stdio.h sys/types.h
13390eval $typedef
13391case "$uidtype" in
13392xxx)
13393 xxx=`./findhdr sys/user.h`
13394 set `grep '_ruid;' "$xxx" 2>/dev/null` unsigned short
13395 case $1 in
13396 unsigned) dflt="$1 $2" ;;
13397 *) dflt="$1" ;;
13398 esac
13399 ;;
4633a7c4
LW
13400*) dflt="$uidtype";;
13401esac
dc45a647
MB
13402case "$uidtype" in
13403uid_t) echo "uid_t found." ;;
13404*) rp="What is the type for user ids returned by getuid()?"
13405 . ./myread
13406 uidtype="$ans"
13407 ;;
13408esac
4633a7c4 13409
57def98f
JH
13410echo " "
13411case "$uidtype" in
13412*_t) zzz="$uidtype" ;;
13413*) zzz="uid" ;;
13414esac
a22e52b9 13415echo "Checking the size of $zzz..." >&4
57def98f
JH
13416cat > try.c <<EOCP
13417#include <sys/types.h>
13418#include <stdio.h>
13419int main() {
213c275f 13420 printf("%d\n", (int)sizeof($uidtype));
14e4fe40 13421 exit(0);
57def98f
JH
13422}
13423EOCP
d4265146 13424set try
a22e52b9 13425if eval $compile_ok; then
57def98f
JH
13426 yyy=`./try`
13427 case "$yyy" in
a22e52b9
JH
13428 '') uidsize=4
13429 echo "(I can't execute the test program--guessing $uidsize.)" >&4
57def98f 13430 ;;
a22e52b9
JH
13431 *) uidsize=$yyy
13432 echo "Your $zzz size is $uidsize bytes."
57def98f
JH
13433 ;;
13434 esac
13435else
a22e52b9
JH
13436 uidsize=4
13437 echo "(I can't compile the test program--guessing $uidsize.)" >&4
57def98f
JH
13438fi
13439
785fb66b
JH
13440echo " "
13441case "$uidtype" in
13442*_t) zzz="$uidtype" ;;
13443*) zzz="uid" ;;
13444esac
a22e52b9 13445echo "Checking the sign of $zzz..." >&4
785fb66b
JH
13446cat > try.c <<EOCP
13447#include <sys/types.h>
13448#include <stdio.h>
13449int main() {
a22e52b9
JH
13450 $uidtype foo = -1;
13451 if (foo < 0)
13452 printf("-1\n");
13453 else
13454 printf("1\n");
785fb66b
JH
13455}
13456EOCP
13457set try
a22e52b9 13458if eval $compile; then
785fb66b
JH
13459 yyy=`./try`
13460 case "$yyy" in
a22e52b9
JH
13461 '') uidsign=1
13462 echo "(I can't execute the test program--guessing unsigned.)" >&4
785fb66b 13463 ;;
a22e52b9
JH
13464 *) uidsign=$yyy
13465 case "$uidsign" in
13466 1) echo "Your $zzz is unsigned." ;;
13467 -1) echo "Your $zzz is signed." ;;
13468 esac
785fb66b
JH
13469 ;;
13470 esac
13471else
a22e52b9
JH
13472 uidsign=1
13473 echo "(I can't compile the test program--guessing unsigned.)" >&4
785fb66b
JH
13474fi
13475
a22e52b9
JH
13476
13477
13478echo " "
13479$echo "Checking the format string to be used for uids..." >&4
13480
13481case "$uidsign" in
13482-1) if $test X"$uidsize" = X"$ivsize"; then
13483 uidformat="$ivdformat"
13484 else
13485 if $test X"$uidsize" = X"$longsize"; then
13486 uidformat='"ld"'
13487 else
13488 if $test X"$uidsize" = X"$intsize"; then
13489 uidformat='"d"'
13490 else
13491 if $test X"$uidsize" = X"$shortsize"; then
13492 uidformat='"hd"'
13493 fi
13494 fi
13495 fi
13496 fi
13497 ;;
13498*) if $test X"$uidsize" = X"$uvsize"; then
13499 uidformat="$uvuformat"
13500 else
13501 if $test X"$uidsize" = X"$longsize"; then
13502 uidformat='"lu"'
13503 else
13504 if $test X"$uidsize" = X"$intsize"; then
13505 uidformat='"u"'
13506 else
13507 if $test X"$uidsize" = X"$shortsize"; then
13508 uidformat='"hu"'
13509 fi
13510 fi
13511 fi
13512 fi
13513 ;;
13514esac
13515
4633a7c4
LW
13516: see if dbm.h is available
13517: see if dbmclose exists
13518set dbmclose d_dbmclose
13519eval $inlibc
13520
13521case "$d_dbmclose" in
13522$define)
13523 set dbm.h i_dbm
13524 eval $inhdr
5f80c64f
JH
13525 case "$i_dbm" in
13526 $define)
13527 val="$undef"
13528 set i_rpcsvcdbm
13529 eval $setvar
13530 ;;
13531 *) set rpcsvc/dbm.h i_rpcsvcdbm
13532 eval $inhdr
13533 ;;
13534 esac
13535 ;;
13536*) echo "We won't be including <dbm.h>"
13537 val="$undef"
13538 set i_dbm
13539 eval $setvar
13540 val="$undef"
13541 set i_rpcsvcdbm
13542 eval $setvar
13543 ;;
13544esac
13545
13546: see if this is a sys/file.h system
13547val=''
13548set sys/file.h val
13549eval $inhdr
13550
13551: do we need to include sys/file.h ?
13552case "$val" in
13553"$define")
13554 echo " "
13555 if $h_sysfile; then
13556 val="$define"
13557 echo "We'll be including <sys/file.h>." >&4
13558 else
13559 val="$undef"
13560 echo "We won't be including <sys/file.h>." >&4
13561 fi
13562 ;;
13563*)
13564 h_sysfile=false
13565 ;;
13566esac
13567set i_sysfile
13568eval $setvar
13569
13570: see if fcntl.h is there
13571val=''
13572set fcntl.h val
13573eval $inhdr
13574
13575: see if we can include fcntl.h
13576case "$val" in
13577"$define")
13578 echo " "
13579 if $h_fcntl; then
13580 val="$define"
13581 echo "We'll be including <fcntl.h>." >&4
13582 else
13583 val="$undef"
13584 if $h_sysfile; then
13585 echo "We don't need to include <fcntl.h> if we include <sys/file.h>." >&4
13586 else
13587 echo "We won't be including <fcntl.h>." >&4
13588 fi
13589 fi
13590 ;;
13591*)
13592 h_fcntl=false
13593 val="$undef"
13594 ;;
13595esac
13596set i_fcntl
13597eval $setvar
13598
43999f95
JH
13599: see if this is a iconv.h system
13600set iconv.h i_iconv
13601eval $inhdr
13602
5f80c64f
JH
13603: see if locale.h is available
13604set locale.h i_locale
13605eval $inhdr
13606
7f3d1cf1 13607: see if mach cthreads are available
13666627
JH
13608if test "X$usethreads" = "X$define"; then
13609 set mach/cthreads.h i_machcthr
13610 eval $inhdr
13611else
13612 i_machcthr="$undef"
13613fi
13614
13615
7f3d1cf1 13616
5f80c64f
JH
13617: see if this is a math.h system
13618set math.h i_math
13619eval $inhdr
13620
e7fb4fcc
JH
13621: see if this is a mntent.h system
13622set mntent.h i_mntent
13623eval $inhdr
13624
5f80c64f
JH
13625: see if ndbm.h is available
13626set ndbm.h t_ndbm
13627eval $inhdr
13628case "$t_ndbm" in
13629$define)
13630 : see if dbm_open exists
13631 set dbm_open d_dbm_open
13632 eval $inlibc
13633 case "$d_dbm_open" in
13634 $undef)
13635 t_ndbm="$undef"
13636 echo "We won't be including <ndbm.h>"
13637 ;;
13638 esac
13639 ;;
13640esac
13641val="$t_ndbm"
13642set i_ndbm
13643eval $setvar
13644
13645: see if net/errno.h is available
13646val=''
13647set net/errno.h val
13648eval $inhdr
13649
13650: Unfortunately, it causes problems on some systems. Arrgh.
13651case "$val" in
13652$define)
13653 cat > try.c <<'EOM'
13654#include <stdio.h>
13655#include <errno.h>
13656#include <net/errno.h>
13657int func()
13658{
13659 return ENOTSOCK;
13660}
13661EOM
13662 if $cc $ccflags -c try.c >/dev/null 2>&1; then
13663 echo "We'll be including <net/errno.h>." >&4
13664 else
13665 echo "We won't be including <net/errno.h>." >&4
13666 val="$undef"
13667 fi
13668 $rm -f try.* try
13669 ;;
13670esac
13671set i_neterrno
13672eval $setvar
13673
9cc6feab
JH
13674: see if netinet/tcp.h is available
13675set netinet/tcp.h i_netinettcp
13676eval $inhdr
13677
5b34fd99
JH
13678: see if this is a poll.h system
13679set poll.h i_poll
13680eval $inhdr
13681
5f80c64f 13682echo " "
78691af5 13683$echo "Guessing which symbols your C compiler and preprocessor define..." >&4
43999f95
JH
13684$cat <<'EOSH' > Cppsym.know
13685a29k ABI64 aegis AES_SOURCE AIX AIX32 AIX370
13686AIX41 AIX42 AIX43 AIX_SOURCE aixpc ALL_SOURCE
13687alliant alpha am29000 AM29000 amiga AMIGAOS AMIX
13688ansi ANSI_C_SOURCE apollo ardent atarist att386 att3b BeOS
13689BIG_ENDIAN BIT_MSF bsd BSD bsd43 bsd4_2 bsd4_3 BSD4_3 bsd4_4
13690BSD_4_3 BSD_4_4 BSD_NET2 BSD_TIME BSD_TYPES BSDCOMPAT bsdi
13691bull c cadmus clipper CMU COFF COMPILER_VERSION
13692concurrent convex cpu cray CRAY CRAYMPP ctix CX_UX
13693CYGWIN DGUX DGUX_SOURCE DJGPP dmert DOLPHIN DPX2 DSO
13694Dynix DynixPTX ELF encore EPI EXTENSIONS FILE_OFFSET_BITS
13695FreeBSD GCC_NEW_VARARGS gcos gcx gimpel
13696GNU_SOURCE GNUC GNUC_MINOR GO32 gould GOULD_PN
13697H3050R H3050RX hbullx20 hcx host_mips
13698hp200 hp300 hp700 HP700 hp800 hp9000
13699hp9000s200 hp9000s300 hp9000s400 hp9000s500
13700hp9000s700 hp9000s800 hp9k8 hp_osf hppa hpux HPUX_SOURCE
13701i186 i286 i386 i486 i586 i686 i8086 i80960 i860 I960
13702iAPX286 ibm ibm032 ibmesa IBMR2 ibmrt ILP32 ILP64
13703INLINE_INTRINSICS INTRINSICS INT64 interdata is68k ksr1
13704LANGUAGE_C LARGE_FILE_API LARGEFILE64_SOURCE
13705LARGEFILE_SOURCE LFS64_LARGEFILE LFS_LARGEFILE
13706Linux LITTLE_ENDIAN LONG64 LONG_DOUBLE LONG_LONG
13707LONGDOUBLE LONGLONG LP64 luna luna88k Lynx
13708M68000 m68k m88100 m88k M88KBCS_TARGET M_COFF
13709M_I186 M_I286 M_I386 M_I8086 M_I86 M_I86SM M_SYS3
13710M_SYS5 M_SYSIII M_SYSV M_UNIX M_XENIX MACH machine MachTen
13711MATH_HAS_NO_SIDE_EFFECTS
13712mc300 mc500 mc68000 mc68010 mc68020 mc68030 mc68040
13713mc68060 mc68k mc68k32 mc700 mc88000 mc88100 merlin
13714mert MiNT mips MIPS_FPSET MIPS_ISA MIPS_SIM MIPS_SZINT
13715MIPS_SZLONG MIPS_SZPTR MIPSEB MIPSEL MODERN_C motorola
13716mpeix MSDOS MTXINU MULTIMAX mvs MVS n16 ncl_el ncl_mr
13717NetBSD news1500 news1700 news1800 news1900 news3700
13718news700 news800 news900 NeXT NLS ns16000 ns32000
13719ns32016 ns32332 ns32k nsc32000
13720OCS88 OEMVS OpenBSD os OS2 OS390 osf OSF1 OSF_SOURCE
13721pa_risc PA_RISC1_1 PA_RISC2_0 PARAGON parisc
13722pc532 pdp11 PGC PIC plexus PORTAR posix
13723POSIX1B_SOURCE POSIX2_SOURCE POSIX4_SOURCE
13724POSIX_C_SOURCE POSIX_SOURCE POWER
13725PROTOTYPES PWB pyr QNX R3000 REENTRANT RES Rhapsody RISC6000
13726riscix riscos RT scs SCO sequent sgi SGI_SOURCE sinix
13727SIZE_INT SIZE_LONG SIZE_PTR SOCKET_SOURCE SOCKETS_SOURCE
13728sony sony_news sonyrisc sparc sparclite spectrum
13729stardent stdc STDC_EXT stratos sun sun3 sun386
13730Sun386i svr3 svr4 SVR4_2 SVR4_SOURCE svr5
13731SX system SYSTYPE_BSD SYSTYPE_BSD43 SYSTYPE_BSD44
13732SYSTYPE_SVR4 SYSTYPE_SVR5 SYSTYPE_SYSV SYSV SYSV3 SYSV4 SYSV5
13733sysV68 sysV88 Tek4132 Tek4300 titan
13734tower tower32 tower32_200 tower32_600 tower32_700
13735tower32_800 tower32_850 tss
13736u370 u3b u3b2 u3b20 u3b200 u3b20d u3b5
13737ultrix UMAXV UnicomPBB UnicomPBD UNICOS UNICOSMK
13738unix UNIX95 UNIX99 unixpc unos USGr4 USGr4_2
13739Utek UTek UTS UWIN uxpm uxps vax venix VMESA vms xenix Xenix286
13740XOPEN_SOURCE XOPEN_SOURCE_EXTENDED XPG2 XPG2_EXTENDED
13741XPG3 XPG3_EXTENDED XPG4 XPG4_EXTENDED
13742z8000
13743EOSH
13744# Maybe put other stuff here too.
13745cat <<EOSH >>Cppsym.know
13746$osname
13747EOSH
9b97abf7
JH
13748./tr '[a-z]' '[A-Z]' < Cppsym.know > Cppsym.a
13749./tr '[A-Z]' '[a-z]' < Cppsym.know > Cppsym.b
43999f95
JH
13750$cat Cppsym.a Cppsym.b | $tr ' ' $trnl | sort | uniq > Cppsym.know
13751$rm -f Cppsym.a Cppsym.b
13752cat <<EOSH > Cppsym
5f80c64f 13753$startsh
43999f95
JH
13754if $test \$# -gt 0; then
13755 echo \$* | $tr " " "$trnl" | ./Cppsym.try > Cppsym.got
13756 if $test -s Cppsym.got; then
13757 $rm -f Cppsym.got
13758 exit 0
13759 fi
13760 $rm -f Cppsym.got
13761 exit 1
13762else
13763 $tr " " "$trnl" | ./Cppsym.try
13764 exit 0
13765fi
13766EOSH
5f80c64f
JH
13767chmod +x Cppsym
13768$eunicefix Cppsym
43999f95
JH
13769cat <<EOSH > Cppsym.try
13770$startsh
13771cat <<'EOCP' > try.c
13772#include <stdio.h>
13773int main() {
13774EOCP
13775$awk \\
13776EOSH
13777cat <<'EOSH' >> Cppsym.try
13778'length($1) > 0 {
13779 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
13780 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
13781 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
13782 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
13783}' >> try.c
13784echo '}' >> try.c
13785EOSH
13786cat <<EOSH >> Cppsym.try
13787cc="$cc"
13788optimize="$optimize"
13789ccflags="$ccflags"
13790ldflags="$ldflags"
13791libs="$libs"
13792exe_ext="$exe_ext"
13793$cc $optimize $ccflags $ldflags -o try$exe_ext try.c $libs && ./try$exe_ext
13794EOSH
13795chmod +x Cppsym.try
13796$eunicefix Cppsym.try
13797./Cppsym < Cppsym.know > Cppsym.true
5f80c64f 13798: now check the C compiler for additional symbols
c4747d3e
JH
13799postprocess_cc_v=''
13800case "$osname" in
13801aix) postprocess_cc_v="|$tr , ' '" ;;
13802esac
5f80c64f
JH
13803$cat >ccsym <<EOS
13804$startsh
13805$cat >tmp.c <<EOF
13806extern int foo;
13807EOF
c4747d3e 13808for i in \`$cc -v -c tmp.c 2>&1 $postprocess_cc_v\`
5f80c64f
JH
13809do
13810 case "\$i" in
13811 -D*) echo "\$i" | $sed 's/^-D//';;
13812 -A*) $test "$gccversion" && echo "\$i" | $sed 's/^-A\(.*\)(\(.*\))/\1=\2/';;
13813 esac
13814done
13815$rm -f try.c
13816EOS
2000072c 13817postprocess_cc_v=''
5f80c64f
JH
13818chmod +x ccsym
13819$eunicefix ccsym
13820./ccsym > ccsym1.raw
13821if $test -s ccsym1.raw; then
13822 $sort ccsym1.raw | $uniq >ccsym.raw
13823else
13824 mv ccsym1.raw ccsym.raw
13825fi
13826
13827$awk '/\=/ { print $0; next }
13828 { print $0"=1" }' ccsym.raw >ccsym.list
43999f95
JH
13829$awk '/\=/ { print $0; next }
13830 { print $0"=1" }' Cppsym.true >ccsym.true
5f80c64f
JH
13831$comm -13 ccsym.true ccsym.list >ccsym.own
13832$comm -12 ccsym.true ccsym.list >ccsym.com
13833$comm -23 ccsym.true ccsym.list >ccsym.cpp
13834also=''
5f80c64f 13835if $test -z ccsym.raw; then
ff49bff8 13836 echo "Your C compiler doesn't seem to define any symbols!" >&4
5f80c64f 13837 echo " "
ff49bff8 13838 echo "However, your C preprocessor defines the following symbols:"
5f80c64f 13839 $cat Cppsym.true
ff49bff8
JH
13840 ccsymbols=''
13841 cppsymbols=`$cat Cppsym.true`
918c3d21 13842 cppsymbols=`echo $cppsymbols`
ff49bff8 13843 cppccsymbols="$cppsymbols"
5f80c64f
JH
13844else
13845 if $test -s ccsym.com; then
13846 echo "Your C compiler and pre-processor define these symbols:"
13847 $sed -e 's/\(.*\)=.*/\1/' ccsym.com
13848 also='also '
13849 symbols='ones'
ff49bff8 13850 cppccsymbols=`$cat ccsym.com`
918c3d21 13851 cppccsymbols=`echo $cppccsymbols`
5f80c64f
JH
13852 $test "$silent" || sleep 1
13853 fi
13854 if $test -s ccsym.cpp; then
13855 $test "$also" && echo " "
ff49bff8 13856 echo "Your C pre-processor ${also}defines the following symbols:"
5f80c64f
JH
13857 $sed -e 's/\(.*\)=.*/\1/' ccsym.cpp
13858 also='further '
ff49bff8 13859 cppsymbols=`$cat ccsym.cpp`
918c3d21 13860 cppsymbols=`echo $cppsymbols`
5f80c64f
JH
13861 $test "$silent" || sleep 1
13862 fi
13863 if $test -s ccsym.own; then
13864 $test "$also" && echo " "
ff49bff8 13865 echo "Your C compiler ${also}defines the following cpp symbols:"
5f80c64f
JH
13866 $sed -e 's/\(.*\)=1/\1/' ccsym.own
13867 $sed -e 's/\(.*\)=.*/\1/' ccsym.own | $uniq >>Cppsym.true
ff49bff8 13868 ccsymbols=`$cat ccsym.own`
918c3d21 13869 ccsymbols=`echo $ccsymbols`
5f80c64f
JH
13870 $test "$silent" || sleep 1
13871 fi
13872fi
13873$rm -f ccsym*
13874
13875: see if this is a termio system
13876val="$undef"
13877val2="$undef"
13878val3="$undef"
13879if $test `./findhdr termios.h`; then
13880 set tcsetattr i_termios
13881 eval $inlibc
13882 val3="$i_termios"
13883fi
13884echo " "
13885case "$val3" in
13886"$define") echo "You have POSIX termios.h... good!" >&4;;
13887*) if ./Cppsym pyr; then
13888 case "`/bin/universe`" in
13889 ucb) if $test `./findhdr sgtty.h`; then
13890 val2="$define"
13891 echo "<sgtty.h> found." >&4
13892 else
13893 echo "System is pyramid with BSD universe."
13894 echo "<sgtty.h> not found--you could have problems." >&4
13895 fi;;
13896 *) if $test `./findhdr termio.h`; then
13897 val="$define"
13898 echo "<termio.h> found." >&4
13899 else
13900 echo "System is pyramid with USG universe."
13901 echo "<termio.h> not found--you could have problems." >&4
13902 fi;;
13903 esac
13904 elif ./usg; then
13905 if $test `./findhdr termio.h`; then
13906 echo "<termio.h> found." >&4
13907 val="$define"
13908 elif $test `./findhdr sgtty.h`; then
13909 echo "<sgtty.h> found." >&4
13910 val2="$define"
13911 else
13912echo "Neither <termio.h> nor <sgtty.h> found--you could have problems." >&4
13913 fi
13914 else
13915 if $test `./findhdr sgtty.h`; then
13916 echo "<sgtty.h> found." >&4
13917 val2="$define"
13918 elif $test `./findhdr termio.h`; then
13919 echo "<termio.h> found." >&4
13920 val="$define"
13921 else
13922echo "Neither <sgtty.h> nor <termio.h> found--you could have problems." >&4
13923 fi
13924 fi;;
13925esac
13926set i_termio; eval $setvar
13927val=$val2; set i_sgtty; eval $setvar
13928val=$val3; set i_termios; eval $setvar
13929
f1066039
JH
13930: see if this is a shadow.h system
13931set shadow.h i_shadow
13932eval $inhdr
13933
86959918
JH
13934: see if this is a socks.h system
13935set socks.h i_socks
13936eval $inhdr
13937
5f80c64f
JH
13938: see if stdarg is available
13939echo " "
13940if $test `./findhdr stdarg.h`; then
13941 echo "<stdarg.h> found." >&4
13942 valstd="$define"
13943else
13944 echo "<stdarg.h> NOT found." >&4
13945 valstd="$undef"
13946fi
13947
13948: see if varags is available
13949echo " "
13950if $test `./findhdr varargs.h`; then
13951 echo "<varargs.h> found." >&4
13952else
13953 echo "<varargs.h> NOT found, but that's ok (I hope)." >&4
13954fi
13955
13956: set up the varargs testing programs
13957$cat > varargs.c <<EOP
13958#ifdef I_STDARG
13959#include <stdarg.h>
13960#endif
13961#ifdef I_VARARGS
13962#include <varargs.h>
13963#endif
13964
13965#ifdef I_STDARG
13966int f(char *p, ...)
13967#else
13968int f(va_alist)
13969va_dcl
13970#endif
13971{
13972 va_list ap;
13973#ifndef I_STDARG
13974 char *p;
13975#endif
13976#ifdef I_STDARG
13977 va_start(ap,p);
13978#else
13979 va_start(ap);
13980 p = va_arg(ap, char *);
13981#endif
13982 va_end(ap);
13983}
13984EOP
13985$cat > varargs <<EOP
13986$startsh
13987if $cc -c $ccflags -D\$1 varargs.c >/dev/null 2>&1; then
13988 echo "true"
13989else
13990 echo "false"
13991fi
13992$rm -f varargs$_o
13993EOP
13994chmod +x varargs
13995
13996: now check which varargs header should be included
13997echo " "
13998i_varhdr=''
13999case "$valstd" in
14000"$define")
14001 if `./varargs I_STDARG`; then
14002 val='stdarg.h'
14003 elif `./varargs I_VARARGS`; then
14004 val='varargs.h'
14005 fi
14006 ;;
14007*)
14008 if `./varargs I_VARARGS`; then
14009 val='varargs.h'
14010 fi
14011 ;;
14012esac
14013case "$val" in
14014'')
14015echo "I could not find the definition for va_dcl... You have problems..." >&4
14016 val="$undef"; set i_stdarg; eval $setvar
14017 val="$undef"; set i_varargs; eval $setvar
14018 ;;
14019*)
14020 set i_varhdr
14021 eval $setvar
14022 case "$i_varhdr" in
14023 stdarg.h)
14024 val="$define"; set i_stdarg; eval $setvar
14025 val="$undef"; set i_varargs; eval $setvar
14026 ;;
14027 varargs.h)
14028 val="$undef"; set i_stdarg; eval $setvar
14029 val="$define"; set i_varargs; eval $setvar
14030 ;;
14031 esac
14032 echo "We'll include <$i_varhdr> to get va_dcl definition." >&4;;
14033esac
14034$rm -f varargs*
14035
14036: see if stddef is available
14037set stddef.h i_stddef
14038eval $inhdr
14039
14040: see if sys/access.h is available
14041set sys/access.h i_sysaccess
14042eval $inhdr
14043
14044: see if ioctl defs are in sgtty, termio, sys/filio or sys/ioctl
14045set sys/filio.h i_sysfilio
14046eval $inhdr
14047echo " "
14048if $test `./findhdr sys/ioctl.h`; then
14049 val="$define"
14050 echo '<sys/ioctl.h> found.' >&4
14051else
14052 val="$undef"
14053 if $test $i_sysfilio = "$define"; then
14054 echo '<sys/ioctl.h> NOT found.' >&4
14055 else
14056 $test $i_sgtty = "$define" && xxx="sgtty.h"
14057 $test $i_termio = "$define" && xxx="termio.h"
14058 $test $i_termios = "$define" && xxx="termios.h"
14059echo "No <sys/ioctl.h> found, assuming ioctl args are defined in <$xxx>." >&4
14060 fi
14061fi
14062set i_sysioctl
14063eval $setvar
14064
5f80c64f
JH
14065: see if sys/resource.h has to be included
14066set sys/resource.h i_sysresrc
14067eval $inhdr
14068
14069: see if sys/security.h is available
14070set sys/security.h i_syssecrt
14071eval $inhdr
14072
104d25b7
JH
14073: see if this is a sys/statvfs.h system
14074set sys/statvfs.h i_sysstatvfs
14075eval $inhdr
14076
b7b35fc2
JH
14077: see if this is a sys/uio.h system
14078set sys/uio.h i_sysuio
14079eval $inhdr
14080
5f80c64f
JH
14081: see if this is a sys/un.h system
14082set sys/un.h i_sysun
14083eval $inhdr
14084
14085: see if this is a syswait system
14086set sys/wait.h i_syswait
14087eval $inhdr
14088
0545a864
JH
14089: see if this is a ustat.h system
14090set ustat.h i_ustat
14091eval $inhdr
14092
5f80c64f
JH
14093: see if this is an utime system
14094set utime.h i_utime
14095eval $inhdr
14096
14097: see if this is a values.h system
14098set values.h i_values
14099eval $inhdr
14100
14101: see if this is a vfork system
14102case "$d_vfork" in
14103"$define")
14104 set vfork.h i_vfork
14105 eval $inhdr
14106 ;;
14107*)
14108 i_vfork="$undef"
14109 ;;
14110esac
14111
14112: see if gdbm.h is available
14113set gdbm.h t_gdbm
14114eval $inhdr
14115case "$t_gdbm" in
14116$define)
14117 : see if gdbm_open exists
14118 set gdbm_open d_gdbm_open
14119 eval $inlibc
14120 case "$d_gdbm_open" in
14121 $undef)
14122 t_gdbm="$undef"
14123 echo "We won't be including <gdbm.h>"
14124 ;;
14125 esac
14126 ;;
14127esac
14128val="$t_gdbm"
14129set i_gdbm
14130eval $setvar
14131
14132echo " "
14133echo "Looking for extensions..." >&4
5f80c64f
JH
14134: If we are using the old config.sh, known_extensions may contain
14135: old or inaccurate or duplicate values.
14136known_extensions=''
14137nonxs_extensions=''
14138: We do not use find because it might not be available.
14139: We do not just use MANIFEST because the user may have dropped
14140: some additional extensions into the source tree and expect them
14141: to be built.
7e791ca9
NK
14142
14143: Function to recursively find available extensions, ignoring DynaLoader
14144: NOTE: recursion limit of 10 to prevent runaway in case of symlink madness
14145find_extensions='
14146 for xxx in *; do
14147 case "$xxx" in
14148 DynaLoader|dynaload) ;;
14149 *)
14150 if $test -f $xxx/$xxx.xs; then
14151 known_extensions="$known_extensions $1$xxx";
14152 elif $test -f $xxx/Makefile.PL; then
14153 nonxs_extensions="$nonxs_extensions $1$xxx";
14154 else
14155 if $test -d $xxx -a $# -lt 10; then
14156 set $1$xxx/ $*;
14157 cd $xxx;
14158 eval $find_extensions;
14159 cd ..;
14160 shift;
9f50e519 14161 fi;
7e791ca9
NK
14162 fi
14163 ;;
9f50e519 14164 esac;
7e791ca9
NK
14165 done'
14166tdir=`pwd`
14167cd $rsrc/ext
a3635516 14168set X
efdb23e1 14169shift
7e791ca9 14170eval $find_extensions
5f80c64f
JH
14171set X $nonxs_extensions
14172shift
14173nonxs_extensions="$*"
14174set X $known_extensions
14175shift
14176known_extensions="$*"
14177cd $tdir
14178
14179: Now see which are supported on this system.
14180avail_ext=''
14181for xxx in $known_extensions ; do
14182 case "$xxx" in
14183 DB_File|db_file)
14184 case "$i_db" in
14185 $define) avail_ext="$avail_ext $xxx" ;;
14186 esac
14187 ;;
14188 GDBM_File|gdbm_fil)
14189 case "$i_gdbm" in
14190 $define) avail_ext="$avail_ext $xxx" ;;
14191 esac
14192 ;;
14193 NDBM_File|ndbm_fil)
14194 case "$i_ndbm" in
14195 $define) avail_ext="$avail_ext $xxx" ;;
14196 esac
14197 ;;
14198 ODBM_File|odbm_fil)
14199 case "${i_dbm}${i_rpcsvcdbm}" in
14200 *"${define}"*) avail_ext="$avail_ext $xxx" ;;
14201 esac
14202 ;;
14203 POSIX|posix)
14204 case "$useposix" in
14205 true|define|y) avail_ext="$avail_ext $xxx" ;;
14206 esac
14207 ;;
14208 Opcode|opcode)
14209 case "$useopcode" in
14210 true|define|y) avail_ext="$avail_ext $xxx" ;;
14211 esac
14212 ;;
14213 Socket|socket)
14214 case "$d_socket" in
14215 true|$define|y) avail_ext="$avail_ext $xxx" ;;
14216 esac
14217 ;;
14218 Thread|thread)
14219 case "$usethreads" in
14220 true|$define|y) avail_ext="$avail_ext $xxx" ;;
14221 esac
14222 ;;
14223 IPC/SysV|ipc/sysv)
14224 : XXX Do we need a useipcsysv variable here
14225 case "${d_msg}${d_sem}${d_shm}" in
14226 *"${define}"*) avail_ext="$avail_ext $xxx" ;;
14227 esac
14228 ;;
14229 *) avail_ext="$avail_ext $xxx"
14230 ;;
14231 esac
14232done
14233
14234set X $avail_ext
14235shift
14236avail_ext="$*"
14237
14238: Now see which nonxs extensions are supported on this system.
14239: For now assume all are.
14240nonxs_ext=''
14241for xxx in $nonxs_extensions ; do
14242 case "$xxx" in
14243 *) nonxs_ext="$nonxs_ext $xxx"
14244 ;;
14245 esac
14246done
14247
14248set X $nonxs_ext
14249shift
14250nonxs_ext="$*"
14251
14252case $usedl in
14253$define)
14254 $cat <<EOM
14255A number of extensions are supplied with $package. You may choose to
14256compile these extensions for dynamic loading (the default), compile
14257them into the $package executable (static loading), or not include
14258them at all. Answer "none" to include no extensions.
14259Note that DynaLoader is always built and need not be mentioned here.
14260
14261EOM
14262 case "$dynamic_ext" in
14263 '') dflt="$avail_ext" ;;
14264 *) dflt="$dynamic_ext"
14265 # Perhaps we are reusing an old out-of-date config.sh.
14266 case "$hint" in
14267 previous)
14268 if test X"$dynamic_ext" != X"$avail_ext"; then
14269 $cat <<EOM
14270NOTICE: Your previous config.sh list may be incorrect.
14271The extensions now available to you are
14272 ${avail_ext}
14273but the default list from your previous config.sh is
14274 ${dynamic_ext}
14275
14276EOM
14277 fi
14278 ;;
14279 esac
14280 ;;
14281 esac
14282 case "$dflt" in
14283 '') dflt=none;;
14284 esac
14285 rp="What extensions do you wish to load dynamically?"
14286 . ./myread
14287 case "$ans" in
14288 none) dynamic_ext=' ' ;;
14289 *) dynamic_ext="$ans" ;;
14290 esac
14291
14292 case "$static_ext" in
14293 '')
14294 : Exclude those already listed in dynamic linking
14295 dflt=''
14296 for xxx in $avail_ext; do
14297 case " $dynamic_ext " in
14298 *" $xxx "*) ;;
14299 *) dflt="$dflt $xxx" ;;
14300 esac
14301 done
14302 set X $dflt
14303 shift
14304 dflt="$*"
14305 ;;
14306 *) dflt="$static_ext"
14307 ;;
14308 esac
14309
14310 case "$dflt" in
14311 '') dflt=none;;
14312 esac
14313 rp="What extensions do you wish to load statically?"
14314 . ./myread
14315 case "$ans" in
14316 none) static_ext=' ' ;;
14317 *) static_ext="$ans" ;;
14318 esac
14319 ;;
14320*)
14321 $cat <<EOM
14322A number of extensions are supplied with $package. Answer "none"
14323to include no extensions.
14324Note that DynaLoader is always built and need not be mentioned here.
14325
14326EOM
14327 case "$static_ext" in
14328 '') dflt="$avail_ext" ;;
14329 *) dflt="$static_ext"
14330 # Perhaps we are reusing an old out-of-date config.sh.
14331 case "$hint" in
14332 previous)
14333 if test X"$static_ext" != X"$avail_ext"; then
14334 $cat <<EOM
14335NOTICE: Your previous config.sh list may be incorrect.
14336The extensions now available to you are
14337 ${avail_ext}
14338but the default list from your previous config.sh is
14339 ${static_ext}
14340
14341EOM
14342 fi
14343 ;;
14344 esac
14345 ;;
14346 esac
14347 : Exclude those that are not xs extensions
14348 case "$dflt" in
14349 '') dflt=none;;
14350 esac
14351 rp="What extensions do you wish to include?"
14352 . ./myread
14353 case "$ans" in
14354 none) static_ext=' ' ;;
14355 *) static_ext="$ans" ;;
14356 esac
14357 ;;
14358esac
14359
14360set X $dynamic_ext $static_ext $nonxs_ext
14361shift
14362extensions="$*"
14363
14364: Remove build directory name from cppstdin so it can be used from
14365: either the present location or the final installed location.
14366echo " "
14367: Get out of the UU directory to get correct path name.
14368cd ..
14369case "$cppstdin" in
14370`pwd`/cppstdin)
14371 echo "Stripping down cppstdin path name"
14372 cppstdin=cppstdin
14373 ;;
14374esac
14375cd UU
14376
14377: end of configuration questions
14378echo " "
14379echo "End of configuration questions."
14380echo " "
14381
14382: back to where it started
14383if test -d ../UU; then
14384 cd ..
14385fi
14386
14387: configuration may be patched via a 'config.over' file
14388if $test -f config.over; then
14389 echo " "
14390 dflt=y
14391 rp='I see a config.over file. Do you wish to load it?'
14392 . UU/myread
14393 case "$ans" in
14394 n*) echo "OK, I'll ignore it.";;
14395 *) . ./config.over
14396 echo "Configuration override changes have been loaded."
14397 ;;
14398 esac
14399fi
14400
14401: in case they want portability, strip down executable paths
14402case "$d_portable" in
14403"$define")
14404 echo " "
14405 echo "Stripping down executable paths..." >&4
14406 for file in $loclist $trylist; do
534ac15a
JH
14407 eval temp=\$$file
14408 eval $file=`basename $temp`
5f80c64f
JH
14409 done
14410 ;;
14411esac
14412
14413: create config.sh file
14414echo " "
14415echo "Creating config.sh..." >&4
14416$spitshell <<EOT >config.sh
14417$startsh
14418#
14419# This file was produced by running the Configure script. It holds all the
14420# definitions figured out by Configure. Should you modify one of these values,
14421# do not forget to propagate your changes by running "Configure -der". You may
14422# instead choose to run each of the .SH files by yourself, or "Configure -S".
14423#
14424
14425# Package name : $package
14426# Source directory : $src
14427# Configuration time: $cf_time
14428# Configured by : $cf_by
14429# Target system : $myuname
14430
14431Author='$Author'
14432Date='$Date'
14433Header='$Header'
14434Id='$Id'
14435Locker='$Locker'
14436Log='$Log'
14437Mcc='$Mcc'
14438RCSfile='$RCSfile'
14439Revision='$Revision'
14440Source='$Source'
14441State='$State'
14442_a='$_a'
14443_exe='$_exe'
14444_o='$_o'
14445afs='$afs'
14446alignbytes='$alignbytes'
14447ansi2knr='$ansi2knr'
14448aphostname='$aphostname'
ff935051
JH
14449api_revision='$api_revision'
14450api_subversion='$api_subversion'
14451api_version='$api_version'
14452api_versionstring='$api_versionstring'
5f80c64f
JH
14453ar='$ar'
14454archlib='$archlib'
14455archlibexp='$archlibexp'
14456archname64='$archname64'
14457archname='$archname'
14458archobjs='$archobjs'
14459awk='$awk'
14460baserev='$baserev'
14461bash='$bash'
14462bin='$bin'
d71b2b6b 14463bincompat5005='$bincompat5005'
5f80c64f
JH
14464binexp='$binexp'
14465bison='$bison'
14466byacc='$byacc'
14467byteorder='$byteorder'
14468c='$c'
14469castflags='$castflags'
14470cat='$cat'
14471cc='$cc'
14472cccdlflags='$cccdlflags'
14473ccdlflags='$ccdlflags'
14474ccflags='$ccflags'
ff49bff8 14475ccsymbols='$ccsymbols'
5f80c64f
JH
14476cf_by='$cf_by'
14477cf_email='$cf_email'
14478cf_time='$cf_time'
8175356b 14479charsize='$charsize'
5f80c64f
JH
14480chgrp='$chgrp'
14481chmod='$chmod'
14482chown='$chown'
14483clocktype='$clocktype'
14484comm='$comm'
14485compress='$compress'
14486contains='$contains'
14487cp='$cp'
14488cpio='$cpio'
14489cpp='$cpp'
14490cpp_stuff='$cpp_stuff'
ff49bff8 14491cppccsymbols='$cppccsymbols'
5f80c64f
JH
14492cppflags='$cppflags'
14493cpplast='$cpplast'
14494cppminus='$cppminus'
14495cpprun='$cpprun'
14496cppstdin='$cppstdin'
ff49bff8 14497cppsymbols='$cppsymbols'
68c15b6f 14498crosscompile='$crosscompile'
5f80c64f
JH
14499cryptlib='$cryptlib'
14500csh='$csh'
14501d_Gconvert='$d_Gconvert'
cf2093f6
JH
14502d_PRIEldbl='$d_PRIEldbl'
14503d_PRIFldbl='$d_PRIFldbl'
14504d_PRIGldbl='$d_PRIGldbl'
14505d_PRIX64='$d_PRIX64'
14506d_PRId64='$d_PRId64'
14507d_PRIeldbl='$d_PRIeldbl'
14508d_PRIfldbl='$d_PRIfldbl'
14509d_PRIgldbl='$d_PRIgldbl'
14510d_PRIi64='$d_PRIi64'
14511d_PRIo64='$d_PRIo64'
14512d_PRIu64='$d_PRIu64'
14513d_PRIx64='$d_PRIx64'
5f80c64f
JH
14514d_access='$d_access'
14515d_accessx='$d_accessx'
14516d_alarm='$d_alarm'
14517d_archlib='$d_archlib'
cf2093f6
JH
14518d_atolf='$d_atolf'
14519d_atoll='$d_atoll'
5f80c64f
JH
14520d_attribut='$d_attribut'
14521d_bcmp='$d_bcmp'
14522d_bcopy='$d_bcopy'
d71b2b6b 14523d_bincompat5005='$d_bincompat5005'
5f80c64f
JH
14524d_bsd='$d_bsd'
14525d_bsdgetpgrp='$d_bsdgetpgrp'
14526d_bsdsetpgrp='$d_bsdsetpgrp'
14527d_bzero='$d_bzero'
14528d_casti32='$d_casti32'
14529d_castneg='$d_castneg'
14530d_charvspr='$d_charvspr'
14531d_chown='$d_chown'
14532d_chroot='$d_chroot'
14533d_chsize='$d_chsize'
14534d_closedir='$d_closedir'
14535d_const='$d_const'
14536d_crypt='$d_crypt'
14537d_csh='$d_csh'
14538d_cuserid='$d_cuserid'
14539d_dbl_dig='$d_dbl_dig'
5f80c64f 14540d_difftime='$d_difftime'
5f80c64f
JH
14541d_dirnamlen='$d_dirnamlen'
14542d_dlerror='$d_dlerror'
14543d_dlopen='$d_dlopen'
14544d_dlsymun='$d_dlsymun'
14545d_dosuid='$d_dosuid'
14546d_drand48proto='$d_drand48proto'
14547d_dup2='$d_dup2'
14548d_eaccess='$d_eaccess'
14549d_endgrent='$d_endgrent'
14550d_endhent='$d_endhent'
14551d_endnent='$d_endnent'
14552d_endpent='$d_endpent'
14553d_endpwent='$d_endpwent'
14554d_endsent='$d_endsent'
f1066039 14555d_endspent='$d_endspent'
5f80c64f
JH
14556d_eofnblk='$d_eofnblk'
14557d_eunice='$d_eunice'
14558d_fchmod='$d_fchmod'
14559d_fchown='$d_fchown'
14560d_fcntl='$d_fcntl'
14561d_fd_macros='$d_fd_macros'
14562d_fd_set='$d_fd_set'
14563d_fds_bits='$d_fds_bits'
5f80c64f 14564d_fgetpos='$d_fgetpos'
5f80c64f 14565d_flexfnam='$d_flexfnam'
5f80c64f 14566d_flock='$d_flock'
5f80c64f
JH
14567d_fork='$d_fork'
14568d_fpathconf='$d_fpathconf'
d9b3e12d 14569d_fpos64_t='$d_fpos64_t'
0545a864 14570d_fs_data_s='$d_fs_data_s'
5f80c64f 14571d_fseeko='$d_fseeko'
5f80c64f 14572d_fsetpos='$d_fsetpos'
104d25b7
JH
14573d_fstatfs='$d_fstatfs'
14574d_fstatvfs='$d_fstatvfs'
5f80c64f
JH
14575d_ftello='$d_ftello'
14576d_ftime='$d_ftime'
5f80c64f
JH
14577d_getgrent='$d_getgrent'
14578d_getgrps='$d_getgrps'
14579d_gethbyaddr='$d_gethbyaddr'
14580d_gethbyname='$d_gethbyname'
14581d_gethent='$d_gethent'
14582d_gethname='$d_gethname'
14583d_gethostprotos='$d_gethostprotos'
14584d_getlogin='$d_getlogin'
ad27e871 14585d_getmnt='$d_getmnt'
ccc7f9b3 14586d_getmntent='$d_getmntent'
5f80c64f
JH
14587d_getnbyaddr='$d_getnbyaddr'
14588d_getnbyname='$d_getnbyname'
14589d_getnent='$d_getnent'
14590d_getnetprotos='$d_getnetprotos'
14591d_getpbyname='$d_getpbyname'
14592d_getpbynumber='$d_getpbynumber'
14593d_getpent='$d_getpent'
14594d_getpgid='$d_getpgid'
14595d_getpgrp2='$d_getpgrp2'
14596d_getpgrp='$d_getpgrp'
14597d_getppid='$d_getppid'
14598d_getprior='$d_getprior'
14599d_getprotoprotos='$d_getprotoprotos'
14600d_getpwent='$d_getpwent'
14601d_getsbyname='$d_getsbyname'
14602d_getsbyport='$d_getsbyport'
14603d_getsent='$d_getsent'
14604d_getservprotos='$d_getservprotos'
f1066039
JH
14605d_getspent='$d_getspent'
14606d_getspnam='$d_getspnam'
5f80c64f
JH
14607d_gettimeod='$d_gettimeod'
14608d_gnulibc='$d_gnulibc'
14609d_grpasswd='$d_grpasswd'
ccc7f9b3 14610d_hasmntopt='$d_hasmntopt'
5f80c64f 14611d_htonl='$d_htonl'
43999f95 14612d_iconv='$d_iconv'
5f80c64f
JH
14613d_index='$d_index'
14614d_inetaton='$d_inetaton'
5f80c64f
JH
14615d_int64t='$d_int64t'
14616d_isascii='$d_isascii'
14617d_killpg='$d_killpg'
14618d_lchown='$d_lchown'
2d4389e4 14619d_ldbl_dig='$d_ldbl_dig'
5f80c64f
JH
14620d_link='$d_link'
14621d_locconv='$d_locconv'
5f80c64f
JH
14622d_lockf='$d_lockf'
14623d_longdbl='$d_longdbl'
14624d_longlong='$d_longlong'
5f80c64f
JH
14625d_lstat='$d_lstat'
14626d_mblen='$d_mblen'
14627d_mbstowcs='$d_mbstowcs'
14628d_mbtowc='$d_mbtowc'
0f27ced1 14629d_memchr='$d_memchr'
5f80c64f
JH
14630d_memcmp='$d_memcmp'
14631d_memcpy='$d_memcpy'
14632d_memmove='$d_memmove'
14633d_memset='$d_memset'
14634d_mkdir='$d_mkdir'
14635d_mkfifo='$d_mkfifo'
14636d_mktime='$d_mktime'
14637d_msg='$d_msg'
de4597cb
JH
14638d_msg_ctrunc='$d_msg_ctrunc'
14639d_msg_dontroute='$d_msg_dontroute'
14640d_msg_oob='$d_msg_oob'
14641d_msg_peek='$d_msg_peek'
14642d_msg_proxy='$d_msg_proxy'
5f80c64f
JH
14643d_msgctl='$d_msgctl'
14644d_msgget='$d_msgget'
14645d_msgrcv='$d_msgrcv'
14646d_msgsnd='$d_msgsnd'
14647d_mymalloc='$d_mymalloc'
5f80c64f 14648d_nice='$d_nice'
78691af5 14649d_nv_preserves_uv='$d_nv_preserves_uv'
2000072c 14650d_off64_t='$d_off64_t'
ef4af2be 14651d_old_pthread_create_joinable='$d_old_pthread_create_joinable'
5f80c64f
JH
14652d_oldpthreads='$d_oldpthreads'
14653d_oldsock='$d_oldsock'
14654d_open3='$d_open3'
5f80c64f
JH
14655d_pathconf='$d_pathconf'
14656d_pause='$d_pause'
14657d_phostname='$d_phostname'
14658d_pipe='$d_pipe'
14659d_poll='$d_poll'
14660d_portable='$d_portable'
14661d_pthread_yield='$d_pthread_yield'
5f80c64f
JH
14662d_pwage='$d_pwage'
14663d_pwchange='$d_pwchange'
14664d_pwclass='$d_pwclass'
14665d_pwcomment='$d_pwcomment'
14666d_pwexpire='$d_pwexpire'
14667d_pwgecos='$d_pwgecos'
14668d_pwpasswd='$d_pwpasswd'
14669d_pwquota='$d_pwquota'
de1c2614 14670d_quad='$d_quad'
5f80c64f
JH
14671d_readdir='$d_readdir'
14672d_readlink='$d_readlink'
14673d_rename='$d_rename'
14674d_rewinddir='$d_rewinddir'
14675d_rmdir='$d_rmdir'
14676d_safebcpy='$d_safebcpy'
14677d_safemcpy='$d_safemcpy'
14678d_sanemcmp='$d_sanemcmp'
14679d_sched_yield='$d_sched_yield'
de4597cb 14680d_scm_rights='$d_scm_rights'
5f80c64f
JH
14681d_seekdir='$d_seekdir'
14682d_select='$d_select'
14683d_sem='$d_sem'
14684d_semctl='$d_semctl'
14685d_semctl_semid_ds='$d_semctl_semid_ds'
14686d_semctl_semun='$d_semctl_semun'
14687d_semget='$d_semget'
14688d_semop='$d_semop'
14689d_setegid='$d_setegid'
14690d_seteuid='$d_seteuid'
14691d_setgrent='$d_setgrent'
14692d_setgrps='$d_setgrps'
14693d_sethent='$d_sethent'
14694d_setlinebuf='$d_setlinebuf'
14695d_setlocale='$d_setlocale'
14696d_setnent='$d_setnent'
14697d_setpent='$d_setpent'
14698d_setpgid='$d_setpgid'
14699d_setpgrp2='$d_setpgrp2'
14700d_setpgrp='$d_setpgrp'
14701d_setprior='$d_setprior'
14702d_setpwent='$d_setpwent'
14703d_setregid='$d_setregid'
14704d_setresgid='$d_setresgid'
14705d_setresuid='$d_setresuid'
14706d_setreuid='$d_setreuid'
14707d_setrgid='$d_setrgid'
14708d_setruid='$d_setruid'
14709d_setsent='$d_setsent'
14710d_setsid='$d_setsid'
f1066039 14711d_setspent='$d_setspent'
5f80c64f
JH
14712d_setvbuf='$d_setvbuf'
14713d_sfio='$d_sfio'
14714d_shm='$d_shm'
14715d_shmat='$d_shmat'
14716d_shmatprototype='$d_shmatprototype'
14717d_shmctl='$d_shmctl'
14718d_shmdt='$d_shmdt'
14719d_shmget='$d_shmget'
14720d_sigaction='$d_sigaction'
14721d_sigsetjmp='$d_sigsetjmp'
14722d_socket='$d_socket'
14723d_sockpair='$d_sockpair'
68d4903c 14724d_sqrtl='$d_sqrtl'
5f80c64f 14725d_statblks='$d_statblks'
0545a864
JH
14726d_statfs_f_flags='$d_statfs_f_flags'
14727d_statfs_s='$d_statfs_s'
104d25b7 14728d_statvfs='$d_statvfs'
5f80c64f
JH
14729d_stdio_cnt_lval='$d_stdio_cnt_lval'
14730d_stdio_ptr_lval='$d_stdio_ptr_lval'
ed39a0f2 14731d_stdio_stream_array='$d_stdio_stream_array'
5f80c64f
JH
14732d_stdiobase='$d_stdiobase'
14733d_stdstdio='$d_stdstdio'
5f80c64f
JH
14734d_strchr='$d_strchr'
14735d_strcoll='$d_strcoll'
14736d_strctcpy='$d_strctcpy'
14737d_strerrm='$d_strerrm'
14738d_strerror='$d_strerror'
14739d_strtod='$d_strtod'
14740d_strtol='$d_strtol'
ff935051 14741d_strtold='$d_strtold'
76d49b1c 14742d_strtoll='$d_strtoll'
5f80c64f 14743d_strtoul='$d_strtoul'
cf2093f6 14744d_strtoull='$d_strtoull'
ff935051 14745d_strtouq='$d_strtouq'
5f80c64f
JH
14746d_strxfrm='$d_strxfrm'
14747d_suidsafe='$d_suidsafe'
14748d_symlink='$d_symlink'
14749d_syscall='$d_syscall'
14750d_sysconf='$d_sysconf'
14751d_sysernlst='$d_sysernlst'
14752d_syserrlst='$d_syserrlst'
14753d_system='$d_system'
14754d_tcgetpgrp='$d_tcgetpgrp'
14755d_tcsetpgrp='$d_tcsetpgrp'
5f80c64f 14756d_telldir='$d_telldir'
cb86ce0e 14757d_telldirproto='$d_telldirproto'
5f80c64f
JH
14758d_time='$d_time'
14759d_times='$d_times'
5f80c64f
JH
14760d_truncate='$d_truncate'
14761d_tzname='$d_tzname'
14762d_umask='$d_umask'
14763d_uname='$d_uname'
14764d_union_semun='$d_union_semun'
0545a864 14765d_ustat='$d_ustat'
717c4fcc 14766d_vendorbin='$d_vendorbin'
a3635516 14767d_vendorlib='$d_vendorlib'
5f80c64f
JH
14768d_vfork='$d_vfork'
14769d_void_closedir='$d_void_closedir'
14770d_voidsig='$d_voidsig'
14771d_voidtty='$d_voidtty'
14772d_volatile='$d_volatile'
14773d_vprintf='$d_vprintf'
14774d_wait4='$d_wait4'
14775d_waitpid='$d_waitpid'
14776d_wcstombs='$d_wcstombs'
14777d_wctomb='$d_wctomb'
14778d_xenix='$d_xenix'
14779date='$date'
14780db_hashtype='$db_hashtype'
14781db_prefixtype='$db_prefixtype'
14782defvoidused='$defvoidused'
14783direntrytype='$direntrytype'
14784dlext='$dlext'
14785dlsrc='$dlsrc'
14786doublesize='$doublesize'
14787drand01='$drand01'
14788dynamic_ext='$dynamic_ext'
14789eagain='$eagain'
14790ebcdic='$ebcdic'
14791echo='$echo'
14792egrep='$egrep'
14793emacs='$emacs'
14794eunicefix='$eunicefix'
14795exe_ext='$exe_ext'
14796expr='$expr'
14797extensions='$extensions'
66fe083f 14798fflushNULL='$fflushNULL'
767df6a1 14799fflushall='$fflushall'
5f80c64f
JH
14800find='$find'
14801firstmakefile='$firstmakefile'
14802flex='$flex'
8175356b 14803fpossize='$fpossize'
5f80c64f
JH
14804fpostype='$fpostype'
14805freetype='$freetype'
ccc7f9b3 14806full_ar='$full_ar'
5f80c64f
JH
14807full_csh='$full_csh'
14808full_sed='$full_sed'
14809gccversion='$gccversion'
a22e52b9 14810gidformat='$gidformat'
785fb66b
JH
14811gidsign='$gidsign'
14812gidsize='$gidsize'
5f80c64f
JH
14813gidtype='$gidtype'
14814glibpth='$glibpth'
14815grep='$grep'
14816groupcat='$groupcat'
14817groupstype='$groupstype'
14818gzip='$gzip'
14819h_fcntl='$h_fcntl'
14820h_sysfile='$h_sysfile'
14821hint='$hint'
14822hostcat='$hostcat'
14823huge='$huge'
8175356b
JH
14824i16size='$i16size'
14825i16type='$i16type'
14826i32size='$i32size'
14827i32type='$i32type'
14828i64size='$i64size'
14829i64type='$i64type'
14830i8size='$i8size'
14831i8type='$i8type'
5f80c64f
JH
14832i_arpainet='$i_arpainet'
14833i_bsdioctl='$i_bsdioctl'
14834i_db='$i_db'
14835i_dbm='$i_dbm'
14836i_dirent='$i_dirent'
14837i_dld='$i_dld'
14838i_dlfcn='$i_dlfcn'
14839i_fcntl='$i_fcntl'
14840i_float='$i_float'
14841i_gdbm='$i_gdbm'
14842i_grp='$i_grp'
43999f95 14843i_iconv='$i_iconv'
5f80c64f
JH
14844i_inttypes='$i_inttypes'
14845i_limits='$i_limits'
14846i_locale='$i_locale'
7f3d1cf1 14847i_machcthr='$i_machcthr'
5f80c64f
JH
14848i_malloc='$i_malloc'
14849i_math='$i_math'
14850i_memory='$i_memory'
e7fb4fcc 14851i_mntent='$i_mntent'
5f80c64f
JH
14852i_ndbm='$i_ndbm'
14853i_netdb='$i_netdb'
14854i_neterrno='$i_neterrno'
9cc6feab 14855i_netinettcp='$i_netinettcp'
5f80c64f 14856i_niin='$i_niin'
5b34fd99 14857i_poll='$i_poll'
c4747d3e 14858i_pthread='$i_pthread'
5f80c64f
JH
14859i_pwd='$i_pwd'
14860i_rpcsvcdbm='$i_rpcsvcdbm'
14861i_sfio='$i_sfio'
14862i_sgtty='$i_sgtty'
f1066039 14863i_shadow='$i_shadow'
86959918 14864i_socks='$i_socks'
5f80c64f
JH
14865i_stdarg='$i_stdarg'
14866i_stddef='$i_stddef'
14867i_stdlib='$i_stdlib'
14868i_string='$i_string'
14869i_sysaccess='$i_sysaccess'
14870i_sysdir='$i_sysdir'
14871i_sysfile='$i_sysfile'
14872i_sysfilio='$i_sysfilio'
14873i_sysin='$i_sysin'
14874i_sysioctl='$i_sysioctl'
104d25b7 14875i_sysmount='$i_sysmount'
5f80c64f
JH
14876i_sysndir='$i_sysndir'
14877i_sysparam='$i_sysparam'
14878i_sysresrc='$i_sysresrc'
14879i_syssecrt='$i_syssecrt'
14880i_sysselct='$i_sysselct'
14881i_syssockio='$i_syssockio'
14882i_sysstat='$i_sysstat'
0545a864 14883i_sysstatfs='$i_sysstatfs'
104d25b7 14884i_sysstatvfs='$i_sysstatvfs'
5f80c64f
JH
14885i_systime='$i_systime'
14886i_systimek='$i_systimek'
14887i_systimes='$i_systimes'
14888i_systypes='$i_systypes'
de4597cb 14889i_sysuio='$i_sysuio'
5f80c64f 14890i_sysun='$i_sysun'
0545a864 14891i_sysvfs='$i_sysvfs'
5f80c64f
JH
14892i_syswait='$i_syswait'
14893i_termio='$i_termio'
14894i_termios='$i_termios'
14895i_time='$i_time'
14896i_unistd='$i_unistd'
0545a864 14897i_ustat='$i_ustat'
5f80c64f
JH
14898i_utime='$i_utime'
14899i_values='$i_values'
14900i_varargs='$i_varargs'
14901i_varhdr='$i_varhdr'
14902i_vfork='$i_vfork'
14903ignore_versioned_solibs='$ignore_versioned_solibs'
ff935051 14904inc_version_list='$inc_version_list'
3a096bf3 14905inc_version_list_init='$inc_version_list_init'
5f80c64f
JH
14906incpath='$incpath'
14907inews='$inews'
14908installarchlib='$installarchlib'
14909installbin='$installbin'
14910installman1dir='$installman1dir'
14911installman3dir='$installman3dir'
dd4e71fd
JH
14912installprefix='$installprefix'
14913installprefixexp='$installprefixexp'
5f80c64f
JH
14914installprivlib='$installprivlib'
14915installscript='$installscript'
14916installsitearch='$installsitearch'
717c4fcc 14917installsitebin='$installsitebin'
5f80c64f 14918installsitelib='$installsitelib'
dd4e71fd 14919installstyle='$installstyle'
104d25b7 14920installusrbinperl='$installusrbinperl'
717c4fcc 14921installvendorbin='$installvendorbin'
a3635516 14922installvendorlib='$installvendorlib'
5f80c64f 14923intsize='$intsize'
8175356b
JH
14924ivdformat='$ivdformat'
14925ivsize='$ivsize'
14926ivtype='$ivtype'
5f80c64f
JH
14927known_extensions='$known_extensions'
14928ksh='$ksh'
14929large='$large'
14930ld='$ld'
14931lddlflags='$lddlflags'
14932ldflags='$ldflags'
5cf1d1f1 14933ldlibpthname='$ldlibpthname'
5f80c64f
JH
14934less='$less'
14935lib_ext='$lib_ext'
14936libc='$libc'
14937libperl='$libperl'
14938libpth='$libpth'
14939libs='$libs'
43999f95
JH
14940libsdirs='$libsdirs'
14941libsfiles='$libsfiles'
14942libsfound='$libsfound'
5f80c64f
JH
14943libswanted='$libswanted'
14944line='$line'
14945lint='$lint'
14946lkflags='$lkflags'
14947ln='$ln'
14948lns='$lns'
14949locincpth='$locincpth'
14950loclibpth='$loclibpth'
14951longdblsize='$longdblsize'
14952longlongsize='$longlongsize'
14953longsize='$longsize'
14954lp='$lp'
14955lpr='$lpr'
14956ls='$ls'
14957lseeksize='$lseeksize'
14958lseektype='$lseektype'
14959mail='$mail'
14960mailx='$mailx'
14961make='$make'
14962make_set_make='$make_set_make'
14963mallocobj='$mallocobj'
14964mallocsrc='$mallocsrc'
14965malloctype='$malloctype'
14966man1dir='$man1dir'
14967man1direxp='$man1direxp'
14968man1ext='$man1ext'
14969man3dir='$man3dir'
14970man3direxp='$man3direxp'
14971man3ext='$man3ext'
14972medium='$medium'
5f80c64f
JH
14973mips_type='$mips_type'
14974mkdir='$mkdir'
14975models='$models'
14976modetype='$modetype'
14977more='$more'
68c15b6f 14978multiarch='$multiarch'
5f80c64f
JH
14979mv='$mv'
14980myarchname='$myarchname'
14981mydomain='$mydomain'
14982myhostname='$myhostname'
14983myuname='$myuname'
14984n='$n'
14985netdb_hlen_type='$netdb_hlen_type'
14986netdb_host_type='$netdb_host_type'
14987netdb_name_type='$netdb_name_type'
14988netdb_net_type='$netdb_net_type'
14989nm='$nm'
14990nm_opt='$nm_opt'
14991nm_so_opt='$nm_so_opt'
14992nonxs_ext='$nonxs_ext'
14993nroff='$nroff'
8175356b
JH
14994nvsize='$nvsize'
14995nvtype='$nvtype'
5f80c64f
JH
14996o_nonblock='$o_nonblock'
14997obj_ext='$obj_ext'
ef4af2be 14998old_pthread_create_joinable='$old_pthread_create_joinable'
5f80c64f
JH
14999optimize='$optimize'
15000orderlib='$orderlib'
15001osname='$osname'
15002osvers='$osvers'
15003package='$package'
15004pager='$pager'
15005passcat='$passcat'
15006patchlevel='$patchlevel'
15007path_sep='$path_sep'
15008perl='$perl'
15009perladmin='$perladmin'
15010perlpath='$perlpath'
15011pg='$pg'
15012phostname='$phostname'
15013pidtype='$pidtype'
15014plibpth='$plibpth'
15015pmake='$pmake'
15016pr='$pr'
15017prefix='$prefix'
15018prefixexp='$prefixexp'
15019privlib='$privlib'
15020privlibexp='$privlibexp'
15021prototype='$prototype'
15022ptrsize='$ptrsize'
6b8eaf93 15023quadkind='$quadkind'
d7d93a81 15024quadtype='$quadtype'
5f80c64f
JH
15025randbits='$randbits'
15026randfunc='$randfunc'
15027randseedtype='$randseedtype'
15028ranlib='$ranlib'
15029rd_nodata='$rd_nodata'
15030rm='$rm'
15031rmail='$rmail'
15032runnm='$runnm'
cf2093f6
JH
15033sPRIEldbl='$sPRIEldbl'
15034sPRIFldbl='$sPRIFldbl'
15035sPRIGldbl='$sPRIGldbl'
15036sPRIX64='$sPRIX64'
15037sPRId64='$sPRId64'
15038sPRIeldbl='$sPRIeldbl'
15039sPRIfldbl='$sPRIfldbl'
15040sPRIgldbl='$sPRIgldbl'
15041sPRIi64='$sPRIi64'
15042sPRIo64='$sPRIo64'
15043sPRIu64='$sPRIu64'
15044sPRIx64='$sPRIx64'
5f80c64f
JH
15045sched_yield='$sched_yield'
15046scriptdir='$scriptdir'
15047scriptdirexp='$scriptdirexp'
15048sed='$sed'
15049seedfunc='$seedfunc'
15050selectminbits='$selectminbits'
15051selecttype='$selecttype'
15052sendmail='$sendmail'
15053sh='$sh'
15054shar='$shar'
15055sharpbang='$sharpbang'
15056shmattype='$shmattype'
15057shortsize='$shortsize'
15058shrpenv='$shrpenv'
15059shsharp='$shsharp'
af4c28eb 15060sig_count='$sig_count'
5f80c64f
JH
15061sig_name='$sig_name'
15062sig_name_init='$sig_name_init'
15063sig_num='$sig_num'
824a2ba3 15064sig_num_init='$sig_num_init'
5f80c64f
JH
15065signal_t='$signal_t'
15066sitearch='$sitearch'
15067sitearchexp='$sitearchexp'
717c4fcc
JH
15068sitebin='$sitebin'
15069sitebinexp='$sitebinexp'
5f80c64f
JH
15070sitelib='$sitelib'
15071sitelibexp='$sitelibexp'
dd4e71fd
JH
15072siteprefix='$siteprefix'
15073siteprefixexp='$siteprefixexp'
5f80c64f
JH
15074sizetype='$sizetype'
15075sleep='$sleep'
15076smail='$smail'
15077small='$small'
15078so='$so'
15079sockethdr='$sockethdr'
15080socketlib='$socketlib'
15081sort='$sort'
15082spackage='$spackage'
15083spitshell='$spitshell'
15084split='$split'
15085src='$src'
15086ssizetype='$ssizetype'
15087startperl='$startperl'
15088startsh='$startsh'
15089static_ext='$static_ext'
15090stdchar='$stdchar'
15091stdio_base='$stdio_base'
15092stdio_bufsiz='$stdio_bufsiz'
15093stdio_cnt='$stdio_cnt'
15094stdio_filbuf='$stdio_filbuf'
15095stdio_ptr='$stdio_ptr'
767df6a1 15096stdio_stream_array='$stdio_stream_array'
5f80c64f
JH
15097strings='$strings'
15098submit='$submit'
15099subversion='$subversion'
15100sysman='$sysman'
15101tail='$tail'
15102tar='$tar'
15103tbl='$tbl'
15104tee='$tee'
15105test='$test'
15106timeincl='$timeincl'
15107timetype='$timetype'
15108touch='$touch'
15109tr='$tr'
15110trnl='$trnl'
15111troff='$troff'
8175356b
JH
15112u16size='$u16size'
15113u16type='$u16type'
15114u32size='$u32size'
15115u32type='$u32type'
15116u64size='$u64size'
15117u64type='$u64type'
15118u8size='$u8size'
15119u8type='$u8type'
a22e52b9 15120uidformat='$uidformat'
57def98f 15121uidsign='$uidsign'
785fb66b 15122uidsize='$uidsize'
5f80c64f
JH
15123uidtype='$uidtype'
15124uname='$uname'
15125uniq='$uniq'
d7d93a81 15126uquadtype='$uquadtype'
aaacdc8b 15127use5005threads='$use5005threads'
5f80c64f
JH
15128use64bits='$use64bits'
15129usedl='$usedl'
aaacdc8b 15130useithreads='$useithreads'
249b38c6 15131uselargefiles='$uselargefiles'
b0ce926a 15132uselongdouble='$uselongdouble'
d7d93a81 15133uselonglong='$uselonglong'
09458382 15134usemorebits='$usemorebits'
5f80c64f
JH
15135usemultiplicity='$usemultiplicity'
15136usemymalloc='$usemymalloc'
15137usenm='$usenm'
15138useopcode='$useopcode'
15139useperlio='$useperlio'
15140useposix='$useposix'
15141usesfio='$usesfio'
15142useshrplib='$useshrplib'
29209bc5 15143usesocks='$usesocks'
5f80c64f 15144usethreads='$usethreads'
a3635516 15145usevendorprefix='$usevendorprefix'
5f80c64f
JH
15146usevfork='$usevfork'
15147usrinc='$usrinc'
15148uuname='$uuname'
8175356b
JH
15149uvoformat='$uvoformat'
15150uvsize='$uvsize'
15151uvtype='$uvtype'
15152uvuformat='$uvuformat'
15153uvxformat='$uvxformat'
717c4fcc
JH
15154vendorbin='$vendorbin'
15155vendorbinexp='$vendorbinexp'
a3635516
JH
15156vendorlib='$vendorlib'
15157vendorlibexp='$vendorlibexp'
15158vendorprefix='$vendorprefix'
15159vendorprefixexp='$vendorprefixexp'
5f80c64f
JH
15160version='$version'
15161vi='$vi'
15162voidflags='$voidflags'
15163xlibpth='$xlibpth'
15164zcat='$zcat'
15165zip='$zip'
15166EOT
15167
15168: Add in command line options if available
15169$test -f UU/cmdline.opt && $cat UU/cmdline.opt >> config.sh
15170
15171: add special variables
15172$test -f $src/patchlevel.h && \
d00b958f 15173awk '/^#define[ ]+PERL_/ {printf "%s=%s\n",$2,$3}' $src/patchlevel.h >>config.sh
2000072c 15174echo "CONFIGDOTSH=true" >>config.sh
5f80c64f
JH
15175
15176: propagate old symbols
15177if $test -f UU/config.sh; then
15178 <UU/config.sh sort | uniq >UU/oldconfig.sh
15179 sed -n 's/^\([a-zA-Z_0-9]*\)=.*/\1/p' config.sh config.sh UU/oldconfig.sh |\
15180 sort | uniq -u >UU/oldsyms
15181 set X `cat UU/oldsyms`
15182 shift
15183 case $# in
15184 0) ;;
15185 *)
15186 cat <<EOM
15187Hmm...You had some extra variables I don't know about...I'll try to keep 'em...
15188EOM
15189 echo "# Variables propagated from previous config.sh file." >>config.sh
15190 for sym in `cat UU/oldsyms`; do
15191 echo " Propagating $hint variable "'$'"$sym..."
15192 eval 'tmp="$'"${sym}"'"'
15193 echo "$tmp" | \
15194 sed -e "s/'/'\"'\"'/g" -e "s/^/$sym='/" -e "s/$/'/" >>config.sh
15195 done
15196 ;;
15197 esac
15198fi
15199
15200: Finish up by extracting the .SH files
15201case "$alldone" in
15202exit)
15203 $rm -rf UU
15204 echo "Done."
15205 exit 0
15206 ;;
15207cont)
15208 ;;
15209'')
15210 dflt=''
15211 nostick=true
15212 $cat <<EOM
15213
15214If you'd like to make any changes to the config.sh file before I begin
15215to configure things, do it as a shell escape now (e.g. !vi config.sh).
15216
15217EOM
15218 rp="Press return or use a shell escape to edit config.sh:"
15219 . UU/myread
15220 nostick=''
15221 case "$ans" in
15222 '') ;;
15223 *) : in case they cannot read
15224 sh 1>&4 -c "$ans";;
15225 esac
15226 ;;
15227esac
15228
15229: if this fails, just run all the .SH files by hand
15230. ./config.sh
15231
15232echo " "
15233exec 1>&4
15234. ./UU/extract
15235
15236if $contains '^depend:' [Mm]akefile >/dev/null 2>&1; then
15237 dflt=y
15238 case "$silent" in
15239 true) ;;
15240 *)
15241 $cat <<EOM
15242
15243Now you need to generate make dependencies by running "$make depend".
15244You might prefer to run it in background: "$make depend > makedepend.out &"
15245It can take a while, so you might not want to run it right now.
15246
15247EOM
15248 ;;
15249 esac
15250 rp="Run $make depend now?"
15251 . UU/myread
15252 case "$ans" in
15253 y*)
15254 $make depend && echo "Now you must run a $make."
15255 ;;
15256 *)
15257 echo "You must run '$make depend' then '$make'."
15258 ;;
15259 esac
15260elif test -f [Mm]akefile; then
15261 echo " "
15262 echo "Now you must run a $make."
15263else
15264 echo "Done."
15265fi
15266
15267if $test -f Policy.sh; then
15268 $cat <<EOM
15269
15270If you compile $package on a different machine or from a different object
15271directory, copy the Policy.sh file from this object directory to the
15272new one before you run Configure -- this will help you with most of
15273the policy defaults.
15274
15275EOM
15276fi
15277if $test -f config.msg; then
15278 echo "Hmm. I also noted the following information while running:"
15279 echo " "
15280 $cat config.msg >&4
15281 $rm -f config.msg
15282fi
15283$rm -f kit*isdone ark*isdone
15284$rm -rf UU
15285
15286: End of Configure
15287