This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
To: perl5-porters@perl.com
[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#
ef4af2be 23# Generated on Thu Dec 3 10:57:23 EET 1998 [metaconfig 3.0 PL70]
5ff3f7a4 24# (with additional metaconfig patches by jhi@iki.fi)
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
AD
110fi
111case "$inksh/$needksh" in
112/[a-z]*)
c4f23d77 113 ENV=''
dfe9444c
AD
114 changesh=true
115 reason="$needksh"
116 ;;
117esac
118case "$inksh/$avoidksh" in
119true/[a-z]*)
120 changesh=true
121 reason="$avoidksh"
122 ;;
123esac
124case "$inksh/$needksh-$avoidksh-" in
125true/--)
a0d0e21e
LW
126 cat <<EOM
127(I see you are using the Korn shell. Some ksh's blow up on $me,
dfe9444c 128mainly on older exotic systems. If yours does, try the Bourne shell instead.)
ff0cee69 129EOM
dfe9444c
AD
130 ;;
131esac
132case "$changesh" in
133true)
134 echo "(Feeding myself to $newsh $reason.)"
135 case "$0" in
136 Configure|*/Configure) exec $newsh $0 "$@";;
137 *) exec $newsh Configure "$@";;
138 esac
139 ;;
140esac
2304df62 141
bfb7748a
AD
142: if needed set CDPATH to a harmless value that is not chatty
143: avoid bash 2.02 problems with empty CDPATH.
144case "$CDPATH" in
145'') ;;
146*) case "$SHELL" in
147 *bash*) CDPATH='.' ;;
148 *) CDPATH='' ;;
149 esac
150 ;;
151esac
2304df62
AD
152: Configure runs within the UU subdirectory
153test -d UU || mkdir UU
8e07c86e 154cd UU && rm -f ./*
2304df62 155
a0d0e21e 156dynamic_ext=''
2304df62 157extensions=''
a0d0e21e 158known_extensions=''
4318d5a0 159nonxs_ext=''
bfb7748a 160static_ext=''
8ff267be 161useopcode=''
a0d0e21e 162useposix=''
ecfc5424 163d_bsd=''
40a7a20a 164d_eunice=''
2304df62
AD
165d_xenix=''
166eunicefix=''
167Mcc=''
dfe9444c 168ar=''
2304df62
AD
169awk=''
170bash=''
171bison=''
172byacc=''
173cat=''
174chgrp=''
175chmod=''
176chown=''
ecfc5424 177comm=''
2304df62
AD
178compress=''
179cp=''
180cpio=''
181cpp=''
182csh=''
183date=''
184echo=''
185egrep=''
186emacs=''
187expr=''
188find=''
189flex=''
2304df62 190grep=''
8ff267be 191gzip=''
2304df62
AD
192inews=''
193ksh=''
194less=''
195line=''
196lint=''
197ln=''
198lp=''
199lpr=''
200ls=''
201mail=''
202mailx=''
dfe9444c 203make=''
2304df62
AD
204mkdir=''
205more=''
206mv=''
693762b4 207nm=''
2304df62
AD
208nroff=''
209perl=''
210pg=''
211pmake=''
212pr=''
213rm=''
214rmail=''
215sed=''
216sendmail=''
2304df62
AD
217shar=''
218sleep=''
219smail=''
220sort=''
221submit=''
222tail=''
223tar=''
224tbl=''
693762b4 225tee=''
2304df62
AD
226test=''
227touch=''
228tr=''
229troff=''
230uname=''
231uniq=''
232uuname=''
233vi=''
234zcat=''
8ff267be 235zip=''
1aef975c 236full_sed=''
a0d0e21e 237libswanted=''
2304df62
AD
238hint=''
239myuname=''
85e6fe83
LW
240osname=''
241osvers=''
2304df62
AD
242Author=''
243Date=''
244Header=''
245Id=''
246Locker=''
247Log=''
248RCSfile=''
249Revision=''
250Source=''
251State=''
dfe9444c
AD
252_a=''
253_exe=''
254_o=''
4633a7c4
LW
255archobjs=''
256exe_ext=''
257firstmakefile=''
258lib_ext=''
259obj_ext=''
260path_sep=''
2304df62 261afs=''
a0d0e21e 262alignbytes=''
c4f23d77 263ansi2knr=''
a0d0e21e
LW
264archlib=''
265archlibexp=''
a0d0e21e
LW
266d_archlib=''
267installarchlib=''
40000a8c
AD
268archname=''
269myarchname=''
ecfc5424 270baserev=''
2304df62
AD
271bin=''
272binexp=''
273installbin=''
274byteorder=''
275cc=''
276gccversion=''
277ccflags=''
278cppflags=''
279ldflags=''
280lkflags=''
8e07c86e 281locincpth=''
2304df62 282optimize=''
8e07c86e 283cf_email=''
2304df62
AD
284cf_by=''
285cf_time=''
286contains=''
a0d0e21e 287cpp_stuff=''
2304df62
AD
288cpplast=''
289cppminus=''
290cpprun=''
291cppstdin=''
292d_access=''
5ff3f7a4 293d_accessx=''
a0d0e21e 294d_alarm=''
ecfc5424 295d_attribut=''
2304df62
AD
296d_bcmp=''
297d_bcopy=''
298d_bzero=''
299d_casti32=''
300castflags=''
301d_castneg=''
a0d0e21e
LW
302d_chown=''
303d_chroot=''
2304df62 304d_chsize=''
a0d0e21e
LW
305d_closedir=''
306d_void_closedir=''
2304df62
AD
307d_const=''
308cryptlib=''
309d_crypt=''
310d_csh=''
1aef975c 311full_csh=''
a0d0e21e
LW
312d_cuserid=''
313d_dbl_dig=''
314d_difftime=''
315d_dlerror=''
316d_dlopen=''
317d_dlsymun=''
2304df62 318d_dosuid=''
a0d0e21e 319d_suidsafe=''
85ab1d1d 320d_drand48proto=''
2304df62 321d_dup2=''
5ff3f7a4
GS
322d_eaccess=''
323d_endgrent=''
e5c9fcd0
AD
324d_endhent=''
325d_endnent=''
326d_endpent=''
5ff3f7a4 327d_endpwent=''
e5c9fcd0 328d_endsent=''
2304df62
AD
329d_fchmod=''
330d_fchown=''
331d_fcntl=''
a0d0e21e
LW
332d_fd_macros=''
333d_fd_set=''
334d_fds_bits=''
335d_fgetpos=''
2304df62
AD
336d_flexfnam=''
337d_flock=''
a0d0e21e 338d_fork=''
5ff3f7a4 339d_fseeko=''
a0d0e21e 340d_fsetpos=''
5ff3f7a4 341d_ftello=''
5f05dabc 342d_ftime=''
343d_gettimeod=''
a0d0e21e 344d_Gconvert=''
5ff3f7a4 345d_getgrent=''
2304df62 346d_getgrps=''
4599a1de 347d_gethbyaddr=''
4599a1de 348d_gethbyname=''
dfe9444c 349d_gethent=''
2304df62
AD
350aphostname=''
351d_gethname=''
352d_phostname=''
353d_uname=''
dc45a647 354d_gethostprotos=''
a0d0e21e 355d_getlogin=''
dfe9444c 356d_getnbyaddr=''
693762b4 357d_getnbyname=''
e5c9fcd0 358d_getnent=''
dc45a647 359d_getnetprotos=''
e5c9fcd0 360d_getpent=''
2afac517 361d_getpgid=''
2304df62 362d_getpgrp2=''
2afac517 363d_bsdgetpgrp=''
2304df62 364d_getpgrp=''
a0d0e21e 365d_getppid=''
2304df62 366d_getprior=''
693762b4
AD
367d_getpbyname=''
368d_getpbynumber=''
dc45a647 369d_getprotoprotos=''
5ff3f7a4 370d_getpwent=''
e5c9fcd0 371d_getsent=''
dc45a647 372d_getservprotos=''
693762b4
AD
373d_getsbyname=''
374d_getsbyport=''
a4f3eea9 375d_gnulibc=''
2304df62 376d_htonl=''
7e1af8bc 377d_inetaton=''
2304df62
AD
378d_isascii=''
379d_killpg=''
dd64f1c3 380d_lchown=''
2304df62 381d_link=''
a0d0e21e
LW
382d_locconv=''
383d_lockf=''
e5c9fcd0
AD
384d_longdbl=''
385longdblsize=''
dc45a647
MB
386d_longlong=''
387longlongsize=''
2304df62 388d_lstat=''
a0d0e21e
LW
389d_mblen=''
390d_mbstowcs=''
391d_mbtowc=''
2304df62
AD
392d_memcmp=''
393d_memcpy=''
394d_memmove=''
395d_memset=''
396d_mkdir=''
a0d0e21e
LW
397d_mkfifo=''
398d_mktime=''
2304df62
AD
399d_msg=''
400d_msgctl=''
401d_msgget=''
402d_msgrcv=''
403d_msgsnd=''
a0d0e21e 404d_nice=''
2304df62 405d_open3=''
a0d0e21e
LW
406d_fpathconf=''
407d_pathconf=''
408d_pause=''
409d_pipe=''
8e07c86e 410d_poll=''
2304df62 411d_portable=''
ef4af2be
JH
412d_old_pthread_create_joinable=''
413old_pthread_create_joinable=''
dfe9444c
AD
414d_pthread_yield=''
415d_sched_yield=''
1cfa4ec7 416sched_yield=''
2304df62 417d_readdir=''
85e6fe83
LW
418d_rewinddir=''
419d_seekdir=''
420d_telldir=''
a0d0e21e 421d_readlink=''
de4597cb 422d_readv=''
2304df62
AD
423d_rename=''
424d_rmdir=''
425d_safebcpy=''
426d_safemcpy=''
36477c24 427d_sanemcmp=''
2304df62
AD
428d_select=''
429d_sem=''
430d_semctl=''
431d_semget=''
432d_semop=''
433d_setegid=''
434d_seteuid=''
5ff3f7a4 435d_setgrent=''
dfe9444c 436d_setgrps=''
693762b4 437d_sethent=''
a0d0e21e 438d_setlinebuf=''
2304df62 439d_setlocale=''
e5c9fcd0
AD
440d_setnent=''
441d_setpent=''
2304df62
AD
442d_setpgid=''
443d_setpgrp2=''
2afac517 444d_bsdsetpgrp=''
2304df62
AD
445d_setpgrp=''
446d_setprior=''
5ff3f7a4 447d_setpwent=''
2304df62
AD
448d_setregid=''
449d_setresgid=''
450d_setresuid=''
451d_setreuid=''
452d_setrgid=''
453d_setruid=''
e5c9fcd0 454d_setsent=''
2304df62 455d_setsid=''
e5c9fcd0 456d_setvbuf=''
760ac839 457d_sfio=''
8ff267be 458usesfio=''
2304df62
AD
459d_shm=''
460d_shmat=''
a0d0e21e
LW
461d_shmatprototype=''
462shmattype=''
2304df62
AD
463d_shmctl=''
464d_shmdt=''
465d_shmget=''
2c7991dc 466d_sigaction=''
8ff267be 467d_sigsetjmp=''
de4597cb
JH
468d_cmsghdr_s=''
469d_msg_ctrunc=''
470d_msg_dontroute=''
471d_msg_oob=''
472d_msg_peek=''
473d_msg_proxy=''
474d_msghdr_s=''
2304df62 475d_oldsock=''
de4597cb
JH
476d_recvmsg=''
477d_scm_rights=''
478d_sendmsg=''
2304df62
AD
479d_socket=''
480d_sockpair=''
481sockethdr=''
482socketlib=''
483d_statblks=''
c2960299
AD
484d_stdio_cnt_lval=''
485d_stdio_ptr_lval=''
16d20bd9 486d_stdiobase=''
2304df62 487d_stdstdio=''
16d20bd9
AD
488stdio_base=''
489stdio_bufsiz=''
490stdio_cnt=''
dfe9444c 491stdio_filbuf=''
16d20bd9 492stdio_ptr=''
2304df62
AD
493d_index=''
494d_strchr=''
a0d0e21e 495d_strcoll=''
2304df62
AD
496d_strctcpy=''
497d_strerrm=''
498d_strerror=''
499d_sysernlst=''
500d_syserrlst=''
a89d8a78
DH
501d_strtod=''
502d_strtol=''
503d_strtoul=''
a0d0e21e 504d_strxfrm=''
2304df62
AD
505d_symlink=''
506d_syscall=''
a0d0e21e 507d_sysconf=''
2304df62 508d_system=''
a0d0e21e
LW
509d_tcgetpgrp=''
510d_tcsetpgrp=''
85e6fe83
LW
511d_time=''
512timetype=''
2304df62
AD
513clocktype=''
514d_times=''
515d_truncate=''
a0d0e21e
LW
516d_tzname=''
517d_umask=''
bd89102f
AD
518d_semctl_semid_ds=''
519d_semctl_semun=''
520d_union_semun=''
2304df62 521d_vfork=''
a0d0e21e 522usevfork=''
2304df62
AD
523d_voidsig=''
524signal_t=''
525d_volatile=''
526d_charvspr=''
527d_vprintf=''
528d_wait4=''
529d_waitpid=''
a0d0e21e
LW
530d_wcstombs=''
531d_wctomb=''
de4597cb 532d_writev=''
5ff3f7a4
GS
533d_dbmclose64=''
534d_dbminit64=''
535d_delete64=''
536d_fetch64=''
537d_firstkey64=''
538d_nextkey64=''
539d_store64=''
a0d0e21e 540dlext=''
85e6fe83
LW
541cccdlflags=''
542ccdlflags=''
2304df62 543dlsrc=''
232e078e 544ld=''
85e6fe83 545lddlflags=''
2304df62 546usedl=''
693762b4 547doublesize=''
5ff3f7a4 548ebcdic=''
a0d0e21e 549fpostype=''
2304df62
AD
550gidtype=''
551groupstype=''
552h_fcntl=''
553h_sysfile=''
5ff3f7a4 554i_arpainet=''
ecfc5424
AD
555db_hashtype=''
556db_prefixtype=''
a0d0e21e 557i_db=''
2304df62 558i_dbm=''
8e07c86e 559i_rpcsvcdbm=''
2304df62 560d_dirnamlen=''
a0d0e21e 561direntrytype=''
2304df62 562i_dirent=''
a0d0e21e 563i_dld=''
2304df62
AD
564i_dlfcn=''
565i_fcntl=''
a0d0e21e 566i_float=''
2304df62 567i_gdbm=''
28e8609d 568d_grpasswd=''
2304df62 569i_grp=''
5ff3f7a4
GS
570d_int64t=''
571i_inttypes=''
a0d0e21e 572i_limits=''
4633a7c4 573i_locale=''
7f3d1cf1 574i_machcthr=''
a0d0e21e
LW
575i_malloc=''
576i_math=''
85e6fe83 577i_memory=''
2304df62 578i_ndbm=''
3fd537d4 579i_netdb=''
85e6fe83 580i_neterrno=''
2304df62
AD
581i_niin=''
582i_sysin=''
5b34fd99 583i_poll=''
2304df62
AD
584d_pwage=''
585d_pwchange=''
586d_pwclass=''
587d_pwcomment=''
588d_pwexpire=''
c4f23d77 589d_pwgecos=''
28e8609d 590d_pwpasswd=''
2304df62
AD
591d_pwquota=''
592i_pwd=''
760ac839 593i_sfio=''
2304df62 594i_stddef=''
a0d0e21e 595i_stdlib=''
2304df62
AD
596i_string=''
597strings=''
5ff3f7a4 598i_sysaccess=''
2304df62
AD
599i_sysdir=''
600i_sysfile=''
601d_voidtty=''
602i_bsdioctl=''
a0d0e21e 603i_sysfilio=''
2304df62
AD
604i_sysioctl=''
605i_syssockio=''
606i_sysndir=''
a0d0e21e 607i_sysparam=''
8ff267be 608i_sysresrc=''
5ff3f7a4 609i_syssecrt=''
2304df62 610i_sysselct=''
1aef975c 611i_sysstat=''
a0d0e21e 612i_systimes=''
fed7345c 613i_systypes=''
de4597cb
JH
614d_iovec_s=''
615i_sysuio=''
25f94b33 616i_sysun=''
8ff267be 617i_syswait=''
2304df62
AD
618i_sgtty=''
619i_termio=''
620i_termios=''
621i_systime=''
622i_systimek=''
623i_time=''
624timeincl=''
85e6fe83 625i_unistd=''
2304df62 626i_utime=''
760ac839 627i_values=''
a0d0e21e 628i_stdarg=''
2304df62
AD
629i_varargs=''
630i_varhdr=''
631i_vfork=''
632intsize=''
24fef2a7
AD
633longsize=''
634shortsize=''
de4597cb
JH
635d_dirent64_s=''
636d_flock64_s=''
5ff3f7a4
GS
637d_fstat64=''
638d_ftruncate64=''
639d_ino64t=''
640d_lockf64=''
641d_lseek64=''
642d_lstat64=''
643d_off64t=''
644d_open64=''
645d_opendir64=''
646d_readdir64=''
647d_seekdir64=''
648d_stat64=''
649d_telldir64=''
650d_truncate64=''
2304df62 651libc=''
8ff267be 652libperl=''
2afac517 653shrpenv=''
8ff267be 654useshrplib=''
a0d0e21e 655glibpth=''
2304df62 656libpth=''
8e07c86e 657loclibpth=''
2304df62
AD
658plibpth=''
659xlibpth=''
1cfa4ec7 660ignore_versioned_solibs=''
2304df62 661libs=''
85e6fe83 662lns=''
5ff3f7a4 663lseeksize=''
85e6fe83 664lseektype=''
8ff267be 665make_set_make=''
85e6fe83 666d_mymalloc=''
94b6baf5 667freetype=''
2304df62
AD
668mallocobj=''
669mallocsrc=''
670malloctype=''
671usemymalloc=''
16d20bd9
AD
672installman1dir=''
673man1dir=''
674man1direxp=''
675man1ext=''
676installman3dir=''
677man3dir=''
678man3direxp=''
679man3ext=''
2304df62
AD
680huge=''
681large=''
682medium=''
683models=''
684small=''
685split=''
a0d0e21e 686modetype=''
2304df62
AD
687mydomain=''
688myhostname=''
689phostname=''
690c=''
691n=''
8e07c86e
AD
692d_eofnblk=''
693eagain=''
694o_nonblock=''
695rd_nodata=''
dfe9444c
AD
696netdb_hlen_type=''
697netdb_host_type=''
698netdb_name_type=''
699netdb_net_type=''
2304df62
AD
700groupcat=''
701hostcat=''
702passcat=''
85e6fe83
LW
703orderlib=''
704ranlib=''
2304df62
AD
705package=''
706spackage=''
2c7991dc 707pager=''
bfb7748a 708apiversion=''
ecfc5424 709patchlevel=''
760ac839 710subversion=''
bfb7748a 711version=''
8e07c86e 712perladmin=''
4633a7c4 713perlpath=''
dfe9444c 714pidtype=''
a0d0e21e 715prefix=''
1aef975c 716prefixexp=''
2304df62
AD
717installprivlib=''
718privlib=''
719privlibexp=''
720prototype=''
693762b4 721ptrsize=''
85ab1d1d 722drand01=''
2304df62 723randbits=''
85ab1d1d
JH
724randfunc=''
725randseedtype=''
726seedfunc=''
2304df62
AD
727installscript=''
728scriptdir=''
729scriptdirexp=''
5ff3f7a4 730selectminbits=''
a0d0e21e 731selecttype=''
8ff267be 732sh=''
2304df62 733sig_name=''
dfe9444c 734sig_name_init=''
8e07c86e 735sig_num=''
824a2ba3 736sig_num_init=''
4633a7c4
LW
737installsitearch=''
738sitearch=''
739sitearchexp=''
25f94b33
AD
740installsitelib=''
741sitelib=''
742sitelibexp=''
a0d0e21e
LW
743sizetype=''
744so=''
2304df62
AD
745sharpbang=''
746shsharp=''
747spitshell=''
dfe9444c 748src=''
a0d0e21e 749ssizetype=''
4633a7c4 750startperl=''
2304df62
AD
751startsh=''
752stdchar=''
5ff3f7a4
GS
753d_fgetpos64=''
754d_fopen64=''
755d_freopen64=''
756d_fseek64=''
757d_fseeko64=''
758d_fsetpos64=''
759d_ftell64=''
760d_ftello64=''
761d_tmpfile64=''
2304df62 762sysman=''
5ff3f7a4 763trnl=''
2304df62 764uidtype=''
85ab1d1d 765archname64=''
5ff3f7a4 766use64bits=''
85ab1d1d 767usemultiplicity=''
2304df62 768nm_opt=''
40a7a20a 769nm_so_opt=''
2304df62
AD
770runnm=''
771usenm=''
8ff267be 772useperlio=''
693762b4 773d_oldpthreads=''
dfe9444c 774usethreads=''
2304df62
AD
775incpath=''
776mips=''
777mips_type=''
778usrinc=''
779defvoidused=''
780voidflags=''
2304df62
AD
781CONFIG=''
782
ecfc5424
AD
783define='define'
784undef='undef'
785smallmach='pdp11 i8086 z8000 i80286 iAPX286'
786rmlist=''
787
788: We must find out about Eunice early
789eunicefix=':'
790if test -f /etc/unixtovms; then
791 eunicefix=/etc/unixtovms
792fi
793if test -f /etc/unixtovms.exe; then
794 eunicefix=/etc/unixtovms.exe
795fi
796
5ff3f7a4
GS
797i_whoami=''
798: change the next line if compiling for Xenix/286 on Xenix/386
799xlibpth='/usr/lib/386 /lib/386'
800
801: Possible local library directories to search.
802loclibpth="/usr/local/lib /opt/local/lib /usr/gnu/lib"
803loclibpth="$loclibpth /opt/gnu/lib /usr/GNU/lib /opt/GNU/lib"
804
805: general looking path for locating libraries
806glibpth="/shlib /usr/shlib /lib/pa1.1 /usr/lib/large"
807glibpth="$glibpth /lib /usr/lib $xlibpth"
808glibpth="$glibpth /lib/large /usr/lib/small /lib/small"
809glibpth="$glibpth /usr/ccs/lib /usr/ucblib /usr/local/lib"
810
811: Private path used by Configure to find libraries. Its value
812: is prepended to libpth. This variable takes care of special
813: machines, like the mips. Usually, it should be empty.
814plibpth=''
815
5ff3f7a4
GS
816: Possible local include directories to search.
817: Set locincpth to "" in a hint file to defeat local include searches.
818locincpth="/usr/local/include /opt/local/include /usr/gnu/include"
819locincpth="$locincpth /opt/gnu/include /usr/GNU/include /opt/GNU/include"
820:
821: no include file wanted by default
822inclwanted=''
823
ecfc5424
AD
824: list of known cpp symbols, sorted alphabetically
825al="AMIX BIT_MSF BSD BSD4_3 BSD_NET2 CMU CRAY DGUX DOLPHIN DPX2"
826al="$al GO32 GOULD_PN HP700 I386 I80960 I960 Lynx M68000 M68K MACH"
827al="$al MIPSEB MIPSEL MSDOS MTXINU MULTIMAX MVS"
828al="$al M_COFF M_I186 M_I286 M_I386 M_I8086 M_I86 M_I86SM"
829al="$al M_SYS3 M_SYS5 M_SYSIII M_SYSV M_UNIX M_XENIX"
830al="$al NeXT OCS88 OSF1 PARISC PC532 PORTAR POSIX"
831al="$al PWB R3000 RES RISC6000 RT Sun386i SVR3 SVR4"
832al="$al SYSTYPE_BSD SYSTYPE_SVR4 SYSTYPE_SYSV Tek4132 Tek4300"
833al="$al UMAXV USGr4 USGr4_2 UTEK UTS UTek UnicomPBB UnicomPBD Utek"
834al="$al VMS Xenix286"
5ff3f7a4
GS
835al="$al _AIX _AIX32 _AIX370 _AIX41 _AM29000 _COFF _CRAY _CX_UX _EPI"
836al="$al _IBMESA _IBMR2 _M88K _M88KBCS_TARGET _POWER"
ecfc5424
AD
837al="$al _MIPSEB _MIPSEL _M_COFF _M_I86 _M_I86SM _M_SYS3"
838al="$al _M_SYS5 _M_SYSIII _M_SYSV _M_UNIX _M_XENIX _NLS _PGC_ _R3000"
839al="$al _SYSTYPE_BSD _SYSTYPE_BSD43 _SYSTYPE_SVR4"
840al="$al _SYSTYPE_SYSV _SYSV3 _U370 _UNICOS"
841al="$al __386BSD__ __BIG_ENDIAN __BIG_ENDIAN__ __BSD_4_4__"
842al="$al __DGUX__ __DPX2__ __H3050R __H3050RX"
843al="$al __LITTLE_ENDIAN __LITTLE_ENDIAN__ __MACH__"
844al="$al __MIPSEB __MIPSEB__ __MIPSEL __MIPSEL__"
845al="$al __Next__ __OSF1__ __PARAGON__ __PGC__ __PWB __STDC__"
846al="$al __SVR4_2__ __UMAXV__"
847al="$al ____386BSD____ __alpha __alpha__ __amiga"
848al="$al __bsd4_2 __bsd4_2__ __bsdi__ __convex__"
849al="$al __host_mips__"
850al="$al __hp9000s200 __hp9000s300 __hp9000s400 __hp9000s500"
851al="$al __hp9000s500 __hp9000s700 __hp9000s800"
852al="$al __hppa __hpux __hp_osf __i286 __i286__ __i386 __i386__"
853al="$al __i486 __i486__ __i860 __i860__ __ibmesa __ksr1__ __linux__"
854al="$al __m68k __m68k__ __m88100__ __m88k __m88k__"
855al="$al __mc68000 __mc68000__ __mc68020 __mc68020__"
856al="$al __mc68030 __mc68030__ __mc68040 __mc68040__"
857al="$al __mc88100 __mc88100__ __mips __mips__"
858al="$al __motorola__ __osf__ __pa_risc __sparc__ __stdc__"
859al="$al __sun __sun__ __svr3__ __svr4__ __ultrix __ultrix__"
860al="$al __unix __unix__ __uxpm__ __uxps__ __vax __vax__"
861al="$al _host_mips _mips _unix"
862al="$al a29k aegis aix aixpc alliant alpha am29000 amiga ansi ardent"
863al="$al apollo ardent att386 att3b"
864al="$al bsd bsd43 bsd4_2 bsd4_3 bsd4_4 bsdi bull"
865al="$al cadmus clipper concurrent convex cray ctix"
866al="$al dmert encore gcos gcx gimpel gould"
867al="$al hbullx20 hcx host_mips hp200 hp300 hp700 hp800"
868al="$al hp9000 hp9000s300 hp9000s400 hp9000s500"
869al="$al hp9000s700 hp9000s800 hp9k8 hppa hpux"
870al="$al i186 i286 i386 i486 i8086"
871al="$al i80960 i860 iAPX286 ibm ibm032 ibmrt interdata is68k"
872al="$al ksr1 linux luna luna88k m68k m88100 m88k"
873al="$al mc300 mc500 mc68000 mc68010 mc68020 mc68030"
874al="$al mc68040 mc68060 mc68k mc68k32 mc700"
875al="$al mc88000 mc88100 merlin mert mips mvs n16"
876al="$al ncl_el ncl_mr"
877al="$al news1500 news1700 news1800 news1900 news3700"
878al="$al news700 news800 news900 ns16000 ns32000"
879al="$al ns32016 ns32332 ns32k nsc32000 os osf"
880al="$al parisc pc532 pdp11 plexus posix pyr"
881al="$al riscix riscos scs sequent sgi sinix sony sony_news"
882al="$al sonyrisc sparc sparclite spectrum stardent stratos"
883al="$al sun sun3 sun386 svr4 sysV68 sysV88"
884al="$al titan tower tower32 tower32_200 tower32_600 tower32_700"
885al="$al tower32_800 tower32_850 tss u370 u3b u3b2 u3b20 u3b200"
886al="$al u3b20d u3b5 ultrix unix unixpc unos vax venix vms"
887al="$al xenix z8000"
888
dfe9444c 889: Trailing extension. Override this in a hint file, if needed.
4e2a5f63 890_exe=''
dfe9444c
AD
891: Extra object files, if any, needed on this platform.
892archobjs=''
893groupstype=''
1cfa4ec7
GS
894: default library list
895libswanted=''
921b2963 896: some systems want to use only the non-versioned libso:s
1cfa4ec7 897ignore_versioned_solibs=''
bfb7748a
AD
898: full support for void wanted by default
899defvoidused=15
900
dfe9444c
AD
901: set useposix=false in your hint file to disable the POSIX extension.
902useposix=true
903: set useopcode=false in your hint file to disable the Opcode extension.
904useopcode=true
85ab1d1d 905: set usemultiplicity on the Configure command line to enable multiplicity.
dfe9444c 906: set usethreads on the Configure command line to enable threads.
ecfc5424 907: List of libraries we want.
693762b4
AD
908: If anyone needs -lnet, put it in a hint file.
909libswanted='sfio socket inet nsl nm ndbm gdbm dbm db malloc dl'
ecfc5424
AD
910libswanted="$libswanted dld ld sun m c cposix posix ndir dir crypt"
911libswanted="$libswanted ucb bsd BSD PW x"
1aef975c 912: We probably want to search /usr/shlib before most other libraries.
94b6baf5 913: This is only used by the lib/ExtUtils/MakeMaker.pm routine extliblist.
ecfc5424
AD
914glibpth=`echo " $glibpth " | sed -e 's! /usr/shlib ! !'`
915glibpth="/usr/shlib $glibpth"
916: Do not use vfork unless overridden by a hint file.
917usevfork=false
918
8ff267be 919: Find the basic shell for Bourne shell scripts
920case "$sh" in
921'')
8ff267be 922 case "$SYSTYPE" in
923 *bsd*|sys5*) xxx="/$SYSTYPE/bin/sh";;
924 *) xxx='/bin/sh';;
925 esac
926 if test -f "$xxx"; then
927 sh="$xxx"
928 else
929 : Build up a list and do a single loop so we can 'break' out.
930 pth=`echo $PATH | sed -e "s/$p_/ /g"`
931 for xxx in sh bash ksh pdksh ash; do
932 for p in $pth; do
933 try="$try ${p}/${xxx}"
934 done
935 done
936 for xxx in $try; do
937 if test -f "$xxx"; then
938 sh="$xxx";
8ff267be 939 break
940 elif test -f "$xxx.exe"; then
941 sh="$xxx";
8ff267be 942 break
943 fi
944 done
945 fi
946 ;;
947esac
948
949case "$sh" in
950'') cat <<EOM >&2
951$me: Fatal Error: I can't find a Bourne Shell anywhere.
dfe9444c 952
8ff267be 953Usually it's in /bin/sh. How did you even get this far?
5ff3f7a4 954Please contact me (Jarkko Hietaniemi) at jhi@iki.fi and
dfe9444c 955we'll try to straighten this all out.
8ff267be 956EOM
957 exit 1
958 ;;
959esac
960
760ac839 961: see if sh knows # comments
8ff267be 962if `$sh -c '#' >/dev/null 2>&1`; then
760ac839
LW
963 shsharp=true
964 spitshell=cat
760ac839
LW
965 xcat=/bin/cat
966 test -f $xcat || xcat=/usr/bin/cat
967 echo "#!$xcat" >try
968 $eunicefix try
969 chmod +x try
970 ./try > today
971 if test -s today; then
760ac839
LW
972 sharpbang='#!'
973 else
974 echo "#! $xcat" > try
975 $eunicefix try
976 chmod +x try
977 ./try > today
978 if test -s today; then
760ac839
LW
979 sharpbang='#! '
980 else
760ac839
LW
981 sharpbang=': use '
982 fi
983 fi
984else
dfe9444c 985 echo " "
8ff267be 986 echo "Your $sh doesn't grok # comments--I will strip them later on."
760ac839
LW
987 shsharp=false
988 cd ..
989 echo "exec grep -v '^[ ]*#'" >spitshell
990 chmod +x spitshell
991 $eunicefix spitshell
992 spitshell=`pwd`/spitshell
993 cd UU
994 echo "I presume that if # doesn't work, #! won't work either!"
995 sharpbang=': use '
996fi
997rm -f try today
998
999: figure out how to guarantee sh startup
8ff267be 1000case "$startsh" in
1001'') startsh=${sharpbang}${sh} ;;
1002*)
760ac839 1003esac
760ac839
LW
1004cat >try <<EOSS
1005$startsh
1006set abc
1007test "$?abc" != 1
1008EOSS
1009
1010chmod +x try
1011$eunicefix try
1012if ./try; then
8ff267be 1013 : echo "Yup, it does."
760ac839 1014else
dfe9444c
AD
1015 echo "Hmm... '$startsh' does not guarantee sh startup..."
1016 echo "You may have to fix up the shell scripts to make sure $sh runs them."
760ac839
LW
1017fi
1018rm -f try
1019
aebf16e7
AD
1020
1021: Save command line options in file UU/cmdline.opt for later use in
1022: generating config.sh.
1023cat > cmdline.opt <<EOSH
1024# Configure command line arguments.
1025config_arg0='$0'
1026config_args='$*'
1027config_argc=$#
1028EOSH
1029argn=1
1030for arg in "$@"; do
1031 cat >>cmdline.opt <<EOSH
1032config_arg$argn='$arg'
1033EOSH
1034 argn=`expr $argn + 1`
1035done
1036
2304df62
AD
1037: produce awk script to parse command line options
1038cat >options.awk <<'EOF'
1039BEGIN {
16d20bd9 1040 optstr = "dD:eEf:hKOrsSU:V"; # getopt-style specification
2304df62
AD
1041
1042 len = length(optstr);
1043 for (i = 1; i <= len; i++) {
1044 c = substr(optstr, i, 1);
1045 if (i < len) a = substr(optstr, i + 1, 1); else a = "";
1046 if (a == ":") {
1047 arg[c] = 1;
1048 i++;
1049 }
1050 opt[c] = 1;
1051 }
1052}
1053{
1054 expect = 0;
1055 str = $0;
1056 if (substr(str, 1, 1) != "-") {
1057 printf("'%s'\n", str);
1058 next;
1059 }
1060 len = length($0);
1061 for (i = 2; i <= len; i++) {
1062 c = substr(str, i, 1);
1063 if (!opt[c]) {
1064 printf("-%s\n", substr(str, i));
1065 next;
1066 }
1067 printf("-%s\n", c);
1068 if (arg[c]) {
1069 if (i < len)
1070 printf("'%s'\n", substr(str, i + 1));
1071 else
1072 expect = 1;
1073 next;
1074 }
1075 }
1076}
1077END {
1078 if (expect)
1079 print "?";
1080}
1081EOF
1082
1083: process the command line options
4633a7c4
LW
1084set X `for arg in "$@"; do echo "X$arg"; done |
1085 sed -e s/X// | awk -f options.awk`
2304df62
AD
1086eval "set $*"
1087shift
1088rm -f options.awk
1089
1090: set up default values
1091fastread=''
1092reuseval=false
1093config_sh=''
1094alldone=''
1095error=''
1096silent=''
1097extractsh=''
ecfc5424 1098override=''
16d20bd9 1099knowitall=''
1aef975c 1100rm -f optdef.sh
28757baa 1101cat >optdef.sh <<EOS
1102$startsh
1103EOS
2304df62 1104
dfe9444c 1105
2304df62
AD
1106: option parsing
1107while test $# -gt 0; do
1108 case "$1" in
1109 -d) shift; fastread=yes;;
1110 -e) shift; alldone=cont;;
1111 -f)
1112 shift
1113 cd ..
1114 if test -r "$1"; then
1115 config_sh="$1"
1116 else
a0d0e21e 1117 echo "$me: cannot read config file $1." >&2
2304df62
AD
1118 error=true
1119 fi
1120 cd UU
1121 shift;;
1122 -h) shift; error=true;;
1123 -r) shift; reuseval=true;;
dfe9444c 1124 -s) shift; silent=true; realsilent=true;;
2304df62 1125 -E) shift; alldone=exit;;
16d20bd9 1126 -K) shift; knowitall=true;;
ecfc5424 1127 -O) shift; override=true;;
dfe9444c 1128 -S) shift; silent=true; extractsh=true;;
a0d0e21e
LW
1129 -D)
1130 shift
1131 case "$1" in
1132 *=)
1133 echo "$me: use '-U symbol=', not '-D symbol='." >&2
1134 echo "$me: ignoring -D $1" >&2
1135 ;;
ecfc5424 1136 *=*) echo "$1" | \
1aef975c
AD
1137 sed -e "s/'/'\"'\"'/g" -e "s/=\(.*\)/='\1'/" >> optdef.sh;;
1138 *) echo "$1='define'" >> optdef.sh;;
a0d0e21e
LW
1139 esac
1140 shift
1141 ;;
1142 -U)
1143 shift
1144 case "$1" in
1aef975c 1145 *=) echo "$1" >> optdef.sh;;
a0d0e21e
LW
1146 *=*)
1147 echo "$me: use '-D symbol=val', not '-U symbol=val'." >&2
1148 echo "$me: ignoring -U $1" >&2
1149 ;;
1aef975c 1150 *) echo "$1='undef'" >> optdef.sh;;
a0d0e21e
LW
1151 esac
1152 shift
1153 ;;
dfe9444c 1154 -V) echo "$me generated by metaconfig 3.0 PL70." >&2
2304df62
AD
1155 exit 0;;
1156 --) break;;
a0d0e21e 1157 -*) echo "$me: unknown option $1" >&2; shift; error=true;;
2304df62
AD
1158 *) break;;
1159 esac
1160done
1161
1162case "$error" in
1163true)
1164 cat >&2 <<EOM
2afac517 1165Usage: $me [-dehrsEKOSV] [-f config.sh] [-D symbol] [-D symbol=value]
a0d0e21e 1166 [-U symbol] [-U symbol=]
2304df62
AD
1167 -d : use defaults for all answers.
1168 -e : go on without questioning past the production of config.sh.
1169 -f : specify an alternate default configuration file.
1170 -h : print this help message and exit (with an error status).
1171 -r : reuse C symbols value if possible (skips costly nm extraction).
1172 -s : silent mode, only echoes questions and essential information.
a0d0e21e
LW
1173 -D : define symbol to have some value:
1174 -D symbol symbol gets the value 'define'
1175 -D symbol=value symbol gets the value 'value'
2304df62 1176 -E : stop at the end of questions, after having produced config.sh.
16d20bd9 1177 -K : do not use unless you know what you are doing.
ecfc5424 1178 -O : let -D and -U override definitions from loaded configuration file.
2304df62 1179 -S : perform variable substitutions on all .SH files (can mix with -f)
a0d0e21e
LW
1180 -U : undefine symbol:
1181 -U symbol symbol gets the value 'undef'
1182 -U symbol= symbol gets completely empty
2304df62
AD
1183 -V : print version number and exit (with a zero status).
1184EOM
1185 exit 1
1186 ;;
1187esac
1188
dfe9444c
AD
1189: Sanity checks
1190case "$fastread$alldone" in
1191yescont|yesexit) ;;
1192*)
1193 if test ! -t 0; then
1194 echo "Say 'sh Configure', not 'sh <Configure'"
1195 exit 1
1196 fi
1197 ;;
1198esac
1199
2304df62
AD
1200exec 4>&1
1201case "$silent" in
1202true) exec 1>/dev/null;;
1203esac
1204
ecfc5424 1205: run the defines and the undefines, if any, but leave the file out there...
1aef975c
AD
1206touch optdef.sh
1207. ./optdef.sh
a0d0e21e 1208
2304df62 1209: set package name
85e6fe83 1210package=perl5
1aef975c
AD
1211first=`echo $package | sed -e 's/^\(.\).*/\1/'`
1212last=`echo $package | sed -e 's/^.\(.*\)/\1/'`
1213case "`echo AbyZ | tr '[:lower:]' '[:upper:]' 2>/dev/null`" in
1214ABYZ) spackage=`echo $first | tr '[:lower:]' '[:upper:]'`$last;;
1215*) spackage=`echo $first | tr '[a-z]' '[A-Z]'`$last;;
1216esac
2304df62 1217
2304df62
AD
1218: Some greps do not return status, grrr.
1219echo "grimblepritz" >grimble
1220if grep blurfldyick grimble >/dev/null 2>&1 ; then
1221 contains=contains
1222elif grep grimblepritz grimble >/dev/null 2>&1 ; then
1223 contains=grep
1224else
1225 contains=contains
1226fi
1227rm -f grimble
1228: the following should work in any shell
1229case "$contains" in
1230contains*)
1231 echo " "
1232 echo "AGH! Grep doesn't return a status. Attempting remedial action."
1233 cat >contains <<'EOSS'
1234grep "$1" "$2" >.greptmp && cat .greptmp && test -s .greptmp
1235EOSS
1236chmod +x contains
1237esac
1238
dfe9444c
AD
1239: Find the path to the source tree
1240case "$src" in
1241'') case "$0" in
1242 */*) src=`echo $0 | sed -e 's%/[^/][^/]*$%%'`;;
1243 *) src='.';;
1244 esac;;
1245esac
1246case "$src" in
1247'') src=/
1248 rsrc=/
1249 ;;
1250/*) rsrc="$src";;
1251*) rsrc="../$src";;
1252esac
1253if test -f $rsrc/Configure && \
1254 $contains "^package=$package$" $rsrc/Configure >/dev/null 2>&1
1255then
1256 : found it, so we are ok.
1257else
1258 rsrc=''
1259 for src in . .. ../.. ../../.. ../../../..; do
1260 if test -f ../$src/Configure && \
1261 $contains "^package=$package$" ../$src/Configure >/dev/null 2>&1
1262 then
1263 rsrc=../$src
1264 break
1265 fi
1266 done
1267fi
1268case "$rsrc" in
1269'')
1270 cat <<EOM >&4
1271
1272Sorry, I can't seem to locate the source dir for $package. Please start
1273Configure with an explicit path -- i.e. /some/path/Configure.
1274
1275EOM
1276 exit 1
1277 ;;
1278../.) rsrc='..';;
1279*)
1280 echo " "
1281 echo "Sources for $package found in \"$src\"." >&4
1282 ;;
1283esac
1284
1285: script used to extract .SH files with variable substitutions
1286cat >extract <<'EOS'
1287CONFIG=true
1288echo "Doing variable substitutions on .SH files..."
1289if test -f $src/MANIFEST; then
f7ab18e9 1290 set x `awk '{print $1}' <$src/MANIFEST | grep '\.SH$'`
dfe9444c
AD
1291else
1292 echo "(Looking for .SH files under the source directory.)"
1293 set x `(cd $src; find . -name "*.SH" -print)`
1294fi
1295shift
1296case $# in
12970) set x `(cd $src; echo *.SH)`; shift;;
1298esac
1299if test ! -f $src/$1; then
1300 shift
1301fi
1302mkdir_p='
1303name=$1;
1304create="";
1305while test $name; do
1306 if test ! -d "$name"; then
1307 create="$name $create";
1308 name=`echo $name | sed -e "s|^[^/]*$||"`;
1309 name=`echo $name | sed -e "s|\(.*\)/.*|\1|"`;
1310 else
1311 name="";
1312 fi;
1313done;
1314for file in $create; do
1315 mkdir $file;
1316done
1317'
1318for file in $*; do
1319 case "$src" in
1320 ".")
1321 case "$file" in
1322 */*)
1323 dir=`expr X$file : 'X\(.*\)/'`
1324 file=`expr X$file : 'X.*/\(.*\)'`
1325 (cd $dir && . ./$file)
1326 ;;
1327 *)
1328 . ./$file
1329 ;;
1330 esac
1331 ;;
1332 *)
1333 case "$file" in
1334 */*)
1335 dir=`expr X$file : 'X\(.*\)/'`
1336 file=`expr X$file : 'X.*/\(.*\)'`
1337 (set x $dir; shift; eval $mkdir_p)
1338 sh <$src/$dir/$file
1339 ;;
1340 *)
1341 sh <$src/$file
1342 ;;
1343 esac
1344 ;;
1345 esac
1346done
1347if test -f $src/config_h.SH; then
1348 if test ! -f config.h; then
1349 : oops, they left it out of MANIFEST, probably, so do it anyway.
1350 . $src/config_h.SH
1351 fi
1352fi
1353EOS
1354
1355: extract files and exit if asked to do so
1356case "$extractsh" in
1357true)
1358 case "$realsilent" in
1359 true) ;;
1360 *) exec 1>&4;;
1361 esac
1362 case "$config_sh" in
1363 '') config_sh='config.sh';;
1364 esac
1365 echo " "
1366 echo "Fetching answers from $config_sh..."
1367 cd ..
1368 . $config_sh
1369 test "$override" && . ./optdef.sh
1370 echo " "
1371 . UU/extract
1372 rm -rf UU
1373 echo "Done."
1374 exit 0
1375 ;;
1376esac
1377
1378: Eunice requires " " instead of "", can you believe it
1379echo " "
1380: Here we go...
1381echo "Beginning of configuration questions for $package."
1382
1383trap 'echo " "; test -d ../UU && rm -rf X $rmlist; exit 1' 1 2 3 15
1384
2304df62
AD
1385: first determine how to suppress newline on echo command
1386echo " "
1387echo "Checking echo to see how to suppress newlines..."
1388(echo "hi there\c" ; echo " ") >.echotmp
1389if $contains c .echotmp >/dev/null 2>&1 ; then
1390 echo "...using -n."
1391 n='-n'
1392 c=''
1393else
1394 cat <<'EOM'
1395...using \c
1396EOM
1397 n=''
1398 c='\c'
1399fi
1400echo $n "The star should be here-->$c"
1401echo '*'
1402rm -f .echotmp
1403
1404: Now test for existence of everything in MANIFEST
1405echo " "
dfe9444c 1406if test -f $rsrc/MANIFEST; then
2304df62 1407 echo "First let's make sure your kit is complete. Checking..." >&4
dfe9444c 1408 awk '$1 !~ /PACK[A-Z]+/ {print $1}' $rsrc/MANIFEST | split -50
2304df62 1409 rm -f missing
dfe9444c 1410 tmppwd=`pwd`
2304df62 1411 for filelist in x??; do
dfe9444c 1412 (cd $rsrc; ls `cat $tmppwd/$filelist` >/dev/null 2>>$tmppwd/missing)
2304df62
AD
1413 done
1414 if test -s missing; then
1415 cat missing >&4
1416 cat >&4 <<'EOM'
1417
1418THIS PACKAGE SEEMS TO BE INCOMPLETE.
1419
1420You have the option of continuing the configuration process, despite the
1421distinct possibility that your kit is damaged, by typing 'y'es. If you
1422do, don't blame me if something goes wrong. I advise you to type 'n'o
5ff3f7a4 1423and contact the author (jhi@iki.fi).
2304df62
AD
1424
1425EOM
1426 echo $n "Continue? [n] $c" >&4
1427 read ans
1428 case "$ans" in
1429 y*)
1430 echo "Continuing..." >&4
1431 rm -f missing
1432 ;;
1433 *)
1434 echo "ABORTING..." >&4
1435 kill $$
1436 ;;
1437 esac
1438 else
dfe9444c 1439 echo "Looks good..."
2304df62
AD
1440 fi
1441else
1442 echo "There is no MANIFEST file. I hope your kit is complete !"
1443fi
1444rm -f missing x??
1445
5ff3f7a4
GS
1446echo " "
1447: Find the appropriate value for a newline for tr
1448if test -n "$DJGPP"; then
1449 trnl='\012'
1450fi
1451if test X"$trnl" = X; then
1452 case "`echo foo|tr '\n' x 2>/dev/null`" in
1453 foox) trnl='\n' ;;
1454 esac
1455fi
1456if test X"$trnl" = X; then
1457 case "`echo foo|tr '\012' x 2>/dev/null`" in
1458 foox) trnl='\012' ;;
1459 esac
1460fi
1461if test X"$trnl" = X; then
1462 cat <<EOM >&2
1463
1464$me: Fatal Error: cannot figure out how to translate newlines with 'tr'.
1465
1466EOM
1467 exit 1
1468fi
1469
2304df62
AD
1470: compute the number of columns on the terminal for proper question formatting
1471case "$COLUMNS" in
1472'') COLUMNS='80';;
1473esac
1474
1475: set up the echo used in my read
1476myecho="case \"\$xxxm\" in
1477'') echo $n \"\$rp $c\" >&4;;
1478*) case \"\$rp\" in
1479 '') echo $n \"[\$xxxm] $c\";;
1480 *)
1481 if test \`echo \"\$rp [\$xxxm] \" | wc -c\` -ge $COLUMNS; then
1482 echo \"\$rp\" >&4
1483 echo $n \"[\$xxxm] $c\" >&4
1484 else
1485 echo $n \"\$rp [\$xxxm] $c\" >&4
1486 fi
1487 ;;
1488 esac;;
1489esac"
1490
1491: now set up to do reads with possible shell escape and default assignment
1492cat <<EOSC >myread
28757baa 1493$startsh
2304df62
AD
1494xxxm=\$dflt
1495$myecho
1496ans='!'
1497case "\$fastread" in
1498yes) case "\$dflt" in
1499 '') ;;
1500 *) ans='';
1501 case "\$silent-\$rp" in
1502 true-) ;;
1503 *) echo " " >&4;;
1504 esac;;
1505 esac;;
1506*) case "\$silent" in
1507 true) case "\$rp" in
1508 '') ans='';;
1509 esac;;
1510 esac;;
1511esac
1512while expr "X\$ans" : "X!" >/dev/null; do
1513 read answ
1514 set x \$xxxm
1515 shift
dfe9444c 1516 aok=''; eval "ans=\\"\$answ\\"" && aok=y
2304df62 1517 case "\$answ" in
dfe9444c
AD
1518 "!")
1519 sh 1>&4
1520 echo " "
1521 $myecho
1522 ;;
1523 !*)
1524 set x \`expr "X\$ans" : "X!\(.*\)\$"\`
1525 shift
1526 sh 1>&4 -c "\$*"
1527 echo " "
1528 $myecho
1529 ;;
2304df62
AD
1530 "\$ans")
1531 case "\$ans" in
ecfc5424
AD
1532 \\&*)
1533 set x \`expr "X\$ans" : "X&\(.*\)\$"\`
1534 shift
1535 case "\$1" in
1536 -d)
1537 fastread=yes
40a7a20a 1538 echo "(OK, I'll run with -d after this question.)" >&4
ecfc5424
AD
1539 ;;
1540 -*)
40a7a20a 1541 echo "*** Sorry, \$1 not supported yet." >&4
ecfc5424
AD
1542 ;;
1543 esac
1544 $myecho
1545 ans=!
1546 ;;
2304df62
AD
1547 esac;;
1548 *)
1549 case "\$aok" in
1550 y)
1551 echo "*** Substitution done -- please confirm."
1552 xxxm="\$ans"
c9795ab7 1553 ans=\`echo $n "\$ans$c" | tr '$trnl' ' '\`
2304df62
AD
1554 xxxm="\$ans"
1555 ans=!
1556 ;;
1557 *)
1558 echo "*** Error -- try again."
1559 ans=!
1560 ;;
1561 esac
1562 $myecho
1563 ;;
1564 esac
1565 case "\$ans\$xxxm\$nostick" in
1566 '')
1567 ans=!
1568 $myecho
1569 ;;
1570 esac
1571done
1572case "\$ans" in
1573'') ans="\$xxxm";;
1574esac
1575EOSC
1576
1577: create .config dir to save info across Configure sessions
1578test -d ../.config || mkdir ../.config
1579cat >../.config/README <<EOF
1580This directory created by Configure to save information that should
dfe9444c 1581persist across sessions for $package.
2304df62
AD
1582
1583You may safely delete it if you wish.
1584EOF
1585
1586: general instructions
1587needman=true
1588firsttime=true
760ac839 1589user=`(logname) 2>/dev/null`
dfe9444c
AD
1590case "$user" in
1591'') user=`whoami 2>&1`;;
760ac839 1592esac
2304df62
AD
1593if $contains "^$user\$" ../.config/instruct >/dev/null 2>&1; then
1594 firsttime=false
1595 echo " "
1596 rp='Would you like to see the instructions?'
1597 dflt=n
1598 . ./myread
1599 case "$ans" in
1600 [yY]*) ;;
1601 *) needman=false;;
1602 esac
1603fi
1604if $needman; then
1605 cat <<EOH
4e2a5f63 1606
2304df62 1607This installation shell script will examine your system and ask you questions
a0d0e21e 1608to determine how the perl5 package should be installed. If you get
2304df62
AD
1609stuck on a question, you may use a ! shell escape to start a subshell or
1610execute a command. Many of the questions will have default answers in square
1611brackets; typing carriage return will give you the default.
1612
1613On some of the questions which ask for file or directory names you are allowed
1614to use the ~name construct to specify the login directory belonging to "name",
1615even if you don't have a shell which knows about that. Questions where this is
1616allowed will be marked "(~name ok)".
1617
1618EOH
1619 rp=''
1620 dflt='Type carriage return to continue'
1621 . ./myread
1622 cat <<'EOH'
1623
1624The prompter used in this script allows you to use shell variables and
1625backticks in your answers. You may use $1, $2, etc... to refer to the words
1626in the default answer, as if the default line was a set of arguments given to a
1627script shell. This means you may also use $* to repeat the whole default line,
1628so you do not have to re-type everything to add something to the default.
1629
1630Everytime there is a substitution, you will have to confirm. If there is an
1631error (e.g. an unmatched backtick), the default answer will remain unchanged
1632and you will be prompted again.
1633
1634If you are in a hurry, you may run 'Configure -d'. This will bypass nearly all
1635the questions and use the computed defaults (or the previous answers if there
1636was already a config.sh file). Type 'Configure -h' for a list of options.
ecfc5424 1637You may also start interactively and then answer '& -d' at any prompt to turn
dfe9444c 1638on the non-interactive behaviour for the remainder of the execution.
2304df62
AD
1639
1640EOH
1641 . ./myread
1642 cat <<EOH
1643
1644Much effort has been expended to ensure that this shell script will run on any
1645Unix system. If despite that it blows up on yours, your best bet is to edit
40000a8c
AD
1646Configure and run it again. If you can't run Configure for some reason,
1647you'll have to generate a config.sh file by hand. Whatever problems you
5ff3f7a4 1648have, let me (jhi@iki.fi) know how I blew it.
2304df62
AD
1649
1650This installation script affects things in two ways:
1651
16521) it may do direct variable substitutions on some of the files included
1653 in this kit.
16542) it builds a config.h file for inclusion in C programs. You may edit
1655 any of these files as the need arises after running this script.
1656
1657If you make a mistake on a question, there is no easy way to back up to it
1658currently. The easiest thing to do is to edit config.sh and rerun all the SH
1659files. Configure will offer to let you do this before it runs the SH files.
1660
1661EOH
1662 dflt='Type carriage return to continue'
1663 . ./myread
1664 case "$firsttime" in
1665 true) echo $user >>../.config/instruct;;
1666 esac
1667fi
1668
2304df62
AD
1669: find out where common programs are
1670echo " "
1671echo "Locating common programs..." >&4
1672cat <<EOSC >loc
1673$startsh
1674case \$# in
16750) exit 1;;
1676esac
1677thing=\$1
1678shift
1679dflt=\$1
1680shift
1681for dir in \$*; do
1682 case "\$thing" in
1683 .)
1684 if test -d \$dir/\$thing; then
1685 echo \$dir
1686 exit 0
1687 fi
1688 ;;
1689 *)
a0d0e21e 1690 for thisthing in \$dir/\$thing; do
ecfc5424 1691 : just loop through to pick last item
a0d0e21e 1692 done
25f94b33 1693 if test -f \$thisthing; then
a0d0e21e 1694 echo \$thisthing
2304df62
AD
1695 exit 0
1696 elif test -f \$dir/\$thing.exe; then
c4f23d77
AD
1697 if test -n "$DJGPP"; then
1698 echo \$dir/\$thing.exe
1699 else
1700 : on Eunice apparently
1701 echo \$dir/\$thing
1702 fi
2304df62
AD
1703 exit 0
1704 fi
1705 ;;
1706 esac
1707done
1708echo \$dflt
1709exit 1
1710EOSC
1711chmod +x loc
1712$eunicefix loc
1713loclist="
1714awk
1715cat
ecfc5424 1716comm
2304df62
AD
1717cp
1718echo
1719expr
1720grep
a0d0e21e 1721ls
dfe9444c 1722make
2304df62 1723mkdir
2304df62
AD
1724rm
1725sed
1726sort
85e6fe83 1727touch
2304df62
AD
1728tr
1729uniq
1730"
1731trylist="
1732Mcc
dfe9444c 1733ar
2304df62
AD
1734byacc
1735cpp
1736csh
1737date
1738egrep
8ff267be 1739gzip
2c7991dc 1740less
8ff267be 1741ln
2c7991dc 1742more
693762b4 1743nm
2304df62 1744nroff
2c7991dc 1745pg
693762b4 1746tee
2304df62
AD
1747test
1748uname
8ff267be 1749zip
2304df62 1750"
8e07c86e 1751pth=`echo $PATH | sed -e "s/$p_/ /g"`
2304df62
AD
1752pth="$pth /lib /usr/lib"
1753for file in $loclist; do
dfe9444c
AD
1754 eval xxx=\$$file
1755 case "$xxx" in
1756 /*|?:[\\/]*)
1757 if test -f "$xxx"; then
1758 : ok
1759 else
1760 echo "WARNING: no $xxx -- ignoring your setting for $file." >&4
1761 xxx=`./loc $file $file $pth`
1762 fi
1763 ;;
1764 '') xxx=`./loc $file $file $pth`;;
1765 *) xxx=`./loc $xxx $xxx $pth`;;
1766 esac
2304df62
AD
1767 eval $file=$xxx
1768 eval _$file=$xxx
1769 case "$xxx" in
1770 /*)
1771 echo $file is in $xxx.
1772 ;;
8e07c86e
AD
1773 ?:[\\/]*)
1774 echo $file is in $xxx.
1775 ;;
2304df62 1776 *)
25f94b33
AD
1777 echo "I don't know where '$file' is, and my life depends on it." >&4
1778 echo "Go find a public domain implementation or fix your PATH setting!" >&4
4633a7c4 1779 exit 1
2304df62
AD
1780 ;;
1781 esac
1782done
1783echo " "
1784echo "Don't worry if any of the following aren't found..."
1785say=offhand
1786for file in $trylist; do
dfe9444c
AD
1787 eval xxx=\$$file
1788 case "$xxx" in
1789 /*|?:[\\/]*)
1790 if test -f "$xxx"; then
1791 : ok
1792 else
1793 echo "WARNING: no $xxx -- ignoring your setting for $file." >&4
1794 xxx=`./loc $file $file $pth`
1795 fi
1796 ;;
1797 '') xxx=`./loc $file $file $pth`;;
1798 *) xxx=`./loc $xxx $xxx $pth`;;
1799 esac
2304df62
AD
1800 eval $file=$xxx
1801 eval _$file=$xxx
1802 case "$xxx" in
1803 /*)
1804 echo $file is in $xxx.
1805 ;;
8e07c86e
AD
1806 ?:[\\/]*)
1807 echo $file is in $xxx.
1808 ;;
2304df62
AD
1809 *)
1810 echo "I don't see $file out there, $say."
1811 say=either
1812 ;;
1813 esac
1814done
1815case "$egrep" in
1816egrep)
1817 echo "Substituting grep for egrep."
1818 egrep=$grep
1819 ;;
1820esac
8ff267be 1821case "$ln" in
1822ln)
1823 echo "Substituting cp for ln."
1824 ln=$cp
1825 ;;
1826esac
2304df62
AD
1827case "$test" in
1828test)
1829 echo "Hopefully test is built into your sh."
1830 ;;
1831*)
ecfc5424 1832 if `sh -c "PATH= test true" >/dev/null 2>&1`; then
2304df62
AD
1833 echo "Using the test built into your sh."
1834 test=test
1835 _test=test
1836 fi
1837 ;;
1838esac
1839case "$echo" in
1840echo)
1841 echo "Hopefully echo is built into your sh."
1842 ;;
1843'') ;;
1844*)
1845 echo " "
1846echo "Checking compatibility between $echo and builtin echo (if any)..." >&4
1847 $echo $n "hi there$c" >foo1
1848 echo $n "hi there$c" >foo2
1849 if cmp foo1 foo2 >/dev/null 2>&1; then
1850 echo "They are compatible. In fact, they may be identical."
1851 else
1852 case "$n" in
1853 '-n') n='' c='\c';;
1854 *) n='-n' c='';;
1855 esac
1856 cat <<FOO
1857They are not compatible! You are probably running ksh on a non-USG system.
1858I'll have to use $echo instead of the builtin, since Bourne shell doesn't
1859have echo built in and we may have to run some Bourne shell scripts. That
1860means I'll have to use '$n$c' to suppress newlines now. Life is ridiculous.
1861
1862FOO
1863 $echo $n "The star should be here-->$c"
1864 $echo "*"
1865 fi
1866 $rm -f foo1 foo2
1867 ;;
1868esac
1869
a0d0e21e
LW
1870: determine whether symbolic links are supported
1871echo " "
1872$touch blurfl
1873if $ln -s blurfl sym > /dev/null 2>&1 ; then
1874 echo "Symbolic links are supported." >&4
1875 lns="$ln -s"
1876else
1877 echo "Symbolic links are NOT supported." >&4
1878 lns="$ln"
1879fi
1880$rm -f blurfl sym
1881
ecfc5424
AD
1882: see whether [:lower:] and [:upper:] are supported character classes
1883echo " "
ecfc5424
AD
1884case "`echo AbyZ | $tr '[:lower:]' '[:upper:]' 2>/dev/null`" in
1885ABYZ)
1886 echo "Good, your tr supports [:lower:] and [:upper:] to convert case." >&4
1887 up='[:upper:]'
1888 low='[:lower:]'
1889 ;;
28e8609d
JH
1890*) # There is a discontinuity in EBCDIC between 'I' and 'J'
1891 # (0xc9 and 0xd1), therefore that is a nice testing point.
1892 if test "X$up" = X -o "X$low" = X; then
3eaeeeae 1893 case "`echo IJ | $tr '[I-J]' '[i-j]' 2>/dev/null`" in
28e8609d
JH
1894 ij) up='[A-Z]'
1895 low='[a-z]'
1896 ;;
1897 esac
1898 fi
1899 if test "X$up" = X -o "X$low" = X; then
3eaeeeae 1900 case "`echo IJ | $tr I-J i-j 2>/dev/null`" in
28e8609d
JH
1901 ij) up='A-Z'
1902 low='a-z'
1903 ;;
1904 esac
1905 fi
1906 if test "X$up" = X -o "X$low" = X; then
1907 case "`echo IJ | od -x 2>/dev/null`" in
1908 *C9D1*|*c9d1*)
1909 echo "Hey, this might be EBCDIC." >&4
1910 if test "X$up" = X -o "X$low" = X; then
5ff3f7a4 1911 case "`echo IJ | $tr '[A-IJ-RS-Z]' '[a-ij-rs-z]' 2>/dev/null`" in
28e8609d
JH
1912 ij) up='[A-IJ-RS-Z]'
1913 low='[a-ij-rs-z]'
1914 ;;
1915 esac
1916 fi
1917 if test "X$up" = X -o "X$low" = X; then
5ff3f7a4 1918 case "`echo IJ | $tr A-IJ-RS-Z a-ij-rs-z 2>/dev/null`" in
28e8609d
JH
1919 ij) up='A-IJ-RS-Z'
1920 low='a-ij-rs-z'
1921 ;;
1922 esac
1923 fi
1924 ;;
1925 esac
1926 fi
1927esac
3eaeeeae 1928case "`echo IJ | $tr \"$up\" \"$low\" 2>/dev/null`" in
28e8609d
JH
1929ij)
1930 echo "Using $up and $low to convert case." >&4
1931 ;;
ecfc5424 1932*)
28e8609d
JH
1933 echo "I don't know how to translate letters from upper to lower case." >&4
1934 echo "Your tr is not acting any way I know of." >&4
1935 exit 1
1936 ;;
ecfc5424
AD
1937esac
1938: set up the translation script tr, must be called with ./tr of course
1939cat >tr <<EOSC
1940$startsh
1941case "\$1\$2" in
1942'[A-Z][a-z]') exec $tr '$up' '$low';;
1943'[a-z][A-Z]') exec $tr '$low' '$up';;
1944esac
1945exec $tr "\$@"
1946EOSC
1947chmod +x tr
1948$eunicefix tr
1949
2304df62
AD
1950: Try to determine whether config.sh was made on this system
1951case "$config_sh" in
1952'')
1953myuname=`( ($uname -a) 2>/dev/null || hostname) 2>&1`
28e8609d
JH
1954# tr '[A-Z]' '[a-z]' would not work in EBCDIC
1955# because the A-Z/a-z are not consecutive.
a0d0e21e 1956myuname=`echo $myuname | $sed -e 's/^[^=]*=//' -e 's/\///g' | \
3eaeeeae 1957 ./tr '[A-Z]' '[a-z]' | $tr $trnl ' '`
1aef975c 1958newmyuname="$myuname"
2304df62 1959dflt=n
16d20bd9
AD
1960case "$knowitall" in
1961'')
1962 if test -f ../config.sh; then
1963 if $contains myuname= ../config.sh >/dev/null 2>&1; then
1964 eval "`grep myuname= ../config.sh`"
1965 fi
1966 if test "X$myuname" = "X$newmyuname"; then
1967 dflt=y
1968 fi
2304df62 1969 fi
16d20bd9
AD
1970 ;;
1971*) dflt=y;;
1972esac
2304df62
AD
1973
1974: Get old answers from old config file if Configure was run on the
1975: same system, otherwise use the hints.
1976hint=default
1977cd ..
1978if test -f config.sh; then
16d20bd9
AD
1979 echo " "
1980 rp="I see a config.sh file. Shall I use it to set the defaults?"
2304df62
AD
1981 . UU/myread
1982 case "$ans" in
1983 n*|N*) echo "OK, I'll ignore it."; mv config.sh config.sh.old;;
1984 *) echo "Fetching default answers from your old config.sh file..." >&4
ecfc5424
AD
1985 tmp_n="$n"
1986 tmp_c="$c"
85cad39c 1987 tmp_sh="$sh"
2304df62
AD
1988 . ./config.sh
1989 cp config.sh UU
ecfc5424
AD
1990 n="$tmp_n"
1991 c="$tmp_c"
85cad39c 1992 : Older versions did not always set $sh. Catch re-use of such
1993 : an old config.sh.
1994 case "$sh" in
1995 '') sh="$tmp_sh" ;;
1996 esac
2304df62
AD
1997 hint=previous
1998 ;;
1999 esac
2000fi
2001if test ! -f config.sh; then
2002 $cat <<EOM
2003
4e2a5f63
AD
2004First time through, eh? I have some defaults handy for some systems
2005that need some extra help getting the Configure answers right:
2304df62
AD
2006
2007EOM
dfe9444c 2008 (cd $src/hints; ls -C *.sh) | $sed 's/\.sh/ /g' >&4
2304df62
AD
2009 dflt=''
2010 : Half the following guesses are probably wrong... If you have better
5ff3f7a4 2011 : tests or hints, please send them to jhi@iki.fi
2304df62 2012 : The metaconfig authors would also appreciate a copy...
a0d0e21e 2013 $test -f /irix && osname=irix
85e6fe83
LW
2014 $test -f /xenix && osname=sco_xenix
2015 $test -f /dynix && osname=dynix
2016 $test -f /dnix && osname=dnix
5f05dabc 2017 $test -f /lynx.os && osname=lynxos
2018 $test -f /unicos && osname=unicos && osvers=`$uname -r`
7a4c00b4 2019 $test -f /unicosmk.ar && osname=unicosmk && osvers=`$uname -r`
85e6fe83 2020 $test -f /bin/mips && /bin/mips && osname=mips
ecfc5424
AD
2021 $test -d /NextApps && set X `hostinfo | grep 'NeXT Mach.*:' | \
2022 $sed -e 's/://' -e 's/\./_/'` && osname=next && osvers=$4
a0d0e21e
LW
2023 $test -d /usr/apollo/bin && osname=apollo
2024 $test -f /etc/saf/_sactab && osname=svr4
85e6fe83 2025 $test -d /usr/include/minix && osname=minix
e060872b 2026 if $test -d /MachTen -o -d /MachTen_Folder; then
dfe9444c 2027 osname=machten
4633a7c4 2028 if $test -x /sbin/version; then
dfe9444c 2029 osvers=`/sbin/version | $awk '{print $2}' |
4633a7c4
LW
2030 $sed -e 's/[A-Za-z]$//'`
2031 elif $test -x /usr/etc/version; then
dfe9444c 2032 osvers=`/usr/etc/version | $awk '{print $2}' |
4633a7c4
LW
2033 $sed -e 's/[A-Za-z]$//'`
2034 else
2035 osvers="$2.$3"
2036 fi
2037 fi
85ab1d1d
JH
2038 $test -f /sys/posix.dll &&
2039 $test -f /usr/bin/what &&
2040 set X `/usr/bin/what /sys/posix.dll` &&
2041 $test "$3" = UWIN &&
2042 osname=uwin &&
2043 osvers="$5"
2304df62
AD
2044 if $test -f $uname; then
2045 set X $myuname
2046 shift
2047
2304df62 2048 case "$5" in
85e6fe83 2049 fps*) osname=fps ;;
2304df62
AD
2050 mips*)
2051 case "$4" in
85e6fe83
LW
2052 umips) osname=umips ;;
2053 *) osname=mips ;;
2304df62 2054 esac;;
85e6fe83
LW
2055 [23]100) osname=mips ;;
2056 next*) osname=next ;;
ecfc5424
AD
2057 i386*)
2058 if $test -f /etc/kconfig; then
2059 osname=isc
a0d0e21e
LW
2060 if test "$lns" = "ln -s"; then
2061 osvers=4
2062 elif $contains _SYSV3 /usr/include/stdio.h > /dev/null 2>&1 ; then
2063 osvers=3
2304df62 2064 elif $contains _POSIX_SOURCE /usr/include/stdio.h > /dev/null 2>&1 ; then
a0d0e21e 2065 osvers=2
ecfc5424
AD
2066 fi
2067 fi
2068 ;;
c4f23d77
AD
2069 pc*)
2070 if test -n "$DJGPP"; then
2071 osname=dos
2072 osvers=djgpp
2073 fi
2074 ;;
2304df62
AD
2075 esac
2076
2077 case "$1" in
a0d0e21e
LW
2078 aix) osname=aix
2079 tmp=`( (oslevel) 2>/dev/null || echo "not found") 2>&1`
2080 case "$tmp" in
1aef975c 2081 'not found') osvers="$4"."$3" ;;
a0d0e21e
LW
2082 '<3240'|'<>3240') osvers=3.2.0 ;;
2083 '=3240'|'>3240'|'<3250'|'<>3250') osvers=3.2.4 ;;
2084 '=3250'|'>3250') osvers=3.2.5 ;;
1aef975c 2085 *) osvers=$tmp;;
a0d0e21e
LW
2086 esac
2087 ;;
23f87696
SZ
2088 *dc.osx) osname=dcosx
2089 osvers="$3"
2090 ;;
a0d0e21e
LW
2091 dnix) osname=dnix
2092 osvers="$3"
2093 ;;
2094 domainos) osname=apollo
2095 osvers="$3"
2096 ;;
2097 dgux) osname=dgux
2098 osvers="$3"
2099 ;;
760ac839 2100 dynixptx*) osname=dynixptx
e58e581d 2101 osvers=`echo "$4"|sed 's/^v//'`
760ac839 2102 ;;
a0d0e21e
LW
2103 freebsd) osname=freebsd
2104 osvers="$3" ;;
2105 genix) osname=genix ;;
2106 hp*) osname=hpux
bfb7748a 2107 osvers=`echo "$3" | $sed 's,.*\.\([0-9]*\.[0-9]*\),\1,'`
a0d0e21e 2108 ;;
a78b0d02 2109 irix*) osname=irix
a0d0e21e
LW
2110 case "$3" in
2111 4*) osvers=4 ;;
2112 5*) osvers=5 ;;
ecfc5424 2113 *) osvers="$3" ;;
a0d0e21e
LW
2114 esac
2115 ;;
2116 linux) osname=linux
2117 case "$3" in
a0d0e21e
LW
2118 *) osvers="$3" ;;
2119 esac
2120 ;;
28e8609d
JH
2121 MiNT) osname=mint
2122 ;;
2123 netbsd*) osname=netbsd
ecfc5424
AD
2124 osvers="$3"
2125 ;;
4e81affe
MM
2126 news-os) osvers="$3"
2127 case "$3" in
2128 4*) osname=newsos4 ;;
2129 *) osname=newsos ;;
2130 esac
2131 ;;
a0d0e21e
LW
2132 bsd386) osname=bsd386
2133 osvers=`$uname -r`
2134 ;;
a1a0e61e
TD
2135 POSIX-BC | posix-bc ) osname=posix-bc
2136 osvers="$3"
2137 ;;
ae3afa4e
TH
2138 powerux | power_ux | powermax_os | powermaxos | \
2139 powerunix | power_unix) osname=powerux
2140 osvers="$3"
2141 ;;
a0d0e21e
LW
2142 next*) osname=next ;;
2143 solaris) osname=solaris
2144 case "$3" in
2145 5*) osvers=`echo $3 | $sed 's/^5/2/g'` ;;
ecfc5424 2146 *) osvers="$3" ;;
a0d0e21e
LW
2147 esac
2148 ;;
85e6fe83
LW
2149 sunos) osname=sunos
2150 case "$3" in
85e6fe83
LW
2151 5*) osname=solaris
2152 osvers=`echo $3 | $sed 's/^5/2/g'` ;;
a0d0e21e 2153 *) osvers="$3" ;;
2304df62
AD
2154 esac
2155 ;;
a0d0e21e 2156 titanos) osname=titanos
85e6fe83 2157 case "$3" in
a0d0e21e
LW
2158 1*) osvers=1 ;;
2159 2*) osvers=2 ;;
2160 3*) osvers=3 ;;
2161 4*) osvers=4 ;;
ecfc5424 2162 *) osvers="$3" ;;
2304df62
AD
2163 esac
2164 ;;
85e6fe83 2165 ultrix) osname=ultrix
ecfc5424 2166 osvers="$3"
2304df62 2167 ;;
28757baa 2168 osf1|mls+) case "$5" in
fed7345c
AD
2169 alpha)
2170 osname=dec_osf
313489a2 2171 osvers=`echo "$3" | sed 's/^[xvt]//'`
ecfc5424
AD
2172 ;;
2173 hp*) osname=hp_osf1 ;;
2174 mips) osname=mips_osf1 ;;
85e6fe83
LW
2175 esac
2176 ;;
a0d0e21e
LW
2177 uts) osname=uts
2178 osvers="$3"
2179 ;;
ff68c719 2180 qnx) osname=qnx
2181 osvers="$4"
2182 ;;
85e6fe83 2183 $2) case "$osname" in
2304df62 2184 *isc*) ;;
a0d0e21e 2185 *freebsd*) ;;
5f05dabc 2186 svr*)
a0d0e21e
LW
2187 : svr4.x or possibly later
2188 case "svr$3" in
2189 ${osname}*)
2190 osname=svr$3
2191 osvers=$4
2192 ;;
2193 esac
2194 case "$osname" in
2195 svr4.0)
2196 : Check for ESIX
2197 if test -f /stand/boot ; then
2198 eval `grep '^INITPROG=[a-z/0-9]*$' /stand/boot`
ecfc5424
AD
2199 if test -n "$INITPROG" -a -f "$INITPROG"; then
2200 isesix=`strings -a $INITPROG|grep 'ESIX SYSTEM V/386 Release 4.0'`
2201 if test -n "$isesix"; then
a0d0e21e
LW
2202 osname=esix4
2203 fi
2204 fi
2205 fi
2206 ;;
2207 esac
2208 ;;
2304df62 2209 *) if test -f /etc/systemid; then
a0d0e21e
LW
2210 osname=sco
2211 set `echo $3 | $sed 's/\./ /g'` $4
c4f23d77 2212 if $test -f $src/hints/sco_$1_$2_$3.sh; then
85e6fe83 2213 osvers=$1.$2.$3
c4f23d77 2214 elif $test -f $src/hints/sco_$1_$2.sh; then
85e6fe83 2215 osvers=$1.$2
c4f23d77 2216 elif $test -f $src/hints/sco_$1.sh; then
85e6fe83 2217 osvers=$1
2304df62 2218 fi
a0d0e21e
LW
2219 else
2220 case "$osname" in
2221 '') : Still unknown. Probably a generic Sys V.
2222 osname="sysv"
2223 osvers="$3"
2224 ;;
2225 esac
2304df62
AD
2226 fi
2227 ;;
2228 esac
2229 ;;
a0d0e21e
LW
2230 *) case "$osname" in
2231 '') : Still unknown. Probably a generic BSD.
2232 osname="$1"
2233 osvers="$3"
2234 ;;
2235 esac
2236 ;;
2304df62
AD
2237 esac
2238 else
dfe9444c
AD
2239 if test -f /vmunix -a -f $src/hints/news_os.sh; then
2240 (what /vmunix | UU/tr '[A-Z]' '[a-z]') > UU/kernel.what 2>&1
2241 if $contains news-os UU/kernel.what >/dev/null 2>&1; then
2242 osname=news_os
2304df62 2243 fi
dfe9444c 2244 $rm -f UU/kernel.what
8e07c86e
AD
2245 elif test -d c:/.; then
2246 set X $myuname
2247 osname=os2
2248 osvers="$5"
2304df62
AD
2249 fi
2250 fi
85e6fe83 2251
a0d0e21e
LW
2252 : Now look for a hint file osname_osvers, unless one has been
2253 : specified already.
2254 case "$hintfile" in
2255 ''|' ')
ecfc5424 2256 file=`echo "${osname}_${osvers}" | $sed -e 's@\.@_@g' -e 's@_$@@'`
a0d0e21e 2257 : Also try without trailing minor version numbers.
ecfc5424
AD
2258 xfile=`echo $file | $sed -e 's@_[^_]*$@@'`
2259 xxfile=`echo $xfile | $sed -e 's@_[^_]*$@@'`
2260 xxxfile=`echo $xxfile | $sed -e 's@_[^_]*$@@'`
2261 xxxxfile=`echo $xxxfile | $sed -e 's@_[^_]*$@@'`
a0d0e21e
LW
2262 case "$file" in
2263 '') dflt=none ;;
2264 *) case "$osvers" in
2265 '') dflt=$file
2266 ;;
dfe9444c 2267 *) if $test -f $src/hints/$file.sh ; then
a0d0e21e 2268 dflt=$file
dfe9444c 2269 elif $test -f $src/hints/$xfile.sh ; then
a0d0e21e 2270 dflt=$xfile
dfe9444c 2271 elif $test -f $src/hints/$xxfile.sh ; then
a0d0e21e 2272 dflt=$xxfile
dfe9444c 2273 elif $test -f $src/hints/$xxxfile.sh ; then
a0d0e21e 2274 dflt=$xxxfile
dfe9444c 2275 elif $test -f $src/hints/$xxxxfile.sh ; then
a0d0e21e 2276 dflt=$xxxxfile
dfe9444c 2277 elif $test -f "$src/hints/${osname}.sh" ; then
a0d0e21e
LW
2278 dflt="${osname}"
2279 else
2280 dflt=none
2281 fi
2282 ;;
2283 esac
85e6fe83
LW
2284 ;;
2285 esac
4e2a5f63
AD
2286 if $test -f Policy.sh ; then
2287 case "$dflt" in
2288 *Policy*) ;;
2289 none) dflt="Policy" ;;
2290 *) dflt="Policy $dflt" ;;
2291 esac
2292 fi
85e6fe83 2293 ;;
a0d0e21e 2294 *)
ecfc5424 2295 dflt=`echo $hintfile | $sed 's/\.sh$//'`
a0d0e21e 2296 ;;
2304df62 2297 esac
1aef975c 2298
4e2a5f63
AD
2299 if $test -f Policy.sh ; then
2300 $cat <<EOM
2301
2302There's also a Policy hint file available, which should make the
2303site-specific (policy) questions easier to answer.
2304EOM
2305
2306 fi
2307
2304df62
AD
2308 $cat <<EOM
2309
2310You may give one or more space-separated answers, or "none" if appropriate.
4e2a5f63
AD
2311A well-behaved OS will have no hints, so answering "none" or just "Policy"
2312is a good thing. DO NOT give a wrong version.
2304df62
AD
2313
2314EOM
4e2a5f63 2315
2304df62 2316 rp="Which of these apply, if any?"
dfe9444c 2317 . UU/myread
85e6fe83
LW
2318 tans=$ans
2319 for file in $tans; do
4e2a5f63
AD
2320 if $test X$file = XPolicy -a -f Policy.sh; then
2321 . Policy.sh
2322 $cat Policy.sh >> UU/config.sh
2323 elif $test -f $src/hints/$file.sh; then
dfe9444c
AD
2324 . $src/hints/$file.sh
2325 $cat $src/hints/$file.sh >> UU/config.sh
85e6fe83 2326 elif $test X$tans = X -o X$tans = Xnone ; then
2304df62
AD
2327 : nothing
2328 else
85e6fe83
LW
2329 : Give one chance to correct a possible typo.
2330 echo "$file.sh does not exist"
2331 dflt=$file
2332 rp="hint to use instead?"
dfe9444c 2333 . UU/myread
85e6fe83 2334 for file in $ans; do
dfe9444c
AD
2335 if $test -f "$src/hints/$file.sh"; then
2336 . $src/hints/$file.sh
2337 $cat $src/hints/$file.sh >> UU/config.sh
85e6fe83
LW
2338 elif $test X$ans = X -o X$ans = Xnone ; then
2339 : nothing
2340 else
2341 echo "$file.sh does not exist -- ignored."
2342 fi
2343 done
2304df62
AD
2344 fi
2345 done
85e6fe83 2346
2304df62 2347 hint=recommended
85e6fe83 2348 : Remember our hint file for later.
dfe9444c 2349 if $test -f "$src/hints/$file.sh" ; then
a0d0e21e 2350 hintfile="$file"
85e6fe83 2351 else
a0d0e21e 2352 hintfile=''
85e6fe83 2353 fi
2304df62
AD
2354fi
2355cd UU
2356;;
2357*)
2358 echo " "
2359 echo "Fetching default answers from $config_sh..." >&4
ecfc5424
AD
2360 tmp_n="$n"
2361 tmp_c="$c"
2304df62
AD
2362 cd ..
2363 cp $config_sh config.sh 2>/dev/null
a78b0d02 2364 chmod +w config.sh
2304df62
AD
2365 . ./config.sh
2366 cd UU
2367 cp ../config.sh .
ecfc5424
AD
2368 n="$tmp_n"
2369 c="$tmp_c"
2304df62
AD
2370 hint=previous
2371 ;;
2372esac
1aef975c
AD
2373test "$override" && . ./optdef.sh
2374myuname="$newmyuname"
2304df62
AD
2375
2376: Restore computed paths
2377for file in $loclist $trylist; do
2378 eval $file="\$_$file"
2379done
2380
85e6fe83 2381cat << EOM
a0d0e21e 2382
85e6fe83 2383Configure uses the operating system name and version to set some defaults.
ecfc5424
AD
2384The default value is probably right if the name rings a bell. Otherwise,
2385since spelling matters for me, either accept the default or answer "none"
2386to leave it blank.
a0d0e21e 2387
85e6fe83 2388EOM
85e6fe83 2389case "$osname" in
a0d0e21e 2390 ''|' ')
85e6fe83 2391 case "$hintfile" in
a0d0e21e 2392 ''|' '|none) dflt=none ;;
ecfc5424 2393 *) dflt=`echo $hintfile | $sed -e 's/\.sh$//' -e 's/_.*$//'` ;;
85e6fe83
LW
2394 esac
2395 ;;
2396 *) dflt="$osname" ;;
2397esac
2398rp="Operating system name?"
2399. ./myread
2400case "$ans" in
ecfc5424
AD
2401none) osname='' ;;
2402*) osname=`echo "$ans" | $sed -e 's/[ ][ ]*/_/g' | ./tr '[A-Z]' '[a-z]'`;;
85e6fe83 2403esac
8ff267be 2404echo " "
2405case "$osvers" in
2406 ''|' ')
2407 case "$hintfile" in
2408 ''|' '|none) dflt=none ;;
2409 *) dflt=`echo $hintfile | $sed -e 's/\.sh$//' -e 's/^[^_]*//'`
2410 dflt=`echo $dflt | $sed -e 's/^_//' -e 's/_/./g'`
2411 case "$dflt" in
2412 ''|' ') dflt=none ;;
2413 esac
2414 ;;
2415 esac
2416 ;;
2417 *) dflt="$osvers" ;;
2418esac
2419rp="Operating system version?"
2420. ./myread
2421case "$ans" in
2422none) osvers='' ;;
2423*) osvers="$ans" ;;
2424esac
2425
2304df62 2426: who configured the system
7792a3d7 2427cf_time=`LC_ALL=C; export LC_ALL; $date 2>&1`
8ff267be 2428cf_by=`(logname) 2>/dev/null`
dfe9444c
AD
2429case "$cf_by" in
2430"")
8ff267be 2431 cf_by=`(whoami) 2>/dev/null`
dfe9444c
AD
2432 case "$cf_by" in
2433 "") cf_by=unknown ;;
8ff267be 2434 esac ;;
2435esac
2304df62 2436
dfe9444c
AD
2437: set up the script used to warn in case of inconsistency
2438cat <<EOS >whoa
2439$startsh
2440EOS
2441cat <<'EOSC' >>whoa
2442dflt=y
2443echo " "
2444echo "*** WHOA THERE!!! ***" >&4
2445echo " The $hint value for \$$var on this machine was \"$was\"!" >&4
2446rp=" Keep the $hint value?"
2447. ./myread
2448case "$ans" in
2449y) td=$was; tu=$was;;
2450esac
2451EOSC
2452
2453: function used to set $1 to $val
2454setvar='var=$1; eval "was=\$$1"; td=$define; tu=$undef;
2455case "$val$was" in
2456$define$undef) . ./whoa; eval "$var=\$td";;
2457$undef$define) . ./whoa; eval "$var=\$tu";;
2458*) eval "$var=$val";;
2459esac'
2460
2461cat <<EOM
2462
2463Perl can be built to take advantage of threads, on some systems.
2464To do so, Configure must be run with -Dusethreads.
2465(See README.threads for details.)
2466EOM
2467case "$usethreads" in
2468$define|true|[yY]*) dflt='y';;
2469*) dflt='n';;
2470esac
2471rp='Build a threading Perl?'
2472. ./myread
2473case "$ans" in
2474y|Y) val="$define" ;;
2475*) val="$undef" ;;
2476esac
2477set usethreads
2478eval $setvar
693762b4 2479: Look for a hint-file generated 'call-back-unit'. Now that the
dc45a647
MB
2480: user has specified if a threading perl is to be built, we may need
2481: to set or change some other defaults.
693762b4
AD
2482if $test -f usethreads.cbu; then
2483 . ./usethreads.cbu
2484fi
2485case "$d_oldpthreads" in
2486'') : Configure tests would be welcome here. For now, assume undef.
2487 val="$undef" ;;
2488*) val="$d_oldpthreads" ;;
2489esac
2490set d_oldpthreads
2491eval $setvar
dfe9444c 2492
85ab1d1d
JH
2493cat <<EOM
2494
2495Perl can be built so that multiple Perl interpreters can coexist
2496within the same Perl executable. To do so, Configure must be run with
2497-Dusemultiplicity.
2498
2499Normally you do not need this and you should answer no.
2500
2501EOM
2502case "$usemultiplicity" in
2503$define|true|[yY]*) dflt='y';;
2504*) dflt='n';;
2505esac
2506rp='Build Perl for multiplicity?'
2507. ./myread
2508case "$ans" in
2509y|Y) val="$define" ;;
2510*) val="$undef" ;;
2511esac
2512set usemultiplicity
2513eval $setvar
2514
2515cat <<EOM
2516
2517Perl can be built to take advantage of explicit 64-bit interfaces,
2518on some systems. To do so, Configure must be run with -Duse64bits.
2519
2520If this doesn't make any sense to you, just accept the default 'n'.
2521EOM
2522case "$use64bits" in
2523$define|true|[yY]*) dflt='y';;
2524*) dflt='n';;
2525esac
2526rp='Try to use explicit 64-bit interfaces, if available?'
2527. ./myread
2528case "$ans" in
2529y|Y)
2530 val="$define"
2531 ;;
2532*)
2533 val="$undef"
2534 ;;
2535esac
2536set use64bits
2537eval $setvar
2538
2539archname64=''
2540
4633a7c4 2541: determine the architecture name
2304df62 2542echo " "
4633a7c4
LW
2543if xxx=`./loc arch blurfl $pth`; $test -f "$xxx"; then
2544 tarch=`arch`"-$osname"
2545elif xxx=`./loc uname blurfl $pth`; $test -f "$xxx" ; then
2546 if uname -m > tmparch 2>&1 ; then
7e1af8bc 2547 tarch=`$sed -e 's/ *$//' -e 's/ /_/g' \
5f05dabc 2548 -e 's/$/'"-$osname/" tmparch`
4633a7c4
LW
2549 else
2550 tarch="$osname"
2551 fi
2552 $rm -f tmparch
2553else
2554 tarch="$osname"
2555fi
2556case "$myarchname" in
2557''|"$tarch") ;;
2558*)
2559 echo "(Your architecture name used to be $myarchname.)"
2560 archname=''
2304df62
AD
2561 ;;
2562esac
85ab1d1d 2563myarchname="$tarch"
4633a7c4
LW
2564case "$archname" in
2565'') dflt="$tarch";;
2566*) dflt="$archname";;
2567esac
2568rp='What is your architecture name'
2569. ./myread
85ab1d1d 2570archname="$ans"
dc66995c 2571case "$usethreads" in
85ab1d1d
JH
2572$define)
2573 echo "Threads selected." >&4
2574 case "$archname" in
2575 *-thread*) echo "...and architecture name already has -thread." >&4
2576 ;;
2577 *) archname="$archname-thread"
2578 echo "...setting architecture name to $archname." >&4
2579 ;;
2580 esac
2581 ;;
dc66995c 2582esac
85ab1d1d
JH
2583case "$usemultiplicity" in
2584$define)
2585 echo "Multiplicity selected." >&4
2586 case "$archname" in
2587 *-multi*) echo "...and architecture name already has -multi." >&4
2588 ;;
2589 *) archname="$archname-multi"
2590 echo "...setting architecture name to $archname." >&4
2591 ;;
2592 esac
2593 ;;
2594esac
2595case "$use64bits" in
2596$define)
2597 echo "Explicit 64-bitness selected." >&4
2598 case "$archname64" in
2599 '')
2600 ;;
2601 *)
2602 case "$archname" in
2603 *-$archname64*) echo "...and architecture name already has $archname64." >&4
2604 ;;
2605 *) archname="$archname-$archname64"
2606 echo "...setting architecture name to $archname." >&4
2607 ;;
2608 esac
2609 ;;
2610 esac
2611esac
2612
4633a7c4
LW
2613: is AFS running?
2614echo " "
2afac517 2615case "$afs" in
2616$define|true) afs=true ;;
2617$undef|false) afs=false ;;
2618*) if test -d /afs; then
2619 afs=true
2620 else
2621 afs=false
2622 fi
2623 ;;
2624esac
2625if $afs; then
4633a7c4 2626 echo "AFS may be running... I'll be extra cautious then..." >&4
2304df62 2627else
4633a7c4 2628 echo "AFS does not seem to be running..." >&4
2304df62
AD
2629fi
2630
4633a7c4
LW
2631: decide how portable to be. Allow command line overrides.
2632case "$d_portable" in
2633"$undef") ;;
2634*) d_portable="$define" ;;
2304df62 2635esac
2304df62 2636
4633a7c4
LW
2637: set up shell script to do ~ expansion
2638cat >filexp <<EOSS
2639$startsh
2640: expand filename
2641case "\$1" in
2642 ~/*|~)
2643 echo \$1 | $sed "s|~|\${HOME-\$LOGDIR}|"
2304df62 2644 ;;
4633a7c4
LW
2645 ~*)
2646 if $test -f /bin/csh; then
2647 /bin/csh -f -c "glob \$1"
2648 failed=\$?
2649 echo ""
2650 exit \$failed
2651 else
2652 name=\`$expr x\$1 : '..\([^/]*\)'\`
2653 dir=\`$sed -n -e "/^\${name}:/{s/^[^:]*:[^:]*:[^:]*:[^:]*:[^:]*:\([^:]*\).*"'\$'"/\1/" -e p -e q -e '}' </etc/passwd\`
2654 if $test ! -d "\$dir"; then
2655 me=\`basename \$0\`
2656 echo "\$me: can't locate home directory for: \$name" >&2
2657 exit 1
2658 fi
2659 case "\$1" in
2660 */*)
2661 echo \$dir/\`$expr x\$1 : '..[^/]*/\(.*\)'\`
2662 ;;
2663 *)
2664 echo \$dir
2665 ;;
2304df62 2666 esac
4633a7c4 2667 fi
2304df62
AD
2668 ;;
2669*)
4633a7c4 2670 echo \$1
2304df62
AD
2671 ;;
2672esac
4633a7c4
LW
2673EOSS
2674chmod +x filexp
2675$eunicefix filexp
2304df62
AD
2676
2677: now set up to get a file name
28757baa 2678cat <<EOS >getfile
2679$startsh
2680EOS
2681cat <<'EOSC' >>getfile
2304df62
AD
2682tilde=''
2683fullpath=''
2684already=''
2685skip=''
2686none_ok=''
2687exp_file=''
a0d0e21e 2688nopath_ok=''
2304df62
AD
2689orig_rp="$rp"
2690orig_dflt="$dflt"
2691
2692case "$fn" in
ecfc5424 2693*\(*)
28e8609d 2694 expr $fn : '.*(\(.*\)).*' | tr ',' $trnl >getfile.ok
ecfc5424
AD
2695 fn=`echo $fn | sed 's/(.*)//'`
2696 ;;
2697esac
2698
2699case "$fn" in
a0d0e21e
LW
2700*:*)
2701 loc_file=`expr $fn : '.*:\(.*\)'`
2702 fn=`expr $fn : '\(.*\):.*'`
2703 ;;
2704esac
2705
2706case "$fn" in
2304df62
AD
2707*~*) tilde=true;;
2708esac
2709case "$fn" in
2710*/*) fullpath=true;;
2711esac
2712case "$fn" in
2713*+*) skip=true;;
2714esac
2715case "$fn" in
2716*n*) none_ok=true;;
2717esac
2718case "$fn" in
2719*e*) exp_file=true;;
2720esac
a0d0e21e
LW
2721case "$fn" in
2722*p*) nopath_ok=true;;
2723esac
2304df62
AD
2724
2725case "$fn" in
2726*f*) type='File';;
2727*d*) type='Directory';;
a0d0e21e 2728*l*) type='Locate';;
2304df62
AD
2729esac
2730
2731what="$type"
2732case "$what" in
2733Locate) what='File';;
2734esac
2735
2736case "$exp_file" in
2737'')
2738 case "$d_portable" in
2739 "$define") ;;
2740 *) exp_file=true;;
2741 esac
2742 ;;
2743esac
2744
2745cd ..
2746while test "$type"; do
2747 redo=''
2748 rp="$orig_rp"
2749 dflt="$orig_dflt"
2750 case "$tilde" in
2751 true) rp="$rp (~name ok)";;
2752 esac
2753 . UU/myread
ecfc5424
AD
2754 if test -f UU/getfile.ok && \
2755 $contains "^$ans\$" UU/getfile.ok >/dev/null 2>&1
2756 then
2757 value="$ans"
2758 ansexp="$ans"
2759 break
2760 fi
2304df62
AD
2761 case "$ans" in
2762 none)
2763 value=''
2764 ansexp=''
2765 case "$none_ok" in
2766 true) type='';;
2767 esac
2768 ;;
2769 *)
2770 case "$tilde" in
2771 '') value="$ans"
2772 ansexp="$ans";;
2773 *)
2774 value=`UU/filexp $ans`
2775 case $? in
2776 0)
2777 if test "$ans" != "$value"; then
ecfc5424 2778 echo "(That expands to $value on this system.)"
2304df62
AD
2779 fi
2780 ;;
2781 *) value="$ans";;
2782 esac
2783 ansexp="$value"
2784 case "$exp_file" in
2785 '') value="$ans";;
2786 esac
2787 ;;
2788 esac
2789 case "$fullpath" in
2790 true)
2791 case "$ansexp" in
2792 /*) value="$ansexp" ;;
2793 *)
2794 redo=true
2795 case "$already" in
2796 true)
2797 echo "I shall only accept a full path name, as in /bin/ls." >&4
2798 echo "Use a ! shell escape if you wish to check pathnames." >&4
2799 ;;
2800 *)
2801 echo "Please give a full path name, starting with slash." >&4
2802 case "$tilde" in
2803 true)
2804 echo "Note that using ~name is ok provided it expands well." >&4
2805 already=true
2806 ;;
2807 esac
2808 esac
2809 ;;
2810 esac
2811 ;;
2812 esac
2813 case "$redo" in
2814 '')
2815 case "$type" in
2816 File)
2817 if test -f "$ansexp"; then
2818 type=''
2819 elif test -r "$ansexp" || (test -h "$ansexp") >/dev/null 2>&1
2820 then
2821 echo "($value is not a plain file, but that's ok.)"
2822 type=''
2823 fi
2824 ;;
2825 Directory)
2826 if test -d "$ansexp"; then
2827 type=''
2828 fi
2829 ;;
2830 Locate)
40000a8c 2831 if test -d "$ansexp"; then
a0d0e21e
LW
2832 echo "(Looking for $loc_file in directory $value.)"
2833 value="$value/$loc_file"
40000a8c 2834 ansexp="$ansexp/$loc_file"
2304df62 2835 fi
40000a8c 2836 if test -f "$ansexp"; then
2304df62
AD
2837 type=''
2838 fi
a0d0e21e
LW
2839 case "$nopath_ok" in
2840 true) case "$value" in
2841 */*) ;;
2842 *) echo "Assuming $value will be in people's path."
2843 type=''
2844 ;;
2845 esac
2846 ;;
2847 esac
2304df62
AD
2848 ;;
2849 esac
2850
2851 case "$skip" in
2852 true) type='';
2853 esac
2854
2855 case "$type" in
2856 '') ;;
2857 *)
2858 if test "$fastread" = yes; then
2859 dflt=y
2860 else
2861 dflt=n
2862 fi
2863 rp="$what $value doesn't exist. Use that name anyway?"
2864 . UU/myread
2865 dflt=''
2866 case "$ans" in
2867 y*) type='';;
2868 *) echo " ";;
2869 esac
2870 ;;
2871 esac
2872 ;;
2873 esac
2874 ;;
2875 esac
2876done
2877cd UU
2878ans="$value"
2879rp="$orig_rp"
2880dflt="$orig_dflt"
ecfc5424 2881rm -f getfile.ok
2304df62
AD
2882EOSC
2883
4633a7c4
LW
2884: determine root of directory hierarchy where package will be installed.
2885case "$prefix" in
2886'')
2887 dflt=`./loc . /usr/local /usr/local /local /opt /usr`
8e07c86e 2888 ;;
4633a7c4
LW
2889*)
2890 dflt="$prefix"
8e07c86e
AD
2891 ;;
2892esac
4633a7c4 2893$cat <<EOM
2304df62 2894
4633a7c4
LW
2895By default, $package will be installed in $dflt/bin, manual
2896pages under $dflt/man, etc..., i.e. with $dflt as prefix for
2897all installation directories. Typically set to /usr/local, but you
2898may choose /usr if you wish to install $package among your system
2899binaries. If you wish to have binaries under /bin but manual pages
2900under /usr/local/man, that's ok: you will be prompted separately
2901for each of the installation directories, the prefix being only used
2902to set the defaults.
8e07c86e
AD
2903
2904EOM
2905fn=d~
2906rp='Installation prefix to use?'
2907. ./getfile
2908oldprefix=''
2909case "$prefix" in
a0d0e21e 2910'') ;;
8e07c86e
AD
2911*)
2912 case "$ans" in
2913 "$prefix") ;;
2914 *) oldprefix="$prefix";;
2915 esac
2916 ;;
a0d0e21e 2917esac
8e07c86e
AD
2918prefix="$ans"
2919prefixexp="$ansexp"
a0d0e21e 2920
8e07c86e
AD
2921: set the prefixit variable, to compute a suitable default value
2922prefixit='case "$3" in
2923""|none)
2924 case "$oldprefix" in
2925 "") eval "$1=\"\$$2\"";;
2926 *)
2927 case "$3" in
2928 "") eval "$1=";;
2929 none)
2930 eval "tp=\"\$$2\"";
2931 case "$tp" in
2932 ""|" ") eval "$1=\"\$$2\"";;
2933 *) eval "$1=";;
2934 esac;;
2935 esac;;
2936 esac;;
2937*)
2938 eval "tp=\"$oldprefix-\$$2-\""; eval "tp=\"$tp\"";
2939 case "$tp" in
2940 --|/*--|\~*--) eval "$1=\"$prefix/$3\"";;
2941 /*-$oldprefix/*|\~*-$oldprefix/*)
2942 eval "$1=\`echo \$$2 | sed \"s,^$oldprefix,$prefix,\"\`";;
2943 *) eval "$1=\"\$$2\"";;
2944 esac;;
2945esac'
a0d0e21e 2946
bfb7748a
AD
2947: set the base revision
2948baserev=5.0
2949
2950: get the patchlevel
2951echo " "
2952echo "Getting the current patchlevel..." >&4
2953if $test -r $rsrc/patchlevel.h;then
2954 patchlevel=`awk '/define[ ]+PATCHLEVEL/ {print $3}' $rsrc/patchlevel.h`
2955 subversion=`awk '/define[ ]+SUBVERSION/ {print $3}' $rsrc/patchlevel.h`
2956else
2957 patchlevel=0
2958 subversion=0
2959fi
2960$echo $n "(You have $package" $c
2961case "$package" in
2962"*$baserev") ;;
2963*) $echo $n " $baserev" $c ;;
2964esac
2965$echo $n " patchlevel $patchlevel" $c
2966test 0 -eq "$subversion" || $echo $n " subversion $subversion" $c
2967echo ".)"
2968
2969if test 0 -eq "$subversion"; then
2970 version=`LC_ALL=C; export LC_ALL; \
2971 echo $baserev $patchlevel | \
2972 $awk '{ printf "%.3f\n", $1 + $2/1000.0 }'`
2973else
2974 version=`LC_ALL=C; export LC_ALL; \
2975 echo $baserev $patchlevel $subversion | \
2976 $awk '{ printf "%.5f\n", $1 + $2/1000.0 + $3/100000.0 }'`
2977fi
2978: Figure out perl API version. Perhaps this should be in patchlevel.h
2979if test "$subversion" -lt 50; then
2980 apiversion=`LC_ALL=C; export LC_ALL; \
2981 echo $baserev $patchlevel | \
2982 $awk '{ printf "%.3f\n", $1 + $2/1000.0 }'`
2983else
2984 apiversion="$version"
2985fi
2986
4633a7c4 2987: determine where private library files go
3a6175e1
AD
2988: Usual default is /usr/local/lib/perl5/$version.
2989: Also allow things like /opt/perl/lib/$version, since
bfb7748a 2990: /opt/perl/lib/perl5... would be redundant.
4633a7c4 2991case "$prefix" in
3a6175e1
AD
2992*perl*) set dflt privlib lib/$version ;;
2993*) set dflt privlib lib/$package/$version ;;
4633a7c4 2994esac
8e07c86e 2995eval $prefixit
4633a7c4
LW
2996$cat <<EOM
2997
2998There are some auxiliary files for $package that need to be put into a
2999private library directory that is accessible by everyone.
3000
3001EOM
3002fn=d~+
3003rp='Pathname where the private library files will reside?'
8e07c86e 3004. ./getfile
4633a7c4
LW
3005if $test "X$privlibexp" != "X$ansexp"; then
3006 installprivlib=''
8e07c86e 3007fi
4633a7c4
LW
3008privlib="$ans"
3009privlibexp="$ansexp"
8e07c86e
AD
3010if $afs; then
3011 $cat <<EOM
2304df62 3012
8e07c86e 3013Since you are running AFS, I need to distinguish the directory in which
4633a7c4 3014private files reside from the directory in which they are installed (and from
8e07c86e 3015which they are presumably copied to the former directory by occult means).
a0d0e21e 3016
8e07c86e 3017EOM
4633a7c4
LW
3018 case "$installprivlib" in
3019 '') dflt=`echo $privlibexp | sed 's#^/afs/#/afs/.#'`;;
3020 *) dflt="$installprivlib";;
8e07c86e
AD
3021 esac
3022 fn=de~
4633a7c4 3023 rp='Where will private files be installed?'
8e07c86e 3024 . ./getfile
4633a7c4 3025 installprivlib="$ans"
8e07c86e 3026else
4633a7c4
LW
3027 installprivlib="$privlibexp"
3028fi
3029
8e07c86e
AD
3030: set the prefixup variable, to restore leading tilda escape
3031prefixup='case "$prefixexp" in
3032"$prefix") ;;
3033*) eval "$1=\`echo \$$1 | sed \"s,^$prefixexp,$prefix,\"\`";;
3034esac'
3035
4633a7c4
LW
3036: determine where public architecture dependent libraries go
3037set archlib archlib
8e07c86e 3038eval $prefixit
3a6175e1 3039: privlib default is /usr/local/lib/$package/$version
bfb7748a 3040: archlib default is /usr/local/lib/$package/$version/$archname
3a6175e1 3041: privlib may have an optional trailing /share.
bfb7748a
AD
3042tdflt=`echo $privlib | $sed 's,/share$,,'`
3043tdflt=$tdflt/$archname
4633a7c4 3044case "$archlib" in
bfb7748a 3045'') dflt=$tdflt
8e07c86e 3046 ;;
bfb7748a 3047*) dflt="$archlib"
774d564b 3048 ;;
8e07c86e 3049esac
4633a7c4
LW
3050cat <<EOM
3051
3052$spackage contains architecture-dependent library files. If you are
3053sharing libraries in a heterogeneous environment, you might store
3054these files in a separate location. Otherwise, you can just include
3055them with the rest of the public library files.
3056
8e07c86e 3057EOM
4633a7c4
LW
3058fn=d+~
3059rp='Where do you want to put the public architecture-dependent libraries?'
8e07c86e 3060. ./getfile
4633a7c4
LW
3061archlib="$ans"
3062archlibexp="$ansexp"
3063
8e07c86e
AD
3064if $afs; then
3065 $cat <<EOM
3066
7bac28a0 3067Since you are running AFS, I need to distinguish the directory in
3068which architecture-dependent library files reside from the directory
3069in which they are installed (and from which they are presumably copied
3070to the former directory by occult means).
8e07c86e
AD
3071
3072EOM
4633a7c4
LW
3073 case "$installarchlib" in
3074 '') dflt=`echo $archlibexp | sed 's#^/afs/#/afs/.#'`;;
3075 *) dflt="$installarchlib";;
8e07c86e
AD
3076 esac
3077 fn=de~
4633a7c4 3078 rp='Where will architecture-dependent library files be installed?'
8e07c86e 3079 . ./getfile
4633a7c4 3080 installarchlib="$ans"
8e07c86e 3081else
4633a7c4
LW
3082 installarchlib="$archlibexp"
3083fi
3084if $test X"$archlib" = X"$privlib"; then
3085 d_archlib="$undef"
3086else
3087 d_archlib="$define"
8e07c86e
AD
3088fi
3089
40a7a20a 3090: make some quick guesses about what we are up against
3091echo " "
3092$echo $n "Hmm... $c"
3093echo exit 1 >bsd
3094echo exit 1 >usg
3095echo exit 1 >v7
3096echo exit 1 >osf1
3097echo exit 1 >eunice
3098echo exit 1 >xenix
3099echo exit 1 >venix
8ff267be 3100echo exit 1 >os2
40a7a20a 3101d_bsd="$undef"
3102$cat /usr/include/signal.h /usr/include/sys/signal.h >foo 2>/dev/null
3103if test -f /osf_boot || $contains 'OSF/1' /usr/include/ctype.h >/dev/null 2>&1
3104then
3105 echo "Looks kind of like an OSF/1 system, but we'll see..."
3106 echo exit 0 >osf1
3107elif test `echo abc | tr a-z A-Z` = Abc ; then
3108 xxx=`./loc addbib blurfl $pth`
3109 if $test -f $xxx; then
3110 echo "Looks kind of like a USG system with BSD features, but we'll see..."
3111 echo exit 0 >bsd
3112 echo exit 0 >usg
3113 else
3114 if $contains SIGTSTP foo >/dev/null 2>&1 ; then
3115 echo "Looks kind of like an extended USG system, but we'll see..."
3116 else
3117 echo "Looks kind of like a USG system, but we'll see..."
3118 fi
3119 echo exit 0 >usg
3120 fi
3121elif $contains SIGTSTP foo >/dev/null 2>&1 ; then
3122 echo "Looks kind of like a BSD system, but we'll see..."
3123 d_bsd="$define"
3124 echo exit 0 >bsd
3125else
3126 echo "Looks kind of like a Version 7 system, but we'll see..."
3127 echo exit 0 >v7
3128fi
3129case "$eunicefix" in
3130*unixtovms*)
3131 $cat <<'EOI'
3132There is, however, a strange, musty smell in the air that reminds me of
3133something...hmm...yes...I've got it...there's a VMS nearby, or I'm a Blit.
3134EOI
3135 echo exit 0 >eunice
3136 d_eunice="$define"
3137: it so happens the Eunice I know will not run shell scripts in Unix format
3138 ;;
3139*)
3140 echo " "
3141 echo "Congratulations. You aren't running Eunice."
3142 d_eunice="$undef"
3143 ;;
3144esac
8ff267be 3145: Detect OS2. The p_ variable is set above in the Head.U unit.
3146case "$p_" in
3147:) ;;
3148*)
3149 $cat <<'EOI'
3150I have the feeling something is not exactly right, however...don't tell me...
3151lemme think...does HAL ring a bell?...no, of course, you're only running OS/2!
3152EOI
3153 echo exit 0 >os2
3154 ;;
3155esac
40a7a20a 3156if test -f /xenix; then
3157 echo "Actually, this looks more like a XENIX system..."
3158 echo exit 0 >xenix
3159 d_xenix="$define"
3160else
3161 echo " "
3162 echo "It's not Xenix..."
3163 d_xenix="$undef"
3164fi
3165chmod +x xenix
3166$eunicefix xenix
3167if test -f /venix; then
3168 echo "Actually, this looks more like a VENIX system..."
3169 echo exit 0 >venix
3170else
3171 echo " "
3172 if ./xenix; then
3173 : null
3174 else
3175 echo "Nor is it Venix..."
3176 fi
3177fi
8ff267be 3178chmod +x bsd usg v7 osf1 eunice xenix venix os2
3179$eunicefix bsd usg v7 osf1 eunice xenix venix os2
40a7a20a 3180$rm -f foo
3181
3182: see if setuid scripts can be secure
3183$cat <<EOM
3184
3185Some kernels have a bug that prevents setuid #! scripts from being
3186secure. Some sites have disabled setuid #! scripts because of this.
3187
3188First let's decide if your kernel supports secure setuid #! scripts.
3189(If setuid #! scripts would be secure but have been disabled anyway,
3190don't say that they are secure if asked.)
3191
3192EOM
3193
3194val="$undef"
3195if $test -d /dev/fd; then
3196 echo "#!$ls" >reflect
3197 chmod +x,u+s reflect
3198 ./reflect >flect 2>&1
3199 if $contains "/dev/fd" flect >/dev/null; then
3200 echo "Congratulations, your kernel has secure setuid scripts!" >&4
3201 val="$define"
3202 else
3203 $cat <<EOM
3204If you are not sure if they are secure, I can check but I'll need a
3205username and password different from the one you are using right now.
3206If you don't have such a username or don't want me to test, simply
3207enter 'none'.
3208
3209EOM
3210 rp='Other username to test security of setuid scripts with?'
3211 dflt='none'
3212 . ./myread
3213 case "$ans" in
3214 n|none)
3215 case "$d_suidsafe" in
3216 '') echo "I'll assume setuid scripts are *not* secure." >&4
3217 dflt=n;;
3218 "$undef")
3219 echo "Well, the $hint value is *not* secure." >&4
3220 dflt=n;;
3221 *) echo "Well, the $hint value *is* secure." >&4
3222 dflt=y;;
3223 esac
3224 ;;
3225 *)
3226 $rm -f reflect flect
3227 echo "#!$ls" >reflect
3228 chmod +x,u+s reflect
3229 echo >flect
3230 chmod a+w flect
3231 echo '"su" will (probably) prompt you for '"$ans's password."
3232 su $ans -c './reflect >flect'
3233 if $contains "/dev/fd" flect >/dev/null; then
3234 echo "Okay, it looks like setuid scripts are secure." >&4
3235 dflt=y
3236 else
3237 echo "I don't think setuid scripts are secure." >&4
3238 dflt=n
3239 fi
3240 ;;
3241 esac
3242 rp='Does your kernel have *secure* setuid scripts?'
3243 . ./myread
3244 case "$ans" in
3245 [yY]*) val="$define";;
3246 *) val="$undef";;
3247 esac
3248 fi
3249else
3250 echo "I don't think setuid scripts are secure (no /dev/fd directory)." >&4
760ac839 3251 echo "(That's for file descriptors, not floppy disks.)"
40a7a20a 3252 val="$undef"
3253fi
3254set d_suidsafe
3255eval $setvar
3256
3257$rm -f reflect flect
3258
3259: now see if they want to do setuid emulation
3260echo " "
3261val="$undef"
3262case "$d_suidsafe" in
3263"$define")
3264 val="$undef"
3265 echo "No need to emulate SUID scripts since they are secure here." >& 4
3266 ;;
3267*)
3268 $cat <<EOM
3269Some systems have disabled setuid scripts, especially systems where
3270setuid scripts cannot be secure. On systems where setuid scripts have
dfe9444c
AD
3271been disabled, the setuid/setgid bits on scripts are currently
3272useless. It is possible for $package to detect those bits and emulate
3273setuid/setgid in a secure fashion. This emulation will only work if
3274setuid scripts have been disabled in your kernel.
8e07c86e
AD
3275
3276EOM
dfe9444c
AD
3277 case "$d_dosuid" in
3278 "$define") dflt=y ;;
3279 *) dflt=n ;;
3280 esac
3281 rp="Do you want to do setuid/setgid emulation?"
3282 . ./myread
3283 case "$ans" in
3284 [yY]*) val="$define";;
3285 *) val="$undef";;
3286 esac
3287 ;;
4633a7c4 3288esac
dfe9444c 3289set d_dosuid
4633a7c4 3290eval $setvar
8e07c86e 3291
2c7991dc 3292: determine where manual pages are on this system
3293echo " "
3294case "$sysman" in
3295'')
3296 syspath='/usr/man/man1 /usr/man/mann /usr/man/manl /usr/man/local/man1'
3297 syspath="$syspath /usr/man/u_man/man1 /usr/share/man/man1"
3298 syspath="$syspath /usr/catman/u_man/man1 /usr/man/l_man/man1"
3299 syspath="$syspath /usr/local/man/u_man/man1 /usr/local/man/l_man/man1"
3300 syspath="$syspath /usr/man/man.L /local/man/man1 /usr/local/man/man1"
3301 sysman=`./loc . /usr/man/man1 $syspath`
3302 ;;
3303esac
3304if $test -d "$sysman"; then
3305 echo "System manual is in $sysman." >&4
3306else
3307 echo "Could not find manual pages in source form." >&4
3308fi
3309
dc45a647
MB
3310: see what memory models we can support
3311case "$models" in
3312'')
3313 $cat >pdp11.c <<'EOP'
3314main() {
3315#ifdef pdp11
3316 exit(0);
3317#else
3318 exit(1);
3319#endif
3320}
3321EOP
3322 ( cc -o pdp11 pdp11.c ) >/dev/null 2>&1
3323 if $test -f pdp11 && ./pdp11 2>/dev/null; then
3324 dflt='unsplit split'
3325 else
3326 tans=`./loc . X /lib/small /lib/large /usr/lib/small /usr/lib/large /lib/medium /usr/lib/medium /lib/huge`
3327 case "$tans" in
3328 X) dflt='none';;
3329 *) if $test -d /lib/small || $test -d /usr/lib/small; then
3330 dflt='small'
3331 else
3332 dflt=''
3333 fi
3334 if $test -d /lib/medium || $test -d /usr/lib/medium; then
3335 dflt="$dflt medium"
3336 fi
3337 if $test -d /lib/large || $test -d /usr/lib/large; then
3338 dflt="$dflt large"
3339 fi
3340 if $test -d /lib/huge || $test -d /usr/lib/huge; then
3341 dflt="$dflt huge"
3342 fi
3343 esac
3344 fi;;
3345*) dflt="$models";;
3346esac
8e07c86e 3347$cat <<EOM
dc45a647
MB
3348
3349Some systems have different model sizes. On most systems they are called
3350small, medium, large, and huge. On the PDP11 they are called unsplit and
3351split. If your system doesn't support different memory models, say "none".
3352If you wish to force everything to one memory model, say "none" here and
3353put the appropriate flags later when it asks you for other cc and ld flags.
3354Venix systems may wish to put "none" and let the compiler figure things out.
3355(In the following question multiple model names should be space separated.)
3356
3357The default for most systems is "none".
8e07c86e 3358
8e07c86e 3359EOM
dc45a647
MB
3360rp="Which memory models are supported?"
3361. ./myread
3362models="$ans"
3363
3364case "$models" in
3365none)
3366 small=''
3367 medium=''
3368 large=''
3369 huge=''
3370 unsplit=''
3371 split=''
2c7991dc 3372 ;;
dc45a647
MB
3373*split)
3374 case "$split" in
3375 '') if $contains '\-i' $sysman/ld.1 >/dev/null 2>&1 || \
3376 $contains '\-i' $sysman/cc.1 >/dev/null 2>&1; then
3377 dflt='-i'
3378 else
3379 dflt='none'
3380 fi;;
3381 *) dflt="$split";;
3382 esac
3383 rp="What flag indicates separate I and D space?"
3384 . ./myread
3385 tans="$ans"
3386 case "$tans" in
3387 none) tans='';;
3388 esac
3389 split="$tans"
3390 unsplit='';;
3391*large*|*small*|*medium*|*huge*)
3392 case "$models" in
3393 *large*)
3394 case "$large" in
3395 '') dflt='-Ml';;
3396 *) dflt="$large";;
3397 esac
3398 rp="What flag indicates large model?"
3399 . ./myread
3400 tans="$ans"
3401 case "$tans" in
3402 none) tans='';
3403 esac
3404 large="$tans";;
3405 *) large='';;
3406 esac
3407 case "$models" in
3408 *huge*) case "$huge" in
3409 '') dflt='-Mh';;
3410 *) dflt="$huge";;
3411 esac
3412 rp="What flag indicates huge model?"
3413 . ./myread
3414 tans="$ans"
3415 case "$tans" in
3416 none) tans='';
3417 esac
3418 huge="$tans";;
3419 *) huge="$large";;
3420 esac
3421 case "$models" in
3422 *medium*) case "$medium" in
3423 '') dflt='-Mm';;
3424 *) dflt="$medium";;
3425 esac
3426 rp="What flag indicates medium model?"
3427 . ./myread
3428 tans="$ans"
3429 case "$tans" in
3430 none) tans='';
3431 esac
3432 medium="$tans";;
3433 *) medium="$large";;
3434 esac
3435 case "$models" in
3436 *small*) case "$small" in
3437 '') dflt='none';;
3438 *) dflt="$small";;
3439 esac
3440 rp="What flag indicates small model?"
3441 . ./myread
3442 tans="$ans"
3443 case "$tans" in
3444 none) tans='';
3445 esac
3446 small="$tans";;
3447 *) small='';;
25f94b33 3448 esac
8e07c86e 3449 ;;
dc45a647
MB
3450*)
3451 echo "Unrecognized memory models--you may have to edit Makefile.SH" >&4
8e07c86e
AD
3452 ;;
3453esac
dc45a647 3454$rm -f pdp11.* pdp11
4e2a5f63 3455
dc45a647
MB
3456: see if we need a special compiler
3457echo " "
3458if ./usg; then
3459 case "$cc" in
3460 '') case "$Mcc" in
3461 /*) dflt='Mcc';;
3462 *) case "$large" in
3463 -M*) dflt='cc';;
3464 *) if $contains '\-M' $sysman/cc.1 >/dev/null 2>&1 ; then
3465 if $contains '\-M' $sysman/cpp.1 >/dev/null 2>&1; then
3466 dflt='cc'
3467 else
3468 dflt='cc -M'
3469 fi
3470 else
3471 dflt='cc'
3472 fi;;
3473 esac;;
3474 esac;;
3475 *) dflt="$cc";;
3476 esac
3477 case "$dflt" in
3478 *M*) $cat <<'EOM'
3479On some older systems the default C compiler will not resolve multiple global
3480references that happen to have the same name. On some such systems the "Mcc"
3481command may be used to force these to be resolved. On other systems a "cc -M"
3482command is required. (Note that the -M flag on other systems indicates a
3483memory model to use!) If you have the Gnu C compiler, you might wish to use
3484that instead.
8e07c86e
AD
3485
3486EOM
dc45a647 3487 ;;
2afac517 3488 esac
dc45a647
MB
3489 rp="Use which C compiler?"
3490 . ./myread
3491 cc="$ans"
4e2a5f63 3492else
dc45a647
MB
3493 case "$cc" in
3494 '') dflt=cc;;
3495 *) dflt="$cc";;
4e2a5f63 3496 esac
dc45a647 3497 rp="Use which C compiler?"
4e2a5f63
AD
3498 . ./myread
3499 cc="$ans"
3500fi
693762b4
AD
3501: Look for a hint-file generated 'call-back-unit'. Now that the
3502: user has specified the compiler, we may need to set or change some
3503: other defaults.
3504if $test -f cc.cbu; then
3505 . ./cc.cbu
3506fi
4e2a5f63
AD
3507echo " "
3508echo "Checking for GNU cc in disguise and/or its version number..." >&4
3509$cat >gccvers.c <<EOM
3510#include <stdio.h>
3511int main() {
3512#ifdef __GNUC__
3513#ifdef __VERSION__
3514 printf("%s\n", __VERSION__);
3515#else
3516 printf("%s\n", "1");
3517#endif
3518#endif
3519 exit(0);
3520}
3521EOM
3522if $cc -o gccvers gccvers.c >/dev/null 2>&1; then
3523 gccversion=`./gccvers`
3524 case "$gccversion" in
2afac517 3525 '') echo "You are not using GNU cc." ;;
3526 *) echo "You are using GNU cc $gccversion." ;;
3527 esac
3528else
3529 echo " "
3530 echo "*** WHOA THERE!!! ***" >&4
3531 echo " Your C compiler \"$cc\" doesn't seem to be working!" >&4
3532 case "$knowitall" in
3533 '')
3534 echo " You'd better start hunting for one and let me know about it." >&4
3535 exit 1
2c7991dc 3536 ;;
8e07c86e 3537 esac
2afac517 3538fi
3539$rm -f gccvers*
3540case "$gccversion" in
35411*) cpp=`./loc gcc-cpp $cpp $pth` ;;
8e07c86e
AD
3542esac
3543
2afac517 3544: What should the include directory be ?
8e07c86e 3545echo " "
2afac517 3546$echo $n "Hmm... $c"
3547dflt='/usr/include'
3548incpath=''
3549mips_type=''
3550if $test -f /bin/mips && /bin/mips; then
3551 echo "Looks like a MIPS system..."
3552 $cat >usr.c <<'EOCP'
3553#ifdef SYSTYPE_BSD43
3554/bsd43
3555#endif
3556EOCP
3557 if $cc -E usr.c > usr.out && $contains / usr.out >/dev/null 2>&1; then
3558 dflt='/bsd43/usr/include'
3559 incpath='/bsd43'
3560 mips_type='BSD 4.3'
8e07c86e 3561 else
2afac517 3562 mips_type='System V'
8e07c86e 3563 fi
2afac517 3564 $rm -f usr.c usr.out
3565 echo "and you're compiling with the $mips_type compiler and libraries."
3566 xxx_prompt=y
3567 echo "exit 0" >mips
8e07c86e 3568else
2afac517 3569 echo "Doesn't look like a MIPS system."
3570 xxx_prompt=n
3571 echo "exit 1" >mips
3572fi
3573chmod +x mips
3574$eunicefix mips
2afac517 3575case "$usrinc" in
3576'') ;;
3577*) dflt="$usrinc";;
3578esac
3579case "$xxx_prompt" in
3580y) fn=d/
dfe9444c 3581 echo " "
2afac517 3582 rp='Where are the include files you want to use?'
3583 . ./getfile
3584 usrinc="$ans"
3585 ;;
3586*) usrinc="$dflt"
3587 ;;
3588esac
8e07c86e 3589
c4f23d77
AD
3590: see how we invoke the C preprocessor
3591echo " "
3592echo "Now, how can we feed standard input to your C preprocessor..." >&4
3593cat <<'EOT' >testcpp.c
3594#define ABC abc
3595#define XYZ xyz
3596ABC.XYZ
3597EOT
3598cd ..
1cfa4ec7
GS
3599if test ! -f cppstdin; then
3600 echo 'cat >.$$.c; '"$cc"' -E ${1+"$@"} .$$.c; rm .$$.c' >cppstdin
3601else
3602 echo "Keeping your $hint cppstdin wrapper."
3603fi
c4f23d77
AD
3604chmod 755 cppstdin
3605wrapper=`pwd`/cppstdin
3606ok='false'
3607cd UU
3608
3609if $test "X$cppstdin" != "X" && \
3610 $cppstdin $cppminus <testcpp.c >testcpp.out 2>&1 && \
3611 $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1
3612then
3613 echo "You used to use $cppstdin $cppminus so we'll use that again."
3614 case "$cpprun" in
3615 '') echo "But let's see if we can live without a wrapper..." ;;
3616 *)
3617 if $cpprun $cpplast <testcpp.c >testcpp.out 2>&1 && \
3618 $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1
3619 then
3620 echo "(And we'll use $cpprun $cpplast to preprocess directly.)"
3621 ok='true'
3622 else
3623 echo "(However, $cpprun $cpplast does not work, let's see...)"
3624 fi
3625 ;;
3626 esac
3627else
3628 case "$cppstdin" in
3629 '') ;;
3630 *)
3631 echo "Good old $cppstdin $cppminus does not seem to be of any help..."
3632 ;;
3633 esac
3634fi
3635
3636if $ok; then
3637 : nothing
3638elif echo 'Maybe "'"$cc"' -E" will work...'; \
3639 $cc -E <testcpp.c >testcpp.out 2>&1; \
3640 $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3641 echo "Yup, it does."
3642 x_cpp="$cc -E"
3643 x_minus='';
3644elif echo 'Nope...maybe "'"$cc"' -E -" will work...'; \
3645 $cc -E - <testcpp.c >testcpp.out 2>&1; \
3646 $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3647 echo "Yup, it does."
3648 x_cpp="$cc -E"
3649 x_minus='-';
3650elif echo 'Nope...maybe "'"$cc"' -P" will work...'; \
3651 $cc -P <testcpp.c >testcpp.out 2>&1; \
3652 $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3653 echo "Yipee, that works!"
3654 x_cpp="$cc -P"
3655 x_minus='';
3656elif echo 'Nope...maybe "'"$cc"' -P -" will work...'; \
3657 $cc -P - <testcpp.c >testcpp.out 2>&1; \
3658 $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3659 echo "At long last!"
3660 x_cpp="$cc -P"
3661 x_minus='-';
3662elif echo 'No such luck, maybe "'$cpp'" will work...'; \
3663 $cpp <testcpp.c >testcpp.out 2>&1; \
3664 $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3665 echo "It works!"
3666 x_cpp="$cpp"
3667 x_minus='';
3668elif echo 'Nixed again...maybe "'$cpp' -" will work...'; \
3669 $cpp - <testcpp.c >testcpp.out 2>&1; \
3670 $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3671 echo "Hooray, it works! I was beginning to wonder."
3672 x_cpp="$cpp"
3673 x_minus='-';
3674elif echo 'Uh-uh. Time to get fancy. Trying a wrapper...'; \
3675 $wrapper <testcpp.c >testcpp.out 2>&1; \
3676 $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3677 x_cpp="$wrapper"
3678 x_minus=''
3679 echo "Eureka!"
3680else
3681 dflt=''
3682 rp="No dice. I can't find a C preprocessor. Name one:"
3683 . ./myread
3684 x_cpp="$ans"
3685 x_minus=''
3686 $x_cpp <testcpp.c >testcpp.out 2>&1
3687 if $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3688 echo "OK, that will do." >&4
3689 else
3690echo "Sorry, I can't get that to work. Go find one and rerun Configure." >&4
3691 exit 1
3692 fi
3693fi
3694
3695case "$ok" in
3696false)
3697 cppstdin="$x_cpp"
3698 cppminus="$x_minus"
3699 cpprun="$x_cpp"
3700 cpplast="$x_minus"
3701 set X $x_cpp
3702 shift
3703 case "$1" in
3704 "$cpp")
3705 echo "Perhaps can we force $cc -E using a wrapper..."
3706 if $wrapper <testcpp.c >testcpp.out 2>&1; \
3707 $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1
3708 then
3709 echo "Yup, we can."
3710 cppstdin="$wrapper"
3711 cppminus='';
3712 else
3713 echo "Nope, we'll have to live without it..."
3714 fi
3715 ;;
3716 esac
3717 case "$cpprun" in
3718 "$wrapper")
3719 cpprun=''
3720 cpplast=''
3721 ;;
3722 esac
3723 ;;
3724esac
3725
3726case "$cppstdin" in
3727"$wrapper") ;;
3728*) $rm -f $wrapper;;
3729esac
3730$rm -f testcpp.c testcpp.out
3731
2afac517 3732: Set private lib path
3733case "$plibpth" in
3734'') if ./mips; then
3735 plibpth="$incpath/usr/lib /usr/local/lib /usr/ccs/lib"
3736 fi;;
3737esac
3738case "$libpth" in
3739' ') dlist='';;
3740'') dlist="$loclibpth $plibpth $glibpth";;
3741*) dlist="$libpth";;
3742esac
8e07c86e 3743
2afac517 3744: Now check and see which directories actually exist, avoiding duplicates
3745libpth=''
3746for xxx in $dlist
3747do
3748 if $test -d $xxx; then
3749 case " $libpth " in
3750 *" $xxx "*) ;;
3751 *) libpth="$libpth $xxx";;
3752 esac
3753 fi
3754done
3755$cat <<'EOM'
8e07c86e 3756
2afac517 3757Some systems have incompatible or broken versions of libraries. Among
3758the directories listed in the question below, please remove any you
3759know not to be holding relevant libraries, and add any that are needed.
3760Say "none" for none.
8e07c86e 3761
8e07c86e 3762EOM
2afac517 3763case "$libpth" in
3764'') dflt='none';;
3765*)
3766 set X $libpth
3767 shift
3768 dflt=${1+"$@"}
4633a7c4 3769 ;;
8e07c86e 3770esac
2afac517 3771rp="Directories to use for library searches?"
3772. ./myread
3773case "$ans" in
3774none) libpth=' ';;
3775*) libpth="$ans";;
3776esac
8e07c86e 3777
2afac517 3778: compute shared library extension
3779case "$so" in
3780'')
3781 if xxx=`./loc libc.sl X $libpth`; $test -f "$xxx"; then
3782 dflt='sl'
3783 else
3784 dflt='so'
3785 fi
3786 ;;
3787*) dflt="$so";;
8e07c86e 3788esac
2afac517 3789$cat <<EOM
8e07c86e 3790
2afac517 3791On some systems, shared libraries may be available. Answer 'none' if
3792you want to suppress searching of shared libraries for the remaining
3793of this configuration.
8e07c86e
AD
3794
3795EOM
2afac517 3796rp='What is the file extension used for shared libraries?'
3797. ./myread
3798so="$ans"
8e07c86e 3799
dfe9444c
AD
3800: Define several unixisms.
3801: Hints files or command line option can be used to override them.
3802: The convoluted testing is in case hints files set either the old
3803: or the new name.
3804case "$_exe" in
3805'') case "$exe_ext" in
3806 '') ;;
3807 *) _exe="$exe_ext" ;;
3808 esac
3809 ;;
3810esac
3811case "$_a" in
3812'') case "$lib_ext" in
3813 '') _a='.a';;
3814 *) _a="$lib_ext" ;;
3815 esac
3816 ;;
3817esac
3818case "$_o" in
3819'') case "$obj_ext" in
3820 '') _o='.o';;
3821 *) _o="$obj_ext";;
3822 esac
3823 ;;
3824esac
3825case "$p_" in
3826'') case "$path_sep" in
3827 '') p_=':';;
3828 *) p_="$path_sep";;
3829 esac
3830 ;;
3831esac
3832exe_ext=$_exe
3833lib_ext=$_a
3834obj_ext=$_o
3835path_sep=$p_
3836
3837: Which makefile gets called first. This is used by make depend.
3838case "$firstmakefile" in
3839'') firstmakefile='makefile';;
3840esac
3841
2afac517 3842: Looking for optional libraries
3843echo " "
3844echo "Checking for optional libraries..." >&4
3845case "$libs" in
3846' '|'') dflt='';;
3847*) dflt="$libs";;
8e07c86e 3848esac
2afac517 3849case "$libswanted" in
3850'') libswanted='c_s';;
3851esac
3852for thislib in $libswanted; do
3853
1cfa4ec7
GS
3854 if xxx=`./loc lib$thislib.$so.[0-9]'*' X $libpth`;
3855 $test -f "$xxx" -a "X$ignore_versioned_solibs" = "X"; then
2afac517 3856 echo "Found -l$thislib (shared)."
3857 case " $dflt " in
3858 *"-l$thislib "*);;
3859 *) dflt="$dflt -l$thislib";;
4633a7c4 3860 esac
2afac517 3861 elif xxx=`./loc lib$thislib.$so X $libpth` ; $test -f "$xxx"; then
3862 echo "Found -l$thislib (shared)."
3863 case " $dflt " in
3864 *"-l$thislib "*);;
3865 *) dflt="$dflt -l$thislib";;
3866 esac
dfe9444c 3867 elif xxx=`./loc lib$thislib$_a X $libpth`; $test -f "$xxx"; then
2afac517 3868 echo "Found -l$thislib."
3869 case " $dflt " in
3870 *"-l$thislib "*);;
3871 *) dflt="$dflt -l$thislib";;
3872 esac
dfe9444c 3873 elif xxx=`./loc $thislib$_a X $libpth`; $test -f "$xxx"; then
2afac517 3874 echo "Found -l$thislib."
3875 case " $dflt " in
3876 *"-l$thislib "*);;
3877 *) dflt="$dflt -l$thislib";;
3878 esac
dfe9444c 3879 elif xxx=`./loc lib${thislib}_s$_a X $libpth`; $test -f "$xxx"; then
2afac517 3880 echo "Found -l${thislib}_s."
3881 case " $dflt " in
3882 *"-l$thislib "*);;
3883 *) dflt="$dflt -l${thislib}_s";;
3884 esac
dfe9444c 3885 elif xxx=`./loc Slib$thislib$_a X $xlibpth`; $test -f "$xxx"; then
2afac517 3886 echo "Found -l$thislib."
3887 case " $dflt " in
3888 *"-l$thislib "*);;
3889 *) dflt="$dflt -l$thislib";;
3890 esac
3891 else
3892 echo "No -l$thislib."
3893 fi
3894done
3895set X $dflt
3896shift
3897dflt="$*"
3898case "$libs" in
3899'') dflt="$dflt";;
3900*) dflt="$libs";;
3901esac
3902case "$dflt" in
3903' '|'') dflt='none';;
8e07c86e 3904esac
2afac517 3905
4633a7c4
LW
3906$cat <<EOM
3907
2afac517 3908Some versions of Unix support shared libraries, which make executables smaller
3909but make load time slightly longer.
8e07c86e 3910
2afac517 3911On some systems, mostly System V Release 3's, the shared library is included
3912by putting the option "-lc_s" as the last thing on the cc command line when
3913linking. Other systems use shared libraries by default. There may be other
3914libraries needed to compile $package on your machine as well. If your system
3915needs the "-lc_s" option, include it here. Include any other special libraries
3916here as well. Say "none" for none.
4633a7c4 3917EOM
2afac517 3918
3919echo " "
3920rp="Any additional libraries?"
8e07c86e 3921. ./myread
2afac517 3922case "$ans" in
3923none) libs=' ';;
3924*) libs="$ans";;
3925esac
8e07c86e 3926
2afac517 3927: determine optimize, if desired, or use for debug flag also
3928case "$optimize" in
2ae324a7 3929' '|$undef) dflt='none';;
2afac517 3930'') dflt='-O';;
3931*) dflt="$optimize";;
4633a7c4 3932esac
2afac517 3933$cat <<EOH
4633a7c4 3934
760ac839 3935Some C compilers have problems with their optimizers. By default, $package
4633a7c4
LW
3936compiles with the -O flag to use the optimizer. Alternately, you might want
3937to use the symbolic debugger, which uses the -g flag (on traditional Unix
3938systems). Either flag can be specified here. To use neither flag, specify
3939the word "none".
3940
3941EOH
3942rp="What optimizer/debugger flag should be used?"
3943. ./myread
3944optimize="$ans"
3945case "$optimize" in
3946'none') optimize=" ";;
3947esac
3948
3949dflt=''
25f94b33
AD
3950: We will not override a previous value, but we might want to
3951: augment a hint file
3952case "$hint" in
3953none|recommended)
4633a7c4
LW
3954 case "$gccversion" in
3955 1*) dflt='-fpcc-struct-return' ;;
3956 esac
3957 case "$optimize" in
3958 *-g*) dflt="$dflt -DDEBUGGING";;
3959 esac
3960 case "$gccversion" in
3961 2*) if test -d /etc/conf/kconfig.d &&
3962 $contains _POSIX_VERSION $usrinc/sys/unistd.h >/dev/null 2>&1
3963 then
3964 dflt="$dflt -posix"
3965 fi
3966 ;;
3967 esac
3968 ;;
3969esac
3970
a4f3eea9 3971case "$mips_type" in
3972*BSD*|'') inclwanted="$locincpth $usrinc";;
3973*) inclwanted="$locincpth $inclwanted $usrinc/bsd";;
3974esac
3975for thisincl in $inclwanted; do
3976 if $test -d $thisincl; then
3977 if $test x$thisincl != x$usrinc; then
3978 case "$dflt" in
3979 *$thisincl*);;
3980 *) dflt="$dflt -I$thisincl";;
3981 esac
3982 fi
3983 fi
3984done
3985
3986inctest='if $contains $2 $usrinc/$1 >/dev/null 2>&1; then
3987 xxx=true;
3988elif $contains $2 $usrinc/sys/$1 >/dev/null 2>&1; then
3989 xxx=true;
3990else
3991 xxx=false;
3992fi;
3993if $xxx; then
3994 case "$dflt" in
3995 *$2*);;
3996 *) dflt="$dflt -D$2";;
3997 esac;
3998fi'
3999
4000if ./osf1; then
4001 set signal.h __LANGUAGE_C__; eval $inctest
4002else
4003 set signal.h LANGUAGE_C; eval $inctest
4004fi
a4f3eea9 4005
4006case "$hint" in
4007none|recommended) dflt="$ccflags $dflt" ;;
4008*) dflt="$ccflags";;
4009esac
4010
4011case "$dflt" in
4012''|' ') dflt=none;;
4013esac
4014$cat <<EOH
4015
4016Your C compiler may want other flags. For this question you should include
4017-I/whatever and -DWHATEVER flags and any other flags used by the C compiler,
4018but you should NOT include libraries or ld flags like -lwhatever. If you
4019want $package to honor its debug switch, you should include -DDEBUGGING here.
dfe9444c 4020Your C compiler might also need additional flags, such as -D_POSIX_SOURCE.
a4f3eea9 4021
4022To use no flags, specify the word "none".
4023
4024EOH
4025set X $dflt
4026shift
4027dflt=${1+"$@"}
4028rp="Any additional cc flags?"
4029. ./myread
4030case "$ans" in
4031none) ccflags='';;
4032*) ccflags="$ans";;
4033esac
4034
4035: the following weeds options from ccflags that are of no interest to cpp
4036cppflags="$ccflags"
4037case "$gccversion" in
40381*) cppflags="$cppflags -D__GNUC__"
4039esac
4040case "$mips_type" in
4041'');;
4042*BSD*) cppflags="$cppflags -DSYSTYPE_BSD43";;
4043esac
4044case "$cppflags" in
4045'');;
4046*)
4047 echo " "
4048 echo "Let me guess what the preprocessor flags are..." >&4
4049 set X $cppflags
4050 shift
4051 cppflags=''
4052 $cat >cpp.c <<'EOM'
4053#define BLURFL foo
4054
4055BLURFL xx LFRULB
4056EOM
4057 previous=''
4058 for flag in $*
4059 do
4060 case "$flag" in
4061 -*) ftry="$flag";;
4062 *) ftry="$previous $flag";;
4063 esac
7bac28a0 4064 if $cppstdin -DLFRULB=bar $cppflags $ftry $cppminus <cpp.c \
a4f3eea9 4065 >cpp1.out 2>/dev/null && \
dfe9444c 4066 $cpprun -DLFRULB=bar $cppflags $ftry $cpplast <cpp.c \
a4f3eea9 4067 >cpp2.out 2>/dev/null && \
4068 $contains 'foo.*xx.*bar' cpp1.out >/dev/null 2>&1 && \
4069 $contains 'foo.*xx.*bar' cpp2.out >/dev/null 2>&1
4070 then
4071 cppflags="$cppflags $ftry"
4072 previous=''
4073 else
4074 previous="$flag"
4075 fi
4076 done
4077 set X $cppflags
4078 shift
4079 cppflags=${1+"$@"}
4080 case "$cppflags" in
4081 *-*) echo "They appear to be: $cppflags";;
4082 esac
4083 $rm -f cpp.c cpp?.out
4084 ;;
4085esac
4086
4087: flags used in final linking phase
a4f3eea9 4088case "$ldflags" in
4089'') if ./venix; then
4090 dflt='-i -z'
4091 else
4092 dflt=''
4093 fi
4094 case "$ccflags" in
4095 *-posix*) dflt="$dflt -posix" ;;
4096 esac
4097 ;;
4098*) dflt="$ldflags";;
4099esac
4100
4101: Try to guess additional flags to pick up local libraries.
4102for thislibdir in $libpth; do
4103 case " $loclibpth " in
4104 *" $thislibdir "*)
4105 case "$dflt " in
4106 *"-L$thislibdir "*) ;;
4107 *) dflt="$dflt -L$thislibdir" ;;
4108 esac
4109 ;;
4110 esac
4111done
4112
4113case "$dflt" in
4114'') dflt='none' ;;
4115esac
4116
4117$cat <<EOH
4118
4119Your C linker may need flags. For this question you should
4120include -L/whatever and any other flags used by the C linker, but you
4121should NOT include libraries like -lwhatever.
4122
4123Make sure you include the appropriate -L/path flags if your C linker
4124does not normally search all of the directories you specified above,
4125namely
4126 $libpth
4127To use no flags, specify the word "none".
4128
4129EOH
4130
4131rp="Any additional ld flags (NOT including libraries)?"
4132. ./myread
4133case "$ans" in
4134none) ldflags='';;
4135*) ldflags="$ans";;
4136esac
4137rmlist="$rmlist pdp11"
4138
4139: coherency check
4140echo " "
dfe9444c 4141echo "Checking your choice of C compiler and flags for coherency..." >&4
5ff3f7a4
GS
4142$cat > try.c <<'EOF'
4143#include <stdio.h>
4144main() { printf("Ok\n"); exit(0); }
4145EOF
87563a30 4146set X $cc $optimize $ccflags -o try $ldflags try.c $libs
a4f3eea9 4147shift
5ff3f7a4
GS
4148$cat >try.msg <<'EOM'
4149I've tried to compile and run the following simple program:
4150
4151EOM
a83b1ac8 4152$cat try.c >> try.msg
5ff3f7a4
GS
4153
4154$cat >> try.msg <<EOM
4155
4156I used the command:
a4f3eea9 4157
4158 $*
4159 ./try
4160
4161and I got the following output:
4162
4163EOM
a4f3eea9 4164dflt=y
28e8609d 4165if sh -c "$cc $optimize $ccflags -o try $ldflags try.c $libs" >>try.msg 2>&1; then
a4f3eea9 4166 if sh -c './try' >>try.msg 2>&1; then
dfe9444c
AD
4167 xxx=`./try`
4168 case "$xxx" in
4169 "Ok") dflt=n ;;
4170 *) echo 'The program compiled OK, but produced no output.' >> try.msg
4171 case " $libs " in
4172 *" -lsfio "*)
4173 cat >> try.msg <<'EOQS'
4174If $libs contains -lsfio, and sfio is mis-configured, then it
4175sometimes (apparently) runs and exits with a 0 status, but with no
4176output! It may have to do with sfio's use of _exit vs. exit.
4177
4178EOQS
4179 rp="You have a big problem. Shall I abort Configure"
4180 dflt=y
4181 ;;
4182 esac
4183 ;;
4184 esac
a4f3eea9 4185 else
4186 echo "The program compiled OK, but exited with status $?." >>try.msg
dfe9444c 4187 rp="You have a problem. Shall I abort Configure"
a4f3eea9 4188 dflt=y
4189 fi
4190else
4191 echo "I can't compile the test program." >>try.msg
dfe9444c 4192 rp="You have a BIG problem. Shall I abort Configure"
a4f3eea9 4193 dflt=y
4194fi
4195case "$dflt" in
4196y)
97286747 4197 $cat try.msg >&4
a4f3eea9 4198 case "$knowitall" in
4199 '')
5ff3f7a4 4200 echo "(The supplied flags or libraries might be incorrect.)"
a4f3eea9 4201 ;;
4202 *) dflt=n;;
4203 esac
4204 echo " "
4205 . ./myread
4206 case "$ans" in
4207 n*|N*) ;;
4208 *) echo "Ok. Stopping Configure." >&4
4209 exit 1
4210 ;;
4211 esac
4212 ;;
4213n) echo "OK, that should do.";;
4214esac
4215$rm -f try try.* core
4216
bfb7748a
AD
4217: determine filename position in cpp output
4218echo " "
4219echo "Computing filename position in cpp output for #include directives..." >&4
4220echo '#include <stdio.h>' > foo.c
4221$cat >fieldn <<EOF
4222$startsh
4223$cppstdin $cppflags $cppminus <foo.c 2>/dev/null | \
4224$grep '^[ ]*#.*stdio\.h' | \
4225while read cline; do
4226 pos=1
4227 set \$cline
4228 while $test \$# -gt 0; do
4229 if $test -r \`echo \$1 | $tr -d '"'\`; then
4230 echo "\$pos"
4231 exit 0
4232 fi
4233 shift
4234 pos=\`expr \$pos + 1\`
4235 done
4236done
4237EOF
4238chmod +x fieldn
4239fieldn=`./fieldn`
4240$rm -f foo.c fieldn
4241case $fieldn in
4242'') pos='???';;
42431) pos=first;;
42442) pos=second;;
42453) pos=third;;
4246*) pos="${fieldn}th";;
4247esac
4248echo "Your cpp writes the filename in the $pos field of the line."
4249
4250: locate header file
4251$cat >findhdr <<EOF
4252$startsh
4253wanted=\$1
4254name=''
4255if test -f $usrinc/\$wanted; then
4256 echo "$usrinc/\$wanted"
4257 exit 0
4258fi
4259awkprg='{ print \$$fieldn }'
4260echo "#include <\$wanted>" > foo\$\$.c
4261$cppstdin $cppminus $cppflags < foo\$\$.c 2>/dev/null | \
4262$grep "^[ ]*#.*\$wanted" | \
4263while read cline; do
4264 name=\`echo \$cline | $awk "\$awkprg" | $tr -d '"'\`
4265 case "\$name" in
4266 */\$wanted) echo "\$name"; exit 0;;
4267 *) name='';;
4268 esac;
4269done;
4270$rm -f foo\$\$.c;
4271case "\$name" in
4272'') exit 1;;
4273esac
4274EOF
4275chmod +x findhdr
4276
4277: define an alternate in-header-list? function
4278inhdr='echo " "; td=$define; tu=$undef; yyy=$@;
4279cont=true; xxf="echo \"<\$1> found.\" >&4";
4280case $# in 2) xxnf="echo \"<\$1> NOT found.\" >&4";;
4281*) xxnf="echo \"<\$1> NOT found, ...\" >&4";;
4282esac;
4283case $# in 4) instead=instead;; *) instead="at last";; esac;
4284while $test "$cont"; do
4285 xxx=`./findhdr $1`
4286 var=$2; eval "was=\$$2";
4287 if $test "$xxx" && $test -r "$xxx";
4288 then eval $xxf;
4289 eval "case \"\$$var\" in $undef) . ./whoa; esac"; eval "$var=\$td";
4290 cont="";
4291 else eval $xxnf;
4292 eval "case \"\$$var\" in $define) . ./whoa; esac"; eval "$var=\$tu"; fi;
4293 set $yyy; shift; shift; yyy=$@;
4294 case $# in 0) cont="";;
4295 2) xxf="echo \"but I found <\$1> $instead.\" >&4";
4296 xxnf="echo \"and I did not find <\$1> either.\" >&4";;
4297 *) xxf="echo \"but I found <\$1\> instead.\" >&4";
4298 xxnf="echo \"there is no <\$1>, ...\" >&4";;
4299 esac;
4300done;
4301while $test "$yyy";
4302do set $yyy; var=$2; eval "was=\$$2";
4303 eval "case \"\$$var\" in $define) . ./whoa; esac"; eval "$var=\$tu";
4304 set $yyy; shift; shift; yyy=$@;
4305done'
4306
4307: see if this is a malloc.h system
4308set malloc.h i_malloc
4309eval $inhdr
4310
4311: see if stdlib is available
4312set stdlib.h i_stdlib
4313eval $inhdr
4314
4315: determine which malloc to compile in
4316echo " "
4317case "$usemymalloc" in
5ff3f7a4
GS
4318''|[yY]*|true|$define) dflt='y' ;;
4319*) dflt='n' ;;
bfb7748a
AD
4320esac
4321rp="Do you wish to attempt to use the malloc that comes with $package?"
4322. ./myread
4323usemymalloc="$ans"
4324case "$ans" in
4325y*|true)
4326 usemymalloc='y'
4327 mallocsrc='malloc.c'
4328 mallocobj="malloc$_o"
4329 d_mymalloc="$define"
4330 case "$libs" in
4331 *-lmalloc*)
4332 : Remove malloc from list of libraries to use
4333 echo "Removing unneeded -lmalloc from library list" >&4
4334 set `echo X $libs | $sed -e 's/-lmalloc / /' -e 's/-lmalloc$//'`
4335 shift
4336 libs="$*"
4337 echo "libs = $libs" >&4
4338 ;;
4339 esac
4340 ;;
4341*)
4342 usemymalloc='n'
4343 mallocsrc=''
4344 mallocobj=''
4345 d_mymalloc="$undef"
4346 ;;
4347esac
4348
4349: compute the return types of malloc and free
4350echo " "
4351$cat >malloc.c <<END
4352#$i_malloc I_MALLOC
4353#$i_stdlib I_STDLIB
4354#include <stdio.h>
4355#include <sys/types.h>
4356#ifdef I_MALLOC
4357#include <malloc.h>
4358#endif
4359#ifdef I_STDLIB
4360#include <stdlib.h>
4361#endif
4362#ifdef TRY_MALLOC
4363void *malloc();
4364#endif
4365#ifdef TRY_FREE
4366void free();
4367#endif
4368END
4369case "$malloctype" in
4370'')
4371 if $cc $ccflags -c -DTRY_MALLOC malloc.c >/dev/null 2>&1; then
4372 malloctype='void *'
4373 else
4374 malloctype='char *'
4375 fi
4376 ;;
4377esac
4378echo "Your system wants malloc to return '$malloctype', it would seem." >&4
4379
4380case "$freetype" in
4381'')
4382 if $cc $ccflags -c -DTRY_FREE malloc.c >/dev/null 2>&1; then
4383 freetype='void'
4384 else
4385 freetype='int'
4386 fi
4387 ;;
4388esac
4389echo "Your system uses $freetype free(), it would seem." >&4
4390$rm -f malloc.[co]
c4f23d77
AD
4391: Cruising for prototypes
4392echo " "
4393echo "Checking out function prototypes..." >&4
4394$cat >prototype.c <<'EOCP'
4395main(int argc, char *argv[]) {
4396 exit(0);}
4397EOCP
4398if $cc $ccflags -c prototype.c >prototype.out 2>&1 ; then
4399 echo "Your C compiler appears to support function prototypes."
4400 val="$define"
4401else
4402 echo "Your C compiler doesn't seem to understand function prototypes."
4403 val="$undef"
4404fi
4405set prototype
4406eval $setvar
4407$rm -f prototype*
4408
4409case "$prototype" in
4410"$define") ;;
4411*) ansi2knr='ansi2knr'
4412 echo " "
4413 cat <<EOM >&4
4414
4415$me: FATAL ERROR:
4416This version of $package can only be compiled by a compiler that
4417understands function prototypes. Unfortunately, your C compiler
4418 $cc $ccflags
4419doesn't seem to understand them. Sorry about that.
4420
5ff3f7a4 4421If GNU cc is available for your system, perhaps you could try that instead.
c4f23d77
AD
4422
4423Eventually, we hope to support building Perl with pre-ANSI compilers.
4424If you would like to help in that effort, please contact <perlbug@perl.org>.
4425
4426Aborting Configure now.
4427EOM
4428 exit 2
4429 ;;
4430esac
4431
4432: determine where public executables go
4433echo " "
4434set dflt bin bin
4435eval $prefixit
4436fn=d~
4437rp='Pathname where the public executables will reside?'
4438. ./getfile
4439if $test "X$ansexp" != "X$binexp"; then
4440 installbin=''
4441fi
4442bin="$ans"
4443binexp="$ansexp"
4444if $afs; then
4445 $cat <<EOM
4446
4447Since you are running AFS, I need to distinguish the directory in which
4448executables reside from the directory in which they are installed (and from
4449which they are presumably copied to the former directory by occult means).
4450
4451EOM
4452 case "$installbin" in
4453 '') dflt=`echo $binexp | sed 's#^/afs/#/afs/.#'`;;
4454 *) dflt="$installbin";;
4455 esac
4456 fn=de~
4457 rp='Where will public executables be installed?'
4458 . ./getfile
4459 installbin="$ans"
4460else
4461 installbin="$binexp"
4462fi
4463
dfe9444c
AD
4464: define a shorthand compile call
4465compile='
4466mc_file=$1;
4467shift;
c4f23d77 4468$cc $optimize $ccflags $ldflags -o ${mc_file} $* ${mc_file}.c $libs > /dev/null 2>&1;'
dc45a647
MB
4469: define a shorthand compile call for compilations that should be ok.
4470compile_ok='
4471mc_file=$1;
4472shift;
c4f23d77 4473$cc $optimize $ccflags $ldflags -o ${mc_file} $* ${mc_file}.c $libs;'
dfe9444c 4474
a4f3eea9 4475echo " "
4476echo "Checking for GNU C Library..." >&4
4477cat >gnulibc.c <<EOM
aebf16e7 4478#include <stdio.h>
a4f3eea9 4479int
4480main()
4481{
aebf16e7
AD
4482#ifdef __GLIBC__
4483 exit(0);
4484#else
4485 exit(1);
4486#endif
a4f3eea9 4487}
4488EOM
dfe9444c 4489set gnulibc
aebf16e7 4490if eval $compile_ok && ./gnulibc; then
a4f3eea9 4491 val="$define"
4492 echo "You are using the GNU C Library"
4633a7c4 4493else
a4f3eea9 4494 val="$undef"
4495 echo "You are not using the GNU C Library"
4633a7c4 4496fi
a4f3eea9 4497$rm -f gnulibc*
4498set d_gnulibc
4499eval $setvar
25f94b33 4500
a4f3eea9 4501: see if nm is to be used to determine whether a symbol is defined or not
4502case "$usenm" in
4503'')
dc45a647 4504 dflt=''
a4f3eea9 4505 case "$d_gnulibc" in
dc45a647
MB
4506 "$define")
4507 echo " "
4508 echo "nm probably won't work on the GNU C Library." >&4
a4f3eea9 4509 dflt=n
4510 ;;
dc45a647
MB
4511 esac
4512 case "$dflt" in
4513 '')
4514 if $test "$osname" = aix -a ! -f /lib/syscalls.exp; then
4515 echo " "
4516 echo "Whoops! This is an AIX system without /lib/syscalls.exp!" >&4
4517 echo "'nm' won't be sufficient on this sytem." >&4
4518 dflt=n
4519 fi
4520 ;;
4521 esac
4522 case "$dflt" in
c4f23d77 4523 '') dflt=`$egrep 'inlibc|csym' $rsrc/Configure | wc -l 2>/dev/null`
a4f3eea9 4524 if $test $dflt -gt 20; then
4525 dflt=y
4526 else
4527 dflt=n
4528 fi
4529 ;;
4530 esac
4531 ;;
4532*)
4533 case "$usenm" in
dc45a647 4534 true|$define) dflt=y;;
a4f3eea9 4535 *) dflt=n;;
4536 esac
4537 ;;
25f94b33 4538esac
a4f3eea9 4539$cat <<EOM
4633a7c4 4540
dc45a647
MB
4541I can use $nm to extract the symbols from your C libraries. This
4542is a time consuming task which may generate huge output on the disk (up
4543to 3 megabytes) but that should make the symbols extraction faster. The
4544alternative is to skip the 'nm' extraction part and to compile a small
4545test program instead to determine whether each symbol is present. If
4546you have a fast C compiler and/or if your 'nm' output cannot be parsed,
4547this may be the best solution.
4548
4549You probably shouldn't let me use 'nm' if you are using the GNU C Library.
4633a7c4 4550
a4f3eea9 4551EOM
693762b4 4552rp="Shall I use $nm to extract C symbols from the libraries?"
4633a7c4
LW
4553. ./myread
4554case "$ans" in
dc45a647 4555[Nn]*) usenm=false;;
a4f3eea9 4556*) usenm=true;;
4633a7c4
LW
4557esac
4558
a4f3eea9 4559runnm=$usenm
4560case "$reuseval" in
4561true) runnm=false;;
4633a7c4 4562esac
a4f3eea9 4563
4564: nm options which may be necessary
4565case "$nm_opt" in
4566'') if $test -f /mach_boot; then
1e422769 4567 nm_opt='' # Mach
a4f3eea9 4568 elif $test -d /usr/ccs/lib; then
1e422769 4569 nm_opt='-p' # Solaris (and SunOS?)
a4f3eea9 4570 elif $test -f /dgux; then
1e422769 4571 nm_opt='-p' # DG-UX
2ae324a7 4572 elif $test -f /lib64/rld; then
1e422769 4573 nm_opt='-p' # 64-bit Irix
a4f3eea9 4574 else
4575 nm_opt=''
4576 fi;;
4633a7c4 4577esac
4633a7c4 4578
a4f3eea9 4579: nm options which may be necessary for shared libraries but illegal
4580: for archive libraries. Thank you, Linux.
4581case "$nm_so_opt" in
4582'') case "$myuname" in
4583 *linux*)
693762b4 4584 if $nm --help | $grep 'dynamic' > /dev/null 2>&1; then
a4f3eea9 4585 nm_so_opt='--dynamic'
4633a7c4 4586 fi
a4f3eea9 4587 ;;
4633a7c4 4588 esac
4633a7c4
LW
4589 ;;
4590esac
4591
a4f3eea9 4592case "$runnm" in
4593true)
4594: get list of predefined functions in a handy place
4595echo " "
4596case "$libc" in
4597'') libc=unknown
4598 case "$libs" in
dfe9444c 4599 *-lc_s*) libc=`./loc libc_s$_a $libc $libpth`
a4f3eea9 4600 esac
4601 ;;
4602esac
4603libnames='';
4604case "$libs" in
4605'') ;;
4606*) for thislib in $libs; do
4607 case "$thislib" in
4608 -lc|-lc_s)
4609 : Handle C library specially below.
4610 ;;
4611 -l*)
4612 thislib=`echo $thislib | $sed -e 's/^-l//'`
4613 if try=`./loc lib$thislib.$so.'*' X $libpth`; $test -f "$try"; then
4614 :
4615 elif try=`./loc lib$thislib.$so X $libpth`; $test -f "$try"; then
4616 :
dfe9444c 4617 elif try=`./loc lib$thislib$_a X $libpth`; $test -f "$try"; then
a4f3eea9 4618 :
dfe9444c 4619 elif try=`./loc $thislib$_a X $libpth`; $test -f "$try"; then
d97d40b5 4620 :
a4f3eea9 4621 elif try=`./loc lib$thislib X $libpth`; $test -f "$try"; then
4622 :
4623 elif try=`./loc $thislib X $libpth`; $test -f "$try"; then
4624 :
dfe9444c 4625 elif try=`./loc Slib$thislib$_a X $xlibpth`; $test -f "$try"; then
a4f3eea9 4626 :
4627 else
4628 try=''
4629 fi
4630 libnames="$libnames $try"
4631 ;;
4632 *) libnames="$libnames $thislib" ;;
4633 esac
4634 done
4635 ;;
4636esac
4637xxx=normal
4638case "$libc" in
4639unknown)
4640 set /lib/libc.$so
4641 for xxx in $libpth; do
4642 $test -r $1 || set $xxx/libc.$so
4643 : The messy sed command sorts on library version numbers.
4644 $test -r $1 || \
4645 set `echo blurfl; echo $xxx/libc.$so.[0-9]* | \
28e8609d 4646 tr ' ' $trnl | egrep -v '\.[A-Za-z]*$' | $sed -e '
a4f3eea9 4647 h
4648 s/[0-9][0-9]*/0000&/g
4649 s/0*\([0-9][0-9][0-9][0-9][0-9]\)/\1/g
4650 G
4651 s/\n/ /' | \
dfe9444c 4652 sort | $sed -e 's/^.* //'`
a4f3eea9 4653 eval set \$$#
4654 done
4655 $test -r $1 || set /usr/ccs/lib/libc.$so
dfe9444c
AD
4656 $test -r $1 || set /lib/libsys_s$_a
4657 ;;
a4f3eea9 4658*)
4659 set blurfl
4660 ;;
4661esac
4662if $test -r "$1"; then
4663 echo "Your (shared) C library seems to be in $1."
4664 libc="$1"
4665elif $test -r /lib/libc && $test -r /lib/clib; then
4666 echo "Your C library seems to be in both /lib/clib and /lib/libc."
4667 xxx=apollo
4668 libc='/lib/clib /lib/libc'
4669 if $test -r /lib/syslib; then
4670 echo "(Your math library is in /lib/syslib.)"
4671 libc="$libc /lib/syslib"
4672 fi
4673elif $test -r "$libc" || (test -h "$libc") >/dev/null 2>&1; then
4674 echo "Your C library seems to be in $libc, as you said before."
dfe9444c
AD
4675elif $test -r $incpath/usr/lib/libc$_a; then
4676 libc=$incpath/usr/lib/libc$_a;
a4f3eea9 4677 echo "Your C library seems to be in $libc. That's fine."
dfe9444c
AD
4678elif $test -r /lib/libc$_a; then
4679 libc=/lib/libc$_a;
a4f3eea9 4680 echo "Your C library seems to be in $libc. You're normal."
4681else
dfe9444c 4682 if tans=`./loc libc$_a blurfl/dyick $libpth`; $test -r "$tans"; then
a4f3eea9 4683 :
4684 elif tans=`./loc libc blurfl/dyick $libpth`; $test -r "$tans"; then
4685 libnames="$libnames "`./loc clib blurfl/dyick $libpth`
4686 elif tans=`./loc clib blurfl/dyick $libpth`; $test -r "$tans"; then
4687 :
dfe9444c 4688 elif tans=`./loc Slibc$_a blurfl/dyick $xlibpth`; $test -r "$tans"; then
a4f3eea9 4689 :
dfe9444c 4690 elif tans=`./loc Mlibc$_a blurfl/dyick $xlibpth`; $test -r "$tans"; then
a4f3eea9 4691 :
4633a7c4 4692 else
dfe9444c 4693 tans=`./loc Llibc$_a blurfl/dyick $xlibpth`
4633a7c4 4694 fi
a4f3eea9 4695 if $test -r "$tans"; then
4696 echo "Your C library seems to be in $tans, of all places."
4697 libc=$tans
4698 else
4699 libc='blurfl'
4700 fi
4701fi
4702if $test $xxx = apollo -o -r "$libc" || (test -h "$libc") >/dev/null 2>&1; then
4703 dflt="$libc"
4704 cat <<EOM
4633a7c4 4705
a4f3eea9 4706If the guess above is wrong (which it might be if you're using a strange
4707compiler, or your machine supports multiple models), you can override it here.
4633a7c4 4708
a4f3eea9 4709EOM
4710else
4711 dflt=''
28e8609d 4712 echo $libpth | tr ' ' $trnl | sort | uniq > libpath
a4f3eea9 4713 cat >&4 <<EOM
4714I can't seem to find your C library. I've looked in the following places:
4633a7c4 4715
a4f3eea9 4716EOM
4717 $sed 's/^/ /' libpath
4718 cat <<EOM
4633a7c4 4719
a4f3eea9 4720None of these seems to contain your C library. I need to get its name...
4633a7c4 4721
a4f3eea9 4722EOM
4723fi
4724fn=f
4725rp='Where is your C library?'
4726. ./getfile
4727libc="$ans"
4633a7c4 4728
4633a7c4 4729echo " "
28e8609d 4730echo $libc $libnames | tr ' ' $trnl | sort | uniq > libnames
a4f3eea9 4731set X `cat libnames`
4633a7c4 4732shift
a4f3eea9 4733xxx=files
4734case $# in 1) xxx=file; esac
4735echo "Extracting names from the following $xxx for later perusal:" >&4
4736echo " "
4737$sed 's/^/ /' libnames >&4
4738echo " "
4739$echo $n "This may take a while...$c" >&4
4633a7c4 4740
dfe9444c
AD
4741for file in $*; do
4742 case $file in
693762b4
AD
4743 *$so*) $nm $nm_so_opt $nm_opt $file 2>/dev/null;;
4744 *) $nm $nm_opt $file 2>/dev/null;;
a4f3eea9 4745 esac
dfe9444c 4746done >libc.tmp
4633a7c4 4747
a4f3eea9 4748$echo $n ".$c"
4749$grep fprintf libc.tmp > libc.ptf
4750xscan='eval "<libc.ptf $com >libc.list"; $echo $n ".$c" >&4'
4751xrun='eval "<libc.tmp $com >libc.list"; echo "done" >&4'
4752xxx='[ADTSIW]'
4753if com="$sed -n -e 's/__IO//' -e 's/^.* $xxx *_[_.]*//p' -e 's/^.* $xxx *//p'";\
4754 eval $xscan;\
4755 $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4756 eval $xrun
4757elif com="$sed -n -e 's/^__*//' -e 's/^\([a-zA-Z_0-9$]*\).*xtern.*/\1/p'";\
4758 eval $xscan;\
4759 $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4760 eval $xrun
4761elif com="$sed -n -e '/|UNDEF/d' -e '/FUNC..GL/s/^.*|__*//p'";\
4762 eval $xscan;\
4763 $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4764 eval $xrun
4765elif com="$sed -n -e 's/^.* D __*//p' -e 's/^.* D //p'";\
4766 eval $xscan;\
4767 $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4768 eval $xrun
4769elif com="$sed -n -e 's/^_//' -e 's/^\([a-zA-Z_0-9]*\).*xtern.*text.*/\1/p'";\
4770 eval $xscan;\
4771 $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4772 eval $xrun
4773elif com="$sed -n -e 's/^.*|FUNC |GLOB .*|//p'";\
4774 eval $xscan;\
4775 $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4776 eval $xrun
4777elif com="$grep '|' | $sed -n -e '/|COMMON/d' -e '/|DATA/d' \
4778 -e '/ file/d' -e 's/^\([^ ]*\).*/\1/p'";\
4779 eval $xscan;\
4780 $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4781 eval $xrun
4782elif com="$sed -n -e 's/^.*|FUNC |GLOB .*|//p' -e 's/^.*|FUNC |WEAK .*|//p'";\
4783 eval $xscan;\
4784 $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4785 eval $xrun
4786elif com="$sed -n -e 's/^__//' -e '/|Undef/d' -e '/|Proc/s/ .*//p'";\
4787 eval $xscan;\
4788 $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4789 eval $xrun
1e422769 4790elif com="$sed -n -e 's/^.*|Proc .*|Text *| *//p'";\
4791 eval $xscan;\
4792 $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4793 eval $xrun
a4f3eea9 4794elif com="$sed -n -e '/Def. Text/s/.* \([^ ]*\)\$/\1/p'";\
4795 eval $xscan;\
4796 $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4797 eval $xrun
4798elif com="$sed -n -e 's/^[-0-9a-f ]*_\(.*\)=.*/\1/p'";\
4799 eval $xscan;\
4800 $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4801 eval $xrun
44a8e56a 4802elif com="$sed -n -e 's/.*\.text n\ \ \ \.//p'";\
4803 eval $xscan;\
4804 $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4805 eval $xrun
a4f3eea9 4806else
693762b4 4807 $nm -p $* 2>/dev/null >libc.tmp
a4f3eea9 4808 $grep fprintf libc.tmp > libc.ptf
4809 if com="$sed -n -e 's/^.* [ADTSIW] *_[_.]*//p' -e 's/^.* [ADTSIW] //p'";\
4810 eval $xscan; $contains '^fprintf$' libc.list >/dev/null 2>&1
4811 then
4812 nm_opt='-p'
4813 eval $xrun
4633a7c4 4814 else
a4f3eea9 4815 echo " "
e5c9fcd0 4816 echo "$nm didn't seem to work right. Trying $ar instead..." >&4
a4f3eea9 4817 com=''
dc45a647
MB
4818 if $ar t $libc > libc.tmp && $contains '^fprintf$' libc.tmp >/dev/null 2>&1; then
4819 for thisname in $libnames $libc; do
e5c9fcd0 4820 $ar t $thisname >>libc.tmp
a4f3eea9 4821 done
dfe9444c 4822 $sed -e "s/\\$_o\$//" < libc.tmp > libc.list
a4f3eea9 4823 echo "Ok." >&4
dc45a647
MB
4824 elif test "X$osname" = "Xos2" && $ar tv $libc > libc.tmp; then
4825 # Repeat libc to extract forwarders to DLL entries too
4826 for thisname in $libnames $libc; do
4827 $ar tv $thisname >>libc.tmp
4828 # Revision 50 of EMX has bug in $ar.
4829 # it will not extract forwarders to DLL entries
4830 # Use emximp which will extract exactly them.
4831 emximp -o tmp.imp $thisname \
4832 2>/dev/null && \
4833 $sed -e 's/^\([_a-zA-Z0-9]*\) .*$/\1/p' \
4834 < tmp.imp >>libc.tmp
4835 $rm tmp.imp
4836 done
4837 $sed -e "s/\\$_o\$//" -e 's/^ \+//' < libc.tmp > libc.list
4838 echo "Ok." >&4
a4f3eea9 4839 else
e5c9fcd0 4840 echo "$ar didn't seem to work right." >&4
a4f3eea9 4841 echo "Maybe this is a Cray...trying bld instead..." >&4
dfe9444c 4842 if bld t $libc | $sed -e 's/.*\///' -e "s/\\$_o:.*\$//" > libc.list
a4f3eea9 4843 then
4844 for thisname in $libnames; do
4845 bld t $libnames | \
dfe9444c 4846 $sed -e 's/.*\///' -e "s/\\$_o:.*\$//" >>libc.list
e5c9fcd0 4847 $ar t $thisname >>libc.tmp
a4f3eea9 4848 done
4849 echo "Ok." >&4
4850 else
4851 echo "That didn't work either. Giving up." >&4
4852 exit 1
4853 fi
4854 fi
4633a7c4 4855 fi
4633a7c4 4856fi
a4f3eea9 4857nm_extract="$com"
4858if $test -f /lib/syscalls.exp; then
4633a7c4 4859 echo " "
a4f3eea9 4860 echo "Also extracting names from /lib/syscalls.exp for good ole AIX..." >&4
4861 $sed -n 's/^\([^ ]*\)[ ]*syscall$/\1/p' /lib/syscalls.exp >>libc.list
4862fi
4863;;
4864esac
4865$rm -f libnames libpath
4866
2afac517 4867: see if dld is available
4868set dld.h i_dld
4869eval $inhdr
4633a7c4 4870
2afac517 4871: is a C symbol defined?
4872csym='tlook=$1;
4873case "$3" in
4874-v) tf=libc.tmp; tc=""; tdc="";;
4875-a) tf=libc.tmp; tc="[0]"; tdc="[]";;
4876*) tlook="^$1\$"; tf=libc.list; tc="()"; tdc="()";;
4877esac;
4878tx=yes;
4879case "$reuseval-$4" in
4880true-) ;;
4881true-*) tx=no; eval "tval=\$$4"; case "$tval" in "") tx=yes;; esac;;
4882esac;
4883case "$tx" in
4884yes)
4885 case "$runnm" in
4886 true)
4887 if $contains $tlook $tf >/dev/null 2>&1;
4888 then tval=true;
4889 else tval=false;
4890 fi;;
4891 *)
4892 echo "main() { extern short $1$tdc; printf(\"%hd\", $1$tc); }" > t.c;
dfe9444c 4893 if $cc $optimize $ccflags $ldflags -o t t.c $libs >/dev/null 2>&1;
2afac517 4894 then tval=true;
4895 else tval=false;
4896 fi;
4897 $rm -f t t.c;;
4898 esac;;
4899*)
4900 case "$tval" in
4901 $define) tval=true;;
4902 *) tval=false;;
4903 esac;;
4904esac;
4905eval "$2=$tval"'
4633a7c4 4906
2afac517 4907: define an is-in-libc? function
4908inlibc='echo " "; td=$define; tu=$undef;
4909sym=$1; var=$2; eval "was=\$$2";
4910tx=yes;
4911case "$reuseval$was" in
4912true) ;;
4913true*) tx=no;;
4914esac;
4915case "$tx" in
4916yes)
4917 set $sym tres -f;
4918 eval $csym;
4919 case "$tres" in
4920 true)
4921 echo "$sym() found." >&4;
4922 case "$was" in $undef) . ./whoa; esac; eval "$var=\$td";;
4923 *)
4924 echo "$sym() NOT found." >&4;
4925 case "$was" in $define) . ./whoa; esac; eval "$var=\$tu";;
4926 esac;;
4927*)
4928 case "$was" in
4929 $define) echo "$sym() found." >&4;;
4930 *) echo "$sym() NOT found." >&4;;
4931 esac;;
4932esac'
4633a7c4 4933
2afac517 4934: see if dlopen exists
4935xxx_runnm="$runnm"
4936runnm=false
4937set dlopen d_dlopen
4938eval $inlibc
4939runnm="$xxx_runnm"
40a7a20a 4940
2afac517 4941: determine which dynamic loading, if any, to compile in
4633a7c4 4942echo " "
2afac517 4943dldir="ext/DynaLoader"
4944case "$usedl" in
4945$define|y|true)
4946 dflt='y'
4947 usedl="$define"
4948 ;;
4949$undef|n|false)
4950 dflt='n'
4951 usedl="$undef"
4952 ;;
4953*)
4954 dflt='n'
4955 case "$d_dlopen" in
4956 $define) dflt='y' ;;
4957 esac
4958 case "$i_dld" in
4959 $define) dflt='y' ;;
4633a7c4 4960 esac
2afac517 4961 : Does a dl_xxx.xs file exist for this operating system
dc45a647 4962 $test -f $rsrc/$dldir/dl_${osname}.xs && dflt='y'
4633a7c4
LW
4963 ;;
4964esac
2afac517 4965rp="Do you wish to use dynamic loading?"
4966. ./myread
4967usedl="$ans"
4968case "$ans" in
4969y*) usedl="$define"
4970 case "$dlsrc" in
4971 '')
dc45a647 4972 if $test -f $rsrc/$dldir/dl_${osname}.xs ; then
2afac517 4973 dflt="$dldir/dl_${osname}.xs"
4974 elif $test "$d_dlopen" = "$define" ; then
4975 dflt="$dldir/dl_dlopen.xs"
4976 elif $test "$i_dld" = "$define" ; then
4977 dflt="$dldir/dl_dld.xs"
4633a7c4 4978 else
2afac517 4979 dflt=''
4633a7c4 4980 fi
4633a7c4 4981 ;;
2afac517 4982 *) dflt="$dldir/$dlsrc"
4983 ;;
4633a7c4 4984 esac
2afac517 4985 echo "The following dynamic loading files are available:"
4986 : Can not go over to $dldir because getfile has path hard-coded in.
dc45a647
MB
4987 tdir=`pwd`; cd $rsrc; $ls -C $dldir/dl*.xs; cd $tdir
4988 rp="Source file to use for dynamic loading"
4989 fn="fne"
4990 # XXX This getfile call will fail the existence check if you try
4991 # building away from $src (this is not supported yet).
4992 . ./getfile
2afac517 4993 usedl="$define"
4994 : emulate basename
4995 dlsrc=`echo $ans | $sed -e 's@.*/\([^/]*\)$@\1@'`
2304df62 4996
dc45a647 4997 $cat << EOM
2304df62 4998
2afac517 4999Some systems may require passing special flags to $cc -c to
5000compile modules that will be used to create a shared library.
5001To use no flags, say "none".
2304df62
AD
5002
5003EOM
2afac517 5004 case "$cccdlflags" in
5005 '') case "$gccversion" in
5006 '') case "$osname" in
5007 hpux) dflt='+z' ;;
5008 next) dflt='none' ;;
8cc95fdb 5009 irix*) dflt='-KPIC' ;;
3a6175e1 5010 svr4*|esix*|solaris) dflt='-KPIC' ;;
2afac517 5011 sunos) dflt='-pic' ;;
5012 *) dflt='none' ;;
dfe9444c
AD
5013 esac
5014 ;;
5015 *) case "$osname" in
3a6175e1 5016 svr4*|esix*|solaris) dflt='-fPIC' ;;
dfe9444c 5017 *) dflt='-fpic' ;;
81d89818 5018 esac ;;
2afac517 5019 esac ;;
bfb7748a 5020 ' ') dflt='none' ;;
2afac517 5021 *) dflt="$cccdlflags" ;;
5022 esac
5023 rp="Any special flags to pass to $cc -c to compile shared library modules?"
5024 . ./myread
5025 case "$ans" in
5026 none) cccdlflags=' ' ;;
5027 *) cccdlflags="$ans" ;;
5028 esac
2304df62 5029
2afac517 5030 cat << EOM
ecfc5424 5031
2afac517 5032Some systems use ld to create libraries that can be dynamically loaded,
5033while other systems (such as those using ELF) use $cc.
a0f45b59 5034
2afac517 5035EOM
5036 case "$ld" in
5037 '') $cat >try.c <<'EOM'
5038/* Test for whether ELF binaries are produced */
5039#include <fcntl.h>
5040#include <stdlib.h>
5041main() {
5042 char b[4];
5043 int i = open("a.out",O_RDONLY);
5044 if(i == -1)
5045 exit(1); /* fail */
5046 if(read(i,b,4)==4 && b[0]==127 && b[1]=='E' && b[2]=='L' && b[3]=='F')
5047 exit(0); /* succeed (yes, it's ELF) */
2304df62 5048 else
2afac517 5049 exit(1); /* fail */
5050}
5051EOM
5052 if $cc $ccflags try.c >/dev/null 2>&1 && ./a.out; then
5053 cat <<EOM
5054You appear to have ELF support. I'll use $cc to build dynamic libraries.
5055EOM
5056 dflt="$cc"
2304df62 5057 else
2afac517 5058 echo "I'll use ld to build dynamic libraries."
5059 dflt='ld'
2304df62 5060 fi
2afac517 5061 rm -f try.c a.out
5062 ;;
5063 *) dflt="$ld"
5064 ;;
5065 esac
5066
5067 rp="What command should be used to create dynamic libraries?"
5068 . ./myread
5069 ld="$ans"
5070
5071 cat << EOM
5072
5073Some systems may require passing special flags to $ld to create a
5074library that can be dynamically loaded. If your ld flags include
5075-L/other/path options to locate libraries outside your loader's normal
5076search path, you may need to specify those -L options here as well. To
5077use no flags, say "none".
5078
5079EOM
5080 case "$lddlflags" in
5081 '') case "$osname" in
5082 hpux) dflt='-b' ;;
5083 linux|irix*) dflt='-shared' ;;
5084 next) dflt='none' ;;
5085 solaris) dflt='-G' ;;
5086 sunos) dflt='-assert nodefinitions' ;;
5087 svr4*|esix*) dflt="-G $ldflags" ;;
5088 *) dflt='none' ;;
5089 esac
5090 ;;
5091 *) dflt="$lddlflags" ;;
5092 esac
5093
bfb7748a 5094 : Try to guess additional flags to pick up local libraries.
a0915cb7
AD
5095 : Be careful not to append to a plain 'none'
5096 case "$dflt" in
5097 none) dflt='' ;;
5098 esac
bfb7748a
AD
5099 for thisflag in $ldflags; do
5100 case "$thisflag" in
5101 -L*)
5102 case " $dflt " in
5103 *" $thisflag "*) ;;
5104 *) dflt="$dflt $thisflag" ;;
5105 esac
5106 ;;
2afac517 5107 esac
bfb7748a 5108 done
2afac517 5109
bfb7748a
AD
5110 case "$dflt" in
5111 ''|' ') dflt='none' ;;
5112 esac
2afac517 5113
5114 rp="Any special flags to pass to $ld to create a dynamically loaded library?"
5115 . ./myread
5116 case "$ans" in
5117 none) lddlflags=' ' ;;
5118 *) lddlflags="$ans" ;;
5119 esac
5120
5121 cat <<EOM
5122
5123Some systems may require passing special flags to $cc to indicate that
5124the resulting executable will use dynamic linking. To use no flags,
5125say "none".
5126
5127EOM
5128 case "$ccdlflags" in
5129 '') case "$osname" in
5130 hpux) dflt='-Wl,-E' ;;
5131 linux) dflt='-rdynamic' ;;
5132 next) dflt='none' ;;
5133 sunos) dflt='none' ;;
5134 *) dflt='none' ;;
5135 esac ;;
bfb7748a 5136 ' ') dflt='none' ;;
2afac517 5137 *) dflt="$ccdlflags" ;;
5138 esac
5139 rp="Any special flags to pass to $cc to use dynamic loading?"
5140 . ./myread
5141 case "$ans" in
5142 none) ccdlflags=' ' ;;
5143 *) ccdlflags="$ans" ;;
5144 esac
5145 ;;
5146*) usedl="$undef"
5147 ld='ld'
5148 dlsrc='dl_none.xs'
5149 lddlflags=''
5150 ccdlflags=''
5151 ;;
5152esac
5153
5154also=''
5155case "$usedl" in
5156$undef)
5157 # No dynamic loading being used, so don't bother even to prompt.
5158 useshrplib='false'
5159 ;;
5160*) case "$useshrplib" in
5161 '') case "$osname" in
2ae324a7 5162 svr4*|dgux|dynixptx|esix|powerux)
3e3baf6d 5163 dflt=y
2afac517 5164 also='Building a shared libperl is required for dynamic loading to work on your system.'
5165 ;;
5166 next*)
5167 case "$osvers" in
3e3baf6d 5168 4*) dflt=y
2afac517 5169 also='Building a shared libperl is needed for MAB support.'
5170 ;;
3e3baf6d 5171 *) dflt=n
2afac517 5172 ;;
5173 esac
5174 ;;
3e3baf6d 5175 *) dflt=n
2afac517 5176 ;;
5177 esac
5178 ;;
5179 $define|true|[Yy]*)
3e3baf6d 5180 dflt=y
2afac517 5181 ;;
3e3baf6d 5182 *) dflt=n
2afac517 5183 ;;
5184 esac
5185 $cat << EOM
5186
5187The perl executable is normally obtained by linking perlmain.c with
dfe9444c 5188libperl${_a}, any static extensions (usually just DynaLoader), and
2afac517 5189any other libraries needed on this system (such as -lm, etc.). Since
5190your system supports dynamic loading, it is probably possible to build
5191a shared libperl.$so. If you will have more than one executable linked
5192to libperl.$so, this will significantly reduce the size of each
5193executable, but it may have a noticeable affect on performance. The
5194default is probably sensible for your system.
5195$also
5196
5197EOM
5198 rp="Build a shared libperl.$so (y/n)"
5199 . ./myread
5200 case "$ans" in
5201 true|$define|[Yy]*)
5202 useshrplib='true'
5203 # Why does next4 have to be so different?
5204 case "${osname}${osvers}" in
5205 next4*) xxx='DYLD_LIBRARY_PATH' ;;
dc45a647 5206 os2*) xxx='' ;; # Nothing special needed.
2afac517 5207 *) xxx='LD_LIBRARY_PATH' ;;
5208 esac
dc45a647
MB
5209 if test X"$xxx" != "X"; then
5210 $cat <<EOM | $tee -a ../config.msg >&4
2afac517 5211
5212To build perl, you must add the current working directory to your
693762b4 5213$xxx environment variable before running make. You can do
2afac517 5214this with
768f99fb 5215 $xxx=\`pwd\`:\$$xxx; export $xxx
2afac517 5216for Bourne-style shells, or
5217 setenv $xxx \`pwd\`
5218for Csh-style shells. You *MUST* do this before running make.
5219
5220EOM
dc45a647 5221 fi
2afac517 5222 ;;
5223 *) useshrplib='false' ;;
5224 esac
5225 ;;
5226esac
5227
5228case "$useshrplib" in
5229true)
5230 case "$libperl" in
5231 '')
5232 # Figure out a good name for libperl.so. Since it gets stored in
5233 # a version-specific architecture-dependent library, the version
5234 # number isn't really that important, except for making cc/ld happy.
5235 #
5236 # A name such as libperl.so.3.1
5237 majmin="libperl.$so.$patchlevel.$subversion"
5238 # A name such as libperl.so.301
5239 majonly=`echo $patchlevel $subversion |
5240 $awk '{printf "%d%02d", $1, $2}'`
5241 majonly=libperl.$so.$majonly
5242 # I'd prefer to keep the os-specific stuff here to a minimum, and
5243 # rely on figuring it out from the naming of libc.
5244 case "${osname}${osvers}" in
5245 next4*)
5246 dflt=libperl.5.$so
5247 # XXX How handle the --version stuff for MAB?
5248 ;;
5249 linux*) # ld won't link with a bare -lperl otherwise.
5250 dflt=libperl.$so
5251 ;;
5252 *) # Try to guess based on whether libc has major.minor.
5253 case "$libc" in
5254 *libc.$so.[0-9]*.[0-9]*) dflt=$majmin ;;
5255 *libc.$so.[0-9]*) dflt=$majonly ;;
5256 *) dflt=libperl.$so ;;
5257 esac
5258 ;;
5259 esac
5260 ;;
5261 *) dflt=$libperl
5262 ;;
5263 esac
5264 cat << EOM
5265
5266I need to select a good name for the shared libperl. If your system uses
5267library names with major and minor numbers, then you might want something
5268like $majmin. Alternatively, if your system uses a single version
5269number for shared libraries, then you might want to use $majonly.
5270Or, your system might be quite happy with a simple libperl.$so.
5271
5272Since the shared libperl will get installed into a version-specific
5273architecture-dependent directory, the version number of the shared perl
5274library probably isn't important, so the default should be o.k.
5275
5276EOM
5277 rp='What name do you want to give to the shared libperl?'
5278 . ./myread
5279 libperl=$ans
5280 echo "Ok, I'll use $libperl"
5281 ;;
5282*)
dfe9444c 5283 libperl="libperl${_a}"
2afac517 5284 ;;
5285esac
5286
5287# Detect old use of shrpdir via undocumented Configure -Dshrpdir
5288case "$shrpdir" in
5289'') ;;
5290*) $cat >&4 <<EOM
5291WARNING: Use of the shrpdir variable for the installation location of
5292the shared $libperl is not supported. It was never documented and
5ff3f7a4 5293will not work in this version. Let me (jhi@iki.fi)
dfe9444c 5294know of any problems this may cause.
2afac517 5295
5296EOM
5297 case "$shrpdir" in
5298 "$archlibexp/CORE")
5299 $cat >&4 <<EOM
5300But your current setting of $shrpdir is
5301the default anyway, so it's harmless.
5302EOM
5303 ;;
5304 *)
4e2a5f63
AD
5305 $cat >&4 <<EOM
5306Further, your current attempted setting of $shrpdir
5307conflicts with the value of $archlibexp/CORE
5308that installperl will use.
5309EOM
dc45a647
MB
5310 ;;
5311 esac
5312 ;;
5313esac
5314
5315# How will the perl executable find the installed shared $libperl?
5316# Add $xxx to ccdlflags.
5317# If we can't figure out a command-line option, use $shrpenv to
5318# set env LD_RUN_PATH. The main perl makefile uses this.
5319shrpdir=$archlibexp/CORE
5320xxx=''
5321tmp_shrpenv=''
5322if "$useshrplib"; then
5323 case "$osname" in
5324 aix)
5325 # We'll set it in Makefile.SH...
5326 ;;
5327 solaris|netbsd)
5328 xxx="-R $shrpdir"
5329 ;;
5330 freebsd)
5331 xxx="-Wl,-R$shrpdir"
5332 ;;
5333 linux|irix*|dec_osf)
5334 xxx="-Wl,-rpath,$shrpdir"
5335 ;;
5336 next)
5337 # next doesn't like the default...
5338 ;;
5339 *)
5340 tmp_shrpenv="env LD_RUN_PATH=$shrpdir"
5341 ;;
5342 esac
5343 case "$xxx" in
5344 '') ;;
5345 *)
5346 # Only add $xxx if it isn't already in ccdlflags.
5347 case " $ccdlflags " in
5348 *" $xxx "*) ;;
5349 *) ccdlflags="$ccdlflags $xxx"
5350 cat <<EOM >&4
5351
5352Adding $xxx to the flags
5353passed to $ld so that the perl executable will find the
5354installed shared $libperl.
5355
5356EOM
5357 ;;
5358 esac
5359 ;;
5360 esac
5361fi
5362# Respect a hint or command-line value.
5363case "$shrpenv" in
5364'') shrpenv="$tmp_shrpenv" ;;
5365esac
5366
5367: determine where manual pages go
5368set man1dir man1dir none
5369eval $prefixit
5370$cat <<EOM
5371
5372$spackage has manual pages available in source form.
5373EOM
5374case "$nroff" in
5375nroff)
5376 echo "However, you don't have nroff, so they're probably useless to you."
5377 case "$man1dir" in
5378 '') man1dir="none";;
5379 esac;;
5380esac
5381echo "If you don't want the manual sources installed, answer 'none'."
5382case "$man1dir" in
5383' ') dflt=none
5384 ;;
5385'')
5386 lookpath="$prefixexp/man/man1 $prefixexp/man/l_man/man1"
5387 lookpath="$lookpath $prefixexp/man/p_man/man1"
5388 lookpath="$lookpath $prefixexp/man/u_man/man1"
5389 lookpath="$lookpath $prefixexp/man/man.1"
5390 case "$sysman" in
5391 */?_man*) dflt=`./loc . $prefixexp/l_man/man1 $lookpath` ;;
5392 *) dflt=`./loc . $prefixexp/man/man1 $lookpath` ;;
5393 esac
5394 set dflt
5395 eval $prefixup
5396 ;;
5397*) dflt="$man1dir"
5398 ;;
5399esac
5400echo " "
5401fn=dn+~
5402rp="Where do the main $spackage manual pages (source) go?"
5403. ./getfile
5404if $test "X$man1direxp" != "X$ansexp"; then
5405 installman1dir=''
5406fi
5407man1dir="$ans"
5408man1direxp="$ansexp"
5409case "$man1dir" in
5410'') man1dir=' '
5411 installman1dir='';;
5412esac
5413if $afs; then
5414 $cat <<EOM
5415
5416Since you are running AFS, I need to distinguish the directory in which
5417manual pages reside from the directory in which they are installed (and from
5418which they are presumably copied to the former directory by occult means).
5419
5420EOM
5421 case "$installman1dir" in
5422 '') dflt=`echo $man1direxp | sed 's#^/afs/#/afs/.#'`;;
5423 *) dflt="$installman1dir";;
5424 esac
5425 fn=de~
5426 rp='Where will man pages be installed?'
5427 . ./getfile
5428 installman1dir="$ans"
5429else
5430 installman1dir="$man1direxp"
5431fi
5432
5433: What suffix to use on installed man pages
5434
5435case "$man1dir" in
5436' ')
5437 man1ext='0'
5438 ;;
5439*)
5440 rp="What suffix should be used for the main $spackage man pages?"
5441 case "$man1ext" in
5442 '') case "$man1dir" in
5443 *1) dflt=1 ;;
5444 *1p) dflt=1p ;;
5445 *1pm) dflt=1pm ;;
5446 *l) dflt=l;;
5447 *n) dflt=n;;
5448 *o) dflt=o;;
5449 *p) dflt=p;;
5450 *C) dflt=C;;
5451 *L) dflt=L;;
5452 *L1) dflt=L1;;
5453 *) dflt=1;;
5454 esac
5455 ;;
5456 *) dflt="$man1ext";;
5457 esac
5458 . ./myread
5459 man1ext="$ans"
5460 ;;
5461esac
5462
5463: see if we can have long filenames
5464echo " "
5465rmlist="$rmlist /tmp/cf$$"
5466$test -d /tmp/cf$$ || mkdir /tmp/cf$$
5467first=123456789abcdef
5468second=/tmp/cf$$/$first
5469$rm -f $first $second
5470if (echo hi >$first) 2>/dev/null; then
5471 if $test -f 123456789abcde; then
5472 echo 'You cannot have filenames longer than 14 characters. Sigh.' >&4
5473 val="$undef"
5474 else
5475 if (echo hi >$second) 2>/dev/null; then
5476 if $test -f /tmp/cf$$/123456789abcde; then
5477 $cat <<'EOM'
5478That's peculiar... You can have filenames longer than 14 characters, but only
5479on some of the filesystems. Maybe you are using NFS. Anyway, to avoid problems
5480I shall consider your system cannot support long filenames at all.
5481EOM
5482 val="$undef"
5483 else
5484 echo 'You can have filenames longer than 14 characters.' >&4
5485 val="$define"
5486 fi
5487 else
5488 $cat <<'EOM'
5489How confusing! Some of your filesystems are sane enough to allow filenames
5490longer than 14 characters but some others like /tmp can't even think about them.
5491So, for now on, I shall assume your kernel does not allow them at all.
5492EOM
5493 val="$undef"
5494 fi
5495 fi
5496else
5497 $cat <<'EOM'
5498You can't have filenames longer than 14 chars. You can't even think about them!
5499EOM
5500 val="$undef"
5501fi
5502set d_flexfnam
5503eval $setvar
5504$rm -rf /tmp/cf$$ 123456789abcde*
5505
5506: determine where library module manual pages go
5507set man3dir man3dir none
5508eval $prefixit
5509$cat <<EOM
5510
5511$spackage has manual pages for many of the library modules.
5512EOM
5513
5514case "$nroff" in
5515nroff)
5516 $cat <<'EOM'
5517However, you don't have nroff, so they're probably useless to you.
5518EOM
5519 case "$man3dir" in
5520 '') man3dir="none";;
5521 esac;;
5522esac
5523
5524case "$d_flexfnam" in
5525undef)
5526 $cat <<'EOM'
5527However, your system can't handle the long file names like File::Basename.3.
5528EOM
5529 case "$man3dir" in
5530 '') man3dir="none";;
5531 esac;;
5532esac
5533
5534echo "If you don't want the manual sources installed, answer 'none'."
5535prog=`echo $package | $sed 's/-*[0-9.]*$//'`
5536case "$man3dir" in
5537'') case "$prefix" in
5538 *$prog*) dflt=`echo $man1dir |
5539 $sed -e 's/man1/man3/g' -e 's/man\.1/man\.3/g'` ;;
5540 *) dflt="$privlib/man/man3" ;;
2afac517 5541 esac
5542 ;;
dc45a647
MB
5543' ') dflt=none;;
5544*) dflt="$man3dir" ;;
2afac517 5545esac
dc45a647 5546echo " "
2afac517 5547
dc45a647
MB
5548fn=dn+~
5549rp="Where do the $package library man pages (source) go?"
5550. ./getfile
5551if test "X$man3direxp" != "X$ansexp"; then
5552 installman3dir=''
5553fi
2afac517 5554
dc45a647
MB
5555man3dir="$ans"
5556man3direxp="$ansexp"
5557case "$man3dir" in
5558'') man3dir=' '
5559 installman3dir='';;
5560esac
5561if $afs; then
5562 $cat <<EOM
5563
5564Since you are running AFS, I need to distinguish the directory in which
5565manual pages reside from the directory in which they are installed (and from
5566which they are presumably copied to the former directory by occult means).
2afac517 5567
4e2a5f63 5568EOM
dc45a647
MB
5569 case "$installman3dir" in
5570 '') dflt=`echo $man3direxp | sed 's#^/afs/#/afs/.#'`;;
5571 *) dflt="$installman3dir";;
5572 esac
5573 fn=de~
5574 rp='Where will man pages be installed?'
5575 . ./getfile
5576 installman3dir="$ans"
5577else
5578 installman3dir="$man3direxp"
5579fi
5580
5581: What suffix to use on installed man pages
5582
5583case "$man3dir" in
5584' ')
5585 man3ext='0'
5586 ;;
5587*)
5588 rp="What suffix should be used for the $package library man pages?"
5589 case "$man3ext" in
5590 '') case "$man3dir" in
5591 *3) dflt=3 ;;
5592 *3p) dflt=3p ;;
5593 *3pm) dflt=3pm ;;
5594 *l) dflt=l;;
5595 *n) dflt=n;;
5596 *o) dflt=o;;
5597 *p) dflt=p;;
5598 *C) dflt=C;;
5599 *L) dflt=L;;
5600 *L3) dflt=L3;;
5601 *) dflt=3;;
2afac517 5602 esac
5603 ;;
dc45a647 5604 *) dflt="$man3ext";;
2afac517 5605 esac
dc45a647
MB
5606 . ./myread
5607 man3ext="$ans"
5608 ;;
2afac517 5609esac
5610
5611: see if we have to deal with yellow pages, now NIS.
5612if $test -d /usr/etc/yp || $test -d /etc/yp; then
5613 if $test -f /usr/etc/nibindd; then
5614 echo " "
5615 echo "I'm fairly confident you're on a NeXT."
5616 echo " "
5617 rp='Do you get the hosts file via NetInfo?'
5618 dflt=y
5619 case "$hostcat" in
5620 nidump*) ;;
5621 '') ;;
5622 *) dflt=n;;
5623 esac
5624 . ./myread
5625 case "$ans" in
5626 y*) hostcat='nidump hosts .';;
5627 *) case "$hostcat" in
5628 nidump*) hostcat='';;
5629 esac
5630 ;;
5631 esac
5632 fi
5633 case "$hostcat" in
5634 nidump*) ;;
5635 *)
5636 case "$hostcat" in
5637 *ypcat*) dflt=y;;
5638 '') if $contains '^\+' /etc/passwd >/dev/null 2>&1; then
5639 dflt=y
5640 else
5641 dflt=n
5642 fi;;
5643 *) dflt=n;;
5644 esac
5645 echo " "
5646 rp='Are you getting the hosts file via yellow pages?'
5647 . ./myread
5648 case "$ans" in
5649 y*) hostcat='ypcat hosts';;
5650 *) hostcat='cat /etc/hosts';;
5651 esac
5652 ;;
5653 esac
5654fi
dfe9444c
AD
5655case "$hostcat" in
5656'') hostcat='cat /etc/hosts';;
5657esac
5658case "$groupcat" in
5659'') groupcat='cat /etc/group';;
5660esac
5661case "$passcat" in
5662'') passcat='cat /etc/passwd';;
5663esac
2afac517 5664
5665: now get the host name
5666echo " "
5667echo "Figuring out host name..." >&4
5668case "$myhostname" in
5669'') cont=true
5670 echo 'Maybe "hostname" will work...'
5671 if tans=`sh -c hostname 2>&1` ; then
5672 myhostname=$tans
5673 phostname=hostname
5674 cont=''
5675 fi
5676 ;;
5677*) cont='';;
5678esac
5679if $test "$cont"; then
5680 if ./xenix; then
5681 echo 'Oh, dear. Maybe "/etc/systemid" is the key...'
5682 if tans=`cat /etc/systemid 2>&1` ; then
5683 myhostname=$tans
5684 phostname='cat /etc/systemid'
5685 echo "Whadyaknow. Xenix always was a bit strange..."
5686 cont=''
5687 fi
5688 elif $test -r /etc/systemid; then
5689 echo "(What is a non-Xenix system doing with /etc/systemid?)"
5690 fi
5691fi
5692if $test "$cont"; then
5693 echo 'No, maybe "uuname -l" will work...'
5694 if tans=`sh -c 'uuname -l' 2>&1` ; then
5695 myhostname=$tans
5696 phostname='uuname -l'
5697 else
5698 echo 'Strange. Maybe "uname -n" will work...'
5699 if tans=`sh -c 'uname -n' 2>&1` ; then
5700 myhostname=$tans
5701 phostname='uname -n'
5702 else
5703 echo 'Oh well, maybe I can mine it out of whoami.h...'
5704 if tans=`sh -c $contains' sysname $usrinc/whoami.h' 2>&1` ; then
5705 myhostname=`echo "$tans" | $sed 's/^.*"\(.*\)"/\1/'`
5706 phostname="sed -n -e '"'/sysname/s/^.*\"\\(.*\\)\"/\1/{'"' -e p -e q -e '}' <$usrinc/whoami.h"
5707 else
5708 case "$myhostname" in
5709 '') echo "Does this machine have an identity crisis or something?"
5710 phostname='';;
5711 *)
5712 echo "Well, you said $myhostname before..."
5713 phostname='echo $myhostname';;
5714 esac
5715 fi
5716 fi
5717 fi
5718fi
5719: you do not want to know about this
5720set $myhostname
5721myhostname=$1
5722
5723: verify guess
5724if $test "$myhostname" ; then
5725 dflt=y
5726 rp='Your host name appears to be "'$myhostname'".'" Right?"
5727 . ./myread
5728 case "$ans" in
5729 y*) ;;
5730 *) myhostname='';;
5731 esac
5732fi
5733
5734: bad guess or no guess
5735while $test "X$myhostname" = X ; do
5736 dflt=''
5737 rp="Please type the (one word) name of your host:"
5738 . ./myread
5739 myhostname="$ans"
5740done
5741
5742: translate upper to lower if necessary
5743case "$myhostname" in
5744*[A-Z]*)
5745 echo "(Normalizing case in your host name)"
5746 myhostname=`echo $myhostname | ./tr '[A-Z]' '[a-z]'`
5747 ;;
5748esac
5749
5750case "$myhostname" in
5751*.*)
5752 dflt=`expr "X$myhostname" : "X[^.]*\(\..*\)"`
5753 myhostname=`expr "X$myhostname" : "X\([^.]*\)\."`
5754 echo "(Trimming domain name from host name--host name is now $myhostname)"
5755 ;;
5756*) case "$mydomain" in
5757 '')
5758 {
2afac517 5759 test "X$hostcat" = "Xypcat hosts" &&
5760 ypmatch "$myhostname" hosts 2>/dev/null |\
5761 $sed -e 's/[ ]*#.*//; s/$/ /' > hosts && \
5762 $test -s hosts
5763 } || {
2afac517 5764 $hostcat | $sed -n -e "s/[ ]*#.*//; s/\$/ /
5765 /[ ]$myhostname[ . ]/p" > hosts
5766 }
5767 tmp_re="[ . ]"
5768 $test x`$awk "/[0-9].*[ ]$myhostname$tmp_re/ { sum++ }
5769 END { print sum }" hosts` = x1 || tmp_re="[ ]"
5770 dflt=.`$awk "/[0-9].*[ ]$myhostname$tmp_re/ {for(i=2; i<=NF;i++) print \\\$i}" \
5771 hosts | $sort | $uniq | \
5772 $sed -n -e "s/$myhostname\.\([-a-zA-Z0-9_.]\)/\1/p"`
5773 case `$echo X$dflt` in
5774 X*\ *) echo "(Several hosts in /etc/hosts matched hostname)"
5775 dflt=.
5776 ;;
5777 X.) echo "(You do not have fully-qualified names in /etc/hosts)"
5778 ;;
5779 esac
5780 case "$dflt" in
5781 .)
5782 tans=`./loc resolv.conf X /etc /usr/etc`
5783 if $test -f "$tans"; then
5784 echo "(Attempting domain name extraction from $tans)"
a6006777 5785 dflt=.`$sed -n -e 's/ / /g' \
28757baa 5786 -e 's/^search *\([^ ]*\).*/\1/p' $tans \
a6006777 5787 | ./tr '[A-Z]' '[a-z]' 2>/dev/null`
2afac517 5788 case "$dflt" in
a6006777 5789 .) dflt=.`$sed -n -e 's/ / /g' \
28757baa 5790 -e 's/^domain *\([^ ]*\).*/\1/p' $tans \
a6006777 5791 | ./tr '[A-Z]' '[a-z]' 2>/dev/null`
774d564b 5792 ;;
2afac517 5793 esac
5794 fi
5795 ;;
5796 esac
5797 case "$dflt" in
5798 .) echo "(No help from resolv.conf either -- attempting clever guess)"
5799 dflt=.`sh -c domainname 2>/dev/null`
5800 case "$dflt" in
5801 '') dflt='.';;
5802 .nis.*|.yp.*|.main.*) dflt=`echo $dflt | $sed -e 's/^\.[^.]*//'`;;
5803 esac
5804 ;;
5805 esac
5806 case "$dflt" in
5807 .) echo "(Lost all hope -- silly guess then)"
5808 dflt='.uucp'
5809 ;;
5810 esac
5811 $rm -f hosts
5812 ;;
5813 *) dflt="$mydomain";;
5814 esac;;
5815esac
5816echo " "
5817rp="What is your domain name?"
5818. ./myread
5819tans="$ans"
5820case "$ans" in
5821'') ;;
5822.*) ;;
5823*) tans=".$tans";;
5824esac
5825mydomain="$tans"
5826
5827: translate upper to lower if necessary
5828case "$mydomain" in
5829*[A-Z]*)
5830 echo "(Normalizing case in your domain name)"
5831 mydomain=`echo $mydomain | ./tr '[A-Z]' '[a-z]'`
5832 ;;
5833esac
5834
5835: a little sanity check here
5836case "$phostname" in
5837'') ;;
5838*)
5839 case `$phostname | ./tr '[A-Z]' '[a-z]'` in
5840 $myhostname$mydomain|$myhostname) ;;
5841 *)
5842 case "$phostname" in
5843 sed*)
5844 echo "(That doesn't agree with your whoami.h file, by the way.)"
5845 ;;
5846 *)
5847 echo "(That doesn't agree with your $phostname command, by the way.)"
5848 ;;
5849 esac
5850 ;;
5851 esac
5852 ;;
5853esac
5854
5855$cat <<EOM
5856
5857I need to get your e-mail address in Internet format if possible, i.e.
5858something like user@host.domain. Please answer accurately since I have
5859no easy means to double check it. The default value provided below
5860is most probably close to the reality but may not be valid from outside
5861your organization...
5862
5863EOM
5864cont=x
5865while test "$cont"; do
5866 case "$cf_email" in
5867 '') dflt="$cf_by@$myhostname$mydomain";;
5868 *) dflt="$cf_email";;
5869 esac
5870 rp='What is your e-mail address?'
5871 . ./myread
5872 cf_email="$ans"
5873 case "$cf_email" in
5874 *@*.*) cont='' ;;
5875 *)
5876 rp='Address does not look like an Internet one. Use it anyway?'
5877 case "$fastread" in
5878 yes) dflt=y ;;
5879 *) dflt=n ;;
5880 esac
5881 . ./myread
5882 case "$ans" in
5883 y*) cont='' ;;
5884 *) echo " " ;;
5885 esac
5886 ;;
5887 esac
5888done
5889
5890$cat <<EOM
5891
5892If you or somebody else will be maintaining perl at your site, please
5893fill in the correct e-mail address here so that they may be contacted
5894if necessary. Currently, the "perlbug" program included with perl
5895will send mail to this address in addition to perlbug@perl.com. You may
5896enter "none" for no administrator.
5897
5898EOM
5899case "$perladmin" in
5900'') dflt="$cf_email";;
5901*) dflt="$perladmin";;
5902esac
5903rp='Perl administrator e-mail address'
5904. ./myread
5905perladmin="$ans"
5906
5f05dabc 5907: figure out how to guarantee perl startup
5908case "$startperl" in
5909'')
5910 case "$sharpbang" in
5911 *!)
5912 $cat <<EOH
5913
5914I can use the #! construct to start perl on your system. This will
5915make startup of perl scripts faster, but may cause problems if you
5916want to share those scripts and perl is not in a standard place
5917($binexp/perl) on all your platforms. The alternative is to force
5918a shell by starting the script with a single ':' character.
5919
5920EOH
5921 dflt="$binexp/perl"
5922 rp='What shall I put after the #! to start up perl ("none" to not use #!)?'
5923 . ./myread
5924 case "$ans" in
68dc0745 5925 none) startperl=": # use perl";;
5926 *) startperl="#!$ans"
3e3baf6d 5927 if $test 30 -lt `echo "$ans" | wc -c`; then
68dc0745 5928 $cat >&4 <<EOM
5929
5930WARNING: Some systems limit the #! command to 32 characters.
5931If you experience difficulty running Perl scripts with #!, try
5932installing Perl in a directory with a shorter pathname.
5933
5934EOM
5935 fi ;;
5f05dabc 5936 esac
5937 ;;
5938 *) startperl=": # use perl"
5939 ;;
5940 esac
5941 ;;
5942esac
5943echo "I'll use $startperl to start perl scripts."
5944
5945: figure best path for perl in scripts
5946case "$perlpath" in
5947'')
5948 perlpath="$binexp/perl"
5949 case "$startperl" in
5950 *!*) ;;
5951 *)
5952 $cat <<EOH
5953
5954I will use the "eval 'exec'" idiom to start Perl on your system.
5955I can use the full path of your Perl binary for this purpose, but
5956doing so may cause problems if you want to share those scripts and
5957Perl is not always in a standard place ($binexp/perl).
5958
5959EOH
5960 dflt="$binexp/perl"
5961 rp="What path shall I use in \"eval 'exec'\"?"
5962 . ./myread
5963 perlpath="$ans"
5964 ;;
5965 esac
5966 ;;
5967esac
5968case "$startperl" in
5969*!*) ;;
5970*) echo "I'll use $perlpath in \"eval 'exec'\"" ;;
5971esac
5972
dc45a647
MB
5973: determine where public executable scripts go
5974set scriptdir scriptdir
5975eval $prefixit
5976case "$scriptdir" in
5977'')
5978 dflt="$bin"
5979 : guess some guesses
5980 $test -d /usr/share/scripts && dflt=/usr/share/scripts
5981 $test -d /usr/share/bin && dflt=/usr/share/bin
5982 $test -d /usr/local/script && dflt=/usr/local/script
5983 $test -d $prefixexp/script && dflt=$prefixexp/script
5984 set dflt
5985 eval $prefixup
5986 ;;
5987*) dflt="$scriptdir"
5988 ;;
5989esac
5990$cat <<EOM
5991
5992Some installations have a separate directory just for executable scripts so
5993that they can mount it across multiple architectures but keep the scripts in
5994one spot. You might, for example, have a subdirectory of /usr/share for this.
5995Or you might just lump your scripts in with all your other executables.
5996
5997EOM
5998fn=d~
5999rp='Where do you keep publicly executable scripts?'
6000. ./getfile
6001if $test "X$ansexp" != "X$scriptdirexp"; then
6002 installscript=''
6003fi
6004scriptdir="$ans"
6005scriptdirexp="$ansexp"
6006if $afs; then
6007 $cat <<EOM
6008
6009Since you are running AFS, I need to distinguish the directory in which
6010scripts reside from the directory in which they are installed (and from
6011which they are presumably copied to the former directory by occult means).
6012
6013EOM
6014 case "$installscript" in
6015 '') dflt=`echo $scriptdirexp | sed 's#^/afs/#/afs/.#'`;;
6016 *) dflt="$installscript";;
6017 esac
6018 fn=de~
6019 rp='Where will public scripts be installed?'
6020 . ./getfile
6021 installscript="$ans"
6022else
6023 installscript="$scriptdirexp"
6024fi
6025
6026: determine where site specific libraries go.
3a6175e1 6027: Usual default is /usr/local/lib/perl5/site_perl/$apiversion
bfb7748a
AD
6028prog=`echo $package | $sed 's/-*[0-9.]*$//'`
6029case "$prefix" in
3a6175e1
AD
6030*perl*) set dflt sitelib lib/site_$prog/$apiversion ;;
6031*) set dflt sitelib lib/$package/site_$prog/$apiversion ;;
dc45a647 6032esac
bfb7748a 6033eval $prefixit
dc45a647
MB
6034$cat <<EOM
6035
6036The installation process will also create a directory for
6037site-specific extensions and modules. Some users find it convenient
6038to place all local files in this directory rather than in the main
6039distribution directory.
6040
6041EOM
6042fn=d~+
6043rp='Pathname for the site-specific library files?'
6044. ./getfile
6045if $test "X$sitelibexp" != "X$ansexp"; then
6046 installsitelib=''
6047fi
6048sitelib="$ans"
6049sitelibexp="$ansexp"
6050if $afs; then
6051 $cat <<EOM
6052
6053Since you are running AFS, I need to distinguish the directory in
6054which site-specific files reside from the directory in which they are
6055installed (and from which they are presumably copied to the former
6056directory by occult means).
6057
6058EOM
6059 case "$installsitelib" in
6060 '') dflt=`echo $sitelibexp | sed 's#^/afs/#/afs/.#'`;;
6061 *) dflt="$installsitelib";;
6062 esac
6063 fn=de~
6064 rp='Where will site-specific files be installed?'
6065 . ./getfile
6066 installsitelib="$ans"
6067else
6068 installsitelib="$sitelibexp"
6069fi
6070
6071: determine where site specific architecture-dependent libraries go.
3a6175e1 6072: sitelib default is /usr/local/lib/perl5/site_perl/$apiversion
bfb7748a 6073: sitearch default is /usr/local/lib/perl5/site_perl/$apiversion/$archname
3a6175e1 6074: sitelib may have an optional trailing /share.
bfb7748a
AD
6075tdflt=`echo $sitelib | $sed 's,/share$,,'`
6076tdflt="$tdflt/$archname"
dc45a647
MB
6077set sitearch sitearch none
6078eval $prefixit
6079case "$sitearch" in
bfb7748a 6080'') dflt="$tdflt" ;;
dc45a647
MB
6081*) dflt="$sitearch" ;;
6082esac
6083$cat <<EOM
6084
6085The installation process will also create a directory for
6086architecture-dependent site-specific extensions and modules.
6087
6088EOM
6089fn=nd~+
6090rp='Pathname for the site-specific architecture-dependent library files?'
6091. ./getfile
6092if $test "X$sitearchexp" != "X$ansexp"; then
6093 installsitearch=''
6094fi
6095sitearch="$ans"
6096sitearchexp="$ansexp"
6097if $afs; then
6098 $cat <<EOM
6099
6100Since you are running AFS, I need to distinguish the directory in
6101which site-specific architecture-dependent library files reside from
6102the directory in which they are installed (and from which they are
6103presumably copied to the former directory by occult means).
6104
6105EOM
6106 case "$installsitearch" in
6107 '') dflt=`echo $sitearchexp | sed 's#^/afs/#/afs/.#'`;;
6108 *) dflt="$installsitearch";;
6109 esac
6110 fn=de~
6111 rp='Where will site-specific architecture-dependent files be installed?'
6112 . ./getfile
6113 installsitearch="$ans"
6114else
6115 installsitearch="$sitearchexp"
6116fi
6117
2afac517 6118cat <<EOM
6119
85aff577
CS
6120Previous version of $package used the standard IO mechanisms as defined
6121in <stdio.h>. Versions 5.003_02 and later of perl allow alternate IO
2afac517 6122mechanisms via a "PerlIO" abstraction, but the stdio mechanism is still
85aff577
CS
6123the default. This abstraction layer can use AT&T's sfio (if you already
6124have sfio installed) or regular stdio. Using PerlIO with sfio may cause
6125problems with some extension modules. Using PerlIO with stdio is safe,
6126but it is slower than plain stdio and therefore is not the default.
2afac517 6127
6128If this doesn't make any sense to you, just accept the default 'n'.
6129EOM
6130case "$useperlio" in
6131$define|true|[yY]*) dflt='y';;
6132*) dflt='n';;
6133esac
6134rp='Use the experimental PerlIO abstraction layer?'
6135. ./myread
6136case "$ans" in
6137y|Y)
6138 val="$define"
6139 ;;
6140*)
6141 echo "Ok, doing things the stdio way"
6142 val="$undef"
6143 ;;
6144esac
6145set useperlio
6146eval $setvar
2304df62 6147
8e07c86e 6148: Check how to convert floats to strings.
28e8609d 6149if test "X$d_Gconvert" = X; then
5ff3f7a4
GS
6150 echo " "
6151 echo "Checking for an efficient way to convert floats to strings."
6152 $cat >try.c <<'EOP'
8e07c86e
AD
6153#ifdef TRY_gconvert
6154#define Gconvert(x,n,t,b) gconvert((x),(n),(t),(b))
8ff267be 6155char *myname = "gconvert";
8e07c86e
AD
6156#endif
6157#ifdef TRY_gcvt
6158#define Gconvert(x,n,t,b) gcvt((x),(n),(b))
8ff267be 6159char *myname = "gcvt";
8e07c86e
AD
6160#endif
6161#ifdef TRY_sprintf
6162#define Gconvert(x,n,t,b) sprintf((b),"%.*g",(n),(x))
8ff267be 6163char *myname = "sprintf";
8e07c86e 6164#endif
8ff267be 6165
6166#include <stdio.h>
6167
6168int
6169checkit(expect, got)
6170char *expect;
6171char *got;
6172{
6173 if (strcmp(expect, got)) {
6174 printf("%s oddity: Expected %s, got %s\n",
6175 myname, expect, got);
6176 exit(1);
6177 }
6178}
6179
6180int
6181main()
6182{
ecfc5424 6183 char buf[64];
8ff267be 6184 buf[63] = '\0';
6185
6186 /* This must be 1st test on (which?) platform */
6187 /* Alan Burlison <AlanBurlsin@unn.unisys.com> */
6188 Gconvert(0.1, 8, 0, buf);
6189 checkit("0.1", buf);
6190
8e07c86e 6191 Gconvert(1.0, 8, 0, buf);
8ff267be 6192 checkit("1", buf);
6193
8e07c86e 6194 Gconvert(0.0, 8, 0, buf);
8ff267be 6195 checkit("0", buf);
6196
8e07c86e 6197 Gconvert(-1.0, 8, 0, buf);
8ff267be 6198 checkit("-1", buf);
6199
6200 /* Some Linux gcvt's give 1.e+5 here. */
6201 Gconvert(100000.0, 8, 0, buf);
6202 checkit("100000", buf);
6203
6204 /* Some Linux gcvt's give -1.e+5 here. */
6205 Gconvert(-100000.0, 8, 0, buf);
6206 checkit("-100000", buf);
6207
ecfc5424 6208 exit(0);
a0d0e21e
LW
6209}
6210EOP
5ff3f7a4
GS
6211 case "$d_Gconvert" in
6212 gconvert*) xxx_list='gconvert gcvt sprintf' ;;
6213 gcvt*) xxx_list='gcvt gconvert sprintf' ;;
6214 sprintf*) xxx_list='sprintf gconvert gcvt' ;;
6215 *) xxx_list='gconvert gcvt sprintf' ;;
6216 esac
8e07c86e 6217
5ff3f7a4
GS
6218 for xxx_convert in $xxx_list; do
6219 echo "Trying $xxx_convert"
6220 $rm -f try try$_o
6221 set try -DTRY_$xxx_convert
6222 if eval $compile; then
6223 echo "$xxx_convert" found. >&4
6224 if ./try; then
6225 echo "I'll use $xxx_convert to convert floats into a string." >&4
6226 break;
6227 else
6228 echo "...But $xxx_convert didn't work as I expected."
6229 fi
2304df62 6230 else
5ff3f7a4 6231 echo "$xxx_convert NOT found." >&4
2304df62 6232 fi
5ff3f7a4 6233 done
8e07c86e 6234
5ff3f7a4
GS
6235 case "$xxx_convert" in
6236 gconvert) d_Gconvert='gconvert((x),(n),(t),(b))' ;;
6237 gcvt) d_Gconvert='gcvt((x),(n),(b))' ;;
6238 *) d_Gconvert='sprintf((b),"%.*g",(n),(x))' ;;
6239 esac
28e8609d 6240fi
2304df62 6241
a0d0e21e
LW
6242: Initialize h_fcntl
6243h_fcntl=false
6244
6245: Initialize h_sysfile
6246h_sysfile=false
2304df62 6247
2304df62
AD
6248: access call always available on UNIX
6249set access d_access
6250eval $inlibc
6251
6252: locate the flags for 'access()'
6253case "$d_access" in
6254"$define")
6255 echo " "
6256 $cat >access.c <<'EOCP'
6257#include <sys/types.h>
6258#ifdef I_FCNTL
6259#include <fcntl.h>
6260#endif
6261#ifdef I_SYS_FILE
6262#include <sys/file.h>
6263#endif
6264#ifdef I_UNISTD
6265#include <unistd.h>
6266#endif
6267main() {
6268 exit(R_OK);
6269}
8e07c86e
AD
6270EOCP
6271 : check sys/file.h first, no particular reason here
6272 if $test `./findhdr sys/file.h` && \
dfe9444c 6273 $cc $cppflags -DI_SYS_FILE -o access access.c >/dev/null 2>&1 ; then
8e07c86e
AD
6274 h_sysfile=true;
6275 echo "<sys/file.h> defines the *_OK access constants." >&4
6276 elif $test `./findhdr fcntl.h` && \
dfe9444c 6277 $cc $cppflags -DI_FCNTL -o access access.c >/dev/null 2>&1 ; then
8e07c86e
AD
6278 h_fcntl=true;
6279 echo "<fcntl.h> defines the *_OK access constants." >&4
6280 elif $test `./findhdr unistd.h` && \
dfe9444c 6281 $cc $cppflags -DI_UNISTD -o access access.c >/dev/null 2>&1 ; then
8e07c86e
AD
6282 echo "<unistd.h> defines the *_OK access constants." >&4
6283 else
6284 echo "I can't find the four *_OK access constants--I'll use mine." >&4
6285 fi
6286 ;;
6287esac
6288$rm -f access*
a0d0e21e 6289
5ff3f7a4
GS
6290: see if accessx exists
6291set accessx d_accessx
6292eval $inlibc
6293
8e07c86e
AD
6294: see if alarm exists
6295set alarm d_alarm
6296eval $inlibc
2304df62 6297
ecfc5424 6298: Look for GNU-cc style attribute checking
2304df62 6299echo " "
a0d0e21e
LW
6300echo "Checking whether your compiler can handle __attribute__ ..." >&4
6301$cat >attrib.c <<'EOCP'
1aef975c 6302#include <stdio.h>
ecfc5424 6303void croak (char* pat,...) __attribute__((format(printf,1,2),noreturn));
a0d0e21e
LW
6304EOCP
6305if $cc $ccflags -c attrib.c >attrib.out 2>&1 ; then
6306 if $contains 'warning' attrib.out >/dev/null 2>&1; then
ecfc5424 6307 echo "Your C compiler doesn't fully support __attribute__."
a0d0e21e
LW
6308 val="$undef"
6309 else
ecfc5424 6310 echo "Your C compiler supports __attribute__."
a0d0e21e
LW
6311 val="$define"
6312 fi
6313else
ecfc5424 6314 echo "Your C compiler doesn't seem to understand __attribute__ at all."
a0d0e21e
LW
6315 val="$undef"
6316fi
ecfc5424 6317set d_attribut
a0d0e21e
LW
6318eval $setvar
6319$rm -f attrib*
6320
6321: see if bcmp exists
6322set bcmp d_bcmp
6323eval $inlibc
6324
6325: see if bcopy exists
6326set bcopy d_bcopy
6327eval $inlibc
6328
2afac517 6329: see if this is a unistd.h system
6330set unistd.h i_unistd
6331eval $inhdr
6332
6333: see if getpgrp exists
6334set getpgrp d_getpgrp
6335eval $inlibc
6336
2afac517 6337case "$d_getpgrp" in
6338"$define")
6339 echo " "
dfe9444c 6340 echo "Checking to see which flavor of getpgrp is in use..."
2afac517 6341 $cat >set.c <<EOP
6342#$i_unistd I_UNISTD
6343#include <sys/types.h>
6344#ifdef I_UNISTD
6345# include <unistd.h>
6346#endif
6347main()
6348{
6349 if (getuid() == 0) {
6350 printf("(I see you are running Configure as super-user...)\n");
6351 setuid(1);
6352 }
6353#ifdef TRY_BSD_PGRP
6354 if (getpgrp(1) == 0)
6355 exit(0);
6356#else
6357 if (getpgrp() > 0)
6358 exit(0);
6359#endif
6360 exit(1);
6361}
6362EOP
6363 if $cc -DTRY_BSD_PGRP $ccflags $ldflags -o set set.c $libs >/dev/null 2>&1 && ./set; then
6364 echo "You have to use getpgrp(pid) instead of getpgrp()." >&4
6365 val="$define"
6366 elif $cc $ccflags $ldflags -o set set.c $libs >/dev/null 2>&1 && ./set; then
6367 echo "You have to use getpgrp() instead of getpgrp(pid)." >&4
6368 val="$undef"
6369 else
6370 echo "I can't seem to compile and run the test program."
6371 if ./usg; then
6372 xxx="a USG one, i.e. you use getpgrp()."
6373 else
6374 # SVR4 systems can appear rather BSD-ish.
6375 case "$i_unistd" in
6376 $undef)
6377 xxx="a BSD one, i.e. you use getpgrp(pid)."
6378 val="$define"
6379 ;;
6380 $define)
6381 xxx="probably a USG one, i.e. you use getpgrp()."
6382 val="$undef"
6383 ;;
6384 esac
6385 fi
6386 echo "Assuming your getpgrp is $xxx" >&4
6387 fi
6388 ;;
6389*) val="$undef";;
6390esac
6391set d_bsdgetpgrp
6392eval $setvar
6393$rm -f set set.c
6394
a0d0e21e
LW
6395: see if setpgrp exists
6396set setpgrp d_setpgrp
6397eval $inlibc
6398
a0d0e21e
LW
6399case "$d_setpgrp" in
6400"$define")
6401 echo " "
dfe9444c 6402 echo "Checking to see which flavor of setpgrp is in use..."
a0d0e21e 6403 $cat >set.c <<EOP
2afac517 6404#$i_unistd I_UNISTD
6405#include <sys/types.h>
6406#ifdef I_UNISTD
6407# include <unistd.h>
6408#endif
a0d0e21e
LW
6409main()
6410{
6411 if (getuid() == 0) {
6412 printf("(I see you are running Configure as super-user...)\n");
6413 setuid(1);
6414 }
2afac517 6415#ifdef TRY_BSD_PGRP
a0d0e21e 6416 if (-1 == setpgrp(1, 1))
2afac517 6417 exit(0);
6418#else
6419 if (setpgrp() != -1)
6420 exit(0);
6421#endif
6422 exit(1);
a0d0e21e
LW
6423}
6424EOP
2afac517 6425 if $cc -DTRY_BSD_PGRP $ccflags $ldflags -o set set.c $libs >/dev/null 2>&1 && ./set; then
6426 echo 'You have to use setpgrp(pid,pgrp) instead of setpgrp().' >&4
6427 val="$define"
6428 elif $cc $ccflags $ldflags -o set set.c $libs >/dev/null 2>&1 && ./set; then
6429 echo 'You have to use setpgrp() instead of setpgrp(pid,pgrp).' >&4
6430 val="$undef"
a0d0e21e 6431 else
dfe9444c 6432 echo "(I can't seem to compile and run the test program.)"
ecfc5424 6433 if ./usg; then
2afac517 6434 xxx="a USG one, i.e. you use setpgrp()."
a0d0e21e 6435 else
2afac517 6436 # SVR4 systems can appear rather BSD-ish.
6437 case "$i_unistd" in
6438 $undef)
6439 xxx="a BSD one, i.e. you use setpgrp(pid,pgrp)."
6440 val="$define"
6441 ;;
6442 $define)
6443 xxx="probably a USG one, i.e. you use setpgrp()."
6444 val="$undef"
6445 ;;
6446 esac
a0d0e21e 6447 fi
2afac517 6448 echo "Assuming your setpgrp is $xxx" >&4
a0d0e21e
LW
6449 fi
6450 ;;
6451*) val="$undef";;
6452esac
2afac517 6453set d_bsdsetpgrp
a0d0e21e
LW
6454eval $setvar
6455$rm -f set set.c
a0d0e21e
LW
6456: see if bzero exists
6457set bzero d_bzero
6458eval $inlibc
6459
24fef2a7 6460: check for lengths of integral types
a0d0e21e
LW
6461echo " "
6462case "$intsize" in
6463'')
6464 echo "Checking to see how big your integers are..." >&4
24fef2a7 6465 $cat >intsize.c <<'EOCP'
a0d0e21e
LW
6466#include <stdio.h>
6467main()
6468{
24fef2a7
AD
6469 printf("intsize=%d;\n", sizeof(int));
6470 printf("longsize=%d;\n", sizeof(long));
6471 printf("shortsize=%d;\n", sizeof(short));
8e07c86e 6472 exit(0);
a0d0e21e
LW
6473}
6474EOCP
dfe9444c 6475 set intsize
dc45a647 6476 if eval $compile_ok && ./intsize > /dev/null; then
dfe9444c 6477 eval `./intsize`
8e07c86e 6478 echo "Your integers are $intsize bytes long."
24fef2a7
AD
6479 echo "Your long integers are $longsize bytes long."
6480 echo "Your short integers are $shortsize bytes long."
a0d0e21e 6481 else
24fef2a7 6482 $cat >&4 <<EOM
dfe9444c 6483!
24fef2a7
AD
6484Help! I can't compile and run the intsize test program: please enlighten me!
6485(This is probably a misconfiguration in your system or libraries, and
6486you really ought to fix it. Still, I'll try anyway.)
dfe9444c 6487!
24fef2a7
AD
6488EOM
6489 dflt=4
8e07c86e
AD
6490 rp="What is the size of an integer (in bytes)?"
6491 . ./myread
6492 intsize="$ans"
24fef2a7
AD
6493 dflt=$intsize
6494 rp="What is the size of a long integer (in bytes)?"
6495 . ./myread
6496 longsize="$ans"
6497 dflt=2
6498 rp="What is the size of a short integer (in bytes)?"
6499 . ./myread
6500 shortsize="$ans"
a0d0e21e
LW
6501 fi
6502 ;;
a0d0e21e 6503esac
dfe9444c 6504$rm -f intsize intsize.*
a0d0e21e 6505
ecfc5424 6506: see if signal is declared as pointer to function returning int or void
a0d0e21e 6507echo " "
ecfc5424
AD
6508xxx=`./findhdr signal.h`
6509$test "$xxx" && $cppstdin $cppminus $cppflags < $xxx >$$.tmp 2>/dev/null
6510if $contains 'int.*\*[ ]*signal' $$.tmp >/dev/null 2>&1 ; then
6511 echo "You have int (*signal())() instead of void." >&4
6512 val="$undef"
6513elif $contains 'void.*\*[ ]*signal' $$.tmp >/dev/null 2>&1 ; then
dfe9444c 6514 echo "You have void (*signal())()." >&4
ecfc5424
AD
6515 val="$define"
6516elif $contains 'extern[ ]*[(\*]*signal' $$.tmp >/dev/null 2>&1 ; then
6517 echo "You have int (*signal())() instead of void." >&4
6518 val="$undef"
dfe9444c
AD
6519elif $contains 'void.*\*.*sig' $$.tmp >/dev/null 2>&1 ; then
6520 echo "You have void (*signal())()." >&4
6521 val="$define"
a0d0e21e 6522else
ecfc5424
AD
6523 case "$d_voidsig" in
6524 '')
6525 echo "I can't determine whether signal handler returns void or int..." >&4
6526 dflt=void
6527 rp="What type does your signal handler return?"
6528 . ./myread
6529 case "$ans" in
6530 v*) val="$define";;
6531 *) val="$undef";;
6532 esac;;
6533 "$define")
dfe9444c
AD
6534 echo "As you already told me, signal handler returns void." >&4
6535 val="$define"
6536 ;;
6537 *) echo "As you already told me, signal handler returns int." >&4
6538 val="$undef"
6539 ;;
ecfc5424
AD
6540 esac
6541fi
6542set d_voidsig
6543eval $setvar
6544case "$d_voidsig" in
6545"$define") signal_t="void";;
6546*) signal_t="int";;
6547esac
6548$rm -f $$.tmp
6549
6550: check for ability to cast large floats to 32-bit ints.
6551echo " "
6552echo 'Checking whether your C compiler can cast large floats to int32.' >&4
e5c9fcd0 6553if $test "$intsize" -ge 4; then
ecfc5424
AD
6554 xxx=int
6555else
6556 xxx=long
6557fi
6558$cat >try.c <<EOCP
e5c9fcd0 6559#include <stdio.h>
ecfc5424
AD
6560#include <sys/types.h>
6561#include <signal.h>
a1896f58 6562$signal_t blech(s) int s; { exit(3); }
ecfc5424 6563main()
2304df62 6564{
a0d0e21e 6565 $xxx i32;
e5c9fcd0 6566 double f, g;
2304df62 6567 int result = 0;
89434db5 6568 char str[16];
2304df62
AD
6569 signal(SIGFPE, blech);
6570
89434db5
AD
6571 /* Don't let compiler optimize the test away. Store the number
6572 in a writable string for gcc to pass to sscanf under HP/UX.
6573 */
6574 sprintf(str, "2147483647");
6575 sscanf(str, "%lf", &f); /* f = (double) 0x7fffffff; */
e5c9fcd0
AD
6576 g = 10 * f;
6577 i32 = ($xxx) g;
2304df62 6578
e5c9fcd0
AD
6579 /* x86 processors will probably give 0x8000 0000, which is a
6580 sign change. We don't want that. We want to mimic SPARC
6581 behavior here, which is to preserve the sign and give
6582 back 0x7fff ffff.
6583 */
a0d0e21e 6584 if (i32 != ($xxx) f)
2304df62
AD
6585 result |= 1;
6586 exit(result);
6587}
6588EOCP
dfe9444c 6589set try
dc45a647 6590if eval $compile_ok; then
2304df62
AD
6591 ./try
6592 yyy=$?
6593else
a0d0e21e 6594 echo "(I can't seem to compile the test program--assuming it can't)"
2304df62
AD
6595 yyy=1
6596fi
6597case "$yyy" in
65980) val="$define"
6599 echo "Yup, it can."
6600 ;;
6601*) val="$undef"
6602 echo "Nope, it can't."
6603 ;;
6604esac
6605set d_casti32
6606eval $setvar
85e6fe83 6607$rm -f try try.*
a0d0e21e 6608
2304df62
AD
6609: check for ability to cast negative floats to unsigned
6610echo " "
6611echo 'Checking whether your C compiler can cast negative float to unsigned.' >&4
ecfc5424 6612$cat >try.c <<EOCP
e5c9fcd0 6613#include <stdio.h>
ecfc5424 6614#include <sys/types.h>
2304df62 6615#include <signal.h>
a1896f58
AD
6616$signal_t blech(s) int s; { exit(7); }
6617$signal_t blech_in_list(s) int s; { exit(4); }
232e078e
AD
6618unsigned long dummy_long(p) unsigned long p; { return p; }
6619unsigned int dummy_int(p) unsigned int p; { return p; }
6620unsigned short dummy_short(p) unsigned short p; { return p; }
2304df62
AD
6621main()
6622{
e5c9fcd0 6623 double f;
2304df62
AD
6624 unsigned long along;
6625 unsigned int aint;
6626 unsigned short ashort;
6627 int result = 0;
89434db5
AD
6628 char str[16];
6629
e5c9fcd0
AD
6630 /* Frustrate gcc-2.7.2's optimizer which failed this test with
6631 a direct f = -123. assignment. gcc-2.8.0 reportedly
6632 optimized the whole file away
6633 */
89434db5
AD
6634 /* Store the number in a writable string for gcc to pass to
6635 sscanf under HP/UX.
6636 */
6637 sprintf(str, "-123");
6638 sscanf(str, "%lf", &f); /* f = -123.; */
2304df62
AD
6639
6640 signal(SIGFPE, blech);
6641 along = (unsigned long)f;
6642 aint = (unsigned int)f;
6643 ashort = (unsigned short)f;
6644 if (along != (unsigned long)-123)
6645 result |= 1;
6646 if (aint != (unsigned int)-123)
6647 result |= 1;
6648 if (ashort != (unsigned short)-123)
6649 result |= 1;
89434db5
AD
6650 sprintf(str, "1073741824.");
6651 sscanf(str, "%lf", &f); /* f = (double)0x40000000; */
2304df62
AD
6652 f = f + f;
6653 along = 0;
6654 along = (unsigned long)f;
6655 if (along != 0x80000000)
6656 result |= 2;
6657 f -= 1.;
6658 along = 0;
6659 along = (unsigned long)f;
6660 if (along != 0x7fffffff)
6661 result |= 1;
6662 f += 2.;
6663 along = 0;
6664 along = (unsigned long)f;
6665 if (along != 0x80000001)
6666 result |= 2;
232e078e
AD
6667 if (result)
6668 exit(result);
6669 signal(SIGFPE, blech_in_list);
89434db5
AD
6670 sprintf(str, "123.");
6671 sscanf(str, "%lf", &f); /* f = 123.; */
232e078e
AD
6672 along = dummy_long((unsigned long)f);
6673 aint = dummy_int((unsigned int)f);
6674 ashort = dummy_short((unsigned short)f);
6675 if (along != (unsigned long)123)
6676 result |= 4;
6677 if (aint != (unsigned int)123)
6678 result |= 4;
6679 if (ashort != (unsigned short)123)
6680 result |= 4;
2304df62
AD
6681 exit(result);
6682
6683}
6684EOCP
dfe9444c 6685set try
dc45a647 6686if eval $compile_ok; then
2304df62
AD
6687 ./try
6688 castflags=$?
6689else
ecfc5424 6690 echo "(I can't seem to compile the test program--assuming it can't)"
232e078e 6691 castflags=7
2304df62
AD
6692fi
6693case "$castflags" in
66940) val="$define"
6695 echo "Yup, it can."
6696 ;;
6697*) val="$undef"
6698 echo "Nope, it can't."
6699 ;;
6700esac
6701set d_castneg
6702eval $setvar
6703$rm -f try.*
6704
2304df62
AD
6705: see if vprintf exists
6706echo " "
6707if set vprintf val -f d_vprintf; eval $csym; $val; then
6708 echo 'vprintf() found.' >&4
6709 val="$define"
6710 $cat >vprintf.c <<'EOF'
6711#include <varargs.h>
6712
6713main() { xxx("foo"); }
6714
6715xxx(va_alist)
6716va_dcl
6717{
6718 va_list args;
6719 char buf[10];
6720
6721 va_start(args);
6722 exit((unsigned long)vsprintf(buf,"%s",args) > 10L);
6723}
6724EOF
dfe9444c
AD
6725 set vprintf
6726 if eval $compile && ./vprintf; then
2304df62
AD
6727 echo "Your vsprintf() returns (int)." >&4
6728 val2="$undef"
6729 else
6730 echo "Your vsprintf() returns (char*)." >&4
6731 val2="$define"
6732 fi
6733else
6734 echo 'vprintf() NOT found.' >&4
6735 val="$undef"
6736 val2="$undef"
6737fi
6738set d_vprintf
6739eval $setvar
6740val=$val2
6741set d_charvspr
6742eval $setvar
6743
a0d0e21e
LW
6744: see if chown exists
6745set chown d_chown
6746eval $inlibc
6747
6748: see if chroot exists
6749set chroot d_chroot
6750eval $inlibc
6751
2304df62
AD
6752: see if chsize exists
6753set chsize d_chsize
6754eval $inlibc
6755
de4597cb
JH
6756hasfield='varname=$1; struct=$2; field=$3; shift; shift; shift;
6757while $test $# -ge 2; do
6758 case "$1" in
6759 $define) echo "#include <$2>";;
6760 esac ;
6761 shift 2;
6762done > try.c;
6763echo "int main () { struct $struct foo; foo.$field = 0; }" >> try.c;
6764if eval $cc $optimize $ccflags -c try.c >/dev/null 2>&1; then
6765 val="$define";
6766else
6767 val="$undef";
6768fi;
6769set $varname;
6770eval $setvar;
6771$rm -f try.c try.o'
6772
6773: see if this is a sys/uio.h system
6774set sys/uio.h i_sysuio
6775eval $inhdr
6776
6777echo "Checking to see if your system supports struct iovec..." >&4
6778set d_iovec_s iovec iov_base $i_sysuio sys/uio.h
6779eval $hasfield
6780case "$d_iovec_s" in
6781"$define") echo "Yup, it does." >&4
6782 ;;
6783*) echo "Nope, it doesn't." >&4
6784 ;;
6785esac
6786
6787socketlib=''
6788sockethdr=''
6789: see whether socket exists
6790echo " "
6791$echo $n "Hmm... $c" >&4
6792if set socket val -f d_socket; eval $csym; $val; then
6793 echo "Looks like you have Berkeley networking support." >&4
6794 d_socket="$define"
6795 if set setsockopt val -f; eval $csym; $val; then
6796 d_oldsock="$undef"
6797 else
6798 echo "...but it uses the old BSD 4.1c interface, rather than 4.2." >&4
6799 d_oldsock="$define"
6800 fi
6801else
6802 if $contains socklib libc.list >/dev/null 2>&1; then
6803 echo "Looks like you have Berkeley networking support." >&4
6804 d_socket="$define"
6805 : we will have to assume that it supports the 4.2 BSD interface
6806 d_oldsock="$undef"
6807 else
6808 echo "You don't have Berkeley networking in libc$_a..." >&4
6809 if test "X$d_socket" = "X$define"; then
6810 echo "...but you seem to believe that you have sockets." >&4
6811 else
6812 for net in net socket
6813 do
6814 if test -f /usr/lib/lib$net$_a; then
6815 ( ($nm $nm_opt /usr/lib/lib$net$_a | eval $nm_extract) || \
6816 $ar t /usr/lib/lib$net$_a) 2>/dev/null >> libc.list
6817 if $contains socket libc.list >/dev/null 2>&1; then
6818 d_socket="$define"
6819 socketlib="-l$net"
6820 case "$net" in
6821 net)
6822 echo "...but the Wollongong group seems to have hacked it in." >&4
6823 sockethdr="-I/usr/netinclude"
6824 ;;
6825 esac
6826 echo "Found Berkeley sockets interface in lib$net." >& 4
6827 if $contains setsockopt libc.list >/dev/null 2>&1; then
6828 d_oldsock="$undef"
6829 else
6830 echo "...using the old BSD 4.1c interface, rather than 4.2." >&4
6831 d_oldsock="$define"
6832 fi
6833 break
6834 fi
6835 fi
6836 done
6837 if test "X$d_socket" != "X$define"; then
6838 echo "or anywhere else I see." >&4
6839 d_socket="$undef"
6840 d_oldsock="$undef"
6841 fi
6842 fi
6843 fi
6844fi
6845
6846: see if socketpair exists
6847set socketpair d_sockpair
6848eval $inlibc
6849
6850
5b34fd99 6851echo " "
de4597cb
JH
6852echo "Checking the availability of certain socket constants..." >& 4
6853for ENUM in MSG_CTRUNC MSG_DONTROUTE MSG_OOB MSG_PEEK MSG_PROXY SCM_RIGHTS; do
6854 enum=`$echo $ENUM|./tr '[A-Z]' '[a-z]'`
6855 $cat >try.c <<EOF
ac60b016 6856#include <sys/types.h>
de4597cb
JH
6857#include <sys/socket.h>
6858int main() {
6859 int i = $ENUM;
6860}
6861EOF
6862 val="$undef"
6863 set try; if eval $compile; then
6864 val="$define"
6865 fi
6866 set d_${enum}; eval $setvar
6867 $rm -f try.c try
6868done
6869
6870set sendmsg d_sendmsg
6871eval $inlibc
6872
6873set recvmsg d_recvmsg
6874eval $inlibc
6875
6876echo " "
6877$echo $n "Checking to see if your system supports struct msghdr...$c" >&4
6878set d_msghdr_s msghdr msg_name define sys/types.h $d_socket sys/socket.h $i_sysuio sys/uio.h
6879eval $hasfield
6880case "$d_msghdr_s" in
6881"$define") echo "Yup, it does." >&4
6882 ;;
6883*) echo "Nope, it doesn't." >&4
6884 ;;
6885esac
6886
6887$echo $n "Checking to see if your system supports struct cmsghdr...$c" >&4
6888set d_cmsghdr_s cmsghdr cmsg_len define sys/types.h $d_socket sys/socket.h $i_sysuio sys/uio.h
6889eval $hasfield
6890case "$d_cmsghdr_s" in
6891"$define") echo "Yup, it does." >&4
6892 ;;
6893*) echo "Nope, it doesn't." >&4
6894 ;;
6895esac
6896
2304df62
AD
6897: check for const keyword
6898echo " "
6899echo 'Checking to see if your C compiler knows about "const"...' >&4
6900$cat >const.c <<'EOCP'
6901typedef struct spug { int drokk; } spug;
6902main()
6903{
6904 const char *foo;
6905 const spug y;
6906}
6907EOCP
6908if $cc -c $ccflags const.c >/dev/null 2>&1 ; then
6909 val="$define"
6910 echo "Yup, it does."
6911else
6912 val="$undef"
6913 echo "Nope, it doesn't."
6914fi
6915set d_const
6916eval $setvar
6917
6918: see if crypt exists
6919echo " "
6920if set crypt val -f d_crypt; eval $csym; $val; then
6921 echo 'crypt() found.' >&4
6922 val="$define"
6923 cryptlib=''
6924else
dfe9444c 6925 cryptlib=`./loc Slibcrypt$_a "" $xlibpth`
2304df62 6926 if $test -z "$cryptlib"; then
dfe9444c 6927 cryptlib=`./loc Mlibcrypt$_a "" $xlibpth`
2304df62
AD
6928 else
6929 cryptlib=-lcrypt
6930 fi
6931 if $test -z "$cryptlib"; then
dfe9444c 6932 cryptlib=`./loc Llibcrypt$_a "" $xlibpth`
2304df62
AD
6933 else
6934 cryptlib=-lcrypt
6935 fi
6936 if $test -z "$cryptlib"; then
dfe9444c 6937 cryptlib=`./loc libcrypt$_a "" $libpth`
2304df62
AD
6938 else
6939 cryptlib=-lcrypt
6940 fi
6941 if $test -z "$cryptlib"; then
6942 echo 'crypt() NOT found.' >&4
6943 val="$undef"
6944 else
6945 val="$define"
6946 fi
6947fi
6948set d_crypt
6949eval $setvar
6950
921b2963
JH
6951: get csh whereabouts
6952case "$csh" in
6953'csh') val="$undef" ;;
6954*) val="$define" ;;
6955esac
6956set d_csh
6957eval $setvar
6958: Respect a hint or command line value for full_csh.
6959case "$full_csh" in
6960'') full_csh=$csh ;;
6961esac
6962
a0d0e21e
LW
6963: see if cuserid exists
6964set cuserid d_cuserid
2304df62
AD
6965eval $inlibc
6966
a0d0e21e
LW
6967: see if this is a limits.h system
6968set limits.h i_limits
85e6fe83
LW
6969eval $inhdr
6970
a0d0e21e
LW
6971: see if this is a float.h system
6972set float.h i_float
6973eval $inhdr
6974
6975: See if number of significant digits in a double precision number is known
6976echo " "
6977$cat >dbl_dig.c <<EOM
6978#$i_limits I_LIMITS
6979#$i_float I_FLOAT
6980#ifdef I_LIMITS
6981#include <limits.h>
85e6fe83 6982#endif
a0d0e21e
LW
6983#ifdef I_FLOAT
6984#include <float.h>
6985#endif
6986#ifdef DBL_DIG
6987printf("Contains DBL_DIG");
85e6fe83 6988#endif
85e6fe83 6989EOM
a0d0e21e
LW
6990$cppstdin $cppflags $cppminus < dbl_dig.c >dbl_dig.E 2>/dev/null
6991if $contains 'DBL_DIG' dbl_dig.E >/dev/null 2>&1; then
6992 echo "DBL_DIG found." >&4
6993 val="$define"
2304df62 6994else
a0d0e21e
LW
6995 echo "DBL_DIG NOT found." >&4
6996 val="$undef"
2304df62 6997fi
a0d0e21e
LW
6998$rm -f dbl_dig.?
6999set d_dbl_dig
2304df62 7000eval $setvar
2304df62 7001
5ff3f7a4
GS
7002
7003if $test X"$use64bits" = X"$define"; then
7004 : see if dbminit64 exists
7005 set dbminit64 d_dbminit64
7006 eval $inlibc
7007
7008 : see if dbmclose64 exists
7009 set dbmclose64 d_dbmclose64
7010 eval $inlibc
7011
7012 : see if fetch64 exists
7013 set fetch64 d_fetch64
7014 eval $inlibc
7015
7016 : see if store64 exists
7017 set store64 d_store64
7018 eval $inlibc
7019
7020 : see if delete64 exists
7021 set delete64 d_delete64
7022 eval $inlibc
7023
7024 : see if firstkey64 exists
7025 set firstkey64 d_firstkey64
7026 eval $inlibc
7027
7028 : see if nextkey64 exists
7029 set nextkey64 d_nextkey64
7030 eval $inlibc
7031else
7032 val="$undef"
7033 for xxx in d_dbminit64 d_dbmclose64 d_fetch64 d_store64 d_delete64 d_firstkey64 d_nextkey64
7034 do
7035 set $xxx
7036 eval $setvar
7037 done
7038fi
7039
a0d0e21e
LW
7040: see if difftime exists
7041set difftime d_difftime
2304df62
AD
7042eval $inlibc
7043
5ff3f7a4
GS
7044: see if sys/stat.h is available
7045set sys/stat.h i_sysstat
7046eval $inhdr
7047
a0d0e21e
LW
7048: see if this is a dirent system
7049echo " "
7050if xinc=`./findhdr dirent.h`; $test "$xinc"; then
7051 val="$define"
7052 echo "<dirent.h> found." >&4
7053else
7054 val="$undef"
7055 if xinc=`./findhdr sys/dir.h`; $test "$xinc"; then
7056 echo "<sys/dir.h> found." >&4
7057 echo " "
7058 else
7059 xinc=`./findhdr sys/ndir.h`
7060 fi
7061 echo "<dirent.h> NOT found." >&4
7062fi
7063set i_dirent
7064eval $setvar
7065
7066: Look for type of directory structure.
7067echo " "
7068$cppstdin $cppflags $cppminus < "$xinc" > try.c
7069
7070case "$direntrytype" in
7071''|' ')
7072 case "$i_dirent" in
7073 $define) guess1='struct dirent' ;;
7074 *) guess1='struct direct' ;;
2afac517 7075 esac
7076 ;;
7077*) guess1="$direntrytype"
7078 ;;
8e07c86e
AD
7079esac
7080
2afac517 7081case "$guess1" in
7082'struct dirent') guess2='struct direct' ;;
7083*) guess2='struct dirent' ;;
7084esac
7085
7086if $contains "$guess1" try.c >/dev/null 2>&1; then
7087 direntrytype="$guess1"
7088 echo "Your directory entries are $direntrytype." >&4
7089elif $contains "$guess2" try.c >/dev/null 2>&1; then
7090 direntrytype="$guess2"
7091 echo "Your directory entries seem to be $direntrytype." >&4
7092else
7093 echo "I don't recognize your system's directory entries." >&4
7094 rp="What type is used for directory entries on this system?"
7095 dflt="$guess1"
7096 . ./myread
7097 direntrytype="$ans"
7098fi
7099$rm -f try.c
a0d0e21e 7100
a0d0e21e 7101
2afac517 7102: see if the directory entry stores field length
7103echo " "
7104$cppstdin $cppflags $cppminus < "$xinc" > try.c
7105if $contains 'd_namlen' try.c >/dev/null 2>&1; then
7106 echo "Good, your directory entry keeps length information in d_namlen." >&4
7107 val="$define"
7108else
7109 echo "Your directory entry does not know about the d_namlen field." >&4
7110 val="$undef"
7111fi
7112set d_dirnamlen
7113eval $setvar
7114$rm -f try.c
a0d0e21e 7115
a0d0e21e 7116
5ff3f7a4
GS
7117if $test X"$use64bits" = X"$define"; then
7118 : see if fstat64 exists
7119 set fstat64 d_fstat64
7120 eval $inlibc
a0d0e21e 7121
5ff3f7a4
GS
7122 : see if ftruncate64 exists
7123 set ftruncate64 d_ftruncate64
7124 eval $inlibc
a0d0e21e 7125
5ff3f7a4
GS
7126 : see if lockf64 exists
7127 set lockf64 d_lockf64
7128 eval $inlibc
a0d0e21e 7129
5ff3f7a4
GS
7130 : see if lseek64 exists
7131 set lseek64 d_lseek64
7132 eval $inlibc
7133
7134 : see if lstat64 exists
7135 set lstat64 d_lstat64
7136 eval $inlibc
7137
7138 : see if open64 exists
7139 set open64 d_open64
7140 eval $inlibc
7141
7142 : see if opendir64 exists
7143 set opendir64 d_opendir64
7144 eval $inlibc
7145
7146 : see if readdir64 exists
7147 set readdir64 d_readdir64
7148 eval $inlibc
7149
7150 : see if seekdir64 exists
7151 set seekdir64 d_seekdir64
7152 eval $inlibc
7153
7154 : see if stat64 exists
7155 set stat64 d_stat64
7156 eval $inlibc
7157
7158 : see if telldir64 exists
7159 set telldir64 d_telldir64
7160 eval $inlibc
7161
7162 : see if truncate64 exists
7163 set truncate64 d_truncate64
7164 eval $inlibc
7165
7166 : check for off64_t
7167 echo " "
7168 echo $n "Checking to see if your system supports off64_t...$c" >&4
7169 $cat >try.c <<EOCP
7170#include <sys/types.h>
7171off64_t foo() { off64_t x; x = 7; return x; }'
7172EOCP
7173 if $cc $optimize $ccflags -c try.c >/dev/null 2>&1; then
7174 val="$define"
7175 echo " Yup, it does." >&4
7176 else
7177 val="$undef"
7178 echo " Nope, it doesn't." >&4
7179 fi
7180 $rm -f try.*
7181 set d_off64t
7182 eval $setvar
7183
7184 : check for ino64_t
7185 echo " "
7186 echo $n "Checking to see if your system supports ino64_t...$c" >&4
7187 val="$undef"
7188 case "$i_sysstat" in
7189 "$define" )
7190 $cat >try.c <<EOCP
7191#include <sys/types.h>
7192#include <sys/stat.h>
7193ino64_t foo() { ino64_t x; x = 7; return x; }'
7194EOCP
7195 if $cc $optimize $ccflags -c try.c >/dev/null 2>&1; then
7196 val="$define"
7197 fi
7198 $rm -f try.*
7199 ;;
7200 esac
7201 if $test "X$val" = X"$define"; then
7202 echo " Yup, it does." >&4
7203 else
7204 echo " Nope, it doesn't." >&4
7205 fi
7206 set d_ino64t
7207 eval $setvar
7208
7209 : check for struct flock64
7210 echo " "
85ab1d1d 7211 echo "Checking to see if your system supports struct flock64..." >&4
5ff3f7a4 7212 if $h_fcntl; then
de4597cb 7213 set d_flock64_s flock64 l_len define fcntl.h
5ff3f7a4 7214 eval $hasfield
85ab1d1d
JH
7215 else
7216 val="$undef"
de4597cb 7217 set d_flock64_s
85ab1d1d 7218 eval $setvar
5ff3f7a4 7219 fi
de4597cb 7220 case "$d_flock64_s" in
85ab1d1d
JH
7221 "$define") echo "Yup, it does." >&4
7222 ;;
7223 *) echo "Nope, it doesn't." >&4
7224 ;;
7225 esac
5ff3f7a4
GS
7226
7227 : check for struct dirent64
7228 echo " "
85ab1d1d 7229 echo "Checking to see if your system supports struct dirent64..." >&4
de4597cb 7230 set d_dirent64_s dirent64 d_off $i_dirent dirent.h
5ff3f7a4 7231 eval $hasfield
de4597cb 7232 case "$d_dirent64_s" in
85ab1d1d
JH
7233 "$define") echo "Yup, it does." >&4
7234 ;;
7235 *) echo "Nope, it doesn't." >&4
7236 ;;
7237 esac
7238
5ff3f7a4
GS
7239else
7240 val="$undef"
de4597cb 7241 for xxx in d_fstat64 d_ftruncate64 d_lockf64 d_lseek64 d_lstat64 d_open64 d_opendir64 d_readdir64 d_seekdir64 d_stat64 d_telldir64 d_truncate64 d_off64t d_ino64t d_flock64_s d_dirent64_s
5ff3f7a4
GS
7242 do
7243 set $xxx
7244 eval $setvar
7245 done
7246fi
7247
7248: see if dlerror exists
7249xxx_runnm="$runnm"
7250runnm=false
7251set dlerror d_dlerror
7252eval $inlibc
7253runnm="$xxx_runnm"
7254
7255: see if dlfcn is available
7256set dlfcn.h i_dlfcn
7257eval $inhdr
7258
7259case "$usedl" in
7260$define|y|true)
7261 $cat << EOM
7262
7263On a few systems, the dynamically loaded modules that perl generates and uses
7264will need a different extension than shared libs. The default will probably
7265be appropriate.
7266
7267EOM
7268 case "$dlext" in
7269 '') dflt="$so" ;;
7270 *) dflt="$dlext" ;;
7271 esac
7272 rp='What is the extension of dynamically loaded modules'
7273 . ./myread
7274 dlext="$ans"
7275 ;;
7276*)
7277 dlext="none"
7278 ;;
7279esac
7280
7281: Check if dlsym need a leading underscore
a0d0e21e
LW
7282echo " "
7283val="$undef"
7284
7285case "$dlsrc" in
7286dl_dlopen.xs)
7287 echo "Checking whether your dlsym() needs a leading underscore ..." >&4
7288 $cat >dyna.c <<'EOM'
7289fred () { }
7290EOM
7291
7292$cat >fred.c<<EOM
7293
7294#include <stdio.h>
7295#$i_dlfcn I_DLFCN
7296#ifdef I_DLFCN
7297#include <dlfcn.h> /* the dynamic linker include file for Sunos/Solaris */
7298#else
7299#include <sys/types.h>
7300#include <nlist.h>
7301#include <link.h>
7302#endif
7303
7304extern int fred() ;
7305
7306main()
7307{
7308 void * handle ;
7309 void * symbol ;
7310#ifndef RTLD_LAZY
7311 int mode = 1 ;
7312#else
7313 int mode = RTLD_LAZY ;
7314#endif
7315 handle = dlopen("./dyna.$dlext", mode) ;
7316 if (handle == NULL) {
5f05dabc 7317 printf ("1\n") ;
7318 fflush (stdout) ;
7319 exit(0);
a0d0e21e
LW
7320 }
7321 symbol = dlsym(handle, "fred") ;
7322 if (symbol == NULL) {
5f05dabc 7323 /* try putting a leading underscore */
7324 symbol = dlsym(handle, "_fred") ;
7325 if (symbol == NULL) {
7326 printf ("2\n") ;
7327 fflush (stdout) ;
7328 exit(0);
7329 }
7330 printf ("3\n") ;
a0d0e21e
LW
7331 }
7332 else
5f05dabc 7333 printf ("4\n") ;
36477c24 7334 fflush (stdout) ;
7335 exit(0);
a0d0e21e
LW
7336}
7337EOM
760ac839 7338 : Call the object file tmp-dyna.o in case dlext=o.
a0d0e21e 7339 if $cc $ccflags $cccdlflags -c dyna.c > /dev/null 2>&1 &&
dfe9444c
AD
7340 mv dyna${_o} tmp-dyna${_o} > /dev/null 2>&1 &&
7341 $ld $lddlflags -o dyna.$dlext tmp-dyna${_o} > /dev/null 2>&1 &&
87563a30 7342 $cc $ccflags -o fred $ldflags $cccdlflags $ccdlflags fred.c $libs > /dev/null 2>&1; then
a0d0e21e
LW
7343 xxx=`./fred`
7344 case $xxx in
7345 1) echo "Test program failed using dlopen." >&4
7346 echo "Perhaps you should not use dynamic loading." >&4;;
7347 2) echo "Test program failed using dlsym." >&4
7348 echo "Perhaps you should not use dynamic loading." >&4;;
7349 3) echo "dlsym needs a leading underscore" >&4
7350 val="$define" ;;
7351 4) echo "dlsym doesn't need a leading underscore." >&4;;
7352 esac
7353 else
7354 echo "I can't compile and run the test program." >&4
7355 fi
7356 ;;
7357esac
7358
a78b0d02 7359$rm -f fred fred.? dyna.$dlext dyna.? tmp-dyna.?
a0d0e21e
LW
7360
7361set d_dlsymun
7362eval $setvar
7363
85ab1d1d
JH
7364hasproto='varname=$1; func=$2; shift; shift;
7365while $test $# -ge 2; do
7366 case "$1" in
7367 $define) echo "#include <$2>";;
7368 esac ;
7369 shift 2;
7370done > try.c;
7371$cppstdin $cppflags $cppminus < try.c > tryout.c 2>/dev/null;
7372if $contains "$func.*(" tryout.c >/dev/null 2>&1; then
7373 echo "$func() prototype found.";
7374 val="$define";
7375else
7376 echo "$func() prototype NOT found.";
7377 val="$undef";
7378fi;
7379set $varname;
7380eval $setvar;
7381$rm -f try.c tryout.c'
7382
7383: see if prototype for drand48 is available
7384echo " "
7385set d_drand48proto drand48 $i_stdlib stdlib.h $i_unistd unistd.h
7386eval $hasproto
7387
a0d0e21e
LW
7388: see if dup2 exists
7389set dup2 d_dup2
7390eval $inlibc
7391
5ff3f7a4
GS
7392: see if eaccess exists
7393set eaccess d_eaccess
7394eval $inlibc
7395
7396: see if endgrent exists
7397set endgrent d_endgrent
7398eval $inlibc
7399
e5c9fcd0
AD
7400: see if endhostent exists
7401set endhostent d_endhent
7402eval $inlibc
7403
7404: see if endnetent exists
7405set endnetent d_endnent
7406eval $inlibc
7407
7408: see if endprotoent exists
7409set endprotoent d_endpent
7410eval $inlibc
7411
5ff3f7a4
GS
7412: see if endpwent exists
7413set endpwent d_endpwent
7414eval $inlibc
7415
e5c9fcd0
AD
7416: see if endservent exists
7417set endservent d_endsent
7418eval $inlibc
7419
8e07c86e
AD
7420: Locate the flags for 'open()'
7421echo " "
7422$cat >open3.c <<'EOCP'
7423#include <sys/types.h>
7424#ifdef I_FCNTL
7425#include <fcntl.h>
7426#endif
7427#ifdef I_SYS_FILE
7428#include <sys/file.h>
7429#endif
7430main() {
7431 if(O_RDONLY);
7432#ifdef O_TRUNC
7433 exit(0);
7434#else
7435 exit(1);
7436#endif
7437}
7438EOCP
7439: check sys/file.h first to get FREAD on Sun
7440if $test `./findhdr sys/file.h` && \
dfe9444c 7441 set open3 -DI_SYS_FILE && eval $compile; then
8e07c86e
AD
7442 h_sysfile=true;
7443 echo "<sys/file.h> defines the O_* constants..." >&4
7444 if ./open3; then
7445 echo "and you have the 3 argument form of open()." >&4
7446 val="$define"
7447 else
7448 echo "but not the 3 argument form of open(). Oh, well." >&4
7449 val="$undef"
7450 fi
7451elif $test `./findhdr fcntl.h` && \
dfe9444c 7452 set open3 -DI_FCNTL && eval $compile; then
8e07c86e
AD
7453 h_fcntl=true;
7454 echo "<fcntl.h> defines the O_* constants..." >&4
7455 if ./open3; then
7456 echo "and you have the 3 argument form of open()." >&4
7457 val="$define"
7458 else
7459 echo "but not the 3 argument form of open(). Oh, well." >&4
7460 val="$undef"
7461 fi
7462else
7463 val="$undef"
7464 echo "I can't find the O_* constant definitions! You got problems." >&4
7465fi
7466set d_open3
7467eval $setvar
7468$rm -f open3*
7469
7470: check for non-blocking I/O stuff
7471case "$h_sysfile" in
7472true) echo "#include <sys/file.h>" > head.c;;
7473*)
7474 case "$h_fcntl" in
7475 true) echo "#include <fcntl.h>" > head.c;;
7476 *) echo "#include <sys/fcntl.h>" > head.c;;
7477 esac
7478 ;;
7479esac
7480echo " "
7481echo "Figuring out the flag used by open() for non-blocking I/O..." >&4
7482case "$o_nonblock" in
7483'')
7484 $cat head.c > try.c
7485 $cat >>try.c <<'EOCP'
7486main() {
7487#ifdef O_NONBLOCK
7488 printf("O_NONBLOCK\n");
7489 exit(0);
7490#endif
7491#ifdef O_NDELAY
7492 printf("O_NDELAY\n");
7493 exit(0);
7494#endif
7495#ifdef FNDELAY
7496 printf("FNDELAY\n");
7497 exit(0);
7498#endif
7499 exit(0);
7500}
7501EOCP
dfe9444c 7502 set try
dc45a647 7503 if eval $compile_ok; then
8e07c86e
AD
7504 o_nonblock=`./try`
7505 case "$o_nonblock" in
7506 '') echo "I can't figure it out, assuming O_NONBLOCK will do.";;
7507 *) echo "Seems like we can use $o_nonblock.";;
7508 esac
7509 else
7510 echo "(I can't compile the test program; pray O_NONBLOCK is right!)"
7511 fi
7512 ;;
7513*) echo "Using $hint value $o_nonblock.";;
7514esac
7515$rm -f try try.* .out core
7516
7517echo " "
7518echo "Let's see what value errno gets from read() on a $o_nonblock file..." >&4
7519case "$eagain" in
7520'')
7521 $cat head.c > try.c
7522 $cat >>try.c <<EOCP
7523#include <errno.h>
7524#include <sys/types.h>
7525#include <signal.h>
4633a7c4 7526#define MY_O_NONBLOCK $o_nonblock
dc45a647 7527#ifndef errno /* XXX need better Configure test */
8e07c86e 7528extern int errno;
dc45a647 7529#endif
8e07c86e 7530$signal_t blech(x) int x; { exit(3); }
4633a7c4
LW
7531EOCP
7532 $cat >> try.c <<'EOCP'
8e07c86e
AD
7533main()
7534{
7535 int pd[2];
7536 int pu[2];
7537 char buf[1];
7538 char string[100];
7539
7540 pipe(pd); /* Down: child -> parent */
7541 pipe(pu); /* Up: parent -> child */
7542 if (0 != fork()) {
7543 int ret;
7544 close(pd[1]); /* Parent reads from pd[0] */
7545 close(pu[0]); /* Parent writes (blocking) to pu[1] */
4633a7c4 7546 if (-1 == fcntl(pd[0], F_SETFL, MY_O_NONBLOCK))
8e07c86e
AD
7547 exit(1);
7548 signal(SIGALRM, blech);
7549 alarm(5);
7550 if ((ret = read(pd[0], buf, 1)) > 0) /* Nothing to read! */
7551 exit(2);
7552 sprintf(string, "%d\n", ret);
7553 write(2, string, strlen(string));
7554 alarm(0);
7555#ifdef EAGAIN
7556 if (errno == EAGAIN) {
7557 printf("EAGAIN\n");
7558 goto ok;
7559 }
7560#endif
7561#ifdef EWOULDBLOCK
7562 if (errno == EWOULDBLOCK)
7563 printf("EWOULDBLOCK\n");
7564#endif
7565 ok:
7566 write(pu[1], buf, 1); /* Unblocks child, tell it to close our pipe */
7567 sleep(2); /* Give it time to close our pipe */
7568 alarm(5);
7569 ret = read(pd[0], buf, 1); /* Should read EOF */
7570 alarm(0);
7571 sprintf(string, "%d\n", ret);
7572 write(3, string, strlen(string));
7573 exit(0);
7574 }
7575
7576 close(pd[0]); /* We write to pd[1] */
7577 close(pu[1]); /* We read from pu[0] */
7578 read(pu[0], buf, 1); /* Wait for parent to signal us we may continue */
7579 close(pd[1]); /* Pipe pd is now fully closed! */
7580 exit(0); /* Bye bye, thank you for playing! */
7581}
7582EOCP
dfe9444c 7583 set try
dc45a647 7584 if eval $compile_ok; then
774d564b 7585 echo "$startsh" >mtry
40a7a20a 7586 echo "./try >try.out 2>try.ret 3>try.err || exit 4" >>mtry
8e07c86e
AD
7587 chmod +x mtry
7588 ./mtry >/dev/null 2>&1
7589 case $? in
7590 0) eagain=`$cat try.out`;;
7591 1) echo "Could not perform non-blocking setting!";;
7592 2) echo "I did a successful read() for something that was not there!";;
7593 3) echo "Hmm... non-blocking I/O does not seem to be working!";;
7594 *) echo "Something terribly wrong happened during testing.";;
7595 esac
7596 rd_nodata=`$cat try.ret`
7597 echo "A read() system call with no data present returns $rd_nodata."
7598 case "$rd_nodata" in
7599 0|-1) ;;
7600 *)
7601 echo "(That's peculiar, fixing that to be -1.)"
7602 rd_nodata=-1
7603 ;;
7604 esac
7605 case "$eagain" in
7606 '')
7607 echo "Forcing errno EAGAIN on read() with no data available."
7608 eagain=EAGAIN
7609 ;;
7610 *)
7611 echo "Your read() sets errno to $eagain when no data is available."
7612 ;;
7613 esac
7614 status=`$cat try.err`
7615 case "$status" in
7616 0) echo "And it correctly returns 0 to signal EOF.";;
7617 -1) echo "But it also returns -1 to signal EOF, so be careful!";;
7618 *) echo "However, your read() returns '$status' on EOF??";;
7619 esac
7620 val="$define"
28757baa 7621 if test "$status" = "$rd_nodata"; then
8e07c86e
AD
7622 echo "WARNING: you can't distinguish between EOF and no data!"
7623 val="$undef"
7624 fi
7625 else
7626 echo "I can't compile the test program--assuming errno EAGAIN will do."
7627 eagain=EAGAIN
7628 fi
7629 set d_eofnblk
7630 eval $setvar
7631 ;;
7632*)
7633 echo "Using $hint value $eagain."
7634 echo "Your read() returns $rd_nodata when no data is present."
7635 case "$d_eofnblk" in
7636 "$define") echo "And you can see EOF because read() returns 0.";;
7637 "$undef") echo "But you can't see EOF status from read() returned value.";;
7638 *)
7639 echo "(Assuming you can't see EOF status from read anyway.)"
7640 d_eofnblk=$undef
7641 ;;
7642 esac
7643 ;;
7644esac
7645$rm -f try try.* .out core head.c mtry
7646
a0d0e21e
LW
7647: see if fchmod exists
7648set fchmod d_fchmod
7649eval $inlibc
7650
7651: see if fchown exists
7652set fchown d_fchown
7653eval $inlibc
7654
7655: see if this is an fcntl system
7656set fcntl d_fcntl
7657eval $inlibc
7658
921b2963
JH
7659: see if sys/select.h has to be included
7660set sys/select.h i_sysselct
7661eval $inhdr
7662
7663: see if we should include time.h, sys/time.h, or both
7664echo " "
7665if test "X$timeincl" = X; then
7666 echo "Testing to see if we should include <time.h>, <sys/time.h> or both." >&4
7667 $echo $n "I'm now running the test program...$c"
7668 $cat >try.c <<'EOCP'
7669#include <sys/types.h>
7670#ifdef I_TIME
7671#include <time.h>
7672#endif
7673#ifdef I_SYSTIME
7674#ifdef SYSTIMEKERNEL
7675#define KERNEL
7676#endif
7677#include <sys/time.h>
7678#endif
7679#ifdef I_SYSSELECT
7680#include <sys/select.h>
7681#endif
7682main()
7683{
7684 struct tm foo;
7685#ifdef S_TIMEVAL
7686 struct timeval bar;
7687#endif
7688#ifdef S_TIMEZONE
7689 struct timezone tzp;
7690#endif
7691 if (foo.tm_sec == foo.tm_sec)
7692 exit(0);
7693#ifdef S_TIMEVAL
7694 if (bar.tv_sec == bar.tv_sec)
7695 exit(0);
7696#endif
7697 exit(1);
7698}
7699EOCP
7700 flags=''
7701 for s_timezone in '-DS_TIMEZONE' ''; do
7702 sysselect=''
7703 for s_timeval in '-DS_TIMEVAL' ''; do
7704 for i_systimek in '' '-DSYSTIMEKERNEL'; do
7705 for i_time in '' '-DI_TIME'; do
7706 for i_systime in '-DI_SYSTIME' ''; do
7707 case "$flags" in
7708 '') $echo $n ".$c"
7709 set try $i_time $i_systime $i_systimek $sysselect $s_timeval $s_timezone
7710 if eval $compile; then
7711 set X $i_time $i_systime $i_systimek $sysselect $s_timeval
7712 shift
7713 flags="$*"
7714 echo " "
7715 $echo $n "Succeeded with $flags$c"
7716 fi
7717 ;;
7718 esac
7719 done
7720 done
7721 done
7722 done
7723 done
7724 timeincl=''
7725 echo " "
7726 case "$flags" in
7727 *SYSTIMEKERNEL*) i_systimek="$define"
7728 timeincl=`./findhdr sys/time.h`
7729 echo "We'll include <sys/time.h> with KERNEL defined." >&4;;
7730 *) i_systimek="$undef";;
7731 esac
7732 case "$flags" in
7733 *I_TIME*) i_time="$define"
7734 timeincl=`./findhdr time.h`" $timeincl"
7735 echo "We'll include <time.h>." >&4;;
7736 *) i_time="$undef";;
7737 esac
7738 case "$flags" in
7739 *I_SYSTIME*) i_systime="$define"
7740 timeincl=`./findhdr sys/time.h`" $timeincl"
7741 echo "We'll include <sys/time.h>." >&4;;
7742 *) i_systime="$undef";;
7743 esac
7744 $rm -f try.c try
7745fi
7746
7747: check for fd_set items
7748$cat <<EOM
7749
7750Checking to see how well your C compiler handles fd_set and friends ...
7751EOM
7752$cat >fd_set.c <<EOCP
7753#$i_systime I_SYS_TIME
7754#$i_sysselct I_SYS_SELECT
7755#$d_socket HAS_SOCKET
7756#include <sys/types.h>
7757#ifdef HAS_SOCKET
7758#include <sys/socket.h> /* Might include <sys/bsdtypes.h> */
7759#endif
7760#ifdef I_SYS_TIME
7761#include <sys/time.h>
7762#endif
7763#ifdef I_SYS_SELECT
7764#include <sys/select.h>
7765#endif
7766main() {
7767 fd_set fds;
7768
7769#ifdef TRYBITS
7770 if(fds.fds_bits);
7771#endif
7772
7773#if defined(FD_SET) && defined(FD_CLR) && defined(FD_ISSET) && defined(FD_ZERO)
7774 exit(0);
7775#else
7776 exit(1);
7777#endif
7778}
7779EOCP
7780set fd_set -DTRYBITS
7781if eval $compile; then
7782 d_fds_bits="$define"
7783 d_fd_set="$define"
7784 echo "Well, your system knows about the normal fd_set typedef..." >&4
7785 if ./fd_set; then
7786 echo "and you have the normal fd_set macros (just as I'd expect)." >&4
7787 d_fd_macros="$define"
7788 else
7789 $cat >&4 <<'EOM'
7790but not the normal fd_set macros! Gaaack! I'll have to cover for you.
7791EOM
7792 d_fd_macros="$undef"
7793 fi
7794else
7795 $cat <<'EOM'
7796Hmm, your compiler has some difficulty with fd_set. Checking further...
7797EOM
7798 set fd_set
7799 if eval $compile; then
7800 d_fds_bits="$undef"
7801 d_fd_set="$define"
7802 echo "Well, your system has some sort of fd_set available..." >&4
7803 if ./fd_set; then
7804 echo "and you have the normal fd_set macros." >&4
7805 d_fd_macros="$define"
7806 else
7807 $cat <<'EOM'
7808but not the normal fd_set macros! Gross! More work for me...
7809EOM
7810 d_fd_macros="$undef"
7811 fi
7812 else
7813 echo "Well, you got zip. That's OK, I can roll my own fd_set stuff." >&4
7814 d_fd_set="$undef"
7815 d_fds_bits="$undef"
7816 d_fd_macros="$undef"
7817 fi
7818fi
7819$rm -f fd_set*
7820
a0d0e21e
LW
7821: see if fgetpos exists
7822set fgetpos d_fgetpos
7823eval $inlibc
7824
5ff3f7a4
GS
7825
7826if $test X"$use64bits" = X"$define"; then
7827 : see if fgetpos64 exists
7828 set fgetpos64 d_fgetpos64
7829 eval $inlibc
7830
7831 : see if fopen64 exists
7832 set freopen64 d_fopen64
7833 eval $inlibc
7834
7835 : see if freopen64 exists
7836 set freopen64 d_freopen64
7837 eval $inlibc
7838
7839 : see if fseek64 exists
7840 set fseek64 d_fseek64
7841 eval $inlibc
7842
7843 : see if fseeko64 exists
7844 set fseeko64 d_fseeko64
7845 eval $inlibc
7846
7847 : see if fsetpos64 exists
7848 set fsetpos64 d_fsetpos64
7849 eval $inlibc
7850
7851 : see if ftell64 exists
7852 set ftell64 d_ftell64
7853 eval $inlibc
7854
7855 : see if ftello64 exists
7856 set ftello64 d_ftello64
7857 eval $inlibc
7858
7859 : see if tmpfile64 exists
7860 set tmpfile64 d_tmpfile64
7861 eval $inlibc
7862else
7863 val="$undef"
7864 for xxx in d_fgetpos64 d_fopen64 d_freopen64 d_fseek64 d_fseeko64 d_fsetpos64 d_ftell64 d_ftello64 d_tmpfile64
7865 do
7866 set $xxx
7867 eval $setvar
7868 done
7869fi
7870
a0d0e21e
LW
7871: see if flock exists
7872set flock d_flock
7873eval $inlibc
7874
a0d0e21e
LW
7875: see if fork exists
7876set fork d_fork
7877eval $inlibc
7878
7879: see if pathconf exists
7880set pathconf d_pathconf
7881eval $inlibc
7882
7883: see if fpathconf exists
7884set fpathconf d_fpathconf
7885eval $inlibc
7886
5ff3f7a4
GS
7887: see if fseeko exists
7888set fseeko d_fseeko
7889eval $inlibc
7890
a0d0e21e
LW
7891: see if fsetpos exists
7892set fsetpos d_fsetpos
7893eval $inlibc
7894
5ff3f7a4
GS
7895: see if ftello exists
7896set ftello d_ftello
7897eval $inlibc
7898
7899: see if getgrent exists
7900set getgrent d_getgrent
7901eval $inlibc
7902
693762b4
AD
7903: see if gethostbyaddr exists
7904set gethostbyaddr d_gethbyaddr
7905eval $inlibc
7906
7907: see if gethostbyname exists
7908set gethostbyname d_gethbyname
7909eval $inlibc
7910
a0d0e21e
LW
7911: see if gethostent exists
7912set gethostent d_gethent
7913eval $inlibc
7914
921b2963
JH
7915: see how we will look up host name
7916echo " "
7917if false; then
7918 : dummy stub to allow use of elif
7919elif set gethostname val -f d_gethname; eval $csym; $val; then
7920 echo 'gethostname() found.' >&4
7921 d_gethname="$define"
7922 call=gethostname
7923elif set uname val -f d_uname; eval $csym; $val; then
7924 if ./xenix; then
7925 $cat <<'EOM'
7926uname() was found, but you're running xenix, and older versions of xenix
7927have a broken uname(). If you don't really know whether your xenix is old
7928enough to have a broken system call, use the default answer.
7929
7930EOM
7931 dflt=y
7932 case "$d_uname" in
7933 "$define") dflt=n;;
7934 esac
7935 rp='Is your uname() broken?'
7936 . ./myread
7937 case "$ans" in
7938 n*) d_uname="$define"; call=uname;;
7939 esac
7940 else
7941 echo 'uname() found.' >&4
7942 d_uname="$define"
7943 call=uname
7944 fi
7945fi
7946case "$d_gethname" in
7947'') d_gethname="$undef";;
7948esac
7949case "$d_uname" in
7950'') d_uname="$undef";;
7951esac
7952case "$d_uname$d_gethname" in
7953*define*)
7954 dflt=n
7955 cat <<EOM
7956
7957Every now and then someone has a $call() that lies about the hostname
7958but can't be fixed for political or economic reasons. If you wish, I can
7959pretend $call() isn't there and maybe compute hostname at run-time
7960thanks to the '$phostname' command.
7961
7962EOM
7963 rp="Shall I ignore $call() from now on?"
7964 . ./myread
7965 case "$ans" in
7966 y*) d_uname="$undef" d_gethname="$undef"; $echo $n "Okay...$c";;
7967 esac;;
7968esac
7969case "$phostname" in
7970'') aphostname='';;
7971*) case "$aphostname" in
7972 /*) ;;
7973 *) set X $phostname
7974 shift
7975 file=$1
7976 shift
7977 file=`./loc $file $file $pth`
7978 aphostname=`echo $file $*`
7979 ;;
7980 esac
7981 ;;
7982esac
7983case "$d_uname$d_gethname" in
7984*define*) ;;
7985*)
7986 case "$phostname" in
7987 '')
7988 echo "There will be no way for $package to get your hostname." >&4;;
7989 *)
7990 echo "I'll use 'popen("'"'$aphostname'", "r")'"' to get your hostname." >&4
7991 ;;
7992 esac;;
7993esac
7994case "$d_phostname" in
7995'') d_phostname="$undef";;
7996esac
7997
dc45a647
MB
7998: see if this is a netdb.h system
7999set netdb.h i_netdb
8000eval $inhdr
8001
8002: see if prototypes for various gethostxxx netdb.h functions are available
8003echo " "
8004set d_gethostprotos gethostent $i_netdb netdb.h
8005eval $hasproto
8006
a0d0e21e
LW
8007: see if getlogin exists
8008set getlogin d_getlogin
8009eval $inlibc
8010
693762b4
AD
8011: see if getnetbyaddr exists
8012set getnetbyaddr d_getnbyaddr
8013eval $inlibc
8014
8015: see if getnetbyname exists
8016set getnetbyname d_getnbyname
8017eval $inlibc
8018
e5c9fcd0
AD
8019: see if getnetent exists
8020set getnetent d_getnent
8021eval $inlibc
8022
dc45a647
MB
8023: see if prototypes for various getnetxxx netdb.h functions are available
8024echo " "
8025set d_getnetprotos getnetent $i_netdb netdb.h
8026eval $hasproto
8027
693762b4
AD
8028
8029: see if getprotobyname exists
8030set getprotobyname d_getpbyname
8031eval $inlibc
8032
8033: see if getprotobynumber exists
8034set getprotobynumber d_getpbynumber
8035eval $inlibc
e5c9fcd0
AD
8036
8037: see if getprotoent exists
8038set getprotoent d_getpent
8039eval $inlibc
8040
2afac517 8041: see if getpgid exists
8042set getpgid d_getpgid
a0d0e21e
LW
8043eval $inlibc
8044
8045: see if getpgrp2 exists
8046set getpgrp2 d_getpgrp2
8047eval $inlibc
8048
8049: see if getppid exists
8050set getppid d_getppid
8051eval $inlibc
8052
8053: see if getpriority exists
8054set getpriority d_getprior
8055eval $inlibc
8056
dc45a647
MB
8057: see if prototypes for various getprotoxxx netdb.h functions are available
8058echo " "
8059set d_getprotoprotos getprotoent $i_netdb netdb.h
8060eval $hasproto
8061
5ff3f7a4
GS
8062: see if getpwent exists
8063set getpwent d_getpwent
8064eval $inlibc
8065
8066
693762b4
AD
8067: see if getservbyname exists
8068set getservbyname d_getsbyname
8069eval $inlibc
8070
8071: see if getservbyport exists
8072set getservbyport d_getsbyport
8073eval $inlibc
e5c9fcd0
AD
8074
8075: see if getservent exists
8076set getservent d_getsent
8077eval $inlibc
8078
dc45a647
MB
8079: see if prototypes for various getservxxx netdb.h functions are available
8080echo " "
8081set d_getservprotos getservent $i_netdb netdb.h
8082eval $hasproto
8083
5f05dabc 8084: see if gettimeofday or ftime exists
8085set gettimeofday d_gettimeod
8086eval $inlibc
8087case "$d_gettimeod" in
8088"$undef")
8089 set ftime d_ftime
8090 eval $inlibc
8091 ;;
8092*)
8093 val="$undef"; set d_ftime; eval $setvar
8094 ;;
8095esac
8096case "$d_gettimeod$d_ftime" in
8097"$undef$undef")
8098 echo " "
8099 echo 'No ftime() nor gettimeofday() -- timing may be less accurate.' >&4
8100 ;;
8101esac
8102
5ff3f7a4
GS
8103: see if this is an grp system
8104set grp.h i_grp
8105eval $inhdr
8106
8107case "$i_grp" in
8108$define)
8109 xxx=`./findhdr grp.h`
8110 $cppstdin $cppflags $cppminus < $xxx >$$.h
8111
8112 if $contains 'gr_passwd' $$.h >/dev/null 2>&1; then
8113 val="$define"
8114 else
8115 val="$undef"
8116 fi
8117 set d_grpasswd
8118 eval $setvar
8119
8120 $rm -f $$.h
8121 ;;
8122*)
8123 val="$undef";
8124 set d_grpasswd; eval $setvar
8125 ;;
8126esac
8127
a0d0e21e
LW
8128: see if this is a netinet/in.h or sys/in.h system
8129set netinet/in.h i_niin sys/in.h i_sysin
8130eval $inhdr
8131
5ff3f7a4 8132: see if arpa/inet.h has to be included
93341792 8133set arpa/inet.h i_arpainet
28e8609d
JH
8134eval $inhdr
8135
a0d0e21e
LW
8136: see if htonl --and friends-- exists
8137val=''
8138set htonl val
8139eval $inlibc
8140
8141: Maybe they are macros.
8142case "$val" in
8143$undef)
8144 $cat >htonl.c <<EOM
8145#include <stdio.h>
8146#include <sys/types.h>
8147#$i_niin I_NETINET_IN
8148#$i_sysin I_SYS_IN
93341792 8149#$i_arpainet I_ARPA_INET
a0d0e21e
LW
8150#ifdef I_NETINET_IN
8151#include <netinet/in.h>
8152#endif
8153#ifdef I_SYS_IN
8154#include <sys/in.h>
8155#endif
28e8609d
JH
8156#ifdef I_ARPA_INET
8157#include <arpa/inet.h>
8158#endif
a0d0e21e
LW
8159#ifdef htonl
8160printf("Defined as a macro.");
8161#endif
8162EOM
8163 $cppstdin $cppflags $cppminus < htonl.c >htonl.E 2>/dev/null
8164 if $contains 'Defined as a macro' htonl.E >/dev/null 2>&1; then
8165 val="$define"
8166 echo "But it seems to be defined as a macro." >&4
8167 fi
8168 $rm -f htonl.?
8169 ;;
8170esac
8171set d_htonl
8172eval $setvar
8173
8174: see which of string.h or strings.h is needed
8175echo " "
8176strings=`./findhdr string.h`
8177if $test "$strings" && $test -r "$strings"; then
8178 echo "Using <string.h> instead of <strings.h>." >&4
8179 val="$define"
8180else
8181 val="$undef"
8182 strings=`./findhdr strings.h`
8183 if $test "$strings" && $test -r "$strings"; then
8184 echo "Using <strings.h> instead of <string.h>." >&4
8185 else
8186 echo "No string header found -- You'll surely have problems." >&4
8187 fi
8188fi
8189set i_string
8190eval $setvar
8191case "$i_string" in
8192"$undef") strings=`./findhdr strings.h`;;
8193*) strings=`./findhdr string.h`;;
8194esac
8195
8196: index or strchr
8197echo " "
8198if set index val -f; eval $csym; $val; then
8199 if set strchr val -f d_strchr; eval $csym; $val; then
8200 if $contains strchr "$strings" >/dev/null 2>&1 ; then
8201 val="$define"
8202 vali="$undef"
8203 echo "strchr() found." >&4
8204 else
8205 val="$undef"
8206 vali="$define"
8207 echo "index() found." >&4
8208 fi
8209 else
8210 val="$undef"
8211 vali="$define"
8212 echo "index() found." >&4
8213 fi
8214else
8215 if set strchr val -f d_strchr; eval $csym; $val; then
8216 val="$define"
8217 vali="$undef"
8218 echo "strchr() found." >&4
8219 else
8220 echo "No index() or strchr() found!" >&4
8221 val="$undef"
8222 vali="$undef"
8223 fi
8224fi
8225set d_strchr; eval $setvar
8226val="$vali"
8227set d_index; eval $setvar
8228
7e1af8bc 8229: check whether inet_aton exists
8230set inet_aton d_inetaton
8231eval $inlibc
8232
5ff3f7a4 8233: see if inttypes.h is available
7f3d1cf1
BH
8234: we want a real compile instead of Inhdr because some systems
8235: have an inttypes.h which includes non-existent headers
921b2963 8236echo " "
7f3d1cf1
BH
8237$cat >try.c <<EOCP
8238#include <inttypes.h>
921b2963
JH
8239main() {
8240 static int32_t foo32 = 0x12345678;
8241}
7f3d1cf1
BH
8242EOCP
8243set try
921b2963
JH
8244if eval $compile; then
8245 echo "<inttypes.h> found." >&4
7f3d1cf1
BH
8246 val="$define"
8247else
921b2963 8248 echo "<inttypes.h> NOT found." >&4
7f3d1cf1
BH
8249 val="$undef"
8250fi
921b2963 8251$rm -f try.c try
7f3d1cf1
BH
8252set i_inttypes
8253eval $setvar
8254
5ff3f7a4 8255: check for int64_t
85ab1d1d
JH
8256case "$use64bits" in
8257"$define" )
8258 echo " "
8259 echo $n "Checking to see if your system supports int64_t...$c" >&4
8260 $cat >try.c <<EOCP
5ff3f7a4
GS
8261#include <sys/types.h>
8262#$i_inttypes I_INTTYPES
8263#ifdef I_INTTYPES
8264#include <inttypes.h>
8265#endif
94be4d36 8266int64_t foo() { int64_t x; x = 7; return x; }
5ff3f7a4 8267EOCP
85ab1d1d
JH
8268 if $cc $optimize $ccflags -c try.c >/dev/null 2>&1; then
8269 val="$define"
8270 echo " Yup, it does." >&4
8271 else
8272 val="$undef"
8273 echo " Nope, it doesn't." >&4
8274 fi
8275 $rm -f try.*
8276 ;;
8277*) val="$undef"
8278 ;;
8279esac
5ff3f7a4
GS
8280set d_int64t
8281eval $setvar
8282
8283
a0d0e21e
LW
8284: Look for isascii
8285echo " "
8286$cat >isascii.c <<'EOCP'
8287#include <stdio.h>
8288#include <ctype.h>
8289main() {
8290 int c = 'A';
8291 if (isascii(c))
8292 exit(0);
8293 else
8294 exit(1);
8295}
8296EOCP
dfe9444c
AD
8297set isascii
8298if eval $compile; then
a0d0e21e
LW
8299 echo "isascii() found." >&4
8300 val="$define"
8301else
8302 echo "isascii() NOT found." >&4
8303 val="$undef"
8304fi
8305set d_isascii
8306eval $setvar
8307$rm -f isascii*
8308
8309: see if killpg exists
8310set killpg d_killpg
8311eval $inlibc
8312
dd64f1c3
AD
8313: see if lchown exists
8314echo " "
8315$cat > try.c <<'EOCP'
8316/* System header to define __stub macros and hopefully few prototypes,
8317 which can conflict with char lchown(); below. */
8318#include <assert.h>
8319/* Override any gcc2 internal prototype to avoid an error. */
8320/* We use char because int might match the return type of a gcc2
8321 builtin and then its argument prototype would still apply. */
8322char lchown();
8323int main() {
8324 /* The GNU C library defines this for functions which it implements
8325 to always fail with ENOSYS. Some functions are actually named
8326 something starting with __ and the normal name is an alias. */
8327#if defined (__stub_lchown) || defined (__stub___lchown)
8328choke me
8329#else
8330lchown();
8331#endif
8332; return 0; }
8333EOCP
8334set try
8335if eval $compile; then
8336 $echo "lchown() found." >&4
8337 val="$define"
8338else
8339 $echo "lchown() NOT found." >&4
8340 val="$undef"
8341fi
8342set d_lchown
8343eval $setvar
8344
a0d0e21e
LW
8345: see if link exists
8346set link d_link
8347eval $inlibc
8348
a0d0e21e
LW
8349: see if localeconv exists
8350set localeconv d_locconv
8351eval $inlibc
8352
8353: see if lockf exists
8354set lockf d_lockf
8355eval $inlibc
8356
85ab1d1d
JH
8357: check for length of double
8358echo " "
8359case "$doublesize" in
8360'')
8361 $echo $n "Checking to see how big your double precision numbers are...$c" >&4
8362 $cat >try.c <<'EOCP'
8363#include <stdio.h>
8364main()
8365{
8366 printf("%d\n", sizeof(double));
8367}
8368EOCP
8369 set try
8370 if eval $compile_ok; then
8371 doublesize=`./try`
8372 $echo " $doublesize bytes." >&4
8373 else
8374 dflt='8'
8375 echo "(I can't seem to compile the test program. Guessing...)"
8376 rp="What is the size of a double precision number (in bytes)?"
8377 . ./myread
8378 doublesize="$ans"
8379 fi
8380 ;;
8381esac
8382$rm -f try.c try
8383
e5c9fcd0
AD
8384: check for long doubles
8385echo " "
8386echo $n "Checking to see if your system supports long doubles...$c" >&4
8387echo 'long double foo() { long double x; x = 7.0; return x; }' > try.c
dc45a647 8388if $cc $optimize $ccflags -c try.c >/dev/null 2>&1; then
e5c9fcd0
AD
8389 val="$define"
8390 echo " Yup, it does." >&4
8391else
8392 val="$undef"
8393 echo " Nope, it doesn't." >&4
8394fi
8395$rm try.*
8396set d_longdbl
8397eval $setvar
8398
8399: check for length of long double
e5c9fcd0
AD
8400case "${d_longdbl}${longdblsize}" in
8401$define)
dc45a647 8402 echo " "
e5c9fcd0
AD
8403 $echo $n "Checking to see how big your long doubles are...$c" >&4
8404 $cat >try.c <<'EOCP'
8405#include <stdio.h>
8406main()
8407{
8408 printf("%d\n", sizeof(long double));
8409}
8410EOCP
8411 set try
c4f23d77 8412 if eval $compile; then
e5c9fcd0 8413 longdblsize=`./try`
dc45a647 8414 $echo " $longdblsize bytes." >&4
e5c9fcd0
AD
8415 else
8416 dflt='8'
dc45a647 8417 echo " "
c4f23d77 8418 echo "(I can't seem to compile the test program. Guessing...)" >&4
e5c9fcd0
AD
8419 rp="What is the size of a long double (in bytes)?"
8420 . ./myread
8421 longdblsize="$ans"
8422 fi
85ab1d1d
JH
8423 if $test "X$doublesize" = "X$longdblsize"; then
8424 echo "(That isn't any different from an ordinary double.)"
8425 fi
dc45a647
MB
8426 ;;
8427esac
8428$rm -f try.c try
8429
8430: check for long long
8431echo " "
8432echo $n "Checking to see if your system supports long long...$c" >&4
8433echo 'long long foo() { long long x; x = 7; return x; }' > try.c
8434if $cc $optimize $ccflags -c try.c >/dev/null 2>&1; then
8435 val="$define"
8436 echo " Yup, it does." >&4
8437else
8438 val="$undef"
8439 echo " Nope, it doesn't." >&4
8440fi
8441$rm try.*
8442set d_longlong
8443eval $setvar
8444
8445: check for length of long long
8446case "${d_longlong}${longlongsize}" in
8447$define)
8448 echo " "
8449 $echo $n "Checking to see how big your long longs are...$c" >&4
8450 $cat >try.c <<'EOCP'
8451#include <stdio.h>
8452main()
8453{
8454 printf("%d\n", sizeof(long long));
8455}
8456EOCP
8457 set try
8458 if eval $compile_ok; then
8459 longlongsize=`./try`
8460 $echo " $longlongsize bytes." >&4
8461 else
8462 dflt='8'
8463 echo " "
8464 echo "(I can't seem to compile the test program. Guessing...)"
8465 rp="What is the size of a long long (in bytes)?"
8466 . ./myread
8467 longlongsize="$ans"
8468 fi
85ab1d1d
JH
8469 if $test "X$longsize" = "X$longlongsize"; then
8470 echo "(That isn't any different from an ordinary long.)"
8471 fi
e5c9fcd0
AD
8472 ;;
8473esac
8474$rm -f try.c try
8475
a0d0e21e
LW
8476: see if lstat exists
8477set lstat d_lstat
8478eval $inlibc
8479
8480: see if mblen exists
8481set mblen d_mblen
8482eval $inlibc
8483
8484: see if mbstowcs exists
8485set mbstowcs d_mbstowcs
8486eval $inlibc
8487
8488: see if mbtowc exists
8489set mbtowc d_mbtowc
8490eval $inlibc
8491
8492: see if memcmp exists
8493set memcmp d_memcmp
8494eval $inlibc
8495
8496: see if memcpy exists
8497set memcpy d_memcpy
8498eval $inlibc
8499
8500: see if memmove exists
8501set memmove d_memmove
2304df62
AD
8502eval $inlibc
8503
8504: see if memset exists
8505set memset d_memset
8506eval $inlibc
8507
8508: see if mkdir exists
8509set mkdir d_mkdir
8510eval $inlibc
8511
a0d0e21e
LW
8512: see if mkfifo exists
8513set mkfifo d_mkfifo
8514eval $inlibc
8515
8516: see if mktime exists
8517set mktime d_mktime
8518eval $inlibc
8519
2304df62
AD
8520: see if msgctl exists
8521set msgctl d_msgctl
8522eval $inlibc
8523
8524: see if msgget exists
8525set msgget d_msgget
8526eval $inlibc
8527
8528: see if msgsnd exists
8529set msgsnd d_msgsnd
8530eval $inlibc
8531
8532: see if msgrcv exists
8533set msgrcv d_msgrcv
8534eval $inlibc
8535
8536: see how much of the 'msg*(2)' library is present.
8537h_msg=true
8538echo " "
8539case "$d_msgctl$d_msgget$d_msgsnd$d_msgrcv" in
8540*"$undef"*) h_msg=false;;
8541esac
6087ac44
JH
8542case "$osname" in
8543freebsd)
8544 case "`ipcs 2>&1`" in
8545 "SVID messages"*"not configured"*)
5ff3f7a4 8546 echo "Your $osname does not have the msg*(2) configured." >&4
6087ac44
JH
8547 h_msg=false
8548 val="$undef"
8549 set msgctl d_msgctl
8550 eval $setvar
8551 set msgget d_msgget
8552 eval $setvar
8553 set msgsnd d_msgsnd
8554 eval $setvar
8555 set msgrcv d_msgrcv
8556 eval $setvar
8557 ;;
8558 esac
8559 ;;
8560esac
2304df62
AD
8561: we could also check for sys/ipc.h ...
8562if $h_msg && $test `./findhdr sys/msg.h`; then
8563 echo "You have the full msg*(2) library." >&4
8564 val="$define"
8565else
8566 echo "You don't have the full msg*(2) library." >&4
8567 val="$undef"
8568fi
8569set d_msg
8570eval $setvar
8571
dfe9444c
AD
8572: see if nice exists
8573set nice d_nice
8574eval $inlibc
8575
13666627
JH
8576: how to create joinable pthreads
8577if test "X$usethreads" = "X$define"; then
8578 echo " "
8579 echo "Checking what constant to use for creating joinable pthreads..." >&4
8580 $cat >try.c <<'EOCP'
8581#include <pthread.h>
8582int main() {
8583 int detachstate = JOINABLE;
8584}
8585EOCP
8586 set try -DJOINABLE=PTHREAD_CREATE_JOINABLE
8587 if eval $compile; then
8588 echo "You seem to use PTHREAD_CREATE_JOINABLE." >&2
ef4af2be
JH
8589 val="$undef" # Yes, undef.
8590 set d_old_pthread_create_joinable
13666627 8591 eval $setvar
ef4af2be
JH
8592 val=""
8593 set old_pthread_create_joinable
13666627
JH
8594 eval $setvar
8595 else
8596 set try -DJOINABLE=PTHREAD_CREATE_UNDETACHED
8597 if eval $compile; then
8598 echo "You seem to use PTHREAD_CREATE_UNDETACHED." >&2
8599 val="$define"
ef4af2be 8600 set d_old_pthread_create_joinable
13666627
JH
8601 eval $setvar
8602 val=PTHREAD_CREATE_UNDETACHED
ef4af2be 8603 set old_pthread_create_joinable
13666627
JH
8604 eval $setvar
8605 else
8606 set try -DJOINABLE=__UNDETACHED
8607 if eval $compile; then
8608 echo "You seem to use __UNDETACHED." >&2
8609 val="$define"
ef4af2be 8610 set d_old_pthread_create_joinable
13666627
JH
8611 eval $setvar
8612 val=__UNDETACHED
ef4af2be 8613 set old_pthread_create_joinable
13666627
JH
8614 eval $setvar
8615 else
8616 echo "Egads, nothing obvious found. Guessing that you use 0." >&2
8617 val="$define"
ef4af2be 8618 set d_old_pthread_create_joinable
13666627
JH
8619 eval $setvar
8620 val=0
ef4af2be 8621 set old_pthread_create_joinable
13666627
JH
8622 eval $setvar
8623 fi
8624 fi
8625 fi
8626 $rm -f try try.*
8627else
ef4af2be
JH
8628 d_old_pthread_create_joinable="$undef"
8629 old_pthread_create_joinable=""
13666627
JH
8630fi
8631
ef4af2be
JH
8632: see if pause exists
8633set pause d_pause
8634eval $inlibc
8635
8636: see if pipe exists
8637set pipe d_pipe
8638eval $inlibc
8639
8640: see if poll exists
8641set poll d_poll
8642eval $inlibc
8643
31dfa2f6
JH
8644
8645: see whether the various POSIXish _yields exist
8646$cat >try.c <<EOP
8647#include <pthread.h>
8648#include <stdio.h>
8649main() {
8650#ifdef SCHED_YIELD
8651 sched_yield();
8652#else
8653#ifdef PTHREAD_YIELD
8654 pthread_yield();
8655#else
8656#ifdef PTHREAD_YIELD_NULL
8657 pthread_yield(NULL);
8658#endif
8659#endif
8660#endif
8661}
8662EOP
8663: see if sched_yield exists
8664set try -DSCHED_YIELD
8665if eval $compile; then
8666 val="$define"
8667 sched_yield='sched_yield()'
8668else
8669 val="$undef"
8670fi
8671case "$usethreads" in
8672$define)
8673 case "$val" in
8674 $define) echo 'sched_yield() found.' >&4 ;;
8675 *) echo 'sched_yield() NOT found.' >&4 ;;
8676 esac
8677esac
8678set d_sched_yield
8679eval $setvar
8680
8681: see if pthread_yield exists
8682set try -DPTHREAD_YIELD
8683if eval $compile; then
8684 val="$define"
8685 case "$sched_yield" in
8686 '') sched_yield='pthread_yield()' ;;
8687 esac
8688else
8689 set try -DPTHREAD_YIELD_NULL
8690 if eval $compile; then
8691 val="$define"
8692 case "$sched_yield" in
8693 '') sched_yield='pthread_yield(NULL)' ;;
8694 esac
8695 else
8696 val="$undef"
8697 fi
8698fi
8699case "$usethreads" in
8700$define)
8701 case "$val" in
8702 $define) echo 'pthread_yield() found.' >&4 ;;
8703 *) echo 'pthread_yield() NOT found.' >&4 ;;
8704 esac
8705 ;;
8706esac
8707set d_pthread_yield
8708eval $setvar
8709
8710case "$sched_yield" in
8711'') sched_yield=undef ;;
8712esac
8713
8714$rm -f try try.*
8715
4aa0a1f7
AD
8716: see if this is a pwd.h system
8717set pwd.h i_pwd
8718eval $inhdr
8719
8720case "$i_pwd" in
8721$define)
8722 xxx=`./findhdr pwd.h`
85e6fe83 8723 $cppstdin $cppflags $cppminus < $xxx >$$.h
4aa0a1f7 8724
2304df62 8725 if $contains 'pw_quota' $$.h >/dev/null 2>&1; then
4aa0a1f7 8726 val="$define"
2304df62 8727 else
4aa0a1f7 8728 val="$undef"
2304df62 8729 fi
4aa0a1f7
AD
8730 set d_pwquota
8731 eval $setvar
8732
2304df62 8733 if $contains 'pw_age' $$.h >/dev/null 2>&1; then
4aa0a1f7 8734 val="$define"
2304df62 8735 else
4aa0a1f7 8736 val="$undef"
2304df62 8737 fi
4aa0a1f7
AD
8738 set d_pwage
8739 eval $setvar
8740
2304df62 8741 if $contains 'pw_change' $$.h >/dev/null 2>&1; then
4aa0a1f7 8742 val="$define"
2304df62 8743 else
4aa0a1f7 8744 val="$undef"
2304df62 8745 fi
4aa0a1f7
AD
8746 set d_pwchange
8747 eval $setvar
8748
2304df62 8749 if $contains 'pw_class' $$.h >/dev/null 2>&1; then
4aa0a1f7 8750 val="$define"
2304df62 8751 else
4aa0a1f7 8752 val="$undef"
2304df62 8753 fi
4aa0a1f7
AD
8754 set d_pwclass
8755 eval $setvar
8756
2304df62 8757 if $contains 'pw_expire' $$.h >/dev/null 2>&1; then
4aa0a1f7 8758 val="$define"
2304df62 8759 else
4aa0a1f7 8760 val="$undef"
2304df62 8761 fi
4aa0a1f7
AD
8762 set d_pwexpire
8763 eval $setvar
8764
2304df62 8765 if $contains 'pw_comment' $$.h >/dev/null 2>&1; then
4aa0a1f7 8766 val="$define"
2304df62 8767 else
4aa0a1f7 8768 val="$undef"
2304df62 8769 fi
4aa0a1f7
AD
8770 set d_pwcomment
8771 eval $setvar
8772
c4f23d77
AD
8773 if $contains 'pw_gecos' $$.h >/dev/null 2>&1; then
8774 val="$define"
8775 else
8776 val="$undef"
8777 fi
8778 set d_pwgecos
8779 eval $setvar
8780
28e8609d
JH
8781 if $contains 'pw_passwd' $$.h >/dev/null 2>&1; then
8782 val="$define"
8783 else
8784 val="$undef"
8785 fi
8786 set d_pwpasswd
8787 eval $setvar
8788
2304df62 8789 $rm -f $$.h
4aa0a1f7 8790 ;;
5ff3f7a4 8791*)
4aa0a1f7
AD
8792 val="$undef";
8793 set d_pwquota; eval $setvar
8794 set d_pwage; eval $setvar
8795 set d_pwchange; eval $setvar
8796 set d_pwclass; eval $setvar
8797 set d_pwexpire; eval $setvar
8798 set d_pwcomment; eval $setvar
c4f23d77 8799 set d_pwgecos; eval $setvar
28e8609d 8800 set d_pwpasswd; eval $setvar
4aa0a1f7
AD
8801 ;;
8802esac
2304df62 8803
85e6fe83 8804: see if readdir and friends exist
2304df62
AD
8805set readdir d_readdir
8806eval $inlibc
85e6fe83
LW
8807set seekdir d_seekdir
8808eval $inlibc
8809set telldir d_telldir
8810eval $inlibc
8811set rewinddir d_rewinddir
8812eval $inlibc
2304df62 8813
a0d0e21e
LW
8814: see if readlink exists
8815set readlink d_readlink
8816eval $inlibc
8817
de4597cb
JH
8818: see if readv exists
8819set readv d_readv
8820eval $inlibc
8821
2304df62
AD
8822: see if rename exists
8823set rename d_rename
8824eval $inlibc
8825
8826: see if rmdir exists
8827set rmdir d_rmdir
8828eval $inlibc
8829
8ff267be 8830: see if memory.h is available.
8831val=''
8832set memory.h val
8833eval $inhdr
8834
8835: See if it conflicts with string.h
8836case "$val" in
8837$define)
8838 case "$strings" in
8839 '') ;;
8840 *)
8841 $cppstdin $cppflags $cppminus < $strings > mem.h
8842 if $contains 'memcpy' mem.h >/dev/null 2>&1; then
8843 echo " "
8844 echo "We won't be including <memory.h>."
8845 val="$undef"
8846 fi
8847 $rm -f mem.h
8848 ;;
8849 esac
8850esac
8851set i_memory
8852eval $setvar
8853
2304df62
AD
8854: can bcopy handle overlapping blocks?
8855val="$undef"
8856case "$d_bcopy" in
8857"$define")
8858 echo " "
8859 echo "Checking to see if your bcopy() can do overlapping copies..." >&4
dfe9444c 8860 $cat >try.c <<EOCP
8ff267be 8861#$i_memory I_MEMORY
8862#$i_stdlib I_STDLIB
8863#$i_string I_STRING
8864#$i_unistd I_UNISTD
8865EOCP
dfe9444c 8866 $cat >>try.c <<'EOCP'
8ff267be 8867#include <stdio.h>
8ff267be 8868#ifdef I_MEMORY
8869# include <memory.h>
8870#endif
8871#ifdef I_STDLIB
8872# include <stdlib.h>
8873#endif
8874#ifdef I_STRING
8875# include <string.h>
8876#else
8877# include <strings.h>
8878#endif
8879#ifdef I_UNISTD
8880# include <unistd.h> /* Needed for NetBSD */
8881#endif
2304df62
AD
8882main()
8883{
85e6fe83
LW
8884char buf[128], abc[128];
8885char *b;
8886int len;
8887int off;
8888int align;
a0d0e21e 8889
85e6fe83 8890bcopy("abcdefghijklmnopqrstuvwxyz0123456789", abc, 36);
2304df62
AD
8891
8892for (align = 7; align >= 0; align--) {
8893 for (len = 36; len; len--) {
8894 b = buf+align;
85e6fe83 8895 bcopy(abc, b, len);
2304df62
AD
8896 for (off = 1; off <= len; off++) {
8897 bcopy(b, b+off, len);
8898 bcopy(b+off, b, len);
85e6fe83 8899 if (bcmp(b, abc, len))
2304df62
AD
8900 exit(1);
8901 }
8902 }
8903}
8904exit(0);
8905}
8906EOCP
dfe9444c 8907 set try
dc45a647 8908 if eval $compile_ok; then
dfe9444c 8909 if ./try 2>/dev/null; then
2304df62
AD
8910 echo "Yes, it can."
8911 val="$define"
8912 else
8913 echo "It can't, sorry."
8ff267be 8914 case "$d_memmove" in
8915 "$define") echo "But that's Ok since you have memmove()." ;;
8916 esac
2304df62
AD
8917 fi
8918 else
8919 echo "(I can't compile the test program, so we'll assume not...)"
8ff267be 8920 case "$d_memmove" in
8921 "$define") echo "But that's Ok since you have memmove()." ;;
8922 esac
2304df62
AD
8923 fi
8924 ;;
8925esac
dfe9444c 8926$rm -f try.* try core
2304df62
AD
8927set d_safebcpy
8928eval $setvar
8929
8930: can memcpy handle overlapping blocks?
8931val="$undef"
8932case "$d_memcpy" in
8933"$define")
8934 echo " "
8935 echo "Checking to see if your memcpy() can do overlapping copies..." >&4
dfe9444c 8936 $cat >try.c <<EOCP
8ff267be 8937#$i_memory I_MEMORY
8938#$i_stdlib I_STDLIB
8939#$i_string I_STRING
8940#$i_unistd I_UNISTD
8941EOCP
dfe9444c 8942 $cat >>try.c <<'EOCP'
8ff267be 8943#include <stdio.h>
8ff267be 8944#ifdef I_MEMORY
8945# include <memory.h>
8946#endif
8947#ifdef I_STDLIB
8948# include <stdlib.h>
8949#endif
8950#ifdef I_STRING
8951# include <string.h>
8952#else
8953# include <strings.h>
8954#endif
8955#ifdef I_UNISTD
8956# include <unistd.h> /* Needed for NetBSD */
8957#endif
2304df62
AD
8958main()
8959{
85e6fe83
LW
8960char buf[128], abc[128];
8961char *b;
8962int len;
8963int off;
8964int align;
8965
8ff267be 8966/* Copy "abcde..." string to char abc[] so that gcc doesn't
8967 try to store the string in read-only memory. */
85e6fe83 8968memcpy(abc, "abcdefghijklmnopqrstuvwxyz0123456789", 36);
2304df62
AD
8969
8970for (align = 7; align >= 0; align--) {
8971 for (len = 36; len; len--) {
8972 b = buf+align;
232e078e 8973 memcpy(b, abc, len);
2304df62 8974 for (off = 1; off <= len; off++) {
2304df62 8975 memcpy(b+off, b, len);
232e078e 8976 memcpy(b, b+off, len);
85e6fe83 8977 if (memcmp(b, abc, len))
2304df62
AD
8978 exit(1);
8979 }
8980 }
8981}
8982exit(0);
8983}
8984EOCP
dfe9444c 8985 set try
dc45a647 8986 if eval $compile_ok; then
dfe9444c 8987 if ./try 2>/dev/null; then
2304df62
AD
8988 echo "Yes, it can."
8989 val="$define"
8990 else
8991 echo "It can't, sorry."
8ff267be 8992 case "$d_memmove" in
8993 "$define") echo "But that's Ok since you have memmove()." ;;
8994 esac
2304df62
AD
8995 fi
8996 else
8997 echo "(I can't compile the test program, so we'll assume not...)"
8ff267be 8998 case "$d_memmove" in
8999 "$define") echo "But that's Ok since you have memmove()." ;;
9000 esac
2304df62
AD
9001 fi
9002 ;;
9003esac
dfe9444c 9004$rm -f try.* try core
2304df62
AD
9005set d_safemcpy
9006eval $setvar
9007
36477c24 9008: can memcmp be trusted to compare relative magnitude?
9009val="$undef"
9010case "$d_memcmp" in
9011"$define")
9012 echo " "
dfe9444c
AD
9013 echo "Checking if your memcmp() can compare relative magnitude..." >&4
9014 $cat >try.c <<EOCP
36477c24 9015#$i_memory I_MEMORY
9016#$i_stdlib I_STDLIB
9017#$i_string I_STRING
9018#$i_unistd I_UNISTD
9019EOCP
dfe9444c 9020 $cat >>try.c <<'EOCP'
36477c24 9021#include <stdio.h>
36477c24 9022#ifdef I_MEMORY
9023# include <memory.h>
9024#endif
9025#ifdef I_STDLIB
9026# include <stdlib.h>
9027#endif
9028#ifdef I_STRING
9029# include <string.h>
9030#else
9031# include <strings.h>
9032#endif
9033#ifdef I_UNISTD
9034# include <unistd.h> /* Needed for NetBSD */
9035#endif
9036main()
9037{
9038char a = -1;
9039char b = 0;
9040if ((a < b) && memcmp(&a, &b, 1) < 0)
9041 exit(1);
9042exit(0);
9043}
9044EOCP
dfe9444c 9045 set try
dc45a647 9046 if eval $compile_ok; then
dfe9444c 9047 if ./try 2>/dev/null; then
36477c24 9048 echo "Yes, it can."
9049 val="$define"
9050 else
9051 echo "No, it can't (it uses signed chars)."
9052 fi
9053 else
9054 echo "(I can't compile the test program, so we'll assume not...)"
9055 fi
9056 ;;
9057esac
dfe9444c 9058$rm -f try.* try core
36477c24 9059set d_sanemcmp
9060eval $setvar
9061
2304df62
AD
9062: see if select exists
9063set select d_select
9064eval $inlibc
9065
9066: see if semctl exists
9067set semctl d_semctl
9068eval $inlibc
9069
9070: see if semget exists
9071set semget d_semget
9072eval $inlibc
9073
9074: see if semop exists
9075set semop d_semop
9076eval $inlibc
9077
9078: see how much of the 'sem*(2)' library is present.
9079h_sem=true
9080echo " "
9081case "$d_semctl$d_semget$d_semop" in
9082*"$undef"*) h_sem=false;;
9083esac
6087ac44
JH
9084case "$osname" in
9085freebsd)
9086 case "`ipcs 2>&1`" in
9087 "SVID messages"*"not configured"*)
5ff3f7a4 9088 echo "Your $osname does not have the sem*(2) configured." >&4
6087ac44
JH
9089 h_sem=false
9090 val="$undef"
9091 set semctl d_semctl
9092 eval $setvar
9093 set semget d_semget
9094 eval $setvar
9095 set semop d_semop
9096 eval $setvar
9097 ;;
9098 esac
9099 ;;
9100esac
2304df62
AD
9101: we could also check for sys/ipc.h ...
9102if $h_sem && $test `./findhdr sys/sem.h`; then
9103 echo "You have the full sem*(2) library." >&4
9104 val="$define"
9105else
9106 echo "You don't have the full sem*(2) library." >&4
9107 val="$undef"
9108fi
9109set d_sem
9110eval $setvar
9111
bd89102f
AD
9112: see whether sys/sem.h defines union semun
9113echo " "
9114$cat > try.c <<'END'
9115#include <sys/types.h>
9116#include <sys/ipc.h>
9117#include <sys/sem.h>
9118int main () { union semun semun; semun.buf = 0; }
9119END
9120set try
9121if eval $compile; then
9122 echo "You have union semun in <sys/sem.h>." >&4
9123 val="$define"
9124else
9125 echo "You do not have union semun in <sys/sem.h>." >&4
9126 val="$undef"
9127fi
85ab1d1d 9128$rm -f try try.c try.h
bd89102f
AD
9129set d_union_semun
9130eval $setvar
9131
9132: see how to do semctl IPC_STAT
9133case "$d_sem" in
9134$define)
9135 : see whether semctl IPC_STAT can use union semun
9136 echo " "
85ab1d1d
JH
9137 $cat > try.h <<END
9138#ifndef S_IRUSR
9139# ifdef S_IREAD
9140# define S_IRUSR S_IREAD
9141# define S_IWUSR S_IWRITE
9142# define S_IXUSR S_IEXEC
9143# else
9144# define S_IRUSR 0400
9145# define S_IWUSR 0200
9146# define S_IXUSR 0100
9147# endif
9148# define S_IRGRP (S_IRUSR>>3)
9149# define S_IWGRP (S_IWUSR>>3)
9150# define S_IXGRP (S_IXUSR>>3)
9151# define S_IROTH (S_IRUSR>>6)
9152# define S_IWOTH (S_IWUSR>>6)
9153# define S_IXOTH (S_IXUSR>>6)
9154#endif
9155#ifndef S_IRWXU
9156# define S_IRWXU (S_IRUSR|S_IWUSR|S_IXUSR)
9157# define S_IRWXG (S_IRGRP|S_IWGRP|S_IXGRP)
9158# define S_IRWXO (S_IROTH|S_IWOTH|S_IXOTH)
9159#endif
9160END
9161
bd89102f
AD
9162 $cat > try.c <<END
9163#include <sys/types.h>
9164#include <sys/ipc.h>
9165#include <sys/sem.h>
9166#include <sys/stat.h>
9167#include <stdio.h>
9168#include <errno.h>
85ab1d1d 9169#include "try.h"
bd89102f
AD
9170#ifndef errno
9171extern int errno;
9172#endif
9173#$d_union_semun HAS_UNION_SEMUN
9174int main() {
9175 union semun
9176#ifndef HAS_UNION_SEMUN
9177 {
9178 int val;
9179 struct semid_ds *buf;
9180 unsigned short *array;
9181 }
9182#endif
9183 arg;
9184 int sem, st;
9185
9186#if defined(IPC_PRIVATE) && defined(S_IRWXU) && defined(S_IRWXG) && defined(S_IRWXO) && defined(IPC_CREAT)
9187 sem = semget(IPC_PRIVATE, 1, S_IRWXU|S_IRWXG|S_IRWXO|IPC_CREAT);
9188 if (sem > -1) {
9189 struct semid_ds argbuf;
9190 arg.buf = &argbuf;
9191# ifdef IPC_STAT
9192 st = semctl(sem, 0, IPC_STAT, arg);
9193 if (st == 0)
9194 printf("semun\n");
9195 else
9196# endif /* IPC_STAT */
9197 printf("semctl IPC_STAT failed: errno = %d\n", errno);
9198# ifdef IPC_RMID
9199 if (semctl(sem, 0, IPC_RMID, arg) != 0)
9200# endif /* IPC_RMID */
9201 printf("semctl IPC_RMID failed: errno = %d\n", errno);
9202 } else
9203#endif /* IPC_PRIVATE && ... */
9204 printf("semget failed: errno = %d\n", errno);
9205 return 0;
9206}
9207END
9208 val="$undef"
9209 set try
9210 if eval $compile; then
9211 xxx=`./try`
9212 case "$xxx" in
9213 semun) val="$define" ;;
9214 esac
9215 fi
9216 $rm -f try try.c
9217 set d_semctl_semun
9218 eval $setvar
9219 case "$d_semctl_semun" in
9220 $define)
9221 echo "You can use union semun for semctl IPC_STAT." >&4
9222 also='also'
9223 ;;
9224 *) echo "You cannot use union semun for semctl IPC_STAT." >&4
9225 also=''
9226 ;;
9227 esac
9228
9229 : see whether semctl IPC_STAT can use struct semid_ds pointer
9230 $cat > try.c <<'END'
9231#include <sys/types.h>
9232#include <sys/ipc.h>
9233#include <sys/sem.h>
9234#include <sys/stat.h>
85ab1d1d 9235#include "try.h"
bd89102f
AD
9236#include <stdio.h>
9237#include <errno.h>
9238#ifndef errno
9239extern int errno;
9240#endif
9241int main() {
9242 struct semid_ds arg;
9243 int sem, st;
9244
9245#if defined(IPC_PRIVATE) && defined(S_IRWXU) && defined(S_IRWXG) && defined(S_IRWXO) && defined(IPC_CREAT)
9246 sem = semget(IPC_PRIVATE, 1, S_IRWXU|S_IRWXG|S_IRWXO|IPC_CREAT);
9247 if (sem > -1) {
9248# ifdef IPC_STAT
9249 st = semctl(sem, 0, IPC_STAT, &arg);
9250 if (st == 0)
9251 printf("semid_ds\n");
9252 else
9253# endif /* IPC_STAT */
9254 printf("semctl IPC_STAT failed: errno = %d\n", errno);
9255# ifdef IPC_RMID
9256 if (semctl(sem, 0, IPC_RMID, &arg) != 0)
9257# endif /* IPC_RMID */
9258 printf("semctl IPC_RMID failed: errno = %d\n", errno);
9259 } else
9260#endif /* IPC_PRIVATE && ... */
9261 printf("semget failed: errno = %d\n", errno);
9262
9263 return 0;
9264}
9265END
9266 val="$undef"
9267 set try
9268 if eval $compile; then
9269 xxx=`./try`
9270 case "$xxx" in
9271 semid_ds) val="$define" ;;
9272 esac
9273 fi
9274 $rm -f try try.c
9275 set d_semctl_semid_ds
9276 eval $setvar
9277 case "$d_semctl_semid_ds" in
9278 $define)
7f3d1cf1 9279 echo "You can $also use struct semid_ds* for semctl IPC_STAT." >&4
bd89102f 9280 ;;
7f3d1cf1 9281 *) echo "You cannot use struct semid_ds* for semctl IPC_STAT." >&4
bd89102f
AD
9282 ;;
9283 esac
85ab1d1d 9284 $rm -f try.h
bd89102f
AD
9285 ;;
9286*) val="$undef"
9287
9288 # We do not have the full sem*(2) library, so assume we can not
9289 # use either.
9290
9291 set d_semctl_semun
9292 eval $setvar
9293
9294 set d_semctl_semid_ds
9295 eval $setvar
9296 ;;
9297esac
9298
2304df62
AD
9299: see if setegid exists
9300set setegid d_setegid
9301eval $inlibc
9302
9303: see if seteuid exists
9304set seteuid d_seteuid
9305eval $inlibc
9306
5ff3f7a4
GS
9307: see if setgrent exists
9308set setgrent d_setgrent
9309eval $inlibc
9310
693762b4
AD
9311: see if sethostent exists
9312set sethostent d_sethent
9313eval $inlibc
9314
a0d0e21e
LW
9315: see if setlinebuf exists
9316set setlinebuf d_setlinebuf
9317eval $inlibc
9318
2304df62
AD
9319: see if setlocale exists
9320set setlocale d_setlocale
9321eval $inlibc
a0d0e21e 9322
e5c9fcd0
AD
9323: see if setnetent exists
9324set setnetent d_setnent
9325eval $inlibc
9326
9327: see if setprotoent exists
9328set setprotoent d_setpent
9329eval $inlibc
9330
2304df62
AD
9331: see if setpgid exists
9332set setpgid d_setpgid
9333eval $inlibc
9334
2304df62
AD
9335: see if setpgrp2 exists
9336set setpgrp2 d_setpgrp2
9337eval $inlibc
9338
9339: see if setpriority exists
9340set setpriority d_setprior
9341eval $inlibc
9342
5ff3f7a4
GS
9343: see if setpwent exists
9344set setpwent d_setpwent
9345eval $inlibc
9346
2304df62
AD
9347: see if setregid exists
9348set setregid d_setregid
9349eval $inlibc
9350set setresgid d_setresgid
9351eval $inlibc
9352
9353: see if setreuid exists
9354set setreuid d_setreuid
9355eval $inlibc
9356set setresuid d_setresuid
9357eval $inlibc
9358
9359: see if setrgid exists
9360set setrgid d_setrgid
9361eval $inlibc
9362
9363: see if setruid exists
9364set setruid d_setruid
9365eval $inlibc
9366
e5c9fcd0
AD
9367: see if setservent exists
9368set setservent d_setsent
9369eval $inlibc
9370
2304df62
AD
9371: see if setsid exists
9372set setsid d_setsid
9373eval $inlibc
9374
e5c9fcd0
AD
9375: see if setvbuf exists
9376set setvbuf d_setvbuf
9377eval $inlibc
9378
760ac839
LW
9379: see if sfio.h is available
9380set sfio.h i_sfio
9381eval $inhdr
9382
9383
8ff267be 9384: see if sfio library is available
760ac839
LW
9385case "$i_sfio" in
9386$define)
9387 val=''
9388 set sfreserve val
9389 eval $inlibc
9390 ;;
9391*)
9392 val="$undef"
9393 ;;
9394esac
8ff267be 9395: Ok, but do we want to use it.
760ac839
LW
9396case "$val" in
9397$define)
9398 case "$usesfio" in
8ff267be 9399 true|$define|[yY]*) dflt='y';;
760ac839
LW
9400 *) dflt='n';;
9401 esac
8ff267be 9402 echo "$package can use the sfio library, but it is experimental."
760ac839
LW
9403 rp="You seem to have sfio available, do you want to try using it?"
9404 . ./myread
9405 case "$ans" in
8ff267be 9406 y|Y) ;;
9407 *) echo "Ok, avoiding sfio this time. I'll use stdio instead."
760ac839 9408 val="$undef"
ff0cee69 9409 : Remove sfio from list of libraries to use
9410 set `echo X $libs | $sed -e 's/-lsfio / /' -e 's/-lsfio$//'`
9411 shift
9412 libs="$*"
9413 echo "libs = $libs" >&4
760ac839
LW
9414 ;;
9415 esac
9416 ;;
8ff267be 9417*) case "$usesfio" in
9418 true|$define|[yY]*)
9419 echo "Sorry, cannot find sfio on this machine" >&4
9420 echo "Ignoring your setting of usesfio=$usesfio" >&4
760ac839
LW
9421 ;;
9422 esac
9423 ;;
9424esac
8ff267be 9425set d_sfio
9426eval $setvar
760ac839
LW
9427case "$d_sfio" in
9428$define) usesfio='true';;
9429*) usesfio='false';;
9430esac
9431
2304df62
AD
9432: see if shmctl exists
9433set shmctl d_shmctl
9434eval $inlibc
9435
9436: see if shmget exists
9437set shmget d_shmget
9438eval $inlibc
9439
a0d0e21e
LW
9440: see if shmat exists
9441set shmat d_shmat
9442eval $inlibc
9443: see what shmat returns
9444case "$d_shmat" in
9445"$define")
9446 $cat >shmat.c <<'END'
9447#include <sys/shm.h>
9448void *shmat();
9449END
9450 if $cc $ccflags -c shmat.c >/dev/null 2>&1; then
9451 shmattype='void *'
9452 else
9453 shmattype='char *'
9454 fi
9455 echo "and it returns ($shmattype)." >&4
9456 : see if a prototype for shmat is available
e50aee73
AD
9457 xxx=`./findhdr sys/shm.h`
9458 $cppstdin $cppflags $cppminus < $xxx > shmat.c 2>/dev/null
a0d0e21e
LW
9459 if $contains 'shmat.*(' shmat.c >/dev/null 2>&1; then
9460 val="$define"
9461 else
9462 val="$undef"
9463 fi
9464 $rm -f shmat.[co]
9465 ;;
9466*)
9467 val="$undef"
9468 ;;
9469esac
9470set d_shmatprototype
9471eval $setvar
9472
9473: see if shmdt exists
9474set shmdt d_shmdt
9475eval $inlibc
9476
9477: see how much of the 'shm*(2)' library is present.
9478h_shm=true
9479echo " "
9480case "$d_shmctl$d_shmget$d_shmat$d_shmdt" in
9481*"$undef"*) h_shm=false;;
9482esac
6087ac44
JH
9483case "$osname" in
9484freebsd)
9485 case "`ipcs 2>&1`" in
9486 "SVID shared memory"*"not configured"*)
5ff3f7a4 9487 echo "Your $osname does not have the shm*(2) configured." >&4
6087ac44
JH
9488 h_shm=false
9489 val="$undef"
9490 set shmctl d_shmctl
9491 evat $setvar
9492 set shmget d_shmget
9493 evat $setvar
9494 set shmat d_shmat
9495 evat $setvar
9496 set shmdt d_shmdt
9497 evat $setvar
9498 ;;
9499 esac
9500 ;;
9501esac
a0d0e21e
LW
9502: we could also check for sys/ipc.h ...
9503if $h_shm && $test `./findhdr sys/shm.h`; then
9504 echo "You have the full shm*(2) library." >&4
9505 val="$define"
9506else
9507 echo "You don't have the full shm*(2) library." >&4
9508 val="$undef"
9509fi
9510set d_shm
9511eval $setvar
9512
2c7991dc 9513echo " "
8ff267be 9514: see if we have sigaction
9515if set sigaction val -f d_sigaction; eval $csym; $val; then
9516 echo 'sigaction() found.' >&4
dc45a647 9517 $cat > try.c <<'EOP'
8ff267be 9518#include <stdio.h>
9519#include <sys/types.h>
9520#include <signal.h>
9521main()
9522{
9523 struct sigaction act, oact;
9524}
9525EOP
dc45a647
MB
9526 set try
9527 if eval $compile_ok; then
9528 val="$define"
9529 else
9530 echo "But you don't seem to have a useable struct sigaction." >&4
9531 val="$undef"
9532 fi
8ff267be 9533else
dc45a647 9534 echo 'sigaction NOT found.' >&4
8ff267be 9535 val="$undef"
9536fi
9537set d_sigaction; eval $setvar
dfe9444c 9538$rm -f try try$_o try.c
2c7991dc 9539
a5f75d66
AD
9540: see if sigsetjmp exists
9541echo " "
921b2963
JH
9542case "$d_sigsetjmp" in
9543'')
9544 $cat >try.c <<'EOP'
9545#include <setjmp.h>
9546sigjmp_buf env;
9547int set = 1;
9548main()
9549{
9550 if (sigsetjmp(env,1))
9551 exit(set);
9552 set = 0;
9553 siglongjmp(env, 1);
9554 exit(1);
9555}
9556EOP
9557 set try
9558 if eval $compile; then
9559 if ./try >/dev/null 2>&1; then
9560 echo "POSIX sigsetjmp found." >&4
9561 val="$define"
9562 else
9563 $cat >&4 <<EOM
9564Uh-Oh! You have POSIX sigsetjmp and siglongjmp, but they do not work properly!!
9565I'll ignore them.
9566EOM
9567 val="$undef"
a0d0e21e 9568 fi
921b2963
JH
9569 else
9570 echo "sigsetjmp not found." >&4
9571 val="$undef"
a0d0e21e 9572 fi
921b2963
JH
9573 ;;
9574*) val="$d_sigsetjmp"
9575 case "$d_sigsetjmp" in
9576 $define) echo "POSIX sigsetjmp found." >&4;;
9577 $undef) echo "sigsetjmp not found." >&4;;
9578 esac
9579 ;;
9580esac
9581set d_sigsetjmp
9582eval $setvar
9583$rm -f try.c try
2304df62 9584
2304df62
AD
9585: see if stat knows about block sizes
9586echo " "
5ff3f7a4
GS
9587set d_statblks stat st_blocks $i_sysstat sys/stat.h
9588eval $hasfield
2304df62 9589
16d20bd9
AD
9590: see if _ptr and _cnt from stdio act std
9591echo " "
9592if $contains '_IO_fpos_t' `./findhdr stdio.h` >/dev/null 2>&1 ; then
9593 echo "(Looks like you have stdio.h from Linux.)"
9594 case "$stdio_ptr" in
c2960299
AD
9595 '') stdio_ptr='((fp)->_IO_read_ptr)'
9596 ptr_lval=$define
9597 ;;
8e07c86e 9598 *) ptr_lval=$d_stdio_ptr_lval;;
16d20bd9
AD
9599 esac
9600 case "$stdio_cnt" in
c2960299
AD
9601 '') stdio_cnt='((fp)->_IO_read_end - (fp)->_IO_read_ptr)'
9602 cnt_lval=$undef
9603 ;;
8e07c86e 9604 *) cnt_lval=$d_stdio_cnt_lval;;
16d20bd9
AD
9605 esac
9606 case "$stdio_base" in
9607 '') stdio_base='((fp)->_IO_read_base)';;
9608 esac
9609 case "$stdio_bufsiz" in
c2960299 9610 '') stdio_bufsiz='((fp)->_IO_read_end - (fp)->_IO_read_base)';;
16d20bd9
AD
9611 esac
9612else
9613 case "$stdio_ptr" in
c2960299
AD
9614 '') stdio_ptr='((fp)->_ptr)'
9615 ptr_lval=$define
9616 ;;
8e07c86e 9617 *) ptr_lval=$d_stdio_ptr_lval;;
16d20bd9
AD
9618 esac
9619 case "$stdio_cnt" in
c2960299
AD
9620 '') stdio_cnt='((fp)->_cnt)'
9621 cnt_lval=$define
9622 ;;
8e07c86e 9623 *) cnt_lval=$d_stdio_cnt_lval;;
16d20bd9
AD
9624 esac
9625 case "$stdio_base" in
9626 '') stdio_base='((fp)->_base)';;
9627 esac
9628 case "$stdio_bufsiz" in
9629 '') stdio_bufsiz='((fp)->_cnt + (fp)->_ptr - (fp)->_base)';;
9630 esac
9631fi
9632: test whether _ptr and _cnt really work
9633echo "Checking how std your stdio is..." >&4
9634$cat >try.c <<EOP
9635#include <stdio.h>
9636#define FILE_ptr(fp) $stdio_ptr
9637#define FILE_cnt(fp) $stdio_cnt
8ff267be 9638main() {
16d20bd9
AD
9639 FILE *fp = fopen("try.c", "r");
9640 char c = getc(fp);
9641 if (
9642 18 <= FILE_cnt(fp) &&
9643 strncmp(FILE_ptr(fp), "include <stdio.h>\n", 18) == 0
9644 )
9645 exit(0);
9646 exit(1);
9647}
9648EOP
9649val="$undef"
dfe9444c
AD
9650set try
9651if eval $compile; then
16d20bd9
AD
9652 if ./try; then
9653 echo "Your stdio acts pretty std."
9654 val="$define"
9655 else
9656 echo "Your stdio isn't very std."
9657 fi
9658else
9659 echo "Your stdio doesn't appear very std."
9660fi
9661$rm -f try.c try
9662set d_stdstdio
9663eval $setvar
9664
8e07c86e 9665: Can _ptr be used as an lvalue?
e50aee73
AD
9666case "$d_stdstdio$ptr_lval" in
9667$define$define) val=$define ;;
c2960299
AD
9668*) val=$undef ;;
9669esac
9670set d_stdio_ptr_lval
9671eval $setvar
9672
8e07c86e 9673: Can _cnt be used as an lvalue?
e50aee73
AD
9674case "$d_stdstdio$cnt_lval" in
9675$define$define) val=$define ;;
c2960299
AD
9676*) val=$undef ;;
9677esac
9678set d_stdio_cnt_lval
9679eval $setvar
9680
16d20bd9
AD
9681: see if _base is also standard
9682val="$undef"
9683case "$d_stdstdio" in
9684$define)
9685 $cat >try.c <<EOP
9686#include <stdio.h>
9687#define FILE_base(fp) $stdio_base
9688#define FILE_bufsiz(fp) $stdio_bufsiz
8ff267be 9689main() {
16d20bd9
AD
9690 FILE *fp = fopen("try.c", "r");
9691 char c = getc(fp);
9692 if (
9693 19 <= FILE_bufsiz(fp) &&
9694 strncmp(FILE_base(fp), "#include <stdio.h>\n", 19) == 0
9695 )
9696 exit(0);
9697 exit(1);
9698}
9699EOP
dfe9444c
AD
9700 set try
9701 if eval $compile; then
16d20bd9 9702 if ./try; then
8ff267be 9703 echo "And its _base field acts std."
16d20bd9
AD
9704 val="$define"
9705 else
9706 echo "But its _base field isn't std."
9707 fi
9708 else
9709 echo "However, it seems to be lacking the _base field."
9710 fi
9711 $rm -f try.c try
9712 ;;
9713esac
9714set d_stdiobase
9715eval $setvar
9716
a0d0e21e
LW
9717: see if strcoll exists
9718set strcoll d_strcoll
9719eval $inlibc
2304df62
AD
9720
9721: check for structure copying
9722echo " "
9723echo "Checking to see if your C compiler can copy structs..." >&4
9724$cat >try.c <<'EOCP'
9725main()
9726{
9727 struct blurfl {
9728 int dyick;
9729 } foo, bar;
9730
9731 foo = bar;
9732}
9733EOCP
9734if $cc -c try.c >/dev/null 2>&1 ; then
9735 val="$define"
9736 echo "Yup, it can."
9737else
9738 val="$undef"
9739 echo "Nope, it can't."
9740fi
9741set d_strctcpy
9742eval $setvar
9743$rm -f try.*
9744
9745: see if strerror and/or sys_errlist[] exist
9746echo " "
28e8609d
JH
9747if test "X$d_strerror" = X -o "X$d_syserrlst" = X; then
9748 if set strerror val -f d_strerror; eval $csym; $val; then
5ff3f7a4
GS
9749 echo 'strerror() found.' >&4
9750 d_strerror="$define"
9751 d_strerrm='strerror(e)'
9752 if set sys_errlist val -a d_syserrlst; eval $csym; $val; then
9753 echo "(You also have sys_errlist[], so we could roll our own strerror.)"
9754 d_syserrlst="$define"
9755 else
9756 echo "(Since you don't have sys_errlist[], sterror() is welcome.)"
9757 d_syserrlst="$undef"
9758 fi
28e8609d 9759 elif xxx=`./findhdr string.h`; test "$xxx" || xxx=`./findhdr strings.h`; \
5ff3f7a4
GS
9760 $contains '#[ ]*define.*strerror' "$xxx" >/dev/null 2>&1; then
9761 echo 'strerror() found in string header.' >&4
9762 d_strerror="$define"
9763 d_strerrm='strerror(e)'
9764 if set sys_errlist val -a d_syserrlst; eval $csym; $val; then
9765 echo "(Most probably, strerror() uses sys_errlist[] for descriptions.)"
9766 d_syserrlst="$define"
9767 else
9768 echo "(You don't appear to have any sys_errlist[], how can this be?)"
9769 d_syserrlst="$undef"
9770 fi
28e8609d 9771 elif set sys_errlist val -a d_syserrlst; eval $csym; $val; then
5ff3f7a4
GS
9772 echo "strerror() not found, but you have sys_errlist[] so we'll use that." >&4
9773 d_strerror="$undef"
9774 d_syserrlst="$define"
9775 d_strerrm='((e)<0||(e)>=sys_nerr?"unknown":sys_errlist[e])'
28e8609d 9776 else
5ff3f7a4
GS
9777 echo 'strerror() and sys_errlist[] NOT found.' >&4
9778 d_strerror="$undef"
9779 d_syserrlst="$undef"
9780 d_strerrm='"unknown"'
28e8609d 9781 fi
2304df62
AD
9782fi
9783
a89d8a78
DH
9784: see if strtod exists
9785set strtod d_strtod
9786eval $inlibc
9787
9788: see if strtol exists
9789set strtol d_strtol
9790eval $inlibc
9791
9792: see if strtoul exists
9793set strtoul d_strtoul
9794eval $inlibc
9795
a0d0e21e
LW
9796: see if strxfrm exists
9797set strxfrm d_strxfrm
9798eval $inlibc
9799
2304df62
AD
9800: see if symlink exists
9801set symlink d_symlink
9802eval $inlibc
9803
9804: see if syscall exists
9805set syscall d_syscall
9806eval $inlibc
9807
a0d0e21e
LW
9808: see if sysconf exists
9809set sysconf d_sysconf
9810eval $inlibc
9811
2304df62
AD
9812: see if system exists
9813set system d_system
9814eval $inlibc
9815
a0d0e21e
LW
9816: see if tcgetpgrp exists
9817set tcgetpgrp d_tcgetpgrp
9818eval $inlibc
9819
2c7991dc 9820: see if tcsetpgrp exists
9821set tcsetpgrp d_tcsetpgrp
9822eval $inlibc
4633a7c4 9823
2c7991dc 9824: define an is-a-typedef? function
9825typedef='type=$1; var=$2; def=$3; shift; shift; shift; inclist=$@;
9826case "$inclist" in
9827"") inclist="sys/types.h";;
9828esac;
9829eval "varval=\$$var";
9830case "$varval" in
9831"")
9832 $rm -f temp.c;
9833 for inc in $inclist; do
9834 echo "#include <$inc>" >>temp.c;
9835 done;
c4f23d77
AD
9836 echo "#ifdef $type" >> temp.c;
9837 echo "printf(\"We have $type\");" >> temp.c;
9838 echo "#endif" >> temp.c;
2c7991dc 9839 $cppstdin $cppflags $cppminus < temp.c >temp.E 2>/dev/null;
9840 if $contains $type temp.E >/dev/null 2>&1; then
9841 eval "$var=\$type";
9842 else
9843 eval "$var=\$def";
9844 fi;
9845 $rm -f temp.?;;
9846*) eval "$var=\$varval";;
9847esac'
4633a7c4 9848
dc45a647
MB
9849: define an is-a-typedef? function that prompts if the type is not available.
9850typedef_ask='type=$1; var=$2; def=$3; shift; shift; shift; inclist=$@;
9851case "$inclist" in
9852"") inclist="sys/types.h";;
9853esac;
9854eval "varval=\$$var";
9855case "$varval" in
9856"")
9857 $rm -f temp.c;
9858 for inc in $inclist; do
9859 echo "#include <$inc>" >>temp.c;
9860 done;
c4f23d77
AD
9861 echo "#ifdef $type" >> temp.c;
9862 echo "printf(\"We have $type\");" >> temp.c;
9863 echo "#endif" >> temp.c;
dc45a647
MB
9864 $cppstdin $cppflags $cppminus < temp.c >temp.E 2>/dev/null;
9865 echo " " ;
9866 echo "$rp" | $sed -e "s/What is/Looking for/" -e "s/?/./";
9867 if $contains $type temp.E >/dev/null 2>&1; then
9868 echo "$type found." >&4;
9869 eval "$var=\$type";
9870 else
9871 echo "$type NOT found." >&4;
9872 dflt="$def";
9873 . ./myread ;
9874 eval "$var=\$ans";
9875 fi;
9876 $rm -f temp.?;;
9877*) eval "$var=\$varval";;
9878esac'
9879
2c7991dc 9880: see if this is a sys/times.h system
9881set sys/times.h i_systimes
9882eval $inhdr
4633a7c4 9883
2c7991dc 9884: see if times exists
4633a7c4 9885echo " "
2c7991dc 9886if set times val -f d_times; eval $csym; $val; then
9887 echo 'times() found.' >&4
9888 d_times="$define"
9889 inc=''
9890 case "$i_systimes" in
9891 "$define") inc='sys/times.h';;
9892 esac
dc45a647 9893 rp="What is the type returned by times() on this system?"
2c7991dc 9894 set clock_t clocktype long stdio.h sys/types.h $inc
dc45a647 9895 eval $typedef_ask
2c7991dc 9896else
9897 echo 'times() NOT found, hope that will do.' >&4
9898 d_times="$undef"
9899 clocktype='int'
9900fi
2304df62 9901
2c7991dc 9902: see if truncate exists
9903set truncate d_truncate
9904eval $inlibc
2304df62 9905
2c7991dc 9906: see if tzname[] exists
9907echo " "
9908if set tzname val -a d_tzname; eval $csym; $val; then
9909 val="$define"
9910 echo 'tzname[] found.' >&4
9911else
9912 val="$undef"
9913 echo 'tzname[] NOT found.' >&4
9914fi
9915set d_tzname
9916eval $setvar
9917
9918: see if umask exists
9919set umask d_umask
9920eval $inlibc
85e6fe83 9921
4633a7c4
LW
9922: backward compatibility for d_hvfork
9923if test X$d_hvfork != X; then
9924 d_vfork="$d_hvfork"
9925 d_hvfork=''
9926fi
9927: see if there is a vfork
9928val=''
9929set vfork val
9930eval $inlibc
ecfc5424 9931
4633a7c4
LW
9932: Ok, but do we want to use it. vfork is reportedly unreliable in
9933: perl on Solaris 2.x, and probably elsewhere.
9934case "$val" in
9935$define)
16d20bd9 9936 echo " "
4633a7c4
LW
9937 case "$usevfork" in
9938 false) dflt='n';;
9939 *) dflt='y';;
9940 esac
9941 rp="Some systems have problems with vfork(). Do you want to use it?"
9942 . ./myread
9943 case "$ans" in
9944 y|Y) ;;
9945 *)
9946 echo "Ok, we won't use vfork()."
9947 val="$undef"
9948 ;;
9949 esac
ecfc5424
AD
9950 ;;
9951esac
4633a7c4
LW
9952set d_vfork
9953eval $setvar
9954case "$d_vfork" in
9955$define) usevfork='true';;
9956*) usevfork='false';;
9957esac
ecfc5424 9958
4633a7c4
LW
9959: see if this is an sysdir system
9960set sys/dir.h i_sysdir
9961eval $inhdr
9962
9963: see if this is an sysndir system
9964set sys/ndir.h i_sysndir
9965eval $inhdr
9966
bfb7748a
AD
9967: see if sys/types.h has to be included
9968set sys/types.h i_systypes
9969eval $inhdr
9970
4633a7c4
LW
9971: see if closedir exists
9972set closedir d_closedir
9973eval $inlibc
9974
9975case "$d_closedir" in
9976"$define")
16d20bd9 9977 echo " "
4633a7c4
LW
9978 echo "Checking whether closedir() returns a status..." >&4
9979 cat > closedir.c <<EOM
9980#$i_dirent I_DIRENT /**/
9981#$i_sysdir I_SYS_DIR /**/
9982#$i_sysndir I_SYS_NDIR /**/
bfb7748a 9983#$i_systypes I_SYS_TYPES /**/
4633a7c4 9984
bfb7748a
AD
9985#if defined(I_SYS_TYPES)
9986#include <sys/types.h>
9987#endif
4633a7c4
LW
9988#if defined(I_DIRENT)
9989#include <dirent.h>
9990#if defined(NeXT) && defined(I_SYS_DIR) /* NeXT needs dirent + sys/dir.h */
9991#include <sys/dir.h>
4aa0a1f7 9992#endif
4633a7c4
LW
9993#else
9994#ifdef I_SYS_NDIR
9995#include <sys/ndir.h>
9996#else
9997#ifdef I_SYS_DIR
9998#ifdef hp9000s500
9999#include <ndir.h> /* may be wrong in the future */
10000#else
10001#include <sys/dir.h>
10002#endif
10003#endif
10004#endif
10005#endif
10006int main() { return closedir(opendir(".")); }
10007EOM
dfe9444c 10008 set closedir
dc45a647 10009 if eval $compile_ok; then
4633a7c4
LW
10010 if ./closedir > /dev/null 2>&1 ; then
10011 echo "Yes, it does."
10012 val="$undef"
ecfc5424 10013 else
4633a7c4
LW
10014 echo "No, it doesn't."
10015 val="$define"
ecfc5424
AD
10016 fi
10017 else
4633a7c4
LW
10018 echo "(I can't seem to compile the test program--assuming it doesn't)"
10019 val="$define"
ecfc5424 10020 fi
ecfc5424 10021 ;;
4633a7c4
LW
10022*)
10023 val="$undef";
ecfc5424
AD
10024 ;;
10025esac
4633a7c4
LW
10026set d_void_closedir
10027eval $setvar
10028$rm -f closedir*
10029: check for volatile keyword
ecfc5424 10030echo " "
4633a7c4
LW
10031echo 'Checking to see if your C compiler knows about "volatile"...' >&4
10032$cat >try.c <<'EOCP'
10033main()
10034{
10035 typedef struct _goo_struct goo_struct;
10036 goo_struct * volatile goo = ((goo_struct *)0);
10037 struct _goo_struct {
10038 long long_int;
10039 int reg_int;
10040 char char_var;
10041 };
10042 typedef unsigned short foo_t;
10043 char *volatile foo;
10044 volatile int bar;
10045 volatile foo_t blech;
10046 foo = foo;
a0d0e21e
LW
10047}
10048EOCP
4633a7c4
LW
10049if $cc -c $ccflags try.c >/dev/null 2>&1 ; then
10050 val="$define"
10051 echo "Yup, it does."
10052else
10053 val="$undef"
10054 echo "Nope, it doesn't."
10055fi
10056set d_volatile
10057eval $setvar
10058$rm -f try.*
a0d0e21e 10059
4633a7c4
LW
10060: see if there is a wait4
10061set wait4 d_wait4
8e07c86e
AD
10062eval $inlibc
10063
4633a7c4
LW
10064: see if waitpid exists
10065set waitpid d_waitpid
10066eval $inlibc
10067
10068: see if wcstombs exists
10069set wcstombs d_wcstombs
10070eval $inlibc
10071
10072: see if wctomb exists
10073set wctomb d_wctomb
10074eval $inlibc
10075
de4597cb
JH
10076: see if writev exists
10077set writev d_writev
10078eval $inlibc
10079
4633a7c4
LW
10080: preserve RCS keywords in files with variable substitution, grrr
10081Date='$Date'
10082Id='$Id'
10083Log='$Log'
10084RCSfile='$RCSfile'
10085Revision='$Revision'
10086
10087: check for alignment requirements
10088echo " "
10089case "$alignbytes" in
10090'') echo "Checking alignment constraints..." >&4
10091 $cat >try.c <<'EOCP'
10092struct foobar {
10093 char foo;
10094 double bar;
10095} try;
10096main()
10097{
10098 printf("%d\n", (char *)&try.bar - (char *)&try.foo);
10099}
10100EOCP
dfe9444c 10101 set try
dc45a647 10102 if eval $compile_ok; then
4633a7c4
LW
10103 dflt=`./try`
10104 else
10105 dflt='8'
41992daf 10106 echo "(I can't seem to compile the test program...)"
4633a7c4 10107 fi
ecfc5424 10108 ;;
4633a7c4 10109*) dflt="$alignbytes"
8e07c86e 10110 ;;
ecfc5424 10111esac
4633a7c4
LW
10112rp="Doubles must be aligned on a how-many-byte boundary?"
10113. ./myread
10114alignbytes="$ans"
10115$rm -f try.c try
85e6fe83 10116
4633a7c4
LW
10117: check for ordering of bytes in a long
10118case "$byteorder" in
10119'')
10120 $cat <<'EOM'
10121
10122In the following, larger digits indicate more significance. A big-endian
10123machine like a Pyramid or a Motorola 680?0 chip will come out to 4321. A
10124little-endian machine like a Vax or an Intel 80?86 chip would be 1234. Other
10125machines may have weird orders like 3412. A Cray will report 87654321. If
10126the test program works the default is probably right.
10127I'm now running the test program...
10128EOM
10129 $cat >try.c <<'EOCP'
10130#include <stdio.h>
10131main()
10132{
10133 int i;
10134 union {
10135 unsigned long l;
10136 char c[sizeof(long)];
10137 } u;
10138
10139 if (sizeof(long) > 4)
10140 u.l = (0x08070605L << 32) | 0x04030201L;
10141 else
10142 u.l = 0x04030201L;
10143 for (i = 0; i < sizeof(long); i++)
10144 printf("%c", u.c[i]+'0');
10145 printf("\n");
10146 exit(0);
10147}
10148EOCP
10149 xxx_prompt=y
dfe9444c
AD
10150 set try
10151 if eval $compile && ./try > /dev/null; then
4633a7c4
LW
10152 dflt=`./try`
10153 case "$dflt" in
10154 [1-4][1-4][1-4][1-4]|12345678|87654321)
10155 echo "(The test program ran ok.)"
10156 echo "byteorder=$dflt"
10157 xxx_prompt=n
10158 ;;
10159 ????|????????) echo "(The test program ran ok.)" ;;
10160 *) echo "(The test program didn't run right for some reason.)" ;;
10161 esac
10162 else
10163 dflt='4321'
10164 cat <<'EOM'
10165(I can't seem to compile the test program. Guessing big-endian...)
10166EOM
10167 fi
10168 case "$xxx_prompt" in
10169 y)
10170 rp="What is the order of bytes in a long?"
10171 . ./myread
10172 byteorder="$ans"
10173 ;;
10174 *) byteorder=$dflt
ecfc5424
AD
10175 ;;
10176 esac
10177 ;;
10178esac
4633a7c4 10179$rm -f try.c try
85e6fe83 10180
4633a7c4 10181: how do we catenate cpp tokens here?
2304df62 10182echo " "
4633a7c4
LW
10183echo "Checking to see how your cpp does stuff like catenate tokens..." >&4
10184$cat >cpp_stuff.c <<'EOCP'
10185#define RCAT(a,b)a/**/b
10186#define ACAT(a,b)a ## b
10187RCAT(Rei,ser)
10188ACAT(Cir,cus)
10189EOCP
10190$cppstdin $cppflags $cppminus <cpp_stuff.c >cpp_stuff.out 2>&1
10191if $contains 'Circus' cpp_stuff.out >/dev/null 2>&1; then
dfe9444c 10192 echo "Oh! Smells like ANSI's been here." >&4
4633a7c4
LW
10193 echo "We can catify or stringify, separately or together!"
10194 cpp_stuff=42
10195elif $contains 'Reiser' cpp_stuff.out >/dev/null 2>&1; then
dfe9444c 10196 echo "Ah, yes! The good old days!" >&4
4633a7c4
LW
10197 echo "However, in the good old days we don't know how to stringify and"
10198 echo "catify at the same time."
10199 cpp_stuff=1
10200else
10201 $cat >&4 <<EOM
10202Hmm, I don't seem to be able to catenate tokens with your cpp. You're going
10203to have to edit the values of CAT[2-5] in config.h...
a0d0e21e 10204EOM
4633a7c4
LW
10205 cpp_stuff="/* Help! How do we handle cpp_stuff? */*/"
10206fi
10207$rm -f cpp_stuff.*
a0d0e21e 10208
4633a7c4
LW
10209: see if this is a db.h system
10210set db.h i_db
10211eval $inhdr
10212
10213case "$i_db" in
68dc0745 10214$define)
1f70e1ea 10215 : Check db version.
68dc0745 10216 echo " "
10217 echo "Checking Berkeley DB version ..." >&4
10218 $cat >try.c <<EOCP
10219#$d_const HASCONST
10220#ifndef HASCONST
10221#define const
10222#endif
10223#include <sys/types.h>
10224#include <stdio.h>
10225#include <db.h>
10226main()
10227{
1f70e1ea
PM
10228#ifdef DB_VERSION_MAJOR /* DB version >= 2 */
10229 int Major, Minor, Patch ;
ee02776e 10230 unsigned long Version ;
1f70e1ea
PM
10231 (void)db_version(&Major, &Minor, &Patch) ;
10232 printf("You have Berkeley DB Version 2 or greater\n");
10233
10234 printf("db.h is from Berkeley DB Version %d.%d.%d\n",
10235 DB_VERSION_MAJOR, DB_VERSION_MINOR, DB_VERSION_PATCH);
10236 printf("libdb is from Berkeley DB Version %d.%d.%d\n",
10237 Major, Minor, Patch) ;
10238
10239 /* check that db.h & libdb are compatible */
10240 if (DB_VERSION_MAJOR != Major || DB_VERSION_MINOR != Minor || DB_VERSION_PATCH != Patch) {
10241 printf("db.h and libdb are incompatible\n") ;
10242 exit(3);
10243 }
10244
10245 printf("db.h and libdb are compatible\n") ;
ee02776e
PM
10246
10247 Version = DB_VERSION_MAJOR * 1000000 + DB_VERSION_MINOR * 1000
693762b4 10248 + DB_VERSION_PATCH ;
ee02776e
PM
10249
10250 /* needs to be >= 2.3.4 */
10251 if (Version < 2003004) {
693762b4 10252 /* if (DB_VERSION_MAJOR == 2 && DB_VERSION_MINOR == 0 && DB_VERSION_PATCH < 5) { */
ee02776e 10253 printf("but Perl needs Berkeley DB 2.3.4 or greater\n") ;
1f70e1ea
PM
10254 exit(2);
10255 }
10256
10257 exit(0);
68dc0745 10258#else
6a1b87e5 10259#if defined(_DB_H_) && defined(BTREEMAGIC) && defined(HASHMAGIC)
1f70e1ea 10260 printf("You have Berkeley DB Version 1\n");
6a1b87e5
JH
10261 exit(0); /* DB version < 2: the coast is clear. */
10262#else
10263 exit(1); /* <db.h> not Berkeley DB? */
10264#endif
68dc0745 10265#endif
10266}
10267EOCP
dfe9444c
AD
10268 set try
10269 if eval $compile && ./try; then
1f70e1ea 10270 echo 'Looks OK.' >&4
68dc0745 10271 else
c90c0ff4 10272 echo "I can't use Berkeley DB with your <db.h>. I'll disable Berkeley DB." >&4
68dc0745 10273 i_db=$undef
10274 case " $libs " in
10275 *"-ldb "*)
10276 : Remove db from list of libraries to use
10277 echo "Removing unusable -ldb from library list" >&4
10278 set `echo X $libs | $sed -e 's/-ldb / /' -e 's/-ldb$//'`
10279 shift
10280 libs="$*"
10281 echo "libs = $libs" >&4
10282 ;;
10283 esac
10284 fi
10285 $rm -f try.*
10286 ;;
10287esac
10288
10289case "$i_db" in
4633a7c4 10290define)
dc45a647
MB
10291 : Check the return type needed for hash
10292 echo " "
10293 echo "Checking return type needed for hash for Berkeley DB ..." >&4
10294 $cat >try.c <<EOCP
10295#$d_const HASCONST
10296#ifndef HASCONST
10297#define const
10298#endif
10299#include <sys/types.h>
10300#include <db.h>
10301
10302#ifndef DB_VERSION_MAJOR
10303u_int32_t hash_cb (ptr, size)
10304const void *ptr;
10305size_t size;
10306{
10307}
10308HASHINFO info;
10309main()
10310{
10311 info.hash = hash_cb;
10312}
10313#endif
10314EOCP
10315 if $cc $ccflags -c try.c >try.out 2>&1 ; then
10316 if $contains warning try.out >>/dev/null 2>&1 ; then
10317 db_hashtype='int'
10318 else
10319 db_hashtype='u_int32_t'
10320 fi
10321 else
10322 : XXX Maybe we should just give up here.
10323 db_hashtype=u_int32_t
10324 $cat try.out >&4
10325 echo "Help: I can't seem to compile the db test program." >&4
10326 echo "Something's wrong, but I'll assume you use $db_hashtype." >&4
10327 fi
10328 $rm -f try.*
10329 echo "Your version of Berkeley DB uses $db_hashtype for hash."
10330 ;;
10331*) db_hashtype=u_int32_t
10332 ;;
10333esac
10334case "$i_db" in
10335define)
4633a7c4
LW
10336 : Check the return type needed for prefix
10337 echo " "
10338 echo "Checking return type needed for prefix for Berkeley DB ..." >&4
10339 cat >try.c <<EOCP
10340#$d_const HASCONST
10341#ifndef HASCONST
10342#define const
10343#endif
10344#include <sys/types.h>
10345#include <db.h>
1f70e1ea
PM
10346
10347#ifndef DB_VERSION_MAJOR
4633a7c4
LW
10348size_t prefix_cb (key1, key2)
10349const DBT *key1;
10350const DBT *key2;
10351{
10352}
10353BTREEINFO info;
10354main()
10355{
10356 info.prefix = prefix_cb;
10357}
1f70e1ea 10358#endif
4633a7c4
LW
10359EOCP
10360 if $cc $ccflags -c try.c >try.out 2>&1 ; then
10361 if $contains warning try.out >>/dev/null 2>&1 ; then
10362 db_prefixtype='int'
10363 else
10364 db_prefixtype='size_t'
10365 fi
10366 else
68dc0745 10367 db_prefixtype='size_t'
10368 : XXX Maybe we should just give up here.
dc45a647 10369 $cat try.out >&4
68dc0745 10370 echo "Help: I can't seem to compile the db test program." >&4
10371 echo "Something's wrong, but I'll assume you use $db_prefixtype." >&4
4633a7c4
LW
10372 fi
10373 $rm -f try.*
10374 echo "Your version of Berkeley DB uses $db_prefixtype for prefix."
a0d0e21e 10375 ;;
68dc0745 10376*) db_prefixtype='size_t'
4633a7c4
LW
10377 ;;
10378esac
a0d0e21e 10379
4633a7c4
LW
10380: check for void type
10381echo " "
10382echo "Checking to see how well your C compiler groks the void type..." >&4
4633a7c4
LW
10383case "$voidflags" in
10384'')
10385 $cat >try.c <<'EOCP'
10386#if TRY & 1
760ac839 10387void sub() {
4633a7c4 10388#else
760ac839 10389sub() {
4633a7c4
LW
10390#endif
10391 extern void moo(); /* function returning void */
10392 void (*goo)(); /* ptr to func returning void */
10393#if TRY & 8
10394 void *hue; /* generic ptr */
10395#endif
10396#if TRY & 2
10397 void (*foo[10])();
10398#endif
a0d0e21e 10399
4633a7c4
LW
10400#if TRY & 4
10401 if(goo == moo) {
10402 exit(0);
10403 }
10404#endif
10405 exit(0);
10406}
760ac839 10407main() { sub(); }
4633a7c4 10408EOCP
760ac839 10409 if $cc $ccflags -c -DTRY=$defvoidused try.c >.out 2>&1 ; then
4633a7c4 10410 voidflags=$defvoidused
bfb7748a 10411 echo "Good. It appears to support void to the level $package wants.">&4
4633a7c4
LW
10412 if $contains warning .out >/dev/null 2>&1; then
10413 echo "However, you might get some warnings that look like this:"
10414 $cat .out
10415 fi
10416 else
10417echo "Hmm, your compiler has some difficulty with void. Checking further..." >&4
760ac839 10418 if $cc $ccflags -c -DTRY=1 try.c >/dev/null 2>&1; then
4633a7c4 10419 echo "It supports 1..."
760ac839 10420 if $cc $ccflags -c -DTRY=3 try.c >/dev/null 2>&1; then
4633a7c4 10421 echo "It also supports 2..."
760ac839 10422 if $cc $ccflags -c -DTRY=7 try.c >/dev/null 2>&1; then
4633a7c4
LW
10423 voidflags=7
10424 echo "And it supports 4 but not 8 definitely."
10425 else
10426 echo "It doesn't support 4..."
760ac839 10427 if $cc $ccflags -c -DTRY=11 try.c >/dev/null 2>&1; then
4633a7c4
LW
10428 voidflags=11
10429 echo "But it supports 8."
10430 else
10431 voidflags=3
10432 echo "Neither does it support 8."
10433 fi
10434 fi
10435 else
10436 echo "It does not support 2..."
760ac839 10437 if $cc $ccflags -c -DTRY=13 try.c >/dev/null 2>&1; then
4633a7c4
LW
10438 voidflags=13
10439 echo "But it supports 4 and 8."
10440 else
760ac839 10441 if $cc $ccflags -c -DTRY=5 try.c >/dev/null 2>&1; then
4633a7c4
LW
10442 voidflags=5
10443 echo "And it supports 4 but has not heard about 8."
10444 else
10445 echo "However it supports 8 but not 4."
10446 fi
10447 fi
10448 fi
10449 else
10450 echo "There is no support at all for void."
10451 voidflags=0
10452 fi
10453 fi
10454esac
4633a7c4 10455case "$voidflags" in
2c7991dc 10456"$defvoidused") ;;
bfb7748a
AD
10457*) $cat >&4 <<'EOM'
10458 Support flag bits are:
10459 1: basic void declarations.
10460 2: arrays of pointers to functions returning void.
10461 4: operations between pointers to and addresses of void functions.
10462 8: generic void pointers.
10463EOM
2c7991dc 10464 dflt="$voidflags";
4633a7c4 10465 rp="Your void support flags add up to what?"
a0d0e21e 10466 . ./myread
4633a7c4 10467 voidflags="$ans"
a0d0e21e
LW
10468 ;;
10469esac
4633a7c4 10470$rm -f try.* .out
a0d0e21e 10471
85ab1d1d
JH
10472
10473: How can we generate normalized random numbers ?
693762b4 10474echo " "
de4597cb 10475echo "Looking for a random number function..." >&4
85ab1d1d 10476case "$randfunc" in
693762b4 10477'')
85ab1d1d
JH
10478 if set drand48 val -f; eval $csym; $val; then
10479 dflt="drand48"
10480 echo "Good, found drand48()." >&4
10481 elif set random val -f; eval $csym; $val; then
10482 dflt="random"
10483 echo "OK, found random()." >&4
10484 else
10485 dflt="rand"
10486 echo "Yick, looks like I have to use rand()." >&4
10487 fi
10488 echo " "
10489 ;;
10490*)
10491 dflt="$randfunc"
10492 ;;
10493esac
10494cont=true
10495
10496case "$ccflags" in
10497*-Dmy_rand=*|*-Dmy_srand=*)
10498 echo "Removing obsolete -Dmy_rand, -Dmy_srand, and -Drandbits from ccflags." >&4
10499 ccflags="`echo $ccflags | sed -e 's/-Dmy_rand=random/ /'`"
10500 ccflags="`echo $ccflags | sed -e 's/-Dmy_srand=srandom/ /'`"
10501 ccflags="`echo $ccflags | sed -e 's/-Drandbits=[0-9][0-9]*/ /'`"
10502 ;;
10503esac
10504
10505while $test "$cont"; do
10506 rp="Use which function to generate random numbers?"
10507 . ./myread
10508 if $test "$ans" = "$dflt"; then
10509 : null
10510 else
10511 randbits=''
10512 fi
10513 randfunc="$ans"
10514 if set $ans val -f; eval $csym; $val; then
10515 cont=''
10516 else
ef4af2be
JH
10517 dflt=y
10518 rp="I cannot find function $ans. Use that name anyway?"
85ab1d1d
JH
10519 . ./myread
10520 dflt=rand
10521 case "$ans" in
10522 [yY]*) cont='';;
10523 esac
10524 fi
10525 case "$cont" in
10526 '')
10527 case "$randfunc" in
10528 drand48)
10529 drand01="drand48()"
10530 seedfunc="srand48"
10531 randbits=48
10532 randseedtype=long
10533 ;;
10534 rand|random)
10535 case "$randbits" in
10536 '')
10537echo "Checking to see how many bits your $randfunc() function produces..." >&4
10538 $cat >try.c <<EOCP
10539#$i_unistd I_UNISTD
10540#$i_stdlib I_STDLIB
693762b4 10541#include <stdio.h>
85ab1d1d
JH
10542#ifdef I_UNISTD
10543# include <unistd.h>
10544#endif
10545#ifdef I_STDLIB
10546# include <stdlib.h>
10547#endif
693762b4
AD
10548main()
10549{
85ab1d1d
JH
10550 register int i;
10551 register unsigned long tmp;
10552 register unsigned long max = 0L;
10553
10554 for (i = 1000; i; i--) {
10555 tmp = (unsigned long) $randfunc();
10556 if (tmp > max) max = tmp;
10557 }
10558 for (i = 0; max; i++)
10559 max /= 2;
10560 printf("%d\n",i);
693762b4
AD
10561}
10562EOCP
85ab1d1d
JH
10563 set try
10564 if eval $compile_ok; then
10565 dflt=`try`
10566 else
10567 dflt='?'
10568 echo "(I can't seem to compile the test program...)"
10569 fi
10570 ;;
10571 *)
10572 dflt="$randbits"
10573 ;;
10574 esac
10575 rp="How many bits does your $randfunc() function produce?"
10576 . ./myread
10577 randbits="$ans"
10578 $rm -f try.c try
10579 drand01="($randfunc() / (double) ((unsigned long)1 << $randbits))"
10580 seedfunc="s$randfunc"
10581 randseedtype=unsigned
10582 ;;
10583 *)
10584 dflt="31"
10585 rp="How many bits does your $randfunc() function produce?"
10586 . ./myread
10587 randbits="$ans"
10588 seedfunc="s$randfunc"
10589 drand01="($randfunc() / (double) ((unsigned long)1 << $randbits))"
10590 if set $seedfunc val -f; eval $csym; $val; then
10591 echo "(Using $seedfunc() to seed random generator)"
10592 else
10593 echo "(Warning: no $seedfunc() to seed random generator)"
10594 seedfunc=rand
10595 fi
10596 randseedtype=unsigned
10597 ;;
10598 esac
10599 ;;
10600 esac
10601done
693762b4 10602
5ff3f7a4
GS
10603echo " "
10604echo "Determining whether or not we are on an EBCDIC system..." >&4
10605$cat >tebcdic.c <<'EOM'
10606int main()
10607{
10608 if ('M'==0xd4) return 0;
10609 return 1;
10610}
10611EOM
10612
10613val=$undef
10614set tebcdic
10615if eval $compile_ok; then
10616 if ./tebcdic; then
10617 echo "You have EBCDIC." >&4
10618 val="$define"
10619 else
10620 echo "Nope, no EBCDIC. Assuming ASCII or some ISO Latin." >&4
10621 fi
10622else
5cc3184f 10623 echo "I'm unable to compile the test program." >&4
5ff3f7a4
GS
10624 echo "I'll assume ASCII or some ISO Latin." >&4
10625fi
10626$rm -f tebcdic.c tebcdic
10627set ebcdic
10628eval $setvar
10629
a0d0e21e 10630: see what type file positions are declared as in the library
a0d0e21e 10631rp="What is the type for file position used by fsetpos()?"
dc45a647
MB
10632set fpos_t fpostype long stdio.h sys/types.h
10633eval $typedef_ask
2304df62 10634
1aef975c
AD
10635: Store the full pathname to the sed program for use in the C program
10636full_sed=$sed
10637
2304df62 10638: see what type gids are declared as in the kernel
dc45a647
MB
10639echo " "
10640echo "Looking for the type for group ids returned by getgid()."
a0d0e21e
LW
10641set gid_t gidtype xxx stdio.h sys/types.h
10642eval $typedef
2304df62 10643case "$gidtype" in
a0d0e21e
LW
10644xxx)
10645 xxx=`./findhdr sys/user.h`
10646 set `grep 'groups\[NGROUPS\];' "$xxx" 2>/dev/null` unsigned short
10647 case $1 in
10648 unsigned) dflt="$1 $2" ;;
10649 *) dflt="$1" ;;
10650 esac
2304df62 10651 ;;
a0d0e21e 10652*) dflt="$gidtype";;
2304df62 10653esac
dc45a647
MB
10654case "$gidtype" in
10655gid_t) echo "gid_t found." ;;
10656*) rp="What is the type for group ids returned by getgid()?"
10657 . ./myread
10658 gidtype="$ans"
10659 ;;
10660esac
a0d0e21e 10661
2304df62
AD
10662: see if getgroups exists
10663set getgroups d_getgrps
10664eval $inlibc
10665
5cd24f17 10666: see if setgroups exists
10667set setgroups d_setgrps
10668eval $inlibc
10669
dfe9444c 10670
8cc95fdb 10671: Find type of 2nd arg to 'getgroups()' and 'setgroups()'
a0d0e21e 10672echo " "
5cd24f17 10673case "$d_getgrps$d_setgrps" in
10674*define*)
a0d0e21e 10675 case "$groupstype" in
2304df62
AD
10676 '') dflt="$gidtype" ;;
10677 *) dflt="$groupstype" ;;
a0d0e21e
LW
10678 esac
10679 $cat <<EOM
dc45a647 10680What type of pointer is the second argument to getgroups() and setgroups()?
5cd24f17 10681Usually this is the same as group ids, $gidtype, but not always.
2304df62
AD
10682
10683EOM
dc45a647 10684 rp='What type pointer is the second argument to getgroups() and setgroups()?'
a0d0e21e
LW
10685 . ./myread
10686 groupstype="$ans"
10687 ;;
10688*) groupstype="$gidtype";;
2304df62 10689esac
2304df62 10690
85e6fe83 10691: see what type lseek is declared as in the kernel
dc45a647 10692rp="What is the type used for lseek's offset on this system?"
a0d0e21e 10693set off_t lseektype long stdio.h sys/types.h
dc45a647 10694eval $typedef_ask
2304df62 10695
8ff267be 10696echo " "
5ff3f7a4
GS
10697$echo $n "Checking to see how big your file offsets are...$c" >&4
10698$cat >try.c <<EOCP
10699#include <sys/types.h>
10700#include <stdio.h>
10701main()
10702{
10703 printf("%d\n", sizeof($lseektype));
10704}
10705EOCP
10706set try
10707if eval $compile_ok; then
10708 lseeksize=`./try`
10709 $echo " $lseeksize bytes." >&4
10710else
10711 dflt='4'
10712 echo " "
10713 echo "(I can't seem to compile the test program. Guessing...)"
10714 rp="What is the size of your file offsets (in bytes)?"
10715 . ./myread
10716 lseeksize="$ans"
10717fi
10718$rm -f try.c try
10719
10720echo " "
dfe9444c 10721echo "Checking if your $make program sets \$(MAKE)..." >&4
8ff267be 10722case "$make_set_make" in
10723'')
10724 $sed 's/^X //' > testmake.mak << 'EOF'
10725Xall:
dfe9444c 10726X @echo 'maketemp="$(MAKE)"'
8ff267be 10727EOF
8ff267be 10728 case "`$make -f testmake.mak 2>/dev/null`" in
dfe9444c 10729 *maketemp=*) make_set_make='#' ;;
8ff267be 10730 *) make_set_make="MAKE=$make" ;;
10731 esac
dfe9444c
AD
10732 $rm -f testmake.mak
10733 ;;
10734esac
10735case "$make_set_make" in
10736'#') echo "Yup, it does.";;
10737*) echo "Nope, it doesn't.";;
10738esac
10739
10740: see what type is used for mode_t
dc45a647 10741rp="What is the type used for file modes for system calls (e.g. fchmod())?"
dfe9444c 10742set mode_t modetype int stdio.h sys/types.h
dc45a647 10743eval $typedef_ask
dfe9444c 10744
dfe9444c
AD
10745: define a fucntion to check prototypes
10746$cat > protochk <<EOSH
10747$startsh
10748cc="$cc"
10749optimize="$optimize"
10750ccflags="$ccflags"
10751prototype="$prototype"
10752define="$define"
10753rm=$rm
10754EOSH
10755
10756$cat >> protochk <<'EOSH'
10757
10758$rm -f try.c
10759foo="$1"
10760shift
10761while test $# -ge 2; do
10762 case "$1" in
10763 $define) echo "#include <$2>" >> try.c ;;
10764 literal) echo "$2" >> try.c ;;
10765 esac
10766 shift 2
10767done
10768test "$prototype" = "$define" && echo '#define CAN_PROTOTYPE' >> try.c
10769cat >> try.c <<'EOCP'
10770#ifdef CAN_PROTOTYPE
10771#define _(args) args
10772#else
10773#define _(args) ()
10774#endif
10775EOCP
10776echo "$foo" >> try.c
10777echo 'int no_real_function_has_this_name _((void)) { return 0; }' >> try.c
10778$cc $optimize $ccflags -c try.c > /dev/null 2>&1
10779status=$?
10780$rm -f try.[co]
10781exit $status
10782EOSH
10783chmod +x protochk
10784$eunicefix protochk
10785
dfe9444c 10786: see what type is used for size_t
dc45a647 10787rp="What is the type used for the length parameter for string functions?"
dfe9444c 10788set size_t sizetype 'unsigned int' stdio.h sys/types.h
dc45a647 10789eval $typedef_ask
dfe9444c
AD
10790
10791: check for type of arguments to gethostbyaddr.
10792if test "X$netdb_host_type" = X -o "X$netdb_hlen_type" = X; then
10793 case "$d_gethbyaddr" in
10794 $define)
10795 $cat <<EOM
10796
10797Checking to see what type of arguments are accepted by gethostbyaddr().
10798EOM
10799 hdrs="$define sys/types.h
10800 $d_socket sys/socket.h
10801 $i_niin netinet/in.h
10802 $i_netdb netdb.h
10803 $i_unistd unistd.h"
10804 : The first arg can 'char *' or 'void *'
10805 : The second arg is some of integral type
10806 for xxx in in_addr_t 'const void *' 'const char *' 'void *' 'char *'; do
10807 for yyy in size_t long int; do
10808 case "$netdb_host_type" in
10809 '') try="extern struct hostent *gethostbyaddr($xxx, $yyy, int);"
10810 if ./protochk "$try" $hdrs; then
10811 echo "Your system accepts $xxx for the first arg."
10812 echo "...and $yyy for the second arg."
10813 netdb_host_type="$xxx"
10814 netdb_hlen_type="$yyy"
10815 fi
10816 ;;
10817 esac
10818 done
10819 done
10820 : In case none of those worked, prompt the user.
10821 case "$netdb_host_type" in
10822 '') rp='What is the type for the 1st argument to gethostbyaddr?'
10823 dflt='char *'
10824 . ./myread
10825 netdb_host_type=$ans
10826 rp='What is the type for the 2nd argument to gethostbyaddr?'
10827 dflt="$sizetype"
10828 . ./myread
10829 netdb_hlen_type=$ans
10830 ;;
10831 esac
10832 ;;
10833 *) : no gethostbyaddr, so pick harmless defaults
10834 netdb_host_type='char *'
10835 netdb_hlen_type="$sizetype"
10836 ;;
10837 esac
10838 # Remove the "const" if needed. -- but then we'll have a
10839 # prototype clash!
10840 # netdb_host_type=`echo "$netdb_host_type" | sed 's/^const //'`
10841fi
10842
10843: check for type of argument to gethostbyname.
10844if test "X$netdb_name_type" = X ; then
10845 case "$d_gethbyname" in
10846 $define)
10847 $cat <<EOM
10848
10849Checking to see what type of argument is accepted by gethostbyname().
10850EOM
10851 hdrs="$define sys/types.h
10852 $d_socket sys/socket.h
10853 $i_niin netinet/in.h
10854 $i_netdb netdb.h
10855 $i_unistd unistd.h"
10856 for xxx in "const char *" "char *"; do
10857 case "$netdb_name_type" in
10858 '') try="extern struct hostent *gethostbyname($xxx);"
10859 if ./protochk "$try" $hdrs; then
10860 echo "Your system accepts $xxx."
10861 netdb_name_type="$xxx"
10862 fi
10863 ;;
10864 esac
10865 done
10866 : In case none of those worked, prompt the user.
10867 case "$netdb_name_type" in
10868 '') rp='What is the type for the 1st argument to gethostbyname?'
10869 dflt='char *'
10870 . ./myread
10871 netdb_name_type=$ans
10872 ;;
10873 esac
10874 ;;
10875 *) : no gethostbyname, so pick harmless default
10876 netdb_name_type='char *'
10877 ;;
10878 esac
10879fi
8ff267be 10880
dfe9444c
AD
10881: check for type of 1st argument to getnetbyaddr.
10882if test "X$netdb_net_type" = X ; then
10883 case "$d_getnbyaddr" in
10884 $define)
10885 $cat <<EOM
85e6fe83 10886
dfe9444c
AD
10887Checking to see what type of 1st argument is accepted by getnetbyaddr().
10888EOM
10889 hdrs="$define sys/types.h
10890 $d_socket sys/socket.h
10891 $i_niin netinet/in.h
10892 $i_netdb netdb.h
10893 $i_unistd unistd.h"
10894 for xxx in in_addr_t "unsigned long" long "unsigned int" int; do
10895 case "$netdb_net_type" in
10896 '') try="extern struct netent *getnetbyaddr($xxx, int);"
10897 if ./protochk "$try" $hdrs; then
10898 echo "Your system accepts $xxx."
10899 netdb_net_type="$xxx"
10900 fi
10901 ;;
10902 esac
10903 done
10904 : In case none of those worked, prompt the user.
10905 case "$netdb_net_type" in
10906 '') rp='What is the type for the 1st argument to getnetbyaddr?'
10907 dflt='long'
10908 . ./myread
10909 netdb_net_type=$ans
10910 ;;
10911 esac
10912 ;;
10913 *) : no getnetbyaddr, so pick harmless default
e5c9fcd0 10914 netdb_net_type='long'
dfe9444c
AD
10915 ;;
10916 esac
10917fi
2c7991dc 10918: locate the preferred pager for this system
10919case "$pager" in
10920'')
10921 dflt=''
10922 case "$pg" in
10923 /*) dflt=$pg;;
10924 esac
10925 case "$more" in
10926 /*) dflt=$more;;
10927 esac
10928 case "$less" in
10929 /*) dflt=$less;;
10930 esac
10931 case "$dflt" in
10932 '') dflt=/usr/ucb/more;;
10933 esac
10934 ;;
10935*) dflt="$pager";;
10936esac
10937echo " "
10938fn=f/
10939rp='What pager is used on your system?'
10940. ./getfile
10941pager="$ans"
10942
dfe9444c 10943: see what type pids are declared as in the kernel
dc45a647 10944rp="What is the type of process ids on this system?"
dfe9444c 10945set pid_t pidtype int stdio.h sys/types.h
dc45a647 10946eval $typedef_ask
2304df62 10947
693762b4
AD
10948: check for length of pointer
10949echo " "
10950case "$ptrsize" in
10951'')
dc45a647 10952 $echo $n "Checking to see how big your pointers are...$c" >&4
693762b4
AD
10953 if test "$voidflags" -gt 7; then
10954 echo '#define VOID_PTR char *' > try.c
10955 else
10956 echo '#define VOID_PTR void *' > try.c
10957 fi
10958 $cat >>try.c <<'EOCP'
10959#include <stdio.h>
10960main()
10961{
10962 printf("%d\n", sizeof(VOID_PTR));
10963 exit(0);
10964}
10965EOCP
10966 set try
dc45a647 10967 if eval $compile_ok; then
693762b4 10968 ptrsize=`./try`
dc45a647 10969 $echo " $ptrsize bytes." >&4
693762b4
AD
10970 else
10971 dflt='4'
10972 echo "(I can't seem to compile the test program. Guessing...)" >&4
10973 rp="What is the size of a pointer (in bytes)?"
10974 . ./myread
10975 ptrsize="$ans"
10976 fi
10977 ;;
10978esac
10979$rm -f try.c try
10980
a0d0e21e
LW
10981: see if ar generates random libraries by itself
10982echo " "
10983echo "Checking how to generate random libraries on your machine..." >&4
10984echo 'int bar1() { return bar2(); }' > bar1.c
10985echo 'int bar2() { return 2; }' > bar2.c
10986$cat > foo.c <<'EOP'
10987main() { printf("%d\n", bar1()); exit(0); }
10988EOP
10989$cc $ccflags -c bar1.c >/dev/null 2>&1
10990$cc $ccflags -c bar2.c >/dev/null 2>&1
10991$cc $ccflags -c foo.c >/dev/null 2>&1
dfe9444c
AD
10992$ar rc bar$_a bar2$_o bar1$_o >/dev/null 2>&1
10993if $cc $ccflags $ldflags -o foobar foo$_o bar$_a $libs > /dev/null 2>&1 &&
a0d0e21e 10994 ./foobar >/dev/null 2>&1; then
4e2a5f63 10995 echo "$ar appears to generate random libraries itself."
a0d0e21e
LW
10996 orderlib=false
10997 ranlib=":"
dfe9444c
AD
10998elif $ar ts bar$_a >/dev/null 2>&1 &&
10999 $cc $ccflags $ldflags -o foobar foo$_o bar$_a $libs > /dev/null 2>&1 &&
a0d0e21e 11000 ./foobar >/dev/null 2>&1; then
4e2a5f63 11001 echo "a table of contents needs to be added with '$ar ts'."
a0d0e21e 11002 orderlib=false
dfe9444c 11003 ranlib="$ar ts"
a0d0e21e 11004else
ecfc5424
AD
11005 case "$ranlib" in
11006 :) ranlib='';;
11007 '')
11008 ranlib=`./loc ranlib X /usr/bin /bin /usr/local/bin`
11009 $test -f $ranlib || ranlib=''
11010 ;;
11011 esac
a0d0e21e 11012 if $test -n "$ranlib"; then
ecfc5424 11013 echo "your system has '$ranlib'; we'll use that."
a0d0e21e
LW
11014 orderlib=false
11015 else
11016 echo "your system doesn't seem to support random libraries"
11017 echo "so we'll use lorder and tsort to order the libraries."
11018 orderlib=true
11019 ranlib=":"
11020 fi
11021fi
11022$rm -f foo* bar*
11023
dfe9444c
AD
11024: check for type of arguments to select.
11025case "$selecttype" in
11026'') case "$d_select" in
11027 $define)
11028 $cat <<EOM
11029Checking to see what type of arguments are accepted by select().
11030EOM
11031 hdrs="$define sys/types.h
11032 $i_systime sys/time.h
11033 $i_sysselct sys/select.h
11034 $d_socket sys/socket.h"
11035 : The first arg can be int, unsigned, or size_t
11036 : The last arg may or may not be 'const'
11037 val=''
7f3d1cf1
BH
11038 : void pointer has been seen but using that
11039 : breaks the selectminbits test
11040 for xxx in 'fd_set *' 'int *'; do
1cfa4ec7 11041 for nfd in 'int' 'size_t' 'unsigned long' 'unsigned' ; do
dfe9444c
AD
11042 for tmo in 'struct timeval *' 'const struct timeval *'; do
11043 case "$val" in
11044 '') try="extern select _(($nfd, $xxx, $xxx, $xxx, $tmo));"
11045 if ./protochk "$try" $hdrs; then
11046 echo "Your system accepts $xxx."
11047 val="$xxx"
11048 fi
11049 ;;
11050 esac
11051 done
11052 done
11053 done
11054 case "$val" in
11055 '') rp='What is the type for the 2nd, 3rd, and 4th arguments to select?'
11056 case "$d_fd_set" in
11057 $define) dflt="fd_set *" ;;
11058 *) dflt="int *" ;;
11059 esac
11060 . ./myread
11061 val=$ans
11062 ;;
a0d0e21e 11063 esac
dfe9444c 11064 selecttype="$val"
a0d0e21e 11065 ;;
dfe9444c
AD
11066 *) : no select, so pick a harmless default
11067 selecttype='int *'
a0d0e21e
LW
11068 ;;
11069 esac
a0d0e21e
LW
11070 ;;
11071esac
2304df62 11072
5ff3f7a4
GS
11073: check for the select 'width'
11074case "$selectminbits" in
11075'') case "$d_select" in
11076 $define)
11077 $cat <<EOM
11078
85ab1d1d 11079Checking to see on how many bits at a time your select() operates...
5ff3f7a4
GS
11080EOM
11081 $cat >try.c <<EOCP
11082#include <sys/types.h>
11083#$i_time I_TIME
11084#$i_systime I_SYS_TIME
11085#$i_systimek I_SYS_TIME_KERNEL
11086#ifdef I_TIME
11087# include <time.h>
11088#endif
11089#ifdef I_SYS_TIME
11090# ifdef I_SYS_TIME_KERNEL
11091# define KERNEL
11092# endif
11093# include <sys/time.h>
11094# ifdef I_SYS_TIME_KERNEL
11095# undef KERNEL
11096# endif
11097#endif
11098#$i_sysselct I_SYS_SELECT
11099#ifdef I_SYS_SELECT
11100#include <sys/select.h>
11101#endif
11102#include <stdio.h>
fb164848
JH
11103$selecttype b;
11104#define S sizeof(*(b))
5ff3f7a4
GS
11105#define MINBITS 64
11106#define NBYTES (S * 8 > MINBITS ? S : MINBITS/8)
11107#define NBITS (NBYTES * 8)
11108int main() {
11109 char s[NBYTES];
5ff3f7a4
GS
11110 struct timeval t;
11111 int i;
11112 FILE* fp;
11113 int fd;
11114
11115 fclose(stdin);
11116 fp = fopen("try.c", "r");
11117 if (fp == 0)
11118 exit(1);
11119 fd = fileno(fp);
11120 if (fd < 0)
11121 exit(2);
11122 b = ($selecttype)s;
11123 for (i = 0; i < NBITS; i++)
11124 FD_SET(i, b);
11125 t.tv_sec = 0;
11126 t.tv_usec = 0;
11127 select(fd + 1, b, 0, 0, &t);
11128 for (i = NBITS - 1; i > fd && FD_ISSET(i, b); i--);
11129 printf("%d\n", i + 1);
11130 return 0;
11131}
11132EOCP
11133 set try
11134 if eval $compile_ok; then
11135 selectminbits=`./try`
85ab1d1d 11136 case "$selectminbits" in
fb164848
JH
11137 '') cat >&4 <<EOM
11138Cannot figure out on how many bits at a time your select() operates.
11139I'll play safe and guess it is 32 bits.
11140EOM
11141 selectminbits=32
11142 bits="32 bits"
11143 ;;
85ab1d1d
JH
11144 1) bits="1 bit" ;;
11145 *) bits="$selectminbits bits" ;;
11146 esac
11147 echo "Your select() operates on $bits at a time." >&4
5ff3f7a4
GS
11148 else
11149 rp='What is the minimum number of bits your select() operates on?'
11150 case "$byteorder" in
11151 1234|12345678) dflt=32 ;;
11152 *) dflt=1 ;;
11153 esac
11154 . ./myread
11155 val=$ans
11156 selectminbits="$val"
11157 fi
11158 $rm -f try.* try
11159 ;;
11160 *) : no select, so pick a harmless default
11161 selectminbits='32'
11162 ;;
11163 esac
11164 ;;
11165esac
11166
8e07c86e
AD
11167: Trace out the files included by signal.h, then look for SIGxxx names.
11168: Remove SIGARRAYSIZE used by HPUX.
4633a7c4 11169: Remove SIGTYP void lines used by OS2.
8e07c86e
AD
11170xxx=`echo '#include <signal.h>' |
11171 $cppstdin $cppminus $cppflags 2>/dev/null |
11172 $grep '^[ ]*#.*include' |
11173 $awk "{print \\$$fieldn}" | $sed 's!"!!g' | $sort | $uniq`
11174: Check this list of files to be sure we have parsed the cpp output ok.
11175: This will also avoid potentially non-existent files, such
11176: as ../foo/bar.h
11177xxxfiles=''
11178for xx in $xxx /dev/null ; do
11179 $test -f "$xx" && xxxfiles="$xxxfiles $xx"
11180done
11181: If we have found no files, at least try signal.h
11182case "$xxxfiles" in
11183'') xxxfiles=`./findhdr signal.h` ;;
11184esac
11185xxx=`awk '
4633a7c4 11186$1 ~ /^#define$/ && $2 ~ /^SIG[A-Z0-9]*$/ && $2 !~ /SIGARRAYSIZE/ && $3 !~ /void/ {
8e07c86e
AD
11187 print substr($2, 4, 20)
11188}
4633a7c4 11189$1 == "#" && $2 ~ /^define$/ && $3 ~ /^SIG[A-Z0-9]*$/ && $3 !~ /SIGARRAYSIZE/ && $4 !~ /void/ {
8e07c86e
AD
11190 print substr($3, 4, 20)
11191}' $xxxfiles`
11192: Append some common names just in case the awk scan failed.
11193xxx="$xxx ABRT ALRM BUS CHLD CLD CONT DIL EMT FPE HUP ILL INT IO IOT KILL"
11194xxx="$xxx LOST PHONE PIPE POLL PROF PWR QUIT SEGV STKFLT STOP SYS TERM TRAP"
11195xxx="$xxx TSTP TTIN TTOU URG USR1 USR2 USR3 USR4 VTALRM"
11196xxx="$xxx WINCH WIND WINDOW XCPU XFSZ"
11197: generate a few handy files for later
dc45a647 11198$cat > signal.c <<'EOCP'
4633a7c4
LW
11199#include <sys/types.h>
11200#include <signal.h>
dc45a647 11201#include <stdio.h>
4633a7c4 11202int main() {
760ac839
LW
11203
11204/* Strange style to avoid deeply-nested #if/#else/#endif */
11205#ifndef NSIG
11206# ifdef _NSIG
11207# define NSIG (_NSIG)
11208# endif
11209#endif
11210
11211#ifndef NSIG
11212# ifdef SIGMAX
11213# define NSIG (SIGMAX+1)
11214# endif
11215#endif
11216
11217#ifndef NSIG
11218# ifdef SIG_MAX
11219# define NSIG (SIG_MAX+1)
11220# endif
11221#endif
11222
11223#ifndef NSIG
11224# ifdef MAXSIG
11225# define NSIG (MAXSIG+1)
11226# endif
4633a7c4 11227#endif
760ac839
LW
11228
11229#ifndef NSIG
11230# ifdef MAX_SIG
11231# define NSIG (MAX_SIG+1)
11232# endif
11233#endif
11234
11235#ifndef NSIG
11236# ifdef SIGARRAYSIZE
11237# define NSIG (SIGARRAYSIZE+1) /* Not sure of the +1 */
11238# endif
11239#endif
11240
11241#ifndef NSIG
11242# ifdef _sys_nsig
11243# define NSIG (_sys_nsig) /* Solaris 2.5 */
11244# endif
11245#endif
11246
11247/* Default to some arbitrary number that's big enough to get most
11248 of the common signals.
11249*/
11250#ifndef NSIG
11251# define NSIG 50
4633a7c4 11252#endif
760ac839
LW
11253
11254printf("NSIG %d\n", NSIG);
11255
dc45a647
MB
11256#ifndef JUST_NSIG
11257
11258EOCP
11259
28e8609d 11260echo $xxx | $tr ' ' $trnl | $sort | $uniq | $awk '
8e07c86e
AD
11261{
11262 printf "#ifdef SIG"; printf $1; printf "\n"
11263 printf "printf(\""; printf $1; printf " %%d\\n\",SIG";
11264 printf $1; printf ");\n"
11265 printf "#endif\n"
2304df62 11266}
2304df62 11267END {
dc45a647 11268 printf "#endif /* JUST_NSIG */\n";
8e07c86e 11269 printf "}\n";
2304df62 11270}
4633a7c4
LW
11271' >>signal.c
11272$cat >signal.awk <<'EOP'
11273BEGIN { ndups = 0 }
11274$1 ~ /^NSIG$/ { nsig = $2 }
11275($1 !~ /^NSIG$/) && (NF == 2) {
11276 if ($2 > maxsig) { maxsig = $2 }
11277 if (sig_name[$2]) {
11278 dup_name[ndups] = $1
11279 dup_num[ndups] = $2
11280 ndups++
11281 }
11282 else {
11283 sig_name[$2] = $1
11284 sig_num[$2] = $2
11285 }
11286
11287}
11288END {
11289 if (nsig == 0) { nsig = maxsig + 1 }
11290 for (n = 1; n < nsig; n++) {
11291 if (sig_name[n]) {
11292 printf("%s %d\n", sig_name[n], sig_num[n])
11293 }
11294 else {
11295 printf("NUM%d %d\n", n, n)
11296 }
11297 }
11298 for (n = 0; n < ndups; n++) {
11299 printf("%s %d\n", dup_name[n], dup_num[n])
11300 }
11301}
11302EOP
11303$cat >signal_cmd <<EOS
8e07c86e 11304$startsh
dc45a647
MB
11305if $test -s signal.lst; then
11306 echo "Using your existing signal.lst file"
11307 exit 0
11308fi
11309xxx="$xxx"
11310EOS
11311$cat >>signal_cmd <<'EOS'
11312
11313set signal
11314if eval $compile_ok; then
dfe9444c 11315 ./signal$_exe | $sort -n +1 | $uniq | $awk -f signal.awk >signal.lst
8e07c86e 11316else
dc45a647
MB
11317 echo "(I can't seem be able to compile the whole test program)" >&4
11318 echo "(I'll try it in little pieces.)" >&4
11319 set signal -DJUST_NSIG
11320 if eval $compile_ok; then
11321 ./signal$_exe > signal.nsg
11322 $cat signal.nsg
11323 else
11324 echo "I can't seem to figure out how many signals you have." >&4
11325 echo "Guessing 50." >&4
11326 echo 'NSIG 50' > signal.nsg
11327 fi
11328 : Now look at all the signal names, one at a time.
28e8609d 11329 for xx in `echo $xxx | $tr ' ' $trnl | $sort | $uniq`; do
dc45a647
MB
11330 $cat > signal.c <<EOCP
11331#include <sys/types.h>
11332#include <signal.h>
11333#include <stdio.h>
11334int main() {
11335printf("$xx %d\n", SIG${xx});
11336return 0;
11337}
11338EOCP
11339 set signal
11340 if eval $compile; then
11341 echo "SIG${xx} found."
11342 ./signal$_exe >> signal.ls1
11343 else
11344 echo "SIG${xx} NOT found."
11345 fi
11346 done
11347 if $test -s signal.ls1; then
11348 $cat signal.nsg signal.ls1 |
11349 $sort -n +1 | $uniq | $awk -f signal.awk >signal.lst
11350 fi
11351
11352fi
11353if $test -s signal.lst; then
11354 :
11355else
11356 echo "(AAK! I can't compile the test programs -- Guessing)" >&4
8e07c86e 11357 echo 'kill -l' >signal
dc45a647 11358 set X `csh -f <signal`
8e07c86e 11359 $rm -f signal
2304df62 11360 shift
dc45a647 11361 case $# in
8e07c86e 11362 0) set HUP INT QUIT ILL TRAP ABRT EMT FPE KILL BUS SEGV SYS PIPE ALRM TERM;;
2304df62 11363 esac
28e8609d 11364 echo $@ | $tr ' ' $trnl | \
dc45a647 11365 $awk '{ printf $1; printf " %d\n", ++s; }' >signal.lst
8e07c86e 11366fi
dc45a647 11367$rm -f signal.c signal$_exe signal$_o signal.nsg signal.ls1
8e07c86e 11368EOS
4633a7c4
LW
11369chmod a+x signal_cmd
11370$eunicefix signal_cmd
8e07c86e
AD
11371
11372: generate list of signal names
11373echo " "
dfe9444c 11374case "$sig_name_init" in
6626bf4c
JH
11375'') doinit=yes ;;
11376*) case "$sig_num_init" in
11377 ''|*,*) doinit=yes ;;
11378 esac ;;
11379esac
11380case "$doinit" in
11381yes)
4633a7c4 11382 echo "Generating a list of signal names and numbers..." >&4
dc45a647 11383 . ./signal_cmd
8e07c86e
AD
11384 sig_name=`$awk '{printf "%s ", $1}' signal.lst`
11385 sig_name="ZERO $sig_name"
dfe9444c
AD
11386 sig_name_init=`$awk 'BEGIN { printf "\"ZERO\", " }
11387 { printf "\"%s\", ", $1 }
11388 END { printf "0\n" }' signal.lst`
824a2ba3
JH
11389 sig_num=`$awk '{printf "%d ", $2}' signal.lst`
11390 sig_num="0 $sig_num"
11391 sig_num_init=`$awk 'BEGIN { printf "0, " }
dfe9444c
AD
11392 { printf "%d, ", $2}
11393 END { printf "0\n"}' signal.lst`
a0d0e21e 11394 ;;
2304df62 11395esac
a0d0e21e
LW
11396echo "The following signals are available:"
11397echo " "
11398echo $sig_name | $awk \
11399'BEGIN { linelen = 0 }
11400{
8e07c86e 11401 for (i = 1; i <= NF; i++) {
a0d0e21e
LW
11402 name = "SIG" $i " "
11403 linelen = linelen + length(name)
11404 if (linelen > 70) {
11405 printf "\n"
11406 linelen = length(name)
11407 }
11408 printf "%s", name
11409 }
8e07c86e 11410 printf "\n"
a0d0e21e 11411}'
4633a7c4 11412$rm -f signal signal.c signal.awk signal.lst signal_cmd
a0d0e21e 11413
a0d0e21e
LW
11414: see what type is used for signed size_t
11415set ssize_t ssizetype int stdio.h sys/types.h
11416eval $typedef
11417dflt="$ssizetype"
11418$cat > ssize.c <<EOM
11419#include <stdio.h>
11420#include <sys/types.h>
11421#define Size_t $sizetype
11422#define SSize_t $dflt
11423main()
11424{
11425 if (sizeof(Size_t) == sizeof(SSize_t))
11426 printf("$dflt\n");
11427 else if (sizeof(Size_t) == sizeof(int))
11428 printf("int\n");
11429 else
11430 printf("long\n");
760ac839 11431 exit(0);
a0d0e21e
LW
11432}
11433EOM
11434echo " "
dfe9444c 11435set ssize
dc45a647 11436if eval $compile_ok && ./ssize > /dev/null; then
dfe9444c 11437 ssizetype=`./ssize`
a0d0e21e
LW
11438 echo "I'll be using $ssizetype for functions returning a byte count." >&4
11439else
24fef2a7 11440 $cat >&4 <<EOM
24fef2a7
AD
11441Help! I can't compile and run the ssize_t test program: please enlighten me!
11442(This is probably a misconfiguration in your system or libraries, and
11443you really ought to fix it. Still, I'll try anyway.)
a0d0e21e
LW
11444
11445I need a type that is the same size as $sizetype, but is guaranteed to
24fef2a7 11446be signed. Common values are ssize_t, int and long.
a0d0e21e
LW
11447
11448EOM
11449 rp="What signed type is the same size as $sizetype?"
11450 . ./myread
11451 ssizetype="$ans"
11452fi
dfe9444c 11453$rm -f ssize ssize.*
3fd537d4 11454
a0d0e21e
LW
11455: see what type of char stdio uses.
11456echo " "
11457if $contains 'unsigned.*char.*_ptr;' `./findhdr stdio.h` >/dev/null 2>&1 ; then
11458 echo "Your stdio uses unsigned chars." >&4
11459 stdchar="unsigned char"
11460else
11461 echo "Your stdio uses signed chars." >&4
11462 stdchar="char"
11463fi
11464
11465: see if time exists
11466echo " "
28e8609d
JH
11467if test "X$d_time" = X -o X"$timetype" = X; then
11468 if set time val -f d_time; eval $csym; $val; then
5ff3f7a4
GS
11469 echo 'time() found.' >&4
11470 val="$define"
11471 rp="What is the type returned by time() on this system?"
11472 set time_t timetype long stdio.h sys/types.h
11473 eval $typedef_ask
28e8609d 11474 else
5ff3f7a4
GS
11475 echo 'time() not found, hope that will do.' >&4
11476 val="$undef"
11477 timetype='int';
28e8609d
JH
11478 fi
11479 set d_time
11480 eval $setvar
a0d0e21e 11481fi
a0d0e21e
LW
11482
11483: see what type uids are declared as in the kernel
dc45a647
MB
11484echo " "
11485echo "Looking for the type for user ids returned by getuid()."
a0d0e21e
LW
11486set uid_t uidtype xxx stdio.h sys/types.h
11487eval $typedef
11488case "$uidtype" in
11489xxx)
11490 xxx=`./findhdr sys/user.h`
11491 set `grep '_ruid;' "$xxx" 2>/dev/null` unsigned short
11492 case $1 in
11493 unsigned) dflt="$1 $2" ;;
11494 *) dflt="$1" ;;
11495 esac
11496 ;;
4633a7c4
LW
11497*) dflt="$uidtype";;
11498esac
dc45a647
MB
11499case "$uidtype" in
11500uid_t) echo "uid_t found." ;;
11501*) rp="What is the type for user ids returned by getuid()?"
11502 . ./myread
11503 uidtype="$ans"
11504 ;;
11505esac
4633a7c4
LW
11506
11507: see if dbm.h is available
11508: see if dbmclose exists
11509set dbmclose d_dbmclose
11510eval $inlibc
11511
11512case "$d_dbmclose" in
11513$define)
11514 set dbm.h i_dbm
11515 eval $inhdr
5f80c64f
JH
11516 case "$i_dbm" in
11517 $define)
11518 val="$undef"
11519 set i_rpcsvcdbm
11520 eval $setvar
11521 ;;
11522 *) set rpcsvc/dbm.h i_rpcsvcdbm
11523 eval $inhdr
11524 ;;
11525 esac
11526 ;;
11527*) echo "We won't be including <dbm.h>"
11528 val="$undef"
11529 set i_dbm
11530 eval $setvar
11531 val="$undef"
11532 set i_rpcsvcdbm
11533 eval $setvar
11534 ;;
11535esac
11536
11537: see if this is a sys/file.h system
11538val=''
11539set sys/file.h val
11540eval $inhdr
11541
11542: do we need to include sys/file.h ?
11543case "$val" in
11544"$define")
11545 echo " "
11546 if $h_sysfile; then
11547 val="$define"
11548 echo "We'll be including <sys/file.h>." >&4
11549 else
11550 val="$undef"
11551 echo "We won't be including <sys/file.h>." >&4
11552 fi
11553 ;;
11554*)
11555 h_sysfile=false
11556 ;;
11557esac
11558set i_sysfile
11559eval $setvar
11560
11561: see if fcntl.h is there
11562val=''
11563set fcntl.h val
11564eval $inhdr
11565
11566: see if we can include fcntl.h
11567case "$val" in
11568"$define")
11569 echo " "
11570 if $h_fcntl; then
11571 val="$define"
11572 echo "We'll be including <fcntl.h>." >&4
11573 else
11574 val="$undef"
11575 if $h_sysfile; then
11576 echo "We don't need to include <fcntl.h> if we include <sys/file.h>." >&4
11577 else
11578 echo "We won't be including <fcntl.h>." >&4
11579 fi
11580 fi
11581 ;;
11582*)
11583 h_fcntl=false
11584 val="$undef"
11585 ;;
11586esac
11587set i_fcntl
11588eval $setvar
11589
11590: see if locale.h is available
11591set locale.h i_locale
11592eval $inhdr
11593
7f3d1cf1 11594: see if mach cthreads are available
13666627
JH
11595if test "X$usethreads" = "X$define"; then
11596 set mach/cthreads.h i_machcthr
11597 eval $inhdr
11598else
11599 i_machcthr="$undef"
11600fi
11601
11602
7f3d1cf1 11603
5f80c64f
JH
11604: see if this is a math.h system
11605set math.h i_math
11606eval $inhdr
11607
11608: see if ndbm.h is available
11609set ndbm.h t_ndbm
11610eval $inhdr
11611case "$t_ndbm" in
11612$define)
11613 : see if dbm_open exists
11614 set dbm_open d_dbm_open
11615 eval $inlibc
11616 case "$d_dbm_open" in
11617 $undef)
11618 t_ndbm="$undef"
11619 echo "We won't be including <ndbm.h>"
11620 ;;
11621 esac
11622 ;;
11623esac
11624val="$t_ndbm"
11625set i_ndbm
11626eval $setvar
11627
11628: see if net/errno.h is available
11629val=''
11630set net/errno.h val
11631eval $inhdr
11632
11633: Unfortunately, it causes problems on some systems. Arrgh.
11634case "$val" in
11635$define)
11636 cat > try.c <<'EOM'
11637#include <stdio.h>
11638#include <errno.h>
11639#include <net/errno.h>
11640int func()
11641{
11642 return ENOTSOCK;
11643}
11644EOM
11645 if $cc $ccflags -c try.c >/dev/null 2>&1; then
11646 echo "We'll be including <net/errno.h>." >&4
11647 else
11648 echo "We won't be including <net/errno.h>." >&4
11649 val="$undef"
11650 fi
11651 $rm -f try.* try
11652 ;;
11653esac
11654set i_neterrno
11655eval $setvar
11656
5b34fd99
JH
11657: see if this is a poll.h system
11658set poll.h i_poll
11659eval $inhdr
11660
5f80c64f
JH
11661: get C preprocessor symbols handy
11662echo " "
11663$echo $n "Hmm... $c"
11664echo $al | $tr ' ' $trnl >Cppsym.know
11665$cat <<EOSS >Cppsym
11666$startsh
11667case "\$1" in
11668-l) list=true
11669 shift
11670 ;;
11671esac
11672unknown=''
11673case "\$list\$#" in
116741|2)
11675 for sym do
11676 if $contains "^\$1$" Cppsym.true >/dev/null 2>&1; then
11677 exit 0
11678 elif $contains "^\$1$" Cppsym.know >/dev/null 2>&1; then
11679 :
11680 else
11681 unknown="\$unknown \$sym"
11682 fi
11683 done
11684 set X \$unknown
11685 shift
11686 ;;
11687esac
11688case \$# in
116890) exit 1;;
11690esac
11691echo \$* | $tr ' ' '$trnl' | $sed -e 's/\(.*\)/\\
11692#ifdef \1\\
11693exit 0; _ _ _ _\1\\ \1\\
11694#endif\\
11695/' >Cppsym\$\$
11696echo "exit 1; _ _ _" >>Cppsym\$\$
11697$cppstdin $cppminus <Cppsym\$\$ | $grep '^exit [01]; _ _' >Cppsym2\$\$
11698case "\$list" in
11699true) $awk 'NF > 5 {print substr(\$6,2,100)}' <Cppsym2\$\$ ;;
11700*)
11701 sh Cppsym2\$\$
11702 status=\$?
11703 ;;
11704esac
11705$rm -f Cppsym\$\$ Cppsym2\$\$
11706exit \$status
11707EOSS
11708chmod +x Cppsym
11709$eunicefix Cppsym
11710./Cppsym -l $al | $sort | $grep -v '^$' >Cppsym.true
11711
11712: now check the C compiler for additional symbols
11713$cat >ccsym <<EOS
11714$startsh
11715$cat >tmp.c <<EOF
11716extern int foo;
11717EOF
11718for i in \`$cc -v -c tmp.c 2>&1\`
11719do
11720 case "\$i" in
11721 -D*) echo "\$i" | $sed 's/^-D//';;
11722 -A*) $test "$gccversion" && echo "\$i" | $sed 's/^-A\(.*\)(\(.*\))/\1=\2/';;
11723 esac
11724done
11725$rm -f try.c
11726EOS
11727chmod +x ccsym
11728$eunicefix ccsym
11729./ccsym > ccsym1.raw
11730if $test -s ccsym1.raw; then
11731 $sort ccsym1.raw | $uniq >ccsym.raw
11732else
11733 mv ccsym1.raw ccsym.raw
11734fi
11735
11736$awk '/\=/ { print $0; next }
11737 { print $0"=1" }' ccsym.raw >ccsym.list
11738$awk '{ print $0"=1" }' Cppsym.true >ccsym.true
11739$comm -13 ccsym.true ccsym.list >ccsym.own
11740$comm -12 ccsym.true ccsym.list >ccsym.com
11741$comm -23 ccsym.true ccsym.list >ccsym.cpp
11742also=''
11743symbols='symbols'
11744if $test -z ccsym.raw; then
11745 echo "Your C compiler doesn't seem to define any symbol!" >&4
11746 echo " "
11747 echo "However, your C preprocessor defines the following ones:"
11748 $cat Cppsym.true
11749else
11750 if $test -s ccsym.com; then
11751 echo "Your C compiler and pre-processor define these symbols:"
11752 $sed -e 's/\(.*\)=.*/\1/' ccsym.com
11753 also='also '
11754 symbols='ones'
11755 $test "$silent" || sleep 1
11756 fi
11757 if $test -s ccsym.cpp; then
11758 $test "$also" && echo " "
11759 echo "Your C pre-processor ${also}defines the following $symbols:"
11760 $sed -e 's/\(.*\)=.*/\1/' ccsym.cpp
11761 also='further '
11762 $test "$silent" || sleep 1
11763 fi
11764 if $test -s ccsym.own; then
11765 $test "$also" && echo " "
11766 echo "Your C compiler ${also}defines the following cpp variables:"
11767 $sed -e 's/\(.*\)=1/\1/' ccsym.own
11768 $sed -e 's/\(.*\)=.*/\1/' ccsym.own | $uniq >>Cppsym.true
11769 $test "$silent" || sleep 1
11770 fi
11771fi
11772$rm -f ccsym*
11773
11774: see if this is a termio system
11775val="$undef"
11776val2="$undef"
11777val3="$undef"
11778if $test `./findhdr termios.h`; then
11779 set tcsetattr i_termios
11780 eval $inlibc
11781 val3="$i_termios"
11782fi
11783echo " "
11784case "$val3" in
11785"$define") echo "You have POSIX termios.h... good!" >&4;;
11786*) if ./Cppsym pyr; then
11787 case "`/bin/universe`" in
11788 ucb) if $test `./findhdr sgtty.h`; then
11789 val2="$define"
11790 echo "<sgtty.h> found." >&4
11791 else
11792 echo "System is pyramid with BSD universe."
11793 echo "<sgtty.h> not found--you could have problems." >&4
11794 fi;;
11795 *) if $test `./findhdr termio.h`; then
11796 val="$define"
11797 echo "<termio.h> found." >&4
11798 else
11799 echo "System is pyramid with USG universe."
11800 echo "<termio.h> not found--you could have problems." >&4
11801 fi;;
11802 esac
11803 elif ./usg; then
11804 if $test `./findhdr termio.h`; then
11805 echo "<termio.h> found." >&4
11806 val="$define"
11807 elif $test `./findhdr sgtty.h`; then
11808 echo "<sgtty.h> found." >&4
11809 val2="$define"
11810 else
11811echo "Neither <termio.h> nor <sgtty.h> found--you could have problems." >&4
11812 fi
11813 else
11814 if $test `./findhdr sgtty.h`; then
11815 echo "<sgtty.h> found." >&4
11816 val2="$define"
11817 elif $test `./findhdr termio.h`; then
11818 echo "<termio.h> found." >&4
11819 val="$define"
11820 else
11821echo "Neither <sgtty.h> nor <termio.h> found--you could have problems." >&4
11822 fi
11823 fi;;
11824esac
11825set i_termio; eval $setvar
11826val=$val2; set i_sgtty; eval $setvar
11827val=$val3; set i_termios; eval $setvar
11828
11829: see if stdarg is available
11830echo " "
11831if $test `./findhdr stdarg.h`; then
11832 echo "<stdarg.h> found." >&4
11833 valstd="$define"
11834else
11835 echo "<stdarg.h> NOT found." >&4
11836 valstd="$undef"
11837fi
11838
11839: see if varags is available
11840echo " "
11841if $test `./findhdr varargs.h`; then
11842 echo "<varargs.h> found." >&4
11843else
11844 echo "<varargs.h> NOT found, but that's ok (I hope)." >&4
11845fi
11846
11847: set up the varargs testing programs
11848$cat > varargs.c <<EOP
11849#ifdef I_STDARG
11850#include <stdarg.h>
11851#endif
11852#ifdef I_VARARGS
11853#include <varargs.h>
11854#endif
11855
11856#ifdef I_STDARG
11857int f(char *p, ...)
11858#else
11859int f(va_alist)
11860va_dcl
11861#endif
11862{
11863 va_list ap;
11864#ifndef I_STDARG
11865 char *p;
11866#endif
11867#ifdef I_STDARG
11868 va_start(ap,p);
11869#else
11870 va_start(ap);
11871 p = va_arg(ap, char *);
11872#endif
11873 va_end(ap);
11874}
11875EOP
11876$cat > varargs <<EOP
11877$startsh
11878if $cc -c $ccflags -D\$1 varargs.c >/dev/null 2>&1; then
11879 echo "true"
11880else
11881 echo "false"
11882fi
11883$rm -f varargs$_o
11884EOP
11885chmod +x varargs
11886
11887: now check which varargs header should be included
11888echo " "
11889i_varhdr=''
11890case "$valstd" in
11891"$define")
11892 if `./varargs I_STDARG`; then
11893 val='stdarg.h'
11894 elif `./varargs I_VARARGS`; then
11895 val='varargs.h'
11896 fi
11897 ;;
11898*)
11899 if `./varargs I_VARARGS`; then
11900 val='varargs.h'
11901 fi
11902 ;;
11903esac
11904case "$val" in
11905'')
11906echo "I could not find the definition for va_dcl... You have problems..." >&4
11907 val="$undef"; set i_stdarg; eval $setvar
11908 val="$undef"; set i_varargs; eval $setvar
11909 ;;
11910*)
11911 set i_varhdr
11912 eval $setvar
11913 case "$i_varhdr" in
11914 stdarg.h)
11915 val="$define"; set i_stdarg; eval $setvar
11916 val="$undef"; set i_varargs; eval $setvar
11917 ;;
11918 varargs.h)
11919 val="$undef"; set i_stdarg; eval $setvar
11920 val="$define"; set i_varargs; eval $setvar
11921 ;;
11922 esac
11923 echo "We'll include <$i_varhdr> to get va_dcl definition." >&4;;
11924esac
11925$rm -f varargs*
11926
11927: see if stddef is available
11928set stddef.h i_stddef
11929eval $inhdr
11930
11931: see if sys/access.h is available
11932set sys/access.h i_sysaccess
11933eval $inhdr
11934
11935: see if ioctl defs are in sgtty, termio, sys/filio or sys/ioctl
11936set sys/filio.h i_sysfilio
11937eval $inhdr
11938echo " "
11939if $test `./findhdr sys/ioctl.h`; then
11940 val="$define"
11941 echo '<sys/ioctl.h> found.' >&4
11942else
11943 val="$undef"
11944 if $test $i_sysfilio = "$define"; then
11945 echo '<sys/ioctl.h> NOT found.' >&4
11946 else
11947 $test $i_sgtty = "$define" && xxx="sgtty.h"
11948 $test $i_termio = "$define" && xxx="termio.h"
11949 $test $i_termios = "$define" && xxx="termios.h"
11950echo "No <sys/ioctl.h> found, assuming ioctl args are defined in <$xxx>." >&4
11951 fi
11952fi
11953set i_sysioctl
11954eval $setvar
11955
11956: see if this is a sys/param system
11957set sys/param.h i_sysparam
11958eval $inhdr
11959
11960: see if sys/resource.h has to be included
11961set sys/resource.h i_sysresrc
11962eval $inhdr
11963
11964: see if sys/security.h is available
11965set sys/security.h i_syssecrt
11966eval $inhdr
11967
11968: see if this is a sys/un.h system
11969set sys/un.h i_sysun
11970eval $inhdr
11971
11972: see if this is a syswait system
11973set sys/wait.h i_syswait
11974eval $inhdr
11975
11976: see if this is an utime system
11977set utime.h i_utime
11978eval $inhdr
11979
11980: see if this is a values.h system
11981set values.h i_values
11982eval $inhdr
11983
11984: see if this is a vfork system
11985case "$d_vfork" in
11986"$define")
11987 set vfork.h i_vfork
11988 eval $inhdr
11989 ;;
11990*)
11991 i_vfork="$undef"
11992 ;;
11993esac
11994
11995: see if gdbm.h is available
11996set gdbm.h t_gdbm
11997eval $inhdr
11998case "$t_gdbm" in
11999$define)
12000 : see if gdbm_open exists
12001 set gdbm_open d_gdbm_open
12002 eval $inlibc
12003 case "$d_gdbm_open" in
12004 $undef)
12005 t_gdbm="$undef"
12006 echo "We won't be including <gdbm.h>"
12007 ;;
12008 esac
12009 ;;
12010esac
12011val="$t_gdbm"
12012set i_gdbm
12013eval $setvar
12014
12015echo " "
12016echo "Looking for extensions..." >&4
12017tdir=`pwd`
12018cd $rsrc/ext
12019: If we are using the old config.sh, known_extensions may contain
12020: old or inaccurate or duplicate values.
12021known_extensions=''
12022nonxs_extensions=''
12023: We do not use find because it might not be available.
12024: We do not just use MANIFEST because the user may have dropped
12025: some additional extensions into the source tree and expect them
12026: to be built.
12027for xxx in * ; do
12028 case "$xxx" in
12029 DynaLoader|dynaload) ;;
12030 *) if $test -f $xxx/$xxx.xs; then
12031 known_extensions="$known_extensions $xxx"
12032 elif $test -f $xxx/Makefile.PL; then
12033 nonxs_extensions="$nonxs_extensions $xxx"
12034 else
12035 if $test -d $xxx; then
12036 # Look for nested extensions, eg. Devel/Dprof.
12037 cd $xxx
12038 for yyy in * ; do
12039 if $test -f $yyy/$yyy.xs; then
12040 known_extensions="$known_extensions $xxx/$yyy"
12041 elif $test -f $yyy/Makefile.PL; then
12042 nonxs_extensions="$nonxs_extensions $xxx/$yyy"
12043 fi
12044 done
12045 cd ..
12046 fi
12047 fi
12048 ;;
12049 esac
12050done
12051set X $nonxs_extensions
12052shift
12053nonxs_extensions="$*"
12054set X $known_extensions
12055shift
12056known_extensions="$*"
12057cd $tdir
12058
12059: Now see which are supported on this system.
12060avail_ext=''
12061for xxx in $known_extensions ; do
12062 case "$xxx" in
12063 DB_File|db_file)
12064 case "$i_db" in
12065 $define) avail_ext="$avail_ext $xxx" ;;
12066 esac
12067 ;;
12068 GDBM_File|gdbm_fil)
12069 case "$i_gdbm" in
12070 $define) avail_ext="$avail_ext $xxx" ;;
12071 esac
12072 ;;
12073 NDBM_File|ndbm_fil)
12074 case "$i_ndbm" in
12075 $define) avail_ext="$avail_ext $xxx" ;;
12076 esac
12077 ;;
12078 ODBM_File|odbm_fil)
12079 case "${i_dbm}${i_rpcsvcdbm}" in
12080 *"${define}"*) avail_ext="$avail_ext $xxx" ;;
12081 esac
12082 ;;
12083 POSIX|posix)
12084 case "$useposix" in
12085 true|define|y) avail_ext="$avail_ext $xxx" ;;
12086 esac
12087 ;;
12088 Opcode|opcode)
12089 case "$useopcode" in
12090 true|define|y) avail_ext="$avail_ext $xxx" ;;
12091 esac
12092 ;;
12093 Socket|socket)
12094 case "$d_socket" in
12095 true|$define|y) avail_ext="$avail_ext $xxx" ;;
12096 esac
12097 ;;
12098 Thread|thread)
12099 case "$usethreads" in
12100 true|$define|y) avail_ext="$avail_ext $xxx" ;;
12101 esac
12102 ;;
12103 IPC/SysV|ipc/sysv)
12104 : XXX Do we need a useipcsysv variable here
12105 case "${d_msg}${d_sem}${d_shm}" in
12106 *"${define}"*) avail_ext="$avail_ext $xxx" ;;
12107 esac
12108 ;;
12109 *) avail_ext="$avail_ext $xxx"
12110 ;;
12111 esac
12112done
12113
12114set X $avail_ext
12115shift
12116avail_ext="$*"
12117
12118: Now see which nonxs extensions are supported on this system.
12119: For now assume all are.
12120nonxs_ext=''
12121for xxx in $nonxs_extensions ; do
12122 case "$xxx" in
12123 *) nonxs_ext="$nonxs_ext $xxx"
12124 ;;
12125 esac
12126done
12127
12128set X $nonxs_ext
12129shift
12130nonxs_ext="$*"
12131
12132case $usedl in
12133$define)
12134 $cat <<EOM
12135A number of extensions are supplied with $package. You may choose to
12136compile these extensions for dynamic loading (the default), compile
12137them into the $package executable (static loading), or not include
12138them at all. Answer "none" to include no extensions.
12139Note that DynaLoader is always built and need not be mentioned here.
12140
12141EOM
12142 case "$dynamic_ext" in
12143 '') dflt="$avail_ext" ;;
12144 *) dflt="$dynamic_ext"
12145 # Perhaps we are reusing an old out-of-date config.sh.
12146 case "$hint" in
12147 previous)
12148 if test X"$dynamic_ext" != X"$avail_ext"; then
12149 $cat <<EOM
12150NOTICE: Your previous config.sh list may be incorrect.
12151The extensions now available to you are
12152 ${avail_ext}
12153but the default list from your previous config.sh is
12154 ${dynamic_ext}
12155
12156EOM
12157 fi
12158 ;;
12159 esac
12160 ;;
12161 esac
12162 case "$dflt" in
12163 '') dflt=none;;
12164 esac
12165 rp="What extensions do you wish to load dynamically?"
12166 . ./myread
12167 case "$ans" in
12168 none) dynamic_ext=' ' ;;
12169 *) dynamic_ext="$ans" ;;
12170 esac
12171
12172 case "$static_ext" in
12173 '')
12174 : Exclude those already listed in dynamic linking
12175 dflt=''
12176 for xxx in $avail_ext; do
12177 case " $dynamic_ext " in
12178 *" $xxx "*) ;;
12179 *) dflt="$dflt $xxx" ;;
12180 esac
12181 done
12182 set X $dflt
12183 shift
12184 dflt="$*"
12185 ;;
12186 *) dflt="$static_ext"
12187 ;;
12188 esac
12189
12190 case "$dflt" in
12191 '') dflt=none;;
12192 esac
12193 rp="What extensions do you wish to load statically?"
12194 . ./myread
12195 case "$ans" in
12196 none) static_ext=' ' ;;
12197 *) static_ext="$ans" ;;
12198 esac
12199 ;;
12200*)
12201 $cat <<EOM
12202A number of extensions are supplied with $package. Answer "none"
12203to include no extensions.
12204Note that DynaLoader is always built and need not be mentioned here.
12205
12206EOM
12207 case "$static_ext" in
12208 '') dflt="$avail_ext" ;;
12209 *) dflt="$static_ext"
12210 # Perhaps we are reusing an old out-of-date config.sh.
12211 case "$hint" in
12212 previous)
12213 if test X"$static_ext" != X"$avail_ext"; then
12214 $cat <<EOM
12215NOTICE: Your previous config.sh list may be incorrect.
12216The extensions now available to you are
12217 ${avail_ext}
12218but the default list from your previous config.sh is
12219 ${static_ext}
12220
12221EOM
12222 fi
12223 ;;
12224 esac
12225 ;;
12226 esac
12227 : Exclude those that are not xs extensions
12228 case "$dflt" in
12229 '') dflt=none;;
12230 esac
12231 rp="What extensions do you wish to include?"
12232 . ./myread
12233 case "$ans" in
12234 none) static_ext=' ' ;;
12235 *) static_ext="$ans" ;;
12236 esac
12237 ;;
12238esac
12239
12240set X $dynamic_ext $static_ext $nonxs_ext
12241shift
12242extensions="$*"
12243
12244: Remove build directory name from cppstdin so it can be used from
12245: either the present location or the final installed location.
12246echo " "
12247: Get out of the UU directory to get correct path name.
12248cd ..
12249case "$cppstdin" in
12250`pwd`/cppstdin)
12251 echo "Stripping down cppstdin path name"
12252 cppstdin=cppstdin
12253 ;;
12254esac
12255cd UU
12256
12257: end of configuration questions
12258echo " "
12259echo "End of configuration questions."
12260echo " "
12261
12262: back to where it started
12263if test -d ../UU; then
12264 cd ..
12265fi
12266
12267: configuration may be patched via a 'config.over' file
12268if $test -f config.over; then
12269 echo " "
12270 dflt=y
12271 rp='I see a config.over file. Do you wish to load it?'
12272 . UU/myread
12273 case "$ans" in
12274 n*) echo "OK, I'll ignore it.";;
12275 *) . ./config.over
12276 echo "Configuration override changes have been loaded."
12277 ;;
12278 esac
12279fi
12280
12281: in case they want portability, strip down executable paths
12282case "$d_portable" in
12283"$define")
12284 echo " "
12285 echo "Stripping down executable paths..." >&4
12286 for file in $loclist $trylist; do
12287 if test X$file != Xln -a X$file != Xar -o X$osname != Xos2; then
12288 eval $file="\$file"
12289 fi
12290 done
12291 ;;
12292esac
12293
12294: create config.sh file
12295echo " "
12296echo "Creating config.sh..." >&4
12297$spitshell <<EOT >config.sh
12298$startsh
12299#
12300# This file was produced by running the Configure script. It holds all the
12301# definitions figured out by Configure. Should you modify one of these values,
12302# do not forget to propagate your changes by running "Configure -der". You may
12303# instead choose to run each of the .SH files by yourself, or "Configure -S".
12304#
12305
12306# Package name : $package
12307# Source directory : $src
12308# Configuration time: $cf_time
12309# Configured by : $cf_by
12310# Target system : $myuname
12311
12312Author='$Author'
12313Date='$Date'
12314Header='$Header'
12315Id='$Id'
12316Locker='$Locker'
12317Log='$Log'
12318Mcc='$Mcc'
12319RCSfile='$RCSfile'
12320Revision='$Revision'
12321Source='$Source'
12322State='$State'
12323_a='$_a'
12324_exe='$_exe'
12325_o='$_o'
12326afs='$afs'
12327alignbytes='$alignbytes'
12328ansi2knr='$ansi2knr'
12329aphostname='$aphostname'
12330apiversion='$apiversion'
12331ar='$ar'
12332archlib='$archlib'
12333archlibexp='$archlibexp'
12334archname64='$archname64'
12335archname='$archname'
12336archobjs='$archobjs'
12337awk='$awk'
12338baserev='$baserev'
12339bash='$bash'
12340bin='$bin'
12341binexp='$binexp'
12342bison='$bison'
12343byacc='$byacc'
12344byteorder='$byteorder'
12345c='$c'
12346castflags='$castflags'
12347cat='$cat'
12348cc='$cc'
12349cccdlflags='$cccdlflags'
12350ccdlflags='$ccdlflags'
12351ccflags='$ccflags'
12352cf_by='$cf_by'
12353cf_email='$cf_email'
12354cf_time='$cf_time'
12355chgrp='$chgrp'
12356chmod='$chmod'
12357chown='$chown'
12358clocktype='$clocktype'
12359comm='$comm'
12360compress='$compress'
12361contains='$contains'
12362cp='$cp'
12363cpio='$cpio'
12364cpp='$cpp'
12365cpp_stuff='$cpp_stuff'
12366cppflags='$cppflags'
12367cpplast='$cpplast'
12368cppminus='$cppminus'
12369cpprun='$cpprun'
12370cppstdin='$cppstdin'
12371cryptlib='$cryptlib'
12372csh='$csh'
12373d_Gconvert='$d_Gconvert'
12374d_access='$d_access'
12375d_accessx='$d_accessx'
12376d_alarm='$d_alarm'
12377d_archlib='$d_archlib'
12378d_attribut='$d_attribut'
12379d_bcmp='$d_bcmp'
12380d_bcopy='$d_bcopy'
12381d_bsd='$d_bsd'
12382d_bsdgetpgrp='$d_bsdgetpgrp'
12383d_bsdsetpgrp='$d_bsdsetpgrp'
12384d_bzero='$d_bzero'
12385d_casti32='$d_casti32'
12386d_castneg='$d_castneg'
12387d_charvspr='$d_charvspr'
12388d_chown='$d_chown'
12389d_chroot='$d_chroot'
12390d_chsize='$d_chsize'
12391d_closedir='$d_closedir'
de4597cb 12392d_cmsghdr_s='$d_cmsghdr_s'
5f80c64f
JH
12393d_const='$d_const'
12394d_crypt='$d_crypt'
12395d_csh='$d_csh'
12396d_cuserid='$d_cuserid'
12397d_dbl_dig='$d_dbl_dig'
12398d_dbmclose64='$d_dbmclose64'
12399d_dbminit64='$d_dbminit64'
12400d_delete64='$d_delete64'
12401d_difftime='$d_difftime'
de4597cb 12402d_dirent64_s='$d_dirent64_s'
5f80c64f
JH
12403d_dirnamlen='$d_dirnamlen'
12404d_dlerror='$d_dlerror'
12405d_dlopen='$d_dlopen'
12406d_dlsymun='$d_dlsymun'
12407d_dosuid='$d_dosuid'
12408d_drand48proto='$d_drand48proto'
12409d_dup2='$d_dup2'
12410d_eaccess='$d_eaccess'
12411d_endgrent='$d_endgrent'
12412d_endhent='$d_endhent'
12413d_endnent='$d_endnent'
12414d_endpent='$d_endpent'
12415d_endpwent='$d_endpwent'
12416d_endsent='$d_endsent'
12417d_eofnblk='$d_eofnblk'
12418d_eunice='$d_eunice'
12419d_fchmod='$d_fchmod'
12420d_fchown='$d_fchown'
12421d_fcntl='$d_fcntl'
12422d_fd_macros='$d_fd_macros'
12423d_fd_set='$d_fd_set'
12424d_fds_bits='$d_fds_bits'
12425d_fetch64='$d_fetch64'
12426d_fgetpos64='$d_fgetpos64'
12427d_fgetpos='$d_fgetpos'
12428d_firstkey64='$d_firstkey64'
12429d_flexfnam='$d_flexfnam'
de4597cb 12430d_flock64_s='$d_flock64_s'
5f80c64f
JH
12431d_flock='$d_flock'
12432d_fopen64='$d_fopen64'
12433d_fork='$d_fork'
12434d_fpathconf='$d_fpathconf'
12435d_freopen64='$d_freopen64'
12436d_fseek64='$d_fseek64'
12437d_fseeko64='$d_fseeko64'
12438d_fseeko='$d_fseeko'
12439d_fsetpos64='$d_fsetpos64'
12440d_fsetpos='$d_fsetpos'
12441d_fstat64='$d_fstat64'
12442d_ftell64='$d_ftell64'
12443d_ftello64='$d_ftello64'
12444d_ftello='$d_ftello'
12445d_ftime='$d_ftime'
12446d_ftruncate64='$d_ftruncate64'
12447d_getgrent='$d_getgrent'
12448d_getgrps='$d_getgrps'
12449d_gethbyaddr='$d_gethbyaddr'
12450d_gethbyname='$d_gethbyname'
12451d_gethent='$d_gethent'
12452d_gethname='$d_gethname'
12453d_gethostprotos='$d_gethostprotos'
12454d_getlogin='$d_getlogin'
12455d_getnbyaddr='$d_getnbyaddr'
12456d_getnbyname='$d_getnbyname'
12457d_getnent='$d_getnent'
12458d_getnetprotos='$d_getnetprotos'
12459d_getpbyname='$d_getpbyname'
12460d_getpbynumber='$d_getpbynumber'
12461d_getpent='$d_getpent'
12462d_getpgid='$d_getpgid'
12463d_getpgrp2='$d_getpgrp2'
12464d_getpgrp='$d_getpgrp'
12465d_getppid='$d_getppid'
12466d_getprior='$d_getprior'
12467d_getprotoprotos='$d_getprotoprotos'
12468d_getpwent='$d_getpwent'
12469d_getsbyname='$d_getsbyname'
12470d_getsbyport='$d_getsbyport'
12471d_getsent='$d_getsent'
12472d_getservprotos='$d_getservprotos'
12473d_gettimeod='$d_gettimeod'
12474d_gnulibc='$d_gnulibc'
12475d_grpasswd='$d_grpasswd'
12476d_htonl='$d_htonl'
12477d_index='$d_index'
12478d_inetaton='$d_inetaton'
12479d_ino64t='$d_ino64t'
12480d_int64t='$d_int64t'
de4597cb 12481d_iovec_s='$d_iovec_s'
5f80c64f
JH
12482d_isascii='$d_isascii'
12483d_killpg='$d_killpg'
12484d_lchown='$d_lchown'
12485d_link='$d_link'
12486d_locconv='$d_locconv'
12487d_lockf64='$d_lockf64'
12488d_lockf='$d_lockf'
12489d_longdbl='$d_longdbl'
12490d_longlong='$d_longlong'
12491d_lseek64='$d_lseek64'
12492d_lstat64='$d_lstat64'
12493d_lstat='$d_lstat'
12494d_mblen='$d_mblen'
12495d_mbstowcs='$d_mbstowcs'
12496d_mbtowc='$d_mbtowc'
12497d_memcmp='$d_memcmp'
12498d_memcpy='$d_memcpy'
12499d_memmove='$d_memmove'
12500d_memset='$d_memset'
12501d_mkdir='$d_mkdir'
12502d_mkfifo='$d_mkfifo'
12503d_mktime='$d_mktime'
12504d_msg='$d_msg'
de4597cb
JH
12505d_msg_ctrunc='$d_msg_ctrunc'
12506d_msg_dontroute='$d_msg_dontroute'
12507d_msg_oob='$d_msg_oob'
12508d_msg_peek='$d_msg_peek'
12509d_msg_proxy='$d_msg_proxy'
5f80c64f
JH
12510d_msgctl='$d_msgctl'
12511d_msgget='$d_msgget'
de4597cb 12512d_msghdr_s='$d_msghdr_s'
5f80c64f
JH
12513d_msgrcv='$d_msgrcv'
12514d_msgsnd='$d_msgsnd'
12515d_mymalloc='$d_mymalloc'
12516d_nextkey64='$d_nextkey64'
12517d_nice='$d_nice'
12518d_off64t='$d_off64t'
ef4af2be 12519d_old_pthread_create_joinable='$d_old_pthread_create_joinable'
5f80c64f
JH
12520d_oldpthreads='$d_oldpthreads'
12521d_oldsock='$d_oldsock'
12522d_open3='$d_open3'
12523d_open64='$d_open64'
12524d_opendir64='$d_opendir64'
12525d_pathconf='$d_pathconf'
12526d_pause='$d_pause'
12527d_phostname='$d_phostname'
12528d_pipe='$d_pipe'
12529d_poll='$d_poll'
12530d_portable='$d_portable'
12531d_pthread_yield='$d_pthread_yield'
5f80c64f
JH
12532d_pwage='$d_pwage'
12533d_pwchange='$d_pwchange'
12534d_pwclass='$d_pwclass'
12535d_pwcomment='$d_pwcomment'
12536d_pwexpire='$d_pwexpire'
12537d_pwgecos='$d_pwgecos'
12538d_pwpasswd='$d_pwpasswd'
12539d_pwquota='$d_pwquota'
12540d_readdir64='$d_readdir64'
12541d_readdir='$d_readdir'
12542d_readlink='$d_readlink'
de4597cb
JH
12543d_readv='$d_readv'
12544d_recvmsg='$d_recvmsg'
5f80c64f
JH
12545d_rename='$d_rename'
12546d_rewinddir='$d_rewinddir'
12547d_rmdir='$d_rmdir'
12548d_safebcpy='$d_safebcpy'
12549d_safemcpy='$d_safemcpy'
12550d_sanemcmp='$d_sanemcmp'
12551d_sched_yield='$d_sched_yield'
de4597cb 12552d_scm_rights='$d_scm_rights'
5f80c64f
JH
12553d_seekdir64='$d_seekdir64'
12554d_seekdir='$d_seekdir'
12555d_select='$d_select'
12556d_sem='$d_sem'
12557d_semctl='$d_semctl'
12558d_semctl_semid_ds='$d_semctl_semid_ds'
12559d_semctl_semun='$d_semctl_semun'
12560d_semget='$d_semget'
12561d_semop='$d_semop'
de4597cb 12562d_sendmsg='$d_sendmsg'
5f80c64f
JH
12563d_setegid='$d_setegid'
12564d_seteuid='$d_seteuid'
12565d_setgrent='$d_setgrent'
12566d_setgrps='$d_setgrps'
12567d_sethent='$d_sethent'
12568d_setlinebuf='$d_setlinebuf'
12569d_setlocale='$d_setlocale'
12570d_setnent='$d_setnent'
12571d_setpent='$d_setpent'
12572d_setpgid='$d_setpgid'
12573d_setpgrp2='$d_setpgrp2'
12574d_setpgrp='$d_setpgrp'
12575d_setprior='$d_setprior'
12576d_setpwent='$d_setpwent'
12577d_setregid='$d_setregid'
12578d_setresgid='$d_setresgid'
12579d_setresuid='$d_setresuid'
12580d_setreuid='$d_setreuid'
12581d_setrgid='$d_setrgid'
12582d_setruid='$d_setruid'
12583d_setsent='$d_setsent'
12584d_setsid='$d_setsid'
12585d_setvbuf='$d_setvbuf'
12586d_sfio='$d_sfio'
12587d_shm='$d_shm'
12588d_shmat='$d_shmat'
12589d_shmatprototype='$d_shmatprototype'
12590d_shmctl='$d_shmctl'
12591d_shmdt='$d_shmdt'
12592d_shmget='$d_shmget'
12593d_sigaction='$d_sigaction'
12594d_sigsetjmp='$d_sigsetjmp'
12595d_socket='$d_socket'
12596d_sockpair='$d_sockpair'
12597d_stat64='$d_stat64'
12598d_statblks='$d_statblks'
12599d_stdio_cnt_lval='$d_stdio_cnt_lval'
12600d_stdio_ptr_lval='$d_stdio_ptr_lval'
12601d_stdiobase='$d_stdiobase'
12602d_stdstdio='$d_stdstdio'
12603d_store64='$d_store64'
12604d_strchr='$d_strchr'
12605d_strcoll='$d_strcoll'
12606d_strctcpy='$d_strctcpy'
12607d_strerrm='$d_strerrm'
12608d_strerror='$d_strerror'
12609d_strtod='$d_strtod'
12610d_strtol='$d_strtol'
12611d_strtoul='$d_strtoul'
12612d_strxfrm='$d_strxfrm'
12613d_suidsafe='$d_suidsafe'
12614d_symlink='$d_symlink'
12615d_syscall='$d_syscall'
12616d_sysconf='$d_sysconf'
12617d_sysernlst='$d_sysernlst'
12618d_syserrlst='$d_syserrlst'
12619d_system='$d_system'
12620d_tcgetpgrp='$d_tcgetpgrp'
12621d_tcsetpgrp='$d_tcsetpgrp'
12622d_telldir64='$d_telldir64'
12623d_telldir='$d_telldir'
12624d_time='$d_time'
12625d_times='$d_times'
12626d_tmpfile64='$d_tmpfile64'
12627d_truncate64='$d_truncate64'
12628d_truncate='$d_truncate'
12629d_tzname='$d_tzname'
12630d_umask='$d_umask'
12631d_uname='$d_uname'
12632d_union_semun='$d_union_semun'
12633d_vfork='$d_vfork'
12634d_void_closedir='$d_void_closedir'
12635d_voidsig='$d_voidsig'
12636d_voidtty='$d_voidtty'
12637d_volatile='$d_volatile'
12638d_vprintf='$d_vprintf'
12639d_wait4='$d_wait4'
12640d_waitpid='$d_waitpid'
12641d_wcstombs='$d_wcstombs'
12642d_wctomb='$d_wctomb'
de4597cb 12643d_writev='$d_writev'
5f80c64f
JH
12644d_xenix='$d_xenix'
12645date='$date'
12646db_hashtype='$db_hashtype'
12647db_prefixtype='$db_prefixtype'
12648defvoidused='$defvoidused'
12649direntrytype='$direntrytype'
12650dlext='$dlext'
12651dlsrc='$dlsrc'
12652doublesize='$doublesize'
12653drand01='$drand01'
12654dynamic_ext='$dynamic_ext'
12655eagain='$eagain'
12656ebcdic='$ebcdic'
12657echo='$echo'
12658egrep='$egrep'
12659emacs='$emacs'
12660eunicefix='$eunicefix'
12661exe_ext='$exe_ext'
12662expr='$expr'
12663extensions='$extensions'
12664find='$find'
12665firstmakefile='$firstmakefile'
12666flex='$flex'
12667fpostype='$fpostype'
12668freetype='$freetype'
12669full_csh='$full_csh'
12670full_sed='$full_sed'
12671gccversion='$gccversion'
12672gidtype='$gidtype'
12673glibpth='$glibpth'
12674grep='$grep'
12675groupcat='$groupcat'
12676groupstype='$groupstype'
12677gzip='$gzip'
12678h_fcntl='$h_fcntl'
12679h_sysfile='$h_sysfile'
12680hint='$hint'
12681hostcat='$hostcat'
12682huge='$huge'
12683i_arpainet='$i_arpainet'
12684i_bsdioctl='$i_bsdioctl'
12685i_db='$i_db'
12686i_dbm='$i_dbm'
12687i_dirent='$i_dirent'
12688i_dld='$i_dld'
12689i_dlfcn='$i_dlfcn'
12690i_fcntl='$i_fcntl'
12691i_float='$i_float'
12692i_gdbm='$i_gdbm'
12693i_grp='$i_grp'
12694i_inttypes='$i_inttypes'
12695i_limits='$i_limits'
12696i_locale='$i_locale'
7f3d1cf1 12697i_machcthr='$i_machcthr'
5f80c64f
JH
12698i_malloc='$i_malloc'
12699i_math='$i_math'
12700i_memory='$i_memory'
12701i_ndbm='$i_ndbm'
12702i_netdb='$i_netdb'
12703i_neterrno='$i_neterrno'
12704i_niin='$i_niin'
5b34fd99 12705i_poll='$i_poll'
5f80c64f
JH
12706i_pwd='$i_pwd'
12707i_rpcsvcdbm='$i_rpcsvcdbm'
12708i_sfio='$i_sfio'
12709i_sgtty='$i_sgtty'
12710i_stdarg='$i_stdarg'
12711i_stddef='$i_stddef'
12712i_stdlib='$i_stdlib'
12713i_string='$i_string'
12714i_sysaccess='$i_sysaccess'
12715i_sysdir='$i_sysdir'
12716i_sysfile='$i_sysfile'
12717i_sysfilio='$i_sysfilio'
12718i_sysin='$i_sysin'
12719i_sysioctl='$i_sysioctl'
12720i_sysndir='$i_sysndir'
12721i_sysparam='$i_sysparam'
12722i_sysresrc='$i_sysresrc'
12723i_syssecrt='$i_syssecrt'
12724i_sysselct='$i_sysselct'
12725i_syssockio='$i_syssockio'
12726i_sysstat='$i_sysstat'
12727i_systime='$i_systime'
12728i_systimek='$i_systimek'
12729i_systimes='$i_systimes'
12730i_systypes='$i_systypes'
de4597cb 12731i_sysuio='$i_sysuio'
5f80c64f
JH
12732i_sysun='$i_sysun'
12733i_syswait='$i_syswait'
12734i_termio='$i_termio'
12735i_termios='$i_termios'
12736i_time='$i_time'
12737i_unistd='$i_unistd'
12738i_utime='$i_utime'
12739i_values='$i_values'
12740i_varargs='$i_varargs'
12741i_varhdr='$i_varhdr'
12742i_vfork='$i_vfork'
12743ignore_versioned_solibs='$ignore_versioned_solibs'
12744incpath='$incpath'
12745inews='$inews'
12746installarchlib='$installarchlib'
12747installbin='$installbin'
12748installman1dir='$installman1dir'
12749installman3dir='$installman3dir'
12750installprivlib='$installprivlib'
12751installscript='$installscript'
12752installsitearch='$installsitearch'
12753installsitelib='$installsitelib'
12754intsize='$intsize'
12755known_extensions='$known_extensions'
12756ksh='$ksh'
12757large='$large'
12758ld='$ld'
12759lddlflags='$lddlflags'
12760ldflags='$ldflags'
12761less='$less'
12762lib_ext='$lib_ext'
12763libc='$libc'
12764libperl='$libperl'
12765libpth='$libpth'
12766libs='$libs'
12767libswanted='$libswanted'
12768line='$line'
12769lint='$lint'
12770lkflags='$lkflags'
12771ln='$ln'
12772lns='$lns'
12773locincpth='$locincpth'
12774loclibpth='$loclibpth'
12775longdblsize='$longdblsize'
12776longlongsize='$longlongsize'
12777longsize='$longsize'
12778lp='$lp'
12779lpr='$lpr'
12780ls='$ls'
12781lseeksize='$lseeksize'
12782lseektype='$lseektype'
12783mail='$mail'
12784mailx='$mailx'
12785make='$make'
12786make_set_make='$make_set_make'
12787mallocobj='$mallocobj'
12788mallocsrc='$mallocsrc'
12789malloctype='$malloctype'
12790man1dir='$man1dir'
12791man1direxp='$man1direxp'
12792man1ext='$man1ext'
12793man3dir='$man3dir'
12794man3direxp='$man3direxp'
12795man3ext='$man3ext'
12796medium='$medium'
12797mips='$mips'
12798mips_type='$mips_type'
12799mkdir='$mkdir'
12800models='$models'
12801modetype='$modetype'
12802more='$more'
12803mv='$mv'
12804myarchname='$myarchname'
12805mydomain='$mydomain'
12806myhostname='$myhostname'
12807myuname='$myuname'
12808n='$n'
12809netdb_hlen_type='$netdb_hlen_type'
12810netdb_host_type='$netdb_host_type'
12811netdb_name_type='$netdb_name_type'
12812netdb_net_type='$netdb_net_type'
12813nm='$nm'
12814nm_opt='$nm_opt'
12815nm_so_opt='$nm_so_opt'
12816nonxs_ext='$nonxs_ext'
12817nroff='$nroff'
12818o_nonblock='$o_nonblock'
12819obj_ext='$obj_ext'
ef4af2be 12820old_pthread_create_joinable='$old_pthread_create_joinable'
5f80c64f
JH
12821optimize='$optimize'
12822orderlib='$orderlib'
12823osname='$osname'
12824osvers='$osvers'
12825package='$package'
12826pager='$pager'
12827passcat='$passcat'
12828patchlevel='$patchlevel'
12829path_sep='$path_sep'
12830perl='$perl'
12831perladmin='$perladmin'
12832perlpath='$perlpath'
12833pg='$pg'
12834phostname='$phostname'
12835pidtype='$pidtype'
12836plibpth='$plibpth'
12837pmake='$pmake'
12838pr='$pr'
12839prefix='$prefix'
12840prefixexp='$prefixexp'
12841privlib='$privlib'
12842privlibexp='$privlibexp'
12843prototype='$prototype'
12844ptrsize='$ptrsize'
12845randbits='$randbits'
12846randfunc='$randfunc'
12847randseedtype='$randseedtype'
12848ranlib='$ranlib'
12849rd_nodata='$rd_nodata'
12850rm='$rm'
12851rmail='$rmail'
12852runnm='$runnm'
12853sched_yield='$sched_yield'
12854scriptdir='$scriptdir'
12855scriptdirexp='$scriptdirexp'
12856sed='$sed'
12857seedfunc='$seedfunc'
12858selectminbits='$selectminbits'
12859selecttype='$selecttype'
12860sendmail='$sendmail'
12861sh='$sh'
12862shar='$shar'
12863sharpbang='$sharpbang'
12864shmattype='$shmattype'
12865shortsize='$shortsize'
12866shrpenv='$shrpenv'
12867shsharp='$shsharp'
12868sig_name='$sig_name'
12869sig_name_init='$sig_name_init'
12870sig_num='$sig_num'
824a2ba3 12871sig_num_init='$sig_num_init'
5f80c64f
JH
12872signal_t='$signal_t'
12873sitearch='$sitearch'
12874sitearchexp='$sitearchexp'
12875sitelib='$sitelib'
12876sitelibexp='$sitelibexp'
12877sizetype='$sizetype'
12878sleep='$sleep'
12879smail='$smail'
12880small='$small'
12881so='$so'
12882sockethdr='$sockethdr'
12883socketlib='$socketlib'
12884sort='$sort'
12885spackage='$spackage'
12886spitshell='$spitshell'
12887split='$split'
12888src='$src'
12889ssizetype='$ssizetype'
12890startperl='$startperl'
12891startsh='$startsh'
12892static_ext='$static_ext'
12893stdchar='$stdchar'
12894stdio_base='$stdio_base'
12895stdio_bufsiz='$stdio_bufsiz'
12896stdio_cnt='$stdio_cnt'
12897stdio_filbuf='$stdio_filbuf'
12898stdio_ptr='$stdio_ptr'
12899strings='$strings'
12900submit='$submit'
12901subversion='$subversion'
12902sysman='$sysman'
12903tail='$tail'
12904tar='$tar'
12905tbl='$tbl'
12906tee='$tee'
12907test='$test'
12908timeincl='$timeincl'
12909timetype='$timetype'
12910touch='$touch'
12911tr='$tr'
12912trnl='$trnl'
12913troff='$troff'
12914uidtype='$uidtype'
12915uname='$uname'
12916uniq='$uniq'
12917use64bits='$use64bits'
12918usedl='$usedl'
12919usemultiplicity='$usemultiplicity'
12920usemymalloc='$usemymalloc'
12921usenm='$usenm'
12922useopcode='$useopcode'
12923useperlio='$useperlio'
12924useposix='$useposix'
12925usesfio='$usesfio'
12926useshrplib='$useshrplib'
12927usethreads='$usethreads'
12928usevfork='$usevfork'
12929usrinc='$usrinc'
12930uuname='$uuname'
12931version='$version'
12932vi='$vi'
12933voidflags='$voidflags'
12934xlibpth='$xlibpth'
12935zcat='$zcat'
12936zip='$zip'
12937EOT
12938
12939: Add in command line options if available
12940$test -f UU/cmdline.opt && $cat UU/cmdline.opt >> config.sh
12941
12942: add special variables
12943$test -f $src/patchlevel.h && \
12944awk '/^#define/ {printf "%s=%s\n",$2,$3}' $src/patchlevel.h >>config.sh
12945echo "CONFIG=true" >>config.sh
12946
12947: propagate old symbols
12948if $test -f UU/config.sh; then
12949 <UU/config.sh sort | uniq >UU/oldconfig.sh
12950 sed -n 's/^\([a-zA-Z_0-9]*\)=.*/\1/p' config.sh config.sh UU/oldconfig.sh |\
12951 sort | uniq -u >UU/oldsyms
12952 set X `cat UU/oldsyms`
12953 shift
12954 case $# in
12955 0) ;;
12956 *)
12957 cat <<EOM
12958Hmm...You had some extra variables I don't know about...I'll try to keep 'em...
12959EOM
12960 echo "# Variables propagated from previous config.sh file." >>config.sh
12961 for sym in `cat UU/oldsyms`; do
12962 echo " Propagating $hint variable "'$'"$sym..."
12963 eval 'tmp="$'"${sym}"'"'
12964 echo "$tmp" | \
12965 sed -e "s/'/'\"'\"'/g" -e "s/^/$sym='/" -e "s/$/'/" >>config.sh
12966 done
12967 ;;
12968 esac
12969fi
12970
12971: Finish up by extracting the .SH files
12972case "$alldone" in
12973exit)
12974 $rm -rf UU
12975 echo "Done."
12976 exit 0
12977 ;;
12978cont)
12979 ;;
12980'')
12981 dflt=''
12982 nostick=true
12983 $cat <<EOM
12984
12985If you'd like to make any changes to the config.sh file before I begin
12986to configure things, do it as a shell escape now (e.g. !vi config.sh).
12987
12988EOM
12989 rp="Press return or use a shell escape to edit config.sh:"
12990 . UU/myread
12991 nostick=''
12992 case "$ans" in
12993 '') ;;
12994 *) : in case they cannot read
12995 sh 1>&4 -c "$ans";;
12996 esac
12997 ;;
12998esac
12999
13000: if this fails, just run all the .SH files by hand
13001. ./config.sh
13002
13003echo " "
13004exec 1>&4
13005. ./UU/extract
13006
13007if $contains '^depend:' [Mm]akefile >/dev/null 2>&1; then
13008 dflt=y
13009 case "$silent" in
13010 true) ;;
13011 *)
13012 $cat <<EOM
13013
13014Now you need to generate make dependencies by running "$make depend".
13015You might prefer to run it in background: "$make depend > makedepend.out &"
13016It can take a while, so you might not want to run it right now.
13017
13018EOM
13019 ;;
13020 esac
13021 rp="Run $make depend now?"
13022 . UU/myread
13023 case "$ans" in
13024 y*)
13025 $make depend && echo "Now you must run a $make."
13026 ;;
13027 *)
13028 echo "You must run '$make depend' then '$make'."
13029 ;;
13030 esac
13031elif test -f [Mm]akefile; then
13032 echo " "
13033 echo "Now you must run a $make."
13034else
13035 echo "Done."
13036fi
13037
13038if $test -f Policy.sh; then
13039 $cat <<EOM
13040
13041If you compile $package on a different machine or from a different object
13042directory, copy the Policy.sh file from this object directory to the
13043new one before you run Configure -- this will help you with most of
13044the policy defaults.
13045
13046EOM
13047fi
13048if $test -f config.msg; then
13049 echo "Hmm. I also noted the following information while running:"
13050 echo " "
13051 $cat config.msg >&4
13052 $rm -f config.msg
13053fi
13054$rm -f kit*isdone ark*isdone
13055$rm -rf UU
13056
13057: End of Configure
13058