This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
integrate change#2053 from maint-5.005
[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#
5f80c64f 23# Generated on Thu Oct 22 10:24:53 EET DST 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=''
dfe9444c
AD
412d_pthread_yield=''
413d_sched_yield=''
1cfa4ec7 414sched_yield=''
dfe9444c 415d_pthreads_created_joinable=''
2304df62 416d_readdir=''
85e6fe83
LW
417d_rewinddir=''
418d_seekdir=''
419d_telldir=''
a0d0e21e 420d_readlink=''
2304df62
AD
421d_rename=''
422d_rmdir=''
423d_safebcpy=''
424d_safemcpy=''
36477c24 425d_sanemcmp=''
2304df62
AD
426d_select=''
427d_sem=''
428d_semctl=''
429d_semget=''
430d_semop=''
431d_setegid=''
432d_seteuid=''
5ff3f7a4 433d_setgrent=''
dfe9444c 434d_setgrps=''
693762b4 435d_sethent=''
a0d0e21e 436d_setlinebuf=''
2304df62 437d_setlocale=''
e5c9fcd0
AD
438d_setnent=''
439d_setpent=''
2304df62
AD
440d_setpgid=''
441d_setpgrp2=''
2afac517 442d_bsdsetpgrp=''
2304df62
AD
443d_setpgrp=''
444d_setprior=''
5ff3f7a4 445d_setpwent=''
2304df62
AD
446d_setregid=''
447d_setresgid=''
448d_setresuid=''
449d_setreuid=''
450d_setrgid=''
451d_setruid=''
e5c9fcd0 452d_setsent=''
2304df62 453d_setsid=''
e5c9fcd0 454d_setvbuf=''
760ac839 455d_sfio=''
8ff267be 456usesfio=''
2304df62
AD
457d_shm=''
458d_shmat=''
a0d0e21e
LW
459d_shmatprototype=''
460shmattype=''
2304df62
AD
461d_shmctl=''
462d_shmdt=''
463d_shmget=''
2c7991dc 464d_sigaction=''
8ff267be 465d_sigsetjmp=''
2304df62
AD
466d_oldsock=''
467d_socket=''
468d_sockpair=''
469sockethdr=''
470socketlib=''
471d_statblks=''
c2960299
AD
472d_stdio_cnt_lval=''
473d_stdio_ptr_lval=''
16d20bd9 474d_stdiobase=''
2304df62 475d_stdstdio=''
16d20bd9
AD
476stdio_base=''
477stdio_bufsiz=''
478stdio_cnt=''
dfe9444c 479stdio_filbuf=''
16d20bd9 480stdio_ptr=''
2304df62
AD
481d_index=''
482d_strchr=''
a0d0e21e 483d_strcoll=''
2304df62
AD
484d_strctcpy=''
485d_strerrm=''
486d_strerror=''
487d_sysernlst=''
488d_syserrlst=''
a89d8a78
DH
489d_strtod=''
490d_strtol=''
491d_strtoul=''
a0d0e21e 492d_strxfrm=''
2304df62
AD
493d_symlink=''
494d_syscall=''
a0d0e21e 495d_sysconf=''
2304df62 496d_system=''
a0d0e21e
LW
497d_tcgetpgrp=''
498d_tcsetpgrp=''
85e6fe83
LW
499d_time=''
500timetype=''
2304df62
AD
501clocktype=''
502d_times=''
503d_truncate=''
a0d0e21e
LW
504d_tzname=''
505d_umask=''
bd89102f
AD
506d_semctl_semid_ds=''
507d_semctl_semun=''
508d_union_semun=''
2304df62 509d_vfork=''
a0d0e21e 510usevfork=''
2304df62
AD
511d_voidsig=''
512signal_t=''
513d_volatile=''
514d_charvspr=''
515d_vprintf=''
516d_wait4=''
517d_waitpid=''
a0d0e21e
LW
518d_wcstombs=''
519d_wctomb=''
5ff3f7a4
GS
520d_dbmclose64=''
521d_dbminit64=''
522d_delete64=''
523d_fetch64=''
524d_firstkey64=''
525d_nextkey64=''
526d_store64=''
a0d0e21e 527dlext=''
85e6fe83
LW
528cccdlflags=''
529ccdlflags=''
2304df62 530dlsrc=''
232e078e 531ld=''
85e6fe83 532lddlflags=''
2304df62 533usedl=''
693762b4 534doublesize=''
5ff3f7a4 535ebcdic=''
a0d0e21e 536fpostype=''
2304df62
AD
537gidtype=''
538groupstype=''
539h_fcntl=''
540h_sysfile=''
5ff3f7a4 541i_arpainet=''
ecfc5424
AD
542db_hashtype=''
543db_prefixtype=''
a0d0e21e 544i_db=''
2304df62 545i_dbm=''
8e07c86e 546i_rpcsvcdbm=''
2304df62 547d_dirnamlen=''
a0d0e21e 548direntrytype=''
2304df62 549i_dirent=''
a0d0e21e 550i_dld=''
2304df62
AD
551i_dlfcn=''
552i_fcntl=''
a0d0e21e 553i_float=''
2304df62 554i_gdbm=''
28e8609d 555d_grpasswd=''
2304df62 556i_grp=''
5ff3f7a4
GS
557d_int64t=''
558i_inttypes=''
a0d0e21e 559i_limits=''
4633a7c4 560i_locale=''
a0d0e21e
LW
561i_malloc=''
562i_math=''
85e6fe83 563i_memory=''
2304df62 564i_ndbm=''
3fd537d4 565i_netdb=''
85e6fe83 566i_neterrno=''
2304df62
AD
567i_niin=''
568i_sysin=''
569d_pwage=''
570d_pwchange=''
571d_pwclass=''
572d_pwcomment=''
573d_pwexpire=''
c4f23d77 574d_pwgecos=''
28e8609d 575d_pwpasswd=''
2304df62
AD
576d_pwquota=''
577i_pwd=''
760ac839 578i_sfio=''
2304df62 579i_stddef=''
a0d0e21e 580i_stdlib=''
2304df62
AD
581i_string=''
582strings=''
5ff3f7a4 583i_sysaccess=''
2304df62
AD
584i_sysdir=''
585i_sysfile=''
586d_voidtty=''
587i_bsdioctl=''
a0d0e21e 588i_sysfilio=''
2304df62
AD
589i_sysioctl=''
590i_syssockio=''
591i_sysndir=''
a0d0e21e 592i_sysparam=''
8ff267be 593i_sysresrc=''
5ff3f7a4 594i_syssecrt=''
2304df62 595i_sysselct=''
1aef975c 596i_sysstat=''
a0d0e21e 597i_systimes=''
fed7345c 598i_systypes=''
25f94b33 599i_sysun=''
8ff267be 600i_syswait=''
2304df62
AD
601i_sgtty=''
602i_termio=''
603i_termios=''
604i_systime=''
605i_systimek=''
606i_time=''
607timeincl=''
85e6fe83 608i_unistd=''
2304df62 609i_utime=''
760ac839 610i_values=''
a0d0e21e 611i_stdarg=''
2304df62
AD
612i_varargs=''
613i_varhdr=''
614i_vfork=''
615intsize=''
24fef2a7
AD
616longsize=''
617shortsize=''
5ff3f7a4
GS
618d_dirent64s=''
619d_flock64s=''
620d_fstat64=''
621d_ftruncate64=''
622d_ino64t=''
623d_lockf64=''
624d_lseek64=''
625d_lstat64=''
626d_off64t=''
627d_open64=''
628d_opendir64=''
629d_readdir64=''
630d_seekdir64=''
631d_stat64=''
632d_telldir64=''
633d_truncate64=''
2304df62 634libc=''
8ff267be 635libperl=''
2afac517 636shrpenv=''
8ff267be 637useshrplib=''
a0d0e21e 638glibpth=''
2304df62 639libpth=''
8e07c86e 640loclibpth=''
2304df62
AD
641plibpth=''
642xlibpth=''
1cfa4ec7 643ignore_versioned_solibs=''
2304df62 644libs=''
85e6fe83 645lns=''
5ff3f7a4 646lseeksize=''
85e6fe83 647lseektype=''
8ff267be 648make_set_make=''
85e6fe83 649d_mymalloc=''
94b6baf5 650freetype=''
2304df62
AD
651mallocobj=''
652mallocsrc=''
653malloctype=''
654usemymalloc=''
16d20bd9
AD
655installman1dir=''
656man1dir=''
657man1direxp=''
658man1ext=''
659installman3dir=''
660man3dir=''
661man3direxp=''
662man3ext=''
2304df62
AD
663huge=''
664large=''
665medium=''
666models=''
667small=''
668split=''
a0d0e21e 669modetype=''
2304df62
AD
670mydomain=''
671myhostname=''
672phostname=''
673c=''
674n=''
8e07c86e
AD
675d_eofnblk=''
676eagain=''
677o_nonblock=''
678rd_nodata=''
dfe9444c
AD
679netdb_hlen_type=''
680netdb_host_type=''
681netdb_name_type=''
682netdb_net_type=''
2304df62
AD
683groupcat=''
684hostcat=''
685passcat=''
85e6fe83
LW
686orderlib=''
687ranlib=''
2304df62
AD
688package=''
689spackage=''
2c7991dc 690pager=''
bfb7748a 691apiversion=''
ecfc5424 692patchlevel=''
760ac839 693subversion=''
bfb7748a 694version=''
8e07c86e 695perladmin=''
4633a7c4 696perlpath=''
dfe9444c 697pidtype=''
a0d0e21e 698prefix=''
1aef975c 699prefixexp=''
2304df62
AD
700installprivlib=''
701privlib=''
702privlibexp=''
703prototype=''
693762b4 704ptrsize=''
85ab1d1d 705drand01=''
2304df62 706randbits=''
85ab1d1d
JH
707randfunc=''
708randseedtype=''
709seedfunc=''
2304df62
AD
710installscript=''
711scriptdir=''
712scriptdirexp=''
5ff3f7a4 713selectminbits=''
a0d0e21e 714selecttype=''
8ff267be 715sh=''
2304df62 716sig_name=''
dfe9444c 717sig_name_init=''
8e07c86e 718sig_num=''
4633a7c4
LW
719installsitearch=''
720sitearch=''
721sitearchexp=''
25f94b33
AD
722installsitelib=''
723sitelib=''
724sitelibexp=''
a0d0e21e
LW
725sizetype=''
726so=''
2304df62
AD
727sharpbang=''
728shsharp=''
729spitshell=''
dfe9444c 730src=''
a0d0e21e 731ssizetype=''
4633a7c4 732startperl=''
2304df62
AD
733startsh=''
734stdchar=''
5ff3f7a4
GS
735d_fgetpos64=''
736d_fopen64=''
737d_freopen64=''
738d_fseek64=''
739d_fseeko64=''
740d_fsetpos64=''
741d_ftell64=''
742d_ftello64=''
743d_tmpfile64=''
2304df62 744sysman=''
5ff3f7a4 745trnl=''
2304df62 746uidtype=''
85ab1d1d 747archname64=''
5ff3f7a4 748use64bits=''
85ab1d1d 749usemultiplicity=''
2304df62 750nm_opt=''
40a7a20a 751nm_so_opt=''
2304df62
AD
752runnm=''
753usenm=''
8ff267be 754useperlio=''
693762b4 755d_oldpthreads=''
dfe9444c 756usethreads=''
2304df62
AD
757incpath=''
758mips=''
759mips_type=''
760usrinc=''
761defvoidused=''
762voidflags=''
2304df62
AD
763CONFIG=''
764
ecfc5424
AD
765define='define'
766undef='undef'
767smallmach='pdp11 i8086 z8000 i80286 iAPX286'
768rmlist=''
769
770: We must find out about Eunice early
771eunicefix=':'
772if test -f /etc/unixtovms; then
773 eunicefix=/etc/unixtovms
774fi
775if test -f /etc/unixtovms.exe; then
776 eunicefix=/etc/unixtovms.exe
777fi
778
5ff3f7a4
GS
779i_whoami=''
780: change the next line if compiling for Xenix/286 on Xenix/386
781xlibpth='/usr/lib/386 /lib/386'
782
783: Possible local library directories to search.
784loclibpth="/usr/local/lib /opt/local/lib /usr/gnu/lib"
785loclibpth="$loclibpth /opt/gnu/lib /usr/GNU/lib /opt/GNU/lib"
786
787: general looking path for locating libraries
788glibpth="/shlib /usr/shlib /lib/pa1.1 /usr/lib/large"
789glibpth="$glibpth /lib /usr/lib $xlibpth"
790glibpth="$glibpth /lib/large /usr/lib/small /lib/small"
791glibpth="$glibpth /usr/ccs/lib /usr/ucblib /usr/local/lib"
792
793: Private path used by Configure to find libraries. Its value
794: is prepended to libpth. This variable takes care of special
795: machines, like the mips. Usually, it should be empty.
796plibpth=''
797
5ff3f7a4
GS
798: Possible local include directories to search.
799: Set locincpth to "" in a hint file to defeat local include searches.
800locincpth="/usr/local/include /opt/local/include /usr/gnu/include"
801locincpth="$locincpth /opt/gnu/include /usr/GNU/include /opt/GNU/include"
802:
803: no include file wanted by default
804inclwanted=''
805
ecfc5424
AD
806: list of known cpp symbols, sorted alphabetically
807al="AMIX BIT_MSF BSD BSD4_3 BSD_NET2 CMU CRAY DGUX DOLPHIN DPX2"
808al="$al GO32 GOULD_PN HP700 I386 I80960 I960 Lynx M68000 M68K MACH"
809al="$al MIPSEB MIPSEL MSDOS MTXINU MULTIMAX MVS"
810al="$al M_COFF M_I186 M_I286 M_I386 M_I8086 M_I86 M_I86SM"
811al="$al M_SYS3 M_SYS5 M_SYSIII M_SYSV M_UNIX M_XENIX"
812al="$al NeXT OCS88 OSF1 PARISC PC532 PORTAR POSIX"
813al="$al PWB R3000 RES RISC6000 RT Sun386i SVR3 SVR4"
814al="$al SYSTYPE_BSD SYSTYPE_SVR4 SYSTYPE_SYSV Tek4132 Tek4300"
815al="$al UMAXV USGr4 USGr4_2 UTEK UTS UTek UnicomPBB UnicomPBD Utek"
816al="$al VMS Xenix286"
5ff3f7a4
GS
817al="$al _AIX _AIX32 _AIX370 _AIX41 _AM29000 _COFF _CRAY _CX_UX _EPI"
818al="$al _IBMESA _IBMR2 _M88K _M88KBCS_TARGET _POWER"
ecfc5424
AD
819al="$al _MIPSEB _MIPSEL _M_COFF _M_I86 _M_I86SM _M_SYS3"
820al="$al _M_SYS5 _M_SYSIII _M_SYSV _M_UNIX _M_XENIX _NLS _PGC_ _R3000"
821al="$al _SYSTYPE_BSD _SYSTYPE_BSD43 _SYSTYPE_SVR4"
822al="$al _SYSTYPE_SYSV _SYSV3 _U370 _UNICOS"
823al="$al __386BSD__ __BIG_ENDIAN __BIG_ENDIAN__ __BSD_4_4__"
824al="$al __DGUX__ __DPX2__ __H3050R __H3050RX"
825al="$al __LITTLE_ENDIAN __LITTLE_ENDIAN__ __MACH__"
826al="$al __MIPSEB __MIPSEB__ __MIPSEL __MIPSEL__"
827al="$al __Next__ __OSF1__ __PARAGON__ __PGC__ __PWB __STDC__"
828al="$al __SVR4_2__ __UMAXV__"
829al="$al ____386BSD____ __alpha __alpha__ __amiga"
830al="$al __bsd4_2 __bsd4_2__ __bsdi__ __convex__"
831al="$al __host_mips__"
832al="$al __hp9000s200 __hp9000s300 __hp9000s400 __hp9000s500"
833al="$al __hp9000s500 __hp9000s700 __hp9000s800"
834al="$al __hppa __hpux __hp_osf __i286 __i286__ __i386 __i386__"
835al="$al __i486 __i486__ __i860 __i860__ __ibmesa __ksr1__ __linux__"
836al="$al __m68k __m68k__ __m88100__ __m88k __m88k__"
837al="$al __mc68000 __mc68000__ __mc68020 __mc68020__"
838al="$al __mc68030 __mc68030__ __mc68040 __mc68040__"
839al="$al __mc88100 __mc88100__ __mips __mips__"
840al="$al __motorola__ __osf__ __pa_risc __sparc__ __stdc__"
841al="$al __sun __sun__ __svr3__ __svr4__ __ultrix __ultrix__"
842al="$al __unix __unix__ __uxpm__ __uxps__ __vax __vax__"
843al="$al _host_mips _mips _unix"
844al="$al a29k aegis aix aixpc alliant alpha am29000 amiga ansi ardent"
845al="$al apollo ardent att386 att3b"
846al="$al bsd bsd43 bsd4_2 bsd4_3 bsd4_4 bsdi bull"
847al="$al cadmus clipper concurrent convex cray ctix"
848al="$al dmert encore gcos gcx gimpel gould"
849al="$al hbullx20 hcx host_mips hp200 hp300 hp700 hp800"
850al="$al hp9000 hp9000s300 hp9000s400 hp9000s500"
851al="$al hp9000s700 hp9000s800 hp9k8 hppa hpux"
852al="$al i186 i286 i386 i486 i8086"
853al="$al i80960 i860 iAPX286 ibm ibm032 ibmrt interdata is68k"
854al="$al ksr1 linux luna luna88k m68k m88100 m88k"
855al="$al mc300 mc500 mc68000 mc68010 mc68020 mc68030"
856al="$al mc68040 mc68060 mc68k mc68k32 mc700"
857al="$al mc88000 mc88100 merlin mert mips mvs n16"
858al="$al ncl_el ncl_mr"
859al="$al news1500 news1700 news1800 news1900 news3700"
860al="$al news700 news800 news900 ns16000 ns32000"
861al="$al ns32016 ns32332 ns32k nsc32000 os osf"
862al="$al parisc pc532 pdp11 plexus posix pyr"
863al="$al riscix riscos scs sequent sgi sinix sony sony_news"
864al="$al sonyrisc sparc sparclite spectrum stardent stratos"
865al="$al sun sun3 sun386 svr4 sysV68 sysV88"
866al="$al titan tower tower32 tower32_200 tower32_600 tower32_700"
867al="$al tower32_800 tower32_850 tss u370 u3b u3b2 u3b20 u3b200"
868al="$al u3b20d u3b5 ultrix unix unixpc unos vax venix vms"
869al="$al xenix z8000"
870
dfe9444c 871: Trailing extension. Override this in a hint file, if needed.
4e2a5f63 872_exe=''
dfe9444c
AD
873: Extra object files, if any, needed on this platform.
874archobjs=''
875groupstype=''
1cfa4ec7
GS
876: default library list
877libswanted=''
878ignore_versioned_solibs=''
bfb7748a
AD
879: full support for void wanted by default
880defvoidused=15
881
dfe9444c
AD
882: set useposix=false in your hint file to disable the POSIX extension.
883useposix=true
884: set useopcode=false in your hint file to disable the Opcode extension.
885useopcode=true
85ab1d1d 886: set usemultiplicity on the Configure command line to enable multiplicity.
dfe9444c 887: set usethreads on the Configure command line to enable threads.
ecfc5424 888: List of libraries we want.
693762b4
AD
889: If anyone needs -lnet, put it in a hint file.
890libswanted='sfio socket inet nsl nm ndbm gdbm dbm db malloc dl'
ecfc5424
AD
891libswanted="$libswanted dld ld sun m c cposix posix ndir dir crypt"
892libswanted="$libswanted ucb bsd BSD PW x"
1aef975c 893: We probably want to search /usr/shlib before most other libraries.
94b6baf5 894: This is only used by the lib/ExtUtils/MakeMaker.pm routine extliblist.
ecfc5424
AD
895glibpth=`echo " $glibpth " | sed -e 's! /usr/shlib ! !'`
896glibpth="/usr/shlib $glibpth"
897: Do not use vfork unless overridden by a hint file.
898usevfork=false
899
8ff267be 900: Find the basic shell for Bourne shell scripts
901case "$sh" in
902'')
8ff267be 903 case "$SYSTYPE" in
904 *bsd*|sys5*) xxx="/$SYSTYPE/bin/sh";;
905 *) xxx='/bin/sh';;
906 esac
907 if test -f "$xxx"; then
908 sh="$xxx"
909 else
910 : Build up a list and do a single loop so we can 'break' out.
911 pth=`echo $PATH | sed -e "s/$p_/ /g"`
912 for xxx in sh bash ksh pdksh ash; do
913 for p in $pth; do
914 try="$try ${p}/${xxx}"
915 done
916 done
917 for xxx in $try; do
918 if test -f "$xxx"; then
919 sh="$xxx";
8ff267be 920 break
921 elif test -f "$xxx.exe"; then
922 sh="$xxx";
8ff267be 923 break
924 fi
925 done
926 fi
927 ;;
928esac
929
930case "$sh" in
931'') cat <<EOM >&2
932$me: Fatal Error: I can't find a Bourne Shell anywhere.
dfe9444c 933
8ff267be 934Usually it's in /bin/sh. How did you even get this far?
5ff3f7a4 935Please contact me (Jarkko Hietaniemi) at jhi@iki.fi and
dfe9444c 936we'll try to straighten this all out.
8ff267be 937EOM
938 exit 1
939 ;;
940esac
941
760ac839 942: see if sh knows # comments
8ff267be 943if `$sh -c '#' >/dev/null 2>&1`; then
760ac839
LW
944 shsharp=true
945 spitshell=cat
760ac839
LW
946 xcat=/bin/cat
947 test -f $xcat || xcat=/usr/bin/cat
948 echo "#!$xcat" >try
949 $eunicefix try
950 chmod +x try
951 ./try > today
952 if test -s today; then
760ac839
LW
953 sharpbang='#!'
954 else
955 echo "#! $xcat" > try
956 $eunicefix try
957 chmod +x try
958 ./try > today
959 if test -s today; then
760ac839
LW
960 sharpbang='#! '
961 else
760ac839
LW
962 sharpbang=': use '
963 fi
964 fi
965else
dfe9444c 966 echo " "
8ff267be 967 echo "Your $sh doesn't grok # comments--I will strip them later on."
760ac839
LW
968 shsharp=false
969 cd ..
970 echo "exec grep -v '^[ ]*#'" >spitshell
971 chmod +x spitshell
972 $eunicefix spitshell
973 spitshell=`pwd`/spitshell
974 cd UU
975 echo "I presume that if # doesn't work, #! won't work either!"
976 sharpbang=': use '
977fi
978rm -f try today
979
980: figure out how to guarantee sh startup
8ff267be 981case "$startsh" in
982'') startsh=${sharpbang}${sh} ;;
983*)
760ac839 984esac
760ac839
LW
985cat >try <<EOSS
986$startsh
987set abc
988test "$?abc" != 1
989EOSS
990
991chmod +x try
992$eunicefix try
993if ./try; then
8ff267be 994 : echo "Yup, it does."
760ac839 995else
dfe9444c
AD
996 echo "Hmm... '$startsh' does not guarantee sh startup..."
997 echo "You may have to fix up the shell scripts to make sure $sh runs them."
760ac839
LW
998fi
999rm -f try
1000
aebf16e7
AD
1001
1002: Save command line options in file UU/cmdline.opt for later use in
1003: generating config.sh.
1004cat > cmdline.opt <<EOSH
1005# Configure command line arguments.
1006config_arg0='$0'
1007config_args='$*'
1008config_argc=$#
1009EOSH
1010argn=1
1011for arg in "$@"; do
1012 cat >>cmdline.opt <<EOSH
1013config_arg$argn='$arg'
1014EOSH
1015 argn=`expr $argn + 1`
1016done
1017
2304df62
AD
1018: produce awk script to parse command line options
1019cat >options.awk <<'EOF'
1020BEGIN {
16d20bd9 1021 optstr = "dD:eEf:hKOrsSU:V"; # getopt-style specification
2304df62
AD
1022
1023 len = length(optstr);
1024 for (i = 1; i <= len; i++) {
1025 c = substr(optstr, i, 1);
1026 if (i < len) a = substr(optstr, i + 1, 1); else a = "";
1027 if (a == ":") {
1028 arg[c] = 1;
1029 i++;
1030 }
1031 opt[c] = 1;
1032 }
1033}
1034{
1035 expect = 0;
1036 str = $0;
1037 if (substr(str, 1, 1) != "-") {
1038 printf("'%s'\n", str);
1039 next;
1040 }
1041 len = length($0);
1042 for (i = 2; i <= len; i++) {
1043 c = substr(str, i, 1);
1044 if (!opt[c]) {
1045 printf("-%s\n", substr(str, i));
1046 next;
1047 }
1048 printf("-%s\n", c);
1049 if (arg[c]) {
1050 if (i < len)
1051 printf("'%s'\n", substr(str, i + 1));
1052 else
1053 expect = 1;
1054 next;
1055 }
1056 }
1057}
1058END {
1059 if (expect)
1060 print "?";
1061}
1062EOF
1063
1064: process the command line options
4633a7c4
LW
1065set X `for arg in "$@"; do echo "X$arg"; done |
1066 sed -e s/X// | awk -f options.awk`
2304df62
AD
1067eval "set $*"
1068shift
1069rm -f options.awk
1070
1071: set up default values
1072fastread=''
1073reuseval=false
1074config_sh=''
1075alldone=''
1076error=''
1077silent=''
1078extractsh=''
ecfc5424 1079override=''
16d20bd9 1080knowitall=''
1aef975c 1081rm -f optdef.sh
28757baa 1082cat >optdef.sh <<EOS
1083$startsh
1084EOS
2304df62 1085
dfe9444c 1086
2304df62
AD
1087: option parsing
1088while test $# -gt 0; do
1089 case "$1" in
1090 -d) shift; fastread=yes;;
1091 -e) shift; alldone=cont;;
1092 -f)
1093 shift
1094 cd ..
1095 if test -r "$1"; then
1096 config_sh="$1"
1097 else
a0d0e21e 1098 echo "$me: cannot read config file $1." >&2
2304df62
AD
1099 error=true
1100 fi
1101 cd UU
1102 shift;;
1103 -h) shift; error=true;;
1104 -r) shift; reuseval=true;;
dfe9444c 1105 -s) shift; silent=true; realsilent=true;;
2304df62 1106 -E) shift; alldone=exit;;
16d20bd9 1107 -K) shift; knowitall=true;;
ecfc5424 1108 -O) shift; override=true;;
dfe9444c 1109 -S) shift; silent=true; extractsh=true;;
a0d0e21e
LW
1110 -D)
1111 shift
1112 case "$1" in
1113 *=)
1114 echo "$me: use '-U symbol=', not '-D symbol='." >&2
1115 echo "$me: ignoring -D $1" >&2
1116 ;;
ecfc5424 1117 *=*) echo "$1" | \
1aef975c
AD
1118 sed -e "s/'/'\"'\"'/g" -e "s/=\(.*\)/='\1'/" >> optdef.sh;;
1119 *) echo "$1='define'" >> optdef.sh;;
a0d0e21e
LW
1120 esac
1121 shift
1122 ;;
1123 -U)
1124 shift
1125 case "$1" in
1aef975c 1126 *=) echo "$1" >> optdef.sh;;
a0d0e21e
LW
1127 *=*)
1128 echo "$me: use '-D symbol=val', not '-U symbol=val'." >&2
1129 echo "$me: ignoring -U $1" >&2
1130 ;;
1aef975c 1131 *) echo "$1='undef'" >> optdef.sh;;
a0d0e21e
LW
1132 esac
1133 shift
1134 ;;
dfe9444c 1135 -V) echo "$me generated by metaconfig 3.0 PL70." >&2
2304df62
AD
1136 exit 0;;
1137 --) break;;
a0d0e21e 1138 -*) echo "$me: unknown option $1" >&2; shift; error=true;;
2304df62
AD
1139 *) break;;
1140 esac
1141done
1142
1143case "$error" in
1144true)
1145 cat >&2 <<EOM
2afac517 1146Usage: $me [-dehrsEKOSV] [-f config.sh] [-D symbol] [-D symbol=value]
a0d0e21e 1147 [-U symbol] [-U symbol=]
2304df62
AD
1148 -d : use defaults for all answers.
1149 -e : go on without questioning past the production of config.sh.
1150 -f : specify an alternate default configuration file.
1151 -h : print this help message and exit (with an error status).
1152 -r : reuse C symbols value if possible (skips costly nm extraction).
1153 -s : silent mode, only echoes questions and essential information.
a0d0e21e
LW
1154 -D : define symbol to have some value:
1155 -D symbol symbol gets the value 'define'
1156 -D symbol=value symbol gets the value 'value'
2304df62 1157 -E : stop at the end of questions, after having produced config.sh.
16d20bd9 1158 -K : do not use unless you know what you are doing.
ecfc5424 1159 -O : let -D and -U override definitions from loaded configuration file.
2304df62 1160 -S : perform variable substitutions on all .SH files (can mix with -f)
a0d0e21e
LW
1161 -U : undefine symbol:
1162 -U symbol symbol gets the value 'undef'
1163 -U symbol= symbol gets completely empty
2304df62
AD
1164 -V : print version number and exit (with a zero status).
1165EOM
1166 exit 1
1167 ;;
1168esac
1169
dfe9444c
AD
1170: Sanity checks
1171case "$fastread$alldone" in
1172yescont|yesexit) ;;
1173*)
1174 if test ! -t 0; then
1175 echo "Say 'sh Configure', not 'sh <Configure'"
1176 exit 1
1177 fi
1178 ;;
1179esac
1180
2304df62
AD
1181exec 4>&1
1182case "$silent" in
1183true) exec 1>/dev/null;;
1184esac
1185
ecfc5424 1186: run the defines and the undefines, if any, but leave the file out there...
1aef975c
AD
1187touch optdef.sh
1188. ./optdef.sh
a0d0e21e 1189
2304df62 1190: set package name
85e6fe83 1191package=perl5
1aef975c
AD
1192first=`echo $package | sed -e 's/^\(.\).*/\1/'`
1193last=`echo $package | sed -e 's/^.\(.*\)/\1/'`
1194case "`echo AbyZ | tr '[:lower:]' '[:upper:]' 2>/dev/null`" in
1195ABYZ) spackage=`echo $first | tr '[:lower:]' '[:upper:]'`$last;;
1196*) spackage=`echo $first | tr '[a-z]' '[A-Z]'`$last;;
1197esac
2304df62 1198
2304df62
AD
1199: Some greps do not return status, grrr.
1200echo "grimblepritz" >grimble
1201if grep blurfldyick grimble >/dev/null 2>&1 ; then
1202 contains=contains
1203elif grep grimblepritz grimble >/dev/null 2>&1 ; then
1204 contains=grep
1205else
1206 contains=contains
1207fi
1208rm -f grimble
1209: the following should work in any shell
1210case "$contains" in
1211contains*)
1212 echo " "
1213 echo "AGH! Grep doesn't return a status. Attempting remedial action."
1214 cat >contains <<'EOSS'
1215grep "$1" "$2" >.greptmp && cat .greptmp && test -s .greptmp
1216EOSS
1217chmod +x contains
1218esac
1219
dfe9444c
AD
1220: Find the path to the source tree
1221case "$src" in
1222'') case "$0" in
1223 */*) src=`echo $0 | sed -e 's%/[^/][^/]*$%%'`;;
1224 *) src='.';;
1225 esac;;
1226esac
1227case "$src" in
1228'') src=/
1229 rsrc=/
1230 ;;
1231/*) rsrc="$src";;
1232*) rsrc="../$src";;
1233esac
1234if test -f $rsrc/Configure && \
1235 $contains "^package=$package$" $rsrc/Configure >/dev/null 2>&1
1236then
1237 : found it, so we are ok.
1238else
1239 rsrc=''
1240 for src in . .. ../.. ../../.. ../../../..; do
1241 if test -f ../$src/Configure && \
1242 $contains "^package=$package$" ../$src/Configure >/dev/null 2>&1
1243 then
1244 rsrc=../$src
1245 break
1246 fi
1247 done
1248fi
1249case "$rsrc" in
1250'')
1251 cat <<EOM >&4
1252
1253Sorry, I can't seem to locate the source dir for $package. Please start
1254Configure with an explicit path -- i.e. /some/path/Configure.
1255
1256EOM
1257 exit 1
1258 ;;
1259../.) rsrc='..';;
1260*)
1261 echo " "
1262 echo "Sources for $package found in \"$src\"." >&4
1263 ;;
1264esac
1265
1266: script used to extract .SH files with variable substitutions
1267cat >extract <<'EOS'
1268CONFIG=true
1269echo "Doing variable substitutions on .SH files..."
1270if test -f $src/MANIFEST; then
f7ab18e9 1271 set x `awk '{print $1}' <$src/MANIFEST | grep '\.SH$'`
dfe9444c
AD
1272else
1273 echo "(Looking for .SH files under the source directory.)"
1274 set x `(cd $src; find . -name "*.SH" -print)`
1275fi
1276shift
1277case $# in
12780) set x `(cd $src; echo *.SH)`; shift;;
1279esac
1280if test ! -f $src/$1; then
1281 shift
1282fi
1283mkdir_p='
1284name=$1;
1285create="";
1286while test $name; do
1287 if test ! -d "$name"; then
1288 create="$name $create";
1289 name=`echo $name | sed -e "s|^[^/]*$||"`;
1290 name=`echo $name | sed -e "s|\(.*\)/.*|\1|"`;
1291 else
1292 name="";
1293 fi;
1294done;
1295for file in $create; do
1296 mkdir $file;
1297done
1298'
1299for file in $*; do
1300 case "$src" in
1301 ".")
1302 case "$file" in
1303 */*)
1304 dir=`expr X$file : 'X\(.*\)/'`
1305 file=`expr X$file : 'X.*/\(.*\)'`
1306 (cd $dir && . ./$file)
1307 ;;
1308 *)
1309 . ./$file
1310 ;;
1311 esac
1312 ;;
1313 *)
1314 case "$file" in
1315 */*)
1316 dir=`expr X$file : 'X\(.*\)/'`
1317 file=`expr X$file : 'X.*/\(.*\)'`
1318 (set x $dir; shift; eval $mkdir_p)
1319 sh <$src/$dir/$file
1320 ;;
1321 *)
1322 sh <$src/$file
1323 ;;
1324 esac
1325 ;;
1326 esac
1327done
1328if test -f $src/config_h.SH; then
1329 if test ! -f config.h; then
1330 : oops, they left it out of MANIFEST, probably, so do it anyway.
1331 . $src/config_h.SH
1332 fi
1333fi
1334EOS
1335
1336: extract files and exit if asked to do so
1337case "$extractsh" in
1338true)
1339 case "$realsilent" in
1340 true) ;;
1341 *) exec 1>&4;;
1342 esac
1343 case "$config_sh" in
1344 '') config_sh='config.sh';;
1345 esac
1346 echo " "
1347 echo "Fetching answers from $config_sh..."
1348 cd ..
1349 . $config_sh
1350 test "$override" && . ./optdef.sh
1351 echo " "
1352 . UU/extract
1353 rm -rf UU
1354 echo "Done."
1355 exit 0
1356 ;;
1357esac
1358
1359: Eunice requires " " instead of "", can you believe it
1360echo " "
1361: Here we go...
1362echo "Beginning of configuration questions for $package."
1363
1364trap 'echo " "; test -d ../UU && rm -rf X $rmlist; exit 1' 1 2 3 15
1365
2304df62
AD
1366: first determine how to suppress newline on echo command
1367echo " "
1368echo "Checking echo to see how to suppress newlines..."
1369(echo "hi there\c" ; echo " ") >.echotmp
1370if $contains c .echotmp >/dev/null 2>&1 ; then
1371 echo "...using -n."
1372 n='-n'
1373 c=''
1374else
1375 cat <<'EOM'
1376...using \c
1377EOM
1378 n=''
1379 c='\c'
1380fi
1381echo $n "The star should be here-->$c"
1382echo '*'
1383rm -f .echotmp
1384
1385: Now test for existence of everything in MANIFEST
1386echo " "
dfe9444c 1387if test -f $rsrc/MANIFEST; then
2304df62 1388 echo "First let's make sure your kit is complete. Checking..." >&4
dfe9444c 1389 awk '$1 !~ /PACK[A-Z]+/ {print $1}' $rsrc/MANIFEST | split -50
2304df62 1390 rm -f missing
dfe9444c 1391 tmppwd=`pwd`
2304df62 1392 for filelist in x??; do
dfe9444c 1393 (cd $rsrc; ls `cat $tmppwd/$filelist` >/dev/null 2>>$tmppwd/missing)
2304df62
AD
1394 done
1395 if test -s missing; then
1396 cat missing >&4
1397 cat >&4 <<'EOM'
1398
1399THIS PACKAGE SEEMS TO BE INCOMPLETE.
1400
1401You have the option of continuing the configuration process, despite the
1402distinct possibility that your kit is damaged, by typing 'y'es. If you
1403do, don't blame me if something goes wrong. I advise you to type 'n'o
5ff3f7a4 1404and contact the author (jhi@iki.fi).
2304df62
AD
1405
1406EOM
1407 echo $n "Continue? [n] $c" >&4
1408 read ans
1409 case "$ans" in
1410 y*)
1411 echo "Continuing..." >&4
1412 rm -f missing
1413 ;;
1414 *)
1415 echo "ABORTING..." >&4
1416 kill $$
1417 ;;
1418 esac
1419 else
dfe9444c 1420 echo "Looks good..."
2304df62
AD
1421 fi
1422else
1423 echo "There is no MANIFEST file. I hope your kit is complete !"
1424fi
1425rm -f missing x??
1426
5ff3f7a4
GS
1427echo " "
1428: Find the appropriate value for a newline for tr
1429if test -n "$DJGPP"; then
1430 trnl='\012'
1431fi
1432if test X"$trnl" = X; then
1433 case "`echo foo|tr '\n' x 2>/dev/null`" in
1434 foox) trnl='\n' ;;
1435 esac
1436fi
1437if test X"$trnl" = X; then
1438 case "`echo foo|tr '\012' x 2>/dev/null`" in
1439 foox) trnl='\012' ;;
1440 esac
1441fi
1442if test X"$trnl" = X; then
1443 cat <<EOM >&2
1444
1445$me: Fatal Error: cannot figure out how to translate newlines with 'tr'.
1446
1447EOM
1448 exit 1
1449fi
1450
2304df62
AD
1451: compute the number of columns on the terminal for proper question formatting
1452case "$COLUMNS" in
1453'') COLUMNS='80';;
1454esac
1455
1456: set up the echo used in my read
1457myecho="case \"\$xxxm\" in
1458'') echo $n \"\$rp $c\" >&4;;
1459*) case \"\$rp\" in
1460 '') echo $n \"[\$xxxm] $c\";;
1461 *)
1462 if test \`echo \"\$rp [\$xxxm] \" | wc -c\` -ge $COLUMNS; then
1463 echo \"\$rp\" >&4
1464 echo $n \"[\$xxxm] $c\" >&4
1465 else
1466 echo $n \"\$rp [\$xxxm] $c\" >&4
1467 fi
1468 ;;
1469 esac;;
1470esac"
1471
1472: now set up to do reads with possible shell escape and default assignment
1473cat <<EOSC >myread
28757baa 1474$startsh
2304df62
AD
1475xxxm=\$dflt
1476$myecho
1477ans='!'
1478case "\$fastread" in
1479yes) case "\$dflt" in
1480 '') ;;
1481 *) ans='';
1482 case "\$silent-\$rp" in
1483 true-) ;;
1484 *) echo " " >&4;;
1485 esac;;
1486 esac;;
1487*) case "\$silent" in
1488 true) case "\$rp" in
1489 '') ans='';;
1490 esac;;
1491 esac;;
1492esac
1493while expr "X\$ans" : "X!" >/dev/null; do
1494 read answ
1495 set x \$xxxm
1496 shift
dfe9444c 1497 aok=''; eval "ans=\\"\$answ\\"" && aok=y
2304df62 1498 case "\$answ" in
dfe9444c
AD
1499 "!")
1500 sh 1>&4
1501 echo " "
1502 $myecho
1503 ;;
1504 !*)
1505 set x \`expr "X\$ans" : "X!\(.*\)\$"\`
1506 shift
1507 sh 1>&4 -c "\$*"
1508 echo " "
1509 $myecho
1510 ;;
2304df62
AD
1511 "\$ans")
1512 case "\$ans" in
ecfc5424
AD
1513 \\&*)
1514 set x \`expr "X\$ans" : "X&\(.*\)\$"\`
1515 shift
1516 case "\$1" in
1517 -d)
1518 fastread=yes
40a7a20a 1519 echo "(OK, I'll run with -d after this question.)" >&4
ecfc5424
AD
1520 ;;
1521 -*)
40a7a20a 1522 echo "*** Sorry, \$1 not supported yet." >&4
ecfc5424
AD
1523 ;;
1524 esac
1525 $myecho
1526 ans=!
1527 ;;
2304df62
AD
1528 esac;;
1529 *)
1530 case "\$aok" in
1531 y)
1532 echo "*** Substitution done -- please confirm."
1533 xxxm="\$ans"
c9795ab7 1534 ans=\`echo $n "\$ans$c" | tr '$trnl' ' '\`
2304df62
AD
1535 xxxm="\$ans"
1536 ans=!
1537 ;;
1538 *)
1539 echo "*** Error -- try again."
1540 ans=!
1541 ;;
1542 esac
1543 $myecho
1544 ;;
1545 esac
1546 case "\$ans\$xxxm\$nostick" in
1547 '')
1548 ans=!
1549 $myecho
1550 ;;
1551 esac
1552done
1553case "\$ans" in
1554'') ans="\$xxxm";;
1555esac
1556EOSC
1557
1558: create .config dir to save info across Configure sessions
1559test -d ../.config || mkdir ../.config
1560cat >../.config/README <<EOF
1561This directory created by Configure to save information that should
dfe9444c 1562persist across sessions for $package.
2304df62
AD
1563
1564You may safely delete it if you wish.
1565EOF
1566
1567: general instructions
1568needman=true
1569firsttime=true
760ac839 1570user=`(logname) 2>/dev/null`
dfe9444c
AD
1571case "$user" in
1572'') user=`whoami 2>&1`;;
760ac839 1573esac
2304df62
AD
1574if $contains "^$user\$" ../.config/instruct >/dev/null 2>&1; then
1575 firsttime=false
1576 echo " "
1577 rp='Would you like to see the instructions?'
1578 dflt=n
1579 . ./myread
1580 case "$ans" in
1581 [yY]*) ;;
1582 *) needman=false;;
1583 esac
1584fi
1585if $needman; then
1586 cat <<EOH
4e2a5f63 1587
2304df62 1588This installation shell script will examine your system and ask you questions
a0d0e21e 1589to determine how the perl5 package should be installed. If you get
2304df62
AD
1590stuck on a question, you may use a ! shell escape to start a subshell or
1591execute a command. Many of the questions will have default answers in square
1592brackets; typing carriage return will give you the default.
1593
1594On some of the questions which ask for file or directory names you are allowed
1595to use the ~name construct to specify the login directory belonging to "name",
1596even if you don't have a shell which knows about that. Questions where this is
1597allowed will be marked "(~name ok)".
1598
1599EOH
1600 rp=''
1601 dflt='Type carriage return to continue'
1602 . ./myread
1603 cat <<'EOH'
1604
1605The prompter used in this script allows you to use shell variables and
1606backticks in your answers. You may use $1, $2, etc... to refer to the words
1607in the default answer, as if the default line was a set of arguments given to a
1608script shell. This means you may also use $* to repeat the whole default line,
1609so you do not have to re-type everything to add something to the default.
1610
1611Everytime there is a substitution, you will have to confirm. If there is an
1612error (e.g. an unmatched backtick), the default answer will remain unchanged
1613and you will be prompted again.
1614
1615If you are in a hurry, you may run 'Configure -d'. This will bypass nearly all
1616the questions and use the computed defaults (or the previous answers if there
1617was already a config.sh file). Type 'Configure -h' for a list of options.
ecfc5424 1618You may also start interactively and then answer '& -d' at any prompt to turn
dfe9444c 1619on the non-interactive behaviour for the remainder of the execution.
2304df62
AD
1620
1621EOH
1622 . ./myread
1623 cat <<EOH
1624
1625Much effort has been expended to ensure that this shell script will run on any
1626Unix system. If despite that it blows up on yours, your best bet is to edit
40000a8c
AD
1627Configure and run it again. If you can't run Configure for some reason,
1628you'll have to generate a config.sh file by hand. Whatever problems you
5ff3f7a4 1629have, let me (jhi@iki.fi) know how I blew it.
2304df62
AD
1630
1631This installation script affects things in two ways:
1632
16331) it may do direct variable substitutions on some of the files included
1634 in this kit.
16352) it builds a config.h file for inclusion in C programs. You may edit
1636 any of these files as the need arises after running this script.
1637
1638If you make a mistake on a question, there is no easy way to back up to it
1639currently. The easiest thing to do is to edit config.sh and rerun all the SH
1640files. Configure will offer to let you do this before it runs the SH files.
1641
1642EOH
1643 dflt='Type carriage return to continue'
1644 . ./myread
1645 case "$firsttime" in
1646 true) echo $user >>../.config/instruct;;
1647 esac
1648fi
1649
2304df62
AD
1650: find out where common programs are
1651echo " "
1652echo "Locating common programs..." >&4
1653cat <<EOSC >loc
1654$startsh
1655case \$# in
16560) exit 1;;
1657esac
1658thing=\$1
1659shift
1660dflt=\$1
1661shift
1662for dir in \$*; do
1663 case "\$thing" in
1664 .)
1665 if test -d \$dir/\$thing; then
1666 echo \$dir
1667 exit 0
1668 fi
1669 ;;
1670 *)
a0d0e21e 1671 for thisthing in \$dir/\$thing; do
ecfc5424 1672 : just loop through to pick last item
a0d0e21e 1673 done
25f94b33 1674 if test -f \$thisthing; then
a0d0e21e 1675 echo \$thisthing
2304df62
AD
1676 exit 0
1677 elif test -f \$dir/\$thing.exe; then
c4f23d77
AD
1678 if test -n "$DJGPP"; then
1679 echo \$dir/\$thing.exe
1680 else
1681 : on Eunice apparently
1682 echo \$dir/\$thing
1683 fi
2304df62
AD
1684 exit 0
1685 fi
1686 ;;
1687 esac
1688done
1689echo \$dflt
1690exit 1
1691EOSC
1692chmod +x loc
1693$eunicefix loc
1694loclist="
1695awk
1696cat
ecfc5424 1697comm
2304df62
AD
1698cp
1699echo
1700expr
1701grep
a0d0e21e 1702ls
dfe9444c 1703make
2304df62 1704mkdir
2304df62
AD
1705rm
1706sed
1707sort
85e6fe83 1708touch
2304df62
AD
1709tr
1710uniq
1711"
1712trylist="
1713Mcc
dfe9444c 1714ar
2304df62
AD
1715byacc
1716cpp
1717csh
1718date
1719egrep
8ff267be 1720gzip
2c7991dc 1721less
8ff267be 1722ln
2c7991dc 1723more
693762b4 1724nm
2304df62 1725nroff
2c7991dc 1726pg
693762b4 1727tee
2304df62
AD
1728test
1729uname
8ff267be 1730zip
2304df62 1731"
8e07c86e 1732pth=`echo $PATH | sed -e "s/$p_/ /g"`
2304df62
AD
1733pth="$pth /lib /usr/lib"
1734for file in $loclist; do
dfe9444c
AD
1735 eval xxx=\$$file
1736 case "$xxx" in
1737 /*|?:[\\/]*)
1738 if test -f "$xxx"; then
1739 : ok
1740 else
1741 echo "WARNING: no $xxx -- ignoring your setting for $file." >&4
1742 xxx=`./loc $file $file $pth`
1743 fi
1744 ;;
1745 '') xxx=`./loc $file $file $pth`;;
1746 *) xxx=`./loc $xxx $xxx $pth`;;
1747 esac
2304df62
AD
1748 eval $file=$xxx
1749 eval _$file=$xxx
1750 case "$xxx" in
1751 /*)
1752 echo $file is in $xxx.
1753 ;;
8e07c86e
AD
1754 ?:[\\/]*)
1755 echo $file is in $xxx.
1756 ;;
2304df62 1757 *)
25f94b33
AD
1758 echo "I don't know where '$file' is, and my life depends on it." >&4
1759 echo "Go find a public domain implementation or fix your PATH setting!" >&4
4633a7c4 1760 exit 1
2304df62
AD
1761 ;;
1762 esac
1763done
1764echo " "
1765echo "Don't worry if any of the following aren't found..."
1766say=offhand
1767for file in $trylist; do
dfe9444c
AD
1768 eval xxx=\$$file
1769 case "$xxx" in
1770 /*|?:[\\/]*)
1771 if test -f "$xxx"; then
1772 : ok
1773 else
1774 echo "WARNING: no $xxx -- ignoring your setting for $file." >&4
1775 xxx=`./loc $file $file $pth`
1776 fi
1777 ;;
1778 '') xxx=`./loc $file $file $pth`;;
1779 *) xxx=`./loc $xxx $xxx $pth`;;
1780 esac
2304df62
AD
1781 eval $file=$xxx
1782 eval _$file=$xxx
1783 case "$xxx" in
1784 /*)
1785 echo $file is in $xxx.
1786 ;;
8e07c86e
AD
1787 ?:[\\/]*)
1788 echo $file is in $xxx.
1789 ;;
2304df62
AD
1790 *)
1791 echo "I don't see $file out there, $say."
1792 say=either
1793 ;;
1794 esac
1795done
1796case "$egrep" in
1797egrep)
1798 echo "Substituting grep for egrep."
1799 egrep=$grep
1800 ;;
1801esac
8ff267be 1802case "$ln" in
1803ln)
1804 echo "Substituting cp for ln."
1805 ln=$cp
1806 ;;
1807esac
2304df62
AD
1808case "$test" in
1809test)
1810 echo "Hopefully test is built into your sh."
1811 ;;
1812*)
ecfc5424 1813 if `sh -c "PATH= test true" >/dev/null 2>&1`; then
2304df62
AD
1814 echo "Using the test built into your sh."
1815 test=test
1816 _test=test
1817 fi
1818 ;;
1819esac
1820case "$echo" in
1821echo)
1822 echo "Hopefully echo is built into your sh."
1823 ;;
1824'') ;;
1825*)
1826 echo " "
1827echo "Checking compatibility between $echo and builtin echo (if any)..." >&4
1828 $echo $n "hi there$c" >foo1
1829 echo $n "hi there$c" >foo2
1830 if cmp foo1 foo2 >/dev/null 2>&1; then
1831 echo "They are compatible. In fact, they may be identical."
1832 else
1833 case "$n" in
1834 '-n') n='' c='\c';;
1835 *) n='-n' c='';;
1836 esac
1837 cat <<FOO
1838They are not compatible! You are probably running ksh on a non-USG system.
1839I'll have to use $echo instead of the builtin, since Bourne shell doesn't
1840have echo built in and we may have to run some Bourne shell scripts. That
1841means I'll have to use '$n$c' to suppress newlines now. Life is ridiculous.
1842
1843FOO
1844 $echo $n "The star should be here-->$c"
1845 $echo "*"
1846 fi
1847 $rm -f foo1 foo2
1848 ;;
1849esac
1850
a0d0e21e
LW
1851: determine whether symbolic links are supported
1852echo " "
1853$touch blurfl
1854if $ln -s blurfl sym > /dev/null 2>&1 ; then
1855 echo "Symbolic links are supported." >&4
1856 lns="$ln -s"
1857else
1858 echo "Symbolic links are NOT supported." >&4
1859 lns="$ln"
1860fi
1861$rm -f blurfl sym
1862
ecfc5424
AD
1863: see whether [:lower:] and [:upper:] are supported character classes
1864echo " "
ecfc5424
AD
1865case "`echo AbyZ | $tr '[:lower:]' '[:upper:]' 2>/dev/null`" in
1866ABYZ)
1867 echo "Good, your tr supports [:lower:] and [:upper:] to convert case." >&4
1868 up='[:upper:]'
1869 low='[:lower:]'
1870 ;;
28e8609d
JH
1871*) # There is a discontinuity in EBCDIC between 'I' and 'J'
1872 # (0xc9 and 0xd1), therefore that is a nice testing point.
1873 if test "X$up" = X -o "X$low" = X; then
3eaeeeae 1874 case "`echo IJ | $tr '[I-J]' '[i-j]' 2>/dev/null`" in
28e8609d
JH
1875 ij) up='[A-Z]'
1876 low='[a-z]'
1877 ;;
1878 esac
1879 fi
1880 if test "X$up" = X -o "X$low" = X; then
3eaeeeae 1881 case "`echo IJ | $tr I-J i-j 2>/dev/null`" in
28e8609d
JH
1882 ij) up='A-Z'
1883 low='a-z'
1884 ;;
1885 esac
1886 fi
1887 if test "X$up" = X -o "X$low" = X; then
1888 case "`echo IJ | od -x 2>/dev/null`" in
1889 *C9D1*|*c9d1*)
1890 echo "Hey, this might be EBCDIC." >&4
1891 if test "X$up" = X -o "X$low" = X; then
5ff3f7a4 1892 case "`echo IJ | $tr '[A-IJ-RS-Z]' '[a-ij-rs-z]' 2>/dev/null`" in
28e8609d
JH
1893 ij) up='[A-IJ-RS-Z]'
1894 low='[a-ij-rs-z]'
1895 ;;
1896 esac
1897 fi
1898 if test "X$up" = X -o "X$low" = X; then
5ff3f7a4 1899 case "`echo IJ | $tr A-IJ-RS-Z a-ij-rs-z 2>/dev/null`" in
28e8609d
JH
1900 ij) up='A-IJ-RS-Z'
1901 low='a-ij-rs-z'
1902 ;;
1903 esac
1904 fi
1905 ;;
1906 esac
1907 fi
1908esac
3eaeeeae 1909case "`echo IJ | $tr \"$up\" \"$low\" 2>/dev/null`" in
28e8609d
JH
1910ij)
1911 echo "Using $up and $low to convert case." >&4
1912 ;;
ecfc5424 1913*)
28e8609d
JH
1914 echo "I don't know how to translate letters from upper to lower case." >&4
1915 echo "Your tr is not acting any way I know of." >&4
1916 exit 1
1917 ;;
ecfc5424
AD
1918esac
1919: set up the translation script tr, must be called with ./tr of course
1920cat >tr <<EOSC
1921$startsh
1922case "\$1\$2" in
1923'[A-Z][a-z]') exec $tr '$up' '$low';;
1924'[a-z][A-Z]') exec $tr '$low' '$up';;
1925esac
1926exec $tr "\$@"
1927EOSC
1928chmod +x tr
1929$eunicefix tr
1930
2304df62
AD
1931: Try to determine whether config.sh was made on this system
1932case "$config_sh" in
1933'')
1934myuname=`( ($uname -a) 2>/dev/null || hostname) 2>&1`
28e8609d
JH
1935# tr '[A-Z]' '[a-z]' would not work in EBCDIC
1936# because the A-Z/a-z are not consecutive.
a0d0e21e 1937myuname=`echo $myuname | $sed -e 's/^[^=]*=//' -e 's/\///g' | \
3eaeeeae 1938 ./tr '[A-Z]' '[a-z]' | $tr $trnl ' '`
1aef975c 1939newmyuname="$myuname"
2304df62 1940dflt=n
16d20bd9
AD
1941case "$knowitall" in
1942'')
1943 if test -f ../config.sh; then
1944 if $contains myuname= ../config.sh >/dev/null 2>&1; then
1945 eval "`grep myuname= ../config.sh`"
1946 fi
1947 if test "X$myuname" = "X$newmyuname"; then
1948 dflt=y
1949 fi
2304df62 1950 fi
16d20bd9
AD
1951 ;;
1952*) dflt=y;;
1953esac
2304df62
AD
1954
1955: Get old answers from old config file if Configure was run on the
1956: same system, otherwise use the hints.
1957hint=default
1958cd ..
1959if test -f config.sh; then
16d20bd9
AD
1960 echo " "
1961 rp="I see a config.sh file. Shall I use it to set the defaults?"
2304df62
AD
1962 . UU/myread
1963 case "$ans" in
1964 n*|N*) echo "OK, I'll ignore it."; mv config.sh config.sh.old;;
1965 *) echo "Fetching default answers from your old config.sh file..." >&4
ecfc5424
AD
1966 tmp_n="$n"
1967 tmp_c="$c"
85cad39c 1968 tmp_sh="$sh"
2304df62
AD
1969 . ./config.sh
1970 cp config.sh UU
ecfc5424
AD
1971 n="$tmp_n"
1972 c="$tmp_c"
85cad39c 1973 : Older versions did not always set $sh. Catch re-use of such
1974 : an old config.sh.
1975 case "$sh" in
1976 '') sh="$tmp_sh" ;;
1977 esac
2304df62
AD
1978 hint=previous
1979 ;;
1980 esac
1981fi
1982if test ! -f config.sh; then
1983 $cat <<EOM
1984
4e2a5f63
AD
1985First time through, eh? I have some defaults handy for some systems
1986that need some extra help getting the Configure answers right:
2304df62
AD
1987
1988EOM
dfe9444c 1989 (cd $src/hints; ls -C *.sh) | $sed 's/\.sh/ /g' >&4
2304df62
AD
1990 dflt=''
1991 : Half the following guesses are probably wrong... If you have better
5ff3f7a4 1992 : tests or hints, please send them to jhi@iki.fi
2304df62 1993 : The metaconfig authors would also appreciate a copy...
a0d0e21e 1994 $test -f /irix && osname=irix
85e6fe83
LW
1995 $test -f /xenix && osname=sco_xenix
1996 $test -f /dynix && osname=dynix
1997 $test -f /dnix && osname=dnix
5f05dabc 1998 $test -f /lynx.os && osname=lynxos
1999 $test -f /unicos && osname=unicos && osvers=`$uname -r`
7a4c00b4 2000 $test -f /unicosmk.ar && osname=unicosmk && osvers=`$uname -r`
85e6fe83 2001 $test -f /bin/mips && /bin/mips && osname=mips
ecfc5424
AD
2002 $test -d /NextApps && set X `hostinfo | grep 'NeXT Mach.*:' | \
2003 $sed -e 's/://' -e 's/\./_/'` && osname=next && osvers=$4
a0d0e21e
LW
2004 $test -d /usr/apollo/bin && osname=apollo
2005 $test -f /etc/saf/_sactab && osname=svr4
85e6fe83 2006 $test -d /usr/include/minix && osname=minix
e060872b 2007 if $test -d /MachTen -o -d /MachTen_Folder; then
dfe9444c 2008 osname=machten
4633a7c4 2009 if $test -x /sbin/version; then
dfe9444c 2010 osvers=`/sbin/version | $awk '{print $2}' |
4633a7c4
LW
2011 $sed -e 's/[A-Za-z]$//'`
2012 elif $test -x /usr/etc/version; then
dfe9444c 2013 osvers=`/usr/etc/version | $awk '{print $2}' |
4633a7c4
LW
2014 $sed -e 's/[A-Za-z]$//'`
2015 else
2016 osvers="$2.$3"
2017 fi
2018 fi
85ab1d1d
JH
2019 $test -f /sys/posix.dll &&
2020 $test -f /usr/bin/what &&
2021 set X `/usr/bin/what /sys/posix.dll` &&
2022 $test "$3" = UWIN &&
2023 osname=uwin &&
2024 osvers="$5"
2304df62
AD
2025 if $test -f $uname; then
2026 set X $myuname
2027 shift
2028
2304df62 2029 case "$5" in
85e6fe83 2030 fps*) osname=fps ;;
2304df62
AD
2031 mips*)
2032 case "$4" in
85e6fe83
LW
2033 umips) osname=umips ;;
2034 *) osname=mips ;;
2304df62 2035 esac;;
85e6fe83
LW
2036 [23]100) osname=mips ;;
2037 next*) osname=next ;;
ecfc5424
AD
2038 i386*)
2039 if $test -f /etc/kconfig; then
2040 osname=isc
a0d0e21e
LW
2041 if test "$lns" = "ln -s"; then
2042 osvers=4
2043 elif $contains _SYSV3 /usr/include/stdio.h > /dev/null 2>&1 ; then
2044 osvers=3
2304df62 2045 elif $contains _POSIX_SOURCE /usr/include/stdio.h > /dev/null 2>&1 ; then
a0d0e21e 2046 osvers=2
ecfc5424
AD
2047 fi
2048 fi
2049 ;;
c4f23d77
AD
2050 pc*)
2051 if test -n "$DJGPP"; then
2052 osname=dos
2053 osvers=djgpp
2054 fi
2055 ;;
2304df62
AD
2056 esac
2057
2058 case "$1" in
a0d0e21e
LW
2059 aix) osname=aix
2060 tmp=`( (oslevel) 2>/dev/null || echo "not found") 2>&1`
2061 case "$tmp" in
1aef975c 2062 'not found') osvers="$4"."$3" ;;
a0d0e21e
LW
2063 '<3240'|'<>3240') osvers=3.2.0 ;;
2064 '=3240'|'>3240'|'<3250'|'<>3250') osvers=3.2.4 ;;
2065 '=3250'|'>3250') osvers=3.2.5 ;;
1aef975c 2066 *) osvers=$tmp;;
a0d0e21e
LW
2067 esac
2068 ;;
23f87696
SZ
2069 *dc.osx) osname=dcosx
2070 osvers="$3"
2071 ;;
a0d0e21e
LW
2072 dnix) osname=dnix
2073 osvers="$3"
2074 ;;
2075 domainos) osname=apollo
2076 osvers="$3"
2077 ;;
2078 dgux) osname=dgux
2079 osvers="$3"
2080 ;;
760ac839
LW
2081 dynixptx*) osname=dynixptx
2082 osvers="$3"
2083 ;;
a0d0e21e
LW
2084 freebsd) osname=freebsd
2085 osvers="$3" ;;
2086 genix) osname=genix ;;
2087 hp*) osname=hpux
bfb7748a 2088 osvers=`echo "$3" | $sed 's,.*\.\([0-9]*\.[0-9]*\),\1,'`
a0d0e21e 2089 ;;
a78b0d02 2090 irix*) osname=irix
a0d0e21e
LW
2091 case "$3" in
2092 4*) osvers=4 ;;
2093 5*) osvers=5 ;;
ecfc5424 2094 *) osvers="$3" ;;
a0d0e21e
LW
2095 esac
2096 ;;
2097 linux) osname=linux
2098 case "$3" in
a0d0e21e
LW
2099 *) osvers="$3" ;;
2100 esac
2101 ;;
28e8609d
JH
2102 MiNT) osname=mint
2103 ;;
2104 netbsd*) osname=netbsd
ecfc5424
AD
2105 osvers="$3"
2106 ;;
4e81affe
MM
2107 news-os) osvers="$3"
2108 case "$3" in
2109 4*) osname=newsos4 ;;
2110 *) osname=newsos ;;
2111 esac
2112 ;;
a0d0e21e
LW
2113 bsd386) osname=bsd386
2114 osvers=`$uname -r`
2115 ;;
a1a0e61e
TD
2116 POSIX-BC | posix-bc ) osname=posix-bc
2117 osvers="$3"
2118 ;;
ae3afa4e
TH
2119 powerux | power_ux | powermax_os | powermaxos | \
2120 powerunix | power_unix) osname=powerux
2121 osvers="$3"
2122 ;;
a0d0e21e
LW
2123 next*) osname=next ;;
2124 solaris) osname=solaris
2125 case "$3" in
2126 5*) osvers=`echo $3 | $sed 's/^5/2/g'` ;;
ecfc5424 2127 *) osvers="$3" ;;
a0d0e21e
LW
2128 esac
2129 ;;
85e6fe83
LW
2130 sunos) osname=sunos
2131 case "$3" in
85e6fe83
LW
2132 5*) osname=solaris
2133 osvers=`echo $3 | $sed 's/^5/2/g'` ;;
a0d0e21e 2134 *) osvers="$3" ;;
2304df62
AD
2135 esac
2136 ;;
a0d0e21e 2137 titanos) osname=titanos
85e6fe83 2138 case "$3" in
a0d0e21e
LW
2139 1*) osvers=1 ;;
2140 2*) osvers=2 ;;
2141 3*) osvers=3 ;;
2142 4*) osvers=4 ;;
ecfc5424 2143 *) osvers="$3" ;;
2304df62
AD
2144 esac
2145 ;;
85e6fe83 2146 ultrix) osname=ultrix
ecfc5424 2147 osvers="$3"
2304df62 2148 ;;
28757baa 2149 osf1|mls+) case "$5" in
fed7345c
AD
2150 alpha)
2151 osname=dec_osf
313489a2 2152 osvers=`echo "$3" | sed 's/^[xvt]//'`
ecfc5424
AD
2153 ;;
2154 hp*) osname=hp_osf1 ;;
2155 mips) osname=mips_osf1 ;;
85e6fe83
LW
2156 esac
2157 ;;
a0d0e21e
LW
2158 uts) osname=uts
2159 osvers="$3"
2160 ;;
ff68c719 2161 qnx) osname=qnx
2162 osvers="$4"
2163 ;;
85e6fe83 2164 $2) case "$osname" in
2304df62 2165 *isc*) ;;
a0d0e21e 2166 *freebsd*) ;;
5f05dabc 2167 svr*)
a0d0e21e
LW
2168 : svr4.x or possibly later
2169 case "svr$3" in
2170 ${osname}*)
2171 osname=svr$3
2172 osvers=$4
2173 ;;
2174 esac
2175 case "$osname" in
2176 svr4.0)
2177 : Check for ESIX
2178 if test -f /stand/boot ; then
2179 eval `grep '^INITPROG=[a-z/0-9]*$' /stand/boot`
ecfc5424
AD
2180 if test -n "$INITPROG" -a -f "$INITPROG"; then
2181 isesix=`strings -a $INITPROG|grep 'ESIX SYSTEM V/386 Release 4.0'`
2182 if test -n "$isesix"; then
a0d0e21e
LW
2183 osname=esix4
2184 fi
2185 fi
2186 fi
2187 ;;
2188 esac
2189 ;;
2304df62 2190 *) if test -f /etc/systemid; then
a0d0e21e
LW
2191 osname=sco
2192 set `echo $3 | $sed 's/\./ /g'` $4
c4f23d77 2193 if $test -f $src/hints/sco_$1_$2_$3.sh; then
85e6fe83 2194 osvers=$1.$2.$3
c4f23d77 2195 elif $test -f $src/hints/sco_$1_$2.sh; then
85e6fe83 2196 osvers=$1.$2
c4f23d77 2197 elif $test -f $src/hints/sco_$1.sh; then
85e6fe83 2198 osvers=$1
2304df62 2199 fi
a0d0e21e
LW
2200 else
2201 case "$osname" in
2202 '') : Still unknown. Probably a generic Sys V.
2203 osname="sysv"
2204 osvers="$3"
2205 ;;
2206 esac
2304df62
AD
2207 fi
2208 ;;
2209 esac
2210 ;;
a0d0e21e
LW
2211 *) case "$osname" in
2212 '') : Still unknown. Probably a generic BSD.
2213 osname="$1"
2214 osvers="$3"
2215 ;;
2216 esac
2217 ;;
2304df62
AD
2218 esac
2219 else
dfe9444c
AD
2220 if test -f /vmunix -a -f $src/hints/news_os.sh; then
2221 (what /vmunix | UU/tr '[A-Z]' '[a-z]') > UU/kernel.what 2>&1
2222 if $contains news-os UU/kernel.what >/dev/null 2>&1; then
2223 osname=news_os
2304df62 2224 fi
dfe9444c 2225 $rm -f UU/kernel.what
8e07c86e
AD
2226 elif test -d c:/.; then
2227 set X $myuname
2228 osname=os2
2229 osvers="$5"
2304df62
AD
2230 fi
2231 fi
85e6fe83 2232
a0d0e21e
LW
2233 : Now look for a hint file osname_osvers, unless one has been
2234 : specified already.
2235 case "$hintfile" in
2236 ''|' ')
ecfc5424 2237 file=`echo "${osname}_${osvers}" | $sed -e 's@\.@_@g' -e 's@_$@@'`
a0d0e21e 2238 : Also try without trailing minor version numbers.
ecfc5424
AD
2239 xfile=`echo $file | $sed -e 's@_[^_]*$@@'`
2240 xxfile=`echo $xfile | $sed -e 's@_[^_]*$@@'`
2241 xxxfile=`echo $xxfile | $sed -e 's@_[^_]*$@@'`
2242 xxxxfile=`echo $xxxfile | $sed -e 's@_[^_]*$@@'`
a0d0e21e
LW
2243 case "$file" in
2244 '') dflt=none ;;
2245 *) case "$osvers" in
2246 '') dflt=$file
2247 ;;
dfe9444c 2248 *) if $test -f $src/hints/$file.sh ; then
a0d0e21e 2249 dflt=$file
dfe9444c 2250 elif $test -f $src/hints/$xfile.sh ; then
a0d0e21e 2251 dflt=$xfile
dfe9444c 2252 elif $test -f $src/hints/$xxfile.sh ; then
a0d0e21e 2253 dflt=$xxfile
dfe9444c 2254 elif $test -f $src/hints/$xxxfile.sh ; then
a0d0e21e 2255 dflt=$xxxfile
dfe9444c 2256 elif $test -f $src/hints/$xxxxfile.sh ; then
a0d0e21e 2257 dflt=$xxxxfile
dfe9444c 2258 elif $test -f "$src/hints/${osname}.sh" ; then
a0d0e21e
LW
2259 dflt="${osname}"
2260 else
2261 dflt=none
2262 fi
2263 ;;
2264 esac
85e6fe83
LW
2265 ;;
2266 esac
4e2a5f63
AD
2267 if $test -f Policy.sh ; then
2268 case "$dflt" in
2269 *Policy*) ;;
2270 none) dflt="Policy" ;;
2271 *) dflt="Policy $dflt" ;;
2272 esac
2273 fi
85e6fe83 2274 ;;
a0d0e21e 2275 *)
ecfc5424 2276 dflt=`echo $hintfile | $sed 's/\.sh$//'`
a0d0e21e 2277 ;;
2304df62 2278 esac
1aef975c 2279
4e2a5f63
AD
2280 if $test -f Policy.sh ; then
2281 $cat <<EOM
2282
2283There's also a Policy hint file available, which should make the
2284site-specific (policy) questions easier to answer.
2285EOM
2286
2287 fi
2288
2304df62
AD
2289 $cat <<EOM
2290
2291You may give one or more space-separated answers, or "none" if appropriate.
4e2a5f63
AD
2292A well-behaved OS will have no hints, so answering "none" or just "Policy"
2293is a good thing. DO NOT give a wrong version.
2304df62
AD
2294
2295EOM
4e2a5f63 2296
2304df62 2297 rp="Which of these apply, if any?"
dfe9444c 2298 . UU/myread
85e6fe83
LW
2299 tans=$ans
2300 for file in $tans; do
4e2a5f63
AD
2301 if $test X$file = XPolicy -a -f Policy.sh; then
2302 . Policy.sh
2303 $cat Policy.sh >> UU/config.sh
2304 elif $test -f $src/hints/$file.sh; then
dfe9444c
AD
2305 . $src/hints/$file.sh
2306 $cat $src/hints/$file.sh >> UU/config.sh
85e6fe83 2307 elif $test X$tans = X -o X$tans = Xnone ; then
2304df62
AD
2308 : nothing
2309 else
85e6fe83
LW
2310 : Give one chance to correct a possible typo.
2311 echo "$file.sh does not exist"
2312 dflt=$file
2313 rp="hint to use instead?"
dfe9444c 2314 . UU/myread
85e6fe83 2315 for file in $ans; do
dfe9444c
AD
2316 if $test -f "$src/hints/$file.sh"; then
2317 . $src/hints/$file.sh
2318 $cat $src/hints/$file.sh >> UU/config.sh
85e6fe83
LW
2319 elif $test X$ans = X -o X$ans = Xnone ; then
2320 : nothing
2321 else
2322 echo "$file.sh does not exist -- ignored."
2323 fi
2324 done
2304df62
AD
2325 fi
2326 done
85e6fe83 2327
2304df62 2328 hint=recommended
85e6fe83 2329 : Remember our hint file for later.
dfe9444c 2330 if $test -f "$src/hints/$file.sh" ; then
a0d0e21e 2331 hintfile="$file"
85e6fe83 2332 else
a0d0e21e 2333 hintfile=''
85e6fe83 2334 fi
2304df62
AD
2335fi
2336cd UU
2337;;
2338*)
2339 echo " "
2340 echo "Fetching default answers from $config_sh..." >&4
ecfc5424
AD
2341 tmp_n="$n"
2342 tmp_c="$c"
2304df62
AD
2343 cd ..
2344 cp $config_sh config.sh 2>/dev/null
a78b0d02 2345 chmod +w config.sh
2304df62
AD
2346 . ./config.sh
2347 cd UU
2348 cp ../config.sh .
ecfc5424
AD
2349 n="$tmp_n"
2350 c="$tmp_c"
2304df62
AD
2351 hint=previous
2352 ;;
2353esac
1aef975c
AD
2354test "$override" && . ./optdef.sh
2355myuname="$newmyuname"
2304df62
AD
2356
2357: Restore computed paths
2358for file in $loclist $trylist; do
2359 eval $file="\$_$file"
2360done
2361
85e6fe83 2362cat << EOM
a0d0e21e 2363
85e6fe83 2364Configure uses the operating system name and version to set some defaults.
ecfc5424
AD
2365The default value is probably right if the name rings a bell. Otherwise,
2366since spelling matters for me, either accept the default or answer "none"
2367to leave it blank.
a0d0e21e 2368
85e6fe83 2369EOM
85e6fe83 2370case "$osname" in
a0d0e21e 2371 ''|' ')
85e6fe83 2372 case "$hintfile" in
a0d0e21e 2373 ''|' '|none) dflt=none ;;
ecfc5424 2374 *) dflt=`echo $hintfile | $sed -e 's/\.sh$//' -e 's/_.*$//'` ;;
85e6fe83
LW
2375 esac
2376 ;;
2377 *) dflt="$osname" ;;
2378esac
2379rp="Operating system name?"
2380. ./myread
2381case "$ans" in
ecfc5424
AD
2382none) osname='' ;;
2383*) osname=`echo "$ans" | $sed -e 's/[ ][ ]*/_/g' | ./tr '[A-Z]' '[a-z]'`;;
85e6fe83 2384esac
8ff267be 2385echo " "
2386case "$osvers" in
2387 ''|' ')
2388 case "$hintfile" in
2389 ''|' '|none) dflt=none ;;
2390 *) dflt=`echo $hintfile | $sed -e 's/\.sh$//' -e 's/^[^_]*//'`
2391 dflt=`echo $dflt | $sed -e 's/^_//' -e 's/_/./g'`
2392 case "$dflt" in
2393 ''|' ') dflt=none ;;
2394 esac
2395 ;;
2396 esac
2397 ;;
2398 *) dflt="$osvers" ;;
2399esac
2400rp="Operating system version?"
2401. ./myread
2402case "$ans" in
2403none) osvers='' ;;
2404*) osvers="$ans" ;;
2405esac
2406
2304df62 2407: who configured the system
7792a3d7 2408cf_time=`LC_ALL=C; export LC_ALL; $date 2>&1`
8ff267be 2409cf_by=`(logname) 2>/dev/null`
dfe9444c
AD
2410case "$cf_by" in
2411"")
8ff267be 2412 cf_by=`(whoami) 2>/dev/null`
dfe9444c
AD
2413 case "$cf_by" in
2414 "") cf_by=unknown ;;
8ff267be 2415 esac ;;
2416esac
2304df62 2417
dfe9444c
AD
2418: set up the script used to warn in case of inconsistency
2419cat <<EOS >whoa
2420$startsh
2421EOS
2422cat <<'EOSC' >>whoa
2423dflt=y
2424echo " "
2425echo "*** WHOA THERE!!! ***" >&4
2426echo " The $hint value for \$$var on this machine was \"$was\"!" >&4
2427rp=" Keep the $hint value?"
2428. ./myread
2429case "$ans" in
2430y) td=$was; tu=$was;;
2431esac
2432EOSC
2433
2434: function used to set $1 to $val
2435setvar='var=$1; eval "was=\$$1"; td=$define; tu=$undef;
2436case "$val$was" in
2437$define$undef) . ./whoa; eval "$var=\$td";;
2438$undef$define) . ./whoa; eval "$var=\$tu";;
2439*) eval "$var=$val";;
2440esac'
2441
2442cat <<EOM
2443
2444Perl can be built to take advantage of threads, on some systems.
2445To do so, Configure must be run with -Dusethreads.
2446(See README.threads for details.)
2447EOM
2448case "$usethreads" in
2449$define|true|[yY]*) dflt='y';;
2450*) dflt='n';;
2451esac
2452rp='Build a threading Perl?'
2453. ./myread
2454case "$ans" in
2455y|Y) val="$define" ;;
2456*) val="$undef" ;;
2457esac
2458set usethreads
2459eval $setvar
693762b4 2460: Look for a hint-file generated 'call-back-unit'. Now that the
dc45a647
MB
2461: user has specified if a threading perl is to be built, we may need
2462: to set or change some other defaults.
693762b4
AD
2463if $test -f usethreads.cbu; then
2464 . ./usethreads.cbu
2465fi
2466case "$d_oldpthreads" in
2467'') : Configure tests would be welcome here. For now, assume undef.
2468 val="$undef" ;;
2469*) val="$d_oldpthreads" ;;
2470esac
2471set d_oldpthreads
2472eval $setvar
dfe9444c 2473
85ab1d1d
JH
2474cat <<EOM
2475
2476Perl can be built so that multiple Perl interpreters can coexist
2477within the same Perl executable. To do so, Configure must be run with
2478-Dusemultiplicity.
2479
2480Normally you do not need this and you should answer no.
2481
2482EOM
2483case "$usemultiplicity" in
2484$define|true|[yY]*) dflt='y';;
2485*) dflt='n';;
2486esac
2487rp='Build Perl for multiplicity?'
2488. ./myread
2489case "$ans" in
2490y|Y) val="$define" ;;
2491*) val="$undef" ;;
2492esac
2493set usemultiplicity
2494eval $setvar
2495
2496cat <<EOM
2497
2498Perl can be built to take advantage of explicit 64-bit interfaces,
2499on some systems. To do so, Configure must be run with -Duse64bits.
2500
2501If this doesn't make any sense to you, just accept the default 'n'.
2502EOM
2503case "$use64bits" in
2504$define|true|[yY]*) dflt='y';;
2505*) dflt='n';;
2506esac
2507rp='Try to use explicit 64-bit interfaces, if available?'
2508. ./myread
2509case "$ans" in
2510y|Y)
2511 val="$define"
2512 ;;
2513*)
2514 val="$undef"
2515 ;;
2516esac
2517set use64bits
2518eval $setvar
2519
2520archname64=''
2521
4633a7c4 2522: determine the architecture name
2304df62 2523echo " "
4633a7c4
LW
2524if xxx=`./loc arch blurfl $pth`; $test -f "$xxx"; then
2525 tarch=`arch`"-$osname"
2526elif xxx=`./loc uname blurfl $pth`; $test -f "$xxx" ; then
2527 if uname -m > tmparch 2>&1 ; then
7e1af8bc 2528 tarch=`$sed -e 's/ *$//' -e 's/ /_/g' \
5f05dabc 2529 -e 's/$/'"-$osname/" tmparch`
4633a7c4
LW
2530 else
2531 tarch="$osname"
2532 fi
2533 $rm -f tmparch
2534else
2535 tarch="$osname"
2536fi
2537case "$myarchname" in
2538''|"$tarch") ;;
2539*)
2540 echo "(Your architecture name used to be $myarchname.)"
2541 archname=''
2304df62
AD
2542 ;;
2543esac
85ab1d1d 2544myarchname="$tarch"
4633a7c4
LW
2545case "$archname" in
2546'') dflt="$tarch";;
2547*) dflt="$archname";;
2548esac
2549rp='What is your architecture name'
2550. ./myread
85ab1d1d 2551archname="$ans"
dc66995c 2552case "$usethreads" in
85ab1d1d
JH
2553$define)
2554 echo "Threads selected." >&4
2555 case "$archname" in
2556 *-thread*) echo "...and architecture name already has -thread." >&4
2557 ;;
2558 *) archname="$archname-thread"
2559 echo "...setting architecture name to $archname." >&4
2560 ;;
2561 esac
2562 ;;
dc66995c 2563esac
85ab1d1d
JH
2564case "$usemultiplicity" in
2565$define)
2566 echo "Multiplicity selected." >&4
2567 case "$archname" in
2568 *-multi*) echo "...and architecture name already has -multi." >&4
2569 ;;
2570 *) archname="$archname-multi"
2571 echo "...setting architecture name to $archname." >&4
2572 ;;
2573 esac
2574 ;;
2575esac
2576case "$use64bits" in
2577$define)
2578 echo "Explicit 64-bitness selected." >&4
2579 case "$archname64" in
2580 '')
2581 ;;
2582 *)
2583 case "$archname" in
2584 *-$archname64*) echo "...and architecture name already has $archname64." >&4
2585 ;;
2586 *) archname="$archname-$archname64"
2587 echo "...setting architecture name to $archname." >&4
2588 ;;
2589 esac
2590 ;;
2591 esac
2592esac
2593
4633a7c4
LW
2594: is AFS running?
2595echo " "
2afac517 2596case "$afs" in
2597$define|true) afs=true ;;
2598$undef|false) afs=false ;;
2599*) if test -d /afs; then
2600 afs=true
2601 else
2602 afs=false
2603 fi
2604 ;;
2605esac
2606if $afs; then
4633a7c4 2607 echo "AFS may be running... I'll be extra cautious then..." >&4
2304df62 2608else
4633a7c4 2609 echo "AFS does not seem to be running..." >&4
2304df62
AD
2610fi
2611
4633a7c4
LW
2612: decide how portable to be. Allow command line overrides.
2613case "$d_portable" in
2614"$undef") ;;
2615*) d_portable="$define" ;;
2304df62 2616esac
2304df62 2617
4633a7c4
LW
2618: set up shell script to do ~ expansion
2619cat >filexp <<EOSS
2620$startsh
2621: expand filename
2622case "\$1" in
2623 ~/*|~)
2624 echo \$1 | $sed "s|~|\${HOME-\$LOGDIR}|"
2304df62 2625 ;;
4633a7c4
LW
2626 ~*)
2627 if $test -f /bin/csh; then
2628 /bin/csh -f -c "glob \$1"
2629 failed=\$?
2630 echo ""
2631 exit \$failed
2632 else
2633 name=\`$expr x\$1 : '..\([^/]*\)'\`
2634 dir=\`$sed -n -e "/^\${name}:/{s/^[^:]*:[^:]*:[^:]*:[^:]*:[^:]*:\([^:]*\).*"'\$'"/\1/" -e p -e q -e '}' </etc/passwd\`
2635 if $test ! -d "\$dir"; then
2636 me=\`basename \$0\`
2637 echo "\$me: can't locate home directory for: \$name" >&2
2638 exit 1
2639 fi
2640 case "\$1" in
2641 */*)
2642 echo \$dir/\`$expr x\$1 : '..[^/]*/\(.*\)'\`
2643 ;;
2644 *)
2645 echo \$dir
2646 ;;
2304df62 2647 esac
4633a7c4 2648 fi
2304df62
AD
2649 ;;
2650*)
4633a7c4 2651 echo \$1
2304df62
AD
2652 ;;
2653esac
4633a7c4
LW
2654EOSS
2655chmod +x filexp
2656$eunicefix filexp
2304df62
AD
2657
2658: now set up to get a file name
28757baa 2659cat <<EOS >getfile
2660$startsh
2661EOS
2662cat <<'EOSC' >>getfile
2304df62
AD
2663tilde=''
2664fullpath=''
2665already=''
2666skip=''
2667none_ok=''
2668exp_file=''
a0d0e21e 2669nopath_ok=''
2304df62
AD
2670orig_rp="$rp"
2671orig_dflt="$dflt"
2672
2673case "$fn" in
ecfc5424 2674*\(*)
28e8609d 2675 expr $fn : '.*(\(.*\)).*' | tr ',' $trnl >getfile.ok
ecfc5424
AD
2676 fn=`echo $fn | sed 's/(.*)//'`
2677 ;;
2678esac
2679
2680case "$fn" in
a0d0e21e
LW
2681*:*)
2682 loc_file=`expr $fn : '.*:\(.*\)'`
2683 fn=`expr $fn : '\(.*\):.*'`
2684 ;;
2685esac
2686
2687case "$fn" in
2304df62
AD
2688*~*) tilde=true;;
2689esac
2690case "$fn" in
2691*/*) fullpath=true;;
2692esac
2693case "$fn" in
2694*+*) skip=true;;
2695esac
2696case "$fn" in
2697*n*) none_ok=true;;
2698esac
2699case "$fn" in
2700*e*) exp_file=true;;
2701esac
a0d0e21e
LW
2702case "$fn" in
2703*p*) nopath_ok=true;;
2704esac
2304df62
AD
2705
2706case "$fn" in
2707*f*) type='File';;
2708*d*) type='Directory';;
a0d0e21e 2709*l*) type='Locate';;
2304df62
AD
2710esac
2711
2712what="$type"
2713case "$what" in
2714Locate) what='File';;
2715esac
2716
2717case "$exp_file" in
2718'')
2719 case "$d_portable" in
2720 "$define") ;;
2721 *) exp_file=true;;
2722 esac
2723 ;;
2724esac
2725
2726cd ..
2727while test "$type"; do
2728 redo=''
2729 rp="$orig_rp"
2730 dflt="$orig_dflt"
2731 case "$tilde" in
2732 true) rp="$rp (~name ok)";;
2733 esac
2734 . UU/myread
ecfc5424
AD
2735 if test -f UU/getfile.ok && \
2736 $contains "^$ans\$" UU/getfile.ok >/dev/null 2>&1
2737 then
2738 value="$ans"
2739 ansexp="$ans"
2740 break
2741 fi
2304df62
AD
2742 case "$ans" in
2743 none)
2744 value=''
2745 ansexp=''
2746 case "$none_ok" in
2747 true) type='';;
2748 esac
2749 ;;
2750 *)
2751 case "$tilde" in
2752 '') value="$ans"
2753 ansexp="$ans";;
2754 *)
2755 value=`UU/filexp $ans`
2756 case $? in
2757 0)
2758 if test "$ans" != "$value"; then
ecfc5424 2759 echo "(That expands to $value on this system.)"
2304df62
AD
2760 fi
2761 ;;
2762 *) value="$ans";;
2763 esac
2764 ansexp="$value"
2765 case "$exp_file" in
2766 '') value="$ans";;
2767 esac
2768 ;;
2769 esac
2770 case "$fullpath" in
2771 true)
2772 case "$ansexp" in
2773 /*) value="$ansexp" ;;
2774 *)
2775 redo=true
2776 case "$already" in
2777 true)
2778 echo "I shall only accept a full path name, as in /bin/ls." >&4
2779 echo "Use a ! shell escape if you wish to check pathnames." >&4
2780 ;;
2781 *)
2782 echo "Please give a full path name, starting with slash." >&4
2783 case "$tilde" in
2784 true)
2785 echo "Note that using ~name is ok provided it expands well." >&4
2786 already=true
2787 ;;
2788 esac
2789 esac
2790 ;;
2791 esac
2792 ;;
2793 esac
2794 case "$redo" in
2795 '')
2796 case "$type" in
2797 File)
2798 if test -f "$ansexp"; then
2799 type=''
2800 elif test -r "$ansexp" || (test -h "$ansexp") >/dev/null 2>&1
2801 then
2802 echo "($value is not a plain file, but that's ok.)"
2803 type=''
2804 fi
2805 ;;
2806 Directory)
2807 if test -d "$ansexp"; then
2808 type=''
2809 fi
2810 ;;
2811 Locate)
40000a8c 2812 if test -d "$ansexp"; then
a0d0e21e
LW
2813 echo "(Looking for $loc_file in directory $value.)"
2814 value="$value/$loc_file"
40000a8c 2815 ansexp="$ansexp/$loc_file"
2304df62 2816 fi
40000a8c 2817 if test -f "$ansexp"; then
2304df62
AD
2818 type=''
2819 fi
a0d0e21e
LW
2820 case "$nopath_ok" in
2821 true) case "$value" in
2822 */*) ;;
2823 *) echo "Assuming $value will be in people's path."
2824 type=''
2825 ;;
2826 esac
2827 ;;
2828 esac
2304df62
AD
2829 ;;
2830 esac
2831
2832 case "$skip" in
2833 true) type='';
2834 esac
2835
2836 case "$type" in
2837 '') ;;
2838 *)
2839 if test "$fastread" = yes; then
2840 dflt=y
2841 else
2842 dflt=n
2843 fi
2844 rp="$what $value doesn't exist. Use that name anyway?"
2845 . UU/myread
2846 dflt=''
2847 case "$ans" in
2848 y*) type='';;
2849 *) echo " ";;
2850 esac
2851 ;;
2852 esac
2853 ;;
2854 esac
2855 ;;
2856 esac
2857done
2858cd UU
2859ans="$value"
2860rp="$orig_rp"
2861dflt="$orig_dflt"
ecfc5424 2862rm -f getfile.ok
2304df62
AD
2863EOSC
2864
4633a7c4
LW
2865: determine root of directory hierarchy where package will be installed.
2866case "$prefix" in
2867'')
2868 dflt=`./loc . /usr/local /usr/local /local /opt /usr`
8e07c86e 2869 ;;
4633a7c4
LW
2870*)
2871 dflt="$prefix"
8e07c86e
AD
2872 ;;
2873esac
4633a7c4 2874$cat <<EOM
2304df62 2875
4633a7c4
LW
2876By default, $package will be installed in $dflt/bin, manual
2877pages under $dflt/man, etc..., i.e. with $dflt as prefix for
2878all installation directories. Typically set to /usr/local, but you
2879may choose /usr if you wish to install $package among your system
2880binaries. If you wish to have binaries under /bin but manual pages
2881under /usr/local/man, that's ok: you will be prompted separately
2882for each of the installation directories, the prefix being only used
2883to set the defaults.
8e07c86e
AD
2884
2885EOM
2886fn=d~
2887rp='Installation prefix to use?'
2888. ./getfile
2889oldprefix=''
2890case "$prefix" in
a0d0e21e 2891'') ;;
8e07c86e
AD
2892*)
2893 case "$ans" in
2894 "$prefix") ;;
2895 *) oldprefix="$prefix";;
2896 esac
2897 ;;
a0d0e21e 2898esac
8e07c86e
AD
2899prefix="$ans"
2900prefixexp="$ansexp"
a0d0e21e 2901
8e07c86e
AD
2902: set the prefixit variable, to compute a suitable default value
2903prefixit='case "$3" in
2904""|none)
2905 case "$oldprefix" in
2906 "") eval "$1=\"\$$2\"";;
2907 *)
2908 case "$3" in
2909 "") eval "$1=";;
2910 none)
2911 eval "tp=\"\$$2\"";
2912 case "$tp" in
2913 ""|" ") eval "$1=\"\$$2\"";;
2914 *) eval "$1=";;
2915 esac;;
2916 esac;;
2917 esac;;
2918*)
2919 eval "tp=\"$oldprefix-\$$2-\""; eval "tp=\"$tp\"";
2920 case "$tp" in
2921 --|/*--|\~*--) eval "$1=\"$prefix/$3\"";;
2922 /*-$oldprefix/*|\~*-$oldprefix/*)
2923 eval "$1=\`echo \$$2 | sed \"s,^$oldprefix,$prefix,\"\`";;
2924 *) eval "$1=\"\$$2\"";;
2925 esac;;
2926esac'
a0d0e21e 2927
bfb7748a
AD
2928: set the base revision
2929baserev=5.0
2930
2931: get the patchlevel
2932echo " "
2933echo "Getting the current patchlevel..." >&4
2934if $test -r $rsrc/patchlevel.h;then
2935 patchlevel=`awk '/define[ ]+PATCHLEVEL/ {print $3}' $rsrc/patchlevel.h`
2936 subversion=`awk '/define[ ]+SUBVERSION/ {print $3}' $rsrc/patchlevel.h`
2937else
2938 patchlevel=0
2939 subversion=0
2940fi
2941$echo $n "(You have $package" $c
2942case "$package" in
2943"*$baserev") ;;
2944*) $echo $n " $baserev" $c ;;
2945esac
2946$echo $n " patchlevel $patchlevel" $c
2947test 0 -eq "$subversion" || $echo $n " subversion $subversion" $c
2948echo ".)"
2949
2950if test 0 -eq "$subversion"; then
2951 version=`LC_ALL=C; export LC_ALL; \
2952 echo $baserev $patchlevel | \
2953 $awk '{ printf "%.3f\n", $1 + $2/1000.0 }'`
2954else
2955 version=`LC_ALL=C; export LC_ALL; \
2956 echo $baserev $patchlevel $subversion | \
2957 $awk '{ printf "%.5f\n", $1 + $2/1000.0 + $3/100000.0 }'`
2958fi
2959: Figure out perl API version. Perhaps this should be in patchlevel.h
2960if test "$subversion" -lt 50; then
2961 apiversion=`LC_ALL=C; export LC_ALL; \
2962 echo $baserev $patchlevel | \
2963 $awk '{ printf "%.3f\n", $1 + $2/1000.0 }'`
2964else
2965 apiversion="$version"
2966fi
2967
4633a7c4 2968: determine where private library files go
3a6175e1
AD
2969: Usual default is /usr/local/lib/perl5/$version.
2970: Also allow things like /opt/perl/lib/$version, since
bfb7748a 2971: /opt/perl/lib/perl5... would be redundant.
4633a7c4 2972case "$prefix" in
3a6175e1
AD
2973*perl*) set dflt privlib lib/$version ;;
2974*) set dflt privlib lib/$package/$version ;;
4633a7c4 2975esac
8e07c86e 2976eval $prefixit
4633a7c4
LW
2977$cat <<EOM
2978
2979There are some auxiliary files for $package that need to be put into a
2980private library directory that is accessible by everyone.
2981
2982EOM
2983fn=d~+
2984rp='Pathname where the private library files will reside?'
8e07c86e 2985. ./getfile
4633a7c4
LW
2986if $test "X$privlibexp" != "X$ansexp"; then
2987 installprivlib=''
8e07c86e 2988fi
4633a7c4
LW
2989privlib="$ans"
2990privlibexp="$ansexp"
8e07c86e
AD
2991if $afs; then
2992 $cat <<EOM
2304df62 2993
8e07c86e 2994Since you are running AFS, I need to distinguish the directory in which
4633a7c4 2995private files reside from the directory in which they are installed (and from
8e07c86e 2996which they are presumably copied to the former directory by occult means).
a0d0e21e 2997
8e07c86e 2998EOM
4633a7c4
LW
2999 case "$installprivlib" in
3000 '') dflt=`echo $privlibexp | sed 's#^/afs/#/afs/.#'`;;
3001 *) dflt="$installprivlib";;
8e07c86e
AD
3002 esac
3003 fn=de~
4633a7c4 3004 rp='Where will private files be installed?'
8e07c86e 3005 . ./getfile
4633a7c4 3006 installprivlib="$ans"
8e07c86e 3007else
4633a7c4
LW
3008 installprivlib="$privlibexp"
3009fi
3010
8e07c86e
AD
3011: set the prefixup variable, to restore leading tilda escape
3012prefixup='case "$prefixexp" in
3013"$prefix") ;;
3014*) eval "$1=\`echo \$$1 | sed \"s,^$prefixexp,$prefix,\"\`";;
3015esac'
3016
4633a7c4
LW
3017: determine where public architecture dependent libraries go
3018set archlib archlib
8e07c86e 3019eval $prefixit
3a6175e1 3020: privlib default is /usr/local/lib/$package/$version
bfb7748a 3021: archlib default is /usr/local/lib/$package/$version/$archname
3a6175e1 3022: privlib may have an optional trailing /share.
bfb7748a
AD
3023tdflt=`echo $privlib | $sed 's,/share$,,'`
3024tdflt=$tdflt/$archname
4633a7c4 3025case "$archlib" in
bfb7748a 3026'') dflt=$tdflt
8e07c86e 3027 ;;
bfb7748a 3028*) dflt="$archlib"
774d564b 3029 ;;
8e07c86e 3030esac
4633a7c4
LW
3031cat <<EOM
3032
3033$spackage contains architecture-dependent library files. If you are
3034sharing libraries in a heterogeneous environment, you might store
3035these files in a separate location. Otherwise, you can just include
3036them with the rest of the public library files.
3037
8e07c86e 3038EOM
4633a7c4
LW
3039fn=d+~
3040rp='Where do you want to put the public architecture-dependent libraries?'
8e07c86e 3041. ./getfile
4633a7c4
LW
3042archlib="$ans"
3043archlibexp="$ansexp"
3044
8e07c86e
AD
3045if $afs; then
3046 $cat <<EOM
3047
7bac28a0 3048Since you are running AFS, I need to distinguish the directory in
3049which architecture-dependent library files reside from the directory
3050in which they are installed (and from which they are presumably copied
3051to the former directory by occult means).
8e07c86e
AD
3052
3053EOM
4633a7c4
LW
3054 case "$installarchlib" in
3055 '') dflt=`echo $archlibexp | sed 's#^/afs/#/afs/.#'`;;
3056 *) dflt="$installarchlib";;
8e07c86e
AD
3057 esac
3058 fn=de~
4633a7c4 3059 rp='Where will architecture-dependent library files be installed?'
8e07c86e 3060 . ./getfile
4633a7c4 3061 installarchlib="$ans"
8e07c86e 3062else
4633a7c4
LW
3063 installarchlib="$archlibexp"
3064fi
3065if $test X"$archlib" = X"$privlib"; then
3066 d_archlib="$undef"
3067else
3068 d_archlib="$define"
8e07c86e
AD
3069fi
3070
40a7a20a 3071: make some quick guesses about what we are up against
3072echo " "
3073$echo $n "Hmm... $c"
3074echo exit 1 >bsd
3075echo exit 1 >usg
3076echo exit 1 >v7
3077echo exit 1 >osf1
3078echo exit 1 >eunice
3079echo exit 1 >xenix
3080echo exit 1 >venix
8ff267be 3081echo exit 1 >os2
40a7a20a 3082d_bsd="$undef"
3083$cat /usr/include/signal.h /usr/include/sys/signal.h >foo 2>/dev/null
3084if test -f /osf_boot || $contains 'OSF/1' /usr/include/ctype.h >/dev/null 2>&1
3085then
3086 echo "Looks kind of like an OSF/1 system, but we'll see..."
3087 echo exit 0 >osf1
3088elif test `echo abc | tr a-z A-Z` = Abc ; then
3089 xxx=`./loc addbib blurfl $pth`
3090 if $test -f $xxx; then
3091 echo "Looks kind of like a USG system with BSD features, but we'll see..."
3092 echo exit 0 >bsd
3093 echo exit 0 >usg
3094 else
3095 if $contains SIGTSTP foo >/dev/null 2>&1 ; then
3096 echo "Looks kind of like an extended USG system, but we'll see..."
3097 else
3098 echo "Looks kind of like a USG system, but we'll see..."
3099 fi
3100 echo exit 0 >usg
3101 fi
3102elif $contains SIGTSTP foo >/dev/null 2>&1 ; then
3103 echo "Looks kind of like a BSD system, but we'll see..."
3104 d_bsd="$define"
3105 echo exit 0 >bsd
3106else
3107 echo "Looks kind of like a Version 7 system, but we'll see..."
3108 echo exit 0 >v7
3109fi
3110case "$eunicefix" in
3111*unixtovms*)
3112 $cat <<'EOI'
3113There is, however, a strange, musty smell in the air that reminds me of
3114something...hmm...yes...I've got it...there's a VMS nearby, or I'm a Blit.
3115EOI
3116 echo exit 0 >eunice
3117 d_eunice="$define"
3118: it so happens the Eunice I know will not run shell scripts in Unix format
3119 ;;
3120*)
3121 echo " "
3122 echo "Congratulations. You aren't running Eunice."
3123 d_eunice="$undef"
3124 ;;
3125esac
8ff267be 3126: Detect OS2. The p_ variable is set above in the Head.U unit.
3127case "$p_" in
3128:) ;;
3129*)
3130 $cat <<'EOI'
3131I have the feeling something is not exactly right, however...don't tell me...
3132lemme think...does HAL ring a bell?...no, of course, you're only running OS/2!
3133EOI
3134 echo exit 0 >os2
3135 ;;
3136esac
40a7a20a 3137if test -f /xenix; then
3138 echo "Actually, this looks more like a XENIX system..."
3139 echo exit 0 >xenix
3140 d_xenix="$define"
3141else
3142 echo " "
3143 echo "It's not Xenix..."
3144 d_xenix="$undef"
3145fi
3146chmod +x xenix
3147$eunicefix xenix
3148if test -f /venix; then
3149 echo "Actually, this looks more like a VENIX system..."
3150 echo exit 0 >venix
3151else
3152 echo " "
3153 if ./xenix; then
3154 : null
3155 else
3156 echo "Nor is it Venix..."
3157 fi
3158fi
8ff267be 3159chmod +x bsd usg v7 osf1 eunice xenix venix os2
3160$eunicefix bsd usg v7 osf1 eunice xenix venix os2
40a7a20a 3161$rm -f foo
3162
3163: see if setuid scripts can be secure
3164$cat <<EOM
3165
3166Some kernels have a bug that prevents setuid #! scripts from being
3167secure. Some sites have disabled setuid #! scripts because of this.
3168
3169First let's decide if your kernel supports secure setuid #! scripts.
3170(If setuid #! scripts would be secure but have been disabled anyway,
3171don't say that they are secure if asked.)
3172
3173EOM
3174
3175val="$undef"
3176if $test -d /dev/fd; then
3177 echo "#!$ls" >reflect
3178 chmod +x,u+s reflect
3179 ./reflect >flect 2>&1
3180 if $contains "/dev/fd" flect >/dev/null; then
3181 echo "Congratulations, your kernel has secure setuid scripts!" >&4
3182 val="$define"
3183 else
3184 $cat <<EOM
3185If you are not sure if they are secure, I can check but I'll need a
3186username and password different from the one you are using right now.
3187If you don't have such a username or don't want me to test, simply
3188enter 'none'.
3189
3190EOM
3191 rp='Other username to test security of setuid scripts with?'
3192 dflt='none'
3193 . ./myread
3194 case "$ans" in
3195 n|none)
3196 case "$d_suidsafe" in
3197 '') echo "I'll assume setuid scripts are *not* secure." >&4
3198 dflt=n;;
3199 "$undef")
3200 echo "Well, the $hint value is *not* secure." >&4
3201 dflt=n;;
3202 *) echo "Well, the $hint value *is* secure." >&4
3203 dflt=y;;
3204 esac
3205 ;;
3206 *)
3207 $rm -f reflect flect
3208 echo "#!$ls" >reflect
3209 chmod +x,u+s reflect
3210 echo >flect
3211 chmod a+w flect
3212 echo '"su" will (probably) prompt you for '"$ans's password."
3213 su $ans -c './reflect >flect'
3214 if $contains "/dev/fd" flect >/dev/null; then
3215 echo "Okay, it looks like setuid scripts are secure." >&4
3216 dflt=y
3217 else
3218 echo "I don't think setuid scripts are secure." >&4
3219 dflt=n
3220 fi
3221 ;;
3222 esac
3223 rp='Does your kernel have *secure* setuid scripts?'
3224 . ./myread
3225 case "$ans" in
3226 [yY]*) val="$define";;
3227 *) val="$undef";;
3228 esac
3229 fi
3230else
3231 echo "I don't think setuid scripts are secure (no /dev/fd directory)." >&4
760ac839 3232 echo "(That's for file descriptors, not floppy disks.)"
40a7a20a 3233 val="$undef"
3234fi
3235set d_suidsafe
3236eval $setvar
3237
3238$rm -f reflect flect
3239
3240: now see if they want to do setuid emulation
3241echo " "
3242val="$undef"
3243case "$d_suidsafe" in
3244"$define")
3245 val="$undef"
3246 echo "No need to emulate SUID scripts since they are secure here." >& 4
3247 ;;
3248*)
3249 $cat <<EOM
3250Some systems have disabled setuid scripts, especially systems where
3251setuid scripts cannot be secure. On systems where setuid scripts have
dfe9444c
AD
3252been disabled, the setuid/setgid bits on scripts are currently
3253useless. It is possible for $package to detect those bits and emulate
3254setuid/setgid in a secure fashion. This emulation will only work if
3255setuid scripts have been disabled in your kernel.
8e07c86e
AD
3256
3257EOM
dfe9444c
AD
3258 case "$d_dosuid" in
3259 "$define") dflt=y ;;
3260 *) dflt=n ;;
3261 esac
3262 rp="Do you want to do setuid/setgid emulation?"
3263 . ./myread
3264 case "$ans" in
3265 [yY]*) val="$define";;
3266 *) val="$undef";;
3267 esac
3268 ;;
4633a7c4 3269esac
dfe9444c 3270set d_dosuid
4633a7c4 3271eval $setvar
8e07c86e 3272
2c7991dc 3273: determine where manual pages are on this system
3274echo " "
3275case "$sysman" in
3276'')
3277 syspath='/usr/man/man1 /usr/man/mann /usr/man/manl /usr/man/local/man1'
3278 syspath="$syspath /usr/man/u_man/man1 /usr/share/man/man1"
3279 syspath="$syspath /usr/catman/u_man/man1 /usr/man/l_man/man1"
3280 syspath="$syspath /usr/local/man/u_man/man1 /usr/local/man/l_man/man1"
3281 syspath="$syspath /usr/man/man.L /local/man/man1 /usr/local/man/man1"
3282 sysman=`./loc . /usr/man/man1 $syspath`
3283 ;;
3284esac
3285if $test -d "$sysman"; then
3286 echo "System manual is in $sysman." >&4
3287else
3288 echo "Could not find manual pages in source form." >&4
3289fi
3290
dc45a647
MB
3291: see what memory models we can support
3292case "$models" in
3293'')
3294 $cat >pdp11.c <<'EOP'
3295main() {
3296#ifdef pdp11
3297 exit(0);
3298#else
3299 exit(1);
3300#endif
3301}
3302EOP
3303 ( cc -o pdp11 pdp11.c ) >/dev/null 2>&1
3304 if $test -f pdp11 && ./pdp11 2>/dev/null; then
3305 dflt='unsplit split'
3306 else
3307 tans=`./loc . X /lib/small /lib/large /usr/lib/small /usr/lib/large /lib/medium /usr/lib/medium /lib/huge`
3308 case "$tans" in
3309 X) dflt='none';;
3310 *) if $test -d /lib/small || $test -d /usr/lib/small; then
3311 dflt='small'
3312 else
3313 dflt=''
3314 fi
3315 if $test -d /lib/medium || $test -d /usr/lib/medium; then
3316 dflt="$dflt medium"
3317 fi
3318 if $test -d /lib/large || $test -d /usr/lib/large; then
3319 dflt="$dflt large"
3320 fi
3321 if $test -d /lib/huge || $test -d /usr/lib/huge; then
3322 dflt="$dflt huge"
3323 fi
3324 esac
3325 fi;;
3326*) dflt="$models";;
3327esac
8e07c86e 3328$cat <<EOM
dc45a647
MB
3329
3330Some systems have different model sizes. On most systems they are called
3331small, medium, large, and huge. On the PDP11 they are called unsplit and
3332split. If your system doesn't support different memory models, say "none".
3333If you wish to force everything to one memory model, say "none" here and
3334put the appropriate flags later when it asks you for other cc and ld flags.
3335Venix systems may wish to put "none" and let the compiler figure things out.
3336(In the following question multiple model names should be space separated.)
3337
3338The default for most systems is "none".
8e07c86e 3339
8e07c86e 3340EOM
dc45a647
MB
3341rp="Which memory models are supported?"
3342. ./myread
3343models="$ans"
3344
3345case "$models" in
3346none)
3347 small=''
3348 medium=''
3349 large=''
3350 huge=''
3351 unsplit=''
3352 split=''
2c7991dc 3353 ;;
dc45a647
MB
3354*split)
3355 case "$split" in
3356 '') if $contains '\-i' $sysman/ld.1 >/dev/null 2>&1 || \
3357 $contains '\-i' $sysman/cc.1 >/dev/null 2>&1; then
3358 dflt='-i'
3359 else
3360 dflt='none'
3361 fi;;
3362 *) dflt="$split";;
3363 esac
3364 rp="What flag indicates separate I and D space?"
3365 . ./myread
3366 tans="$ans"
3367 case "$tans" in
3368 none) tans='';;
3369 esac
3370 split="$tans"
3371 unsplit='';;
3372*large*|*small*|*medium*|*huge*)
3373 case "$models" in
3374 *large*)
3375 case "$large" in
3376 '') dflt='-Ml';;
3377 *) dflt="$large";;
3378 esac
3379 rp="What flag indicates large model?"
3380 . ./myread
3381 tans="$ans"
3382 case "$tans" in
3383 none) tans='';
3384 esac
3385 large="$tans";;
3386 *) large='';;
3387 esac
3388 case "$models" in
3389 *huge*) case "$huge" in
3390 '') dflt='-Mh';;
3391 *) dflt="$huge";;
3392 esac
3393 rp="What flag indicates huge model?"
3394 . ./myread
3395 tans="$ans"
3396 case "$tans" in
3397 none) tans='';
3398 esac
3399 huge="$tans";;
3400 *) huge="$large";;
3401 esac
3402 case "$models" in
3403 *medium*) case "$medium" in
3404 '') dflt='-Mm';;
3405 *) dflt="$medium";;
3406 esac
3407 rp="What flag indicates medium model?"
3408 . ./myread
3409 tans="$ans"
3410 case "$tans" in
3411 none) tans='';
3412 esac
3413 medium="$tans";;
3414 *) medium="$large";;
3415 esac
3416 case "$models" in
3417 *small*) case "$small" in
3418 '') dflt='none';;
3419 *) dflt="$small";;
3420 esac
3421 rp="What flag indicates small model?"
3422 . ./myread
3423 tans="$ans"
3424 case "$tans" in
3425 none) tans='';
3426 esac
3427 small="$tans";;
3428 *) small='';;
25f94b33 3429 esac
8e07c86e 3430 ;;
dc45a647
MB
3431*)
3432 echo "Unrecognized memory models--you may have to edit Makefile.SH" >&4
8e07c86e
AD
3433 ;;
3434esac
dc45a647 3435$rm -f pdp11.* pdp11
4e2a5f63 3436
dc45a647
MB
3437: see if we need a special compiler
3438echo " "
3439if ./usg; then
3440 case "$cc" in
3441 '') case "$Mcc" in
3442 /*) dflt='Mcc';;
3443 *) case "$large" in
3444 -M*) dflt='cc';;
3445 *) if $contains '\-M' $sysman/cc.1 >/dev/null 2>&1 ; then
3446 if $contains '\-M' $sysman/cpp.1 >/dev/null 2>&1; then
3447 dflt='cc'
3448 else
3449 dflt='cc -M'
3450 fi
3451 else
3452 dflt='cc'
3453 fi;;
3454 esac;;
3455 esac;;
3456 *) dflt="$cc";;
3457 esac
3458 case "$dflt" in
3459 *M*) $cat <<'EOM'
3460On some older systems the default C compiler will not resolve multiple global
3461references that happen to have the same name. On some such systems the "Mcc"
3462command may be used to force these to be resolved. On other systems a "cc -M"
3463command is required. (Note that the -M flag on other systems indicates a
3464memory model to use!) If you have the Gnu C compiler, you might wish to use
3465that instead.
8e07c86e
AD
3466
3467EOM
dc45a647 3468 ;;
2afac517 3469 esac
dc45a647
MB
3470 rp="Use which C compiler?"
3471 . ./myread
3472 cc="$ans"
4e2a5f63 3473else
dc45a647
MB
3474 case "$cc" in
3475 '') dflt=cc;;
3476 *) dflt="$cc";;
4e2a5f63 3477 esac
dc45a647 3478 rp="Use which C compiler?"
4e2a5f63
AD
3479 . ./myread
3480 cc="$ans"
3481fi
693762b4
AD
3482: Look for a hint-file generated 'call-back-unit'. Now that the
3483: user has specified the compiler, we may need to set or change some
3484: other defaults.
3485if $test -f cc.cbu; then
3486 . ./cc.cbu
3487fi
4e2a5f63
AD
3488echo " "
3489echo "Checking for GNU cc in disguise and/or its version number..." >&4
3490$cat >gccvers.c <<EOM
3491#include <stdio.h>
3492int main() {
3493#ifdef __GNUC__
3494#ifdef __VERSION__
3495 printf("%s\n", __VERSION__);
3496#else
3497 printf("%s\n", "1");
3498#endif
3499#endif
3500 exit(0);
3501}
3502EOM
3503if $cc -o gccvers gccvers.c >/dev/null 2>&1; then
3504 gccversion=`./gccvers`
3505 case "$gccversion" in
2afac517 3506 '') echo "You are not using GNU cc." ;;
3507 *) echo "You are using GNU cc $gccversion." ;;
3508 esac
3509else
3510 echo " "
3511 echo "*** WHOA THERE!!! ***" >&4
3512 echo " Your C compiler \"$cc\" doesn't seem to be working!" >&4
3513 case "$knowitall" in
3514 '')
3515 echo " You'd better start hunting for one and let me know about it." >&4
3516 exit 1
2c7991dc 3517 ;;
8e07c86e 3518 esac
2afac517 3519fi
3520$rm -f gccvers*
3521case "$gccversion" in
35221*) cpp=`./loc gcc-cpp $cpp $pth` ;;
8e07c86e
AD
3523esac
3524
2afac517 3525: What should the include directory be ?
8e07c86e 3526echo " "
2afac517 3527$echo $n "Hmm... $c"
3528dflt='/usr/include'
3529incpath=''
3530mips_type=''
3531if $test -f /bin/mips && /bin/mips; then
3532 echo "Looks like a MIPS system..."
3533 $cat >usr.c <<'EOCP'
3534#ifdef SYSTYPE_BSD43
3535/bsd43
3536#endif
3537EOCP
3538 if $cc -E usr.c > usr.out && $contains / usr.out >/dev/null 2>&1; then
3539 dflt='/bsd43/usr/include'
3540 incpath='/bsd43'
3541 mips_type='BSD 4.3'
8e07c86e 3542 else
2afac517 3543 mips_type='System V'
8e07c86e 3544 fi
2afac517 3545 $rm -f usr.c usr.out
3546 echo "and you're compiling with the $mips_type compiler and libraries."
3547 xxx_prompt=y
3548 echo "exit 0" >mips
8e07c86e 3549else
2afac517 3550 echo "Doesn't look like a MIPS system."
3551 xxx_prompt=n
3552 echo "exit 1" >mips
3553fi
3554chmod +x mips
3555$eunicefix mips
2afac517 3556case "$usrinc" in
3557'') ;;
3558*) dflt="$usrinc";;
3559esac
3560case "$xxx_prompt" in
3561y) fn=d/
dfe9444c 3562 echo " "
2afac517 3563 rp='Where are the include files you want to use?'
3564 . ./getfile
3565 usrinc="$ans"
3566 ;;
3567*) usrinc="$dflt"
3568 ;;
3569esac
8e07c86e 3570
c4f23d77
AD
3571: see how we invoke the C preprocessor
3572echo " "
3573echo "Now, how can we feed standard input to your C preprocessor..." >&4
3574cat <<'EOT' >testcpp.c
3575#define ABC abc
3576#define XYZ xyz
3577ABC.XYZ
3578EOT
3579cd ..
1cfa4ec7
GS
3580if test ! -f cppstdin; then
3581 echo 'cat >.$$.c; '"$cc"' -E ${1+"$@"} .$$.c; rm .$$.c' >cppstdin
3582else
3583 echo "Keeping your $hint cppstdin wrapper."
3584fi
c4f23d77
AD
3585chmod 755 cppstdin
3586wrapper=`pwd`/cppstdin
3587ok='false'
3588cd UU
3589
3590if $test "X$cppstdin" != "X" && \
3591 $cppstdin $cppminus <testcpp.c >testcpp.out 2>&1 && \
3592 $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1
3593then
3594 echo "You used to use $cppstdin $cppminus so we'll use that again."
3595 case "$cpprun" in
3596 '') echo "But let's see if we can live without a wrapper..." ;;
3597 *)
3598 if $cpprun $cpplast <testcpp.c >testcpp.out 2>&1 && \
3599 $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1
3600 then
3601 echo "(And we'll use $cpprun $cpplast to preprocess directly.)"
3602 ok='true'
3603 else
3604 echo "(However, $cpprun $cpplast does not work, let's see...)"
3605 fi
3606 ;;
3607 esac
3608else
3609 case "$cppstdin" in
3610 '') ;;
3611 *)
3612 echo "Good old $cppstdin $cppminus does not seem to be of any help..."
3613 ;;
3614 esac
3615fi
3616
3617if $ok; then
3618 : nothing
3619elif echo 'Maybe "'"$cc"' -E" will work...'; \
3620 $cc -E <testcpp.c >testcpp.out 2>&1; \
3621 $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3622 echo "Yup, it does."
3623 x_cpp="$cc -E"
3624 x_minus='';
3625elif echo 'Nope...maybe "'"$cc"' -E -" will work...'; \
3626 $cc -E - <testcpp.c >testcpp.out 2>&1; \
3627 $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3628 echo "Yup, it does."
3629 x_cpp="$cc -E"
3630 x_minus='-';
3631elif echo 'Nope...maybe "'"$cc"' -P" will work...'; \
3632 $cc -P <testcpp.c >testcpp.out 2>&1; \
3633 $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3634 echo "Yipee, that works!"
3635 x_cpp="$cc -P"
3636 x_minus='';
3637elif echo 'Nope...maybe "'"$cc"' -P -" will work...'; \
3638 $cc -P - <testcpp.c >testcpp.out 2>&1; \
3639 $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3640 echo "At long last!"
3641 x_cpp="$cc -P"
3642 x_minus='-';
3643elif echo 'No such luck, maybe "'$cpp'" will work...'; \
3644 $cpp <testcpp.c >testcpp.out 2>&1; \
3645 $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3646 echo "It works!"
3647 x_cpp="$cpp"
3648 x_minus='';
3649elif echo 'Nixed again...maybe "'$cpp' -" will work...'; \
3650 $cpp - <testcpp.c >testcpp.out 2>&1; \
3651 $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3652 echo "Hooray, it works! I was beginning to wonder."
3653 x_cpp="$cpp"
3654 x_minus='-';
3655elif echo 'Uh-uh. Time to get fancy. Trying a wrapper...'; \
3656 $wrapper <testcpp.c >testcpp.out 2>&1; \
3657 $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3658 x_cpp="$wrapper"
3659 x_minus=''
3660 echo "Eureka!"
3661else
3662 dflt=''
3663 rp="No dice. I can't find a C preprocessor. Name one:"
3664 . ./myread
3665 x_cpp="$ans"
3666 x_minus=''
3667 $x_cpp <testcpp.c >testcpp.out 2>&1
3668 if $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3669 echo "OK, that will do." >&4
3670 else
3671echo "Sorry, I can't get that to work. Go find one and rerun Configure." >&4
3672 exit 1
3673 fi
3674fi
3675
3676case "$ok" in
3677false)
3678 cppstdin="$x_cpp"
3679 cppminus="$x_minus"
3680 cpprun="$x_cpp"
3681 cpplast="$x_minus"
3682 set X $x_cpp
3683 shift
3684 case "$1" in
3685 "$cpp")
3686 echo "Perhaps can we force $cc -E using a wrapper..."
3687 if $wrapper <testcpp.c >testcpp.out 2>&1; \
3688 $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1
3689 then
3690 echo "Yup, we can."
3691 cppstdin="$wrapper"
3692 cppminus='';
3693 else
3694 echo "Nope, we'll have to live without it..."
3695 fi
3696 ;;
3697 esac
3698 case "$cpprun" in
3699 "$wrapper")
3700 cpprun=''
3701 cpplast=''
3702 ;;
3703 esac
3704 ;;
3705esac
3706
3707case "$cppstdin" in
3708"$wrapper") ;;
3709*) $rm -f $wrapper;;
3710esac
3711$rm -f testcpp.c testcpp.out
3712
2afac517 3713: Set private lib path
3714case "$plibpth" in
3715'') if ./mips; then
3716 plibpth="$incpath/usr/lib /usr/local/lib /usr/ccs/lib"
3717 fi;;
3718esac
3719case "$libpth" in
3720' ') dlist='';;
3721'') dlist="$loclibpth $plibpth $glibpth";;
3722*) dlist="$libpth";;
3723esac
8e07c86e 3724
2afac517 3725: Now check and see which directories actually exist, avoiding duplicates
3726libpth=''
3727for xxx in $dlist
3728do
3729 if $test -d $xxx; then
3730 case " $libpth " in
3731 *" $xxx "*) ;;
3732 *) libpth="$libpth $xxx";;
3733 esac
3734 fi
3735done
3736$cat <<'EOM'
8e07c86e 3737
2afac517 3738Some systems have incompatible or broken versions of libraries. Among
3739the directories listed in the question below, please remove any you
3740know not to be holding relevant libraries, and add any that are needed.
3741Say "none" for none.
8e07c86e 3742
8e07c86e 3743EOM
2afac517 3744case "$libpth" in
3745'') dflt='none';;
3746*)
3747 set X $libpth
3748 shift
3749 dflt=${1+"$@"}
4633a7c4 3750 ;;
8e07c86e 3751esac
2afac517 3752rp="Directories to use for library searches?"
3753. ./myread
3754case "$ans" in
3755none) libpth=' ';;
3756*) libpth="$ans";;
3757esac
8e07c86e 3758
2afac517 3759: compute shared library extension
3760case "$so" in
3761'')
3762 if xxx=`./loc libc.sl X $libpth`; $test -f "$xxx"; then
3763 dflt='sl'
3764 else
3765 dflt='so'
3766 fi
3767 ;;
3768*) dflt="$so";;
8e07c86e 3769esac
2afac517 3770$cat <<EOM
8e07c86e 3771
2afac517 3772On some systems, shared libraries may be available. Answer 'none' if
3773you want to suppress searching of shared libraries for the remaining
3774of this configuration.
8e07c86e
AD
3775
3776EOM
2afac517 3777rp='What is the file extension used for shared libraries?'
3778. ./myread
3779so="$ans"
8e07c86e 3780
dfe9444c
AD
3781: Define several unixisms.
3782: Hints files or command line option can be used to override them.
3783: The convoluted testing is in case hints files set either the old
3784: or the new name.
3785case "$_exe" in
3786'') case "$exe_ext" in
3787 '') ;;
3788 *) _exe="$exe_ext" ;;
3789 esac
3790 ;;
3791esac
3792case "$_a" in
3793'') case "$lib_ext" in
3794 '') _a='.a';;
3795 *) _a="$lib_ext" ;;
3796 esac
3797 ;;
3798esac
3799case "$_o" in
3800'') case "$obj_ext" in
3801 '') _o='.o';;
3802 *) _o="$obj_ext";;
3803 esac
3804 ;;
3805esac
3806case "$p_" in
3807'') case "$path_sep" in
3808 '') p_=':';;
3809 *) p_="$path_sep";;
3810 esac
3811 ;;
3812esac
3813exe_ext=$_exe
3814lib_ext=$_a
3815obj_ext=$_o
3816path_sep=$p_
3817
3818: Which makefile gets called first. This is used by make depend.
3819case "$firstmakefile" in
3820'') firstmakefile='makefile';;
3821esac
3822
2afac517 3823: Looking for optional libraries
3824echo " "
3825echo "Checking for optional libraries..." >&4
3826case "$libs" in
3827' '|'') dflt='';;
3828*) dflt="$libs";;
8e07c86e 3829esac
2afac517 3830case "$libswanted" in
3831'') libswanted='c_s';;
3832esac
3833for thislib in $libswanted; do
3834
1cfa4ec7
GS
3835 if xxx=`./loc lib$thislib.$so.[0-9]'*' X $libpth`;
3836 $test -f "$xxx" -a "X$ignore_versioned_solibs" = "X"; then
2afac517 3837 echo "Found -l$thislib (shared)."
3838 case " $dflt " in
3839 *"-l$thislib "*);;
3840 *) dflt="$dflt -l$thislib";;
4633a7c4 3841 esac
2afac517 3842 elif xxx=`./loc lib$thislib.$so X $libpth` ; $test -f "$xxx"; then
3843 echo "Found -l$thislib (shared)."
3844 case " $dflt " in
3845 *"-l$thislib "*);;
3846 *) dflt="$dflt -l$thislib";;
3847 esac
dfe9444c 3848 elif xxx=`./loc lib$thislib$_a X $libpth`; $test -f "$xxx"; then
2afac517 3849 echo "Found -l$thislib."
3850 case " $dflt " in
3851 *"-l$thislib "*);;
3852 *) dflt="$dflt -l$thislib";;
3853 esac
dfe9444c 3854 elif xxx=`./loc $thislib$_a X $libpth`; $test -f "$xxx"; then
2afac517 3855 echo "Found -l$thislib."
3856 case " $dflt " in
3857 *"-l$thislib "*);;
3858 *) dflt="$dflt -l$thislib";;
3859 esac
dfe9444c 3860 elif xxx=`./loc lib${thislib}_s$_a X $libpth`; $test -f "$xxx"; then
2afac517 3861 echo "Found -l${thislib}_s."
3862 case " $dflt " in
3863 *"-l$thislib "*);;
3864 *) dflt="$dflt -l${thislib}_s";;
3865 esac
dfe9444c 3866 elif xxx=`./loc Slib$thislib$_a X $xlibpth`; $test -f "$xxx"; then
2afac517 3867 echo "Found -l$thislib."
3868 case " $dflt " in
3869 *"-l$thislib "*);;
3870 *) dflt="$dflt -l$thislib";;
3871 esac
3872 else
3873 echo "No -l$thislib."
3874 fi
3875done
3876set X $dflt
3877shift
3878dflt="$*"
3879case "$libs" in
3880'') dflt="$dflt";;
3881*) dflt="$libs";;
3882esac
3883case "$dflt" in
3884' '|'') dflt='none';;
8e07c86e 3885esac
2afac517 3886
4633a7c4
LW
3887$cat <<EOM
3888
2afac517 3889Some versions of Unix support shared libraries, which make executables smaller
3890but make load time slightly longer.
8e07c86e 3891
2afac517 3892On some systems, mostly System V Release 3's, the shared library is included
3893by putting the option "-lc_s" as the last thing on the cc command line when
3894linking. Other systems use shared libraries by default. There may be other
3895libraries needed to compile $package on your machine as well. If your system
3896needs the "-lc_s" option, include it here. Include any other special libraries
3897here as well. Say "none" for none.
4633a7c4 3898EOM
2afac517 3899
3900echo " "
3901rp="Any additional libraries?"
8e07c86e 3902. ./myread
2afac517 3903case "$ans" in
3904none) libs=' ';;
3905*) libs="$ans";;
3906esac
8e07c86e 3907
2afac517 3908: determine optimize, if desired, or use for debug flag also
3909case "$optimize" in
2ae324a7 3910' '|$undef) dflt='none';;
2afac517 3911'') dflt='-O';;
3912*) dflt="$optimize";;
4633a7c4 3913esac
2afac517 3914$cat <<EOH
4633a7c4 3915
760ac839 3916Some C compilers have problems with their optimizers. By default, $package
4633a7c4
LW
3917compiles with the -O flag to use the optimizer. Alternately, you might want
3918to use the symbolic debugger, which uses the -g flag (on traditional Unix
3919systems). Either flag can be specified here. To use neither flag, specify
3920the word "none".
3921
3922EOH
3923rp="What optimizer/debugger flag should be used?"
3924. ./myread
3925optimize="$ans"
3926case "$optimize" in
3927'none') optimize=" ";;
3928esac
3929
3930dflt=''
25f94b33
AD
3931: We will not override a previous value, but we might want to
3932: augment a hint file
3933case "$hint" in
3934none|recommended)
4633a7c4
LW
3935 case "$gccversion" in
3936 1*) dflt='-fpcc-struct-return' ;;
3937 esac
3938 case "$optimize" in
3939 *-g*) dflt="$dflt -DDEBUGGING";;
3940 esac
3941 case "$gccversion" in
3942 2*) if test -d /etc/conf/kconfig.d &&
3943 $contains _POSIX_VERSION $usrinc/sys/unistd.h >/dev/null 2>&1
3944 then
3945 dflt="$dflt -posix"
3946 fi
3947 ;;
3948 esac
3949 ;;
3950esac
3951
a4f3eea9 3952case "$mips_type" in
3953*BSD*|'') inclwanted="$locincpth $usrinc";;
3954*) inclwanted="$locincpth $inclwanted $usrinc/bsd";;
3955esac
3956for thisincl in $inclwanted; do
3957 if $test -d $thisincl; then
3958 if $test x$thisincl != x$usrinc; then
3959 case "$dflt" in
3960 *$thisincl*);;
3961 *) dflt="$dflt -I$thisincl";;
3962 esac
3963 fi
3964 fi
3965done
3966
3967inctest='if $contains $2 $usrinc/$1 >/dev/null 2>&1; then
3968 xxx=true;
3969elif $contains $2 $usrinc/sys/$1 >/dev/null 2>&1; then
3970 xxx=true;
3971else
3972 xxx=false;
3973fi;
3974if $xxx; then
3975 case "$dflt" in
3976 *$2*);;
3977 *) dflt="$dflt -D$2";;
3978 esac;
3979fi'
3980
3981if ./osf1; then
3982 set signal.h __LANGUAGE_C__; eval $inctest
3983else
3984 set signal.h LANGUAGE_C; eval $inctest
3985fi
a4f3eea9 3986
3987case "$hint" in
3988none|recommended) dflt="$ccflags $dflt" ;;
3989*) dflt="$ccflags";;
3990esac
3991
3992case "$dflt" in
3993''|' ') dflt=none;;
3994esac
3995$cat <<EOH
3996
3997Your C compiler may want other flags. For this question you should include
3998-I/whatever and -DWHATEVER flags and any other flags used by the C compiler,
3999but you should NOT include libraries or ld flags like -lwhatever. If you
4000want $package to honor its debug switch, you should include -DDEBUGGING here.
dfe9444c 4001Your C compiler might also need additional flags, such as -D_POSIX_SOURCE.
a4f3eea9 4002
4003To use no flags, specify the word "none".
4004
4005EOH
4006set X $dflt
4007shift
4008dflt=${1+"$@"}
4009rp="Any additional cc flags?"
4010. ./myread
4011case "$ans" in
4012none) ccflags='';;
4013*) ccflags="$ans";;
4014esac
4015
4016: the following weeds options from ccflags that are of no interest to cpp
4017cppflags="$ccflags"
4018case "$gccversion" in
40191*) cppflags="$cppflags -D__GNUC__"
4020esac
4021case "$mips_type" in
4022'');;
4023*BSD*) cppflags="$cppflags -DSYSTYPE_BSD43";;
4024esac
4025case "$cppflags" in
4026'');;
4027*)
4028 echo " "
4029 echo "Let me guess what the preprocessor flags are..." >&4
4030 set X $cppflags
4031 shift
4032 cppflags=''
4033 $cat >cpp.c <<'EOM'
4034#define BLURFL foo
4035
4036BLURFL xx LFRULB
4037EOM
4038 previous=''
4039 for flag in $*
4040 do
4041 case "$flag" in
4042 -*) ftry="$flag";;
4043 *) ftry="$previous $flag";;
4044 esac
7bac28a0 4045 if $cppstdin -DLFRULB=bar $cppflags $ftry $cppminus <cpp.c \
a4f3eea9 4046 >cpp1.out 2>/dev/null && \
dfe9444c 4047 $cpprun -DLFRULB=bar $cppflags $ftry $cpplast <cpp.c \
a4f3eea9 4048 >cpp2.out 2>/dev/null && \
4049 $contains 'foo.*xx.*bar' cpp1.out >/dev/null 2>&1 && \
4050 $contains 'foo.*xx.*bar' cpp2.out >/dev/null 2>&1
4051 then
4052 cppflags="$cppflags $ftry"
4053 previous=''
4054 else
4055 previous="$flag"
4056 fi
4057 done
4058 set X $cppflags
4059 shift
4060 cppflags=${1+"$@"}
4061 case "$cppflags" in
4062 *-*) echo "They appear to be: $cppflags";;
4063 esac
4064 $rm -f cpp.c cpp?.out
4065 ;;
4066esac
4067
4068: flags used in final linking phase
a4f3eea9 4069case "$ldflags" in
4070'') if ./venix; then
4071 dflt='-i -z'
4072 else
4073 dflt=''
4074 fi
4075 case "$ccflags" in
4076 *-posix*) dflt="$dflt -posix" ;;
4077 esac
4078 ;;
4079*) dflt="$ldflags";;
4080esac
4081
4082: Try to guess additional flags to pick up local libraries.
4083for thislibdir in $libpth; do
4084 case " $loclibpth " in
4085 *" $thislibdir "*)
4086 case "$dflt " in
4087 *"-L$thislibdir "*) ;;
4088 *) dflt="$dflt -L$thislibdir" ;;
4089 esac
4090 ;;
4091 esac
4092done
4093
4094case "$dflt" in
4095'') dflt='none' ;;
4096esac
4097
4098$cat <<EOH
4099
4100Your C linker may need flags. For this question you should
4101include -L/whatever and any other flags used by the C linker, but you
4102should NOT include libraries like -lwhatever.
4103
4104Make sure you include the appropriate -L/path flags if your C linker
4105does not normally search all of the directories you specified above,
4106namely
4107 $libpth
4108To use no flags, specify the word "none".
4109
4110EOH
4111
4112rp="Any additional ld flags (NOT including libraries)?"
4113. ./myread
4114case "$ans" in
4115none) ldflags='';;
4116*) ldflags="$ans";;
4117esac
4118rmlist="$rmlist pdp11"
4119
4120: coherency check
4121echo " "
dfe9444c 4122echo "Checking your choice of C compiler and flags for coherency..." >&4
5ff3f7a4
GS
4123$cat > try.c <<'EOF'
4124#include <stdio.h>
4125main() { printf("Ok\n"); exit(0); }
4126EOF
87563a30 4127set X $cc $optimize $ccflags -o try $ldflags try.c $libs
a4f3eea9 4128shift
5ff3f7a4
GS
4129$cat >try.msg <<'EOM'
4130I've tried to compile and run the following simple program:
4131
4132EOM
4133$cat try.c
4134
4135$cat >> try.msg <<EOM
4136
4137I used the command:
a4f3eea9 4138
4139 $*
4140 ./try
4141
4142and I got the following output:
4143
4144EOM
a4f3eea9 4145dflt=y
28e8609d 4146if sh -c "$cc $optimize $ccflags -o try $ldflags try.c $libs" >>try.msg 2>&1; then
a4f3eea9 4147 if sh -c './try' >>try.msg 2>&1; then
dfe9444c
AD
4148 xxx=`./try`
4149 case "$xxx" in
4150 "Ok") dflt=n ;;
4151 *) echo 'The program compiled OK, but produced no output.' >> try.msg
4152 case " $libs " in
4153 *" -lsfio "*)
4154 cat >> try.msg <<'EOQS'
4155If $libs contains -lsfio, and sfio is mis-configured, then it
4156sometimes (apparently) runs and exits with a 0 status, but with no
4157output! It may have to do with sfio's use of _exit vs. exit.
4158
4159EOQS
4160 rp="You have a big problem. Shall I abort Configure"
4161 dflt=y
4162 ;;
4163 esac
4164 ;;
4165 esac
a4f3eea9 4166 else
4167 echo "The program compiled OK, but exited with status $?." >>try.msg
dfe9444c 4168 rp="You have a problem. Shall I abort Configure"
a4f3eea9 4169 dflt=y
4170 fi
4171else
4172 echo "I can't compile the test program." >>try.msg
dfe9444c 4173 rp="You have a BIG problem. Shall I abort Configure"
a4f3eea9 4174 dflt=y
4175fi
4176case "$dflt" in
4177y)
97286747 4178 $cat try.msg >&4
a4f3eea9 4179 case "$knowitall" in
4180 '')
5ff3f7a4 4181 echo "(The supplied flags or libraries might be incorrect.)"
a4f3eea9 4182 ;;
4183 *) dflt=n;;
4184 esac
4185 echo " "
4186 . ./myread
4187 case "$ans" in
4188 n*|N*) ;;
4189 *) echo "Ok. Stopping Configure." >&4
4190 exit 1
4191 ;;
4192 esac
4193 ;;
4194n) echo "OK, that should do.";;
4195esac
4196$rm -f try try.* core
4197
bfb7748a
AD
4198: determine filename position in cpp output
4199echo " "
4200echo "Computing filename position in cpp output for #include directives..." >&4
4201echo '#include <stdio.h>' > foo.c
4202$cat >fieldn <<EOF
4203$startsh
4204$cppstdin $cppflags $cppminus <foo.c 2>/dev/null | \
4205$grep '^[ ]*#.*stdio\.h' | \
4206while read cline; do
4207 pos=1
4208 set \$cline
4209 while $test \$# -gt 0; do
4210 if $test -r \`echo \$1 | $tr -d '"'\`; then
4211 echo "\$pos"
4212 exit 0
4213 fi
4214 shift
4215 pos=\`expr \$pos + 1\`
4216 done
4217done
4218EOF
4219chmod +x fieldn
4220fieldn=`./fieldn`
4221$rm -f foo.c fieldn
4222case $fieldn in
4223'') pos='???';;
42241) pos=first;;
42252) pos=second;;
42263) pos=third;;
4227*) pos="${fieldn}th";;
4228esac
4229echo "Your cpp writes the filename in the $pos field of the line."
4230
4231: locate header file
4232$cat >findhdr <<EOF
4233$startsh
4234wanted=\$1
4235name=''
4236if test -f $usrinc/\$wanted; then
4237 echo "$usrinc/\$wanted"
4238 exit 0
4239fi
4240awkprg='{ print \$$fieldn }'
4241echo "#include <\$wanted>" > foo\$\$.c
4242$cppstdin $cppminus $cppflags < foo\$\$.c 2>/dev/null | \
4243$grep "^[ ]*#.*\$wanted" | \
4244while read cline; do
4245 name=\`echo \$cline | $awk "\$awkprg" | $tr -d '"'\`
4246 case "\$name" in
4247 */\$wanted) echo "\$name"; exit 0;;
4248 *) name='';;
4249 esac;
4250done;
4251$rm -f foo\$\$.c;
4252case "\$name" in
4253'') exit 1;;
4254esac
4255EOF
4256chmod +x findhdr
4257
4258: define an alternate in-header-list? function
4259inhdr='echo " "; td=$define; tu=$undef; yyy=$@;
4260cont=true; xxf="echo \"<\$1> found.\" >&4";
4261case $# in 2) xxnf="echo \"<\$1> NOT found.\" >&4";;
4262*) xxnf="echo \"<\$1> NOT found, ...\" >&4";;
4263esac;
4264case $# in 4) instead=instead;; *) instead="at last";; esac;
4265while $test "$cont"; do
4266 xxx=`./findhdr $1`
4267 var=$2; eval "was=\$$2";
4268 if $test "$xxx" && $test -r "$xxx";
4269 then eval $xxf;
4270 eval "case \"\$$var\" in $undef) . ./whoa; esac"; eval "$var=\$td";
4271 cont="";
4272 else eval $xxnf;
4273 eval "case \"\$$var\" in $define) . ./whoa; esac"; eval "$var=\$tu"; fi;
4274 set $yyy; shift; shift; yyy=$@;
4275 case $# in 0) cont="";;
4276 2) xxf="echo \"but I found <\$1> $instead.\" >&4";
4277 xxnf="echo \"and I did not find <\$1> either.\" >&4";;
4278 *) xxf="echo \"but I found <\$1\> instead.\" >&4";
4279 xxnf="echo \"there is no <\$1>, ...\" >&4";;
4280 esac;
4281done;
4282while $test "$yyy";
4283do set $yyy; var=$2; eval "was=\$$2";
4284 eval "case \"\$$var\" in $define) . ./whoa; esac"; eval "$var=\$tu";
4285 set $yyy; shift; shift; yyy=$@;
4286done'
4287
4288: see if this is a malloc.h system
4289set malloc.h i_malloc
4290eval $inhdr
4291
4292: see if stdlib is available
4293set stdlib.h i_stdlib
4294eval $inhdr
4295
4296: determine which malloc to compile in
4297echo " "
4298case "$usemymalloc" in
5ff3f7a4
GS
4299''|[yY]*|true|$define) dflt='y' ;;
4300*) dflt='n' ;;
bfb7748a
AD
4301esac
4302rp="Do you wish to attempt to use the malloc that comes with $package?"
4303. ./myread
4304usemymalloc="$ans"
4305case "$ans" in
4306y*|true)
4307 usemymalloc='y'
4308 mallocsrc='malloc.c'
4309 mallocobj="malloc$_o"
4310 d_mymalloc="$define"
4311 case "$libs" in
4312 *-lmalloc*)
4313 : Remove malloc from list of libraries to use
4314 echo "Removing unneeded -lmalloc from library list" >&4
4315 set `echo X $libs | $sed -e 's/-lmalloc / /' -e 's/-lmalloc$//'`
4316 shift
4317 libs="$*"
4318 echo "libs = $libs" >&4
4319 ;;
4320 esac
4321 ;;
4322*)
4323 usemymalloc='n'
4324 mallocsrc=''
4325 mallocobj=''
4326 d_mymalloc="$undef"
4327 ;;
4328esac
4329
4330: compute the return types of malloc and free
4331echo " "
4332$cat >malloc.c <<END
4333#$i_malloc I_MALLOC
4334#$i_stdlib I_STDLIB
4335#include <stdio.h>
4336#include <sys/types.h>
4337#ifdef I_MALLOC
4338#include <malloc.h>
4339#endif
4340#ifdef I_STDLIB
4341#include <stdlib.h>
4342#endif
4343#ifdef TRY_MALLOC
4344void *malloc();
4345#endif
4346#ifdef TRY_FREE
4347void free();
4348#endif
4349END
4350case "$malloctype" in
4351'')
4352 if $cc $ccflags -c -DTRY_MALLOC malloc.c >/dev/null 2>&1; then
4353 malloctype='void *'
4354 else
4355 malloctype='char *'
4356 fi
4357 ;;
4358esac
4359echo "Your system wants malloc to return '$malloctype', it would seem." >&4
4360
4361case "$freetype" in
4362'')
4363 if $cc $ccflags -c -DTRY_FREE malloc.c >/dev/null 2>&1; then
4364 freetype='void'
4365 else
4366 freetype='int'
4367 fi
4368 ;;
4369esac
4370echo "Your system uses $freetype free(), it would seem." >&4
4371$rm -f malloc.[co]
c4f23d77
AD
4372: Cruising for prototypes
4373echo " "
4374echo "Checking out function prototypes..." >&4
4375$cat >prototype.c <<'EOCP'
4376main(int argc, char *argv[]) {
4377 exit(0);}
4378EOCP
4379if $cc $ccflags -c prototype.c >prototype.out 2>&1 ; then
4380 echo "Your C compiler appears to support function prototypes."
4381 val="$define"
4382else
4383 echo "Your C compiler doesn't seem to understand function prototypes."
4384 val="$undef"
4385fi
4386set prototype
4387eval $setvar
4388$rm -f prototype*
4389
4390case "$prototype" in
4391"$define") ;;
4392*) ansi2knr='ansi2knr'
4393 echo " "
4394 cat <<EOM >&4
4395
4396$me: FATAL ERROR:
4397This version of $package can only be compiled by a compiler that
4398understands function prototypes. Unfortunately, your C compiler
4399 $cc $ccflags
4400doesn't seem to understand them. Sorry about that.
4401
5ff3f7a4 4402If GNU cc is available for your system, perhaps you could try that instead.
c4f23d77
AD
4403
4404Eventually, we hope to support building Perl with pre-ANSI compilers.
4405If you would like to help in that effort, please contact <perlbug@perl.org>.
4406
4407Aborting Configure now.
4408EOM
4409 exit 2
4410 ;;
4411esac
4412
4413: determine where public executables go
4414echo " "
4415set dflt bin bin
4416eval $prefixit
4417fn=d~
4418rp='Pathname where the public executables will reside?'
4419. ./getfile
4420if $test "X$ansexp" != "X$binexp"; then
4421 installbin=''
4422fi
4423bin="$ans"
4424binexp="$ansexp"
4425if $afs; then
4426 $cat <<EOM
4427
4428Since you are running AFS, I need to distinguish the directory in which
4429executables reside from the directory in which they are installed (and from
4430which they are presumably copied to the former directory by occult means).
4431
4432EOM
4433 case "$installbin" in
4434 '') dflt=`echo $binexp | sed 's#^/afs/#/afs/.#'`;;
4435 *) dflt="$installbin";;
4436 esac
4437 fn=de~
4438 rp='Where will public executables be installed?'
4439 . ./getfile
4440 installbin="$ans"
4441else
4442 installbin="$binexp"
4443fi
4444
dfe9444c
AD
4445: define a shorthand compile call
4446compile='
4447mc_file=$1;
4448shift;
c4f23d77 4449$cc $optimize $ccflags $ldflags -o ${mc_file} $* ${mc_file}.c $libs > /dev/null 2>&1;'
dc45a647
MB
4450: define a shorthand compile call for compilations that should be ok.
4451compile_ok='
4452mc_file=$1;
4453shift;
c4f23d77 4454$cc $optimize $ccflags $ldflags -o ${mc_file} $* ${mc_file}.c $libs;'
dfe9444c 4455
a4f3eea9 4456echo " "
4457echo "Checking for GNU C Library..." >&4
4458cat >gnulibc.c <<EOM
aebf16e7 4459#include <stdio.h>
a4f3eea9 4460int
4461main()
4462{
aebf16e7
AD
4463#ifdef __GLIBC__
4464 exit(0);
4465#else
4466 exit(1);
4467#endif
a4f3eea9 4468}
4469EOM
dfe9444c 4470set gnulibc
aebf16e7 4471if eval $compile_ok && ./gnulibc; then
a4f3eea9 4472 val="$define"
4473 echo "You are using the GNU C Library"
4633a7c4 4474else
a4f3eea9 4475 val="$undef"
4476 echo "You are not using the GNU C Library"
4633a7c4 4477fi
a4f3eea9 4478$rm -f gnulibc*
4479set d_gnulibc
4480eval $setvar
25f94b33 4481
a4f3eea9 4482: see if nm is to be used to determine whether a symbol is defined or not
4483case "$usenm" in
4484'')
dc45a647 4485 dflt=''
a4f3eea9 4486 case "$d_gnulibc" in
dc45a647
MB
4487 "$define")
4488 echo " "
4489 echo "nm probably won't work on the GNU C Library." >&4
a4f3eea9 4490 dflt=n
4491 ;;
dc45a647
MB
4492 esac
4493 case "$dflt" in
4494 '')
4495 if $test "$osname" = aix -a ! -f /lib/syscalls.exp; then
4496 echo " "
4497 echo "Whoops! This is an AIX system without /lib/syscalls.exp!" >&4
4498 echo "'nm' won't be sufficient on this sytem." >&4
4499 dflt=n
4500 fi
4501 ;;
4502 esac
4503 case "$dflt" in
c4f23d77 4504 '') dflt=`$egrep 'inlibc|csym' $rsrc/Configure | wc -l 2>/dev/null`
a4f3eea9 4505 if $test $dflt -gt 20; then
4506 dflt=y
4507 else
4508 dflt=n
4509 fi
4510 ;;
4511 esac
4512 ;;
4513*)
4514 case "$usenm" in
dc45a647 4515 true|$define) dflt=y;;
a4f3eea9 4516 *) dflt=n;;
4517 esac
4518 ;;
25f94b33 4519esac
a4f3eea9 4520$cat <<EOM
4633a7c4 4521
dc45a647
MB
4522I can use $nm to extract the symbols from your C libraries. This
4523is a time consuming task which may generate huge output on the disk (up
4524to 3 megabytes) but that should make the symbols extraction faster. The
4525alternative is to skip the 'nm' extraction part and to compile a small
4526test program instead to determine whether each symbol is present. If
4527you have a fast C compiler and/or if your 'nm' output cannot be parsed,
4528this may be the best solution.
4529
4530You probably shouldn't let me use 'nm' if you are using the GNU C Library.
4633a7c4 4531
a4f3eea9 4532EOM
693762b4 4533rp="Shall I use $nm to extract C symbols from the libraries?"
4633a7c4
LW
4534. ./myread
4535case "$ans" in
dc45a647 4536[Nn]*) usenm=false;;
a4f3eea9 4537*) usenm=true;;
4633a7c4
LW
4538esac
4539
a4f3eea9 4540runnm=$usenm
4541case "$reuseval" in
4542true) runnm=false;;
4633a7c4 4543esac
a4f3eea9 4544
4545: nm options which may be necessary
4546case "$nm_opt" in
4547'') if $test -f /mach_boot; then
1e422769 4548 nm_opt='' # Mach
a4f3eea9 4549 elif $test -d /usr/ccs/lib; then
1e422769 4550 nm_opt='-p' # Solaris (and SunOS?)
a4f3eea9 4551 elif $test -f /dgux; then
1e422769 4552 nm_opt='-p' # DG-UX
2ae324a7 4553 elif $test -f /lib64/rld; then
1e422769 4554 nm_opt='-p' # 64-bit Irix
a4f3eea9 4555 else
4556 nm_opt=''
4557 fi;;
4633a7c4 4558esac
4633a7c4 4559
a4f3eea9 4560: nm options which may be necessary for shared libraries but illegal
4561: for archive libraries. Thank you, Linux.
4562case "$nm_so_opt" in
4563'') case "$myuname" in
4564 *linux*)
693762b4 4565 if $nm --help | $grep 'dynamic' > /dev/null 2>&1; then
a4f3eea9 4566 nm_so_opt='--dynamic'
4633a7c4 4567 fi
a4f3eea9 4568 ;;
4633a7c4 4569 esac
4633a7c4
LW
4570 ;;
4571esac
4572
a4f3eea9 4573case "$runnm" in
4574true)
4575: get list of predefined functions in a handy place
4576echo " "
4577case "$libc" in
4578'') libc=unknown
4579 case "$libs" in
dfe9444c 4580 *-lc_s*) libc=`./loc libc_s$_a $libc $libpth`
a4f3eea9 4581 esac
4582 ;;
4583esac
4584libnames='';
4585case "$libs" in
4586'') ;;
4587*) for thislib in $libs; do
4588 case "$thislib" in
4589 -lc|-lc_s)
4590 : Handle C library specially below.
4591 ;;
4592 -l*)
4593 thislib=`echo $thislib | $sed -e 's/^-l//'`
4594 if try=`./loc lib$thislib.$so.'*' X $libpth`; $test -f "$try"; then
4595 :
4596 elif try=`./loc lib$thislib.$so X $libpth`; $test -f "$try"; then
4597 :
dfe9444c 4598 elif try=`./loc lib$thislib$_a X $libpth`; $test -f "$try"; then
a4f3eea9 4599 :
dfe9444c 4600 elif try=`./loc $thislib$_a X $libpth`; $test -f "$try"; then
d97d40b5 4601 :
a4f3eea9 4602 elif try=`./loc lib$thislib X $libpth`; $test -f "$try"; then
4603 :
4604 elif try=`./loc $thislib X $libpth`; $test -f "$try"; then
4605 :
dfe9444c 4606 elif try=`./loc Slib$thislib$_a X $xlibpth`; $test -f "$try"; then
a4f3eea9 4607 :
4608 else
4609 try=''
4610 fi
4611 libnames="$libnames $try"
4612 ;;
4613 *) libnames="$libnames $thislib" ;;
4614 esac
4615 done
4616 ;;
4617esac
4618xxx=normal
4619case "$libc" in
4620unknown)
4621 set /lib/libc.$so
4622 for xxx in $libpth; do
4623 $test -r $1 || set $xxx/libc.$so
4624 : The messy sed command sorts on library version numbers.
4625 $test -r $1 || \
4626 set `echo blurfl; echo $xxx/libc.$so.[0-9]* | \
28e8609d 4627 tr ' ' $trnl | egrep -v '\.[A-Za-z]*$' | $sed -e '
a4f3eea9 4628 h
4629 s/[0-9][0-9]*/0000&/g
4630 s/0*\([0-9][0-9][0-9][0-9][0-9]\)/\1/g
4631 G
4632 s/\n/ /' | \
dfe9444c 4633 sort | $sed -e 's/^.* //'`
a4f3eea9 4634 eval set \$$#
4635 done
4636 $test -r $1 || set /usr/ccs/lib/libc.$so
dfe9444c
AD
4637 $test -r $1 || set /lib/libsys_s$_a
4638 ;;
a4f3eea9 4639*)
4640 set blurfl
4641 ;;
4642esac
4643if $test -r "$1"; then
4644 echo "Your (shared) C library seems to be in $1."
4645 libc="$1"
4646elif $test -r /lib/libc && $test -r /lib/clib; then
4647 echo "Your C library seems to be in both /lib/clib and /lib/libc."
4648 xxx=apollo
4649 libc='/lib/clib /lib/libc'
4650 if $test -r /lib/syslib; then
4651 echo "(Your math library is in /lib/syslib.)"
4652 libc="$libc /lib/syslib"
4653 fi
4654elif $test -r "$libc" || (test -h "$libc") >/dev/null 2>&1; then
4655 echo "Your C library seems to be in $libc, as you said before."
dfe9444c
AD
4656elif $test -r $incpath/usr/lib/libc$_a; then
4657 libc=$incpath/usr/lib/libc$_a;
a4f3eea9 4658 echo "Your C library seems to be in $libc. That's fine."
dfe9444c
AD
4659elif $test -r /lib/libc$_a; then
4660 libc=/lib/libc$_a;
a4f3eea9 4661 echo "Your C library seems to be in $libc. You're normal."
4662else
dfe9444c 4663 if tans=`./loc libc$_a blurfl/dyick $libpth`; $test -r "$tans"; then
a4f3eea9 4664 :
4665 elif tans=`./loc libc blurfl/dyick $libpth`; $test -r "$tans"; then
4666 libnames="$libnames "`./loc clib blurfl/dyick $libpth`
4667 elif tans=`./loc clib blurfl/dyick $libpth`; $test -r "$tans"; then
4668 :
dfe9444c 4669 elif tans=`./loc Slibc$_a blurfl/dyick $xlibpth`; $test -r "$tans"; then
a4f3eea9 4670 :
dfe9444c 4671 elif tans=`./loc Mlibc$_a blurfl/dyick $xlibpth`; $test -r "$tans"; then
a4f3eea9 4672 :
4633a7c4 4673 else
dfe9444c 4674 tans=`./loc Llibc$_a blurfl/dyick $xlibpth`
4633a7c4 4675 fi
a4f3eea9 4676 if $test -r "$tans"; then
4677 echo "Your C library seems to be in $tans, of all places."
4678 libc=$tans
4679 else
4680 libc='blurfl'
4681 fi
4682fi
4683if $test $xxx = apollo -o -r "$libc" || (test -h "$libc") >/dev/null 2>&1; then
4684 dflt="$libc"
4685 cat <<EOM
4633a7c4 4686
a4f3eea9 4687If the guess above is wrong (which it might be if you're using a strange
4688compiler, or your machine supports multiple models), you can override it here.
4633a7c4 4689
a4f3eea9 4690EOM
4691else
4692 dflt=''
28e8609d 4693 echo $libpth | tr ' ' $trnl | sort | uniq > libpath
a4f3eea9 4694 cat >&4 <<EOM
4695I can't seem to find your C library. I've looked in the following places:
4633a7c4 4696
a4f3eea9 4697EOM
4698 $sed 's/^/ /' libpath
4699 cat <<EOM
4633a7c4 4700
a4f3eea9 4701None of these seems to contain your C library. I need to get its name...
4633a7c4 4702
a4f3eea9 4703EOM
4704fi
4705fn=f
4706rp='Where is your C library?'
4707. ./getfile
4708libc="$ans"
4633a7c4 4709
4633a7c4 4710echo " "
28e8609d 4711echo $libc $libnames | tr ' ' $trnl | sort | uniq > libnames
a4f3eea9 4712set X `cat libnames`
4633a7c4 4713shift
a4f3eea9 4714xxx=files
4715case $# in 1) xxx=file; esac
4716echo "Extracting names from the following $xxx for later perusal:" >&4
4717echo " "
4718$sed 's/^/ /' libnames >&4
4719echo " "
4720$echo $n "This may take a while...$c" >&4
4633a7c4 4721
dfe9444c
AD
4722for file in $*; do
4723 case $file in
693762b4
AD
4724 *$so*) $nm $nm_so_opt $nm_opt $file 2>/dev/null;;
4725 *) $nm $nm_opt $file 2>/dev/null;;
a4f3eea9 4726 esac
dfe9444c 4727done >libc.tmp
4633a7c4 4728
a4f3eea9 4729$echo $n ".$c"
4730$grep fprintf libc.tmp > libc.ptf
4731xscan='eval "<libc.ptf $com >libc.list"; $echo $n ".$c" >&4'
4732xrun='eval "<libc.tmp $com >libc.list"; echo "done" >&4'
4733xxx='[ADTSIW]'
4734if com="$sed -n -e 's/__IO//' -e 's/^.* $xxx *_[_.]*//p' -e 's/^.* $xxx *//p'";\
4735 eval $xscan;\
4736 $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4737 eval $xrun
4738elif com="$sed -n -e 's/^__*//' -e 's/^\([a-zA-Z_0-9$]*\).*xtern.*/\1/p'";\
4739 eval $xscan;\
4740 $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4741 eval $xrun
4742elif com="$sed -n -e '/|UNDEF/d' -e '/FUNC..GL/s/^.*|__*//p'";\
4743 eval $xscan;\
4744 $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4745 eval $xrun
4746elif com="$sed -n -e 's/^.* D __*//p' -e 's/^.* D //p'";\
4747 eval $xscan;\
4748 $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4749 eval $xrun
4750elif com="$sed -n -e 's/^_//' -e 's/^\([a-zA-Z_0-9]*\).*xtern.*text.*/\1/p'";\
4751 eval $xscan;\
4752 $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4753 eval $xrun
4754elif com="$sed -n -e 's/^.*|FUNC |GLOB .*|//p'";\
4755 eval $xscan;\
4756 $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4757 eval $xrun
4758elif com="$grep '|' | $sed -n -e '/|COMMON/d' -e '/|DATA/d' \
4759 -e '/ file/d' -e 's/^\([^ ]*\).*/\1/p'";\
4760 eval $xscan;\
4761 $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4762 eval $xrun
4763elif com="$sed -n -e 's/^.*|FUNC |GLOB .*|//p' -e 's/^.*|FUNC |WEAK .*|//p'";\
4764 eval $xscan;\
4765 $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4766 eval $xrun
4767elif com="$sed -n -e 's/^__//' -e '/|Undef/d' -e '/|Proc/s/ .*//p'";\
4768 eval $xscan;\
4769 $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4770 eval $xrun
1e422769 4771elif com="$sed -n -e 's/^.*|Proc .*|Text *| *//p'";\
4772 eval $xscan;\
4773 $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4774 eval $xrun
a4f3eea9 4775elif com="$sed -n -e '/Def. Text/s/.* \([^ ]*\)\$/\1/p'";\
4776 eval $xscan;\
4777 $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4778 eval $xrun
4779elif com="$sed -n -e 's/^[-0-9a-f ]*_\(.*\)=.*/\1/p'";\
4780 eval $xscan;\
4781 $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4782 eval $xrun
44a8e56a 4783elif com="$sed -n -e 's/.*\.text n\ \ \ \.//p'";\
4784 eval $xscan;\
4785 $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4786 eval $xrun
a4f3eea9 4787else
693762b4 4788 $nm -p $* 2>/dev/null >libc.tmp
a4f3eea9 4789 $grep fprintf libc.tmp > libc.ptf
4790 if com="$sed -n -e 's/^.* [ADTSIW] *_[_.]*//p' -e 's/^.* [ADTSIW] //p'";\
4791 eval $xscan; $contains '^fprintf$' libc.list >/dev/null 2>&1
4792 then
4793 nm_opt='-p'
4794 eval $xrun
4633a7c4 4795 else
a4f3eea9 4796 echo " "
e5c9fcd0 4797 echo "$nm didn't seem to work right. Trying $ar instead..." >&4
a4f3eea9 4798 com=''
dc45a647
MB
4799 if $ar t $libc > libc.tmp && $contains '^fprintf$' libc.tmp >/dev/null 2>&1; then
4800 for thisname in $libnames $libc; do
e5c9fcd0 4801 $ar t $thisname >>libc.tmp
a4f3eea9 4802 done
dfe9444c 4803 $sed -e "s/\\$_o\$//" < libc.tmp > libc.list
a4f3eea9 4804 echo "Ok." >&4
dc45a647
MB
4805 elif test "X$osname" = "Xos2" && $ar tv $libc > libc.tmp; then
4806 # Repeat libc to extract forwarders to DLL entries too
4807 for thisname in $libnames $libc; do
4808 $ar tv $thisname >>libc.tmp
4809 # Revision 50 of EMX has bug in $ar.
4810 # it will not extract forwarders to DLL entries
4811 # Use emximp which will extract exactly them.
4812 emximp -o tmp.imp $thisname \
4813 2>/dev/null && \
4814 $sed -e 's/^\([_a-zA-Z0-9]*\) .*$/\1/p' \
4815 < tmp.imp >>libc.tmp
4816 $rm tmp.imp
4817 done
4818 $sed -e "s/\\$_o\$//" -e 's/^ \+//' < libc.tmp > libc.list
4819 echo "Ok." >&4
a4f3eea9 4820 else
e5c9fcd0 4821 echo "$ar didn't seem to work right." >&4
a4f3eea9 4822 echo "Maybe this is a Cray...trying bld instead..." >&4
dfe9444c 4823 if bld t $libc | $sed -e 's/.*\///' -e "s/\\$_o:.*\$//" > libc.list
a4f3eea9 4824 then
4825 for thisname in $libnames; do
4826 bld t $libnames | \
dfe9444c 4827 $sed -e 's/.*\///' -e "s/\\$_o:.*\$//" >>libc.list
e5c9fcd0 4828 $ar t $thisname >>libc.tmp
a4f3eea9 4829 done
4830 echo "Ok." >&4
4831 else
4832 echo "That didn't work either. Giving up." >&4
4833 exit 1
4834 fi
4835 fi
4633a7c4 4836 fi
4633a7c4 4837fi
a4f3eea9 4838nm_extract="$com"
4839if $test -f /lib/syscalls.exp; then
4633a7c4 4840 echo " "
a4f3eea9 4841 echo "Also extracting names from /lib/syscalls.exp for good ole AIX..." >&4
4842 $sed -n 's/^\([^ ]*\)[ ]*syscall$/\1/p' /lib/syscalls.exp >>libc.list
4843fi
4844;;
4845esac
4846$rm -f libnames libpath
4847
2afac517 4848: see if dld is available
4849set dld.h i_dld
4850eval $inhdr
4633a7c4 4851
2afac517 4852: is a C symbol defined?
4853csym='tlook=$1;
4854case "$3" in
4855-v) tf=libc.tmp; tc=""; tdc="";;
4856-a) tf=libc.tmp; tc="[0]"; tdc="[]";;
4857*) tlook="^$1\$"; tf=libc.list; tc="()"; tdc="()";;
4858esac;
4859tx=yes;
4860case "$reuseval-$4" in
4861true-) ;;
4862true-*) tx=no; eval "tval=\$$4"; case "$tval" in "") tx=yes;; esac;;
4863esac;
4864case "$tx" in
4865yes)
4866 case "$runnm" in
4867 true)
4868 if $contains $tlook $tf >/dev/null 2>&1;
4869 then tval=true;
4870 else tval=false;
4871 fi;;
4872 *)
4873 echo "main() { extern short $1$tdc; printf(\"%hd\", $1$tc); }" > t.c;
dfe9444c 4874 if $cc $optimize $ccflags $ldflags -o t t.c $libs >/dev/null 2>&1;
2afac517 4875 then tval=true;
4876 else tval=false;
4877 fi;
4878 $rm -f t t.c;;
4879 esac;;
4880*)
4881 case "$tval" in
4882 $define) tval=true;;
4883 *) tval=false;;
4884 esac;;
4885esac;
4886eval "$2=$tval"'
4633a7c4 4887
2afac517 4888: define an is-in-libc? function
4889inlibc='echo " "; td=$define; tu=$undef;
4890sym=$1; var=$2; eval "was=\$$2";
4891tx=yes;
4892case "$reuseval$was" in
4893true) ;;
4894true*) tx=no;;
4895esac;
4896case "$tx" in
4897yes)
4898 set $sym tres -f;
4899 eval $csym;
4900 case "$tres" in
4901 true)
4902 echo "$sym() found." >&4;
4903 case "$was" in $undef) . ./whoa; esac; eval "$var=\$td";;
4904 *)
4905 echo "$sym() NOT found." >&4;
4906 case "$was" in $define) . ./whoa; esac; eval "$var=\$tu";;
4907 esac;;
4908*)
4909 case "$was" in
4910 $define) echo "$sym() found." >&4;;
4911 *) echo "$sym() NOT found." >&4;;
4912 esac;;
4913esac'
4633a7c4 4914
2afac517 4915: see if dlopen exists
4916xxx_runnm="$runnm"
4917runnm=false
4918set dlopen d_dlopen
4919eval $inlibc
4920runnm="$xxx_runnm"
40a7a20a 4921
2afac517 4922: determine which dynamic loading, if any, to compile in
4633a7c4 4923echo " "
2afac517 4924dldir="ext/DynaLoader"
4925case "$usedl" in
4926$define|y|true)
4927 dflt='y'
4928 usedl="$define"
4929 ;;
4930$undef|n|false)
4931 dflt='n'
4932 usedl="$undef"
4933 ;;
4934*)
4935 dflt='n'
4936 case "$d_dlopen" in
4937 $define) dflt='y' ;;
4938 esac
4939 case "$i_dld" in
4940 $define) dflt='y' ;;
4633a7c4 4941 esac
2afac517 4942 : Does a dl_xxx.xs file exist for this operating system
dc45a647 4943 $test -f $rsrc/$dldir/dl_${osname}.xs && dflt='y'
4633a7c4
LW
4944 ;;
4945esac
2afac517 4946rp="Do you wish to use dynamic loading?"
4947. ./myread
4948usedl="$ans"
4949case "$ans" in
4950y*) usedl="$define"
4951 case "$dlsrc" in
4952 '')
dc45a647 4953 if $test -f $rsrc/$dldir/dl_${osname}.xs ; then
2afac517 4954 dflt="$dldir/dl_${osname}.xs"
4955 elif $test "$d_dlopen" = "$define" ; then
4956 dflt="$dldir/dl_dlopen.xs"
4957 elif $test "$i_dld" = "$define" ; then
4958 dflt="$dldir/dl_dld.xs"
4633a7c4 4959 else
2afac517 4960 dflt=''
4633a7c4 4961 fi
4633a7c4 4962 ;;
2afac517 4963 *) dflt="$dldir/$dlsrc"
4964 ;;
4633a7c4 4965 esac
2afac517 4966 echo "The following dynamic loading files are available:"
4967 : Can not go over to $dldir because getfile has path hard-coded in.
dc45a647
MB
4968 tdir=`pwd`; cd $rsrc; $ls -C $dldir/dl*.xs; cd $tdir
4969 rp="Source file to use for dynamic loading"
4970 fn="fne"
4971 # XXX This getfile call will fail the existence check if you try
4972 # building away from $src (this is not supported yet).
4973 . ./getfile
2afac517 4974 usedl="$define"
4975 : emulate basename
4976 dlsrc=`echo $ans | $sed -e 's@.*/\([^/]*\)$@\1@'`
2304df62 4977
dc45a647 4978 $cat << EOM
2304df62 4979
2afac517 4980Some systems may require passing special flags to $cc -c to
4981compile modules that will be used to create a shared library.
4982To use no flags, say "none".
2304df62
AD
4983
4984EOM
2afac517 4985 case "$cccdlflags" in
4986 '') case "$gccversion" in
4987 '') case "$osname" in
4988 hpux) dflt='+z' ;;
4989 next) dflt='none' ;;
8cc95fdb 4990 irix*) dflt='-KPIC' ;;
3a6175e1 4991 svr4*|esix*|solaris) dflt='-KPIC' ;;
2afac517 4992 sunos) dflt='-pic' ;;
4993 *) dflt='none' ;;
dfe9444c
AD
4994 esac
4995 ;;
4996 *) case "$osname" in
3a6175e1 4997 svr4*|esix*|solaris) dflt='-fPIC' ;;
dfe9444c 4998 *) dflt='-fpic' ;;
81d89818 4999 esac ;;
2afac517 5000 esac ;;
bfb7748a 5001 ' ') dflt='none' ;;
2afac517 5002 *) dflt="$cccdlflags" ;;
5003 esac
5004 rp="Any special flags to pass to $cc -c to compile shared library modules?"
5005 . ./myread
5006 case "$ans" in
5007 none) cccdlflags=' ' ;;
5008 *) cccdlflags="$ans" ;;
5009 esac
2304df62 5010
2afac517 5011 cat << EOM
ecfc5424 5012
2afac517 5013Some systems use ld to create libraries that can be dynamically loaded,
5014while other systems (such as those using ELF) use $cc.
a0f45b59 5015
2afac517 5016EOM
5017 case "$ld" in
5018 '') $cat >try.c <<'EOM'
5019/* Test for whether ELF binaries are produced */
5020#include <fcntl.h>
5021#include <stdlib.h>
5022main() {
5023 char b[4];
5024 int i = open("a.out",O_RDONLY);
5025 if(i == -1)
5026 exit(1); /* fail */
5027 if(read(i,b,4)==4 && b[0]==127 && b[1]=='E' && b[2]=='L' && b[3]=='F')
5028 exit(0); /* succeed (yes, it's ELF) */
2304df62 5029 else
2afac517 5030 exit(1); /* fail */
5031}
5032EOM
5033 if $cc $ccflags try.c >/dev/null 2>&1 && ./a.out; then
5034 cat <<EOM
5035You appear to have ELF support. I'll use $cc to build dynamic libraries.
5036EOM
5037 dflt="$cc"
2304df62 5038 else
2afac517 5039 echo "I'll use ld to build dynamic libraries."
5040 dflt='ld'
2304df62 5041 fi
2afac517 5042 rm -f try.c a.out
5043 ;;
5044 *) dflt="$ld"
5045 ;;
5046 esac
5047
5048 rp="What command should be used to create dynamic libraries?"
5049 . ./myread
5050 ld="$ans"
5051
5052 cat << EOM
5053
5054Some systems may require passing special flags to $ld to create a
5055library that can be dynamically loaded. If your ld flags include
5056-L/other/path options to locate libraries outside your loader's normal
5057search path, you may need to specify those -L options here as well. To
5058use no flags, say "none".
5059
5060EOM
5061 case "$lddlflags" in
5062 '') case "$osname" in
5063 hpux) dflt='-b' ;;
5064 linux|irix*) dflt='-shared' ;;
5065 next) dflt='none' ;;
5066 solaris) dflt='-G' ;;
5067 sunos) dflt='-assert nodefinitions' ;;
5068 svr4*|esix*) dflt="-G $ldflags" ;;
5069 *) dflt='none' ;;
5070 esac
5071 ;;
5072 *) dflt="$lddlflags" ;;
5073 esac
5074
bfb7748a
AD
5075 : Try to guess additional flags to pick up local libraries.
5076 for thisflag in $ldflags; do
5077 case "$thisflag" in
5078 -L*)
5079 case " $dflt " in
5080 *" $thisflag "*) ;;
5081 *) dflt="$dflt $thisflag" ;;
5082 esac
5083 ;;
2afac517 5084 esac
bfb7748a 5085 done
2afac517 5086
bfb7748a
AD
5087 case "$dflt" in
5088 ''|' ') dflt='none' ;;
5089 esac
2afac517 5090
5091 rp="Any special flags to pass to $ld to create a dynamically loaded library?"
5092 . ./myread
5093 case "$ans" in
5094 none) lddlflags=' ' ;;
5095 *) lddlflags="$ans" ;;
5096 esac
5097
5098 cat <<EOM
5099
5100Some systems may require passing special flags to $cc to indicate that
5101the resulting executable will use dynamic linking. To use no flags,
5102say "none".
5103
5104EOM
5105 case "$ccdlflags" in
5106 '') case "$osname" in
5107 hpux) dflt='-Wl,-E' ;;
5108 linux) dflt='-rdynamic' ;;
5109 next) dflt='none' ;;
5110 sunos) dflt='none' ;;
5111 *) dflt='none' ;;
5112 esac ;;
bfb7748a 5113 ' ') dflt='none' ;;
2afac517 5114 *) dflt="$ccdlflags" ;;
5115 esac
5116 rp="Any special flags to pass to $cc to use dynamic loading?"
5117 . ./myread
5118 case "$ans" in
5119 none) ccdlflags=' ' ;;
5120 *) ccdlflags="$ans" ;;
5121 esac
5122 ;;
5123*) usedl="$undef"
5124 ld='ld'
5125 dlsrc='dl_none.xs'
5126 lddlflags=''
5127 ccdlflags=''
5128 ;;
5129esac
5130
5131also=''
5132case "$usedl" in
5133$undef)
5134 # No dynamic loading being used, so don't bother even to prompt.
5135 useshrplib='false'
5136 ;;
5137*) case "$useshrplib" in
5138 '') case "$osname" in
2ae324a7 5139 svr4*|dgux|dynixptx|esix|powerux)
3e3baf6d 5140 dflt=y
2afac517 5141 also='Building a shared libperl is required for dynamic loading to work on your system.'
5142 ;;
5143 next*)
5144 case "$osvers" in
3e3baf6d 5145 4*) dflt=y
2afac517 5146 also='Building a shared libperl is needed for MAB support.'
5147 ;;
3e3baf6d 5148 *) dflt=n
2afac517 5149 ;;
5150 esac
5151 ;;
3e3baf6d 5152 *) dflt=n
2afac517 5153 ;;
5154 esac
5155 ;;
5156 $define|true|[Yy]*)
3e3baf6d 5157 dflt=y
2afac517 5158 ;;
3e3baf6d 5159 *) dflt=n
2afac517 5160 ;;
5161 esac
5162 $cat << EOM
5163
5164The perl executable is normally obtained by linking perlmain.c with
dfe9444c 5165libperl${_a}, any static extensions (usually just DynaLoader), and
2afac517 5166any other libraries needed on this system (such as -lm, etc.). Since
5167your system supports dynamic loading, it is probably possible to build
5168a shared libperl.$so. If you will have more than one executable linked
5169to libperl.$so, this will significantly reduce the size of each
5170executable, but it may have a noticeable affect on performance. The
5171default is probably sensible for your system.
5172$also
5173
5174EOM
5175 rp="Build a shared libperl.$so (y/n)"
5176 . ./myread
5177 case "$ans" in
5178 true|$define|[Yy]*)
5179 useshrplib='true'
5180 # Why does next4 have to be so different?
5181 case "${osname}${osvers}" in
5182 next4*) xxx='DYLD_LIBRARY_PATH' ;;
dc45a647 5183 os2*) xxx='' ;; # Nothing special needed.
2afac517 5184 *) xxx='LD_LIBRARY_PATH' ;;
5185 esac
dc45a647
MB
5186 if test X"$xxx" != "X"; then
5187 $cat <<EOM | $tee -a ../config.msg >&4
2afac517 5188
5189To build perl, you must add the current working directory to your
693762b4 5190$xxx environment variable before running make. You can do
2afac517 5191this with
5192 $xxx=\`pwd\`; export $xxx
5193for Bourne-style shells, or
5194 setenv $xxx \`pwd\`
5195for Csh-style shells. You *MUST* do this before running make.
5196
5197EOM
dc45a647 5198 fi
2afac517 5199 ;;
5200 *) useshrplib='false' ;;
5201 esac
5202 ;;
5203esac
5204
5205case "$useshrplib" in
5206true)
5207 case "$libperl" in
5208 '')
5209 # Figure out a good name for libperl.so. Since it gets stored in
5210 # a version-specific architecture-dependent library, the version
5211 # number isn't really that important, except for making cc/ld happy.
5212 #
5213 # A name such as libperl.so.3.1
5214 majmin="libperl.$so.$patchlevel.$subversion"
5215 # A name such as libperl.so.301
5216 majonly=`echo $patchlevel $subversion |
5217 $awk '{printf "%d%02d", $1, $2}'`
5218 majonly=libperl.$so.$majonly
5219 # I'd prefer to keep the os-specific stuff here to a minimum, and
5220 # rely on figuring it out from the naming of libc.
5221 case "${osname}${osvers}" in
5222 next4*)
5223 dflt=libperl.5.$so
5224 # XXX How handle the --version stuff for MAB?
5225 ;;
5226 linux*) # ld won't link with a bare -lperl otherwise.
5227 dflt=libperl.$so
5228 ;;
5229 *) # Try to guess based on whether libc has major.minor.
5230 case "$libc" in
5231 *libc.$so.[0-9]*.[0-9]*) dflt=$majmin ;;
5232 *libc.$so.[0-9]*) dflt=$majonly ;;
5233 *) dflt=libperl.$so ;;
5234 esac
5235 ;;
5236 esac
5237 ;;
5238 *) dflt=$libperl
5239 ;;
5240 esac
5241 cat << EOM
5242
5243I need to select a good name for the shared libperl. If your system uses
5244library names with major and minor numbers, then you might want something
5245like $majmin. Alternatively, if your system uses a single version
5246number for shared libraries, then you might want to use $majonly.
5247Or, your system might be quite happy with a simple libperl.$so.
5248
5249Since the shared libperl will get installed into a version-specific
5250architecture-dependent directory, the version number of the shared perl
5251library probably isn't important, so the default should be o.k.
5252
5253EOM
5254 rp='What name do you want to give to the shared libperl?'
5255 . ./myread
5256 libperl=$ans
5257 echo "Ok, I'll use $libperl"
5258 ;;
5259*)
dfe9444c 5260 libperl="libperl${_a}"
2afac517 5261 ;;
5262esac
5263
5264# Detect old use of shrpdir via undocumented Configure -Dshrpdir
5265case "$shrpdir" in
5266'') ;;
5267*) $cat >&4 <<EOM
5268WARNING: Use of the shrpdir variable for the installation location of
5269the shared $libperl is not supported. It was never documented and
5ff3f7a4 5270will not work in this version. Let me (jhi@iki.fi)
dfe9444c 5271know of any problems this may cause.
2afac517 5272
5273EOM
5274 case "$shrpdir" in
5275 "$archlibexp/CORE")
5276 $cat >&4 <<EOM
5277But your current setting of $shrpdir is
5278the default anyway, so it's harmless.
5279EOM
5280 ;;
5281 *)
4e2a5f63
AD
5282 $cat >&4 <<EOM
5283Further, your current attempted setting of $shrpdir
5284conflicts with the value of $archlibexp/CORE
5285that installperl will use.
5286EOM
dc45a647
MB
5287 ;;
5288 esac
5289 ;;
5290esac
5291
5292# How will the perl executable find the installed shared $libperl?
5293# Add $xxx to ccdlflags.
5294# If we can't figure out a command-line option, use $shrpenv to
5295# set env LD_RUN_PATH. The main perl makefile uses this.
5296shrpdir=$archlibexp/CORE
5297xxx=''
5298tmp_shrpenv=''
5299if "$useshrplib"; then
5300 case "$osname" in
5301 aix)
5302 # We'll set it in Makefile.SH...
5303 ;;
5304 solaris|netbsd)
5305 xxx="-R $shrpdir"
5306 ;;
5307 freebsd)
5308 xxx="-Wl,-R$shrpdir"
5309 ;;
5310 linux|irix*|dec_osf)
5311 xxx="-Wl,-rpath,$shrpdir"
5312 ;;
5313 next)
5314 # next doesn't like the default...
5315 ;;
5316 *)
5317 tmp_shrpenv="env LD_RUN_PATH=$shrpdir"
5318 ;;
5319 esac
5320 case "$xxx" in
5321 '') ;;
5322 *)
5323 # Only add $xxx if it isn't already in ccdlflags.
5324 case " $ccdlflags " in
5325 *" $xxx "*) ;;
5326 *) ccdlflags="$ccdlflags $xxx"
5327 cat <<EOM >&4
5328
5329Adding $xxx to the flags
5330passed to $ld so that the perl executable will find the
5331installed shared $libperl.
5332
5333EOM
5334 ;;
5335 esac
5336 ;;
5337 esac
5338fi
5339# Respect a hint or command-line value.
5340case "$shrpenv" in
5341'') shrpenv="$tmp_shrpenv" ;;
5342esac
5343
5344: determine where manual pages go
5345set man1dir man1dir none
5346eval $prefixit
5347$cat <<EOM
5348
5349$spackage has manual pages available in source form.
5350EOM
5351case "$nroff" in
5352nroff)
5353 echo "However, you don't have nroff, so they're probably useless to you."
5354 case "$man1dir" in
5355 '') man1dir="none";;
5356 esac;;
5357esac
5358echo "If you don't want the manual sources installed, answer 'none'."
5359case "$man1dir" in
5360' ') dflt=none
5361 ;;
5362'')
5363 lookpath="$prefixexp/man/man1 $prefixexp/man/l_man/man1"
5364 lookpath="$lookpath $prefixexp/man/p_man/man1"
5365 lookpath="$lookpath $prefixexp/man/u_man/man1"
5366 lookpath="$lookpath $prefixexp/man/man.1"
5367 case "$sysman" in
5368 */?_man*) dflt=`./loc . $prefixexp/l_man/man1 $lookpath` ;;
5369 *) dflt=`./loc . $prefixexp/man/man1 $lookpath` ;;
5370 esac
5371 set dflt
5372 eval $prefixup
5373 ;;
5374*) dflt="$man1dir"
5375 ;;
5376esac
5377echo " "
5378fn=dn+~
5379rp="Where do the main $spackage manual pages (source) go?"
5380. ./getfile
5381if $test "X$man1direxp" != "X$ansexp"; then
5382 installman1dir=''
5383fi
5384man1dir="$ans"
5385man1direxp="$ansexp"
5386case "$man1dir" in
5387'') man1dir=' '
5388 installman1dir='';;
5389esac
5390if $afs; then
5391 $cat <<EOM
5392
5393Since you are running AFS, I need to distinguish the directory in which
5394manual pages reside from the directory in which they are installed (and from
5395which they are presumably copied to the former directory by occult means).
5396
5397EOM
5398 case "$installman1dir" in
5399 '') dflt=`echo $man1direxp | sed 's#^/afs/#/afs/.#'`;;
5400 *) dflt="$installman1dir";;
5401 esac
5402 fn=de~
5403 rp='Where will man pages be installed?'
5404 . ./getfile
5405 installman1dir="$ans"
5406else
5407 installman1dir="$man1direxp"
5408fi
5409
5410: What suffix to use on installed man pages
5411
5412case "$man1dir" in
5413' ')
5414 man1ext='0'
5415 ;;
5416*)
5417 rp="What suffix should be used for the main $spackage man pages?"
5418 case "$man1ext" in
5419 '') case "$man1dir" in
5420 *1) dflt=1 ;;
5421 *1p) dflt=1p ;;
5422 *1pm) dflt=1pm ;;
5423 *l) dflt=l;;
5424 *n) dflt=n;;
5425 *o) dflt=o;;
5426 *p) dflt=p;;
5427 *C) dflt=C;;
5428 *L) dflt=L;;
5429 *L1) dflt=L1;;
5430 *) dflt=1;;
5431 esac
5432 ;;
5433 *) dflt="$man1ext";;
5434 esac
5435 . ./myread
5436 man1ext="$ans"
5437 ;;
5438esac
5439
5440: see if we can have long filenames
5441echo " "
5442rmlist="$rmlist /tmp/cf$$"
5443$test -d /tmp/cf$$ || mkdir /tmp/cf$$
5444first=123456789abcdef
5445second=/tmp/cf$$/$first
5446$rm -f $first $second
5447if (echo hi >$first) 2>/dev/null; then
5448 if $test -f 123456789abcde; then
5449 echo 'You cannot have filenames longer than 14 characters. Sigh.' >&4
5450 val="$undef"
5451 else
5452 if (echo hi >$second) 2>/dev/null; then
5453 if $test -f /tmp/cf$$/123456789abcde; then
5454 $cat <<'EOM'
5455That's peculiar... You can have filenames longer than 14 characters, but only
5456on some of the filesystems. Maybe you are using NFS. Anyway, to avoid problems
5457I shall consider your system cannot support long filenames at all.
5458EOM
5459 val="$undef"
5460 else
5461 echo 'You can have filenames longer than 14 characters.' >&4
5462 val="$define"
5463 fi
5464 else
5465 $cat <<'EOM'
5466How confusing! Some of your filesystems are sane enough to allow filenames
5467longer than 14 characters but some others like /tmp can't even think about them.
5468So, for now on, I shall assume your kernel does not allow them at all.
5469EOM
5470 val="$undef"
5471 fi
5472 fi
5473else
5474 $cat <<'EOM'
5475You can't have filenames longer than 14 chars. You can't even think about them!
5476EOM
5477 val="$undef"
5478fi
5479set d_flexfnam
5480eval $setvar
5481$rm -rf /tmp/cf$$ 123456789abcde*
5482
5483: determine where library module manual pages go
5484set man3dir man3dir none
5485eval $prefixit
5486$cat <<EOM
5487
5488$spackage has manual pages for many of the library modules.
5489EOM
5490
5491case "$nroff" in
5492nroff)
5493 $cat <<'EOM'
5494However, you don't have nroff, so they're probably useless to you.
5495EOM
5496 case "$man3dir" in
5497 '') man3dir="none";;
5498 esac;;
5499esac
5500
5501case "$d_flexfnam" in
5502undef)
5503 $cat <<'EOM'
5504However, your system can't handle the long file names like File::Basename.3.
5505EOM
5506 case "$man3dir" in
5507 '') man3dir="none";;
5508 esac;;
5509esac
5510
5511echo "If you don't want the manual sources installed, answer 'none'."
5512prog=`echo $package | $sed 's/-*[0-9.]*$//'`
5513case "$man3dir" in
5514'') case "$prefix" in
5515 *$prog*) dflt=`echo $man1dir |
5516 $sed -e 's/man1/man3/g' -e 's/man\.1/man\.3/g'` ;;
5517 *) dflt="$privlib/man/man3" ;;
2afac517 5518 esac
5519 ;;
dc45a647
MB
5520' ') dflt=none;;
5521*) dflt="$man3dir" ;;
2afac517 5522esac
dc45a647 5523echo " "
2afac517 5524
dc45a647
MB
5525fn=dn+~
5526rp="Where do the $package library man pages (source) go?"
5527. ./getfile
5528if test "X$man3direxp" != "X$ansexp"; then
5529 installman3dir=''
5530fi
2afac517 5531
dc45a647
MB
5532man3dir="$ans"
5533man3direxp="$ansexp"
5534case "$man3dir" in
5535'') man3dir=' '
5536 installman3dir='';;
5537esac
5538if $afs; then
5539 $cat <<EOM
5540
5541Since you are running AFS, I need to distinguish the directory in which
5542manual pages reside from the directory in which they are installed (and from
5543which they are presumably copied to the former directory by occult means).
2afac517 5544
4e2a5f63 5545EOM
dc45a647
MB
5546 case "$installman3dir" in
5547 '') dflt=`echo $man3direxp | sed 's#^/afs/#/afs/.#'`;;
5548 *) dflt="$installman3dir";;
5549 esac
5550 fn=de~
5551 rp='Where will man pages be installed?'
5552 . ./getfile
5553 installman3dir="$ans"
5554else
5555 installman3dir="$man3direxp"
5556fi
5557
5558: What suffix to use on installed man pages
5559
5560case "$man3dir" in
5561' ')
5562 man3ext='0'
5563 ;;
5564*)
5565 rp="What suffix should be used for the $package library man pages?"
5566 case "$man3ext" in
5567 '') case "$man3dir" in
5568 *3) dflt=3 ;;
5569 *3p) dflt=3p ;;
5570 *3pm) dflt=3pm ;;
5571 *l) dflt=l;;
5572 *n) dflt=n;;
5573 *o) dflt=o;;
5574 *p) dflt=p;;
5575 *C) dflt=C;;
5576 *L) dflt=L;;
5577 *L3) dflt=L3;;
5578 *) dflt=3;;
2afac517 5579 esac
5580 ;;
dc45a647 5581 *) dflt="$man3ext";;
2afac517 5582 esac
dc45a647
MB
5583 . ./myread
5584 man3ext="$ans"
5585 ;;
2afac517 5586esac
5587
5588: see if we have to deal with yellow pages, now NIS.
5589if $test -d /usr/etc/yp || $test -d /etc/yp; then
5590 if $test -f /usr/etc/nibindd; then
5591 echo " "
5592 echo "I'm fairly confident you're on a NeXT."
5593 echo " "
5594 rp='Do you get the hosts file via NetInfo?'
5595 dflt=y
5596 case "$hostcat" in
5597 nidump*) ;;
5598 '') ;;
5599 *) dflt=n;;
5600 esac
5601 . ./myread
5602 case "$ans" in
5603 y*) hostcat='nidump hosts .';;
5604 *) case "$hostcat" in
5605 nidump*) hostcat='';;
5606 esac
5607 ;;
5608 esac
5609 fi
5610 case "$hostcat" in
5611 nidump*) ;;
5612 *)
5613 case "$hostcat" in
5614 *ypcat*) dflt=y;;
5615 '') if $contains '^\+' /etc/passwd >/dev/null 2>&1; then
5616 dflt=y
5617 else
5618 dflt=n
5619 fi;;
5620 *) dflt=n;;
5621 esac
5622 echo " "
5623 rp='Are you getting the hosts file via yellow pages?'
5624 . ./myread
5625 case "$ans" in
5626 y*) hostcat='ypcat hosts';;
5627 *) hostcat='cat /etc/hosts';;
5628 esac
5629 ;;
5630 esac
5631fi
dfe9444c
AD
5632case "$hostcat" in
5633'') hostcat='cat /etc/hosts';;
5634esac
5635case "$groupcat" in
5636'') groupcat='cat /etc/group';;
5637esac
5638case "$passcat" in
5639'') passcat='cat /etc/passwd';;
5640esac
2afac517 5641
5642: now get the host name
5643echo " "
5644echo "Figuring out host name..." >&4
5645case "$myhostname" in
5646'') cont=true
5647 echo 'Maybe "hostname" will work...'
5648 if tans=`sh -c hostname 2>&1` ; then
5649 myhostname=$tans
5650 phostname=hostname
5651 cont=''
5652 fi
5653 ;;
5654*) cont='';;
5655esac
5656if $test "$cont"; then
5657 if ./xenix; then
5658 echo 'Oh, dear. Maybe "/etc/systemid" is the key...'
5659 if tans=`cat /etc/systemid 2>&1` ; then
5660 myhostname=$tans
5661 phostname='cat /etc/systemid'
5662 echo "Whadyaknow. Xenix always was a bit strange..."
5663 cont=''
5664 fi
5665 elif $test -r /etc/systemid; then
5666 echo "(What is a non-Xenix system doing with /etc/systemid?)"
5667 fi
5668fi
5669if $test "$cont"; then
5670 echo 'No, maybe "uuname -l" will work...'
5671 if tans=`sh -c 'uuname -l' 2>&1` ; then
5672 myhostname=$tans
5673 phostname='uuname -l'
5674 else
5675 echo 'Strange. Maybe "uname -n" will work...'
5676 if tans=`sh -c 'uname -n' 2>&1` ; then
5677 myhostname=$tans
5678 phostname='uname -n'
5679 else
5680 echo 'Oh well, maybe I can mine it out of whoami.h...'
5681 if tans=`sh -c $contains' sysname $usrinc/whoami.h' 2>&1` ; then
5682 myhostname=`echo "$tans" | $sed 's/^.*"\(.*\)"/\1/'`
5683 phostname="sed -n -e '"'/sysname/s/^.*\"\\(.*\\)\"/\1/{'"' -e p -e q -e '}' <$usrinc/whoami.h"
5684 else
5685 case "$myhostname" in
5686 '') echo "Does this machine have an identity crisis or something?"
5687 phostname='';;
5688 *)
5689 echo "Well, you said $myhostname before..."
5690 phostname='echo $myhostname';;
5691 esac
5692 fi
5693 fi
5694 fi
5695fi
5696: you do not want to know about this
5697set $myhostname
5698myhostname=$1
5699
5700: verify guess
5701if $test "$myhostname" ; then
5702 dflt=y
5703 rp='Your host name appears to be "'$myhostname'".'" Right?"
5704 . ./myread
5705 case "$ans" in
5706 y*) ;;
5707 *) myhostname='';;
5708 esac
5709fi
5710
5711: bad guess or no guess
5712while $test "X$myhostname" = X ; do
5713 dflt=''
5714 rp="Please type the (one word) name of your host:"
5715 . ./myread
5716 myhostname="$ans"
5717done
5718
5719: translate upper to lower if necessary
5720case "$myhostname" in
5721*[A-Z]*)
5722 echo "(Normalizing case in your host name)"
5723 myhostname=`echo $myhostname | ./tr '[A-Z]' '[a-z]'`
5724 ;;
5725esac
5726
5727case "$myhostname" in
5728*.*)
5729 dflt=`expr "X$myhostname" : "X[^.]*\(\..*\)"`
5730 myhostname=`expr "X$myhostname" : "X\([^.]*\)\."`
5731 echo "(Trimming domain name from host name--host name is now $myhostname)"
5732 ;;
5733*) case "$mydomain" in
5734 '')
5735 {
2afac517 5736 test "X$hostcat" = "Xypcat hosts" &&
5737 ypmatch "$myhostname" hosts 2>/dev/null |\
5738 $sed -e 's/[ ]*#.*//; s/$/ /' > hosts && \
5739 $test -s hosts
5740 } || {
2afac517 5741 $hostcat | $sed -n -e "s/[ ]*#.*//; s/\$/ /
5742 /[ ]$myhostname[ . ]/p" > hosts
5743 }
5744 tmp_re="[ . ]"
5745 $test x`$awk "/[0-9].*[ ]$myhostname$tmp_re/ { sum++ }
5746 END { print sum }" hosts` = x1 || tmp_re="[ ]"
5747 dflt=.`$awk "/[0-9].*[ ]$myhostname$tmp_re/ {for(i=2; i<=NF;i++) print \\\$i}" \
5748 hosts | $sort | $uniq | \
5749 $sed -n -e "s/$myhostname\.\([-a-zA-Z0-9_.]\)/\1/p"`
5750 case `$echo X$dflt` in
5751 X*\ *) echo "(Several hosts in /etc/hosts matched hostname)"
5752 dflt=.
5753 ;;
5754 X.) echo "(You do not have fully-qualified names in /etc/hosts)"
5755 ;;
5756 esac
5757 case "$dflt" in
5758 .)
5759 tans=`./loc resolv.conf X /etc /usr/etc`
5760 if $test -f "$tans"; then
5761 echo "(Attempting domain name extraction from $tans)"
a6006777 5762 dflt=.`$sed -n -e 's/ / /g' \
28757baa 5763 -e 's/^search *\([^ ]*\).*/\1/p' $tans \
a6006777 5764 | ./tr '[A-Z]' '[a-z]' 2>/dev/null`
2afac517 5765 case "$dflt" in
a6006777 5766 .) dflt=.`$sed -n -e 's/ / /g' \
28757baa 5767 -e 's/^domain *\([^ ]*\).*/\1/p' $tans \
a6006777 5768 | ./tr '[A-Z]' '[a-z]' 2>/dev/null`
774d564b 5769 ;;
2afac517 5770 esac
5771 fi
5772 ;;
5773 esac
5774 case "$dflt" in
5775 .) echo "(No help from resolv.conf either -- attempting clever guess)"
5776 dflt=.`sh -c domainname 2>/dev/null`
5777 case "$dflt" in
5778 '') dflt='.';;
5779 .nis.*|.yp.*|.main.*) dflt=`echo $dflt | $sed -e 's/^\.[^.]*//'`;;
5780 esac
5781 ;;
5782 esac
5783 case "$dflt" in
5784 .) echo "(Lost all hope -- silly guess then)"
5785 dflt='.uucp'
5786 ;;
5787 esac
5788 $rm -f hosts
5789 ;;
5790 *) dflt="$mydomain";;
5791 esac;;
5792esac
5793echo " "
5794rp="What is your domain name?"
5795. ./myread
5796tans="$ans"
5797case "$ans" in
5798'') ;;
5799.*) ;;
5800*) tans=".$tans";;
5801esac
5802mydomain="$tans"
5803
5804: translate upper to lower if necessary
5805case "$mydomain" in
5806*[A-Z]*)
5807 echo "(Normalizing case in your domain name)"
5808 mydomain=`echo $mydomain | ./tr '[A-Z]' '[a-z]'`
5809 ;;
5810esac
5811
5812: a little sanity check here
5813case "$phostname" in
5814'') ;;
5815*)
5816 case `$phostname | ./tr '[A-Z]' '[a-z]'` in
5817 $myhostname$mydomain|$myhostname) ;;
5818 *)
5819 case "$phostname" in
5820 sed*)
5821 echo "(That doesn't agree with your whoami.h file, by the way.)"
5822 ;;
5823 *)
5824 echo "(That doesn't agree with your $phostname command, by the way.)"
5825 ;;
5826 esac
5827 ;;
5828 esac
5829 ;;
5830esac
5831
5832$cat <<EOM
5833
5834I need to get your e-mail address in Internet format if possible, i.e.
5835something like user@host.domain. Please answer accurately since I have
5836no easy means to double check it. The default value provided below
5837is most probably close to the reality but may not be valid from outside
5838your organization...
5839
5840EOM
5841cont=x
5842while test "$cont"; do
5843 case "$cf_email" in
5844 '') dflt="$cf_by@$myhostname$mydomain";;
5845 *) dflt="$cf_email";;
5846 esac
5847 rp='What is your e-mail address?'
5848 . ./myread
5849 cf_email="$ans"
5850 case "$cf_email" in
5851 *@*.*) cont='' ;;
5852 *)
5853 rp='Address does not look like an Internet one. Use it anyway?'
5854 case "$fastread" in
5855 yes) dflt=y ;;
5856 *) dflt=n ;;
5857 esac
5858 . ./myread
5859 case "$ans" in
5860 y*) cont='' ;;
5861 *) echo " " ;;
5862 esac
5863 ;;
5864 esac
5865done
5866
5867$cat <<EOM
5868
5869If you or somebody else will be maintaining perl at your site, please
5870fill in the correct e-mail address here so that they may be contacted
5871if necessary. Currently, the "perlbug" program included with perl
5872will send mail to this address in addition to perlbug@perl.com. You may
5873enter "none" for no administrator.
5874
5875EOM
5876case "$perladmin" in
5877'') dflt="$cf_email";;
5878*) dflt="$perladmin";;
5879esac
5880rp='Perl administrator e-mail address'
5881. ./myread
5882perladmin="$ans"
5883
5f05dabc 5884: figure out how to guarantee perl startup
5885case "$startperl" in
5886'')
5887 case "$sharpbang" in
5888 *!)
5889 $cat <<EOH
5890
5891I can use the #! construct to start perl on your system. This will
5892make startup of perl scripts faster, but may cause problems if you
5893want to share those scripts and perl is not in a standard place
5894($binexp/perl) on all your platforms. The alternative is to force
5895a shell by starting the script with a single ':' character.
5896
5897EOH
5898 dflt="$binexp/perl"
5899 rp='What shall I put after the #! to start up perl ("none" to not use #!)?'
5900 . ./myread
5901 case "$ans" in
68dc0745 5902 none) startperl=": # use perl";;
5903 *) startperl="#!$ans"
3e3baf6d 5904 if $test 30 -lt `echo "$ans" | wc -c`; then
68dc0745 5905 $cat >&4 <<EOM
5906
5907WARNING: Some systems limit the #! command to 32 characters.
5908If you experience difficulty running Perl scripts with #!, try
5909installing Perl in a directory with a shorter pathname.
5910
5911EOM
5912 fi ;;
5f05dabc 5913 esac
5914 ;;
5915 *) startperl=": # use perl"
5916 ;;
5917 esac
5918 ;;
5919esac
5920echo "I'll use $startperl to start perl scripts."
5921
5922: figure best path for perl in scripts
5923case "$perlpath" in
5924'')
5925 perlpath="$binexp/perl"
5926 case "$startperl" in
5927 *!*) ;;
5928 *)
5929 $cat <<EOH
5930
5931I will use the "eval 'exec'" idiom to start Perl on your system.
5932I can use the full path of your Perl binary for this purpose, but
5933doing so may cause problems if you want to share those scripts and
5934Perl is not always in a standard place ($binexp/perl).
5935
5936EOH
5937 dflt="$binexp/perl"
5938 rp="What path shall I use in \"eval 'exec'\"?"
5939 . ./myread
5940 perlpath="$ans"
5941 ;;
5942 esac
5943 ;;
5944esac
5945case "$startperl" in
5946*!*) ;;
5947*) echo "I'll use $perlpath in \"eval 'exec'\"" ;;
5948esac
5949
dc45a647
MB
5950: determine where public executable scripts go
5951set scriptdir scriptdir
5952eval $prefixit
5953case "$scriptdir" in
5954'')
5955 dflt="$bin"
5956 : guess some guesses
5957 $test -d /usr/share/scripts && dflt=/usr/share/scripts
5958 $test -d /usr/share/bin && dflt=/usr/share/bin
5959 $test -d /usr/local/script && dflt=/usr/local/script
5960 $test -d $prefixexp/script && dflt=$prefixexp/script
5961 set dflt
5962 eval $prefixup
5963 ;;
5964*) dflt="$scriptdir"
5965 ;;
5966esac
5967$cat <<EOM
5968
5969Some installations have a separate directory just for executable scripts so
5970that they can mount it across multiple architectures but keep the scripts in
5971one spot. You might, for example, have a subdirectory of /usr/share for this.
5972Or you might just lump your scripts in with all your other executables.
5973
5974EOM
5975fn=d~
5976rp='Where do you keep publicly executable scripts?'
5977. ./getfile
5978if $test "X$ansexp" != "X$scriptdirexp"; then
5979 installscript=''
5980fi
5981scriptdir="$ans"
5982scriptdirexp="$ansexp"
5983if $afs; then
5984 $cat <<EOM
5985
5986Since you are running AFS, I need to distinguish the directory in which
5987scripts reside from the directory in which they are installed (and from
5988which they are presumably copied to the former directory by occult means).
5989
5990EOM
5991 case "$installscript" in
5992 '') dflt=`echo $scriptdirexp | sed 's#^/afs/#/afs/.#'`;;
5993 *) dflt="$installscript";;
5994 esac
5995 fn=de~
5996 rp='Where will public scripts be installed?'
5997 . ./getfile
5998 installscript="$ans"
5999else
6000 installscript="$scriptdirexp"
6001fi
6002
6003: determine where site specific libraries go.
3a6175e1 6004: Usual default is /usr/local/lib/perl5/site_perl/$apiversion
bfb7748a
AD
6005prog=`echo $package | $sed 's/-*[0-9.]*$//'`
6006case "$prefix" in
3a6175e1
AD
6007*perl*) set dflt sitelib lib/site_$prog/$apiversion ;;
6008*) set dflt sitelib lib/$package/site_$prog/$apiversion ;;
dc45a647 6009esac
bfb7748a 6010eval $prefixit
dc45a647
MB
6011$cat <<EOM
6012
6013The installation process will also create a directory for
6014site-specific extensions and modules. Some users find it convenient
6015to place all local files in this directory rather than in the main
6016distribution directory.
6017
6018EOM
6019fn=d~+
6020rp='Pathname for the site-specific library files?'
6021. ./getfile
6022if $test "X$sitelibexp" != "X$ansexp"; then
6023 installsitelib=''
6024fi
6025sitelib="$ans"
6026sitelibexp="$ansexp"
6027if $afs; then
6028 $cat <<EOM
6029
6030Since you are running AFS, I need to distinguish the directory in
6031which site-specific files reside from the directory in which they are
6032installed (and from which they are presumably copied to the former
6033directory by occult means).
6034
6035EOM
6036 case "$installsitelib" in
6037 '') dflt=`echo $sitelibexp | sed 's#^/afs/#/afs/.#'`;;
6038 *) dflt="$installsitelib";;
6039 esac
6040 fn=de~
6041 rp='Where will site-specific files be installed?'
6042 . ./getfile
6043 installsitelib="$ans"
6044else
6045 installsitelib="$sitelibexp"
6046fi
6047
6048: determine where site specific architecture-dependent libraries go.
3a6175e1 6049: sitelib default is /usr/local/lib/perl5/site_perl/$apiversion
bfb7748a 6050: sitearch default is /usr/local/lib/perl5/site_perl/$apiversion/$archname
3a6175e1 6051: sitelib may have an optional trailing /share.
bfb7748a
AD
6052tdflt=`echo $sitelib | $sed 's,/share$,,'`
6053tdflt="$tdflt/$archname"
dc45a647
MB
6054set sitearch sitearch none
6055eval $prefixit
6056case "$sitearch" in
bfb7748a 6057'') dflt="$tdflt" ;;
dc45a647
MB
6058*) dflt="$sitearch" ;;
6059esac
6060$cat <<EOM
6061
6062The installation process will also create a directory for
6063architecture-dependent site-specific extensions and modules.
6064
6065EOM
6066fn=nd~+
6067rp='Pathname for the site-specific architecture-dependent library files?'
6068. ./getfile
6069if $test "X$sitearchexp" != "X$ansexp"; then
6070 installsitearch=''
6071fi
6072sitearch="$ans"
6073sitearchexp="$ansexp"
6074if $afs; then
6075 $cat <<EOM
6076
6077Since you are running AFS, I need to distinguish the directory in
6078which site-specific architecture-dependent library files reside from
6079the directory in which they are installed (and from which they are
6080presumably copied to the former directory by occult means).
6081
6082EOM
6083 case "$installsitearch" in
6084 '') dflt=`echo $sitearchexp | sed 's#^/afs/#/afs/.#'`;;
6085 *) dflt="$installsitearch";;
6086 esac
6087 fn=de~
6088 rp='Where will site-specific architecture-dependent files be installed?'
6089 . ./getfile
6090 installsitearch="$ans"
6091else
6092 installsitearch="$sitearchexp"
6093fi
6094
2afac517 6095cat <<EOM
6096
85aff577
CS
6097Previous version of $package used the standard IO mechanisms as defined
6098in <stdio.h>. Versions 5.003_02 and later of perl allow alternate IO
2afac517 6099mechanisms via a "PerlIO" abstraction, but the stdio mechanism is still
85aff577
CS
6100the default. This abstraction layer can use AT&T's sfio (if you already
6101have sfio installed) or regular stdio. Using PerlIO with sfio may cause
6102problems with some extension modules. Using PerlIO with stdio is safe,
6103but it is slower than plain stdio and therefore is not the default.
2afac517 6104
6105If this doesn't make any sense to you, just accept the default 'n'.
6106EOM
6107case "$useperlio" in
6108$define|true|[yY]*) dflt='y';;
6109*) dflt='n';;
6110esac
6111rp='Use the experimental PerlIO abstraction layer?'
6112. ./myread
6113case "$ans" in
6114y|Y)
6115 val="$define"
6116 ;;
6117*)
6118 echo "Ok, doing things the stdio way"
6119 val="$undef"
6120 ;;
6121esac
6122set useperlio
6123eval $setvar
2304df62 6124
8e07c86e 6125: Check how to convert floats to strings.
28e8609d 6126if test "X$d_Gconvert" = X; then
5ff3f7a4
GS
6127 echo " "
6128 echo "Checking for an efficient way to convert floats to strings."
6129 $cat >try.c <<'EOP'
8e07c86e
AD
6130#ifdef TRY_gconvert
6131#define Gconvert(x,n,t,b) gconvert((x),(n),(t),(b))
8ff267be 6132char *myname = "gconvert";
8e07c86e
AD
6133#endif
6134#ifdef TRY_gcvt
6135#define Gconvert(x,n,t,b) gcvt((x),(n),(b))
8ff267be 6136char *myname = "gcvt";
8e07c86e
AD
6137#endif
6138#ifdef TRY_sprintf
6139#define Gconvert(x,n,t,b) sprintf((b),"%.*g",(n),(x))
8ff267be 6140char *myname = "sprintf";
8e07c86e 6141#endif
8ff267be 6142
6143#include <stdio.h>
6144
6145int
6146checkit(expect, got)
6147char *expect;
6148char *got;
6149{
6150 if (strcmp(expect, got)) {
6151 printf("%s oddity: Expected %s, got %s\n",
6152 myname, expect, got);
6153 exit(1);
6154 }
6155}
6156
6157int
6158main()
6159{
ecfc5424 6160 char buf[64];
8ff267be 6161 buf[63] = '\0';
6162
6163 /* This must be 1st test on (which?) platform */
6164 /* Alan Burlison <AlanBurlsin@unn.unisys.com> */
6165 Gconvert(0.1, 8, 0, buf);
6166 checkit("0.1", buf);
6167
8e07c86e 6168 Gconvert(1.0, 8, 0, buf);
8ff267be 6169 checkit("1", buf);
6170
8e07c86e 6171 Gconvert(0.0, 8, 0, buf);
8ff267be 6172 checkit("0", buf);
6173
8e07c86e 6174 Gconvert(-1.0, 8, 0, buf);
8ff267be 6175 checkit("-1", buf);
6176
6177 /* Some Linux gcvt's give 1.e+5 here. */
6178 Gconvert(100000.0, 8, 0, buf);
6179 checkit("100000", buf);
6180
6181 /* Some Linux gcvt's give -1.e+5 here. */
6182 Gconvert(-100000.0, 8, 0, buf);
6183 checkit("-100000", buf);
6184
ecfc5424 6185 exit(0);
a0d0e21e
LW
6186}
6187EOP
5ff3f7a4
GS
6188 case "$d_Gconvert" in
6189 gconvert*) xxx_list='gconvert gcvt sprintf' ;;
6190 gcvt*) xxx_list='gcvt gconvert sprintf' ;;
6191 sprintf*) xxx_list='sprintf gconvert gcvt' ;;
6192 *) xxx_list='gconvert gcvt sprintf' ;;
6193 esac
8e07c86e 6194
5ff3f7a4
GS
6195 for xxx_convert in $xxx_list; do
6196 echo "Trying $xxx_convert"
6197 $rm -f try try$_o
6198 set try -DTRY_$xxx_convert
6199 if eval $compile; then
6200 echo "$xxx_convert" found. >&4
6201 if ./try; then
6202 echo "I'll use $xxx_convert to convert floats into a string." >&4
6203 break;
6204 else
6205 echo "...But $xxx_convert didn't work as I expected."
6206 fi
2304df62 6207 else
5ff3f7a4 6208 echo "$xxx_convert NOT found." >&4
2304df62 6209 fi
5ff3f7a4 6210 done
8e07c86e 6211
5ff3f7a4
GS
6212 case "$xxx_convert" in
6213 gconvert) d_Gconvert='gconvert((x),(n),(t),(b))' ;;
6214 gcvt) d_Gconvert='gcvt((x),(n),(b))' ;;
6215 *) d_Gconvert='sprintf((b),"%.*g",(n),(x))' ;;
6216 esac
28e8609d 6217fi
2304df62 6218
a0d0e21e
LW
6219: Initialize h_fcntl
6220h_fcntl=false
6221
6222: Initialize h_sysfile
6223h_sysfile=false
2304df62 6224
2304df62
AD
6225: access call always available on UNIX
6226set access d_access
6227eval $inlibc
6228
6229: locate the flags for 'access()'
6230case "$d_access" in
6231"$define")
6232 echo " "
6233 $cat >access.c <<'EOCP'
6234#include <sys/types.h>
6235#ifdef I_FCNTL
6236#include <fcntl.h>
6237#endif
6238#ifdef I_SYS_FILE
6239#include <sys/file.h>
6240#endif
6241#ifdef I_UNISTD
6242#include <unistd.h>
6243#endif
6244main() {
6245 exit(R_OK);
6246}
8e07c86e
AD
6247EOCP
6248 : check sys/file.h first, no particular reason here
6249 if $test `./findhdr sys/file.h` && \
dfe9444c 6250 $cc $cppflags -DI_SYS_FILE -o access access.c >/dev/null 2>&1 ; then
8e07c86e
AD
6251 h_sysfile=true;
6252 echo "<sys/file.h> defines the *_OK access constants." >&4
6253 elif $test `./findhdr fcntl.h` && \
dfe9444c 6254 $cc $cppflags -DI_FCNTL -o access access.c >/dev/null 2>&1 ; then
8e07c86e
AD
6255 h_fcntl=true;
6256 echo "<fcntl.h> defines the *_OK access constants." >&4
6257 elif $test `./findhdr unistd.h` && \
dfe9444c 6258 $cc $cppflags -DI_UNISTD -o access access.c >/dev/null 2>&1 ; then
8e07c86e
AD
6259 echo "<unistd.h> defines the *_OK access constants." >&4
6260 else
6261 echo "I can't find the four *_OK access constants--I'll use mine." >&4
6262 fi
6263 ;;
6264esac
6265$rm -f access*
a0d0e21e 6266
5ff3f7a4
GS
6267: see if accessx exists
6268set accessx d_accessx
6269eval $inlibc
6270
8e07c86e
AD
6271: see if alarm exists
6272set alarm d_alarm
6273eval $inlibc
2304df62 6274
ecfc5424 6275: Look for GNU-cc style attribute checking
2304df62 6276echo " "
a0d0e21e
LW
6277echo "Checking whether your compiler can handle __attribute__ ..." >&4
6278$cat >attrib.c <<'EOCP'
1aef975c 6279#include <stdio.h>
ecfc5424 6280void croak (char* pat,...) __attribute__((format(printf,1,2),noreturn));
a0d0e21e
LW
6281EOCP
6282if $cc $ccflags -c attrib.c >attrib.out 2>&1 ; then
6283 if $contains 'warning' attrib.out >/dev/null 2>&1; then
ecfc5424 6284 echo "Your C compiler doesn't fully support __attribute__."
a0d0e21e
LW
6285 val="$undef"
6286 else
ecfc5424 6287 echo "Your C compiler supports __attribute__."
a0d0e21e
LW
6288 val="$define"
6289 fi
6290else
ecfc5424 6291 echo "Your C compiler doesn't seem to understand __attribute__ at all."
a0d0e21e
LW
6292 val="$undef"
6293fi
ecfc5424 6294set d_attribut
a0d0e21e
LW
6295eval $setvar
6296$rm -f attrib*
6297
6298: see if bcmp exists
6299set bcmp d_bcmp
6300eval $inlibc
6301
6302: see if bcopy exists
6303set bcopy d_bcopy
6304eval $inlibc
6305
2afac517 6306: see if this is a unistd.h system
6307set unistd.h i_unistd
6308eval $inhdr
6309
6310: see if getpgrp exists
6311set getpgrp d_getpgrp
6312eval $inlibc
6313
2afac517 6314case "$d_getpgrp" in
6315"$define")
6316 echo " "
dfe9444c 6317 echo "Checking to see which flavor of getpgrp is in use..."
2afac517 6318 $cat >set.c <<EOP
6319#$i_unistd I_UNISTD
6320#include <sys/types.h>
6321#ifdef I_UNISTD
6322# include <unistd.h>
6323#endif
6324main()
6325{
6326 if (getuid() == 0) {
6327 printf("(I see you are running Configure as super-user...)\n");
6328 setuid(1);
6329 }
6330#ifdef TRY_BSD_PGRP
6331 if (getpgrp(1) == 0)
6332 exit(0);
6333#else
6334 if (getpgrp() > 0)
6335 exit(0);
6336#endif
6337 exit(1);
6338}
6339EOP
6340 if $cc -DTRY_BSD_PGRP $ccflags $ldflags -o set set.c $libs >/dev/null 2>&1 && ./set; then
6341 echo "You have to use getpgrp(pid) instead of getpgrp()." >&4
6342 val="$define"
6343 elif $cc $ccflags $ldflags -o set set.c $libs >/dev/null 2>&1 && ./set; then
6344 echo "You have to use getpgrp() instead of getpgrp(pid)." >&4
6345 val="$undef"
6346 else
6347 echo "I can't seem to compile and run the test program."
6348 if ./usg; then
6349 xxx="a USG one, i.e. you use getpgrp()."
6350 else
6351 # SVR4 systems can appear rather BSD-ish.
6352 case "$i_unistd" in
6353 $undef)
6354 xxx="a BSD one, i.e. you use getpgrp(pid)."
6355 val="$define"
6356 ;;
6357 $define)
6358 xxx="probably a USG one, i.e. you use getpgrp()."
6359 val="$undef"
6360 ;;
6361 esac
6362 fi
6363 echo "Assuming your getpgrp is $xxx" >&4
6364 fi
6365 ;;
6366*) val="$undef";;
6367esac
6368set d_bsdgetpgrp
6369eval $setvar
6370$rm -f set set.c
6371
a0d0e21e
LW
6372: see if setpgrp exists
6373set setpgrp d_setpgrp
6374eval $inlibc
6375
a0d0e21e
LW
6376case "$d_setpgrp" in
6377"$define")
6378 echo " "
dfe9444c 6379 echo "Checking to see which flavor of setpgrp is in use..."
a0d0e21e 6380 $cat >set.c <<EOP
2afac517 6381#$i_unistd I_UNISTD
6382#include <sys/types.h>
6383#ifdef I_UNISTD
6384# include <unistd.h>
6385#endif
a0d0e21e
LW
6386main()
6387{
6388 if (getuid() == 0) {
6389 printf("(I see you are running Configure as super-user...)\n");
6390 setuid(1);
6391 }
2afac517 6392#ifdef TRY_BSD_PGRP
a0d0e21e 6393 if (-1 == setpgrp(1, 1))
2afac517 6394 exit(0);
6395#else
6396 if (setpgrp() != -1)
6397 exit(0);
6398#endif
6399 exit(1);
a0d0e21e
LW
6400}
6401EOP
2afac517 6402 if $cc -DTRY_BSD_PGRP $ccflags $ldflags -o set set.c $libs >/dev/null 2>&1 && ./set; then
6403 echo 'You have to use setpgrp(pid,pgrp) instead of setpgrp().' >&4
6404 val="$define"
6405 elif $cc $ccflags $ldflags -o set set.c $libs >/dev/null 2>&1 && ./set; then
6406 echo 'You have to use setpgrp() instead of setpgrp(pid,pgrp).' >&4
6407 val="$undef"
a0d0e21e 6408 else
dfe9444c 6409 echo "(I can't seem to compile and run the test program.)"
ecfc5424 6410 if ./usg; then
2afac517 6411 xxx="a USG one, i.e. you use setpgrp()."
a0d0e21e 6412 else
2afac517 6413 # SVR4 systems can appear rather BSD-ish.
6414 case "$i_unistd" in
6415 $undef)
6416 xxx="a BSD one, i.e. you use setpgrp(pid,pgrp)."
6417 val="$define"
6418 ;;
6419 $define)
6420 xxx="probably a USG one, i.e. you use setpgrp()."
6421 val="$undef"
6422 ;;
6423 esac
a0d0e21e 6424 fi
2afac517 6425 echo "Assuming your setpgrp is $xxx" >&4
a0d0e21e
LW
6426 fi
6427 ;;
6428*) val="$undef";;
6429esac
2afac517 6430set d_bsdsetpgrp
a0d0e21e
LW
6431eval $setvar
6432$rm -f set set.c
a0d0e21e
LW
6433: see if bzero exists
6434set bzero d_bzero
6435eval $inlibc
6436
24fef2a7 6437: check for lengths of integral types
a0d0e21e
LW
6438echo " "
6439case "$intsize" in
6440'')
6441 echo "Checking to see how big your integers are..." >&4
24fef2a7 6442 $cat >intsize.c <<'EOCP'
a0d0e21e
LW
6443#include <stdio.h>
6444main()
6445{
24fef2a7
AD
6446 printf("intsize=%d;\n", sizeof(int));
6447 printf("longsize=%d;\n", sizeof(long));
6448 printf("shortsize=%d;\n", sizeof(short));
8e07c86e 6449 exit(0);
a0d0e21e
LW
6450}
6451EOCP
dfe9444c 6452 set intsize
dc45a647 6453 if eval $compile_ok && ./intsize > /dev/null; then
dfe9444c 6454 eval `./intsize`
8e07c86e 6455 echo "Your integers are $intsize bytes long."
24fef2a7
AD
6456 echo "Your long integers are $longsize bytes long."
6457 echo "Your short integers are $shortsize bytes long."
a0d0e21e 6458 else
24fef2a7 6459 $cat >&4 <<EOM
dfe9444c 6460!
24fef2a7
AD
6461Help! I can't compile and run the intsize test program: please enlighten me!
6462(This is probably a misconfiguration in your system or libraries, and
6463you really ought to fix it. Still, I'll try anyway.)
dfe9444c 6464!
24fef2a7
AD
6465EOM
6466 dflt=4
8e07c86e
AD
6467 rp="What is the size of an integer (in bytes)?"
6468 . ./myread
6469 intsize="$ans"
24fef2a7
AD
6470 dflt=$intsize
6471 rp="What is the size of a long integer (in bytes)?"
6472 . ./myread
6473 longsize="$ans"
6474 dflt=2
6475 rp="What is the size of a short integer (in bytes)?"
6476 . ./myread
6477 shortsize="$ans"
a0d0e21e
LW
6478 fi
6479 ;;
a0d0e21e 6480esac
dfe9444c 6481$rm -f intsize intsize.*
a0d0e21e 6482
ecfc5424 6483: see if signal is declared as pointer to function returning int or void
a0d0e21e 6484echo " "
ecfc5424
AD
6485xxx=`./findhdr signal.h`
6486$test "$xxx" && $cppstdin $cppminus $cppflags < $xxx >$$.tmp 2>/dev/null
6487if $contains 'int.*\*[ ]*signal' $$.tmp >/dev/null 2>&1 ; then
6488 echo "You have int (*signal())() instead of void." >&4
6489 val="$undef"
6490elif $contains 'void.*\*[ ]*signal' $$.tmp >/dev/null 2>&1 ; then
dfe9444c 6491 echo "You have void (*signal())()." >&4
ecfc5424
AD
6492 val="$define"
6493elif $contains 'extern[ ]*[(\*]*signal' $$.tmp >/dev/null 2>&1 ; then
6494 echo "You have int (*signal())() instead of void." >&4
6495 val="$undef"
dfe9444c
AD
6496elif $contains 'void.*\*.*sig' $$.tmp >/dev/null 2>&1 ; then
6497 echo "You have void (*signal())()." >&4
6498 val="$define"
a0d0e21e 6499else
ecfc5424
AD
6500 case "$d_voidsig" in
6501 '')
6502 echo "I can't determine whether signal handler returns void or int..." >&4
6503 dflt=void
6504 rp="What type does your signal handler return?"
6505 . ./myread
6506 case "$ans" in
6507 v*) val="$define";;
6508 *) val="$undef";;
6509 esac;;
6510 "$define")
dfe9444c
AD
6511 echo "As you already told me, signal handler returns void." >&4
6512 val="$define"
6513 ;;
6514 *) echo "As you already told me, signal handler returns int." >&4
6515 val="$undef"
6516 ;;
ecfc5424
AD
6517 esac
6518fi
6519set d_voidsig
6520eval $setvar
6521case "$d_voidsig" in
6522"$define") signal_t="void";;
6523*) signal_t="int";;
6524esac
6525$rm -f $$.tmp
6526
6527: check for ability to cast large floats to 32-bit ints.
6528echo " "
6529echo 'Checking whether your C compiler can cast large floats to int32.' >&4
e5c9fcd0 6530if $test "$intsize" -ge 4; then
ecfc5424
AD
6531 xxx=int
6532else
6533 xxx=long
6534fi
6535$cat >try.c <<EOCP
e5c9fcd0 6536#include <stdio.h>
ecfc5424
AD
6537#include <sys/types.h>
6538#include <signal.h>
a1896f58 6539$signal_t blech(s) int s; { exit(3); }
ecfc5424 6540main()
2304df62 6541{
a0d0e21e 6542 $xxx i32;
e5c9fcd0 6543 double f, g;
2304df62 6544 int result = 0;
89434db5 6545 char str[16];
2304df62
AD
6546 signal(SIGFPE, blech);
6547
89434db5
AD
6548 /* Don't let compiler optimize the test away. Store the number
6549 in a writable string for gcc to pass to sscanf under HP/UX.
6550 */
6551 sprintf(str, "2147483647");
6552 sscanf(str, "%lf", &f); /* f = (double) 0x7fffffff; */
e5c9fcd0
AD
6553 g = 10 * f;
6554 i32 = ($xxx) g;
2304df62 6555
e5c9fcd0
AD
6556 /* x86 processors will probably give 0x8000 0000, which is a
6557 sign change. We don't want that. We want to mimic SPARC
6558 behavior here, which is to preserve the sign and give
6559 back 0x7fff ffff.
6560 */
a0d0e21e 6561 if (i32 != ($xxx) f)
2304df62
AD
6562 result |= 1;
6563 exit(result);
6564}
6565EOCP
dfe9444c 6566set try
dc45a647 6567if eval $compile_ok; then
2304df62
AD
6568 ./try
6569 yyy=$?
6570else
a0d0e21e 6571 echo "(I can't seem to compile the test program--assuming it can't)"
2304df62
AD
6572 yyy=1
6573fi
6574case "$yyy" in
65750) val="$define"
6576 echo "Yup, it can."
6577 ;;
6578*) val="$undef"
6579 echo "Nope, it can't."
6580 ;;
6581esac
6582set d_casti32
6583eval $setvar
85e6fe83 6584$rm -f try try.*
a0d0e21e 6585
2304df62
AD
6586: check for ability to cast negative floats to unsigned
6587echo " "
6588echo 'Checking whether your C compiler can cast negative float to unsigned.' >&4
ecfc5424 6589$cat >try.c <<EOCP
e5c9fcd0 6590#include <stdio.h>
ecfc5424 6591#include <sys/types.h>
2304df62 6592#include <signal.h>
a1896f58
AD
6593$signal_t blech(s) int s; { exit(7); }
6594$signal_t blech_in_list(s) int s; { exit(4); }
232e078e
AD
6595unsigned long dummy_long(p) unsigned long p; { return p; }
6596unsigned int dummy_int(p) unsigned int p; { return p; }
6597unsigned short dummy_short(p) unsigned short p; { return p; }
2304df62
AD
6598main()
6599{
e5c9fcd0 6600 double f;
2304df62
AD
6601 unsigned long along;
6602 unsigned int aint;
6603 unsigned short ashort;
6604 int result = 0;
89434db5
AD
6605 char str[16];
6606
e5c9fcd0
AD
6607 /* Frustrate gcc-2.7.2's optimizer which failed this test with
6608 a direct f = -123. assignment. gcc-2.8.0 reportedly
6609 optimized the whole file away
6610 */
89434db5
AD
6611 /* Store the number in a writable string for gcc to pass to
6612 sscanf under HP/UX.
6613 */
6614 sprintf(str, "-123");
6615 sscanf(str, "%lf", &f); /* f = -123.; */
2304df62
AD
6616
6617 signal(SIGFPE, blech);
6618 along = (unsigned long)f;
6619 aint = (unsigned int)f;
6620 ashort = (unsigned short)f;
6621 if (along != (unsigned long)-123)
6622 result |= 1;
6623 if (aint != (unsigned int)-123)
6624 result |= 1;
6625 if (ashort != (unsigned short)-123)
6626 result |= 1;
89434db5
AD
6627 sprintf(str, "1073741824.");
6628 sscanf(str, "%lf", &f); /* f = (double)0x40000000; */
2304df62
AD
6629 f = f + f;
6630 along = 0;
6631 along = (unsigned long)f;
6632 if (along != 0x80000000)
6633 result |= 2;
6634 f -= 1.;
6635 along = 0;
6636 along = (unsigned long)f;
6637 if (along != 0x7fffffff)
6638 result |= 1;
6639 f += 2.;
6640 along = 0;
6641 along = (unsigned long)f;
6642 if (along != 0x80000001)
6643 result |= 2;
232e078e
AD
6644 if (result)
6645 exit(result);
6646 signal(SIGFPE, blech_in_list);
89434db5
AD
6647 sprintf(str, "123.");
6648 sscanf(str, "%lf", &f); /* f = 123.; */
232e078e
AD
6649 along = dummy_long((unsigned long)f);
6650 aint = dummy_int((unsigned int)f);
6651 ashort = dummy_short((unsigned short)f);
6652 if (along != (unsigned long)123)
6653 result |= 4;
6654 if (aint != (unsigned int)123)
6655 result |= 4;
6656 if (ashort != (unsigned short)123)
6657 result |= 4;
2304df62
AD
6658 exit(result);
6659
6660}
6661EOCP
dfe9444c 6662set try
dc45a647 6663if eval $compile_ok; then
2304df62
AD
6664 ./try
6665 castflags=$?
6666else
ecfc5424 6667 echo "(I can't seem to compile the test program--assuming it can't)"
232e078e 6668 castflags=7
2304df62
AD
6669fi
6670case "$castflags" in
66710) val="$define"
6672 echo "Yup, it can."
6673 ;;
6674*) val="$undef"
6675 echo "Nope, it can't."
6676 ;;
6677esac
6678set d_castneg
6679eval $setvar
6680$rm -f try.*
6681
2304df62
AD
6682: see if vprintf exists
6683echo " "
6684if set vprintf val -f d_vprintf; eval $csym; $val; then
6685 echo 'vprintf() found.' >&4
6686 val="$define"
6687 $cat >vprintf.c <<'EOF'
6688#include <varargs.h>
6689
6690main() { xxx("foo"); }
6691
6692xxx(va_alist)
6693va_dcl
6694{
6695 va_list args;
6696 char buf[10];
6697
6698 va_start(args);
6699 exit((unsigned long)vsprintf(buf,"%s",args) > 10L);
6700}
6701EOF
dfe9444c
AD
6702 set vprintf
6703 if eval $compile && ./vprintf; then
2304df62
AD
6704 echo "Your vsprintf() returns (int)." >&4
6705 val2="$undef"
6706 else
6707 echo "Your vsprintf() returns (char*)." >&4
6708 val2="$define"
6709 fi
6710else
6711 echo 'vprintf() NOT found.' >&4
6712 val="$undef"
6713 val2="$undef"
6714fi
6715set d_vprintf
6716eval $setvar
6717val=$val2
6718set d_charvspr
6719eval $setvar
6720
a0d0e21e
LW
6721: see if chown exists
6722set chown d_chown
6723eval $inlibc
6724
6725: see if chroot exists
6726set chroot d_chroot
6727eval $inlibc
6728
2304df62
AD
6729: see if chsize exists
6730set chsize d_chsize
6731eval $inlibc
6732
6733: check for const keyword
6734echo " "
6735echo 'Checking to see if your C compiler knows about "const"...' >&4
6736$cat >const.c <<'EOCP'
6737typedef struct spug { int drokk; } spug;
6738main()
6739{
6740 const char *foo;
6741 const spug y;
6742}
6743EOCP
6744if $cc -c $ccflags const.c >/dev/null 2>&1 ; then
6745 val="$define"
6746 echo "Yup, it does."
6747else
6748 val="$undef"
6749 echo "Nope, it doesn't."
6750fi
6751set d_const
6752eval $setvar
6753
6754: see if crypt exists
6755echo " "
6756if set crypt val -f d_crypt; eval $csym; $val; then
6757 echo 'crypt() found.' >&4
6758 val="$define"
6759 cryptlib=''
6760else
dfe9444c 6761 cryptlib=`./loc Slibcrypt$_a "" $xlibpth`
2304df62 6762 if $test -z "$cryptlib"; then
dfe9444c 6763 cryptlib=`./loc Mlibcrypt$_a "" $xlibpth`
2304df62
AD
6764 else
6765 cryptlib=-lcrypt
6766 fi
6767 if $test -z "$cryptlib"; then
dfe9444c 6768 cryptlib=`./loc Llibcrypt$_a "" $xlibpth`
2304df62
AD
6769 else
6770 cryptlib=-lcrypt
6771 fi
6772 if $test -z "$cryptlib"; then
dfe9444c 6773 cryptlib=`./loc libcrypt$_a "" $libpth`
2304df62
AD
6774 else
6775 cryptlib=-lcrypt
6776 fi
6777 if $test -z "$cryptlib"; then
6778 echo 'crypt() NOT found.' >&4
6779 val="$undef"
6780 else
6781 val="$define"
6782 fi
6783fi
6784set d_crypt
6785eval $setvar
6786
a0d0e21e
LW
6787: see if cuserid exists
6788set cuserid d_cuserid
2304df62
AD
6789eval $inlibc
6790
a0d0e21e
LW
6791: see if this is a limits.h system
6792set limits.h i_limits
85e6fe83
LW
6793eval $inhdr
6794
a0d0e21e
LW
6795: see if this is a float.h system
6796set float.h i_float
6797eval $inhdr
6798
6799: See if number of significant digits in a double precision number is known
6800echo " "
6801$cat >dbl_dig.c <<EOM
6802#$i_limits I_LIMITS
6803#$i_float I_FLOAT
6804#ifdef I_LIMITS
6805#include <limits.h>
85e6fe83 6806#endif
a0d0e21e
LW
6807#ifdef I_FLOAT
6808#include <float.h>
6809#endif
6810#ifdef DBL_DIG
6811printf("Contains DBL_DIG");
85e6fe83 6812#endif
85e6fe83 6813EOM
a0d0e21e
LW
6814$cppstdin $cppflags $cppminus < dbl_dig.c >dbl_dig.E 2>/dev/null
6815if $contains 'DBL_DIG' dbl_dig.E >/dev/null 2>&1; then
6816 echo "DBL_DIG found." >&4
6817 val="$define"
2304df62 6818else
a0d0e21e
LW
6819 echo "DBL_DIG NOT found." >&4
6820 val="$undef"
2304df62 6821fi
a0d0e21e
LW
6822$rm -f dbl_dig.?
6823set d_dbl_dig
2304df62 6824eval $setvar
2304df62 6825
5ff3f7a4
GS
6826
6827if $test X"$use64bits" = X"$define"; then
6828 : see if dbminit64 exists
6829 set dbminit64 d_dbminit64
6830 eval $inlibc
6831
6832 : see if dbmclose64 exists
6833 set dbmclose64 d_dbmclose64
6834 eval $inlibc
6835
6836 : see if fetch64 exists
6837 set fetch64 d_fetch64
6838 eval $inlibc
6839
6840 : see if store64 exists
6841 set store64 d_store64
6842 eval $inlibc
6843
6844 : see if delete64 exists
6845 set delete64 d_delete64
6846 eval $inlibc
6847
6848 : see if firstkey64 exists
6849 set firstkey64 d_firstkey64
6850 eval $inlibc
6851
6852 : see if nextkey64 exists
6853 set nextkey64 d_nextkey64
6854 eval $inlibc
6855else
6856 val="$undef"
6857 for xxx in d_dbminit64 d_dbmclose64 d_fetch64 d_store64 d_delete64 d_firstkey64 d_nextkey64
6858 do
6859 set $xxx
6860 eval $setvar
6861 done
6862fi
6863
a0d0e21e
LW
6864: see if difftime exists
6865set difftime d_difftime
2304df62
AD
6866eval $inlibc
6867
5ff3f7a4
GS
6868: see if sys/stat.h is available
6869set sys/stat.h i_sysstat
6870eval $inhdr
6871
a0d0e21e
LW
6872: see if this is a dirent system
6873echo " "
6874if xinc=`./findhdr dirent.h`; $test "$xinc"; then
6875 val="$define"
6876 echo "<dirent.h> found." >&4
6877else
6878 val="$undef"
6879 if xinc=`./findhdr sys/dir.h`; $test "$xinc"; then
6880 echo "<sys/dir.h> found." >&4
6881 echo " "
6882 else
6883 xinc=`./findhdr sys/ndir.h`
6884 fi
6885 echo "<dirent.h> NOT found." >&4
6886fi
6887set i_dirent
6888eval $setvar
6889
6890: Look for type of directory structure.
6891echo " "
6892$cppstdin $cppflags $cppminus < "$xinc" > try.c
6893
6894case "$direntrytype" in
6895''|' ')
6896 case "$i_dirent" in
6897 $define) guess1='struct dirent' ;;
6898 *) guess1='struct direct' ;;
2afac517 6899 esac
6900 ;;
6901*) guess1="$direntrytype"
6902 ;;
8e07c86e
AD
6903esac
6904
2afac517 6905case "$guess1" in
6906'struct dirent') guess2='struct direct' ;;
6907*) guess2='struct dirent' ;;
6908esac
6909
6910if $contains "$guess1" try.c >/dev/null 2>&1; then
6911 direntrytype="$guess1"
6912 echo "Your directory entries are $direntrytype." >&4
6913elif $contains "$guess2" try.c >/dev/null 2>&1; then
6914 direntrytype="$guess2"
6915 echo "Your directory entries seem to be $direntrytype." >&4
6916else
6917 echo "I don't recognize your system's directory entries." >&4
6918 rp="What type is used for directory entries on this system?"
6919 dflt="$guess1"
6920 . ./myread
6921 direntrytype="$ans"
6922fi
6923$rm -f try.c
a0d0e21e 6924
a0d0e21e 6925
2afac517 6926: see if the directory entry stores field length
6927echo " "
6928$cppstdin $cppflags $cppminus < "$xinc" > try.c
6929if $contains 'd_namlen' try.c >/dev/null 2>&1; then
6930 echo "Good, your directory entry keeps length information in d_namlen." >&4
6931 val="$define"
6932else
6933 echo "Your directory entry does not know about the d_namlen field." >&4
6934 val="$undef"
6935fi
6936set d_dirnamlen
6937eval $setvar
6938$rm -f try.c
a0d0e21e 6939
5ff3f7a4
GS
6940hasfield='varname=$1; struct=$2; field=$3; shift; shift; shift;
6941while $test $# -ge 2; do
6942 case "$1" in
6943 $define) echo "#include <$2>";;
6944 esac ;
6945 shift 2;
6946done > try.c;
6947echo "int main () { struct $struct foo; foo.$field = 0; }" >> try.c;
85ab1d1d 6948if eval $cc $optimize $ccflags -c try.c >/dev/null 2>&1; then
5ff3f7a4
GS
6949 val="$define";
6950else
5ff3f7a4
GS
6951 val="$undef";
6952fi;
6953set $varname;
6954eval $setvar;
85ab1d1d 6955$rm -f try.c try.o'
a0d0e21e 6956
a0d0e21e 6957
5ff3f7a4
GS
6958if $test X"$use64bits" = X"$define"; then
6959 : see if fstat64 exists
6960 set fstat64 d_fstat64
6961 eval $inlibc
a0d0e21e 6962
5ff3f7a4
GS
6963 : see if ftruncate64 exists
6964 set ftruncate64 d_ftruncate64
6965 eval $inlibc
a0d0e21e 6966
5ff3f7a4
GS
6967 : see if lockf64 exists
6968 set lockf64 d_lockf64
6969 eval $inlibc
a0d0e21e 6970
5ff3f7a4
GS
6971 : see if lseek64 exists
6972 set lseek64 d_lseek64
6973 eval $inlibc
6974
6975 : see if lstat64 exists
6976 set lstat64 d_lstat64
6977 eval $inlibc
6978
6979 : see if open64 exists
6980 set open64 d_open64
6981 eval $inlibc
6982
6983 : see if opendir64 exists
6984 set opendir64 d_opendir64
6985 eval $inlibc
6986
6987 : see if readdir64 exists
6988 set readdir64 d_readdir64
6989 eval $inlibc
6990
6991 : see if seekdir64 exists
6992 set seekdir64 d_seekdir64
6993 eval $inlibc
6994
6995 : see if stat64 exists
6996 set stat64 d_stat64
6997 eval $inlibc
6998
6999 : see if telldir64 exists
7000 set telldir64 d_telldir64
7001 eval $inlibc
7002
7003 : see if truncate64 exists
7004 set truncate64 d_truncate64
7005 eval $inlibc
7006
7007 : check for off64_t
7008 echo " "
7009 echo $n "Checking to see if your system supports off64_t...$c" >&4
7010 $cat >try.c <<EOCP
7011#include <sys/types.h>
7012off64_t foo() { off64_t x; x = 7; return x; }'
7013EOCP
7014 if $cc $optimize $ccflags -c try.c >/dev/null 2>&1; then
7015 val="$define"
7016 echo " Yup, it does." >&4
7017 else
7018 val="$undef"
7019 echo " Nope, it doesn't." >&4
7020 fi
7021 $rm -f try.*
7022 set d_off64t
7023 eval $setvar
7024
7025 : check for ino64_t
7026 echo " "
7027 echo $n "Checking to see if your system supports ino64_t...$c" >&4
7028 val="$undef"
7029 case "$i_sysstat" in
7030 "$define" )
7031 $cat >try.c <<EOCP
7032#include <sys/types.h>
7033#include <sys/stat.h>
7034ino64_t foo() { ino64_t x; x = 7; return x; }'
7035EOCP
7036 if $cc $optimize $ccflags -c try.c >/dev/null 2>&1; then
7037 val="$define"
7038 fi
7039 $rm -f try.*
7040 ;;
7041 esac
7042 if $test "X$val" = X"$define"; then
7043 echo " Yup, it does." >&4
7044 else
7045 echo " Nope, it doesn't." >&4
7046 fi
7047 set d_ino64t
7048 eval $setvar
7049
7050 : check for struct flock64
7051 echo " "
85ab1d1d 7052 echo "Checking to see if your system supports struct flock64..." >&4
5ff3f7a4
GS
7053 if $h_fcntl; then
7054 set d_flock64s flock64 l_len define fcntl.h
7055 eval $hasfield
85ab1d1d
JH
7056 else
7057 val="$undef"
7058 set d_flock64s
7059 eval $setvar
5ff3f7a4 7060 fi
85ab1d1d
JH
7061 case "$d_flock64s" in
7062 "$define") echo "Yup, it does." >&4
7063 ;;
7064 *) echo "Nope, it doesn't." >&4
7065 ;;
7066 esac
5ff3f7a4
GS
7067
7068 : check for struct dirent64
7069 echo " "
85ab1d1d 7070 echo "Checking to see if your system supports struct dirent64..." >&4
5ff3f7a4
GS
7071 set d_dirent64s dirent64 d_off $i_dirent dirent.h
7072 eval $hasfield
85ab1d1d
JH
7073 case "$d_flock64s" in
7074 "$define") echo "Yup, it does." >&4
7075 ;;
7076 *) echo "Nope, it doesn't." >&4
7077 ;;
7078 esac
7079
5ff3f7a4
GS
7080else
7081 val="$undef"
7082 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_flock64s d_dirent64s
7083 do
7084 set $xxx
7085 eval $setvar
7086 done
7087fi
7088
7089: see if dlerror exists
7090xxx_runnm="$runnm"
7091runnm=false
7092set dlerror d_dlerror
7093eval $inlibc
7094runnm="$xxx_runnm"
7095
7096: see if dlfcn is available
7097set dlfcn.h i_dlfcn
7098eval $inhdr
7099
7100case "$usedl" in
7101$define|y|true)
7102 $cat << EOM
7103
7104On a few systems, the dynamically loaded modules that perl generates and uses
7105will need a different extension than shared libs. The default will probably
7106be appropriate.
7107
7108EOM
7109 case "$dlext" in
7110 '') dflt="$so" ;;
7111 *) dflt="$dlext" ;;
7112 esac
7113 rp='What is the extension of dynamically loaded modules'
7114 . ./myread
7115 dlext="$ans"
7116 ;;
7117*)
7118 dlext="none"
7119 ;;
7120esac
7121
7122: Check if dlsym need a leading underscore
a0d0e21e
LW
7123echo " "
7124val="$undef"
7125
7126case "$dlsrc" in
7127dl_dlopen.xs)
7128 echo "Checking whether your dlsym() needs a leading underscore ..." >&4
7129 $cat >dyna.c <<'EOM'
7130fred () { }
7131EOM
7132
7133$cat >fred.c<<EOM
7134
7135#include <stdio.h>
7136#$i_dlfcn I_DLFCN
7137#ifdef I_DLFCN
7138#include <dlfcn.h> /* the dynamic linker include file for Sunos/Solaris */
7139#else
7140#include <sys/types.h>
7141#include <nlist.h>
7142#include <link.h>
7143#endif
7144
7145extern int fred() ;
7146
7147main()
7148{
7149 void * handle ;
7150 void * symbol ;
7151#ifndef RTLD_LAZY
7152 int mode = 1 ;
7153#else
7154 int mode = RTLD_LAZY ;
7155#endif
7156 handle = dlopen("./dyna.$dlext", mode) ;
7157 if (handle == NULL) {
5f05dabc 7158 printf ("1\n") ;
7159 fflush (stdout) ;
7160 exit(0);
a0d0e21e
LW
7161 }
7162 symbol = dlsym(handle, "fred") ;
7163 if (symbol == NULL) {
5f05dabc 7164 /* try putting a leading underscore */
7165 symbol = dlsym(handle, "_fred") ;
7166 if (symbol == NULL) {
7167 printf ("2\n") ;
7168 fflush (stdout) ;
7169 exit(0);
7170 }
7171 printf ("3\n") ;
a0d0e21e
LW
7172 }
7173 else
5f05dabc 7174 printf ("4\n") ;
36477c24 7175 fflush (stdout) ;
7176 exit(0);
a0d0e21e
LW
7177}
7178EOM
760ac839 7179 : Call the object file tmp-dyna.o in case dlext=o.
a0d0e21e 7180 if $cc $ccflags $cccdlflags -c dyna.c > /dev/null 2>&1 &&
dfe9444c
AD
7181 mv dyna${_o} tmp-dyna${_o} > /dev/null 2>&1 &&
7182 $ld $lddlflags -o dyna.$dlext tmp-dyna${_o} > /dev/null 2>&1 &&
87563a30 7183 $cc $ccflags -o fred $ldflags $cccdlflags $ccdlflags fred.c $libs > /dev/null 2>&1; then
a0d0e21e
LW
7184 xxx=`./fred`
7185 case $xxx in
7186 1) echo "Test program failed using dlopen." >&4
7187 echo "Perhaps you should not use dynamic loading." >&4;;
7188 2) echo "Test program failed using dlsym." >&4
7189 echo "Perhaps you should not use dynamic loading." >&4;;
7190 3) echo "dlsym needs a leading underscore" >&4
7191 val="$define" ;;
7192 4) echo "dlsym doesn't need a leading underscore." >&4;;
7193 esac
7194 else
7195 echo "I can't compile and run the test program." >&4
7196 fi
7197 ;;
7198esac
7199
a78b0d02 7200$rm -f fred fred.? dyna.$dlext dyna.? tmp-dyna.?
a0d0e21e
LW
7201
7202set d_dlsymun
7203eval $setvar
7204
85ab1d1d
JH
7205hasproto='varname=$1; func=$2; shift; shift;
7206while $test $# -ge 2; do
7207 case "$1" in
7208 $define) echo "#include <$2>";;
7209 esac ;
7210 shift 2;
7211done > try.c;
7212$cppstdin $cppflags $cppminus < try.c > tryout.c 2>/dev/null;
7213if $contains "$func.*(" tryout.c >/dev/null 2>&1; then
7214 echo "$func() prototype found.";
7215 val="$define";
7216else
7217 echo "$func() prototype NOT found.";
7218 val="$undef";
7219fi;
7220set $varname;
7221eval $setvar;
7222$rm -f try.c tryout.c'
7223
7224: see if prototype for drand48 is available
7225echo " "
7226set d_drand48proto drand48 $i_stdlib stdlib.h $i_unistd unistd.h
7227eval $hasproto
7228
a0d0e21e
LW
7229: see if dup2 exists
7230set dup2 d_dup2
7231eval $inlibc
7232
5ff3f7a4
GS
7233: see if eaccess exists
7234set eaccess d_eaccess
7235eval $inlibc
7236
7237: see if endgrent exists
7238set endgrent d_endgrent
7239eval $inlibc
7240
e5c9fcd0
AD
7241: see if endhostent exists
7242set endhostent d_endhent
7243eval $inlibc
7244
7245: see if endnetent exists
7246set endnetent d_endnent
7247eval $inlibc
7248
7249: see if endprotoent exists
7250set endprotoent d_endpent
7251eval $inlibc
7252
5ff3f7a4
GS
7253: see if endpwent exists
7254set endpwent d_endpwent
7255eval $inlibc
7256
e5c9fcd0
AD
7257: see if endservent exists
7258set endservent d_endsent
7259eval $inlibc
7260
8e07c86e
AD
7261: Locate the flags for 'open()'
7262echo " "
7263$cat >open3.c <<'EOCP'
7264#include <sys/types.h>
7265#ifdef I_FCNTL
7266#include <fcntl.h>
7267#endif
7268#ifdef I_SYS_FILE
7269#include <sys/file.h>
7270#endif
7271main() {
7272 if(O_RDONLY);
7273#ifdef O_TRUNC
7274 exit(0);
7275#else
7276 exit(1);
7277#endif
7278}
7279EOCP
7280: check sys/file.h first to get FREAD on Sun
7281if $test `./findhdr sys/file.h` && \
dfe9444c 7282 set open3 -DI_SYS_FILE && eval $compile; then
8e07c86e
AD
7283 h_sysfile=true;
7284 echo "<sys/file.h> defines the O_* constants..." >&4
7285 if ./open3; then
7286 echo "and you have the 3 argument form of open()." >&4
7287 val="$define"
7288 else
7289 echo "but not the 3 argument form of open(). Oh, well." >&4
7290 val="$undef"
7291 fi
7292elif $test `./findhdr fcntl.h` && \
dfe9444c 7293 set open3 -DI_FCNTL && eval $compile; then
8e07c86e
AD
7294 h_fcntl=true;
7295 echo "<fcntl.h> defines the O_* constants..." >&4
7296 if ./open3; then
7297 echo "and you have the 3 argument form of open()." >&4
7298 val="$define"
7299 else
7300 echo "but not the 3 argument form of open(). Oh, well." >&4
7301 val="$undef"
7302 fi
7303else
7304 val="$undef"
7305 echo "I can't find the O_* constant definitions! You got problems." >&4
7306fi
7307set d_open3
7308eval $setvar
7309$rm -f open3*
7310
7311: check for non-blocking I/O stuff
7312case "$h_sysfile" in
7313true) echo "#include <sys/file.h>" > head.c;;
7314*)
7315 case "$h_fcntl" in
7316 true) echo "#include <fcntl.h>" > head.c;;
7317 *) echo "#include <sys/fcntl.h>" > head.c;;
7318 esac
7319 ;;
7320esac
7321echo " "
7322echo "Figuring out the flag used by open() for non-blocking I/O..." >&4
7323case "$o_nonblock" in
7324'')
7325 $cat head.c > try.c
7326 $cat >>try.c <<'EOCP'
7327main() {
7328#ifdef O_NONBLOCK
7329 printf("O_NONBLOCK\n");
7330 exit(0);
7331#endif
7332#ifdef O_NDELAY
7333 printf("O_NDELAY\n");
7334 exit(0);
7335#endif
7336#ifdef FNDELAY
7337 printf("FNDELAY\n");
7338 exit(0);
7339#endif
7340 exit(0);
7341}
7342EOCP
dfe9444c 7343 set try
dc45a647 7344 if eval $compile_ok; then
8e07c86e
AD
7345 o_nonblock=`./try`
7346 case "$o_nonblock" in
7347 '') echo "I can't figure it out, assuming O_NONBLOCK will do.";;
7348 *) echo "Seems like we can use $o_nonblock.";;
7349 esac
7350 else
7351 echo "(I can't compile the test program; pray O_NONBLOCK is right!)"
7352 fi
7353 ;;
7354*) echo "Using $hint value $o_nonblock.";;
7355esac
7356$rm -f try try.* .out core
7357
7358echo " "
7359echo "Let's see what value errno gets from read() on a $o_nonblock file..." >&4
7360case "$eagain" in
7361'')
7362 $cat head.c > try.c
7363 $cat >>try.c <<EOCP
7364#include <errno.h>
7365#include <sys/types.h>
7366#include <signal.h>
4633a7c4 7367#define MY_O_NONBLOCK $o_nonblock
dc45a647 7368#ifndef errno /* XXX need better Configure test */
8e07c86e 7369extern int errno;
dc45a647 7370#endif
8e07c86e 7371$signal_t blech(x) int x; { exit(3); }
4633a7c4
LW
7372EOCP
7373 $cat >> try.c <<'EOCP'
8e07c86e
AD
7374main()
7375{
7376 int pd[2];
7377 int pu[2];
7378 char buf[1];
7379 char string[100];
7380
7381 pipe(pd); /* Down: child -> parent */
7382 pipe(pu); /* Up: parent -> child */
7383 if (0 != fork()) {
7384 int ret;
7385 close(pd[1]); /* Parent reads from pd[0] */
7386 close(pu[0]); /* Parent writes (blocking) to pu[1] */
4633a7c4 7387 if (-1 == fcntl(pd[0], F_SETFL, MY_O_NONBLOCK))
8e07c86e
AD
7388 exit(1);
7389 signal(SIGALRM, blech);
7390 alarm(5);
7391 if ((ret = read(pd[0], buf, 1)) > 0) /* Nothing to read! */
7392 exit(2);
7393 sprintf(string, "%d\n", ret);
7394 write(2, string, strlen(string));
7395 alarm(0);
7396#ifdef EAGAIN
7397 if (errno == EAGAIN) {
7398 printf("EAGAIN\n");
7399 goto ok;
7400 }
7401#endif
7402#ifdef EWOULDBLOCK
7403 if (errno == EWOULDBLOCK)
7404 printf("EWOULDBLOCK\n");
7405#endif
7406 ok:
7407 write(pu[1], buf, 1); /* Unblocks child, tell it to close our pipe */
7408 sleep(2); /* Give it time to close our pipe */
7409 alarm(5);
7410 ret = read(pd[0], buf, 1); /* Should read EOF */
7411 alarm(0);
7412 sprintf(string, "%d\n", ret);
7413 write(3, string, strlen(string));
7414 exit(0);
7415 }
7416
7417 close(pd[0]); /* We write to pd[1] */
7418 close(pu[1]); /* We read from pu[0] */
7419 read(pu[0], buf, 1); /* Wait for parent to signal us we may continue */
7420 close(pd[1]); /* Pipe pd is now fully closed! */
7421 exit(0); /* Bye bye, thank you for playing! */
7422}
7423EOCP
dfe9444c 7424 set try
dc45a647 7425 if eval $compile_ok; then
774d564b 7426 echo "$startsh" >mtry
40a7a20a 7427 echo "./try >try.out 2>try.ret 3>try.err || exit 4" >>mtry
8e07c86e
AD
7428 chmod +x mtry
7429 ./mtry >/dev/null 2>&1
7430 case $? in
7431 0) eagain=`$cat try.out`;;
7432 1) echo "Could not perform non-blocking setting!";;
7433 2) echo "I did a successful read() for something that was not there!";;
7434 3) echo "Hmm... non-blocking I/O does not seem to be working!";;
7435 *) echo "Something terribly wrong happened during testing.";;
7436 esac
7437 rd_nodata=`$cat try.ret`
7438 echo "A read() system call with no data present returns $rd_nodata."
7439 case "$rd_nodata" in
7440 0|-1) ;;
7441 *)
7442 echo "(That's peculiar, fixing that to be -1.)"
7443 rd_nodata=-1
7444 ;;
7445 esac
7446 case "$eagain" in
7447 '')
7448 echo "Forcing errno EAGAIN on read() with no data available."
7449 eagain=EAGAIN
7450 ;;
7451 *)
7452 echo "Your read() sets errno to $eagain when no data is available."
7453 ;;
7454 esac
7455 status=`$cat try.err`
7456 case "$status" in
7457 0) echo "And it correctly returns 0 to signal EOF.";;
7458 -1) echo "But it also returns -1 to signal EOF, so be careful!";;
7459 *) echo "However, your read() returns '$status' on EOF??";;
7460 esac
7461 val="$define"
28757baa 7462 if test "$status" = "$rd_nodata"; then
8e07c86e
AD
7463 echo "WARNING: you can't distinguish between EOF and no data!"
7464 val="$undef"
7465 fi
7466 else
7467 echo "I can't compile the test program--assuming errno EAGAIN will do."
7468 eagain=EAGAIN
7469 fi
7470 set d_eofnblk
7471 eval $setvar
7472 ;;
7473*)
7474 echo "Using $hint value $eagain."
7475 echo "Your read() returns $rd_nodata when no data is present."
7476 case "$d_eofnblk" in
7477 "$define") echo "And you can see EOF because read() returns 0.";;
7478 "$undef") echo "But you can't see EOF status from read() returned value.";;
7479 *)
7480 echo "(Assuming you can't see EOF status from read anyway.)"
7481 d_eofnblk=$undef
7482 ;;
7483 esac
7484 ;;
7485esac
7486$rm -f try try.* .out core head.c mtry
7487
a0d0e21e
LW
7488: see if fchmod exists
7489set fchmod d_fchmod
7490eval $inlibc
7491
7492: see if fchown exists
7493set fchown d_fchown
7494eval $inlibc
7495
7496: see if this is an fcntl system
7497set fcntl d_fcntl
7498eval $inlibc
7499
7500: see if fgetpos exists
7501set fgetpos d_fgetpos
7502eval $inlibc
7503
5ff3f7a4
GS
7504
7505if $test X"$use64bits" = X"$define"; then
7506 : see if fgetpos64 exists
7507 set fgetpos64 d_fgetpos64
7508 eval $inlibc
7509
7510 : see if fopen64 exists
7511 set freopen64 d_fopen64
7512 eval $inlibc
7513
7514 : see if freopen64 exists
7515 set freopen64 d_freopen64
7516 eval $inlibc
7517
7518 : see if fseek64 exists
7519 set fseek64 d_fseek64
7520 eval $inlibc
7521
7522 : see if fseeko64 exists
7523 set fseeko64 d_fseeko64
7524 eval $inlibc
7525
7526 : see if fsetpos64 exists
7527 set fsetpos64 d_fsetpos64
7528 eval $inlibc
7529
7530 : see if ftell64 exists
7531 set ftell64 d_ftell64
7532 eval $inlibc
7533
7534 : see if ftello64 exists
7535 set ftello64 d_ftello64
7536 eval $inlibc
7537
7538 : see if tmpfile64 exists
7539 set tmpfile64 d_tmpfile64
7540 eval $inlibc
7541else
7542 val="$undef"
7543 for xxx in d_fgetpos64 d_fopen64 d_freopen64 d_fseek64 d_fseeko64 d_fsetpos64 d_ftell64 d_ftello64 d_tmpfile64
7544 do
7545 set $xxx
7546 eval $setvar
7547 done
7548fi
7549
a0d0e21e
LW
7550: see if flock exists
7551set flock d_flock
7552eval $inlibc
7553
a0d0e21e
LW
7554: see if fork exists
7555set fork d_fork
7556eval $inlibc
7557
7558: see if pathconf exists
7559set pathconf d_pathconf
7560eval $inlibc
7561
7562: see if fpathconf exists
7563set fpathconf d_fpathconf
7564eval $inlibc
7565
5ff3f7a4
GS
7566: see if fseeko exists
7567set fseeko d_fseeko
7568eval $inlibc
7569
a0d0e21e
LW
7570: see if fsetpos exists
7571set fsetpos d_fsetpos
7572eval $inlibc
7573
5ff3f7a4
GS
7574: see if ftello exists
7575set ftello d_ftello
7576eval $inlibc
7577
7578: see if getgrent exists
7579set getgrent d_getgrent
7580eval $inlibc
7581
693762b4
AD
7582: see if gethostbyaddr exists
7583set gethostbyaddr d_gethbyaddr
7584eval $inlibc
7585
7586: see if gethostbyname exists
7587set gethostbyname d_gethbyname
7588eval $inlibc
7589
a0d0e21e
LW
7590: see if gethostent exists
7591set gethostent d_gethent
7592eval $inlibc
7593
dc45a647
MB
7594: see if this is a netdb.h system
7595set netdb.h i_netdb
7596eval $inhdr
7597
7598: see if prototypes for various gethostxxx netdb.h functions are available
7599echo " "
7600set d_gethostprotos gethostent $i_netdb netdb.h
7601eval $hasproto
7602
a0d0e21e
LW
7603: see if getlogin exists
7604set getlogin d_getlogin
7605eval $inlibc
7606
693762b4
AD
7607: see if getnetbyaddr exists
7608set getnetbyaddr d_getnbyaddr
7609eval $inlibc
7610
7611: see if getnetbyname exists
7612set getnetbyname d_getnbyname
7613eval $inlibc
7614
e5c9fcd0
AD
7615: see if getnetent exists
7616set getnetent d_getnent
7617eval $inlibc
7618
dc45a647
MB
7619: see if prototypes for various getnetxxx netdb.h functions are available
7620echo " "
7621set d_getnetprotos getnetent $i_netdb netdb.h
7622eval $hasproto
7623
693762b4
AD
7624
7625: see if getprotobyname exists
7626set getprotobyname d_getpbyname
7627eval $inlibc
7628
7629: see if getprotobynumber exists
7630set getprotobynumber d_getpbynumber
7631eval $inlibc
e5c9fcd0
AD
7632
7633: see if getprotoent exists
7634set getprotoent d_getpent
7635eval $inlibc
7636
2afac517 7637: see if getpgid exists
7638set getpgid d_getpgid
a0d0e21e
LW
7639eval $inlibc
7640
7641: see if getpgrp2 exists
7642set getpgrp2 d_getpgrp2
7643eval $inlibc
7644
7645: see if getppid exists
7646set getppid d_getppid
7647eval $inlibc
7648
7649: see if getpriority exists
7650set getpriority d_getprior
7651eval $inlibc
7652
dc45a647
MB
7653: see if prototypes for various getprotoxxx netdb.h functions are available
7654echo " "
7655set d_getprotoprotos getprotoent $i_netdb netdb.h
7656eval $hasproto
7657
5ff3f7a4
GS
7658: see if getpwent exists
7659set getpwent d_getpwent
7660eval $inlibc
7661
7662
693762b4
AD
7663: see if getservbyname exists
7664set getservbyname d_getsbyname
7665eval $inlibc
7666
7667: see if getservbyport exists
7668set getservbyport d_getsbyport
7669eval $inlibc
e5c9fcd0
AD
7670
7671: see if getservent exists
7672set getservent d_getsent
7673eval $inlibc
7674
dc45a647
MB
7675: see if prototypes for various getservxxx netdb.h functions are available
7676echo " "
7677set d_getservprotos getservent $i_netdb netdb.h
7678eval $hasproto
7679
5f05dabc 7680: see if gettimeofday or ftime exists
7681set gettimeofday d_gettimeod
7682eval $inlibc
7683case "$d_gettimeod" in
7684"$undef")
7685 set ftime d_ftime
7686 eval $inlibc
7687 ;;
7688*)
7689 val="$undef"; set d_ftime; eval $setvar
7690 ;;
7691esac
7692case "$d_gettimeod$d_ftime" in
7693"$undef$undef")
7694 echo " "
7695 echo 'No ftime() nor gettimeofday() -- timing may be less accurate.' >&4
7696 ;;
7697esac
7698
5ff3f7a4
GS
7699: see if this is an grp system
7700set grp.h i_grp
7701eval $inhdr
7702
7703case "$i_grp" in
7704$define)
7705 xxx=`./findhdr grp.h`
7706 $cppstdin $cppflags $cppminus < $xxx >$$.h
7707
7708 if $contains 'gr_passwd' $$.h >/dev/null 2>&1; then
7709 val="$define"
7710 else
7711 val="$undef"
7712 fi
7713 set d_grpasswd
7714 eval $setvar
7715
7716 $rm -f $$.h
7717 ;;
7718*)
7719 val="$undef";
7720 set d_grpasswd; eval $setvar
7721 ;;
7722esac
7723
a0d0e21e
LW
7724: see if this is a netinet/in.h or sys/in.h system
7725set netinet/in.h i_niin sys/in.h i_sysin
7726eval $inhdr
7727
5ff3f7a4 7728: see if arpa/inet.h has to be included
93341792 7729set arpa/inet.h i_arpainet
28e8609d
JH
7730eval $inhdr
7731
a0d0e21e
LW
7732: see if htonl --and friends-- exists
7733val=''
7734set htonl val
7735eval $inlibc
7736
7737: Maybe they are macros.
7738case "$val" in
7739$undef)
7740 $cat >htonl.c <<EOM
7741#include <stdio.h>
7742#include <sys/types.h>
7743#$i_niin I_NETINET_IN
7744#$i_sysin I_SYS_IN
93341792 7745#$i_arpainet I_ARPA_INET
a0d0e21e
LW
7746#ifdef I_NETINET_IN
7747#include <netinet/in.h>
7748#endif
7749#ifdef I_SYS_IN
7750#include <sys/in.h>
7751#endif
28e8609d
JH
7752#ifdef I_ARPA_INET
7753#include <arpa/inet.h>
7754#endif
a0d0e21e
LW
7755#ifdef htonl
7756printf("Defined as a macro.");
7757#endif
7758EOM
7759 $cppstdin $cppflags $cppminus < htonl.c >htonl.E 2>/dev/null
7760 if $contains 'Defined as a macro' htonl.E >/dev/null 2>&1; then
7761 val="$define"
7762 echo "But it seems to be defined as a macro." >&4
7763 fi
7764 $rm -f htonl.?
7765 ;;
7766esac
7767set d_htonl
7768eval $setvar
7769
7770: see which of string.h or strings.h is needed
7771echo " "
7772strings=`./findhdr string.h`
7773if $test "$strings" && $test -r "$strings"; then
7774 echo "Using <string.h> instead of <strings.h>." >&4
7775 val="$define"
7776else
7777 val="$undef"
7778 strings=`./findhdr strings.h`
7779 if $test "$strings" && $test -r "$strings"; then
7780 echo "Using <strings.h> instead of <string.h>." >&4
7781 else
7782 echo "No string header found -- You'll surely have problems." >&4
7783 fi
7784fi
7785set i_string
7786eval $setvar
7787case "$i_string" in
7788"$undef") strings=`./findhdr strings.h`;;
7789*) strings=`./findhdr string.h`;;
7790esac
7791
7792: index or strchr
7793echo " "
7794if set index val -f; eval $csym; $val; then
7795 if set strchr val -f d_strchr; eval $csym; $val; then
7796 if $contains strchr "$strings" >/dev/null 2>&1 ; then
7797 val="$define"
7798 vali="$undef"
7799 echo "strchr() found." >&4
7800 else
7801 val="$undef"
7802 vali="$define"
7803 echo "index() found." >&4
7804 fi
7805 else
7806 val="$undef"
7807 vali="$define"
7808 echo "index() found." >&4
7809 fi
7810else
7811 if set strchr val -f d_strchr; eval $csym; $val; then
7812 val="$define"
7813 vali="$undef"
7814 echo "strchr() found." >&4
7815 else
7816 echo "No index() or strchr() found!" >&4
7817 val="$undef"
7818 vali="$undef"
7819 fi
7820fi
7821set d_strchr; eval $setvar
7822val="$vali"
7823set d_index; eval $setvar
7824
7e1af8bc 7825: check whether inet_aton exists
7826set inet_aton d_inetaton
7827eval $inlibc
7828
5ff3f7a4
GS
7829: see if inttypes.h is available
7830set inttypes.h i_inttypes
7831eval $inhdr
7832: check for int64_t
85ab1d1d
JH
7833case "$use64bits" in
7834"$define" )
7835 echo " "
7836 echo $n "Checking to see if your system supports int64_t...$c" >&4
7837 $cat >try.c <<EOCP
5ff3f7a4
GS
7838#include <sys/types.h>
7839#$i_inttypes I_INTTYPES
7840#ifdef I_INTTYPES
7841#include <inttypes.h>
7842#endif
94be4d36 7843int64_t foo() { int64_t x; x = 7; return x; }
5ff3f7a4 7844EOCP
85ab1d1d
JH
7845 if $cc $optimize $ccflags -c try.c >/dev/null 2>&1; then
7846 val="$define"
7847 echo " Yup, it does." >&4
7848 else
7849 val="$undef"
7850 echo " Nope, it doesn't." >&4
7851 fi
7852 $rm -f try.*
7853 ;;
7854*) val="$undef"
7855 ;;
7856esac
5ff3f7a4
GS
7857set d_int64t
7858eval $setvar
7859
7860
a0d0e21e
LW
7861: Look for isascii
7862echo " "
7863$cat >isascii.c <<'EOCP'
7864#include <stdio.h>
7865#include <ctype.h>
7866main() {
7867 int c = 'A';
7868 if (isascii(c))
7869 exit(0);
7870 else
7871 exit(1);
7872}
7873EOCP
dfe9444c
AD
7874set isascii
7875if eval $compile; then
a0d0e21e
LW
7876 echo "isascii() found." >&4
7877 val="$define"
7878else
7879 echo "isascii() NOT found." >&4
7880 val="$undef"
7881fi
7882set d_isascii
7883eval $setvar
7884$rm -f isascii*
7885
7886: see if killpg exists
7887set killpg d_killpg
7888eval $inlibc
7889
dd64f1c3
AD
7890: see if lchown exists
7891echo " "
7892$cat > try.c <<'EOCP'
7893/* System header to define __stub macros and hopefully few prototypes,
7894 which can conflict with char lchown(); below. */
7895#include <assert.h>
7896/* Override any gcc2 internal prototype to avoid an error. */
7897/* We use char because int might match the return type of a gcc2
7898 builtin and then its argument prototype would still apply. */
7899char lchown();
7900int main() {
7901 /* The GNU C library defines this for functions which it implements
7902 to always fail with ENOSYS. Some functions are actually named
7903 something starting with __ and the normal name is an alias. */
7904#if defined (__stub_lchown) || defined (__stub___lchown)
7905choke me
7906#else
7907lchown();
7908#endif
7909; return 0; }
7910EOCP
7911set try
7912if eval $compile; then
7913 $echo "lchown() found." >&4
7914 val="$define"
7915else
7916 $echo "lchown() NOT found." >&4
7917 val="$undef"
7918fi
7919set d_lchown
7920eval $setvar
7921
a0d0e21e
LW
7922: see if link exists
7923set link d_link
7924eval $inlibc
7925
a0d0e21e
LW
7926: see if localeconv exists
7927set localeconv d_locconv
7928eval $inlibc
7929
7930: see if lockf exists
7931set lockf d_lockf
7932eval $inlibc
7933
85ab1d1d
JH
7934: check for length of double
7935echo " "
7936case "$doublesize" in
7937'')
7938 $echo $n "Checking to see how big your double precision numbers are...$c" >&4
7939 $cat >try.c <<'EOCP'
7940#include <stdio.h>
7941main()
7942{
7943 printf("%d\n", sizeof(double));
7944}
7945EOCP
7946 set try
7947 if eval $compile_ok; then
7948 doublesize=`./try`
7949 $echo " $doublesize bytes." >&4
7950 else
7951 dflt='8'
7952 echo "(I can't seem to compile the test program. Guessing...)"
7953 rp="What is the size of a double precision number (in bytes)?"
7954 . ./myread
7955 doublesize="$ans"
7956 fi
7957 ;;
7958esac
7959$rm -f try.c try
7960
e5c9fcd0
AD
7961: check for long doubles
7962echo " "
7963echo $n "Checking to see if your system supports long doubles...$c" >&4
7964echo 'long double foo() { long double x; x = 7.0; return x; }' > try.c
dc45a647 7965if $cc $optimize $ccflags -c try.c >/dev/null 2>&1; then
e5c9fcd0
AD
7966 val="$define"
7967 echo " Yup, it does." >&4
7968else
7969 val="$undef"
7970 echo " Nope, it doesn't." >&4
7971fi
7972$rm try.*
7973set d_longdbl
7974eval $setvar
7975
7976: check for length of long double
e5c9fcd0
AD
7977case "${d_longdbl}${longdblsize}" in
7978$define)
dc45a647 7979 echo " "
e5c9fcd0
AD
7980 $echo $n "Checking to see how big your long doubles are...$c" >&4
7981 $cat >try.c <<'EOCP'
7982#include <stdio.h>
7983main()
7984{
7985 printf("%d\n", sizeof(long double));
7986}
7987EOCP
7988 set try
c4f23d77 7989 if eval $compile; then
e5c9fcd0 7990 longdblsize=`./try`
dc45a647 7991 $echo " $longdblsize bytes." >&4
e5c9fcd0
AD
7992 else
7993 dflt='8'
dc45a647 7994 echo " "
c4f23d77 7995 echo "(I can't seem to compile the test program. Guessing...)" >&4
e5c9fcd0
AD
7996 rp="What is the size of a long double (in bytes)?"
7997 . ./myread
7998 longdblsize="$ans"
7999 fi
85ab1d1d
JH
8000 if $test "X$doublesize" = "X$longdblsize"; then
8001 echo "(That isn't any different from an ordinary double.)"
8002 fi
dc45a647
MB
8003 ;;
8004esac
8005$rm -f try.c try
8006
8007: check for long long
8008echo " "
8009echo $n "Checking to see if your system supports long long...$c" >&4
8010echo 'long long foo() { long long x; x = 7; return x; }' > try.c
8011if $cc $optimize $ccflags -c try.c >/dev/null 2>&1; then
8012 val="$define"
8013 echo " Yup, it does." >&4
8014else
8015 val="$undef"
8016 echo " Nope, it doesn't." >&4
8017fi
8018$rm try.*
8019set d_longlong
8020eval $setvar
8021
8022: check for length of long long
8023case "${d_longlong}${longlongsize}" in
8024$define)
8025 echo " "
8026 $echo $n "Checking to see how big your long longs are...$c" >&4
8027 $cat >try.c <<'EOCP'
8028#include <stdio.h>
8029main()
8030{
8031 printf("%d\n", sizeof(long long));
8032}
8033EOCP
8034 set try
8035 if eval $compile_ok; then
8036 longlongsize=`./try`
8037 $echo " $longlongsize bytes." >&4
8038 else
8039 dflt='8'
8040 echo " "
8041 echo "(I can't seem to compile the test program. Guessing...)"
8042 rp="What is the size of a long long (in bytes)?"
8043 . ./myread
8044 longlongsize="$ans"
8045 fi
85ab1d1d
JH
8046 if $test "X$longsize" = "X$longlongsize"; then
8047 echo "(That isn't any different from an ordinary long.)"
8048 fi
e5c9fcd0
AD
8049 ;;
8050esac
8051$rm -f try.c try
8052
a0d0e21e
LW
8053: see if lstat exists
8054set lstat d_lstat
8055eval $inlibc
8056
8057: see if mblen exists
8058set mblen d_mblen
8059eval $inlibc
8060
8061: see if mbstowcs exists
8062set mbstowcs d_mbstowcs
8063eval $inlibc
8064
8065: see if mbtowc exists
8066set mbtowc d_mbtowc
8067eval $inlibc
8068
8069: see if memcmp exists
8070set memcmp d_memcmp
8071eval $inlibc
8072
8073: see if memcpy exists
8074set memcpy d_memcpy
8075eval $inlibc
8076
8077: see if memmove exists
8078set memmove d_memmove
2304df62
AD
8079eval $inlibc
8080
8081: see if memset exists
8082set memset d_memset
8083eval $inlibc
8084
8085: see if mkdir exists
8086set mkdir d_mkdir
8087eval $inlibc
8088
a0d0e21e
LW
8089: see if mkfifo exists
8090set mkfifo d_mkfifo
8091eval $inlibc
8092
8093: see if mktime exists
8094set mktime d_mktime
8095eval $inlibc
8096
2304df62
AD
8097: see if msgctl exists
8098set msgctl d_msgctl
8099eval $inlibc
8100
8101: see if msgget exists
8102set msgget d_msgget
8103eval $inlibc
8104
8105: see if msgsnd exists
8106set msgsnd d_msgsnd
8107eval $inlibc
8108
8109: see if msgrcv exists
8110set msgrcv d_msgrcv
8111eval $inlibc
8112
8113: see how much of the 'msg*(2)' library is present.
8114h_msg=true
8115echo " "
8116case "$d_msgctl$d_msgget$d_msgsnd$d_msgrcv" in
8117*"$undef"*) h_msg=false;;
8118esac
6087ac44
JH
8119case "$osname" in
8120freebsd)
8121 case "`ipcs 2>&1`" in
8122 "SVID messages"*"not configured"*)
5ff3f7a4 8123 echo "Your $osname does not have the msg*(2) configured." >&4
6087ac44
JH
8124 h_msg=false
8125 val="$undef"
8126 set msgctl d_msgctl
8127 eval $setvar
8128 set msgget d_msgget
8129 eval $setvar
8130 set msgsnd d_msgsnd
8131 eval $setvar
8132 set msgrcv d_msgrcv
8133 eval $setvar
8134 ;;
8135 esac
8136 ;;
8137esac
2304df62
AD
8138: we could also check for sys/ipc.h ...
8139if $h_msg && $test `./findhdr sys/msg.h`; then
8140 echo "You have the full msg*(2) library." >&4
8141 val="$define"
8142else
8143 echo "You don't have the full msg*(2) library." >&4
8144 val="$undef"
8145fi
8146set d_msg
8147eval $setvar
8148
dfe9444c
AD
8149: see if nice exists
8150set nice d_nice
8151eval $inlibc
8152
8153: see if pause exists
8154set pause d_pause
8155eval $inlibc
8156
8157: see if pipe exists
8158set pipe d_pipe
8159eval $inlibc
8160
8161: see if poll exists
8162set poll d_poll
8163eval $inlibc
8164
31dfa2f6
JH
8165
8166: see whether the various POSIXish _yields exist
8167$cat >try.c <<EOP
8168#include <pthread.h>
8169#include <stdio.h>
8170main() {
8171#ifdef SCHED_YIELD
8172 sched_yield();
8173#else
8174#ifdef PTHREAD_YIELD
8175 pthread_yield();
8176#else
8177#ifdef PTHREAD_YIELD_NULL
8178 pthread_yield(NULL);
8179#endif
8180#endif
8181#endif
8182}
8183EOP
8184: see if sched_yield exists
8185set try -DSCHED_YIELD
8186if eval $compile; then
8187 val="$define"
8188 sched_yield='sched_yield()'
8189else
8190 val="$undef"
8191fi
8192case "$usethreads" in
8193$define)
8194 case "$val" in
8195 $define) echo 'sched_yield() found.' >&4 ;;
8196 *) echo 'sched_yield() NOT found.' >&4 ;;
8197 esac
8198esac
8199set d_sched_yield
8200eval $setvar
8201
8202: see if pthread_yield exists
8203set try -DPTHREAD_YIELD
8204if eval $compile; then
8205 val="$define"
8206 case "$sched_yield" in
8207 '') sched_yield='pthread_yield()' ;;
8208 esac
8209else
8210 set try -DPTHREAD_YIELD_NULL
8211 if eval $compile; then
8212 val="$define"
8213 case "$sched_yield" in
8214 '') sched_yield='pthread_yield(NULL)' ;;
8215 esac
8216 else
8217 val="$undef"
8218 fi
8219fi
8220case "$usethreads" in
8221$define)
8222 case "$val" in
8223 $define) echo 'pthread_yield() found.' >&4 ;;
8224 *) echo 'pthread_yield() NOT found.' >&4 ;;
8225 esac
8226 ;;
8227esac
8228set d_pthread_yield
8229eval $setvar
8230
8231case "$sched_yield" in
8232'') sched_yield=undef ;;
8233esac
8234
8235$rm -f try try.*
8236
dfe9444c 8237: test whether pthreads are created in joinable -- aka undetached -- state
e5c9fcd0
AD
8238if test "X$usethreads" = "X$define"; then
8239 echo $n "Checking whether pthreads are created joinable. $c" >&4
dfe9444c
AD
8240 $cat >try.c <<'EOCP'
8241#include <pthread.h>
8242#include <stdio.h>
8243int main() {
8244 pthread_attr_t attr;
8245 int detachstate;
8246 printf("%s\n",
8247 pthread_attr_init(&attr) == 0 &&
5f80c64f
JH
8248#if PTHREAD_ATTR_GETDETACHSTATE_INT
8249 pthread_attr_getdetachstate(&attr) == 0 &&
8250#else
dfe9444c 8251 pthread_attr_getdetachstate(&attr, &detachstate) == 0 &&
5f80c64f 8252#endif
dfe9444c
AD
8253 detachstate == PTHREAD_CREATE_DETACHED ?
8254 "detached" : "joinable");
8255 exit(0);
8256}
8257EOCP
8258 set try
8259 if eval $compile; then
8260 yyy=`./try`
8261 case "$yyy" in
e5c9fcd0
AD
8262 detached) echo "Nope, they aren't." >&4 ;;
8263 *) echo "Yup, they are." >&4 ;;
dfe9444c
AD
8264 esac
8265 else
5f80c64f
JH
8266 set try -DPTHREAD_ATTR_GETDETACHSTATE_INT
8267 if eval $compile; then
8268 yyy=`./try`
8269 case "$yyy" in
8270 detached) echo "Nope, they aren't." >&4 ;;
8271 *) echo "Yup, they are." >&4 ;;
8272 esac
8273 else
8274 echo " "
8275 echo "(I can't execute the test program--assuming they are.)" >&4
8276 yyy=joinable
8277 fi
94b6baf5 8278 fi
dfe9444c
AD
8279 $rm -f try try.*
8280 case "$yyy" in
8281 detached) val="$undef" ;;
8282 *) val="$define" ;;
8283 esac
8284 set d_pthreads_created_joinable
8285 eval $setvar
8286else
8287 d_pthreads_created_joinable="$undef"
8288fi
8e07c86e 8289
4aa0a1f7
AD
8290: see if this is a pwd.h system
8291set pwd.h i_pwd
8292eval $inhdr
8293
8294case "$i_pwd" in
8295$define)
8296 xxx=`./findhdr pwd.h`
85e6fe83 8297 $cppstdin $cppflags $cppminus < $xxx >$$.h
4aa0a1f7 8298
2304df62 8299 if $contains 'pw_quota' $$.h >/dev/null 2>&1; then
4aa0a1f7 8300 val="$define"
2304df62 8301 else
4aa0a1f7 8302 val="$undef"
2304df62 8303 fi
4aa0a1f7
AD
8304 set d_pwquota
8305 eval $setvar
8306
2304df62 8307 if $contains 'pw_age' $$.h >/dev/null 2>&1; then
4aa0a1f7 8308 val="$define"
2304df62 8309 else
4aa0a1f7 8310 val="$undef"
2304df62 8311 fi
4aa0a1f7
AD
8312 set d_pwage
8313 eval $setvar
8314
2304df62 8315 if $contains 'pw_change' $$.h >/dev/null 2>&1; then
4aa0a1f7 8316 val="$define"
2304df62 8317 else
4aa0a1f7 8318 val="$undef"
2304df62 8319 fi
4aa0a1f7
AD
8320 set d_pwchange
8321 eval $setvar
8322
2304df62 8323 if $contains 'pw_class' $$.h >/dev/null 2>&1; then
4aa0a1f7 8324 val="$define"
2304df62 8325 else
4aa0a1f7 8326 val="$undef"
2304df62 8327 fi
4aa0a1f7
AD
8328 set d_pwclass
8329 eval $setvar
8330
2304df62 8331 if $contains 'pw_expire' $$.h >/dev/null 2>&1; then
4aa0a1f7 8332 val="$define"
2304df62 8333 else
4aa0a1f7 8334 val="$undef"
2304df62 8335 fi
4aa0a1f7
AD
8336 set d_pwexpire
8337 eval $setvar
8338
2304df62 8339 if $contains 'pw_comment' $$.h >/dev/null 2>&1; then
4aa0a1f7 8340 val="$define"
2304df62 8341 else
4aa0a1f7 8342 val="$undef"
2304df62 8343 fi
4aa0a1f7
AD
8344 set d_pwcomment
8345 eval $setvar
8346
c4f23d77
AD
8347 if $contains 'pw_gecos' $$.h >/dev/null 2>&1; then
8348 val="$define"
8349 else
8350 val="$undef"
8351 fi
8352 set d_pwgecos
8353 eval $setvar
8354
28e8609d
JH
8355 if $contains 'pw_passwd' $$.h >/dev/null 2>&1; then
8356 val="$define"
8357 else
8358 val="$undef"
8359 fi
8360 set d_pwpasswd
8361 eval $setvar
8362
2304df62 8363 $rm -f $$.h
4aa0a1f7 8364 ;;
5ff3f7a4 8365*)
4aa0a1f7
AD
8366 val="$undef";
8367 set d_pwquota; eval $setvar
8368 set d_pwage; eval $setvar
8369 set d_pwchange; eval $setvar
8370 set d_pwclass; eval $setvar
8371 set d_pwexpire; eval $setvar
8372 set d_pwcomment; eval $setvar
c4f23d77 8373 set d_pwgecos; eval $setvar
28e8609d 8374 set d_pwpasswd; eval $setvar
4aa0a1f7
AD
8375 ;;
8376esac
2304df62 8377
85e6fe83 8378: see if readdir and friends exist
2304df62
AD
8379set readdir d_readdir
8380eval $inlibc
85e6fe83
LW
8381set seekdir d_seekdir
8382eval $inlibc
8383set telldir d_telldir
8384eval $inlibc
8385set rewinddir d_rewinddir
8386eval $inlibc
2304df62 8387
a0d0e21e
LW
8388: see if readlink exists
8389set readlink d_readlink
8390eval $inlibc
8391
2304df62
AD
8392: see if rename exists
8393set rename d_rename
8394eval $inlibc
8395
8396: see if rmdir exists
8397set rmdir d_rmdir
8398eval $inlibc
8399
8ff267be 8400: see if memory.h is available.
8401val=''
8402set memory.h val
8403eval $inhdr
8404
8405: See if it conflicts with string.h
8406case "$val" in
8407$define)
8408 case "$strings" in
8409 '') ;;
8410 *)
8411 $cppstdin $cppflags $cppminus < $strings > mem.h
8412 if $contains 'memcpy' mem.h >/dev/null 2>&1; then
8413 echo " "
8414 echo "We won't be including <memory.h>."
8415 val="$undef"
8416 fi
8417 $rm -f mem.h
8418 ;;
8419 esac
8420esac
8421set i_memory
8422eval $setvar
8423
2304df62
AD
8424: can bcopy handle overlapping blocks?
8425val="$undef"
8426case "$d_bcopy" in
8427"$define")
8428 echo " "
8429 echo "Checking to see if your bcopy() can do overlapping copies..." >&4
dfe9444c 8430 $cat >try.c <<EOCP
8ff267be 8431#$i_memory I_MEMORY
8432#$i_stdlib I_STDLIB
8433#$i_string I_STRING
8434#$i_unistd I_UNISTD
8435EOCP
dfe9444c 8436 $cat >>try.c <<'EOCP'
8ff267be 8437#include <stdio.h>
8ff267be 8438#ifdef I_MEMORY
8439# include <memory.h>
8440#endif
8441#ifdef I_STDLIB
8442# include <stdlib.h>
8443#endif
8444#ifdef I_STRING
8445# include <string.h>
8446#else
8447# include <strings.h>
8448#endif
8449#ifdef I_UNISTD
8450# include <unistd.h> /* Needed for NetBSD */
8451#endif
2304df62
AD
8452main()
8453{
85e6fe83
LW
8454char buf[128], abc[128];
8455char *b;
8456int len;
8457int off;
8458int align;
a0d0e21e 8459
85e6fe83 8460bcopy("abcdefghijklmnopqrstuvwxyz0123456789", abc, 36);
2304df62
AD
8461
8462for (align = 7; align >= 0; align--) {
8463 for (len = 36; len; len--) {
8464 b = buf+align;
85e6fe83 8465 bcopy(abc, b, len);
2304df62
AD
8466 for (off = 1; off <= len; off++) {
8467 bcopy(b, b+off, len);
8468 bcopy(b+off, b, len);
85e6fe83 8469 if (bcmp(b, abc, len))
2304df62
AD
8470 exit(1);
8471 }
8472 }
8473}
8474exit(0);
8475}
8476EOCP
dfe9444c 8477 set try
dc45a647 8478 if eval $compile_ok; then
dfe9444c 8479 if ./try 2>/dev/null; then
2304df62
AD
8480 echo "Yes, it can."
8481 val="$define"
8482 else
8483 echo "It can't, sorry."
8ff267be 8484 case "$d_memmove" in
8485 "$define") echo "But that's Ok since you have memmove()." ;;
8486 esac
2304df62
AD
8487 fi
8488 else
8489 echo "(I can't compile the test program, so we'll assume not...)"
8ff267be 8490 case "$d_memmove" in
8491 "$define") echo "But that's Ok since you have memmove()." ;;
8492 esac
2304df62
AD
8493 fi
8494 ;;
8495esac
dfe9444c 8496$rm -f try.* try core
2304df62
AD
8497set d_safebcpy
8498eval $setvar
8499
8500: can memcpy handle overlapping blocks?
8501val="$undef"
8502case "$d_memcpy" in
8503"$define")
8504 echo " "
8505 echo "Checking to see if your memcpy() can do overlapping copies..." >&4
dfe9444c 8506 $cat >try.c <<EOCP
8ff267be 8507#$i_memory I_MEMORY
8508#$i_stdlib I_STDLIB
8509#$i_string I_STRING
8510#$i_unistd I_UNISTD
8511EOCP
dfe9444c 8512 $cat >>try.c <<'EOCP'
8ff267be 8513#include <stdio.h>
8ff267be 8514#ifdef I_MEMORY
8515# include <memory.h>
8516#endif
8517#ifdef I_STDLIB
8518# include <stdlib.h>
8519#endif
8520#ifdef I_STRING
8521# include <string.h>
8522#else
8523# include <strings.h>
8524#endif
8525#ifdef I_UNISTD
8526# include <unistd.h> /* Needed for NetBSD */
8527#endif
2304df62
AD
8528main()
8529{
85e6fe83
LW
8530char buf[128], abc[128];
8531char *b;
8532int len;
8533int off;
8534int align;
8535
8ff267be 8536/* Copy "abcde..." string to char abc[] so that gcc doesn't
8537 try to store the string in read-only memory. */
85e6fe83 8538memcpy(abc, "abcdefghijklmnopqrstuvwxyz0123456789", 36);
2304df62
AD
8539
8540for (align = 7; align >= 0; align--) {
8541 for (len = 36; len; len--) {
8542 b = buf+align;
232e078e 8543 memcpy(b, abc, len);
2304df62 8544 for (off = 1; off <= len; off++) {
2304df62 8545 memcpy(b+off, b, len);
232e078e 8546 memcpy(b, b+off, len);
85e6fe83 8547 if (memcmp(b, abc, len))
2304df62
AD
8548 exit(1);
8549 }
8550 }
8551}
8552exit(0);
8553}
8554EOCP
dfe9444c 8555 set try
dc45a647 8556 if eval $compile_ok; then
dfe9444c 8557 if ./try 2>/dev/null; then
2304df62
AD
8558 echo "Yes, it can."
8559 val="$define"
8560 else
8561 echo "It can't, sorry."
8ff267be 8562 case "$d_memmove" in
8563 "$define") echo "But that's Ok since you have memmove()." ;;
8564 esac
2304df62
AD
8565 fi
8566 else
8567 echo "(I can't compile the test program, so we'll assume not...)"
8ff267be 8568 case "$d_memmove" in
8569 "$define") echo "But that's Ok since you have memmove()." ;;
8570 esac
2304df62
AD
8571 fi
8572 ;;
8573esac
dfe9444c 8574$rm -f try.* try core
2304df62
AD
8575set d_safemcpy
8576eval $setvar
8577
36477c24 8578: can memcmp be trusted to compare relative magnitude?
8579val="$undef"
8580case "$d_memcmp" in
8581"$define")
8582 echo " "
dfe9444c
AD
8583 echo "Checking if your memcmp() can compare relative magnitude..." >&4
8584 $cat >try.c <<EOCP
36477c24 8585#$i_memory I_MEMORY
8586#$i_stdlib I_STDLIB
8587#$i_string I_STRING
8588#$i_unistd I_UNISTD
8589EOCP
dfe9444c 8590 $cat >>try.c <<'EOCP'
36477c24 8591#include <stdio.h>
36477c24 8592#ifdef I_MEMORY
8593# include <memory.h>
8594#endif
8595#ifdef I_STDLIB
8596# include <stdlib.h>
8597#endif
8598#ifdef I_STRING
8599# include <string.h>
8600#else
8601# include <strings.h>
8602#endif
8603#ifdef I_UNISTD
8604# include <unistd.h> /* Needed for NetBSD */
8605#endif
8606main()
8607{
8608char a = -1;
8609char b = 0;
8610if ((a < b) && memcmp(&a, &b, 1) < 0)
8611 exit(1);
8612exit(0);
8613}
8614EOCP
dfe9444c 8615 set try
dc45a647 8616 if eval $compile_ok; then
dfe9444c 8617 if ./try 2>/dev/null; then
36477c24 8618 echo "Yes, it can."
8619 val="$define"
8620 else
8621 echo "No, it can't (it uses signed chars)."
8622 fi
8623 else
8624 echo "(I can't compile the test program, so we'll assume not...)"
8625 fi
8626 ;;
8627esac
dfe9444c 8628$rm -f try.* try core
36477c24 8629set d_sanemcmp
8630eval $setvar
8631
2304df62
AD
8632: see if select exists
8633set select d_select
8634eval $inlibc
8635
8636: see if semctl exists
8637set semctl d_semctl
8638eval $inlibc
8639
8640: see if semget exists
8641set semget d_semget
8642eval $inlibc
8643
8644: see if semop exists
8645set semop d_semop
8646eval $inlibc
8647
8648: see how much of the 'sem*(2)' library is present.
8649h_sem=true
8650echo " "
8651case "$d_semctl$d_semget$d_semop" in
8652*"$undef"*) h_sem=false;;
8653esac
6087ac44
JH
8654case "$osname" in
8655freebsd)
8656 case "`ipcs 2>&1`" in
8657 "SVID messages"*"not configured"*)
5ff3f7a4 8658 echo "Your $osname does not have the sem*(2) configured." >&4
6087ac44
JH
8659 h_sem=false
8660 val="$undef"
8661 set semctl d_semctl
8662 eval $setvar
8663 set semget d_semget
8664 eval $setvar
8665 set semop d_semop
8666 eval $setvar
8667 ;;
8668 esac
8669 ;;
8670esac
2304df62
AD
8671: we could also check for sys/ipc.h ...
8672if $h_sem && $test `./findhdr sys/sem.h`; then
8673 echo "You have the full sem*(2) library." >&4
8674 val="$define"
8675else
8676 echo "You don't have the full sem*(2) library." >&4
8677 val="$undef"
8678fi
8679set d_sem
8680eval $setvar
8681
bd89102f
AD
8682: see whether sys/sem.h defines union semun
8683echo " "
8684$cat > try.c <<'END'
8685#include <sys/types.h>
8686#include <sys/ipc.h>
8687#include <sys/sem.h>
8688int main () { union semun semun; semun.buf = 0; }
8689END
8690set try
8691if eval $compile; then
8692 echo "You have union semun in <sys/sem.h>." >&4
8693 val="$define"
8694else
8695 echo "You do not have union semun in <sys/sem.h>." >&4
8696 val="$undef"
8697fi
85ab1d1d 8698$rm -f try try.c try.h
bd89102f
AD
8699set d_union_semun
8700eval $setvar
8701
8702: see how to do semctl IPC_STAT
8703case "$d_sem" in
8704$define)
8705 : see whether semctl IPC_STAT can use union semun
8706 echo " "
85ab1d1d
JH
8707 $cat > try.h <<END
8708#ifndef S_IRUSR
8709# ifdef S_IREAD
8710# define S_IRUSR S_IREAD
8711# define S_IWUSR S_IWRITE
8712# define S_IXUSR S_IEXEC
8713# else
8714# define S_IRUSR 0400
8715# define S_IWUSR 0200
8716# define S_IXUSR 0100
8717# endif
8718# define S_IRGRP (S_IRUSR>>3)
8719# define S_IWGRP (S_IWUSR>>3)
8720# define S_IXGRP (S_IXUSR>>3)
8721# define S_IROTH (S_IRUSR>>6)
8722# define S_IWOTH (S_IWUSR>>6)
8723# define S_IXOTH (S_IXUSR>>6)
8724#endif
8725#ifndef S_IRWXU
8726# define S_IRWXU (S_IRUSR|S_IWUSR|S_IXUSR)
8727# define S_IRWXG (S_IRGRP|S_IWGRP|S_IXGRP)
8728# define S_IRWXO (S_IROTH|S_IWOTH|S_IXOTH)
8729#endif
8730END
8731
bd89102f
AD
8732 $cat > try.c <<END
8733#include <sys/types.h>
8734#include <sys/ipc.h>
8735#include <sys/sem.h>
8736#include <sys/stat.h>
8737#include <stdio.h>
8738#include <errno.h>
85ab1d1d 8739#include "try.h"
bd89102f
AD
8740#ifndef errno
8741extern int errno;
8742#endif
8743#$d_union_semun HAS_UNION_SEMUN
8744int main() {
8745 union semun
8746#ifndef HAS_UNION_SEMUN
8747 {
8748 int val;
8749 struct semid_ds *buf;
8750 unsigned short *array;
8751 }
8752#endif
8753 arg;
8754 int sem, st;
8755
8756#if defined(IPC_PRIVATE) && defined(S_IRWXU) && defined(S_IRWXG) && defined(S_IRWXO) && defined(IPC_CREAT)
8757 sem = semget(IPC_PRIVATE, 1, S_IRWXU|S_IRWXG|S_IRWXO|IPC_CREAT);
8758 if (sem > -1) {
8759 struct semid_ds argbuf;
8760 arg.buf = &argbuf;
8761# ifdef IPC_STAT
8762 st = semctl(sem, 0, IPC_STAT, arg);
8763 if (st == 0)
8764 printf("semun\n");
8765 else
8766# endif /* IPC_STAT */
8767 printf("semctl IPC_STAT failed: errno = %d\n", errno);
8768# ifdef IPC_RMID
8769 if (semctl(sem, 0, IPC_RMID, arg) != 0)
8770# endif /* IPC_RMID */
8771 printf("semctl IPC_RMID failed: errno = %d\n", errno);
8772 } else
8773#endif /* IPC_PRIVATE && ... */
8774 printf("semget failed: errno = %d\n", errno);
8775 return 0;
8776}
8777END
8778 val="$undef"
8779 set try
8780 if eval $compile; then
8781 xxx=`./try`
8782 case "$xxx" in
8783 semun) val="$define" ;;
8784 esac
8785 fi
8786 $rm -f try try.c
8787 set d_semctl_semun
8788 eval $setvar
8789 case "$d_semctl_semun" in
8790 $define)
8791 echo "You can use union semun for semctl IPC_STAT." >&4
8792 also='also'
8793 ;;
8794 *) echo "You cannot use union semun for semctl IPC_STAT." >&4
8795 also=''
8796 ;;
8797 esac
8798
8799 : see whether semctl IPC_STAT can use struct semid_ds pointer
8800 $cat > try.c <<'END'
8801#include <sys/types.h>
8802#include <sys/ipc.h>
8803#include <sys/sem.h>
8804#include <sys/stat.h>
85ab1d1d 8805#include "try.h"
bd89102f
AD
8806#include <stdio.h>
8807#include <errno.h>
8808#ifndef errno
8809extern int errno;
8810#endif
8811int main() {
8812 struct semid_ds arg;
8813 int sem, st;
8814
8815#if defined(IPC_PRIVATE) && defined(S_IRWXU) && defined(S_IRWXG) && defined(S_IRWXO) && defined(IPC_CREAT)
8816 sem = semget(IPC_PRIVATE, 1, S_IRWXU|S_IRWXG|S_IRWXO|IPC_CREAT);
8817 if (sem > -1) {
8818# ifdef IPC_STAT
8819 st = semctl(sem, 0, IPC_STAT, &arg);
8820 if (st == 0)
8821 printf("semid_ds\n");
8822 else
8823# endif /* IPC_STAT */
8824 printf("semctl IPC_STAT failed: errno = %d\n", errno);
8825# ifdef IPC_RMID
8826 if (semctl(sem, 0, IPC_RMID, &arg) != 0)
8827# endif /* IPC_RMID */
8828 printf("semctl IPC_RMID failed: errno = %d\n", errno);
8829 } else
8830#endif /* IPC_PRIVATE && ... */
8831 printf("semget failed: errno = %d\n", errno);
8832
8833 return 0;
8834}
8835END
8836 val="$undef"
8837 set try
8838 if eval $compile; then
8839 xxx=`./try`
8840 case "$xxx" in
8841 semid_ds) val="$define" ;;
8842 esac
8843 fi
8844 $rm -f try try.c
8845 set d_semctl_semid_ds
8846 eval $setvar
8847 case "$d_semctl_semid_ds" in
8848 $define)
8849 echo "You can $also use struct semid_ds * for semctl IPC_STAT." >&4
8850 ;;
8851 *) echo "You cannot use struct semid_ds * for semctl IPC_STAT." >&4
8852 ;;
8853 esac
85ab1d1d 8854 $rm -f try.h
bd89102f
AD
8855 ;;
8856*) val="$undef"
8857
8858 # We do not have the full sem*(2) library, so assume we can not
8859 # use either.
8860
8861 set d_semctl_semun
8862 eval $setvar
8863
8864 set d_semctl_semid_ds
8865 eval $setvar
8866 ;;
8867esac
8868
2304df62
AD
8869: see if setegid exists
8870set setegid d_setegid
8871eval $inlibc
8872
8873: see if seteuid exists
8874set seteuid d_seteuid
8875eval $inlibc
8876
5ff3f7a4
GS
8877: see if setgrent exists
8878set setgrent d_setgrent
8879eval $inlibc
8880
693762b4
AD
8881: see if sethostent exists
8882set sethostent d_sethent
8883eval $inlibc
8884
a0d0e21e
LW
8885: see if setlinebuf exists
8886set setlinebuf d_setlinebuf
8887eval $inlibc
8888
2304df62
AD
8889: see if setlocale exists
8890set setlocale d_setlocale
8891eval $inlibc
a0d0e21e 8892
e5c9fcd0
AD
8893: see if setnetent exists
8894set setnetent d_setnent
8895eval $inlibc
8896
8897: see if setprotoent exists
8898set setprotoent d_setpent
8899eval $inlibc
8900
2304df62
AD
8901: see if setpgid exists
8902set setpgid d_setpgid
8903eval $inlibc
8904
2304df62
AD
8905: see if setpgrp2 exists
8906set setpgrp2 d_setpgrp2
8907eval $inlibc
8908
8909: see if setpriority exists
8910set setpriority d_setprior
8911eval $inlibc
8912
5ff3f7a4
GS
8913: see if setpwent exists
8914set setpwent d_setpwent
8915eval $inlibc
8916
2304df62
AD
8917: see if setregid exists
8918set setregid d_setregid
8919eval $inlibc
8920set setresgid d_setresgid
8921eval $inlibc
8922
8923: see if setreuid exists
8924set setreuid d_setreuid
8925eval $inlibc
8926set setresuid d_setresuid
8927eval $inlibc
8928
8929: see if setrgid exists
8930set setrgid d_setrgid
8931eval $inlibc
8932
8933: see if setruid exists
8934set setruid d_setruid
8935eval $inlibc
8936
e5c9fcd0
AD
8937: see if setservent exists
8938set setservent d_setsent
8939eval $inlibc
8940
2304df62
AD
8941: see if setsid exists
8942set setsid d_setsid
8943eval $inlibc
8944
e5c9fcd0
AD
8945: see if setvbuf exists
8946set setvbuf d_setvbuf
8947eval $inlibc
8948
760ac839
LW
8949: see if sfio.h is available
8950set sfio.h i_sfio
8951eval $inhdr
8952
8953
8ff267be 8954: see if sfio library is available
760ac839
LW
8955case "$i_sfio" in
8956$define)
8957 val=''
8958 set sfreserve val
8959 eval $inlibc
8960 ;;
8961*)
8962 val="$undef"
8963 ;;
8964esac
8ff267be 8965: Ok, but do we want to use it.
760ac839
LW
8966case "$val" in
8967$define)
8968 case "$usesfio" in
8ff267be 8969 true|$define|[yY]*) dflt='y';;
760ac839
LW
8970 *) dflt='n';;
8971 esac
8ff267be 8972 echo "$package can use the sfio library, but it is experimental."
760ac839
LW
8973 rp="You seem to have sfio available, do you want to try using it?"
8974 . ./myread
8975 case "$ans" in
8ff267be 8976 y|Y) ;;
8977 *) echo "Ok, avoiding sfio this time. I'll use stdio instead."
760ac839 8978 val="$undef"
ff0cee69 8979 : Remove sfio from list of libraries to use
8980 set `echo X $libs | $sed -e 's/-lsfio / /' -e 's/-lsfio$//'`
8981 shift
8982 libs="$*"
8983 echo "libs = $libs" >&4
760ac839
LW
8984 ;;
8985 esac
8986 ;;
8ff267be 8987*) case "$usesfio" in
8988 true|$define|[yY]*)
8989 echo "Sorry, cannot find sfio on this machine" >&4
8990 echo "Ignoring your setting of usesfio=$usesfio" >&4
760ac839
LW
8991 ;;
8992 esac
8993 ;;
8994esac
8ff267be 8995set d_sfio
8996eval $setvar
760ac839
LW
8997case "$d_sfio" in
8998$define) usesfio='true';;
8999*) usesfio='false';;
9000esac
9001
2304df62
AD
9002: see if shmctl exists
9003set shmctl d_shmctl
9004eval $inlibc
9005
9006: see if shmget exists
9007set shmget d_shmget
9008eval $inlibc
9009
a0d0e21e
LW
9010: see if shmat exists
9011set shmat d_shmat
9012eval $inlibc
9013: see what shmat returns
9014case "$d_shmat" in
9015"$define")
9016 $cat >shmat.c <<'END'
9017#include <sys/shm.h>
9018void *shmat();
9019END
9020 if $cc $ccflags -c shmat.c >/dev/null 2>&1; then
9021 shmattype='void *'
9022 else
9023 shmattype='char *'
9024 fi
9025 echo "and it returns ($shmattype)." >&4
9026 : see if a prototype for shmat is available
e50aee73
AD
9027 xxx=`./findhdr sys/shm.h`
9028 $cppstdin $cppflags $cppminus < $xxx > shmat.c 2>/dev/null
a0d0e21e
LW
9029 if $contains 'shmat.*(' shmat.c >/dev/null 2>&1; then
9030 val="$define"
9031 else
9032 val="$undef"
9033 fi
9034 $rm -f shmat.[co]
9035 ;;
9036*)
9037 val="$undef"
9038 ;;
9039esac
9040set d_shmatprototype
9041eval $setvar
9042
9043: see if shmdt exists
9044set shmdt d_shmdt
9045eval $inlibc
9046
9047: see how much of the 'shm*(2)' library is present.
9048h_shm=true
9049echo " "
9050case "$d_shmctl$d_shmget$d_shmat$d_shmdt" in
9051*"$undef"*) h_shm=false;;
9052esac
6087ac44
JH
9053case "$osname" in
9054freebsd)
9055 case "`ipcs 2>&1`" in
9056 "SVID shared memory"*"not configured"*)
5ff3f7a4 9057 echo "Your $osname does not have the shm*(2) configured." >&4
6087ac44
JH
9058 h_shm=false
9059 val="$undef"
9060 set shmctl d_shmctl
9061 evat $setvar
9062 set shmget d_shmget
9063 evat $setvar
9064 set shmat d_shmat
9065 evat $setvar
9066 set shmdt d_shmdt
9067 evat $setvar
9068 ;;
9069 esac
9070 ;;
9071esac
a0d0e21e
LW
9072: we could also check for sys/ipc.h ...
9073if $h_shm && $test `./findhdr sys/shm.h`; then
9074 echo "You have the full shm*(2) library." >&4
9075 val="$define"
9076else
9077 echo "You don't have the full shm*(2) library." >&4
9078 val="$undef"
9079fi
9080set d_shm
9081eval $setvar
9082
2c7991dc 9083echo " "
8ff267be 9084: see if we have sigaction
9085if set sigaction val -f d_sigaction; eval $csym; $val; then
9086 echo 'sigaction() found.' >&4
dc45a647 9087 $cat > try.c <<'EOP'
8ff267be 9088#include <stdio.h>
9089#include <sys/types.h>
9090#include <signal.h>
9091main()
9092{
9093 struct sigaction act, oact;
9094}
9095EOP
dc45a647
MB
9096 set try
9097 if eval $compile_ok; then
9098 val="$define"
9099 else
9100 echo "But you don't seem to have a useable struct sigaction." >&4
9101 val="$undef"
9102 fi
8ff267be 9103else
dc45a647 9104 echo 'sigaction NOT found.' >&4
8ff267be 9105 val="$undef"
9106fi
9107set d_sigaction; eval $setvar
dfe9444c 9108$rm -f try try$_o try.c
2c7991dc 9109
a5f75d66
AD
9110: see if sigsetjmp exists
9111echo " "
9112case "$d_sigsetjmp" in
9113'')
dfe9444c 9114 $cat >try.c <<'EOP'
a5f75d66
AD
9115#include <setjmp.h>
9116sigjmp_buf env;
9117int set = 1;
9118main()
9119{
9120 if (sigsetjmp(env,1))
9121 exit(set);
9122 set = 0;
9123 siglongjmp(env, 1);
9124 exit(1);
9125}
9126EOP
dfe9444c
AD
9127 set try
9128 if eval $compile; then
9129 if ./try >/dev/null 2>&1; then
a5f75d66
AD
9130 echo "POSIX sigsetjmp found." >&4
9131 val="$define"
9132 else
760ac839 9133 $cat >&4 <<EOM
a5f75d66 9134Uh-Oh! You have POSIX sigsetjmp and siglongjmp, but they do not work properly!!
760ac839 9135I'll ignore them.
a5f75d66
AD
9136EOM
9137 val="$undef"
9138 fi
9139 else
760ac839 9140 echo "sigsetjmp not found." >&4
a5f75d66
AD
9141 val="$undef"
9142 fi
9143 ;;
9144*) val="$d_sigsetjmp"
9145 case "$d_sigsetjmp" in
9146 $define) echo "POSIX sigsetjmp found." >&4;;
760ac839 9147 $undef) echo "sigsetjmp not found." >&4;;
a5f75d66
AD
9148 esac
9149 ;;
9150esac
9151set d_sigsetjmp
9152eval $setvar
dfe9444c 9153$rm -f try.c try
a5f75d66 9154
a0d0e21e
LW
9155socketlib=''
9156sockethdr=''
9157: see whether socket exists
9158echo " "
9159$echo $n "Hmm... $c" >&4
9160if set socket val -f d_socket; eval $csym; $val; then
9161 echo "Looks like you have Berkeley networking support." >&4
9162 d_socket="$define"
9163 if set setsockopt val -f; eval $csym; $val; then
9164 d_oldsock="$undef"
9165 else
9166 echo "...but it uses the old 4.1c interface, rather than 4.2" >&4
9167 d_oldsock="$define"
9168 fi
9169else
9170 if $contains socklib libc.list >/dev/null 2>&1; then
9171 echo "Looks like you have Berkeley networking support." >&4
9172 d_socket="$define"
9173 : we will have to assume that it supports the 4.2 BSD interface
9174 d_oldsock="$undef"
9175 else
dfe9444c
AD
9176 echo "You don't have Berkeley networking in libc$_a..." >&4
9177 if test -f /usr/lib/libnet$_a; then
dc45a647 9178 ( ($nm $nm_opt /usr/lib/libnet$_a | eval $nm_extract) || \
9b8c873d 9179 $ar t /usr/lib/libnet$_a) 2>/dev/null >> libc.list
a0d0e21e
LW
9180 if $contains socket libc.list >/dev/null 2>&1; then
9181 echo "...but the Wollongong group seems to have hacked it in." >&4
9182 socketlib="-lnet"
9183 sockethdr="-I/usr/netinclude"
9184 d_socket="$define"
9185 if $contains setsockopt libc.list >/dev/null 2>&1; then
9186 d_oldsock="$undef"
9187 else
9188 echo "...using the old 4.1c interface, rather than 4.2" >&4
9189 d_oldsock="$define"
9190 fi
9191 else
dfe9444c 9192 echo "or even in libnet$_a, which is peculiar." >&4
a0d0e21e
LW
9193 d_socket="$undef"
9194 d_oldsock="$undef"
9195 fi
9196 else
9197 echo "or anywhere else I see." >&4
9198 d_socket="$undef"
9199 d_oldsock="$undef"
9200 fi
9201 fi
9202fi
9203
9204: see if socketpair exists
9205set socketpair d_sockpair
2304df62
AD
9206eval $inlibc
9207
2304df62
AD
9208: see if stat knows about block sizes
9209echo " "
5ff3f7a4
GS
9210set d_statblks stat st_blocks $i_sysstat sys/stat.h
9211eval $hasfield
2304df62 9212
16d20bd9
AD
9213: see if _ptr and _cnt from stdio act std
9214echo " "
9215if $contains '_IO_fpos_t' `./findhdr stdio.h` >/dev/null 2>&1 ; then
9216 echo "(Looks like you have stdio.h from Linux.)"
9217 case "$stdio_ptr" in
c2960299
AD
9218 '') stdio_ptr='((fp)->_IO_read_ptr)'
9219 ptr_lval=$define
9220 ;;
8e07c86e 9221 *) ptr_lval=$d_stdio_ptr_lval;;
16d20bd9
AD
9222 esac
9223 case "$stdio_cnt" in
c2960299
AD
9224 '') stdio_cnt='((fp)->_IO_read_end - (fp)->_IO_read_ptr)'
9225 cnt_lval=$undef
9226 ;;
8e07c86e 9227 *) cnt_lval=$d_stdio_cnt_lval;;
16d20bd9
AD
9228 esac
9229 case "$stdio_base" in
9230 '') stdio_base='((fp)->_IO_read_base)';;
9231 esac
9232 case "$stdio_bufsiz" in
c2960299 9233 '') stdio_bufsiz='((fp)->_IO_read_end - (fp)->_IO_read_base)';;
16d20bd9
AD
9234 esac
9235else
9236 case "$stdio_ptr" in
c2960299
AD
9237 '') stdio_ptr='((fp)->_ptr)'
9238 ptr_lval=$define
9239 ;;
8e07c86e 9240 *) ptr_lval=$d_stdio_ptr_lval;;
16d20bd9
AD
9241 esac
9242 case "$stdio_cnt" in
c2960299
AD
9243 '') stdio_cnt='((fp)->_cnt)'
9244 cnt_lval=$define
9245 ;;
8e07c86e 9246 *) cnt_lval=$d_stdio_cnt_lval;;
16d20bd9
AD
9247 esac
9248 case "$stdio_base" in
9249 '') stdio_base='((fp)->_base)';;
9250 esac
9251 case "$stdio_bufsiz" in
9252 '') stdio_bufsiz='((fp)->_cnt + (fp)->_ptr - (fp)->_base)';;
9253 esac
9254fi
9255: test whether _ptr and _cnt really work
9256echo "Checking how std your stdio is..." >&4
9257$cat >try.c <<EOP
9258#include <stdio.h>
9259#define FILE_ptr(fp) $stdio_ptr
9260#define FILE_cnt(fp) $stdio_cnt
8ff267be 9261main() {
16d20bd9
AD
9262 FILE *fp = fopen("try.c", "r");
9263 char c = getc(fp);
9264 if (
9265 18 <= FILE_cnt(fp) &&
9266 strncmp(FILE_ptr(fp), "include <stdio.h>\n", 18) == 0
9267 )
9268 exit(0);
9269 exit(1);
9270}
9271EOP
9272val="$undef"
dfe9444c
AD
9273set try
9274if eval $compile; then
16d20bd9
AD
9275 if ./try; then
9276 echo "Your stdio acts pretty std."
9277 val="$define"
9278 else
9279 echo "Your stdio isn't very std."
9280 fi
9281else
9282 echo "Your stdio doesn't appear very std."
9283fi
9284$rm -f try.c try
9285set d_stdstdio
9286eval $setvar
9287
8e07c86e 9288: Can _ptr be used as an lvalue?
e50aee73
AD
9289case "$d_stdstdio$ptr_lval" in
9290$define$define) val=$define ;;
c2960299
AD
9291*) val=$undef ;;
9292esac
9293set d_stdio_ptr_lval
9294eval $setvar
9295
8e07c86e 9296: Can _cnt be used as an lvalue?
e50aee73
AD
9297case "$d_stdstdio$cnt_lval" in
9298$define$define) val=$define ;;
c2960299
AD
9299*) val=$undef ;;
9300esac
9301set d_stdio_cnt_lval
9302eval $setvar
9303
16d20bd9
AD
9304: see if _base is also standard
9305val="$undef"
9306case "$d_stdstdio" in
9307$define)
9308 $cat >try.c <<EOP
9309#include <stdio.h>
9310#define FILE_base(fp) $stdio_base
9311#define FILE_bufsiz(fp) $stdio_bufsiz
8ff267be 9312main() {
16d20bd9
AD
9313 FILE *fp = fopen("try.c", "r");
9314 char c = getc(fp);
9315 if (
9316 19 <= FILE_bufsiz(fp) &&
9317 strncmp(FILE_base(fp), "#include <stdio.h>\n", 19) == 0
9318 )
9319 exit(0);
9320 exit(1);
9321}
9322EOP
dfe9444c
AD
9323 set try
9324 if eval $compile; then
16d20bd9 9325 if ./try; then
8ff267be 9326 echo "And its _base field acts std."
16d20bd9
AD
9327 val="$define"
9328 else
9329 echo "But its _base field isn't std."
9330 fi
9331 else
9332 echo "However, it seems to be lacking the _base field."
9333 fi
9334 $rm -f try.c try
9335 ;;
9336esac
9337set d_stdiobase
9338eval $setvar
9339
a0d0e21e
LW
9340: see if strcoll exists
9341set strcoll d_strcoll
9342eval $inlibc
2304df62
AD
9343
9344: check for structure copying
9345echo " "
9346echo "Checking to see if your C compiler can copy structs..." >&4
9347$cat >try.c <<'EOCP'
9348main()
9349{
9350 struct blurfl {
9351 int dyick;
9352 } foo, bar;
9353
9354 foo = bar;
9355}
9356EOCP
9357if $cc -c try.c >/dev/null 2>&1 ; then
9358 val="$define"
9359 echo "Yup, it can."
9360else
9361 val="$undef"
9362 echo "Nope, it can't."
9363fi
9364set d_strctcpy
9365eval $setvar
9366$rm -f try.*
9367
9368: see if strerror and/or sys_errlist[] exist
9369echo " "
28e8609d
JH
9370if test "X$d_strerror" = X -o "X$d_syserrlst" = X; then
9371 if set strerror val -f d_strerror; eval $csym; $val; then
5ff3f7a4
GS
9372 echo 'strerror() found.' >&4
9373 d_strerror="$define"
9374 d_strerrm='strerror(e)'
9375 if set sys_errlist val -a d_syserrlst; eval $csym; $val; then
9376 echo "(You also have sys_errlist[], so we could roll our own strerror.)"
9377 d_syserrlst="$define"
9378 else
9379 echo "(Since you don't have sys_errlist[], sterror() is welcome.)"
9380 d_syserrlst="$undef"
9381 fi
28e8609d 9382 elif xxx=`./findhdr string.h`; test "$xxx" || xxx=`./findhdr strings.h`; \
5ff3f7a4
GS
9383 $contains '#[ ]*define.*strerror' "$xxx" >/dev/null 2>&1; then
9384 echo 'strerror() found in string header.' >&4
9385 d_strerror="$define"
9386 d_strerrm='strerror(e)'
9387 if set sys_errlist val -a d_syserrlst; eval $csym; $val; then
9388 echo "(Most probably, strerror() uses sys_errlist[] for descriptions.)"
9389 d_syserrlst="$define"
9390 else
9391 echo "(You don't appear to have any sys_errlist[], how can this be?)"
9392 d_syserrlst="$undef"
9393 fi
28e8609d 9394 elif set sys_errlist val -a d_syserrlst; eval $csym; $val; then
5ff3f7a4
GS
9395 echo "strerror() not found, but you have sys_errlist[] so we'll use that." >&4
9396 d_strerror="$undef"
9397 d_syserrlst="$define"
9398 d_strerrm='((e)<0||(e)>=sys_nerr?"unknown":sys_errlist[e])'
28e8609d 9399 else
5ff3f7a4
GS
9400 echo 'strerror() and sys_errlist[] NOT found.' >&4
9401 d_strerror="$undef"
9402 d_syserrlst="$undef"
9403 d_strerrm='"unknown"'
28e8609d 9404 fi
2304df62
AD
9405fi
9406
a89d8a78
DH
9407: see if strtod exists
9408set strtod d_strtod
9409eval $inlibc
9410
9411: see if strtol exists
9412set strtol d_strtol
9413eval $inlibc
9414
9415: see if strtoul exists
9416set strtoul d_strtoul
9417eval $inlibc
9418
a0d0e21e
LW
9419: see if strxfrm exists
9420set strxfrm d_strxfrm
9421eval $inlibc
9422
2304df62
AD
9423: see if symlink exists
9424set symlink d_symlink
9425eval $inlibc
9426
9427: see if syscall exists
9428set syscall d_syscall
9429eval $inlibc
9430
a0d0e21e
LW
9431: see if sysconf exists
9432set sysconf d_sysconf
9433eval $inlibc
9434
2304df62
AD
9435: see if system exists
9436set system d_system
9437eval $inlibc
9438
a0d0e21e
LW
9439: see if tcgetpgrp exists
9440set tcgetpgrp d_tcgetpgrp
9441eval $inlibc
9442
2c7991dc 9443: see if tcsetpgrp exists
9444set tcsetpgrp d_tcsetpgrp
9445eval $inlibc
4633a7c4 9446
2c7991dc 9447: define an is-a-typedef? function
9448typedef='type=$1; var=$2; def=$3; shift; shift; shift; inclist=$@;
9449case "$inclist" in
9450"") inclist="sys/types.h";;
9451esac;
9452eval "varval=\$$var";
9453case "$varval" in
9454"")
9455 $rm -f temp.c;
9456 for inc in $inclist; do
9457 echo "#include <$inc>" >>temp.c;
9458 done;
c4f23d77
AD
9459 echo "#ifdef $type" >> temp.c;
9460 echo "printf(\"We have $type\");" >> temp.c;
9461 echo "#endif" >> temp.c;
2c7991dc 9462 $cppstdin $cppflags $cppminus < temp.c >temp.E 2>/dev/null;
9463 if $contains $type temp.E >/dev/null 2>&1; then
9464 eval "$var=\$type";
9465 else
9466 eval "$var=\$def";
9467 fi;
9468 $rm -f temp.?;;
9469*) eval "$var=\$varval";;
9470esac'
4633a7c4 9471
dc45a647
MB
9472: define an is-a-typedef? function that prompts if the type is not available.
9473typedef_ask='type=$1; var=$2; def=$3; shift; shift; shift; inclist=$@;
9474case "$inclist" in
9475"") inclist="sys/types.h";;
9476esac;
9477eval "varval=\$$var";
9478case "$varval" in
9479"")
9480 $rm -f temp.c;
9481 for inc in $inclist; do
9482 echo "#include <$inc>" >>temp.c;
9483 done;
c4f23d77
AD
9484 echo "#ifdef $type" >> temp.c;
9485 echo "printf(\"We have $type\");" >> temp.c;
9486 echo "#endif" >> temp.c;
dc45a647
MB
9487 $cppstdin $cppflags $cppminus < temp.c >temp.E 2>/dev/null;
9488 echo " " ;
9489 echo "$rp" | $sed -e "s/What is/Looking for/" -e "s/?/./";
9490 if $contains $type temp.E >/dev/null 2>&1; then
9491 echo "$type found." >&4;
9492 eval "$var=\$type";
9493 else
9494 echo "$type NOT found." >&4;
9495 dflt="$def";
9496 . ./myread ;
9497 eval "$var=\$ans";
9498 fi;
9499 $rm -f temp.?;;
9500*) eval "$var=\$varval";;
9501esac'
9502
2c7991dc 9503: see if this is a sys/times.h system
9504set sys/times.h i_systimes
9505eval $inhdr
4633a7c4 9506
2c7991dc 9507: see if times exists
4633a7c4 9508echo " "
2c7991dc 9509if set times val -f d_times; eval $csym; $val; then
9510 echo 'times() found.' >&4
9511 d_times="$define"
9512 inc=''
9513 case "$i_systimes" in
9514 "$define") inc='sys/times.h';;
9515 esac
dc45a647 9516 rp="What is the type returned by times() on this system?"
2c7991dc 9517 set clock_t clocktype long stdio.h sys/types.h $inc
dc45a647 9518 eval $typedef_ask
2c7991dc 9519else
9520 echo 'times() NOT found, hope that will do.' >&4
9521 d_times="$undef"
9522 clocktype='int'
9523fi
2304df62 9524
2c7991dc 9525: see if truncate exists
9526set truncate d_truncate
9527eval $inlibc
2304df62 9528
2c7991dc 9529: see if tzname[] exists
9530echo " "
9531if set tzname val -a d_tzname; eval $csym; $val; then
9532 val="$define"
9533 echo 'tzname[] found.' >&4
9534else
9535 val="$undef"
9536 echo 'tzname[] NOT found.' >&4
9537fi
9538set d_tzname
9539eval $setvar
9540
9541: see if umask exists
9542set umask d_umask
9543eval $inlibc
85e6fe83 9544
4633a7c4 9545: see how we will look up host name
a0d0e21e 9546echo " "
4633a7c4
LW
9547if false; then
9548 : dummy stub to allow use of elif
9549elif set uname val -f d_uname; eval $csym; $val; then
9550 if ./xenix; then
9551 $cat <<'EOM'
9552uname() was found, but you're running xenix, and older versions of xenix
9553have a broken uname(). If you don't really know whether your xenix is old
9554enough to have a broken system call, use the default answer.
9555
85e6fe83 9556EOM
4633a7c4
LW
9557 dflt=y
9558 case "$d_uname" in
9559 "$define") dflt=n;;
9560 esac
9561 rp='Is your uname() broken?'
9562 . ./myread
9563 case "$ans" in
9564 n*) d_uname="$define"; call=uname;;
9565 esac
9566 else
9567 echo 'uname() found.' >&4
9568 d_uname="$define"
9569 call=uname
9570 fi
a0d0e21e 9571fi
4633a7c4
LW
9572case "$d_gethname" in
9573'') d_gethname="$undef";;
9574esac
9575case "$d_uname" in
9576'') d_uname="$undef";;
9577esac
9578case "$d_phostname" in
9579'') d_phostname="$undef";;
9580esac
ecfc5424 9581
4633a7c4
LW
9582: backward compatibility for d_hvfork
9583if test X$d_hvfork != X; then
9584 d_vfork="$d_hvfork"
9585 d_hvfork=''
9586fi
9587: see if there is a vfork
9588val=''
9589set vfork val
9590eval $inlibc
ecfc5424 9591
4633a7c4
LW
9592: Ok, but do we want to use it. vfork is reportedly unreliable in
9593: perl on Solaris 2.x, and probably elsewhere.
9594case "$val" in
9595$define)
16d20bd9 9596 echo " "
4633a7c4
LW
9597 case "$usevfork" in
9598 false) dflt='n';;
9599 *) dflt='y';;
9600 esac
9601 rp="Some systems have problems with vfork(). Do you want to use it?"
9602 . ./myread
9603 case "$ans" in
9604 y|Y) ;;
9605 *)
9606 echo "Ok, we won't use vfork()."
9607 val="$undef"
9608 ;;
9609 esac
ecfc5424
AD
9610 ;;
9611esac
4633a7c4
LW
9612set d_vfork
9613eval $setvar
9614case "$d_vfork" in
9615$define) usevfork='true';;
9616*) usevfork='false';;
9617esac
ecfc5424 9618
4633a7c4
LW
9619: see if this is an sysdir system
9620set sys/dir.h i_sysdir
9621eval $inhdr
9622
9623: see if this is an sysndir system
9624set sys/ndir.h i_sysndir
9625eval $inhdr
9626
bfb7748a
AD
9627: see if sys/types.h has to be included
9628set sys/types.h i_systypes
9629eval $inhdr
9630
4633a7c4
LW
9631: see if closedir exists
9632set closedir d_closedir
9633eval $inlibc
9634
9635case "$d_closedir" in
9636"$define")
16d20bd9 9637 echo " "
4633a7c4
LW
9638 echo "Checking whether closedir() returns a status..." >&4
9639 cat > closedir.c <<EOM
9640#$i_dirent I_DIRENT /**/
9641#$i_sysdir I_SYS_DIR /**/
9642#$i_sysndir I_SYS_NDIR /**/
bfb7748a 9643#$i_systypes I_SYS_TYPES /**/
4633a7c4 9644
bfb7748a
AD
9645#if defined(I_SYS_TYPES)
9646#include <sys/types.h>
9647#endif
4633a7c4
LW
9648#if defined(I_DIRENT)
9649#include <dirent.h>
9650#if defined(NeXT) && defined(I_SYS_DIR) /* NeXT needs dirent + sys/dir.h */
9651#include <sys/dir.h>
4aa0a1f7 9652#endif
4633a7c4
LW
9653#else
9654#ifdef I_SYS_NDIR
9655#include <sys/ndir.h>
9656#else
9657#ifdef I_SYS_DIR
9658#ifdef hp9000s500
9659#include <ndir.h> /* may be wrong in the future */
9660#else
9661#include <sys/dir.h>
9662#endif
9663#endif
9664#endif
9665#endif
9666int main() { return closedir(opendir(".")); }
9667EOM
dfe9444c 9668 set closedir
dc45a647 9669 if eval $compile_ok; then
4633a7c4
LW
9670 if ./closedir > /dev/null 2>&1 ; then
9671 echo "Yes, it does."
9672 val="$undef"
ecfc5424 9673 else
4633a7c4
LW
9674 echo "No, it doesn't."
9675 val="$define"
ecfc5424
AD
9676 fi
9677 else
4633a7c4
LW
9678 echo "(I can't seem to compile the test program--assuming it doesn't)"
9679 val="$define"
ecfc5424 9680 fi
ecfc5424 9681 ;;
4633a7c4
LW
9682*)
9683 val="$undef";
ecfc5424
AD
9684 ;;
9685esac
4633a7c4
LW
9686set d_void_closedir
9687eval $setvar
9688$rm -f closedir*
9689: check for volatile keyword
ecfc5424 9690echo " "
4633a7c4
LW
9691echo 'Checking to see if your C compiler knows about "volatile"...' >&4
9692$cat >try.c <<'EOCP'
9693main()
9694{
9695 typedef struct _goo_struct goo_struct;
9696 goo_struct * volatile goo = ((goo_struct *)0);
9697 struct _goo_struct {
9698 long long_int;
9699 int reg_int;
9700 char char_var;
9701 };
9702 typedef unsigned short foo_t;
9703 char *volatile foo;
9704 volatile int bar;
9705 volatile foo_t blech;
9706 foo = foo;
a0d0e21e
LW
9707}
9708EOCP
4633a7c4
LW
9709if $cc -c $ccflags try.c >/dev/null 2>&1 ; then
9710 val="$define"
9711 echo "Yup, it does."
9712else
9713 val="$undef"
9714 echo "Nope, it doesn't."
9715fi
9716set d_volatile
9717eval $setvar
9718$rm -f try.*
a0d0e21e 9719
4633a7c4
LW
9720: see if there is a wait4
9721set wait4 d_wait4
8e07c86e
AD
9722eval $inlibc
9723
4633a7c4
LW
9724: see if waitpid exists
9725set waitpid d_waitpid
9726eval $inlibc
9727
9728: see if wcstombs exists
9729set wcstombs d_wcstombs
9730eval $inlibc
9731
9732: see if wctomb exists
9733set wctomb d_wctomb
9734eval $inlibc
9735
9736: preserve RCS keywords in files with variable substitution, grrr
9737Date='$Date'
9738Id='$Id'
9739Log='$Log'
9740RCSfile='$RCSfile'
9741Revision='$Revision'
9742
9743: check for alignment requirements
9744echo " "
9745case "$alignbytes" in
9746'') echo "Checking alignment constraints..." >&4
9747 $cat >try.c <<'EOCP'
9748struct foobar {
9749 char foo;
9750 double bar;
9751} try;
9752main()
9753{
9754 printf("%d\n", (char *)&try.bar - (char *)&try.foo);
9755}
9756EOCP
dfe9444c 9757 set try
dc45a647 9758 if eval $compile_ok; then
4633a7c4
LW
9759 dflt=`./try`
9760 else
9761 dflt='8'
41992daf 9762 echo "(I can't seem to compile the test program...)"
4633a7c4 9763 fi
ecfc5424 9764 ;;
4633a7c4 9765*) dflt="$alignbytes"
8e07c86e 9766 ;;
ecfc5424 9767esac
4633a7c4
LW
9768rp="Doubles must be aligned on a how-many-byte boundary?"
9769. ./myread
9770alignbytes="$ans"
9771$rm -f try.c try
85e6fe83 9772
4633a7c4
LW
9773: check for ordering of bytes in a long
9774case "$byteorder" in
9775'')
9776 $cat <<'EOM'
9777
9778In the following, larger digits indicate more significance. A big-endian
9779machine like a Pyramid or a Motorola 680?0 chip will come out to 4321. A
9780little-endian machine like a Vax or an Intel 80?86 chip would be 1234. Other
9781machines may have weird orders like 3412. A Cray will report 87654321. If
9782the test program works the default is probably right.
9783I'm now running the test program...
9784EOM
9785 $cat >try.c <<'EOCP'
9786#include <stdio.h>
9787main()
9788{
9789 int i;
9790 union {
9791 unsigned long l;
9792 char c[sizeof(long)];
9793 } u;
9794
9795 if (sizeof(long) > 4)
9796 u.l = (0x08070605L << 32) | 0x04030201L;
9797 else
9798 u.l = 0x04030201L;
9799 for (i = 0; i < sizeof(long); i++)
9800 printf("%c", u.c[i]+'0');
9801 printf("\n");
9802 exit(0);
9803}
9804EOCP
9805 xxx_prompt=y
dfe9444c
AD
9806 set try
9807 if eval $compile && ./try > /dev/null; then
4633a7c4
LW
9808 dflt=`./try`
9809 case "$dflt" in
9810 [1-4][1-4][1-4][1-4]|12345678|87654321)
9811 echo "(The test program ran ok.)"
9812 echo "byteorder=$dflt"
9813 xxx_prompt=n
9814 ;;
9815 ????|????????) echo "(The test program ran ok.)" ;;
9816 *) echo "(The test program didn't run right for some reason.)" ;;
9817 esac
9818 else
9819 dflt='4321'
9820 cat <<'EOM'
9821(I can't seem to compile the test program. Guessing big-endian...)
9822EOM
9823 fi
9824 case "$xxx_prompt" in
9825 y)
9826 rp="What is the order of bytes in a long?"
9827 . ./myread
9828 byteorder="$ans"
9829 ;;
9830 *) byteorder=$dflt
ecfc5424
AD
9831 ;;
9832 esac
9833 ;;
9834esac
4633a7c4 9835$rm -f try.c try
85e6fe83 9836
4633a7c4 9837: how do we catenate cpp tokens here?
2304df62 9838echo " "
4633a7c4
LW
9839echo "Checking to see how your cpp does stuff like catenate tokens..." >&4
9840$cat >cpp_stuff.c <<'EOCP'
9841#define RCAT(a,b)a/**/b
9842#define ACAT(a,b)a ## b
9843RCAT(Rei,ser)
9844ACAT(Cir,cus)
9845EOCP
9846$cppstdin $cppflags $cppminus <cpp_stuff.c >cpp_stuff.out 2>&1
9847if $contains 'Circus' cpp_stuff.out >/dev/null 2>&1; then
dfe9444c 9848 echo "Oh! Smells like ANSI's been here." >&4
4633a7c4
LW
9849 echo "We can catify or stringify, separately or together!"
9850 cpp_stuff=42
9851elif $contains 'Reiser' cpp_stuff.out >/dev/null 2>&1; then
dfe9444c 9852 echo "Ah, yes! The good old days!" >&4
4633a7c4
LW
9853 echo "However, in the good old days we don't know how to stringify and"
9854 echo "catify at the same time."
9855 cpp_stuff=1
9856else
9857 $cat >&4 <<EOM
9858Hmm, I don't seem to be able to catenate tokens with your cpp. You're going
9859to have to edit the values of CAT[2-5] in config.h...
a0d0e21e 9860EOM
4633a7c4
LW
9861 cpp_stuff="/* Help! How do we handle cpp_stuff? */*/"
9862fi
9863$rm -f cpp_stuff.*
a0d0e21e 9864
4633a7c4
LW
9865: see if this is a db.h system
9866set db.h i_db
9867eval $inhdr
9868
9869case "$i_db" in
68dc0745 9870$define)
1f70e1ea 9871 : Check db version.
68dc0745 9872 echo " "
9873 echo "Checking Berkeley DB version ..." >&4
9874 $cat >try.c <<EOCP
9875#$d_const HASCONST
9876#ifndef HASCONST
9877#define const
9878#endif
9879#include <sys/types.h>
9880#include <stdio.h>
9881#include <db.h>
9882main()
9883{
1f70e1ea
PM
9884#ifdef DB_VERSION_MAJOR /* DB version >= 2 */
9885 int Major, Minor, Patch ;
ee02776e 9886 unsigned long Version ;
1f70e1ea
PM
9887 (void)db_version(&Major, &Minor, &Patch) ;
9888 printf("You have Berkeley DB Version 2 or greater\n");
9889
9890 printf("db.h is from Berkeley DB Version %d.%d.%d\n",
9891 DB_VERSION_MAJOR, DB_VERSION_MINOR, DB_VERSION_PATCH);
9892 printf("libdb is from Berkeley DB Version %d.%d.%d\n",
9893 Major, Minor, Patch) ;
9894
9895 /* check that db.h & libdb are compatible */
9896 if (DB_VERSION_MAJOR != Major || DB_VERSION_MINOR != Minor || DB_VERSION_PATCH != Patch) {
9897 printf("db.h and libdb are incompatible\n") ;
9898 exit(3);
9899 }
9900
9901 printf("db.h and libdb are compatible\n") ;
ee02776e
PM
9902
9903 Version = DB_VERSION_MAJOR * 1000000 + DB_VERSION_MINOR * 1000
693762b4 9904 + DB_VERSION_PATCH ;
ee02776e
PM
9905
9906 /* needs to be >= 2.3.4 */
9907 if (Version < 2003004) {
693762b4 9908 /* if (DB_VERSION_MAJOR == 2 && DB_VERSION_MINOR == 0 && DB_VERSION_PATCH < 5) { */
ee02776e 9909 printf("but Perl needs Berkeley DB 2.3.4 or greater\n") ;
1f70e1ea
PM
9910 exit(2);
9911 }
9912
9913 exit(0);
68dc0745 9914#else
6a1b87e5 9915#if defined(_DB_H_) && defined(BTREEMAGIC) && defined(HASHMAGIC)
1f70e1ea 9916 printf("You have Berkeley DB Version 1\n");
6a1b87e5
JH
9917 exit(0); /* DB version < 2: the coast is clear. */
9918#else
9919 exit(1); /* <db.h> not Berkeley DB? */
9920#endif
68dc0745 9921#endif
9922}
9923EOCP
dfe9444c
AD
9924 set try
9925 if eval $compile && ./try; then
1f70e1ea 9926 echo 'Looks OK.' >&4
68dc0745 9927 else
c90c0ff4 9928 echo "I can't use Berkeley DB with your <db.h>. I'll disable Berkeley DB." >&4
68dc0745 9929 i_db=$undef
9930 case " $libs " in
9931 *"-ldb "*)
9932 : Remove db from list of libraries to use
9933 echo "Removing unusable -ldb from library list" >&4
9934 set `echo X $libs | $sed -e 's/-ldb / /' -e 's/-ldb$//'`
9935 shift
9936 libs="$*"
9937 echo "libs = $libs" >&4
9938 ;;
9939 esac
9940 fi
9941 $rm -f try.*
9942 ;;
9943esac
9944
9945case "$i_db" in
4633a7c4 9946define)
dc45a647
MB
9947 : Check the return type needed for hash
9948 echo " "
9949 echo "Checking return type needed for hash for Berkeley DB ..." >&4
9950 $cat >try.c <<EOCP
9951#$d_const HASCONST
9952#ifndef HASCONST
9953#define const
9954#endif
9955#include <sys/types.h>
9956#include <db.h>
9957
9958#ifndef DB_VERSION_MAJOR
9959u_int32_t hash_cb (ptr, size)
9960const void *ptr;
9961size_t size;
9962{
9963}
9964HASHINFO info;
9965main()
9966{
9967 info.hash = hash_cb;
9968}
9969#endif
9970EOCP
9971 if $cc $ccflags -c try.c >try.out 2>&1 ; then
9972 if $contains warning try.out >>/dev/null 2>&1 ; then
9973 db_hashtype='int'
9974 else
9975 db_hashtype='u_int32_t'
9976 fi
9977 else
9978 : XXX Maybe we should just give up here.
9979 db_hashtype=u_int32_t
9980 $cat try.out >&4
9981 echo "Help: I can't seem to compile the db test program." >&4
9982 echo "Something's wrong, but I'll assume you use $db_hashtype." >&4
9983 fi
9984 $rm -f try.*
9985 echo "Your version of Berkeley DB uses $db_hashtype for hash."
9986 ;;
9987*) db_hashtype=u_int32_t
9988 ;;
9989esac
9990case "$i_db" in
9991define)
4633a7c4
LW
9992 : Check the return type needed for prefix
9993 echo " "
9994 echo "Checking return type needed for prefix for Berkeley DB ..." >&4
9995 cat >try.c <<EOCP
9996#$d_const HASCONST
9997#ifndef HASCONST
9998#define const
9999#endif
10000#include <sys/types.h>
10001#include <db.h>
1f70e1ea
PM
10002
10003#ifndef DB_VERSION_MAJOR
4633a7c4
LW
10004size_t prefix_cb (key1, key2)
10005const DBT *key1;
10006const DBT *key2;
10007{
10008}
10009BTREEINFO info;
10010main()
10011{
10012 info.prefix = prefix_cb;
10013}
1f70e1ea 10014#endif
4633a7c4
LW
10015EOCP
10016 if $cc $ccflags -c try.c >try.out 2>&1 ; then
10017 if $contains warning try.out >>/dev/null 2>&1 ; then
10018 db_prefixtype='int'
10019 else
10020 db_prefixtype='size_t'
10021 fi
10022 else
68dc0745 10023 db_prefixtype='size_t'
10024 : XXX Maybe we should just give up here.
dc45a647 10025 $cat try.out >&4
68dc0745 10026 echo "Help: I can't seem to compile the db test program." >&4
10027 echo "Something's wrong, but I'll assume you use $db_prefixtype." >&4
4633a7c4
LW
10028 fi
10029 $rm -f try.*
10030 echo "Your version of Berkeley DB uses $db_prefixtype for prefix."
a0d0e21e 10031 ;;
68dc0745 10032*) db_prefixtype='size_t'
4633a7c4
LW
10033 ;;
10034esac
a0d0e21e 10035
4633a7c4
LW
10036: check for void type
10037echo " "
10038echo "Checking to see how well your C compiler groks the void type..." >&4
4633a7c4
LW
10039case "$voidflags" in
10040'')
10041 $cat >try.c <<'EOCP'
10042#if TRY & 1
760ac839 10043void sub() {
4633a7c4 10044#else
760ac839 10045sub() {
4633a7c4
LW
10046#endif
10047 extern void moo(); /* function returning void */
10048 void (*goo)(); /* ptr to func returning void */
10049#if TRY & 8
10050 void *hue; /* generic ptr */
10051#endif
10052#if TRY & 2
10053 void (*foo[10])();
10054#endif
a0d0e21e 10055
4633a7c4
LW
10056#if TRY & 4
10057 if(goo == moo) {
10058 exit(0);
10059 }
10060#endif
10061 exit(0);
10062}
760ac839 10063main() { sub(); }
4633a7c4 10064EOCP
760ac839 10065 if $cc $ccflags -c -DTRY=$defvoidused try.c >.out 2>&1 ; then
4633a7c4 10066 voidflags=$defvoidused
bfb7748a 10067 echo "Good. It appears to support void to the level $package wants.">&4
4633a7c4
LW
10068 if $contains warning .out >/dev/null 2>&1; then
10069 echo "However, you might get some warnings that look like this:"
10070 $cat .out
10071 fi
10072 else
10073echo "Hmm, your compiler has some difficulty with void. Checking further..." >&4
760ac839 10074 if $cc $ccflags -c -DTRY=1 try.c >/dev/null 2>&1; then
4633a7c4 10075 echo "It supports 1..."
760ac839 10076 if $cc $ccflags -c -DTRY=3 try.c >/dev/null 2>&1; then
4633a7c4 10077 echo "It also supports 2..."
760ac839 10078 if $cc $ccflags -c -DTRY=7 try.c >/dev/null 2>&1; then
4633a7c4
LW
10079 voidflags=7
10080 echo "And it supports 4 but not 8 definitely."
10081 else
10082 echo "It doesn't support 4..."
760ac839 10083 if $cc $ccflags -c -DTRY=11 try.c >/dev/null 2>&1; then
4633a7c4
LW
10084 voidflags=11
10085 echo "But it supports 8."
10086 else
10087 voidflags=3
10088 echo "Neither does it support 8."
10089 fi
10090 fi
10091 else
10092 echo "It does not support 2..."
760ac839 10093 if $cc $ccflags -c -DTRY=13 try.c >/dev/null 2>&1; then
4633a7c4
LW
10094 voidflags=13
10095 echo "But it supports 4 and 8."
10096 else
760ac839 10097 if $cc $ccflags -c -DTRY=5 try.c >/dev/null 2>&1; then
4633a7c4
LW
10098 voidflags=5
10099 echo "And it supports 4 but has not heard about 8."
10100 else
10101 echo "However it supports 8 but not 4."
10102 fi
10103 fi
10104 fi
10105 else
10106 echo "There is no support at all for void."
10107 voidflags=0
10108 fi
10109 fi
10110esac
4633a7c4 10111case "$voidflags" in
2c7991dc 10112"$defvoidused") ;;
bfb7748a
AD
10113*) $cat >&4 <<'EOM'
10114 Support flag bits are:
10115 1: basic void declarations.
10116 2: arrays of pointers to functions returning void.
10117 4: operations between pointers to and addresses of void functions.
10118 8: generic void pointers.
10119EOM
2c7991dc 10120 dflt="$voidflags";
4633a7c4 10121 rp="Your void support flags add up to what?"
a0d0e21e 10122 . ./myread
4633a7c4 10123 voidflags="$ans"
a0d0e21e
LW
10124 ;;
10125esac
4633a7c4 10126$rm -f try.* .out
a0d0e21e 10127
85ab1d1d
JH
10128
10129: How can we generate normalized random numbers ?
693762b4 10130echo " "
85ab1d1d 10131case "$randfunc" in
693762b4 10132'')
85ab1d1d
JH
10133 if set drand48 val -f; eval $csym; $val; then
10134 dflt="drand48"
10135 echo "Good, found drand48()." >&4
10136 elif set random val -f; eval $csym; $val; then
10137 dflt="random"
10138 echo "OK, found random()." >&4
10139 else
10140 dflt="rand"
10141 echo "Yick, looks like I have to use rand()." >&4
10142 fi
10143 echo " "
10144 ;;
10145*)
10146 dflt="$randfunc"
10147 ;;
10148esac
10149cont=true
10150
10151case "$ccflags" in
10152*-Dmy_rand=*|*-Dmy_srand=*)
10153 echo "Removing obsolete -Dmy_rand, -Dmy_srand, and -Drandbits from ccflags." >&4
10154 ccflags="`echo $ccflags | sed -e 's/-Dmy_rand=random/ /'`"
10155 ccflags="`echo $ccflags | sed -e 's/-Dmy_srand=srandom/ /'`"
10156 ccflags="`echo $ccflags | sed -e 's/-Drandbits=[0-9][0-9]*/ /'`"
10157 ;;
10158esac
10159
10160while $test "$cont"; do
10161 rp="Use which function to generate random numbers?"
10162 . ./myread
10163 if $test "$ans" = "$dflt"; then
10164 : null
10165 else
10166 randbits=''
10167 fi
10168 randfunc="$ans"
10169 if set $ans val -f; eval $csym; $val; then
10170 cont=''
10171 else
10172 dflt=n
10173 rp="Function $ans does not exists. Use that name anyway?"
10174 . ./myread
10175 dflt=rand
10176 case "$ans" in
10177 [yY]*) cont='';;
10178 esac
10179 fi
10180 case "$cont" in
10181 '')
10182 case "$randfunc" in
10183 drand48)
10184 drand01="drand48()"
10185 seedfunc="srand48"
10186 randbits=48
10187 randseedtype=long
10188 ;;
10189 rand|random)
10190 case "$randbits" in
10191 '')
10192echo "Checking to see how many bits your $randfunc() function produces..." >&4
10193 $cat >try.c <<EOCP
10194#$i_unistd I_UNISTD
10195#$i_stdlib I_STDLIB
693762b4 10196#include <stdio.h>
85ab1d1d
JH
10197#ifdef I_UNISTD
10198# include <unistd.h>
10199#endif
10200#ifdef I_STDLIB
10201# include <stdlib.h>
10202#endif
693762b4
AD
10203main()
10204{
85ab1d1d
JH
10205 register int i;
10206 register unsigned long tmp;
10207 register unsigned long max = 0L;
10208
10209 for (i = 1000; i; i--) {
10210 tmp = (unsigned long) $randfunc();
10211 if (tmp > max) max = tmp;
10212 }
10213 for (i = 0; max; i++)
10214 max /= 2;
10215 printf("%d\n",i);
693762b4
AD
10216}
10217EOCP
85ab1d1d
JH
10218 set try
10219 if eval $compile_ok; then
10220 dflt=`try`
10221 else
10222 dflt='?'
10223 echo "(I can't seem to compile the test program...)"
10224 fi
10225 ;;
10226 *)
10227 dflt="$randbits"
10228 ;;
10229 esac
10230 rp="How many bits does your $randfunc() function produce?"
10231 . ./myread
10232 randbits="$ans"
10233 $rm -f try.c try
10234 drand01="($randfunc() / (double) ((unsigned long)1 << $randbits))"
10235 seedfunc="s$randfunc"
10236 randseedtype=unsigned
10237 ;;
10238 *)
10239 dflt="31"
10240 rp="How many bits does your $randfunc() function produce?"
10241 . ./myread
10242 randbits="$ans"
10243 seedfunc="s$randfunc"
10244 drand01="($randfunc() / (double) ((unsigned long)1 << $randbits))"
10245 if set $seedfunc val -f; eval $csym; $val; then
10246 echo "(Using $seedfunc() to seed random generator)"
10247 else
10248 echo "(Warning: no $seedfunc() to seed random generator)"
10249 seedfunc=rand
10250 fi
10251 randseedtype=unsigned
10252 ;;
10253 esac
10254 ;;
10255 esac
10256done
693762b4 10257
5ff3f7a4
GS
10258echo " "
10259echo "Determining whether or not we are on an EBCDIC system..." >&4
10260$cat >tebcdic.c <<'EOM'
10261int main()
10262{
10263 if ('M'==0xd4) return 0;
10264 return 1;
10265}
10266EOM
10267
10268val=$undef
10269set tebcdic
10270if eval $compile_ok; then
10271 if ./tebcdic; then
10272 echo "You have EBCDIC." >&4
10273 val="$define"
10274 else
10275 echo "Nope, no EBCDIC. Assuming ASCII or some ISO Latin." >&4
10276 fi
10277else
10278 echo "$me: I'm unable to compile the test program." >&4
10279 echo "I'll assume ASCII or some ISO Latin." >&4
10280fi
10281$rm -f tebcdic.c tebcdic
10282set ebcdic
10283eval $setvar
10284
a0d0e21e 10285: see what type file positions are declared as in the library
a0d0e21e 10286rp="What is the type for file position used by fsetpos()?"
dc45a647
MB
10287set fpos_t fpostype long stdio.h sys/types.h
10288eval $typedef_ask
2304df62 10289
e5c9fcd0
AD
10290: get csh whereabouts
10291case "$csh" in
10292'csh') val="$undef" ;;
10293*) val="$define" ;;
10294esac
10295set d_csh
10296eval $setvar
10297: Respect a hint or command line value for full_csh.
10298case "$full_csh" in
10299'') full_csh=$csh ;;
10300esac
10301
1aef975c
AD
10302: Store the full pathname to the sed program for use in the C program
10303full_sed=$sed
10304
2304df62 10305: see what type gids are declared as in the kernel
dc45a647
MB
10306echo " "
10307echo "Looking for the type for group ids returned by getgid()."
a0d0e21e
LW
10308set gid_t gidtype xxx stdio.h sys/types.h
10309eval $typedef
2304df62 10310case "$gidtype" in
a0d0e21e
LW
10311xxx)
10312 xxx=`./findhdr sys/user.h`
10313 set `grep 'groups\[NGROUPS\];' "$xxx" 2>/dev/null` unsigned short
10314 case $1 in
10315 unsigned) dflt="$1 $2" ;;
10316 *) dflt="$1" ;;
10317 esac
2304df62 10318 ;;
a0d0e21e 10319*) dflt="$gidtype";;
2304df62 10320esac
dc45a647
MB
10321case "$gidtype" in
10322gid_t) echo "gid_t found." ;;
10323*) rp="What is the type for group ids returned by getgid()?"
10324 . ./myread
10325 gidtype="$ans"
10326 ;;
10327esac
a0d0e21e 10328
2304df62
AD
10329: see if getgroups exists
10330set getgroups d_getgrps
10331eval $inlibc
10332
5cd24f17 10333: see if setgroups exists
10334set setgroups d_setgrps
10335eval $inlibc
10336
dfe9444c 10337
8cc95fdb 10338: Find type of 2nd arg to 'getgroups()' and 'setgroups()'
a0d0e21e 10339echo " "
5cd24f17 10340case "$d_getgrps$d_setgrps" in
10341*define*)
a0d0e21e 10342 case "$groupstype" in
2304df62
AD
10343 '') dflt="$gidtype" ;;
10344 *) dflt="$groupstype" ;;
a0d0e21e
LW
10345 esac
10346 $cat <<EOM
dc45a647 10347What type of pointer is the second argument to getgroups() and setgroups()?
5cd24f17 10348Usually this is the same as group ids, $gidtype, but not always.
2304df62
AD
10349
10350EOM
dc45a647 10351 rp='What type pointer is the second argument to getgroups() and setgroups()?'
a0d0e21e
LW
10352 . ./myread
10353 groupstype="$ans"
10354 ;;
10355*) groupstype="$gidtype";;
2304df62 10356esac
2304df62 10357
85e6fe83 10358: see what type lseek is declared as in the kernel
dc45a647 10359rp="What is the type used for lseek's offset on this system?"
a0d0e21e 10360set off_t lseektype long stdio.h sys/types.h
dc45a647 10361eval $typedef_ask
2304df62 10362
8ff267be 10363echo " "
5ff3f7a4
GS
10364$echo $n "Checking to see how big your file offsets are...$c" >&4
10365$cat >try.c <<EOCP
10366#include <sys/types.h>
10367#include <stdio.h>
10368main()
10369{
10370 printf("%d\n", sizeof($lseektype));
10371}
10372EOCP
10373set try
10374if eval $compile_ok; then
10375 lseeksize=`./try`
10376 $echo " $lseeksize bytes." >&4
10377else
10378 dflt='4'
10379 echo " "
10380 echo "(I can't seem to compile the test program. Guessing...)"
10381 rp="What is the size of your file offsets (in bytes)?"
10382 . ./myread
10383 lseeksize="$ans"
10384fi
10385$rm -f try.c try
10386
10387echo " "
dfe9444c 10388echo "Checking if your $make program sets \$(MAKE)..." >&4
8ff267be 10389case "$make_set_make" in
10390'')
10391 $sed 's/^X //' > testmake.mak << 'EOF'
10392Xall:
dfe9444c 10393X @echo 'maketemp="$(MAKE)"'
8ff267be 10394EOF
8ff267be 10395 case "`$make -f testmake.mak 2>/dev/null`" in
dfe9444c 10396 *maketemp=*) make_set_make='#' ;;
8ff267be 10397 *) make_set_make="MAKE=$make" ;;
10398 esac
dfe9444c
AD
10399 $rm -f testmake.mak
10400 ;;
10401esac
10402case "$make_set_make" in
10403'#') echo "Yup, it does.";;
10404*) echo "Nope, it doesn't.";;
10405esac
10406
10407: see what type is used for mode_t
dc45a647 10408rp="What is the type used for file modes for system calls (e.g. fchmod())?"
dfe9444c 10409set mode_t modetype int stdio.h sys/types.h
dc45a647 10410eval $typedef_ask
dfe9444c 10411
dfe9444c
AD
10412: define a fucntion to check prototypes
10413$cat > protochk <<EOSH
10414$startsh
10415cc="$cc"
10416optimize="$optimize"
10417ccflags="$ccflags"
10418prototype="$prototype"
10419define="$define"
10420rm=$rm
10421EOSH
10422
10423$cat >> protochk <<'EOSH'
10424
10425$rm -f try.c
10426foo="$1"
10427shift
10428while test $# -ge 2; do
10429 case "$1" in
10430 $define) echo "#include <$2>" >> try.c ;;
10431 literal) echo "$2" >> try.c ;;
10432 esac
10433 shift 2
10434done
10435test "$prototype" = "$define" && echo '#define CAN_PROTOTYPE' >> try.c
10436cat >> try.c <<'EOCP'
10437#ifdef CAN_PROTOTYPE
10438#define _(args) args
10439#else
10440#define _(args) ()
10441#endif
10442EOCP
10443echo "$foo" >> try.c
10444echo 'int no_real_function_has_this_name _((void)) { return 0; }' >> try.c
10445$cc $optimize $ccflags -c try.c > /dev/null 2>&1
10446status=$?
10447$rm -f try.[co]
10448exit $status
10449EOSH
10450chmod +x protochk
10451$eunicefix protochk
10452
dfe9444c 10453: see what type is used for size_t
dc45a647 10454rp="What is the type used for the length parameter for string functions?"
dfe9444c 10455set size_t sizetype 'unsigned int' stdio.h sys/types.h
dc45a647 10456eval $typedef_ask
dfe9444c
AD
10457
10458: check for type of arguments to gethostbyaddr.
10459if test "X$netdb_host_type" = X -o "X$netdb_hlen_type" = X; then
10460 case "$d_gethbyaddr" in
10461 $define)
10462 $cat <<EOM
10463
10464Checking to see what type of arguments are accepted by gethostbyaddr().
10465EOM
10466 hdrs="$define sys/types.h
10467 $d_socket sys/socket.h
10468 $i_niin netinet/in.h
10469 $i_netdb netdb.h
10470 $i_unistd unistd.h"
10471 : The first arg can 'char *' or 'void *'
10472 : The second arg is some of integral type
10473 for xxx in in_addr_t 'const void *' 'const char *' 'void *' 'char *'; do
10474 for yyy in size_t long int; do
10475 case "$netdb_host_type" in
10476 '') try="extern struct hostent *gethostbyaddr($xxx, $yyy, int);"
10477 if ./protochk "$try" $hdrs; then
10478 echo "Your system accepts $xxx for the first arg."
10479 echo "...and $yyy for the second arg."
10480 netdb_host_type="$xxx"
10481 netdb_hlen_type="$yyy"
10482 fi
10483 ;;
10484 esac
10485 done
10486 done
10487 : In case none of those worked, prompt the user.
10488 case "$netdb_host_type" in
10489 '') rp='What is the type for the 1st argument to gethostbyaddr?'
10490 dflt='char *'
10491 . ./myread
10492 netdb_host_type=$ans
10493 rp='What is the type for the 2nd argument to gethostbyaddr?'
10494 dflt="$sizetype"
10495 . ./myread
10496 netdb_hlen_type=$ans
10497 ;;
10498 esac
10499 ;;
10500 *) : no gethostbyaddr, so pick harmless defaults
10501 netdb_host_type='char *'
10502 netdb_hlen_type="$sizetype"
10503 ;;
10504 esac
10505 # Remove the "const" if needed. -- but then we'll have a
10506 # prototype clash!
10507 # netdb_host_type=`echo "$netdb_host_type" | sed 's/^const //'`
10508fi
10509
10510: check for type of argument to gethostbyname.
10511if test "X$netdb_name_type" = X ; then
10512 case "$d_gethbyname" in
10513 $define)
10514 $cat <<EOM
10515
10516Checking to see what type of argument is accepted by gethostbyname().
10517EOM
10518 hdrs="$define sys/types.h
10519 $d_socket sys/socket.h
10520 $i_niin netinet/in.h
10521 $i_netdb netdb.h
10522 $i_unistd unistd.h"
10523 for xxx in "const char *" "char *"; do
10524 case "$netdb_name_type" in
10525 '') try="extern struct hostent *gethostbyname($xxx);"
10526 if ./protochk "$try" $hdrs; then
10527 echo "Your system accepts $xxx."
10528 netdb_name_type="$xxx"
10529 fi
10530 ;;
10531 esac
10532 done
10533 : In case none of those worked, prompt the user.
10534 case "$netdb_name_type" in
10535 '') rp='What is the type for the 1st argument to gethostbyname?'
10536 dflt='char *'
10537 . ./myread
10538 netdb_name_type=$ans
10539 ;;
10540 esac
10541 ;;
10542 *) : no gethostbyname, so pick harmless default
10543 netdb_name_type='char *'
10544 ;;
10545 esac
10546fi
8ff267be 10547
dfe9444c
AD
10548: check for type of 1st argument to getnetbyaddr.
10549if test "X$netdb_net_type" = X ; then
10550 case "$d_getnbyaddr" in
10551 $define)
10552 $cat <<EOM
85e6fe83 10553
dfe9444c
AD
10554Checking to see what type of 1st argument is accepted by getnetbyaddr().
10555EOM
10556 hdrs="$define sys/types.h
10557 $d_socket sys/socket.h
10558 $i_niin netinet/in.h
10559 $i_netdb netdb.h
10560 $i_unistd unistd.h"
10561 for xxx in in_addr_t "unsigned long" long "unsigned int" int; do
10562 case "$netdb_net_type" in
10563 '') try="extern struct netent *getnetbyaddr($xxx, int);"
10564 if ./protochk "$try" $hdrs; then
10565 echo "Your system accepts $xxx."
10566 netdb_net_type="$xxx"
10567 fi
10568 ;;
10569 esac
10570 done
10571 : In case none of those worked, prompt the user.
10572 case "$netdb_net_type" in
10573 '') rp='What is the type for the 1st argument to getnetbyaddr?'
10574 dflt='long'
10575 . ./myread
10576 netdb_net_type=$ans
10577 ;;
10578 esac
10579 ;;
10580 *) : no getnetbyaddr, so pick harmless default
e5c9fcd0 10581 netdb_net_type='long'
dfe9444c
AD
10582 ;;
10583 esac
10584fi
2c7991dc 10585: locate the preferred pager for this system
10586case "$pager" in
10587'')
10588 dflt=''
10589 case "$pg" in
10590 /*) dflt=$pg;;
10591 esac
10592 case "$more" in
10593 /*) dflt=$more;;
10594 esac
10595 case "$less" in
10596 /*) dflt=$less;;
10597 esac
10598 case "$dflt" in
10599 '') dflt=/usr/ucb/more;;
10600 esac
10601 ;;
10602*) dflt="$pager";;
10603esac
10604echo " "
10605fn=f/
10606rp='What pager is used on your system?'
10607. ./getfile
10608pager="$ans"
10609
dfe9444c 10610: see what type pids are declared as in the kernel
dc45a647 10611rp="What is the type of process ids on this system?"
dfe9444c 10612set pid_t pidtype int stdio.h sys/types.h
dc45a647 10613eval $typedef_ask
2304df62 10614
693762b4
AD
10615: check for length of pointer
10616echo " "
10617case "$ptrsize" in
10618'')
dc45a647 10619 $echo $n "Checking to see how big your pointers are...$c" >&4
693762b4
AD
10620 if test "$voidflags" -gt 7; then
10621 echo '#define VOID_PTR char *' > try.c
10622 else
10623 echo '#define VOID_PTR void *' > try.c
10624 fi
10625 $cat >>try.c <<'EOCP'
10626#include <stdio.h>
10627main()
10628{
10629 printf("%d\n", sizeof(VOID_PTR));
10630 exit(0);
10631}
10632EOCP
10633 set try
dc45a647 10634 if eval $compile_ok; then
693762b4 10635 ptrsize=`./try`
dc45a647 10636 $echo " $ptrsize bytes." >&4
693762b4
AD
10637 else
10638 dflt='4'
10639 echo "(I can't seem to compile the test program. Guessing...)" >&4
10640 rp="What is the size of a pointer (in bytes)?"
10641 . ./myread
10642 ptrsize="$ans"
10643 fi
10644 ;;
10645esac
10646$rm -f try.c try
10647
a0d0e21e
LW
10648: see if ar generates random libraries by itself
10649echo " "
10650echo "Checking how to generate random libraries on your machine..." >&4
10651echo 'int bar1() { return bar2(); }' > bar1.c
10652echo 'int bar2() { return 2; }' > bar2.c
10653$cat > foo.c <<'EOP'
10654main() { printf("%d\n", bar1()); exit(0); }
10655EOP
10656$cc $ccflags -c bar1.c >/dev/null 2>&1
10657$cc $ccflags -c bar2.c >/dev/null 2>&1
10658$cc $ccflags -c foo.c >/dev/null 2>&1
dfe9444c
AD
10659$ar rc bar$_a bar2$_o bar1$_o >/dev/null 2>&1
10660if $cc $ccflags $ldflags -o foobar foo$_o bar$_a $libs > /dev/null 2>&1 &&
a0d0e21e 10661 ./foobar >/dev/null 2>&1; then
4e2a5f63 10662 echo "$ar appears to generate random libraries itself."
a0d0e21e
LW
10663 orderlib=false
10664 ranlib=":"
dfe9444c
AD
10665elif $ar ts bar$_a >/dev/null 2>&1 &&
10666 $cc $ccflags $ldflags -o foobar foo$_o bar$_a $libs > /dev/null 2>&1 &&
a0d0e21e 10667 ./foobar >/dev/null 2>&1; then
4e2a5f63 10668 echo "a table of contents needs to be added with '$ar ts'."
a0d0e21e 10669 orderlib=false
dfe9444c 10670 ranlib="$ar ts"
a0d0e21e 10671else
ecfc5424
AD
10672 case "$ranlib" in
10673 :) ranlib='';;
10674 '')
10675 ranlib=`./loc ranlib X /usr/bin /bin /usr/local/bin`
10676 $test -f $ranlib || ranlib=''
10677 ;;
10678 esac
a0d0e21e 10679 if $test -n "$ranlib"; then
ecfc5424 10680 echo "your system has '$ranlib'; we'll use that."
a0d0e21e
LW
10681 orderlib=false
10682 else
10683 echo "your system doesn't seem to support random libraries"
10684 echo "so we'll use lorder and tsort to order the libraries."
10685 orderlib=true
10686 ranlib=":"
10687 fi
10688fi
10689$rm -f foo* bar*
10690
a0d0e21e
LW
10691: see if sys/select.h has to be included
10692set sys/select.h i_sysselct
10693eval $inhdr
10694
10695: see if we should include time.h, sys/time.h, or both
10696echo " "
28e8609d 10697if test "X$timeincl" = X; then
5ff3f7a4
GS
10698 echo "Testing to see if we should include <time.h>, <sys/time.h> or both." >&4
10699 $echo $n "I'm now running the test program...$c"
10700 $cat >try.c <<'EOCP'
a0d0e21e
LW
10701#include <sys/types.h>
10702#ifdef I_TIME
10703#include <time.h>
10704#endif
10705#ifdef I_SYSTIME
10706#ifdef SYSTIMEKERNEL
10707#define KERNEL
10708#endif
10709#include <sys/time.h>
10710#endif
10711#ifdef I_SYSSELECT
10712#include <sys/select.h>
10713#endif
10714main()
10715{
10716 struct tm foo;
10717#ifdef S_TIMEVAL
10718 struct timeval bar;
10719#endif
10720#ifdef S_TIMEZONE
10721 struct timezone tzp;
10722#endif
10723 if (foo.tm_sec == foo.tm_sec)
10724 exit(0);
10725#ifdef S_TIMEVAL
10726 if (bar.tv_sec == bar.tv_sec)
10727 exit(0);
10728#endif
10729 exit(1);
10730}
10731EOCP
5ff3f7a4
GS
10732 flags=''
10733 for s_timezone in '-DS_TIMEZONE' ''; do
10734 sysselect=''
10735 for s_timeval in '-DS_TIMEVAL' ''; do
10736 for i_systimek in '' '-DSYSTIMEKERNEL'; do
10737 for i_time in '' '-DI_TIME'; do
10738 for i_systime in '-DI_SYSTIME' ''; do
10739 case "$flags" in
10740 '') $echo $n ".$c"
10741 set try $i_time $i_systime $i_systimek $sysselect $s_timeval $s_timezone
10742 if eval $compile; then
dfe9444c 10743 set X $i_time $i_systime $i_systimek $sysselect $s_timeval
5ff3f7a4
GS
10744 shift
10745 flags="$*"
10746 echo " "
10747 $echo $n "Succeeded with $flags$c"
10748 fi
10749 ;;
10750 esac
10751 done
10752 done
10753 done
10754 done
10755 done
10756 timeincl=''
10757 echo " "
10758 case "$flags" in
10759 *SYSTIMEKERNEL*) i_systimek="$define"
10760 timeincl=`./findhdr sys/time.h`
10761 echo "We'll include <sys/time.h> with KERNEL defined." >&4;;
10762 *) i_systimek="$undef";;
a0d0e21e 10763 esac
5ff3f7a4
GS
10764 case "$flags" in
10765 *I_TIME*) i_time="$define"
10766 timeincl=`./findhdr time.h`" $timeincl"
10767 echo "We'll include <time.h>." >&4;;
10768 *) i_time="$undef";;
10769 esac
10770 case "$flags" in
10771 *I_SYSTIME*) i_systime="$define"
10772 timeincl=`./findhdr sys/time.h`" $timeincl"
10773 echo "We'll include <sys/time.h>." >&4;;
10774 *) i_systime="$undef";;
10775 esac
10776 $rm -f try.c try
28e8609d 10777fi
2304df62 10778
a0d0e21e
LW
10779: check for fd_set items
10780$cat <<EOM
10781
10782Checking to see how well your C compiler handles fd_set and friends ...
10783EOM
10784$cat >fd_set.c <<EOCP
10785#$i_systime I_SYS_TIME
10786#$i_sysselct I_SYS_SELECT
10787#$d_socket HAS_SOCKET
10788#include <sys/types.h>
10789#ifdef HAS_SOCKET
10790#include <sys/socket.h> /* Might include <sys/bsdtypes.h> */
10791#endif
10792#ifdef I_SYS_TIME
10793#include <sys/time.h>
a4f3eea9 10794#endif
a0d0e21e
LW
10795#ifdef I_SYS_SELECT
10796#include <sys/select.h>
10797#endif
a0d0e21e
LW
10798main() {
10799 fd_set fds;
10800
10801#ifdef TRYBITS
10802 if(fds.fds_bits);
10803#endif
10804
10805#if defined(FD_SET) && defined(FD_CLR) && defined(FD_ISSET) && defined(FD_ZERO)
10806 exit(0);
10807#else
10808 exit(1);
10809#endif
10810}
10811EOCP
dfe9444c
AD
10812set fd_set -DTRYBITS
10813if eval $compile; then
a0d0e21e
LW
10814 d_fds_bits="$define"
10815 d_fd_set="$define"
10816 echo "Well, your system knows about the normal fd_set typedef..." >&4
10817 if ./fd_set; then
10818 echo "and you have the normal fd_set macros (just as I'd expect)." >&4
10819 d_fd_macros="$define"
85e6fe83 10820 else
a0d0e21e
LW
10821 $cat >&4 <<'EOM'
10822but not the normal fd_set macros! Gaaack! I'll have to cover for you.
10823EOM
10824 d_fd_macros="$undef"
85e6fe83
LW
10825 fi
10826else
a0d0e21e
LW
10827 $cat <<'EOM'
10828Hmm, your compiler has some difficulty with fd_set. Checking further...
10829EOM
dfe9444c
AD
10830 set fd_set
10831 if eval $compile; then
a0d0e21e
LW
10832 d_fds_bits="$undef"
10833 d_fd_set="$define"
10834 echo "Well, your system has some sort of fd_set available..." >&4
10835 if ./fd_set; then
10836 echo "and you have the normal fd_set macros." >&4
10837 d_fd_macros="$define"
10838 else
10839 $cat <<'EOM'
10840but not the normal fd_set macros! Gross! More work for me...
10841EOM
10842 d_fd_macros="$undef"
10843 fi
85e6fe83 10844 else
a0d0e21e
LW
10845 echo "Well, you got zip. That's OK, I can roll my own fd_set stuff." >&4
10846 d_fd_set="$undef"
10847 d_fds_bits="$undef"
10848 d_fd_macros="$undef"
85e6fe83
LW
10849 fi
10850fi
a0d0e21e
LW
10851$rm -f fd_set*
10852
dfe9444c
AD
10853: check for type of arguments to select.
10854case "$selecttype" in
10855'') case "$d_select" in
10856 $define)
10857 $cat <<EOM
10858Checking to see what type of arguments are accepted by select().
10859EOM
10860 hdrs="$define sys/types.h
10861 $i_systime sys/time.h
10862 $i_sysselct sys/select.h
10863 $d_socket sys/socket.h"
10864 : The first arg can be int, unsigned, or size_t
10865 : The last arg may or may not be 'const'
10866 val=''
1cfa4ec7
GS
10867 for xxx in 'fd_set *' 'int *' 'void *'; do
10868 for nfd in 'int' 'size_t' 'unsigned long' 'unsigned' ; do
dfe9444c
AD
10869 for tmo in 'struct timeval *' 'const struct timeval *'; do
10870 case "$val" in
10871 '') try="extern select _(($nfd, $xxx, $xxx, $xxx, $tmo));"
10872 if ./protochk "$try" $hdrs; then
10873 echo "Your system accepts $xxx."
10874 val="$xxx"
10875 fi
10876 ;;
10877 esac
10878 done
10879 done
10880 done
10881 case "$val" in
10882 '') rp='What is the type for the 2nd, 3rd, and 4th arguments to select?'
10883 case "$d_fd_set" in
10884 $define) dflt="fd_set *" ;;
10885 *) dflt="int *" ;;
10886 esac
10887 . ./myread
10888 val=$ans
10889 ;;
a0d0e21e 10890 esac
dfe9444c 10891 selecttype="$val"
a0d0e21e 10892 ;;
dfe9444c
AD
10893 *) : no select, so pick a harmless default
10894 selecttype='int *'
a0d0e21e
LW
10895 ;;
10896 esac
a0d0e21e
LW
10897 ;;
10898esac
2304df62 10899
5ff3f7a4
GS
10900: check for the select 'width'
10901case "$selectminbits" in
10902'') case "$d_select" in
10903 $define)
10904 $cat <<EOM
10905
85ab1d1d 10906Checking to see on how many bits at a time your select() operates...
5ff3f7a4
GS
10907EOM
10908 $cat >try.c <<EOCP
10909#include <sys/types.h>
10910#$i_time I_TIME
10911#$i_systime I_SYS_TIME
10912#$i_systimek I_SYS_TIME_KERNEL
10913#ifdef I_TIME
10914# include <time.h>
10915#endif
10916#ifdef I_SYS_TIME
10917# ifdef I_SYS_TIME_KERNEL
10918# define KERNEL
10919# endif
10920# include <sys/time.h>
10921# ifdef I_SYS_TIME_KERNEL
10922# undef KERNEL
10923# endif
10924#endif
10925#$i_sysselct I_SYS_SELECT
10926#ifdef I_SYS_SELECT
10927#include <sys/select.h>
10928#endif
10929#include <stdio.h>
fb164848
JH
10930$selecttype b;
10931#define S sizeof(*(b))
5ff3f7a4
GS
10932#define MINBITS 64
10933#define NBYTES (S * 8 > MINBITS ? S : MINBITS/8)
10934#define NBITS (NBYTES * 8)
10935int main() {
10936 char s[NBYTES];
5ff3f7a4
GS
10937 struct timeval t;
10938 int i;
10939 FILE* fp;
10940 int fd;
10941
10942 fclose(stdin);
10943 fp = fopen("try.c", "r");
10944 if (fp == 0)
10945 exit(1);
10946 fd = fileno(fp);
10947 if (fd < 0)
10948 exit(2);
10949 b = ($selecttype)s;
10950 for (i = 0; i < NBITS; i++)
10951 FD_SET(i, b);
10952 t.tv_sec = 0;
10953 t.tv_usec = 0;
10954 select(fd + 1, b, 0, 0, &t);
10955 for (i = NBITS - 1; i > fd && FD_ISSET(i, b); i--);
10956 printf("%d\n", i + 1);
10957 return 0;
10958}
10959EOCP
10960 set try
10961 if eval $compile_ok; then
10962 selectminbits=`./try`
85ab1d1d 10963 case "$selectminbits" in
fb164848
JH
10964 '') cat >&4 <<EOM
10965Cannot figure out on how many bits at a time your select() operates.
10966I'll play safe and guess it is 32 bits.
10967EOM
10968 selectminbits=32
10969 bits="32 bits"
10970 ;;
85ab1d1d
JH
10971 1) bits="1 bit" ;;
10972 *) bits="$selectminbits bits" ;;
10973 esac
10974 echo "Your select() operates on $bits at a time." >&4
5ff3f7a4
GS
10975 else
10976 rp='What is the minimum number of bits your select() operates on?'
10977 case "$byteorder" in
10978 1234|12345678) dflt=32 ;;
10979 *) dflt=1 ;;
10980 esac
10981 . ./myread
10982 val=$ans
10983 selectminbits="$val"
10984 fi
10985 $rm -f try.* try
10986 ;;
10987 *) : no select, so pick a harmless default
10988 selectminbits='32'
10989 ;;
10990 esac
10991 ;;
10992esac
10993
8e07c86e
AD
10994: Trace out the files included by signal.h, then look for SIGxxx names.
10995: Remove SIGARRAYSIZE used by HPUX.
4633a7c4 10996: Remove SIGTYP void lines used by OS2.
8e07c86e
AD
10997xxx=`echo '#include <signal.h>' |
10998 $cppstdin $cppminus $cppflags 2>/dev/null |
10999 $grep '^[ ]*#.*include' |
11000 $awk "{print \\$$fieldn}" | $sed 's!"!!g' | $sort | $uniq`
11001: Check this list of files to be sure we have parsed the cpp output ok.
11002: This will also avoid potentially non-existent files, such
11003: as ../foo/bar.h
11004xxxfiles=''
11005for xx in $xxx /dev/null ; do
11006 $test -f "$xx" && xxxfiles="$xxxfiles $xx"
11007done
11008: If we have found no files, at least try signal.h
11009case "$xxxfiles" in
11010'') xxxfiles=`./findhdr signal.h` ;;
11011esac
11012xxx=`awk '
4633a7c4 11013$1 ~ /^#define$/ && $2 ~ /^SIG[A-Z0-9]*$/ && $2 !~ /SIGARRAYSIZE/ && $3 !~ /void/ {
8e07c86e
AD
11014 print substr($2, 4, 20)
11015}
4633a7c4 11016$1 == "#" && $2 ~ /^define$/ && $3 ~ /^SIG[A-Z0-9]*$/ && $3 !~ /SIGARRAYSIZE/ && $4 !~ /void/ {
8e07c86e
AD
11017 print substr($3, 4, 20)
11018}' $xxxfiles`
11019: Append some common names just in case the awk scan failed.
11020xxx="$xxx ABRT ALRM BUS CHLD CLD CONT DIL EMT FPE HUP ILL INT IO IOT KILL"
11021xxx="$xxx LOST PHONE PIPE POLL PROF PWR QUIT SEGV STKFLT STOP SYS TERM TRAP"
11022xxx="$xxx TSTP TTIN TTOU URG USR1 USR2 USR3 USR4 VTALRM"
11023xxx="$xxx WINCH WIND WINDOW XCPU XFSZ"
11024: generate a few handy files for later
dc45a647 11025$cat > signal.c <<'EOCP'
4633a7c4
LW
11026#include <sys/types.h>
11027#include <signal.h>
dc45a647 11028#include <stdio.h>
4633a7c4 11029int main() {
760ac839
LW
11030
11031/* Strange style to avoid deeply-nested #if/#else/#endif */
11032#ifndef NSIG
11033# ifdef _NSIG
11034# define NSIG (_NSIG)
11035# endif
11036#endif
11037
11038#ifndef NSIG
11039# ifdef SIGMAX
11040# define NSIG (SIGMAX+1)
11041# endif
11042#endif
11043
11044#ifndef NSIG
11045# ifdef SIG_MAX
11046# define NSIG (SIG_MAX+1)
11047# endif
11048#endif
11049
11050#ifndef NSIG
11051# ifdef MAXSIG
11052# define NSIG (MAXSIG+1)
11053# endif
4633a7c4 11054#endif
760ac839
LW
11055
11056#ifndef NSIG
11057# ifdef MAX_SIG
11058# define NSIG (MAX_SIG+1)
11059# endif
11060#endif
11061
11062#ifndef NSIG
11063# ifdef SIGARRAYSIZE
11064# define NSIG (SIGARRAYSIZE+1) /* Not sure of the +1 */
11065# endif
11066#endif
11067
11068#ifndef NSIG
11069# ifdef _sys_nsig
11070# define NSIG (_sys_nsig) /* Solaris 2.5 */
11071# endif
11072#endif
11073
11074/* Default to some arbitrary number that's big enough to get most
11075 of the common signals.
11076*/
11077#ifndef NSIG
11078# define NSIG 50
4633a7c4 11079#endif
760ac839
LW
11080
11081printf("NSIG %d\n", NSIG);
11082
dc45a647
MB
11083#ifndef JUST_NSIG
11084
11085EOCP
11086
28e8609d 11087echo $xxx | $tr ' ' $trnl | $sort | $uniq | $awk '
8e07c86e
AD
11088{
11089 printf "#ifdef SIG"; printf $1; printf "\n"
11090 printf "printf(\""; printf $1; printf " %%d\\n\",SIG";
11091 printf $1; printf ");\n"
11092 printf "#endif\n"
2304df62 11093}
2304df62 11094END {
dc45a647 11095 printf "#endif /* JUST_NSIG */\n";
8e07c86e 11096 printf "}\n";
2304df62 11097}
4633a7c4
LW
11098' >>signal.c
11099$cat >signal.awk <<'EOP'
11100BEGIN { ndups = 0 }
11101$1 ~ /^NSIG$/ { nsig = $2 }
11102($1 !~ /^NSIG$/) && (NF == 2) {
11103 if ($2 > maxsig) { maxsig = $2 }
11104 if (sig_name[$2]) {
11105 dup_name[ndups] = $1
11106 dup_num[ndups] = $2
11107 ndups++
11108 }
11109 else {
11110 sig_name[$2] = $1
11111 sig_num[$2] = $2
11112 }
11113
11114}
11115END {
11116 if (nsig == 0) { nsig = maxsig + 1 }
11117 for (n = 1; n < nsig; n++) {
11118 if (sig_name[n]) {
11119 printf("%s %d\n", sig_name[n], sig_num[n])
11120 }
11121 else {
11122 printf("NUM%d %d\n", n, n)
11123 }
11124 }
11125 for (n = 0; n < ndups; n++) {
11126 printf("%s %d\n", dup_name[n], dup_num[n])
11127 }
11128}
11129EOP
11130$cat >signal_cmd <<EOS
8e07c86e 11131$startsh
dc45a647
MB
11132if $test -s signal.lst; then
11133 echo "Using your existing signal.lst file"
11134 exit 0
11135fi
11136xxx="$xxx"
11137EOS
11138$cat >>signal_cmd <<'EOS'
11139
11140set signal
11141if eval $compile_ok; then
dfe9444c 11142 ./signal$_exe | $sort -n +1 | $uniq | $awk -f signal.awk >signal.lst
8e07c86e 11143else
dc45a647
MB
11144 echo "(I can't seem be able to compile the whole test program)" >&4
11145 echo "(I'll try it in little pieces.)" >&4
11146 set signal -DJUST_NSIG
11147 if eval $compile_ok; then
11148 ./signal$_exe > signal.nsg
11149 $cat signal.nsg
11150 else
11151 echo "I can't seem to figure out how many signals you have." >&4
11152 echo "Guessing 50." >&4
11153 echo 'NSIG 50' > signal.nsg
11154 fi
11155 : Now look at all the signal names, one at a time.
28e8609d 11156 for xx in `echo $xxx | $tr ' ' $trnl | $sort | $uniq`; do
dc45a647
MB
11157 $cat > signal.c <<EOCP
11158#include <sys/types.h>
11159#include <signal.h>
11160#include <stdio.h>
11161int main() {
11162printf("$xx %d\n", SIG${xx});
11163return 0;
11164}
11165EOCP
11166 set signal
11167 if eval $compile; then
11168 echo "SIG${xx} found."
11169 ./signal$_exe >> signal.ls1
11170 else
11171 echo "SIG${xx} NOT found."
11172 fi
11173 done
11174 if $test -s signal.ls1; then
11175 $cat signal.nsg signal.ls1 |
11176 $sort -n +1 | $uniq | $awk -f signal.awk >signal.lst
11177 fi
11178
11179fi
11180if $test -s signal.lst; then
11181 :
11182else
11183 echo "(AAK! I can't compile the test programs -- Guessing)" >&4
8e07c86e 11184 echo 'kill -l' >signal
dc45a647 11185 set X `csh -f <signal`
8e07c86e 11186 $rm -f signal
2304df62 11187 shift
dc45a647 11188 case $# in
8e07c86e 11189 0) set HUP INT QUIT ILL TRAP ABRT EMT FPE KILL BUS SEGV SYS PIPE ALRM TERM;;
2304df62 11190 esac
28e8609d 11191 echo $@ | $tr ' ' $trnl | \
dc45a647 11192 $awk '{ printf $1; printf " %d\n", ++s; }' >signal.lst
8e07c86e 11193fi
dc45a647 11194$rm -f signal.c signal$_exe signal$_o signal.nsg signal.ls1
8e07c86e 11195EOS
4633a7c4
LW
11196chmod a+x signal_cmd
11197$eunicefix signal_cmd
8e07c86e
AD
11198
11199: generate list of signal names
11200echo " "
dfe9444c 11201case "$sig_name_init" in
8e07c86e 11202'')
4633a7c4 11203 echo "Generating a list of signal names and numbers..." >&4
dc45a647 11204 . ./signal_cmd
8e07c86e
AD
11205 sig_name=`$awk '{printf "%s ", $1}' signal.lst`
11206 sig_name="ZERO $sig_name"
dfe9444c
AD
11207 sig_name_init=`$awk 'BEGIN { printf "\"ZERO\", " }
11208 { printf "\"%s\", ", $1 }
11209 END { printf "0\n" }' signal.lst`
11210 sig_num=`$awk 'BEGIN { printf "0, " }
11211 { printf "%d, ", $2}
11212 END { printf "0\n"}' signal.lst`
a0d0e21e 11213 ;;
2304df62 11214esac
a0d0e21e
LW
11215echo "The following signals are available:"
11216echo " "
11217echo $sig_name | $awk \
11218'BEGIN { linelen = 0 }
11219{
8e07c86e 11220 for (i = 1; i <= NF; i++) {
a0d0e21e
LW
11221 name = "SIG" $i " "
11222 linelen = linelen + length(name)
11223 if (linelen > 70) {
11224 printf "\n"
11225 linelen = length(name)
11226 }
11227 printf "%s", name
11228 }
8e07c86e 11229 printf "\n"
a0d0e21e 11230}'
4633a7c4 11231$rm -f signal signal.c signal.awk signal.lst signal_cmd
a0d0e21e 11232
a0d0e21e
LW
11233: see what type is used for signed size_t
11234set ssize_t ssizetype int stdio.h sys/types.h
11235eval $typedef
11236dflt="$ssizetype"
11237$cat > ssize.c <<EOM
11238#include <stdio.h>
11239#include <sys/types.h>
11240#define Size_t $sizetype
11241#define SSize_t $dflt
11242main()
11243{
11244 if (sizeof(Size_t) == sizeof(SSize_t))
11245 printf("$dflt\n");
11246 else if (sizeof(Size_t) == sizeof(int))
11247 printf("int\n");
11248 else
11249 printf("long\n");
760ac839 11250 exit(0);
a0d0e21e
LW
11251}
11252EOM
11253echo " "
dfe9444c 11254set ssize
dc45a647 11255if eval $compile_ok && ./ssize > /dev/null; then
dfe9444c 11256 ssizetype=`./ssize`
a0d0e21e
LW
11257 echo "I'll be using $ssizetype for functions returning a byte count." >&4
11258else
24fef2a7 11259 $cat >&4 <<EOM
24fef2a7
AD
11260Help! I can't compile and run the ssize_t test program: please enlighten me!
11261(This is probably a misconfiguration in your system or libraries, and
11262you really ought to fix it. Still, I'll try anyway.)
a0d0e21e
LW
11263
11264I need a type that is the same size as $sizetype, but is guaranteed to
24fef2a7 11265be signed. Common values are ssize_t, int and long.
a0d0e21e
LW
11266
11267EOM
11268 rp="What signed type is the same size as $sizetype?"
11269 . ./myread
11270 ssizetype="$ans"
11271fi
dfe9444c 11272$rm -f ssize ssize.*
3fd537d4 11273
a0d0e21e
LW
11274: see what type of char stdio uses.
11275echo " "
11276if $contains 'unsigned.*char.*_ptr;' `./findhdr stdio.h` >/dev/null 2>&1 ; then
11277 echo "Your stdio uses unsigned chars." >&4
11278 stdchar="unsigned char"
11279else
11280 echo "Your stdio uses signed chars." >&4
11281 stdchar="char"
11282fi
11283
11284: see if time exists
11285echo " "
28e8609d
JH
11286if test "X$d_time" = X -o X"$timetype" = X; then
11287 if set time val -f d_time; eval $csym; $val; then
5ff3f7a4
GS
11288 echo 'time() found.' >&4
11289 val="$define"
11290 rp="What is the type returned by time() on this system?"
11291 set time_t timetype long stdio.h sys/types.h
11292 eval $typedef_ask
28e8609d 11293 else
5ff3f7a4
GS
11294 echo 'time() not found, hope that will do.' >&4
11295 val="$undef"
11296 timetype='int';
28e8609d
JH
11297 fi
11298 set d_time
11299 eval $setvar
a0d0e21e 11300fi
a0d0e21e
LW
11301
11302: see what type uids are declared as in the kernel
dc45a647
MB
11303echo " "
11304echo "Looking for the type for user ids returned by getuid()."
a0d0e21e
LW
11305set uid_t uidtype xxx stdio.h sys/types.h
11306eval $typedef
11307case "$uidtype" in
11308xxx)
11309 xxx=`./findhdr sys/user.h`
11310 set `grep '_ruid;' "$xxx" 2>/dev/null` unsigned short
11311 case $1 in
11312 unsigned) dflt="$1 $2" ;;
11313 *) dflt="$1" ;;
11314 esac
11315 ;;
4633a7c4
LW
11316*) dflt="$uidtype";;
11317esac
dc45a647
MB
11318case "$uidtype" in
11319uid_t) echo "uid_t found." ;;
11320*) rp="What is the type for user ids returned by getuid()?"
11321 . ./myread
11322 uidtype="$ans"
11323 ;;
11324esac
4633a7c4
LW
11325
11326: see if dbm.h is available
11327: see if dbmclose exists
11328set dbmclose d_dbmclose
11329eval $inlibc
11330
11331case "$d_dbmclose" in
11332$define)
11333 set dbm.h i_dbm
11334 eval $inhdr
5f80c64f
JH
11335 case "$i_dbm" in
11336 $define)
11337 val="$undef"
11338 set i_rpcsvcdbm
11339 eval $setvar
11340 ;;
11341 *) set rpcsvc/dbm.h i_rpcsvcdbm
11342 eval $inhdr
11343 ;;
11344 esac
11345 ;;
11346*) echo "We won't be including <dbm.h>"
11347 val="$undef"
11348 set i_dbm
11349 eval $setvar
11350 val="$undef"
11351 set i_rpcsvcdbm
11352 eval $setvar
11353 ;;
11354esac
11355
11356: see if this is a sys/file.h system
11357val=''
11358set sys/file.h val
11359eval $inhdr
11360
11361: do we need to include sys/file.h ?
11362case "$val" in
11363"$define")
11364 echo " "
11365 if $h_sysfile; then
11366 val="$define"
11367 echo "We'll be including <sys/file.h>." >&4
11368 else
11369 val="$undef"
11370 echo "We won't be including <sys/file.h>." >&4
11371 fi
11372 ;;
11373*)
11374 h_sysfile=false
11375 ;;
11376esac
11377set i_sysfile
11378eval $setvar
11379
11380: see if fcntl.h is there
11381val=''
11382set fcntl.h val
11383eval $inhdr
11384
11385: see if we can include fcntl.h
11386case "$val" in
11387"$define")
11388 echo " "
11389 if $h_fcntl; then
11390 val="$define"
11391 echo "We'll be including <fcntl.h>." >&4
11392 else
11393 val="$undef"
11394 if $h_sysfile; then
11395 echo "We don't need to include <fcntl.h> if we include <sys/file.h>." >&4
11396 else
11397 echo "We won't be including <fcntl.h>." >&4
11398 fi
11399 fi
11400 ;;
11401*)
11402 h_fcntl=false
11403 val="$undef"
11404 ;;
11405esac
11406set i_fcntl
11407eval $setvar
11408
11409: see if locale.h is available
11410set locale.h i_locale
11411eval $inhdr
11412
11413: see if this is a math.h system
11414set math.h i_math
11415eval $inhdr
11416
11417: see if ndbm.h is available
11418set ndbm.h t_ndbm
11419eval $inhdr
11420case "$t_ndbm" in
11421$define)
11422 : see if dbm_open exists
11423 set dbm_open d_dbm_open
11424 eval $inlibc
11425 case "$d_dbm_open" in
11426 $undef)
11427 t_ndbm="$undef"
11428 echo "We won't be including <ndbm.h>"
11429 ;;
11430 esac
11431 ;;
11432esac
11433val="$t_ndbm"
11434set i_ndbm
11435eval $setvar
11436
11437: see if net/errno.h is available
11438val=''
11439set net/errno.h val
11440eval $inhdr
11441
11442: Unfortunately, it causes problems on some systems. Arrgh.
11443case "$val" in
11444$define)
11445 cat > try.c <<'EOM'
11446#include <stdio.h>
11447#include <errno.h>
11448#include <net/errno.h>
11449int func()
11450{
11451 return ENOTSOCK;
11452}
11453EOM
11454 if $cc $ccflags -c try.c >/dev/null 2>&1; then
11455 echo "We'll be including <net/errno.h>." >&4
11456 else
11457 echo "We won't be including <net/errno.h>." >&4
11458 val="$undef"
11459 fi
11460 $rm -f try.* try
11461 ;;
11462esac
11463set i_neterrno
11464eval $setvar
11465
11466: get C preprocessor symbols handy
11467echo " "
11468$echo $n "Hmm... $c"
11469echo $al | $tr ' ' $trnl >Cppsym.know
11470$cat <<EOSS >Cppsym
11471$startsh
11472case "\$1" in
11473-l) list=true
11474 shift
11475 ;;
11476esac
11477unknown=''
11478case "\$list\$#" in
114791|2)
11480 for sym do
11481 if $contains "^\$1$" Cppsym.true >/dev/null 2>&1; then
11482 exit 0
11483 elif $contains "^\$1$" Cppsym.know >/dev/null 2>&1; then
11484 :
11485 else
11486 unknown="\$unknown \$sym"
11487 fi
11488 done
11489 set X \$unknown
11490 shift
11491 ;;
11492esac
11493case \$# in
114940) exit 1;;
11495esac
11496echo \$* | $tr ' ' '$trnl' | $sed -e 's/\(.*\)/\\
11497#ifdef \1\\
11498exit 0; _ _ _ _\1\\ \1\\
11499#endif\\
11500/' >Cppsym\$\$
11501echo "exit 1; _ _ _" >>Cppsym\$\$
11502$cppstdin $cppminus <Cppsym\$\$ | $grep '^exit [01]; _ _' >Cppsym2\$\$
11503case "\$list" in
11504true) $awk 'NF > 5 {print substr(\$6,2,100)}' <Cppsym2\$\$ ;;
11505*)
11506 sh Cppsym2\$\$
11507 status=\$?
11508 ;;
11509esac
11510$rm -f Cppsym\$\$ Cppsym2\$\$
11511exit \$status
11512EOSS
11513chmod +x Cppsym
11514$eunicefix Cppsym
11515./Cppsym -l $al | $sort | $grep -v '^$' >Cppsym.true
11516
11517: now check the C compiler for additional symbols
11518$cat >ccsym <<EOS
11519$startsh
11520$cat >tmp.c <<EOF
11521extern int foo;
11522EOF
11523for i in \`$cc -v -c tmp.c 2>&1\`
11524do
11525 case "\$i" in
11526 -D*) echo "\$i" | $sed 's/^-D//';;
11527 -A*) $test "$gccversion" && echo "\$i" | $sed 's/^-A\(.*\)(\(.*\))/\1=\2/';;
11528 esac
11529done
11530$rm -f try.c
11531EOS
11532chmod +x ccsym
11533$eunicefix ccsym
11534./ccsym > ccsym1.raw
11535if $test -s ccsym1.raw; then
11536 $sort ccsym1.raw | $uniq >ccsym.raw
11537else
11538 mv ccsym1.raw ccsym.raw
11539fi
11540
11541$awk '/\=/ { print $0; next }
11542 { print $0"=1" }' ccsym.raw >ccsym.list
11543$awk '{ print $0"=1" }' Cppsym.true >ccsym.true
11544$comm -13 ccsym.true ccsym.list >ccsym.own
11545$comm -12 ccsym.true ccsym.list >ccsym.com
11546$comm -23 ccsym.true ccsym.list >ccsym.cpp
11547also=''
11548symbols='symbols'
11549if $test -z ccsym.raw; then
11550 echo "Your C compiler doesn't seem to define any symbol!" >&4
11551 echo " "
11552 echo "However, your C preprocessor defines the following ones:"
11553 $cat Cppsym.true
11554else
11555 if $test -s ccsym.com; then
11556 echo "Your C compiler and pre-processor define these symbols:"
11557 $sed -e 's/\(.*\)=.*/\1/' ccsym.com
11558 also='also '
11559 symbols='ones'
11560 $test "$silent" || sleep 1
11561 fi
11562 if $test -s ccsym.cpp; then
11563 $test "$also" && echo " "
11564 echo "Your C pre-processor ${also}defines the following $symbols:"
11565 $sed -e 's/\(.*\)=.*/\1/' ccsym.cpp
11566 also='further '
11567 $test "$silent" || sleep 1
11568 fi
11569 if $test -s ccsym.own; then
11570 $test "$also" && echo " "
11571 echo "Your C compiler ${also}defines the following cpp variables:"
11572 $sed -e 's/\(.*\)=1/\1/' ccsym.own
11573 $sed -e 's/\(.*\)=.*/\1/' ccsym.own | $uniq >>Cppsym.true
11574 $test "$silent" || sleep 1
11575 fi
11576fi
11577$rm -f ccsym*
11578
11579: see if this is a termio system
11580val="$undef"
11581val2="$undef"
11582val3="$undef"
11583if $test `./findhdr termios.h`; then
11584 set tcsetattr i_termios
11585 eval $inlibc
11586 val3="$i_termios"
11587fi
11588echo " "
11589case "$val3" in
11590"$define") echo "You have POSIX termios.h... good!" >&4;;
11591*) if ./Cppsym pyr; then
11592 case "`/bin/universe`" in
11593 ucb) if $test `./findhdr sgtty.h`; then
11594 val2="$define"
11595 echo "<sgtty.h> found." >&4
11596 else
11597 echo "System is pyramid with BSD universe."
11598 echo "<sgtty.h> not found--you could have problems." >&4
11599 fi;;
11600 *) if $test `./findhdr termio.h`; then
11601 val="$define"
11602 echo "<termio.h> found." >&4
11603 else
11604 echo "System is pyramid with USG universe."
11605 echo "<termio.h> not found--you could have problems." >&4
11606 fi;;
11607 esac
11608 elif ./usg; then
11609 if $test `./findhdr termio.h`; then
11610 echo "<termio.h> found." >&4
11611 val="$define"
11612 elif $test `./findhdr sgtty.h`; then
11613 echo "<sgtty.h> found." >&4
11614 val2="$define"
11615 else
11616echo "Neither <termio.h> nor <sgtty.h> found--you could have problems." >&4
11617 fi
11618 else
11619 if $test `./findhdr sgtty.h`; then
11620 echo "<sgtty.h> found." >&4
11621 val2="$define"
11622 elif $test `./findhdr termio.h`; then
11623 echo "<termio.h> found." >&4
11624 val="$define"
11625 else
11626echo "Neither <sgtty.h> nor <termio.h> found--you could have problems." >&4
11627 fi
11628 fi;;
11629esac
11630set i_termio; eval $setvar
11631val=$val2; set i_sgtty; eval $setvar
11632val=$val3; set i_termios; eval $setvar
11633
11634: see if stdarg is available
11635echo " "
11636if $test `./findhdr stdarg.h`; then
11637 echo "<stdarg.h> found." >&4
11638 valstd="$define"
11639else
11640 echo "<stdarg.h> NOT found." >&4
11641 valstd="$undef"
11642fi
11643
11644: see if varags is available
11645echo " "
11646if $test `./findhdr varargs.h`; then
11647 echo "<varargs.h> found." >&4
11648else
11649 echo "<varargs.h> NOT found, but that's ok (I hope)." >&4
11650fi
11651
11652: set up the varargs testing programs
11653$cat > varargs.c <<EOP
11654#ifdef I_STDARG
11655#include <stdarg.h>
11656#endif
11657#ifdef I_VARARGS
11658#include <varargs.h>
11659#endif
11660
11661#ifdef I_STDARG
11662int f(char *p, ...)
11663#else
11664int f(va_alist)
11665va_dcl
11666#endif
11667{
11668 va_list ap;
11669#ifndef I_STDARG
11670 char *p;
11671#endif
11672#ifdef I_STDARG
11673 va_start(ap,p);
11674#else
11675 va_start(ap);
11676 p = va_arg(ap, char *);
11677#endif
11678 va_end(ap);
11679}
11680EOP
11681$cat > varargs <<EOP
11682$startsh
11683if $cc -c $ccflags -D\$1 varargs.c >/dev/null 2>&1; then
11684 echo "true"
11685else
11686 echo "false"
11687fi
11688$rm -f varargs$_o
11689EOP
11690chmod +x varargs
11691
11692: now check which varargs header should be included
11693echo " "
11694i_varhdr=''
11695case "$valstd" in
11696"$define")
11697 if `./varargs I_STDARG`; then
11698 val='stdarg.h'
11699 elif `./varargs I_VARARGS`; then
11700 val='varargs.h'
11701 fi
11702 ;;
11703*)
11704 if `./varargs I_VARARGS`; then
11705 val='varargs.h'
11706 fi
11707 ;;
11708esac
11709case "$val" in
11710'')
11711echo "I could not find the definition for va_dcl... You have problems..." >&4
11712 val="$undef"; set i_stdarg; eval $setvar
11713 val="$undef"; set i_varargs; eval $setvar
11714 ;;
11715*)
11716 set i_varhdr
11717 eval $setvar
11718 case "$i_varhdr" in
11719 stdarg.h)
11720 val="$define"; set i_stdarg; eval $setvar
11721 val="$undef"; set i_varargs; eval $setvar
11722 ;;
11723 varargs.h)
11724 val="$undef"; set i_stdarg; eval $setvar
11725 val="$define"; set i_varargs; eval $setvar
11726 ;;
11727 esac
11728 echo "We'll include <$i_varhdr> to get va_dcl definition." >&4;;
11729esac
11730$rm -f varargs*
11731
11732: see if stddef is available
11733set stddef.h i_stddef
11734eval $inhdr
11735
11736: see if sys/access.h is available
11737set sys/access.h i_sysaccess
11738eval $inhdr
11739
11740: see if ioctl defs are in sgtty, termio, sys/filio or sys/ioctl
11741set sys/filio.h i_sysfilio
11742eval $inhdr
11743echo " "
11744if $test `./findhdr sys/ioctl.h`; then
11745 val="$define"
11746 echo '<sys/ioctl.h> found.' >&4
11747else
11748 val="$undef"
11749 if $test $i_sysfilio = "$define"; then
11750 echo '<sys/ioctl.h> NOT found.' >&4
11751 else
11752 $test $i_sgtty = "$define" && xxx="sgtty.h"
11753 $test $i_termio = "$define" && xxx="termio.h"
11754 $test $i_termios = "$define" && xxx="termios.h"
11755echo "No <sys/ioctl.h> found, assuming ioctl args are defined in <$xxx>." >&4
11756 fi
11757fi
11758set i_sysioctl
11759eval $setvar
11760
11761: see if this is a sys/param system
11762set sys/param.h i_sysparam
11763eval $inhdr
11764
11765: see if sys/resource.h has to be included
11766set sys/resource.h i_sysresrc
11767eval $inhdr
11768
11769: see if sys/security.h is available
11770set sys/security.h i_syssecrt
11771eval $inhdr
11772
11773: see if this is a sys/un.h system
11774set sys/un.h i_sysun
11775eval $inhdr
11776
11777: see if this is a syswait system
11778set sys/wait.h i_syswait
11779eval $inhdr
11780
11781: see if this is an utime system
11782set utime.h i_utime
11783eval $inhdr
11784
11785: see if this is a values.h system
11786set values.h i_values
11787eval $inhdr
11788
11789: see if this is a vfork system
11790case "$d_vfork" in
11791"$define")
11792 set vfork.h i_vfork
11793 eval $inhdr
11794 ;;
11795*)
11796 i_vfork="$undef"
11797 ;;
11798esac
11799
11800: see if gdbm.h is available
11801set gdbm.h t_gdbm
11802eval $inhdr
11803case "$t_gdbm" in
11804$define)
11805 : see if gdbm_open exists
11806 set gdbm_open d_gdbm_open
11807 eval $inlibc
11808 case "$d_gdbm_open" in
11809 $undef)
11810 t_gdbm="$undef"
11811 echo "We won't be including <gdbm.h>"
11812 ;;
11813 esac
11814 ;;
11815esac
11816val="$t_gdbm"
11817set i_gdbm
11818eval $setvar
11819
11820echo " "
11821echo "Looking for extensions..." >&4
11822tdir=`pwd`
11823cd $rsrc/ext
11824: If we are using the old config.sh, known_extensions may contain
11825: old or inaccurate or duplicate values.
11826known_extensions=''
11827nonxs_extensions=''
11828: We do not use find because it might not be available.
11829: We do not just use MANIFEST because the user may have dropped
11830: some additional extensions into the source tree and expect them
11831: to be built.
11832for xxx in * ; do
11833 case "$xxx" in
11834 DynaLoader|dynaload) ;;
11835 *) if $test -f $xxx/$xxx.xs; then
11836 known_extensions="$known_extensions $xxx"
11837 elif $test -f $xxx/Makefile.PL; then
11838 nonxs_extensions="$nonxs_extensions $xxx"
11839 else
11840 if $test -d $xxx; then
11841 # Look for nested extensions, eg. Devel/Dprof.
11842 cd $xxx
11843 for yyy in * ; do
11844 if $test -f $yyy/$yyy.xs; then
11845 known_extensions="$known_extensions $xxx/$yyy"
11846 elif $test -f $yyy/Makefile.PL; then
11847 nonxs_extensions="$nonxs_extensions $xxx/$yyy"
11848 fi
11849 done
11850 cd ..
11851 fi
11852 fi
11853 ;;
11854 esac
11855done
11856set X $nonxs_extensions
11857shift
11858nonxs_extensions="$*"
11859set X $known_extensions
11860shift
11861known_extensions="$*"
11862cd $tdir
11863
11864: Now see which are supported on this system.
11865avail_ext=''
11866for xxx in $known_extensions ; do
11867 case "$xxx" in
11868 DB_File|db_file)
11869 case "$i_db" in
11870 $define) avail_ext="$avail_ext $xxx" ;;
11871 esac
11872 ;;
11873 GDBM_File|gdbm_fil)
11874 case "$i_gdbm" in
11875 $define) avail_ext="$avail_ext $xxx" ;;
11876 esac
11877 ;;
11878 NDBM_File|ndbm_fil)
11879 case "$i_ndbm" in
11880 $define) avail_ext="$avail_ext $xxx" ;;
11881 esac
11882 ;;
11883 ODBM_File|odbm_fil)
11884 case "${i_dbm}${i_rpcsvcdbm}" in
11885 *"${define}"*) avail_ext="$avail_ext $xxx" ;;
11886 esac
11887 ;;
11888 POSIX|posix)
11889 case "$useposix" in
11890 true|define|y) avail_ext="$avail_ext $xxx" ;;
11891 esac
11892 ;;
11893 Opcode|opcode)
11894 case "$useopcode" in
11895 true|define|y) avail_ext="$avail_ext $xxx" ;;
11896 esac
11897 ;;
11898 Socket|socket)
11899 case "$d_socket" in
11900 true|$define|y) avail_ext="$avail_ext $xxx" ;;
11901 esac
11902 ;;
11903 Thread|thread)
11904 case "$usethreads" in
11905 true|$define|y) avail_ext="$avail_ext $xxx" ;;
11906 esac
11907 ;;
11908 IPC/SysV|ipc/sysv)
11909 : XXX Do we need a useipcsysv variable here
11910 case "${d_msg}${d_sem}${d_shm}" in
11911 *"${define}"*) avail_ext="$avail_ext $xxx" ;;
11912 esac
11913 ;;
11914 *) avail_ext="$avail_ext $xxx"
11915 ;;
11916 esac
11917done
11918
11919set X $avail_ext
11920shift
11921avail_ext="$*"
11922
11923: Now see which nonxs extensions are supported on this system.
11924: For now assume all are.
11925nonxs_ext=''
11926for xxx in $nonxs_extensions ; do
11927 case "$xxx" in
11928 *) nonxs_ext="$nonxs_ext $xxx"
11929 ;;
11930 esac
11931done
11932
11933set X $nonxs_ext
11934shift
11935nonxs_ext="$*"
11936
11937case $usedl in
11938$define)
11939 $cat <<EOM
11940A number of extensions are supplied with $package. You may choose to
11941compile these extensions for dynamic loading (the default), compile
11942them into the $package executable (static loading), or not include
11943them at all. Answer "none" to include no extensions.
11944Note that DynaLoader is always built and need not be mentioned here.
11945
11946EOM
11947 case "$dynamic_ext" in
11948 '') dflt="$avail_ext" ;;
11949 *) dflt="$dynamic_ext"
11950 # Perhaps we are reusing an old out-of-date config.sh.
11951 case "$hint" in
11952 previous)
11953 if test X"$dynamic_ext" != X"$avail_ext"; then
11954 $cat <<EOM
11955NOTICE: Your previous config.sh list may be incorrect.
11956The extensions now available to you are
11957 ${avail_ext}
11958but the default list from your previous config.sh is
11959 ${dynamic_ext}
11960
11961EOM
11962 fi
11963 ;;
11964 esac
11965 ;;
11966 esac
11967 case "$dflt" in
11968 '') dflt=none;;
11969 esac
11970 rp="What extensions do you wish to load dynamically?"
11971 . ./myread
11972 case "$ans" in
11973 none) dynamic_ext=' ' ;;
11974 *) dynamic_ext="$ans" ;;
11975 esac
11976
11977 case "$static_ext" in
11978 '')
11979 : Exclude those already listed in dynamic linking
11980 dflt=''
11981 for xxx in $avail_ext; do
11982 case " $dynamic_ext " in
11983 *" $xxx "*) ;;
11984 *) dflt="$dflt $xxx" ;;
11985 esac
11986 done
11987 set X $dflt
11988 shift
11989 dflt="$*"
11990 ;;
11991 *) dflt="$static_ext"
11992 ;;
11993 esac
11994
11995 case "$dflt" in
11996 '') dflt=none;;
11997 esac
11998 rp="What extensions do you wish to load statically?"
11999 . ./myread
12000 case "$ans" in
12001 none) static_ext=' ' ;;
12002 *) static_ext="$ans" ;;
12003 esac
12004 ;;
12005*)
12006 $cat <<EOM
12007A number of extensions are supplied with $package. Answer "none"
12008to include no extensions.
12009Note that DynaLoader is always built and need not be mentioned here.
12010
12011EOM
12012 case "$static_ext" in
12013 '') dflt="$avail_ext" ;;
12014 *) dflt="$static_ext"
12015 # Perhaps we are reusing an old out-of-date config.sh.
12016 case "$hint" in
12017 previous)
12018 if test X"$static_ext" != X"$avail_ext"; then
12019 $cat <<EOM
12020NOTICE: Your previous config.sh list may be incorrect.
12021The extensions now available to you are
12022 ${avail_ext}
12023but the default list from your previous config.sh is
12024 ${static_ext}
12025
12026EOM
12027 fi
12028 ;;
12029 esac
12030 ;;
12031 esac
12032 : Exclude those that are not xs extensions
12033 case "$dflt" in
12034 '') dflt=none;;
12035 esac
12036 rp="What extensions do you wish to include?"
12037 . ./myread
12038 case "$ans" in
12039 none) static_ext=' ' ;;
12040 *) static_ext="$ans" ;;
12041 esac
12042 ;;
12043esac
12044
12045set X $dynamic_ext $static_ext $nonxs_ext
12046shift
12047extensions="$*"
12048
12049: Remove build directory name from cppstdin so it can be used from
12050: either the present location or the final installed location.
12051echo " "
12052: Get out of the UU directory to get correct path name.
12053cd ..
12054case "$cppstdin" in
12055`pwd`/cppstdin)
12056 echo "Stripping down cppstdin path name"
12057 cppstdin=cppstdin
12058 ;;
12059esac
12060cd UU
12061
12062: end of configuration questions
12063echo " "
12064echo "End of configuration questions."
12065echo " "
12066
12067: back to where it started
12068if test -d ../UU; then
12069 cd ..
12070fi
12071
12072: configuration may be patched via a 'config.over' file
12073if $test -f config.over; then
12074 echo " "
12075 dflt=y
12076 rp='I see a config.over file. Do you wish to load it?'
12077 . UU/myread
12078 case "$ans" in
12079 n*) echo "OK, I'll ignore it.";;
12080 *) . ./config.over
12081 echo "Configuration override changes have been loaded."
12082 ;;
12083 esac
12084fi
12085
12086: in case they want portability, strip down executable paths
12087case "$d_portable" in
12088"$define")
12089 echo " "
12090 echo "Stripping down executable paths..." >&4
12091 for file in $loclist $trylist; do
12092 if test X$file != Xln -a X$file != Xar -o X$osname != Xos2; then
12093 eval $file="\$file"
12094 fi
12095 done
12096 ;;
12097esac
12098
12099: create config.sh file
12100echo " "
12101echo "Creating config.sh..." >&4
12102$spitshell <<EOT >config.sh
12103$startsh
12104#
12105# This file was produced by running the Configure script. It holds all the
12106# definitions figured out by Configure. Should you modify one of these values,
12107# do not forget to propagate your changes by running "Configure -der". You may
12108# instead choose to run each of the .SH files by yourself, or "Configure -S".
12109#
12110
12111# Package name : $package
12112# Source directory : $src
12113# Configuration time: $cf_time
12114# Configured by : $cf_by
12115# Target system : $myuname
12116
12117Author='$Author'
12118Date='$Date'
12119Header='$Header'
12120Id='$Id'
12121Locker='$Locker'
12122Log='$Log'
12123Mcc='$Mcc'
12124RCSfile='$RCSfile'
12125Revision='$Revision'
12126Source='$Source'
12127State='$State'
12128_a='$_a'
12129_exe='$_exe'
12130_o='$_o'
12131afs='$afs'
12132alignbytes='$alignbytes'
12133ansi2knr='$ansi2knr'
12134aphostname='$aphostname'
12135apiversion='$apiversion'
12136ar='$ar'
12137archlib='$archlib'
12138archlibexp='$archlibexp'
12139archname64='$archname64'
12140archname='$archname'
12141archobjs='$archobjs'
12142awk='$awk'
12143baserev='$baserev'
12144bash='$bash'
12145bin='$bin'
12146binexp='$binexp'
12147bison='$bison'
12148byacc='$byacc'
12149byteorder='$byteorder'
12150c='$c'
12151castflags='$castflags'
12152cat='$cat'
12153cc='$cc'
12154cccdlflags='$cccdlflags'
12155ccdlflags='$ccdlflags'
12156ccflags='$ccflags'
12157cf_by='$cf_by'
12158cf_email='$cf_email'
12159cf_time='$cf_time'
12160chgrp='$chgrp'
12161chmod='$chmod'
12162chown='$chown'
12163clocktype='$clocktype'
12164comm='$comm'
12165compress='$compress'
12166contains='$contains'
12167cp='$cp'
12168cpio='$cpio'
12169cpp='$cpp'
12170cpp_stuff='$cpp_stuff'
12171cppflags='$cppflags'
12172cpplast='$cpplast'
12173cppminus='$cppminus'
12174cpprun='$cpprun'
12175cppstdin='$cppstdin'
12176cryptlib='$cryptlib'
12177csh='$csh'
12178d_Gconvert='$d_Gconvert'
12179d_access='$d_access'
12180d_accessx='$d_accessx'
12181d_alarm='$d_alarm'
12182d_archlib='$d_archlib'
12183d_attribut='$d_attribut'
12184d_bcmp='$d_bcmp'
12185d_bcopy='$d_bcopy'
12186d_bsd='$d_bsd'
12187d_bsdgetpgrp='$d_bsdgetpgrp'
12188d_bsdsetpgrp='$d_bsdsetpgrp'
12189d_bzero='$d_bzero'
12190d_casti32='$d_casti32'
12191d_castneg='$d_castneg'
12192d_charvspr='$d_charvspr'
12193d_chown='$d_chown'
12194d_chroot='$d_chroot'
12195d_chsize='$d_chsize'
12196d_closedir='$d_closedir'
12197d_const='$d_const'
12198d_crypt='$d_crypt'
12199d_csh='$d_csh'
12200d_cuserid='$d_cuserid'
12201d_dbl_dig='$d_dbl_dig'
12202d_dbmclose64='$d_dbmclose64'
12203d_dbminit64='$d_dbminit64'
12204d_delete64='$d_delete64'
12205d_difftime='$d_difftime'
12206d_dirent64s='$d_dirent64s'
12207d_dirnamlen='$d_dirnamlen'
12208d_dlerror='$d_dlerror'
12209d_dlopen='$d_dlopen'
12210d_dlsymun='$d_dlsymun'
12211d_dosuid='$d_dosuid'
12212d_drand48proto='$d_drand48proto'
12213d_dup2='$d_dup2'
12214d_eaccess='$d_eaccess'
12215d_endgrent='$d_endgrent'
12216d_endhent='$d_endhent'
12217d_endnent='$d_endnent'
12218d_endpent='$d_endpent'
12219d_endpwent='$d_endpwent'
12220d_endsent='$d_endsent'
12221d_eofnblk='$d_eofnblk'
12222d_eunice='$d_eunice'
12223d_fchmod='$d_fchmod'
12224d_fchown='$d_fchown'
12225d_fcntl='$d_fcntl'
12226d_fd_macros='$d_fd_macros'
12227d_fd_set='$d_fd_set'
12228d_fds_bits='$d_fds_bits'
12229d_fetch64='$d_fetch64'
12230d_fgetpos64='$d_fgetpos64'
12231d_fgetpos='$d_fgetpos'
12232d_firstkey64='$d_firstkey64'
12233d_flexfnam='$d_flexfnam'
12234d_flock64s='$d_flock64s'
12235d_flock='$d_flock'
12236d_fopen64='$d_fopen64'
12237d_fork='$d_fork'
12238d_fpathconf='$d_fpathconf'
12239d_freopen64='$d_freopen64'
12240d_fseek64='$d_fseek64'
12241d_fseeko64='$d_fseeko64'
12242d_fseeko='$d_fseeko'
12243d_fsetpos64='$d_fsetpos64'
12244d_fsetpos='$d_fsetpos'
12245d_fstat64='$d_fstat64'
12246d_ftell64='$d_ftell64'
12247d_ftello64='$d_ftello64'
12248d_ftello='$d_ftello'
12249d_ftime='$d_ftime'
12250d_ftruncate64='$d_ftruncate64'
12251d_getgrent='$d_getgrent'
12252d_getgrps='$d_getgrps'
12253d_gethbyaddr='$d_gethbyaddr'
12254d_gethbyname='$d_gethbyname'
12255d_gethent='$d_gethent'
12256d_gethname='$d_gethname'
12257d_gethostprotos='$d_gethostprotos'
12258d_getlogin='$d_getlogin'
12259d_getnbyaddr='$d_getnbyaddr'
12260d_getnbyname='$d_getnbyname'
12261d_getnent='$d_getnent'
12262d_getnetprotos='$d_getnetprotos'
12263d_getpbyname='$d_getpbyname'
12264d_getpbynumber='$d_getpbynumber'
12265d_getpent='$d_getpent'
12266d_getpgid='$d_getpgid'
12267d_getpgrp2='$d_getpgrp2'
12268d_getpgrp='$d_getpgrp'
12269d_getppid='$d_getppid'
12270d_getprior='$d_getprior'
12271d_getprotoprotos='$d_getprotoprotos'
12272d_getpwent='$d_getpwent'
12273d_getsbyname='$d_getsbyname'
12274d_getsbyport='$d_getsbyport'
12275d_getsent='$d_getsent'
12276d_getservprotos='$d_getservprotos'
12277d_gettimeod='$d_gettimeod'
12278d_gnulibc='$d_gnulibc'
12279d_grpasswd='$d_grpasswd'
12280d_htonl='$d_htonl'
12281d_index='$d_index'
12282d_inetaton='$d_inetaton'
12283d_ino64t='$d_ino64t'
12284d_int64t='$d_int64t'
12285d_isascii='$d_isascii'
12286d_killpg='$d_killpg'
12287d_lchown='$d_lchown'
12288d_link='$d_link'
12289d_locconv='$d_locconv'
12290d_lockf64='$d_lockf64'
12291d_lockf='$d_lockf'
12292d_longdbl='$d_longdbl'
12293d_longlong='$d_longlong'
12294d_lseek64='$d_lseek64'
12295d_lstat64='$d_lstat64'
12296d_lstat='$d_lstat'
12297d_mblen='$d_mblen'
12298d_mbstowcs='$d_mbstowcs'
12299d_mbtowc='$d_mbtowc'
12300d_memcmp='$d_memcmp'
12301d_memcpy='$d_memcpy'
12302d_memmove='$d_memmove'
12303d_memset='$d_memset'
12304d_mkdir='$d_mkdir'
12305d_mkfifo='$d_mkfifo'
12306d_mktime='$d_mktime'
12307d_msg='$d_msg'
12308d_msgctl='$d_msgctl'
12309d_msgget='$d_msgget'
12310d_msgrcv='$d_msgrcv'
12311d_msgsnd='$d_msgsnd'
12312d_mymalloc='$d_mymalloc'
12313d_nextkey64='$d_nextkey64'
12314d_nice='$d_nice'
12315d_off64t='$d_off64t'
12316d_oldpthreads='$d_oldpthreads'
12317d_oldsock='$d_oldsock'
12318d_open3='$d_open3'
12319d_open64='$d_open64'
12320d_opendir64='$d_opendir64'
12321d_pathconf='$d_pathconf'
12322d_pause='$d_pause'
12323d_phostname='$d_phostname'
12324d_pipe='$d_pipe'
12325d_poll='$d_poll'
12326d_portable='$d_portable'
12327d_pthread_yield='$d_pthread_yield'
12328d_pthreads_created_joinable='$d_pthreads_created_joinable'
12329d_pwage='$d_pwage'
12330d_pwchange='$d_pwchange'
12331d_pwclass='$d_pwclass'
12332d_pwcomment='$d_pwcomment'
12333d_pwexpire='$d_pwexpire'
12334d_pwgecos='$d_pwgecos'
12335d_pwpasswd='$d_pwpasswd'
12336d_pwquota='$d_pwquota'
12337d_readdir64='$d_readdir64'
12338d_readdir='$d_readdir'
12339d_readlink='$d_readlink'
12340d_rename='$d_rename'
12341d_rewinddir='$d_rewinddir'
12342d_rmdir='$d_rmdir'
12343d_safebcpy='$d_safebcpy'
12344d_safemcpy='$d_safemcpy'
12345d_sanemcmp='$d_sanemcmp'
12346d_sched_yield='$d_sched_yield'
12347d_seekdir64='$d_seekdir64'
12348d_seekdir='$d_seekdir'
12349d_select='$d_select'
12350d_sem='$d_sem'
12351d_semctl='$d_semctl'
12352d_semctl_semid_ds='$d_semctl_semid_ds'
12353d_semctl_semun='$d_semctl_semun'
12354d_semget='$d_semget'
12355d_semop='$d_semop'
12356d_setegid='$d_setegid'
12357d_seteuid='$d_seteuid'
12358d_setgrent='$d_setgrent'
12359d_setgrps='$d_setgrps'
12360d_sethent='$d_sethent'
12361d_setlinebuf='$d_setlinebuf'
12362d_setlocale='$d_setlocale'
12363d_setnent='$d_setnent'
12364d_setpent='$d_setpent'
12365d_setpgid='$d_setpgid'
12366d_setpgrp2='$d_setpgrp2'
12367d_setpgrp='$d_setpgrp'
12368d_setprior='$d_setprior'
12369d_setpwent='$d_setpwent'
12370d_setregid='$d_setregid'
12371d_setresgid='$d_setresgid'
12372d_setresuid='$d_setresuid'
12373d_setreuid='$d_setreuid'
12374d_setrgid='$d_setrgid'
12375d_setruid='$d_setruid'
12376d_setsent='$d_setsent'
12377d_setsid='$d_setsid'
12378d_setvbuf='$d_setvbuf'
12379d_sfio='$d_sfio'
12380d_shm='$d_shm'
12381d_shmat='$d_shmat'
12382d_shmatprototype='$d_shmatprototype'
12383d_shmctl='$d_shmctl'
12384d_shmdt='$d_shmdt'
12385d_shmget='$d_shmget'
12386d_sigaction='$d_sigaction'
12387d_sigsetjmp='$d_sigsetjmp'
12388d_socket='$d_socket'
12389d_sockpair='$d_sockpair'
12390d_stat64='$d_stat64'
12391d_statblks='$d_statblks'
12392d_stdio_cnt_lval='$d_stdio_cnt_lval'
12393d_stdio_ptr_lval='$d_stdio_ptr_lval'
12394d_stdiobase='$d_stdiobase'
12395d_stdstdio='$d_stdstdio'
12396d_store64='$d_store64'
12397d_strchr='$d_strchr'
12398d_strcoll='$d_strcoll'
12399d_strctcpy='$d_strctcpy'
12400d_strerrm='$d_strerrm'
12401d_strerror='$d_strerror'
12402d_strtod='$d_strtod'
12403d_strtol='$d_strtol'
12404d_strtoul='$d_strtoul'
12405d_strxfrm='$d_strxfrm'
12406d_suidsafe='$d_suidsafe'
12407d_symlink='$d_symlink'
12408d_syscall='$d_syscall'
12409d_sysconf='$d_sysconf'
12410d_sysernlst='$d_sysernlst'
12411d_syserrlst='$d_syserrlst'
12412d_system='$d_system'
12413d_tcgetpgrp='$d_tcgetpgrp'
12414d_tcsetpgrp='$d_tcsetpgrp'
12415d_telldir64='$d_telldir64'
12416d_telldir='$d_telldir'
12417d_time='$d_time'
12418d_times='$d_times'
12419d_tmpfile64='$d_tmpfile64'
12420d_truncate64='$d_truncate64'
12421d_truncate='$d_truncate'
12422d_tzname='$d_tzname'
12423d_umask='$d_umask'
12424d_uname='$d_uname'
12425d_union_semun='$d_union_semun'
12426d_vfork='$d_vfork'
12427d_void_closedir='$d_void_closedir'
12428d_voidsig='$d_voidsig'
12429d_voidtty='$d_voidtty'
12430d_volatile='$d_volatile'
12431d_vprintf='$d_vprintf'
12432d_wait4='$d_wait4'
12433d_waitpid='$d_waitpid'
12434d_wcstombs='$d_wcstombs'
12435d_wctomb='$d_wctomb'
12436d_xenix='$d_xenix'
12437date='$date'
12438db_hashtype='$db_hashtype'
12439db_prefixtype='$db_prefixtype'
12440defvoidused='$defvoidused'
12441direntrytype='$direntrytype'
12442dlext='$dlext'
12443dlsrc='$dlsrc'
12444doublesize='$doublesize'
12445drand01='$drand01'
12446dynamic_ext='$dynamic_ext'
12447eagain='$eagain'
12448ebcdic='$ebcdic'
12449echo='$echo'
12450egrep='$egrep'
12451emacs='$emacs'
12452eunicefix='$eunicefix'
12453exe_ext='$exe_ext'
12454expr='$expr'
12455extensions='$extensions'
12456find='$find'
12457firstmakefile='$firstmakefile'
12458flex='$flex'
12459fpostype='$fpostype'
12460freetype='$freetype'
12461full_csh='$full_csh'
12462full_sed='$full_sed'
12463gccversion='$gccversion'
12464gidtype='$gidtype'
12465glibpth='$glibpth'
12466grep='$grep'
12467groupcat='$groupcat'
12468groupstype='$groupstype'
12469gzip='$gzip'
12470h_fcntl='$h_fcntl'
12471h_sysfile='$h_sysfile'
12472hint='$hint'
12473hostcat='$hostcat'
12474huge='$huge'
12475i_arpainet='$i_arpainet'
12476i_bsdioctl='$i_bsdioctl'
12477i_db='$i_db'
12478i_dbm='$i_dbm'
12479i_dirent='$i_dirent'
12480i_dld='$i_dld'
12481i_dlfcn='$i_dlfcn'
12482i_fcntl='$i_fcntl'
12483i_float='$i_float'
12484i_gdbm='$i_gdbm'
12485i_grp='$i_grp'
12486i_inttypes='$i_inttypes'
12487i_limits='$i_limits'
12488i_locale='$i_locale'
12489i_malloc='$i_malloc'
12490i_math='$i_math'
12491i_memory='$i_memory'
12492i_ndbm='$i_ndbm'
12493i_netdb='$i_netdb'
12494i_neterrno='$i_neterrno'
12495i_niin='$i_niin'
12496i_pwd='$i_pwd'
12497i_rpcsvcdbm='$i_rpcsvcdbm'
12498i_sfio='$i_sfio'
12499i_sgtty='$i_sgtty'
12500i_stdarg='$i_stdarg'
12501i_stddef='$i_stddef'
12502i_stdlib='$i_stdlib'
12503i_string='$i_string'
12504i_sysaccess='$i_sysaccess'
12505i_sysdir='$i_sysdir'
12506i_sysfile='$i_sysfile'
12507i_sysfilio='$i_sysfilio'
12508i_sysin='$i_sysin'
12509i_sysioctl='$i_sysioctl'
12510i_sysndir='$i_sysndir'
12511i_sysparam='$i_sysparam'
12512i_sysresrc='$i_sysresrc'
12513i_syssecrt='$i_syssecrt'
12514i_sysselct='$i_sysselct'
12515i_syssockio='$i_syssockio'
12516i_sysstat='$i_sysstat'
12517i_systime='$i_systime'
12518i_systimek='$i_systimek'
12519i_systimes='$i_systimes'
12520i_systypes='$i_systypes'
12521i_sysun='$i_sysun'
12522i_syswait='$i_syswait'
12523i_termio='$i_termio'
12524i_termios='$i_termios'
12525i_time='$i_time'
12526i_unistd='$i_unistd'
12527i_utime='$i_utime'
12528i_values='$i_values'
12529i_varargs='$i_varargs'
12530i_varhdr='$i_varhdr'
12531i_vfork='$i_vfork'
12532ignore_versioned_solibs='$ignore_versioned_solibs'
12533incpath='$incpath'
12534inews='$inews'
12535installarchlib='$installarchlib'
12536installbin='$installbin'
12537installman1dir='$installman1dir'
12538installman3dir='$installman3dir'
12539installprivlib='$installprivlib'
12540installscript='$installscript'
12541installsitearch='$installsitearch'
12542installsitelib='$installsitelib'
12543intsize='$intsize'
12544known_extensions='$known_extensions'
12545ksh='$ksh'
12546large='$large'
12547ld='$ld'
12548lddlflags='$lddlflags'
12549ldflags='$ldflags'
12550less='$less'
12551lib_ext='$lib_ext'
12552libc='$libc'
12553libperl='$libperl'
12554libpth='$libpth'
12555libs='$libs'
12556libswanted='$libswanted'
12557line='$line'
12558lint='$lint'
12559lkflags='$lkflags'
12560ln='$ln'
12561lns='$lns'
12562locincpth='$locincpth'
12563loclibpth='$loclibpth'
12564longdblsize='$longdblsize'
12565longlongsize='$longlongsize'
12566longsize='$longsize'
12567lp='$lp'
12568lpr='$lpr'
12569ls='$ls'
12570lseeksize='$lseeksize'
12571lseektype='$lseektype'
12572mail='$mail'
12573mailx='$mailx'
12574make='$make'
12575make_set_make='$make_set_make'
12576mallocobj='$mallocobj'
12577mallocsrc='$mallocsrc'
12578malloctype='$malloctype'
12579man1dir='$man1dir'
12580man1direxp='$man1direxp'
12581man1ext='$man1ext'
12582man3dir='$man3dir'
12583man3direxp='$man3direxp'
12584man3ext='$man3ext'
12585medium='$medium'
12586mips='$mips'
12587mips_type='$mips_type'
12588mkdir='$mkdir'
12589models='$models'
12590modetype='$modetype'
12591more='$more'
12592mv='$mv'
12593myarchname='$myarchname'
12594mydomain='$mydomain'
12595myhostname='$myhostname'
12596myuname='$myuname'
12597n='$n'
12598netdb_hlen_type='$netdb_hlen_type'
12599netdb_host_type='$netdb_host_type'
12600netdb_name_type='$netdb_name_type'
12601netdb_net_type='$netdb_net_type'
12602nm='$nm'
12603nm_opt='$nm_opt'
12604nm_so_opt='$nm_so_opt'
12605nonxs_ext='$nonxs_ext'
12606nroff='$nroff'
12607o_nonblock='$o_nonblock'
12608obj_ext='$obj_ext'
12609optimize='$optimize'
12610orderlib='$orderlib'
12611osname='$osname'
12612osvers='$osvers'
12613package='$package'
12614pager='$pager'
12615passcat='$passcat'
12616patchlevel='$patchlevel'
12617path_sep='$path_sep'
12618perl='$perl'
12619perladmin='$perladmin'
12620perlpath='$perlpath'
12621pg='$pg'
12622phostname='$phostname'
12623pidtype='$pidtype'
12624plibpth='$plibpth'
12625pmake='$pmake'
12626pr='$pr'
12627prefix='$prefix'
12628prefixexp='$prefixexp'
12629privlib='$privlib'
12630privlibexp='$privlibexp'
12631prototype='$prototype'
12632ptrsize='$ptrsize'
12633randbits='$randbits'
12634randfunc='$randfunc'
12635randseedtype='$randseedtype'
12636ranlib='$ranlib'
12637rd_nodata='$rd_nodata'
12638rm='$rm'
12639rmail='$rmail'
12640runnm='$runnm'
12641sched_yield='$sched_yield'
12642scriptdir='$scriptdir'
12643scriptdirexp='$scriptdirexp'
12644sed='$sed'
12645seedfunc='$seedfunc'
12646selectminbits='$selectminbits'
12647selecttype='$selecttype'
12648sendmail='$sendmail'
12649sh='$sh'
12650shar='$shar'
12651sharpbang='$sharpbang'
12652shmattype='$shmattype'
12653shortsize='$shortsize'
12654shrpenv='$shrpenv'
12655shsharp='$shsharp'
12656sig_name='$sig_name'
12657sig_name_init='$sig_name_init'
12658sig_num='$sig_num'
12659signal_t='$signal_t'
12660sitearch='$sitearch'
12661sitearchexp='$sitearchexp'
12662sitelib='$sitelib'
12663sitelibexp='$sitelibexp'
12664sizetype='$sizetype'
12665sleep='$sleep'
12666smail='$smail'
12667small='$small'
12668so='$so'
12669sockethdr='$sockethdr'
12670socketlib='$socketlib'
12671sort='$sort'
12672spackage='$spackage'
12673spitshell='$spitshell'
12674split='$split'
12675src='$src'
12676ssizetype='$ssizetype'
12677startperl='$startperl'
12678startsh='$startsh'
12679static_ext='$static_ext'
12680stdchar='$stdchar'
12681stdio_base='$stdio_base'
12682stdio_bufsiz='$stdio_bufsiz'
12683stdio_cnt='$stdio_cnt'
12684stdio_filbuf='$stdio_filbuf'
12685stdio_ptr='$stdio_ptr'
12686strings='$strings'
12687submit='$submit'
12688subversion='$subversion'
12689sysman='$sysman'
12690tail='$tail'
12691tar='$tar'
12692tbl='$tbl'
12693tee='$tee'
12694test='$test'
12695timeincl='$timeincl'
12696timetype='$timetype'
12697touch='$touch'
12698tr='$tr'
12699trnl='$trnl'
12700troff='$troff'
12701uidtype='$uidtype'
12702uname='$uname'
12703uniq='$uniq'
12704use64bits='$use64bits'
12705usedl='$usedl'
12706usemultiplicity='$usemultiplicity'
12707usemymalloc='$usemymalloc'
12708usenm='$usenm'
12709useopcode='$useopcode'
12710useperlio='$useperlio'
12711useposix='$useposix'
12712usesfio='$usesfio'
12713useshrplib='$useshrplib'
12714usethreads='$usethreads'
12715usevfork='$usevfork'
12716usrinc='$usrinc'
12717uuname='$uuname'
12718version='$version'
12719vi='$vi'
12720voidflags='$voidflags'
12721xlibpth='$xlibpth'
12722zcat='$zcat'
12723zip='$zip'
12724EOT
12725
12726: Add in command line options if available
12727$test -f UU/cmdline.opt && $cat UU/cmdline.opt >> config.sh
12728
12729: add special variables
12730$test -f $src/patchlevel.h && \
12731awk '/^#define/ {printf "%s=%s\n",$2,$3}' $src/patchlevel.h >>config.sh
12732echo "CONFIG=true" >>config.sh
12733
12734: propagate old symbols
12735if $test -f UU/config.sh; then
12736 <UU/config.sh sort | uniq >UU/oldconfig.sh
12737 sed -n 's/^\([a-zA-Z_0-9]*\)=.*/\1/p' config.sh config.sh UU/oldconfig.sh |\
12738 sort | uniq -u >UU/oldsyms
12739 set X `cat UU/oldsyms`
12740 shift
12741 case $# in
12742 0) ;;
12743 *)
12744 cat <<EOM
12745Hmm...You had some extra variables I don't know about...I'll try to keep 'em...
12746EOM
12747 echo "# Variables propagated from previous config.sh file." >>config.sh
12748 for sym in `cat UU/oldsyms`; do
12749 echo " Propagating $hint variable "'$'"$sym..."
12750 eval 'tmp="$'"${sym}"'"'
12751 echo "$tmp" | \
12752 sed -e "s/'/'\"'\"'/g" -e "s/^/$sym='/" -e "s/$/'/" >>config.sh
12753 done
12754 ;;
12755 esac
12756fi
12757
12758: Finish up by extracting the .SH files
12759case "$alldone" in
12760exit)
12761 $rm -rf UU
12762 echo "Done."
12763 exit 0
12764 ;;
12765cont)
12766 ;;
12767'')
12768 dflt=''
12769 nostick=true
12770 $cat <<EOM
12771
12772If you'd like to make any changes to the config.sh file before I begin
12773to configure things, do it as a shell escape now (e.g. !vi config.sh).
12774
12775EOM
12776 rp="Press return or use a shell escape to edit config.sh:"
12777 . UU/myread
12778 nostick=''
12779 case "$ans" in
12780 '') ;;
12781 *) : in case they cannot read
12782 sh 1>&4 -c "$ans";;
12783 esac
12784 ;;
12785esac
12786
12787: if this fails, just run all the .SH files by hand
12788. ./config.sh
12789
12790echo " "
12791exec 1>&4
12792. ./UU/extract
12793
12794if $contains '^depend:' [Mm]akefile >/dev/null 2>&1; then
12795 dflt=y
12796 case "$silent" in
12797 true) ;;
12798 *)
12799 $cat <<EOM
12800
12801Now you need to generate make dependencies by running "$make depend".
12802You might prefer to run it in background: "$make depend > makedepend.out &"
12803It can take a while, so you might not want to run it right now.
12804
12805EOM
12806 ;;
12807 esac
12808 rp="Run $make depend now?"
12809 . UU/myread
12810 case "$ans" in
12811 y*)
12812 $make depend && echo "Now you must run a $make."
12813 ;;
12814 *)
12815 echo "You must run '$make depend' then '$make'."
12816 ;;
12817 esac
12818elif test -f [Mm]akefile; then
12819 echo " "
12820 echo "Now you must run a $make."
12821else
12822 echo "Done."
12823fi
12824
12825if $test -f Policy.sh; then
12826 $cat <<EOM
12827
12828If you compile $package on a different machine or from a different object
12829directory, copy the Policy.sh file from this object directory to the
12830new one before you run Configure -- this will help you with most of
12831the policy defaults.
12832
12833EOM
12834fi
12835if $test -f config.msg; then
12836 echo "Hmm. I also noted the following information while running:"
12837 echo " "
12838 $cat config.msg >&4
12839 $rm -f config.msg
12840fi
12841$rm -f kit*isdone ark*isdone
12842$rm -rf UU
12843
12844: End of Configure
12845