This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Eliminate Alpha warnings
[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
17# comp.sources.misc so you may fetch it yourself from your nearest
18# archive site. Check with Archie if you don't know where that can be.)
19#
20
8e07c86e 21# $Id: Head.U,v 3.0.1.8 1995/07/25 13:40:02 ram Exp $
2304df62 22#
24fef2a7 23# Generated on Sat Feb 1 00:26:40 EST 1997 [metaconfig 3.0 PL60]
2304df62
AD
24
25cat >/tmp/c1$$ <<EOF
26ARGGGHHHH!!!!!
27
28SCO csh still thinks true is false. Write to SCO today and tell them that next
29year Configure ought to "rm /bin/csh" unless they fix their blasted shell. :-)
30
31(Actually, Configure ought to just patch csh in place. Hmm. Hmmmmm. All
32we'd have to do is go in and swap the && and || tokens, wherever they are.)
33
34[End of diatribe. We now return you to your regularly scheduled programming...]
35EOF
36cat >/tmp/c2$$ <<EOF
37
38OOPS! You naughty creature! You didn't run Configure with sh!
39I will attempt to remedy the situation by running sh for you...
40EOF
41
42true || cat /tmp/c1$$ /tmp/c2$$
43true || exec sh $0 $argv:q
44
45(exit $?0) || cat /tmp/c2$$
46(exit $?0) || exec sh $0 $argv:q
47rm -f /tmp/c1$$ /tmp/c2$$
48
a0d0e21e
LW
49: compute my invocation name
50me=$0
51case "$0" in
52*/*)
53 me=`echo $0 | sed -e 's!.*/\(.*\)!\1!' 2>/dev/null`
54 test "$me" || me=$0
55 ;;
56esac
57
8e07c86e
AD
58: Proper PATH separator
59p_=:
60: On OS/2 this directory should exist if this is not floppy only system :-]
4b40f7a3 61if test -d c:/. -a -n "$OS2_SHELL"; then
8e07c86e
AD
62 p_=\;
63 PATH=`cmd /c "echo %PATH%" | tr '\\\\' / `
64 OS2_SHELL=`cmd /c "echo %OS2_SHELL%" | tr '\\\\' / | tr '[A-Z]' '[a-z]'`
65fi
a0d0e21e
LW
66
67: Proper PATH setting
68paths='/bin /usr/bin /usr/local/bin /usr/ucb /usr/local /usr/lbin'
16d20bd9 69paths="$paths /opt/bin /opt/local/bin /opt/local /opt/lbin"
232e078e 70paths="$paths /usr/5bin /etc /usr/gnu/bin /usr/new /usr/new/bin /usr/nbin"
16d20bd9 71paths="$paths /opt/gnu/bin /opt/new /opt/new/bin /opt/nbin"
232e078e
AD
72paths="$paths /sys5.3/bin /sys5.3/usr/bin /bsd4.3/bin /bsd4.3/usr/ucb"
73paths="$paths /bsd4.3/usr/bin /usr/bsd /bsd43/bin /usr/ccs/bin"
74paths="$paths /etc /usr/lib /usr/ucblib /lib /usr/ccs/lib"
75paths="$paths /sbin /usr/sbin /usr/libexec"
a0d0e21e
LW
76
77for p in $paths
78do
8e07c86e
AD
79 case "$p_$PATH$p_" in
80 *$p_$p$p_*) ;;
81 *) test -d $p && PATH=$PATH$p_$p ;;
a0d0e21e
LW
82 esac
83done
84
8e07c86e 85PATH=.$p_$PATH
2304df62
AD
86export PATH
87
a0d0e21e 88: Sanity checks
2304df62 89if test ! -t 0; then
a0d0e21e 90 echo "Say 'sh $me', not 'sh <$me'"
2304df62
AD
91 exit 1
92fi
93
ff0cee69 94: Test and see if we are running under ksh, either blatantly or in disguise.
95if (PATH=.; alias -x) >/dev/null 2>&1; then
96 : running under ksh. Is this a good thing?
97 if test -d /usr/lpp -a -f /usr/bin/bsh -a -f /usr/bin/uname ; then
98 if test X`/usr/bin/uname -v` = X4 ; then
99 : on AIX 4, /bin/sh is really ksh, and it causes us problems.
100 : Avoid it
2304df62 101 cat <<'EOM'
ff0cee69 102(Feeding myself to /usr/bin/bsh to avoid AIX 4's /bin/sh.)
2304df62 103EOM
ecfc5424 104 unset ENV
ff0cee69 105 exec /usr/bin/bsh $0 "$@"
2304df62 106 fi
ff0cee69 107 else
108 if test ! -f /hp-ux ; then
2304df62 109 : Warn them if they use ksh on other systems
a0d0e21e
LW
110 cat <<EOM
111(I see you are using the Korn shell. Some ksh's blow up on $me,
8ff267be 112especially on older exotic systems. If yours does, try the Bourne
113shell instead.)
2304df62 114EOM
ff0cee69 115 fi
116 fi
117else
118 : Not running under ksh. Maybe we should be?
119 : On HP-UX, large Configure scripts may exercise a bug in /bin/sh
120 if test -f /hp-ux -a -f /bin/ksh; then
121 cat <<'EOM'
122(Feeding myself to ksh to avoid nasty sh bug in "here document" expansion.)
123EOM
124 unset ENV
125 exec /bin/ksh $0 "$@"
126 fi
2304df62
AD
127fi
128
129: Configure runs within the UU subdirectory
130test -d UU || mkdir UU
8e07c86e 131cd UU && rm -f ./*
2304df62 132
a0d0e21e 133dynamic_ext=''
2304df62 134extensions=''
a0d0e21e
LW
135known_extensions=''
136static_ext=''
8ff267be 137useopcode=''
a0d0e21e 138useposix=''
ecfc5424 139d_bsd=''
40a7a20a 140d_eunice=''
2304df62
AD
141d_xenix=''
142eunicefix=''
143Mcc=''
144awk=''
145bash=''
146bison=''
147byacc=''
148cat=''
149chgrp=''
150chmod=''
151chown=''
ecfc5424 152comm=''
2304df62
AD
153compress=''
154cp=''
155cpio=''
156cpp=''
157csh=''
158date=''
159echo=''
160egrep=''
161emacs=''
162expr=''
163find=''
164flex=''
165gcc=''
166grep=''
8ff267be 167gzip=''
2304df62
AD
168inews=''
169ksh=''
170less=''
171line=''
172lint=''
173ln=''
174lp=''
175lpr=''
176ls=''
177mail=''
178mailx=''
2304df62
AD
179mkdir=''
180more=''
181mv=''
182nroff=''
183perl=''
184pg=''
185pmake=''
186pr=''
187rm=''
188rmail=''
189sed=''
190sendmail=''
2304df62
AD
191shar=''
192sleep=''
193smail=''
194sort=''
195submit=''
196tail=''
197tar=''
198tbl=''
199test=''
200touch=''
201tr=''
202troff=''
203uname=''
204uniq=''
205uuname=''
206vi=''
207zcat=''
8ff267be 208zip=''
1aef975c 209full_sed=''
a0d0e21e 210libswanted=''
2304df62
AD
211hint=''
212myuname=''
85e6fe83
LW
213osname=''
214osvers=''
2304df62
AD
215Author=''
216Date=''
217Header=''
218Id=''
219Locker=''
220Log=''
221RCSfile=''
222Revision=''
223Source=''
224State=''
4633a7c4
LW
225ar=''
226archobjs=''
227exe_ext=''
228firstmakefile=''
229lib_ext=''
230obj_ext=''
231path_sep=''
2304df62 232afs=''
a0d0e21e
LW
233alignbytes=''
234archlib=''
235archlibexp=''
a0d0e21e
LW
236d_archlib=''
237installarchlib=''
40000a8c
AD
238archname=''
239myarchname=''
ecfc5424 240baserev=''
2304df62
AD
241bin=''
242binexp=''
243installbin=''
5f05dabc 244bincompat3=''
245d_bincompat3=''
2304df62
AD
246byteorder=''
247cc=''
248gccversion=''
249ccflags=''
250cppflags=''
251ldflags=''
252lkflags=''
8e07c86e 253locincpth=''
2304df62 254optimize=''
8e07c86e 255cf_email=''
2304df62
AD
256cf_by=''
257cf_time=''
258contains=''
a0d0e21e 259cpp_stuff=''
2304df62
AD
260cpplast=''
261cppminus=''
262cpprun=''
263cppstdin=''
264d_access=''
a0d0e21e 265d_alarm=''
ecfc5424 266d_attribut=''
2304df62
AD
267d_bcmp=''
268d_bcopy=''
269d_bzero=''
270d_casti32=''
271castflags=''
272d_castneg=''
a0d0e21e
LW
273d_chown=''
274d_chroot=''
2304df62 275d_chsize=''
a0d0e21e
LW
276d_closedir=''
277d_void_closedir=''
2304df62
AD
278d_const=''
279cryptlib=''
280d_crypt=''
281d_csh=''
1aef975c 282full_csh=''
a0d0e21e
LW
283d_cuserid=''
284d_dbl_dig=''
285d_difftime=''
286d_dlerror=''
287d_dlopen=''
288d_dlsymun=''
2304df62 289d_dosuid=''
a0d0e21e 290d_suidsafe=''
2304df62
AD
291d_dup2=''
292d_fchmod=''
293d_fchown=''
294d_fcntl=''
a0d0e21e
LW
295d_fd_macros=''
296d_fd_set=''
297d_fds_bits=''
298d_fgetpos=''
2304df62
AD
299d_flexfnam=''
300d_flock=''
a0d0e21e
LW
301d_fork=''
302d_fsetpos=''
5f05dabc 303d_ftime=''
304d_gettimeod=''
a0d0e21e 305d_Gconvert=''
2304df62 306d_getgrps=''
5cd24f17 307d_setgrps=''
2304df62
AD
308d_gethent=''
309aphostname=''
310d_gethname=''
311d_phostname=''
312d_uname=''
a0d0e21e 313d_getlogin=''
2afac517 314d_getpgid=''
2304df62 315d_getpgrp2=''
2afac517 316d_bsdgetpgrp=''
2304df62 317d_getpgrp=''
a0d0e21e 318d_getppid=''
2304df62 319d_getprior=''
a4f3eea9 320d_gnulibc=''
2304df62 321d_htonl=''
7e1af8bc 322d_inetaton=''
2304df62
AD
323d_isascii=''
324d_killpg=''
325d_link=''
a0d0e21e
LW
326d_locconv=''
327d_lockf=''
2304df62 328d_lstat=''
a0d0e21e
LW
329d_mblen=''
330d_mbstowcs=''
331d_mbtowc=''
2304df62
AD
332d_memcmp=''
333d_memcpy=''
334d_memmove=''
335d_memset=''
336d_mkdir=''
a0d0e21e
LW
337d_mkfifo=''
338d_mktime=''
2304df62
AD
339d_msg=''
340d_msgctl=''
341d_msgget=''
342d_msgrcv=''
343d_msgsnd=''
a0d0e21e 344d_nice=''
2304df62 345d_open3=''
a0d0e21e
LW
346d_fpathconf=''
347d_pathconf=''
348d_pause=''
349d_pipe=''
8e07c86e 350d_poll=''
2304df62
AD
351d_portable=''
352d_readdir=''
85e6fe83
LW
353d_rewinddir=''
354d_seekdir=''
355d_telldir=''
a0d0e21e 356d_readlink=''
2304df62
AD
357d_rename=''
358d_rmdir=''
359d_safebcpy=''
360d_safemcpy=''
36477c24 361d_sanemcmp=''
2304df62
AD
362d_select=''
363d_sem=''
364d_semctl=''
365d_semget=''
366d_semop=''
367d_setegid=''
368d_seteuid=''
a0d0e21e 369d_setlinebuf=''
2304df62
AD
370d_setlocale=''
371d_setpgid=''
372d_setpgrp2=''
373d_bsdpgrp=''
2afac517 374d_bsdsetpgrp=''
2304df62
AD
375d_setpgrp=''
376d_setprior=''
377d_setregid=''
378d_setresgid=''
379d_setresuid=''
380d_setreuid=''
381d_setrgid=''
382d_setruid=''
383d_setsid=''
760ac839 384d_sfio=''
8ff267be 385usesfio=''
2304df62
AD
386d_shm=''
387d_shmat=''
a0d0e21e
LW
388d_shmatprototype=''
389shmattype=''
2304df62
AD
390d_shmctl=''
391d_shmdt=''
392d_shmget=''
2c7991dc 393d_sigaction=''
8ff267be 394d_sigsetjmp=''
2304df62
AD
395d_oldsock=''
396d_socket=''
397d_sockpair=''
398sockethdr=''
399socketlib=''
400d_statblks=''
c2960299
AD
401d_stdio_cnt_lval=''
402d_stdio_ptr_lval=''
16d20bd9 403d_stdiobase=''
2304df62 404d_stdstdio=''
16d20bd9
AD
405stdio_base=''
406stdio_bufsiz=''
407stdio_cnt=''
408stdio_ptr=''
2304df62
AD
409d_index=''
410d_strchr=''
a0d0e21e 411d_strcoll=''
2304df62
AD
412d_strctcpy=''
413d_strerrm=''
414d_strerror=''
415d_sysernlst=''
416d_syserrlst=''
a89d8a78
DH
417d_strtod=''
418d_strtol=''
419d_strtoul=''
a0d0e21e 420d_strxfrm=''
2304df62
AD
421d_symlink=''
422d_syscall=''
a0d0e21e 423d_sysconf=''
2304df62 424d_system=''
a0d0e21e
LW
425d_tcgetpgrp=''
426d_tcsetpgrp=''
85e6fe83
LW
427d_time=''
428timetype=''
2304df62
AD
429clocktype=''
430d_times=''
431d_truncate=''
a0d0e21e
LW
432d_tzname=''
433d_umask=''
2304df62 434d_vfork=''
a0d0e21e 435usevfork=''
2304df62
AD
436d_voidsig=''
437signal_t=''
438d_volatile=''
439d_charvspr=''
440d_vprintf=''
441d_wait4=''
442d_waitpid=''
a0d0e21e
LW
443d_wcstombs=''
444d_wctomb=''
445dlext=''
85e6fe83
LW
446cccdlflags=''
447ccdlflags=''
2304df62 448dlsrc=''
232e078e 449ld=''
85e6fe83 450lddlflags=''
2304df62 451usedl=''
a0d0e21e 452fpostype=''
2304df62
AD
453gidtype=''
454groupstype=''
455h_fcntl=''
456h_sysfile=''
ecfc5424
AD
457db_hashtype=''
458db_prefixtype=''
a0d0e21e 459i_db=''
2304df62 460i_dbm=''
8e07c86e 461i_rpcsvcdbm=''
2304df62 462d_dirnamlen=''
a0d0e21e 463direntrytype=''
2304df62 464i_dirent=''
a0d0e21e 465i_dld=''
2304df62
AD
466i_dlfcn=''
467i_fcntl=''
a0d0e21e 468i_float=''
2304df62
AD
469i_gdbm=''
470i_grp=''
a0d0e21e 471i_limits=''
4633a7c4 472i_locale=''
a0d0e21e
LW
473i_malloc=''
474i_math=''
85e6fe83 475i_memory=''
2304df62 476i_ndbm=''
85e6fe83 477i_neterrno=''
2304df62
AD
478i_niin=''
479i_sysin=''
480d_pwage=''
481d_pwchange=''
482d_pwclass=''
483d_pwcomment=''
484d_pwexpire=''
485d_pwquota=''
486i_pwd=''
760ac839 487i_sfio=''
2304df62 488i_stddef=''
a0d0e21e 489i_stdlib=''
2304df62
AD
490i_string=''
491strings=''
492i_sysdir=''
493i_sysfile=''
494d_voidtty=''
495i_bsdioctl=''
a0d0e21e 496i_sysfilio=''
2304df62
AD
497i_sysioctl=''
498i_syssockio=''
499i_sysndir=''
a0d0e21e 500i_sysparam=''
8ff267be 501i_sysresrc=''
2304df62 502i_sysselct=''
1aef975c 503i_sysstat=''
a0d0e21e 504i_systimes=''
fed7345c 505i_systypes=''
25f94b33 506i_sysun=''
8ff267be 507i_syswait=''
2304df62
AD
508i_sgtty=''
509i_termio=''
510i_termios=''
511i_systime=''
512i_systimek=''
513i_time=''
514timeincl=''
85e6fe83 515i_unistd=''
2304df62 516i_utime=''
760ac839 517i_values=''
a0d0e21e 518i_stdarg=''
2304df62
AD
519i_varargs=''
520i_varhdr=''
521i_vfork=''
522intsize=''
24fef2a7
AD
523longsize=''
524shortsize=''
2304df62 525libc=''
8ff267be 526libperl=''
2afac517 527shrpenv=''
8ff267be 528useshrplib=''
a0d0e21e 529glibpth=''
2304df62 530libpth=''
8e07c86e 531loclibpth=''
2304df62
AD
532plibpth=''
533xlibpth=''
534libs=''
85e6fe83
LW
535lns=''
536lseektype=''
8ff267be 537make=''
538make_set_make=''
85e6fe83 539d_mymalloc=''
94b6baf5 540freetype=''
2304df62
AD
541mallocobj=''
542mallocsrc=''
543malloctype=''
544usemymalloc=''
16d20bd9
AD
545installman1dir=''
546man1dir=''
547man1direxp=''
548man1ext=''
549installman3dir=''
550man3dir=''
551man3direxp=''
552man3ext=''
2304df62
AD
553huge=''
554large=''
555medium=''
556models=''
557small=''
558split=''
a0d0e21e 559modetype=''
2304df62
AD
560mydomain=''
561myhostname=''
562phostname=''
563c=''
564n=''
8e07c86e
AD
565d_eofnblk=''
566eagain=''
567o_nonblock=''
568rd_nodata=''
2304df62
AD
569groupcat=''
570hostcat=''
571passcat=''
4633a7c4
LW
572d_oldarchlib=''
573oldarchlib=''
574oldarchlibexp=''
85e6fe83
LW
575orderlib=''
576ranlib=''
2304df62
AD
577package=''
578spackage=''
2c7991dc 579pager=''
ecfc5424 580patchlevel=''
760ac839 581subversion=''
8e07c86e 582perladmin=''
4633a7c4 583perlpath=''
a0d0e21e 584prefix=''
1aef975c 585prefixexp=''
2304df62
AD
586installprivlib=''
587privlib=''
588privlibexp=''
589prototype=''
590randbits=''
591installscript=''
592scriptdir=''
593scriptdirexp=''
a0d0e21e 594selecttype=''
8ff267be 595sh=''
2304df62 596sig_name=''
8e07c86e 597sig_num=''
4633a7c4
LW
598installsitearch=''
599sitearch=''
600sitearchexp=''
25f94b33
AD
601installsitelib=''
602sitelib=''
603sitelibexp=''
a0d0e21e
LW
604sizetype=''
605so=''
2304df62
AD
606sharpbang=''
607shsharp=''
608spitshell=''
a0d0e21e 609ssizetype=''
4633a7c4 610startperl=''
2304df62
AD
611startsh=''
612stdchar=''
613sysman=''
614uidtype=''
615nm_opt=''
40a7a20a 616nm_so_opt=''
2304df62
AD
617runnm=''
618usenm=''
8ff267be 619useperlio=''
2304df62
AD
620incpath=''
621mips=''
622mips_type=''
623usrinc=''
624defvoidused=''
625voidflags=''
2304df62
AD
626CONFIG=''
627
ecfc5424
AD
628define='define'
629undef='undef'
630smallmach='pdp11 i8086 z8000 i80286 iAPX286'
631rmlist=''
632
633: We must find out about Eunice early
634eunicefix=':'
635if test -f /etc/unixtovms; then
636 eunicefix=/etc/unixtovms
637fi
638if test -f /etc/unixtovms.exe; then
639 eunicefix=/etc/unixtovms.exe
640fi
641
642: list of known cpp symbols, sorted alphabetically
643al="AMIX BIT_MSF BSD BSD4_3 BSD_NET2 CMU CRAY DGUX DOLPHIN DPX2"
644al="$al GO32 GOULD_PN HP700 I386 I80960 I960 Lynx M68000 M68K MACH"
645al="$al MIPSEB MIPSEL MSDOS MTXINU MULTIMAX MVS"
646al="$al M_COFF M_I186 M_I286 M_I386 M_I8086 M_I86 M_I86SM"
647al="$al M_SYS3 M_SYS5 M_SYSIII M_SYSV M_UNIX M_XENIX"
648al="$al NeXT OCS88 OSF1 PARISC PC532 PORTAR POSIX"
649al="$al PWB R3000 RES RISC6000 RT Sun386i SVR3 SVR4"
650al="$al SYSTYPE_BSD SYSTYPE_SVR4 SYSTYPE_SYSV Tek4132 Tek4300"
651al="$al UMAXV USGr4 USGr4_2 UTEK UTS UTek UnicomPBB UnicomPBD Utek"
652al="$al VMS Xenix286"
653al="$al _AIX _AIX32 _AIX370 _AM29000 _COFF _CRAY _CX_UX _EPI"
654al="$al _IBMESA _IBMR2 _M88K _M88KBCS_TARGET"
655al="$al _MIPSEB _MIPSEL _M_COFF _M_I86 _M_I86SM _M_SYS3"
656al="$al _M_SYS5 _M_SYSIII _M_SYSV _M_UNIX _M_XENIX _NLS _PGC_ _R3000"
657al="$al _SYSTYPE_BSD _SYSTYPE_BSD43 _SYSTYPE_SVR4"
658al="$al _SYSTYPE_SYSV _SYSV3 _U370 _UNICOS"
659al="$al __386BSD__ __BIG_ENDIAN __BIG_ENDIAN__ __BSD_4_4__"
660al="$al __DGUX__ __DPX2__ __H3050R __H3050RX"
661al="$al __LITTLE_ENDIAN __LITTLE_ENDIAN__ __MACH__"
662al="$al __MIPSEB __MIPSEB__ __MIPSEL __MIPSEL__"
663al="$al __Next__ __OSF1__ __PARAGON__ __PGC__ __PWB __STDC__"
664al="$al __SVR4_2__ __UMAXV__"
665al="$al ____386BSD____ __alpha __alpha__ __amiga"
666al="$al __bsd4_2 __bsd4_2__ __bsdi__ __convex__"
667al="$al __host_mips__"
668al="$al __hp9000s200 __hp9000s300 __hp9000s400 __hp9000s500"
669al="$al __hp9000s500 __hp9000s700 __hp9000s800"
670al="$al __hppa __hpux __hp_osf __i286 __i286__ __i386 __i386__"
671al="$al __i486 __i486__ __i860 __i860__ __ibmesa __ksr1__ __linux__"
672al="$al __m68k __m68k__ __m88100__ __m88k __m88k__"
673al="$al __mc68000 __mc68000__ __mc68020 __mc68020__"
674al="$al __mc68030 __mc68030__ __mc68040 __mc68040__"
675al="$al __mc88100 __mc88100__ __mips __mips__"
676al="$al __motorola__ __osf__ __pa_risc __sparc__ __stdc__"
677al="$al __sun __sun__ __svr3__ __svr4__ __ultrix __ultrix__"
678al="$al __unix __unix__ __uxpm__ __uxps__ __vax __vax__"
679al="$al _host_mips _mips _unix"
680al="$al a29k aegis aix aixpc alliant alpha am29000 amiga ansi ardent"
681al="$al apollo ardent att386 att3b"
682al="$al bsd bsd43 bsd4_2 bsd4_3 bsd4_4 bsdi bull"
683al="$al cadmus clipper concurrent convex cray ctix"
684al="$al dmert encore gcos gcx gimpel gould"
685al="$al hbullx20 hcx host_mips hp200 hp300 hp700 hp800"
686al="$al hp9000 hp9000s300 hp9000s400 hp9000s500"
687al="$al hp9000s700 hp9000s800 hp9k8 hppa hpux"
688al="$al i186 i286 i386 i486 i8086"
689al="$al i80960 i860 iAPX286 ibm ibm032 ibmrt interdata is68k"
690al="$al ksr1 linux luna luna88k m68k m88100 m88k"
691al="$al mc300 mc500 mc68000 mc68010 mc68020 mc68030"
692al="$al mc68040 mc68060 mc68k mc68k32 mc700"
693al="$al mc88000 mc88100 merlin mert mips mvs n16"
694al="$al ncl_el ncl_mr"
695al="$al news1500 news1700 news1800 news1900 news3700"
696al="$al news700 news800 news900 ns16000 ns32000"
697al="$al ns32016 ns32332 ns32k nsc32000 os osf"
698al="$al parisc pc532 pdp11 plexus posix pyr"
699al="$al riscix riscos scs sequent sgi sinix sony sony_news"
700al="$al sonyrisc sparc sparclite spectrum stardent stratos"
701al="$al sun sun3 sun386 svr4 sysV68 sysV88"
702al="$al titan tower tower32 tower32_200 tower32_600 tower32_700"
703al="$al tower32_800 tower32_850 tss u370 u3b u3b2 u3b20 u3b200"
704al="$al u3b20d u3b5 ultrix unix unixpc unos vax venix vms"
705al="$al xenix z8000"
706
ecfc5424
AD
707groupstype=''
708i_whoami=''
8e07c86e
AD
709: default library list
710libswanted=''
711: set useposix=false in your hint file to disable the POSIX extension.
712useposix=true
8ff267be 713: set useopcode=false in your hint file to disable the Opcode extension.
714useopcode=true
40a7a20a 715: Define several unixisms. These can be used in hint files.
25f94b33
AD
716exe_ext=''
717: Extra object files, if any, needed on this platform.
718archobjs=''
8e07c86e 719: Possible local include directories to search.
25f94b33 720: Set locincpth to "" in a hint file to defeat local include searches.
8e07c86e
AD
721locincpth="/usr/local/include /opt/local/include /usr/gnu/include"
722locincpth="$locincpth /opt/gnu/include /usr/GNU/include /opt/GNU/include"
723:
724: no include file wanted by default
725inclwanted=''
726
ecfc5424
AD
727: change the next line if compiling for Xenix/286 on Xenix/386
728xlibpth='/usr/lib/386 /lib/386'
729
8e07c86e
AD
730: Possible local library directories to search.
731loclibpth="/usr/local/lib /opt/local/lib /usr/gnu/lib"
732loclibpth="$loclibpth /opt/gnu/lib /usr/GNU/lib /opt/GNU/lib"
733
ecfc5424 734: general looking path for locating libraries
4b40f7a3
SV
735glibpth="/shlib /usr/shlib /lib/pa1.1 /usr/lib/large"
736glibpth="$glibpth /lib /usr/lib $xlibpth"
737glibpth="$glibpth /lib/large /usr/lib/small /lib/small"
738glibpth="$glibpth /usr/ccs/lib /usr/ucblib /usr/local/lib"
ecfc5424
AD
739
740: Private path used by Configure to find libraries. Its value
741: is prepended to libpth. This variable takes care of special
742: machines, like the mips. Usually, it should be empty.
743plibpth=''
744
ecfc5424
AD
745: full support for void wanted by default
746defvoidused=15
747
ecfc5424 748: List of libraries we want.
760ac839 749libswanted='sfio net socket inet nsl nm ndbm gdbm dbm db malloc dl'
ecfc5424
AD
750libswanted="$libswanted dld ld sun m c cposix posix ndir dir crypt"
751libswanted="$libswanted ucb bsd BSD PW x"
1aef975c 752: We probably want to search /usr/shlib before most other libraries.
94b6baf5 753: This is only used by the lib/ExtUtils/MakeMaker.pm routine extliblist.
ecfc5424
AD
754glibpth=`echo " $glibpth " | sed -e 's! /usr/shlib ! !'`
755glibpth="/usr/shlib $glibpth"
756: Do not use vfork unless overridden by a hint file.
757usevfork=false
758
8ff267be 759: Find the basic shell for Bourne shell scripts
760case "$sh" in
761'')
762 : SYSTYPE is for some older MIPS systems.
763 : I do not know if it is still needed.
764 case "$SYSTYPE" in
765 *bsd*|sys5*) xxx="/$SYSTYPE/bin/sh";;
766 *) xxx='/bin/sh';;
767 esac
768 if test -f "$xxx"; then
769 sh="$xxx"
770 else
771 : Build up a list and do a single loop so we can 'break' out.
772 pth=`echo $PATH | sed -e "s/$p_/ /g"`
773 for xxx in sh bash ksh pdksh ash; do
774 for p in $pth; do
775 try="$try ${p}/${xxx}"
776 done
777 done
778 for xxx in $try; do
779 if test -f "$xxx"; then
780 sh="$xxx";
781 echo "Your Bourne shell appears to be in $sh."
782 break
783 elif test -f "$xxx.exe"; then
784 sh="$xxx";
785 echo "Hmm. Your Bourne shell appears to be in $sh."
786 break
787 fi
788 done
789 fi
790 ;;
791esac
792
793case "$sh" in
794'') cat <<EOM >&2
795$me: Fatal Error: I can't find a Bourne Shell anywhere.
796Usually it's in /bin/sh. How did you even get this far?
284c50cc 797Please contact me (Chip Salzenberg) at chip@perl.com and
8ff267be 798we'll try to straigten this all out.
799EOM
800 exit 1
801 ;;
802esac
803
760ac839 804: see if sh knows # comments
8ff267be 805if `$sh -c '#' >/dev/null 2>&1`; then
760ac839
LW
806 shsharp=true
807 spitshell=cat
808 echo " "
760ac839
LW
809 xcat=/bin/cat
810 test -f $xcat || xcat=/usr/bin/cat
811 echo "#!$xcat" >try
812 $eunicefix try
813 chmod +x try
814 ./try > today
815 if test -s today; then
760ac839
LW
816 sharpbang='#!'
817 else
818 echo "#! $xcat" > try
819 $eunicefix try
820 chmod +x try
821 ./try > today
822 if test -s today; then
760ac839
LW
823 sharpbang='#! '
824 else
8ff267be 825 echo "Okay, let's see if #! works on this system..."
760ac839
LW
826 echo "It's just a comment."
827 sharpbang=': use '
828 fi
829 fi
830else
8ff267be 831 echo "Your $sh doesn't grok # comments--I will strip them later on."
760ac839
LW
832 shsharp=false
833 cd ..
834 echo "exec grep -v '^[ ]*#'" >spitshell
835 chmod +x spitshell
836 $eunicefix spitshell
837 spitshell=`pwd`/spitshell
838 cd UU
839 echo "I presume that if # doesn't work, #! won't work either!"
840 sharpbang=': use '
841fi
842rm -f try today
843
844: figure out how to guarantee sh startup
8ff267be 845case "$startsh" in
846'') startsh=${sharpbang}${sh} ;;
847*)
760ac839 848esac
760ac839
LW
849cat >try <<EOSS
850$startsh
851set abc
852test "$?abc" != 1
853EOSS
854
855chmod +x try
856$eunicefix try
857if ./try; then
8ff267be 858 : echo "Yup, it does."
760ac839 859else
8ff267be 860 echo "Hmm. '$startsh' didn't work."
861 echo "You may have to fix up the shell scripts to make sure sh runs them."
760ac839
LW
862fi
863rm -f try
864
2304df62 865: script used to extract .SH files with variable substitutions
760ac839
LW
866cat >extract <<EOS
867$startsh
868EOS
869cat >>extract <<'EOS'
2304df62
AD
870CONFIG=true
871echo "Doing variable substitutions on .SH files..."
872if test -f MANIFEST; then
5f05dabc 873 shlist=`awk '{print $1}' <MANIFEST | grep '\.SH'`
a0d0e21e
LW
874 : Pick up possible extension manifests.
875 for dir in ext/* ; do
876 if test -f $dir/MANIFEST; then
5f05dabc 877 xxx=`awk '{print $1}' < $dir/MANIFEST |
a0d0e21e
LW
878 sed -n "/\.SH$/ s@^@$dir/@p"`
879 shlist="$shlist $xxx"
880 fi
881 done
882 set x $shlist
2304df62
AD
883else
884 echo "(Looking for .SH files under the current directory.)"
5f05dabc 885 set x `find . -name "*.SH" -print`
2304df62
AD
886fi
887shift
888case $# in
8890) set x *.SH; shift;;
890esac
891if test ! -f $1; then
892 shift
893fi
894for file in $*; do
895 case "$file" in
896 */*)
897 dir=`expr X$file : 'X\(.*\)/'`
898 file=`expr X$file : 'X.*/\(.*\)'`
899 (cd $dir && . ./$file)
900 ;;
901 *)
902 . ./$file
903 ;;
904 esac
905done
906if test -f config_h.SH; then
907 if test ! -f config.h; then
908 : oops, they left it out of MANIFEST, probably, so do it anyway.
909 . ./config_h.SH
910 fi
911fi
912EOS
913
914: produce awk script to parse command line options
915cat >options.awk <<'EOF'
916BEGIN {
16d20bd9 917 optstr = "dD:eEf:hKOrsSU:V"; # getopt-style specification
2304df62
AD
918
919 len = length(optstr);
920 for (i = 1; i <= len; i++) {
921 c = substr(optstr, i, 1);
922 if (i < len) a = substr(optstr, i + 1, 1); else a = "";
923 if (a == ":") {
924 arg[c] = 1;
925 i++;
926 }
927 opt[c] = 1;
928 }
929}
930{
931 expect = 0;
932 str = $0;
933 if (substr(str, 1, 1) != "-") {
934 printf("'%s'\n", str);
935 next;
936 }
937 len = length($0);
938 for (i = 2; i <= len; i++) {
939 c = substr(str, i, 1);
940 if (!opt[c]) {
941 printf("-%s\n", substr(str, i));
942 next;
943 }
944 printf("-%s\n", c);
945 if (arg[c]) {
946 if (i < len)
947 printf("'%s'\n", substr(str, i + 1));
948 else
949 expect = 1;
950 next;
951 }
952 }
953}
954END {
955 if (expect)
956 print "?";
957}
958EOF
959
960: process the command line options
4633a7c4
LW
961set X `for arg in "$@"; do echo "X$arg"; done |
962 sed -e s/X// | awk -f options.awk`
2304df62
AD
963eval "set $*"
964shift
965rm -f options.awk
966
967: set up default values
968fastread=''
969reuseval=false
970config_sh=''
971alldone=''
972error=''
973silent=''
974extractsh=''
ecfc5424 975override=''
16d20bd9 976knowitall=''
28757baa 977
1aef975c 978rm -f optdef.sh
28757baa 979cat >optdef.sh <<EOS
980$startsh
981EOS
2304df62
AD
982
983: option parsing
984while test $# -gt 0; do
985 case "$1" in
986 -d) shift; fastread=yes;;
987 -e) shift; alldone=cont;;
988 -f)
989 shift
990 cd ..
991 if test -r "$1"; then
992 config_sh="$1"
993 else
a0d0e21e 994 echo "$me: cannot read config file $1." >&2
2304df62
AD
995 error=true
996 fi
997 cd UU
998 shift;;
999 -h) shift; error=true;;
1000 -r) shift; reuseval=true;;
1001 -s) shift; silent=true;;
1002 -E) shift; alldone=exit;;
16d20bd9 1003 -K) shift; knowitall=true;;
ecfc5424 1004 -O) shift; override=true;;
2304df62 1005 -S) shift; extractsh=true;;
a0d0e21e
LW
1006 -D)
1007 shift
1008 case "$1" in
1009 *=)
1010 echo "$me: use '-U symbol=', not '-D symbol='." >&2
1011 echo "$me: ignoring -D $1" >&2
1012 ;;
ecfc5424 1013 *=*) echo "$1" | \
1aef975c
AD
1014 sed -e "s/'/'\"'\"'/g" -e "s/=\(.*\)/='\1'/" >> optdef.sh;;
1015 *) echo "$1='define'" >> optdef.sh;;
a0d0e21e
LW
1016 esac
1017 shift
1018 ;;
1019 -U)
1020 shift
1021 case "$1" in
1aef975c 1022 *=) echo "$1" >> optdef.sh;;
a0d0e21e
LW
1023 *=*)
1024 echo "$me: use '-D symbol=val', not '-U symbol=val'." >&2
1025 echo "$me: ignoring -U $1" >&2
1026 ;;
1aef975c 1027 *) echo "$1='undef'" >> optdef.sh;;
a0d0e21e
LW
1028 esac
1029 shift
1030 ;;
2c7991dc 1031 -V) echo "$me generated by metaconfig 3.0 PL60." >&2
2304df62
AD
1032 exit 0;;
1033 --) break;;
a0d0e21e 1034 -*) echo "$me: unknown option $1" >&2; shift; error=true;;
2304df62
AD
1035 *) break;;
1036 esac
1037done
1038
1039case "$error" in
1040true)
1041 cat >&2 <<EOM
2afac517 1042Usage: $me [-dehrsEKOSV] [-f config.sh] [-D symbol] [-D symbol=value]
a0d0e21e 1043 [-U symbol] [-U symbol=]
2304df62
AD
1044 -d : use defaults for all answers.
1045 -e : go on without questioning past the production of config.sh.
1046 -f : specify an alternate default configuration file.
1047 -h : print this help message and exit (with an error status).
1048 -r : reuse C symbols value if possible (skips costly nm extraction).
1049 -s : silent mode, only echoes questions and essential information.
a0d0e21e
LW
1050 -D : define symbol to have some value:
1051 -D symbol symbol gets the value 'define'
1052 -D symbol=value symbol gets the value 'value'
2304df62 1053 -E : stop at the end of questions, after having produced config.sh.
16d20bd9 1054 -K : do not use unless you know what you are doing.
ecfc5424 1055 -O : let -D and -U override definitions from loaded configuration file.
2304df62 1056 -S : perform variable substitutions on all .SH files (can mix with -f)
a0d0e21e
LW
1057 -U : undefine symbol:
1058 -U symbol symbol gets the value 'undef'
1059 -U symbol= symbol gets completely empty
2304df62
AD
1060 -V : print version number and exit (with a zero status).
1061EOM
1062 exit 1
1063 ;;
1064esac
1065
1066exec 4>&1
1067case "$silent" in
1068true) exec 1>/dev/null;;
1069esac
1070
ecfc5424 1071: run the defines and the undefines, if any, but leave the file out there...
1aef975c
AD
1072touch optdef.sh
1073. ./optdef.sh
a0d0e21e 1074
2304df62
AD
1075case "$extractsh" in
1076true)
1077 case "$config_sh" in
1078 '') config_sh='config.sh'; config='./config.sh';;
1079 /*) config="$config_sh";;
1080 *) config="./$config_sh";;
1081 esac
1082 echo " "
1083 echo "Fetching answers from $config_sh..."
1084 cd ..
1085 . $config
1aef975c 1086 test "$override" && . ./optdef.sh
2304df62
AD
1087 echo " "
1088 . ./UU/extract
1089 rm -rf UU
1090 echo "Done."
1091 exit 0
1092 ;;
1093esac
1094
1095: set package name
85e6fe83 1096package=perl5
1aef975c
AD
1097first=`echo $package | sed -e 's/^\(.\).*/\1/'`
1098last=`echo $package | sed -e 's/^.\(.*\)/\1/'`
1099case "`echo AbyZ | tr '[:lower:]' '[:upper:]' 2>/dev/null`" in
1100ABYZ) spackage=`echo $first | tr '[:lower:]' '[:upper:]'`$last;;
1101*) spackage=`echo $first | tr '[a-z]' '[A-Z]'`$last;;
1102esac
2304df62
AD
1103
1104: Eunice requires " " instead of "", can you believe it
1105echo " "
1106: Here we go...
1107echo "Beginning of configuration questions for $package."
1108
1aef975c 1109trap 'echo " "; test -d ../UU && rm -rf X $rmlist; exit 1' 1 2 3 15
2304df62 1110
2304df62
AD
1111: Some greps do not return status, grrr.
1112echo "grimblepritz" >grimble
1113if grep blurfldyick grimble >/dev/null 2>&1 ; then
1114 contains=contains
1115elif grep grimblepritz grimble >/dev/null 2>&1 ; then
1116 contains=grep
1117else
1118 contains=contains
1119fi
1120rm -f grimble
1121: the following should work in any shell
1122case "$contains" in
1123contains*)
1124 echo " "
1125 echo "AGH! Grep doesn't return a status. Attempting remedial action."
1126 cat >contains <<'EOSS'
1127grep "$1" "$2" >.greptmp && cat .greptmp && test -s .greptmp
1128EOSS
1129chmod +x contains
1130esac
1131
1132: first determine how to suppress newline on echo command
1133echo " "
1134echo "Checking echo to see how to suppress newlines..."
1135(echo "hi there\c" ; echo " ") >.echotmp
1136if $contains c .echotmp >/dev/null 2>&1 ; then
1137 echo "...using -n."
1138 n='-n'
1139 c=''
1140else
1141 cat <<'EOM'
1142...using \c
1143EOM
1144 n=''
1145 c='\c'
1146fi
1147echo $n "The star should be here-->$c"
1148echo '*'
1149rm -f .echotmp
1150
1151: Now test for existence of everything in MANIFEST
1152echo " "
1153if test -f ../MANIFEST; then
1154 echo "First let's make sure your kit is complete. Checking..." >&4
1155 awk '$1 !~ /PACK[A-Z]+/ {print $1}' ../MANIFEST | split -50
1156 rm -f missing
1157 for filelist in x??; do
1158 (cd ..; ls `cat UU/$filelist` >/dev/null 2>>UU/missing)
1159 done
1160 if test -s missing; then
1161 cat missing >&4
1162 cat >&4 <<'EOM'
1163
1164THIS PACKAGE SEEMS TO BE INCOMPLETE.
1165
1166You have the option of continuing the configuration process, despite the
1167distinct possibility that your kit is damaged, by typing 'y'es. If you
1168do, don't blame me if something goes wrong. I advise you to type 'n'o
284c50cc 1169and contact the author (chip@perl.com).
2304df62
AD
1170
1171EOM
1172 echo $n "Continue? [n] $c" >&4
1173 read ans
1174 case "$ans" in
1175 y*)
1176 echo "Continuing..." >&4
1177 rm -f missing
1178 ;;
1179 *)
1180 echo "ABORTING..." >&4
1181 kill $$
1182 ;;
1183 esac
1184 else
1185 echo "Looks good..." >&4
1186 fi
1187else
1188 echo "There is no MANIFEST file. I hope your kit is complete !"
1189fi
1190rm -f missing x??
1191
1192: compute the number of columns on the terminal for proper question formatting
1193case "$COLUMNS" in
1194'') COLUMNS='80';;
1195esac
1196
1197: set up the echo used in my read
1198myecho="case \"\$xxxm\" in
1199'') echo $n \"\$rp $c\" >&4;;
1200*) case \"\$rp\" in
1201 '') echo $n \"[\$xxxm] $c\";;
1202 *)
1203 if test \`echo \"\$rp [\$xxxm] \" | wc -c\` -ge $COLUMNS; then
1204 echo \"\$rp\" >&4
1205 echo $n \"[\$xxxm] $c\" >&4
1206 else
1207 echo $n \"\$rp [\$xxxm] $c\" >&4
1208 fi
1209 ;;
1210 esac;;
1211esac"
1212
1213: now set up to do reads with possible shell escape and default assignment
1214cat <<EOSC >myread
28757baa 1215$startsh
2304df62
AD
1216xxxm=\$dflt
1217$myecho
1218ans='!'
1219case "\$fastread" in
1220yes) case "\$dflt" in
1221 '') ;;
1222 *) ans='';
1223 case "\$silent-\$rp" in
1224 true-) ;;
1225 *) echo " " >&4;;
1226 esac;;
1227 esac;;
1228*) case "\$silent" in
1229 true) case "\$rp" in
1230 '') ans='';;
1231 esac;;
1232 esac;;
1233esac
1234while expr "X\$ans" : "X!" >/dev/null; do
1235 read answ
1236 set x \$xxxm
1237 shift
ff0cee69 1238 aok=''; eval ans="\\"\$answ\\"" && aok=y
2304df62
AD
1239 case "\$answ" in
1240 "\$ans")
1241 case "\$ans" in
ecfc5424
AD
1242 \\&*)
1243 set x \`expr "X\$ans" : "X&\(.*\)\$"\`
1244 shift
1245 case "\$1" in
1246 -d)
1247 fastread=yes
40a7a20a 1248 echo "(OK, I'll run with -d after this question.)" >&4
ecfc5424
AD
1249 ;;
1250 -*)
40a7a20a 1251 echo "*** Sorry, \$1 not supported yet." >&4
ecfc5424
AD
1252 ;;
1253 esac
1254 $myecho
1255 ans=!
1256 ;;
2304df62
AD
1257 "!")
1258 sh 1>&4
1259 echo " "
1260 $myecho
1261 ;;
1262 !*)
1263 set x \`expr "X\$ans" : "X!\(.*\)\$"\`
1264 shift
1265 sh 1>&4 -c "\$*"
1266 echo " "
1267 $myecho
1268 ;;
1269 esac;;
1270 *)
1271 case "\$aok" in
1272 y)
1273 echo "*** Substitution done -- please confirm."
1274 xxxm="\$ans"
1275 ans=\`echo $n "\$ans$c" | tr '\012' ' '\`
1276 xxxm="\$ans"
1277 ans=!
1278 ;;
1279 *)
1280 echo "*** Error -- try again."
1281 ans=!
1282 ;;
1283 esac
1284 $myecho
1285 ;;
1286 esac
1287 case "\$ans\$xxxm\$nostick" in
1288 '')
1289 ans=!
1290 $myecho
1291 ;;
1292 esac
1293done
1294case "\$ans" in
1295'') ans="\$xxxm";;
1296esac
1297EOSC
1298
1299: create .config dir to save info across Configure sessions
1300test -d ../.config || mkdir ../.config
1301cat >../.config/README <<EOF
1302This directory created by Configure to save information that should
1303persist across sessions.
1304
1305You may safely delete it if you wish.
1306EOF
1307
1308: general instructions
1309needman=true
1310firsttime=true
760ac839
LW
1311user=`(logname) 2>/dev/null`
1312case "$user" in "")
1313 user=`whoami 2>&1` ;;
1314esac
2304df62
AD
1315if $contains "^$user\$" ../.config/instruct >/dev/null 2>&1; then
1316 firsttime=false
1317 echo " "
1318 rp='Would you like to see the instructions?'
1319 dflt=n
1320 . ./myread
1321 case "$ans" in
1322 [yY]*) ;;
1323 *) needman=false;;
1324 esac
1325fi
1326if $needman; then
1327 cat <<EOH
1328
1329This installation shell script will examine your system and ask you questions
a0d0e21e 1330to determine how the perl5 package should be installed. If you get
2304df62
AD
1331stuck on a question, you may use a ! shell escape to start a subshell or
1332execute a command. Many of the questions will have default answers in square
1333brackets; typing carriage return will give you the default.
1334
1335On some of the questions which ask for file or directory names you are allowed
1336to use the ~name construct to specify the login directory belonging to "name",
1337even if you don't have a shell which knows about that. Questions where this is
1338allowed will be marked "(~name ok)".
1339
1340EOH
1341 rp=''
1342 dflt='Type carriage return to continue'
1343 . ./myread
1344 cat <<'EOH'
1345
1346The prompter used in this script allows you to use shell variables and
1347backticks in your answers. You may use $1, $2, etc... to refer to the words
1348in the default answer, as if the default line was a set of arguments given to a
1349script shell. This means you may also use $* to repeat the whole default line,
1350so you do not have to re-type everything to add something to the default.
1351
1352Everytime there is a substitution, you will have to confirm. If there is an
1353error (e.g. an unmatched backtick), the default answer will remain unchanged
1354and you will be prompted again.
1355
1356If you are in a hurry, you may run 'Configure -d'. This will bypass nearly all
1357the questions and use the computed defaults (or the previous answers if there
1358was already a config.sh file). Type 'Configure -h' for a list of options.
ecfc5424
AD
1359You may also start interactively and then answer '& -d' at any prompt to turn
1360on the non-interactive behaviour for the remaining of the execution.
2304df62
AD
1361
1362EOH
1363 . ./myread
1364 cat <<EOH
1365
1366Much effort has been expended to ensure that this shell script will run on any
1367Unix system. If despite that it blows up on yours, your best bet is to edit
40000a8c
AD
1368Configure and run it again. If you can't run Configure for some reason,
1369you'll have to generate a config.sh file by hand. Whatever problems you
284c50cc 1370have, let me (chip@perl.com) know how I blew it.
2304df62
AD
1371
1372This installation script affects things in two ways:
1373
13741) it may do direct variable substitutions on some of the files included
1375 in this kit.
13762) it builds a config.h file for inclusion in C programs. You may edit
1377 any of these files as the need arises after running this script.
1378
1379If you make a mistake on a question, there is no easy way to back up to it
1380currently. The easiest thing to do is to edit config.sh and rerun all the SH
1381files. Configure will offer to let you do this before it runs the SH files.
1382
1383EOH
1384 dflt='Type carriage return to continue'
1385 . ./myread
1386 case "$firsttime" in
1387 true) echo $user >>../.config/instruct;;
1388 esac
1389fi
1390
2304df62
AD
1391: find out where common programs are
1392echo " "
1393echo "Locating common programs..." >&4
1394cat <<EOSC >loc
1395$startsh
1396case \$# in
13970) exit 1;;
1398esac
1399thing=\$1
1400shift
1401dflt=\$1
1402shift
1403for dir in \$*; do
1404 case "\$thing" in
1405 .)
1406 if test -d \$dir/\$thing; then
1407 echo \$dir
1408 exit 0
1409 fi
1410 ;;
1411 *)
a0d0e21e 1412 for thisthing in \$dir/\$thing; do
ecfc5424 1413 : just loop through to pick last item
a0d0e21e 1414 done
25f94b33 1415 if test -f \$thisthing; then
a0d0e21e 1416 echo \$thisthing
2304df62
AD
1417 exit 0
1418 elif test -f \$dir/\$thing.exe; then
1419 : on Eunice apparently
1420 echo \$dir/\$thing
1421 exit 0
1422 fi
1423 ;;
1424 esac
1425done
1426echo \$dflt
1427exit 1
1428EOSC
1429chmod +x loc
1430$eunicefix loc
1431loclist="
1432awk
1433cat
ecfc5424 1434comm
2304df62
AD
1435cp
1436echo
1437expr
a0d0e21e 1438find
2304df62 1439grep
a0d0e21e 1440ls
2304df62 1441mkdir
2304df62
AD
1442rm
1443sed
1444sort
85e6fe83 1445touch
2304df62
AD
1446tr
1447uniq
1448"
1449trylist="
1450Mcc
2304df62
AD
1451byacc
1452cpp
1453csh
1454date
1455egrep
8ff267be 1456gzip
2c7991dc 1457less
2304df62 1458line
8ff267be 1459ln
2c7991dc 1460more
2304df62
AD
1461nroff
1462perl
2c7991dc 1463pg
40a7a20a 1464sendmail
2304df62
AD
1465test
1466uname
8ff267be 1467zip
2304df62 1468"
8e07c86e 1469pth=`echo $PATH | sed -e "s/$p_/ /g"`
2304df62
AD
1470pth="$pth /lib /usr/lib"
1471for file in $loclist; do
1472 xxx=`./loc $file $file $pth`
1473 eval $file=$xxx
1474 eval _$file=$xxx
1475 case "$xxx" in
1476 /*)
1477 echo $file is in $xxx.
1478 ;;
8e07c86e
AD
1479 ?:[\\/]*)
1480 echo $file is in $xxx.
1481 ;;
2304df62 1482 *)
25f94b33
AD
1483 echo "I don't know where '$file' is, and my life depends on it." >&4
1484 echo "Go find a public domain implementation or fix your PATH setting!" >&4
4633a7c4 1485 exit 1
2304df62
AD
1486 ;;
1487 esac
1488done
1489echo " "
1490echo "Don't worry if any of the following aren't found..."
1491say=offhand
1492for file in $trylist; do
1493 xxx=`./loc $file $file $pth`
1494 eval $file=$xxx
1495 eval _$file=$xxx
1496 case "$xxx" in
1497 /*)
1498 echo $file is in $xxx.
1499 ;;
8e07c86e
AD
1500 ?:[\\/]*)
1501 echo $file is in $xxx.
1502 ;;
2304df62
AD
1503 *)
1504 echo "I don't see $file out there, $say."
1505 say=either
1506 ;;
1507 esac
1508done
1509case "$egrep" in
1510egrep)
1511 echo "Substituting grep for egrep."
1512 egrep=$grep
1513 ;;
1514esac
8ff267be 1515case "$ln" in
1516ln)
1517 echo "Substituting cp for ln."
1518 ln=$cp
1519 ;;
1520esac
2304df62
AD
1521case "$test" in
1522test)
1523 echo "Hopefully test is built into your sh."
1524 ;;
1525*)
ecfc5424 1526 if `sh -c "PATH= test true" >/dev/null 2>&1`; then
2304df62
AD
1527 echo "Using the test built into your sh."
1528 test=test
1529 _test=test
1530 fi
1531 ;;
1532esac
1533case "$echo" in
1534echo)
1535 echo "Hopefully echo is built into your sh."
1536 ;;
1537'') ;;
1538*)
1539 echo " "
1540echo "Checking compatibility between $echo and builtin echo (if any)..." >&4
1541 $echo $n "hi there$c" >foo1
1542 echo $n "hi there$c" >foo2
1543 if cmp foo1 foo2 >/dev/null 2>&1; then
1544 echo "They are compatible. In fact, they may be identical."
1545 else
1546 case "$n" in
1547 '-n') n='' c='\c';;
1548 *) n='-n' c='';;
1549 esac
1550 cat <<FOO
1551They are not compatible! You are probably running ksh on a non-USG system.
1552I'll have to use $echo instead of the builtin, since Bourne shell doesn't
1553have echo built in and we may have to run some Bourne shell scripts. That
1554means I'll have to use '$n$c' to suppress newlines now. Life is ridiculous.
1555
1556FOO
1557 $echo $n "The star should be here-->$c"
1558 $echo "*"
1559 fi
1560 $rm -f foo1 foo2
1561 ;;
1562esac
1563
a0d0e21e
LW
1564: determine whether symbolic links are supported
1565echo " "
1566$touch blurfl
1567if $ln -s blurfl sym > /dev/null 2>&1 ; then
1568 echo "Symbolic links are supported." >&4
1569 lns="$ln -s"
1570else
1571 echo "Symbolic links are NOT supported." >&4
1572 lns="$ln"
1573fi
1574$rm -f blurfl sym
1575
ecfc5424
AD
1576: see whether [:lower:] and [:upper:] are supported character classes
1577echo " "
1578up='[A-Z]'
1579low='[a-z]'
1580case "`echo AbyZ | $tr '[:lower:]' '[:upper:]' 2>/dev/null`" in
1581ABYZ)
1582 echo "Good, your tr supports [:lower:] and [:upper:] to convert case." >&4
1583 up='[:upper:]'
1584 low='[:lower:]'
1585 ;;
1586*)
1587 echo "Your tr only supports [a-z] and [A-Z] to convert case." >&4
1588 ;;
1589esac
1590: set up the translation script tr, must be called with ./tr of course
1591cat >tr <<EOSC
1592$startsh
1593case "\$1\$2" in
1594'[A-Z][a-z]') exec $tr '$up' '$low';;
1595'[a-z][A-Z]') exec $tr '$low' '$up';;
1596esac
1597exec $tr "\$@"
1598EOSC
1599chmod +x tr
1600$eunicefix tr
1601
2304df62
AD
1602: Try to determine whether config.sh was made on this system
1603case "$config_sh" in
1604'')
1605myuname=`( ($uname -a) 2>/dev/null || hostname) 2>&1`
a0d0e21e 1606myuname=`echo $myuname | $sed -e 's/^[^=]*=//' -e 's/\///g' | \
ecfc5424 1607 ./tr '[A-Z]' '[a-z]' | tr '\012' ' '`
1aef975c 1608newmyuname="$myuname"
2304df62 1609dflt=n
16d20bd9
AD
1610case "$knowitall" in
1611'')
1612 if test -f ../config.sh; then
1613 if $contains myuname= ../config.sh >/dev/null 2>&1; then
1614 eval "`grep myuname= ../config.sh`"
1615 fi
1616 if test "X$myuname" = "X$newmyuname"; then
1617 dflt=y
1618 fi
2304df62 1619 fi
16d20bd9
AD
1620 ;;
1621*) dflt=y;;
1622esac
2304df62
AD
1623
1624: Get old answers from old config file if Configure was run on the
1625: same system, otherwise use the hints.
1626hint=default
1627cd ..
1628if test -f config.sh; then
16d20bd9
AD
1629 echo " "
1630 rp="I see a config.sh file. Shall I use it to set the defaults?"
2304df62
AD
1631 . UU/myread
1632 case "$ans" in
1633 n*|N*) echo "OK, I'll ignore it."; mv config.sh config.sh.old;;
1634 *) echo "Fetching default answers from your old config.sh file..." >&4
ecfc5424
AD
1635 tmp_n="$n"
1636 tmp_c="$c"
85cad39c 1637 tmp_sh="$sh"
2304df62
AD
1638 . ./config.sh
1639 cp config.sh UU
ecfc5424
AD
1640 n="$tmp_n"
1641 c="$tmp_c"
85cad39c 1642 : Older versions did not always set $sh. Catch re-use of such
1643 : an old config.sh.
1644 case "$sh" in
1645 '') sh="$tmp_sh" ;;
1646 esac
2304df62
AD
1647 hint=previous
1648 ;;
1649 esac
1650fi
1651if test ! -f config.sh; then
1652 $cat <<EOM
1653
1654First time through, eh? I have some defaults handy for the following systems:
1655
1656EOM
1657 cd hints; ls -C *.sh | $sed 's/\.sh/ /g' >&4
1658 dflt=''
1659 : Half the following guesses are probably wrong... If you have better
284c50cc 1660 : tests or hints, please send them to chip@perl.com
2304df62 1661 : The metaconfig authors would also appreciate a copy...
a0d0e21e 1662 $test -f /irix && osname=irix
85e6fe83
LW
1663 $test -f /xenix && osname=sco_xenix
1664 $test -f /dynix && osname=dynix
1665 $test -f /dnix && osname=dnix
5f05dabc 1666 $test -f /lynx.os && osname=lynxos
1667 $test -f /unicos && osname=unicos && osvers=`$uname -r`
7a4c00b4 1668 $test -f /unicosmk.ar && osname=unicosmk && osvers=`$uname -r`
85e6fe83 1669 $test -f /bin/mips && /bin/mips && osname=mips
ecfc5424
AD
1670 $test -d /NextApps && set X `hostinfo | grep 'NeXT Mach.*:' | \
1671 $sed -e 's/://' -e 's/\./_/'` && osname=next && osvers=$4
a0d0e21e
LW
1672 $test -d /usr/apollo/bin && osname=apollo
1673 $test -f /etc/saf/_sactab && osname=svr4
85e6fe83 1674 $test -d /usr/include/minix && osname=minix
4633a7c4
LW
1675 if $test -d /MachTen; then
1676 osname=machten
1677 if $test -x /sbin/version; then
1678 osvers=`/sbin/version | $awk '{print $2}' |
1679 $sed -e 's/[A-Za-z]$//'`
1680 elif $test -x /usr/etc/version; then
1681 osvers=`/usr/etc/version | $awk '{print $2}' |
1682 $sed -e 's/[A-Za-z]$//'`
1683 else
1684 osvers="$2.$3"
1685 fi
1686 fi
2304df62
AD
1687 if $test -f $uname; then
1688 set X $myuname
1689 shift
1690
2304df62 1691 case "$5" in
85e6fe83 1692 fps*) osname=fps ;;
2304df62
AD
1693 mips*)
1694 case "$4" in
85e6fe83
LW
1695 umips) osname=umips ;;
1696 *) osname=mips ;;
2304df62 1697 esac;;
85e6fe83
LW
1698 [23]100) osname=mips ;;
1699 next*) osname=next ;;
1700 news*) osname=news ;;
ecfc5424
AD
1701 i386*)
1702 if $test -f /etc/kconfig; then
1703 osname=isc
a0d0e21e
LW
1704 if test "$lns" = "ln -s"; then
1705 osvers=4
1706 elif $contains _SYSV3 /usr/include/stdio.h > /dev/null 2>&1 ; then
1707 osvers=3
2304df62 1708 elif $contains _POSIX_SOURCE /usr/include/stdio.h > /dev/null 2>&1 ; then
a0d0e21e 1709 osvers=2
ecfc5424
AD
1710 fi
1711 fi
1712 ;;
2304df62
AD
1713 esac
1714
1715 case "$1" in
a0d0e21e
LW
1716 aix) osname=aix
1717 tmp=`( (oslevel) 2>/dev/null || echo "not found") 2>&1`
1718 case "$tmp" in
1aef975c 1719 'not found') osvers="$4"."$3" ;;
a0d0e21e
LW
1720 '<3240'|'<>3240') osvers=3.2.0 ;;
1721 '=3240'|'>3240'|'<3250'|'<>3250') osvers=3.2.4 ;;
1722 '=3250'|'>3250') osvers=3.2.5 ;;
1aef975c 1723 *) osvers=$tmp;;
a0d0e21e
LW
1724 esac
1725 ;;
23f87696
SZ
1726 *dc.osx) osname=dcosx
1727 osvers="$3"
1728 ;;
a0d0e21e
LW
1729 dnix) osname=dnix
1730 osvers="$3"
1731 ;;
1732 domainos) osname=apollo
1733 osvers="$3"
1734 ;;
1735 dgux) osname=dgux
1736 osvers="$3"
1737 ;;
760ac839
LW
1738 dynixptx*) osname=dynixptx
1739 osvers="$3"
1740 ;;
a0d0e21e
LW
1741 freebsd) osname=freebsd
1742 osvers="$3" ;;
1743 genix) osname=genix ;;
1744 hp*) osname=hpux
1745 case "$3" in
1746 *.08.*) osvers=9 ;;
1747 *.09.*) osvers=9 ;;
1748 *.10.*) osvers=10 ;;
ecfc5424 1749 *) osvers="$3" ;;
a0d0e21e
LW
1750 esac
1751 ;;
a78b0d02 1752 irix*) osname=irix
a0d0e21e
LW
1753 case "$3" in
1754 4*) osvers=4 ;;
1755 5*) osvers=5 ;;
ecfc5424 1756 *) osvers="$3" ;;
a0d0e21e
LW
1757 esac
1758 ;;
1759 linux) osname=linux
1760 case "$3" in
1761 1*) osvers=1 ;;
1762 *) osvers="$3" ;;
1763 esac
1764 ;;
1765 netbsd*) osname=netbsd
ecfc5424
AD
1766 osvers="$3"
1767 ;;
a0d0e21e
LW
1768 bsd386) osname=bsd386
1769 osvers=`$uname -r`
1770 ;;
1771 next*) osname=next ;;
1772 solaris) osname=solaris
1773 case "$3" in
1774 5*) osvers=`echo $3 | $sed 's/^5/2/g'` ;;
ecfc5424 1775 *) osvers="$3" ;;
a0d0e21e
LW
1776 esac
1777 ;;
85e6fe83
LW
1778 sunos) osname=sunos
1779 case "$3" in
85e6fe83
LW
1780 5*) osname=solaris
1781 osvers=`echo $3 | $sed 's/^5/2/g'` ;;
a0d0e21e 1782 *) osvers="$3" ;;
2304df62
AD
1783 esac
1784 ;;
a0d0e21e 1785 titanos) osname=titanos
85e6fe83 1786 case "$3" in
a0d0e21e
LW
1787 1*) osvers=1 ;;
1788 2*) osvers=2 ;;
1789 3*) osvers=3 ;;
1790 4*) osvers=4 ;;
ecfc5424 1791 *) osvers="$3" ;;
2304df62
AD
1792 esac
1793 ;;
85e6fe83 1794 ultrix) osname=ultrix
ecfc5424 1795 osvers="$3"
2304df62 1796 ;;
28757baa 1797 osf1|mls+) case "$5" in
fed7345c
AD
1798 alpha)
1799 osname=dec_osf
1800 osvers=`echo "$3" | sed 's/^[vt]//'`
ecfc5424
AD
1801 ;;
1802 hp*) osname=hp_osf1 ;;
1803 mips) osname=mips_osf1 ;;
85e6fe83
LW
1804 esac
1805 ;;
a0d0e21e
LW
1806 uts) osname=uts
1807 osvers="$3"
1808 ;;
ff68c719 1809 qnx) osname=qnx
1810 osvers="$4"
1811 ;;
85e6fe83 1812 $2) case "$osname" in
2304df62 1813 *isc*) ;;
a0d0e21e 1814 *freebsd*) ;;
5f05dabc 1815 svr*)
a0d0e21e
LW
1816 : svr4.x or possibly later
1817 case "svr$3" in
1818 ${osname}*)
1819 osname=svr$3
1820 osvers=$4
1821 ;;
1822 esac
1823 case "$osname" in
1824 svr4.0)
1825 : Check for ESIX
1826 if test -f /stand/boot ; then
1827 eval `grep '^INITPROG=[a-z/0-9]*$' /stand/boot`
ecfc5424
AD
1828 if test -n "$INITPROG" -a -f "$INITPROG"; then
1829 isesix=`strings -a $INITPROG|grep 'ESIX SYSTEM V/386 Release 4.0'`
1830 if test -n "$isesix"; then
a0d0e21e
LW
1831 osname=esix4
1832 fi
1833 fi
1834 fi
1835 ;;
1836 esac
1837 ;;
2304df62 1838 *) if test -f /etc/systemid; then
a0d0e21e
LW
1839 osname=sco
1840 set `echo $3 | $sed 's/\./ /g'` $4
2304df62 1841 if $test -f sco_$1_$2_$3.sh; then
85e6fe83 1842 osvers=$1.$2.$3
2304df62 1843 elif $test -f sco_$1_$2.sh; then
85e6fe83 1844 osvers=$1.$2
2304df62 1845 elif $test -f sco_$1.sh; then
85e6fe83 1846 osvers=$1
2304df62 1847 fi
a0d0e21e
LW
1848 else
1849 case "$osname" in
1850 '') : Still unknown. Probably a generic Sys V.
1851 osname="sysv"
1852 osvers="$3"
1853 ;;
1854 esac
2304df62
AD
1855 fi
1856 ;;
1857 esac
1858 ;;
a0d0e21e
LW
1859 *) case "$osname" in
1860 '') : Still unknown. Probably a generic BSD.
1861 osname="$1"
1862 osvers="$3"
1863 ;;
1864 esac
1865 ;;
2304df62
AD
1866 esac
1867 else
1868 if test -f /vmunix -a -f news_os.sh; then
ecfc5424 1869 (what /vmunix | ../UU/tr '[A-Z]' '[a-z]') > ../UU/kernel.what 2>&1
2304df62 1870 if $contains news-os ../UU/kernel.what >/dev/null 2>&1; then
85e6fe83 1871 osname=news_os
2304df62
AD
1872 fi
1873 $rm -f ../UU/kernel.what
8e07c86e
AD
1874 elif test -d c:/.; then
1875 set X $myuname
1876 osname=os2
1877 osvers="$5"
2304df62
AD
1878 fi
1879 fi
85e6fe83 1880
a0d0e21e
LW
1881 : Now look for a hint file osname_osvers, unless one has been
1882 : specified already.
1883 case "$hintfile" in
1884 ''|' ')
ecfc5424 1885 file=`echo "${osname}_${osvers}" | $sed -e 's@\.@_@g' -e 's@_$@@'`
a0d0e21e 1886 : Also try without trailing minor version numbers.
ecfc5424
AD
1887 xfile=`echo $file | $sed -e 's@_[^_]*$@@'`
1888 xxfile=`echo $xfile | $sed -e 's@_[^_]*$@@'`
1889 xxxfile=`echo $xxfile | $sed -e 's@_[^_]*$@@'`
1890 xxxxfile=`echo $xxxfile | $sed -e 's@_[^_]*$@@'`
a0d0e21e
LW
1891 case "$file" in
1892 '') dflt=none ;;
1893 *) case "$osvers" in
1894 '') dflt=$file
1895 ;;
1896 *) if $test -f $file.sh ; then
1897 dflt=$file
1898 elif $test -f $xfile.sh ; then
1899 dflt=$xfile
1900 elif $test -f $xxfile.sh ; then
1901 dflt=$xxfile
1902 elif $test -f $xxxfile.sh ; then
1903 dflt=$xxxfile
1904 elif $test -f $xxxxfile.sh ; then
1905 dflt=$xxxxfile
1906 elif $test -f "${osname}.sh" ; then
1907 dflt="${osname}"
1908 else
1909 dflt=none
1910 fi
1911 ;;
1912 esac
85e6fe83
LW
1913 ;;
1914 esac
1915 ;;
a0d0e21e 1916 *)
ecfc5424 1917 dflt=`echo $hintfile | $sed 's/\.sh$//'`
a0d0e21e 1918 ;;
2304df62 1919 esac
1aef975c 1920
2304df62
AD
1921 $cat <<EOM
1922
1923You may give one or more space-separated answers, or "none" if appropriate.
1924If your OS version has no hints, DO NOT give a wrong version -- say "none".
1925
1926EOM
1927 rp="Which of these apply, if any?"
1928 . ../UU/myread
85e6fe83
LW
1929 tans=$ans
1930 for file in $tans; do
2304df62
AD
1931 if $test -f $file.sh; then
1932 . ./$file.sh
1933 $cat $file.sh >> ../UU/config.sh
85e6fe83 1934 elif $test X$tans = X -o X$tans = Xnone ; then
2304df62
AD
1935 : nothing
1936 else
85e6fe83
LW
1937 : Give one chance to correct a possible typo.
1938 echo "$file.sh does not exist"
1939 dflt=$file
1940 rp="hint to use instead?"
1941 . ../UU/myread
1942 for file in $ans; do
1943 if $test -f "$file.sh"; then
1944 . ./$file.sh
1945 $cat $file.sh >> ../UU/config.sh
1946 elif $test X$ans = X -o X$ans = Xnone ; then
1947 : nothing
1948 else
1949 echo "$file.sh does not exist -- ignored."
1950 fi
1951 done
2304df62
AD
1952 fi
1953 done
85e6fe83 1954
2304df62 1955 hint=recommended
85e6fe83
LW
1956 : Remember our hint file for later.
1957 if $test -f "$file.sh" ; then
a0d0e21e 1958 hintfile="$file"
85e6fe83 1959 else
a0d0e21e 1960 hintfile=''
85e6fe83
LW
1961 fi
1962
2304df62
AD
1963 cd ..
1964fi
1965cd UU
1966;;
1967*)
1968 echo " "
1969 echo "Fetching default answers from $config_sh..." >&4
ecfc5424
AD
1970 tmp_n="$n"
1971 tmp_c="$c"
2304df62
AD
1972 cd ..
1973 cp $config_sh config.sh 2>/dev/null
a78b0d02 1974 chmod +w config.sh
2304df62
AD
1975 . ./config.sh
1976 cd UU
1977 cp ../config.sh .
ecfc5424
AD
1978 n="$tmp_n"
1979 c="$tmp_c"
2304df62
AD
1980 hint=previous
1981 ;;
1982esac
1aef975c
AD
1983test "$override" && . ./optdef.sh
1984myuname="$newmyuname"
2304df62
AD
1985
1986: Restore computed paths
1987for file in $loclist $trylist; do
1988 eval $file="\$_$file"
1989done
1990
85e6fe83 1991cat << EOM
a0d0e21e 1992
85e6fe83 1993Configure uses the operating system name and version to set some defaults.
ecfc5424
AD
1994The default value is probably right if the name rings a bell. Otherwise,
1995since spelling matters for me, either accept the default or answer "none"
1996to leave it blank.
a0d0e21e 1997
85e6fe83 1998EOM
85e6fe83 1999case "$osname" in
a0d0e21e 2000 ''|' ')
85e6fe83 2001 case "$hintfile" in
a0d0e21e 2002 ''|' '|none) dflt=none ;;
ecfc5424 2003 *) dflt=`echo $hintfile | $sed -e 's/\.sh$//' -e 's/_.*$//'` ;;
85e6fe83
LW
2004 esac
2005 ;;
2006 *) dflt="$osname" ;;
2007esac
2008rp="Operating system name?"
2009. ./myread
2010case "$ans" in
ecfc5424
AD
2011none) osname='' ;;
2012*) osname=`echo "$ans" | $sed -e 's/[ ][ ]*/_/g' | ./tr '[A-Z]' '[a-z]'`;;
85e6fe83 2013esac
8ff267be 2014echo " "
2015case "$osvers" in
2016 ''|' ')
2017 case "$hintfile" in
2018 ''|' '|none) dflt=none ;;
2019 *) dflt=`echo $hintfile | $sed -e 's/\.sh$//' -e 's/^[^_]*//'`
2020 dflt=`echo $dflt | $sed -e 's/^_//' -e 's/_/./g'`
2021 case "$dflt" in
2022 ''|' ') dflt=none ;;
2023 esac
2024 ;;
2025 esac
2026 ;;
2027 *) dflt="$osvers" ;;
2028esac
2029rp="Operating system version?"
2030. ./myread
2031case "$ans" in
2032none) osvers='' ;;
2033*) osvers="$ans" ;;
2034esac
2035
760ac839
LW
2036
2037
2304df62
AD
2038: who configured the system
2039cf_time=`$date 2>&1`
8ff267be 2040cf_by=`(logname) 2>/dev/null`
2041case "$cf_by" in "")
2042 cf_by=`(whoami) 2>/dev/null`
2043 case "$cf_by" in "")
2044 cf_by=unknown ;;
2045 esac ;;
2046esac
2304df62 2047
4633a7c4 2048: determine the architecture name
2304df62 2049echo " "
4633a7c4
LW
2050if xxx=`./loc arch blurfl $pth`; $test -f "$xxx"; then
2051 tarch=`arch`"-$osname"
2052elif xxx=`./loc uname blurfl $pth`; $test -f "$xxx" ; then
2053 if uname -m > tmparch 2>&1 ; then
7e1af8bc 2054 tarch=`$sed -e 's/ *$//' -e 's/ /_/g' \
5f05dabc 2055 -e 's/$/'"-$osname/" tmparch`
4633a7c4
LW
2056 else
2057 tarch="$osname"
2058 fi
2059 $rm -f tmparch
2060else
2061 tarch="$osname"
2062fi
2063case "$myarchname" in
2064''|"$tarch") ;;
2065*)
2066 echo "(Your architecture name used to be $myarchname.)"
2067 archname=''
2304df62
AD
2068 ;;
2069esac
4633a7c4
LW
2070case "$archname" in
2071'') dflt="$tarch";;
2072*) dflt="$archname";;
2073esac
2074rp='What is your architecture name'
2075. ./myread
2076archname="$ans"
2077myarchname="$tarch"
2078
2079: is AFS running?
2080echo " "
2afac517 2081case "$afs" in
2082$define|true) afs=true ;;
2083$undef|false) afs=false ;;
2084*) if test -d /afs; then
2085 afs=true
2086 else
2087 afs=false
2088 fi
2089 ;;
2090esac
2091if $afs; then
4633a7c4 2092 echo "AFS may be running... I'll be extra cautious then..." >&4
2304df62 2093else
4633a7c4 2094 echo "AFS does not seem to be running..." >&4
2304df62
AD
2095fi
2096
4633a7c4
LW
2097: decide how portable to be. Allow command line overrides.
2098case "$d_portable" in
2099"$undef") ;;
2100*) d_portable="$define" ;;
2304df62 2101esac
2304df62 2102
4633a7c4
LW
2103: set up shell script to do ~ expansion
2104cat >filexp <<EOSS
2105$startsh
2106: expand filename
2107case "\$1" in
2108 ~/*|~)
2109 echo \$1 | $sed "s|~|\${HOME-\$LOGDIR}|"
2304df62 2110 ;;
4633a7c4
LW
2111 ~*)
2112 if $test -f /bin/csh; then
2113 /bin/csh -f -c "glob \$1"
2114 failed=\$?
2115 echo ""
2116 exit \$failed
2117 else
2118 name=\`$expr x\$1 : '..\([^/]*\)'\`
2119 dir=\`$sed -n -e "/^\${name}:/{s/^[^:]*:[^:]*:[^:]*:[^:]*:[^:]*:\([^:]*\).*"'\$'"/\1/" -e p -e q -e '}' </etc/passwd\`
2120 if $test ! -d "\$dir"; then
2121 me=\`basename \$0\`
2122 echo "\$me: can't locate home directory for: \$name" >&2
2123 exit 1
2124 fi
2125 case "\$1" in
2126 */*)
2127 echo \$dir/\`$expr x\$1 : '..[^/]*/\(.*\)'\`
2128 ;;
2129 *)
2130 echo \$dir
2131 ;;
2304df62 2132 esac
4633a7c4 2133 fi
2304df62
AD
2134 ;;
2135*)
4633a7c4 2136 echo \$1
2304df62
AD
2137 ;;
2138esac
4633a7c4
LW
2139EOSS
2140chmod +x filexp
2141$eunicefix filexp
2304df62
AD
2142
2143: now set up to get a file name
28757baa 2144cat <<EOS >getfile
2145$startsh
2146EOS
2147cat <<'EOSC' >>getfile
2304df62
AD
2148tilde=''
2149fullpath=''
2150already=''
2151skip=''
2152none_ok=''
2153exp_file=''
a0d0e21e 2154nopath_ok=''
2304df62
AD
2155orig_rp="$rp"
2156orig_dflt="$dflt"
2157
2158case "$fn" in
ecfc5424
AD
2159*\(*)
2160 expr $fn : '.*(\(.*\)).*' | tr ',' '\012' >getfile.ok
2161 fn=`echo $fn | sed 's/(.*)//'`
2162 ;;
2163esac
2164
2165case "$fn" in
a0d0e21e
LW
2166*:*)
2167 loc_file=`expr $fn : '.*:\(.*\)'`
2168 fn=`expr $fn : '\(.*\):.*'`
2169 ;;
2170esac
2171
2172case "$fn" in
2304df62
AD
2173*~*) tilde=true;;
2174esac
2175case "$fn" in
2176*/*) fullpath=true;;
2177esac
2178case "$fn" in
2179*+*) skip=true;;
2180esac
2181case "$fn" in
2182*n*) none_ok=true;;
2183esac
2184case "$fn" in
2185*e*) exp_file=true;;
2186esac
a0d0e21e
LW
2187case "$fn" in
2188*p*) nopath_ok=true;;
2189esac
2304df62
AD
2190
2191case "$fn" in
2192*f*) type='File';;
2193*d*) type='Directory';;
a0d0e21e 2194*l*) type='Locate';;
2304df62
AD
2195esac
2196
2197what="$type"
2198case "$what" in
2199Locate) what='File';;
2200esac
2201
2202case "$exp_file" in
2203'')
2204 case "$d_portable" in
2205 "$define") ;;
2206 *) exp_file=true;;
2207 esac
2208 ;;
2209esac
2210
2211cd ..
2212while test "$type"; do
2213 redo=''
2214 rp="$orig_rp"
2215 dflt="$orig_dflt"
2216 case "$tilde" in
2217 true) rp="$rp (~name ok)";;
2218 esac
2219 . UU/myread
ecfc5424
AD
2220 if test -f UU/getfile.ok && \
2221 $contains "^$ans\$" UU/getfile.ok >/dev/null 2>&1
2222 then
2223 value="$ans"
2224 ansexp="$ans"
2225 break
2226 fi
2304df62
AD
2227 case "$ans" in
2228 none)
2229 value=''
2230 ansexp=''
2231 case "$none_ok" in
2232 true) type='';;
2233 esac
2234 ;;
2235 *)
2236 case "$tilde" in
2237 '') value="$ans"
2238 ansexp="$ans";;
2239 *)
2240 value=`UU/filexp $ans`
2241 case $? in
2242 0)
2243 if test "$ans" != "$value"; then
ecfc5424 2244 echo "(That expands to $value on this system.)"
2304df62
AD
2245 fi
2246 ;;
2247 *) value="$ans";;
2248 esac
2249 ansexp="$value"
2250 case "$exp_file" in
2251 '') value="$ans";;
2252 esac
2253 ;;
2254 esac
2255 case "$fullpath" in
2256 true)
2257 case "$ansexp" in
2258 /*) value="$ansexp" ;;
2259 *)
2260 redo=true
2261 case "$already" in
2262 true)
2263 echo "I shall only accept a full path name, as in /bin/ls." >&4
2264 echo "Use a ! shell escape if you wish to check pathnames." >&4
2265 ;;
2266 *)
2267 echo "Please give a full path name, starting with slash." >&4
2268 case "$tilde" in
2269 true)
2270 echo "Note that using ~name is ok provided it expands well." >&4
2271 already=true
2272 ;;
2273 esac
2274 esac
2275 ;;
2276 esac
2277 ;;
2278 esac
2279 case "$redo" in
2280 '')
2281 case "$type" in
2282 File)
2283 if test -f "$ansexp"; then
2284 type=''
2285 elif test -r "$ansexp" || (test -h "$ansexp") >/dev/null 2>&1
2286 then
2287 echo "($value is not a plain file, but that's ok.)"
2288 type=''
2289 fi
2290 ;;
2291 Directory)
2292 if test -d "$ansexp"; then
2293 type=''
2294 fi
2295 ;;
2296 Locate)
40000a8c 2297 if test -d "$ansexp"; then
a0d0e21e
LW
2298 echo "(Looking for $loc_file in directory $value.)"
2299 value="$value/$loc_file"
40000a8c 2300 ansexp="$ansexp/$loc_file"
2304df62 2301 fi
40000a8c 2302 if test -f "$ansexp"; then
2304df62
AD
2303 type=''
2304 fi
a0d0e21e
LW
2305 case "$nopath_ok" in
2306 true) case "$value" in
2307 */*) ;;
2308 *) echo "Assuming $value will be in people's path."
2309 type=''
2310 ;;
2311 esac
2312 ;;
2313 esac
2304df62
AD
2314 ;;
2315 esac
2316
2317 case "$skip" in
2318 true) type='';
2319 esac
2320
2321 case "$type" in
2322 '') ;;
2323 *)
2324 if test "$fastread" = yes; then
2325 dflt=y
2326 else
2327 dflt=n
2328 fi
2329 rp="$what $value doesn't exist. Use that name anyway?"
2330 . UU/myread
2331 dflt=''
2332 case "$ans" in
2333 y*) type='';;
2334 *) echo " ";;
2335 esac
2336 ;;
2337 esac
2338 ;;
2339 esac
2340 ;;
2341 esac
2342done
2343cd UU
2344ans="$value"
2345rp="$orig_rp"
2346dflt="$orig_dflt"
ecfc5424 2347rm -f getfile.ok
2304df62
AD
2348EOSC
2349
4633a7c4
LW
2350: determine root of directory hierarchy where package will be installed.
2351case "$prefix" in
2352'')
2353 dflt=`./loc . /usr/local /usr/local /local /opt /usr`
8e07c86e 2354 ;;
4633a7c4
LW
2355*)
2356 dflt="$prefix"
8e07c86e
AD
2357 ;;
2358esac
4633a7c4 2359$cat <<EOM
2304df62 2360
4633a7c4
LW
2361By default, $package will be installed in $dflt/bin, manual
2362pages under $dflt/man, etc..., i.e. with $dflt as prefix for
2363all installation directories. Typically set to /usr/local, but you
2364may choose /usr if you wish to install $package among your system
2365binaries. If you wish to have binaries under /bin but manual pages
2366under /usr/local/man, that's ok: you will be prompted separately
2367for each of the installation directories, the prefix being only used
2368to set the defaults.
8e07c86e
AD
2369
2370EOM
2371fn=d~
2372rp='Installation prefix to use?'
2373. ./getfile
2374oldprefix=''
2375case "$prefix" in
a0d0e21e 2376'') ;;
8e07c86e
AD
2377*)
2378 case "$ans" in
2379 "$prefix") ;;
2380 *) oldprefix="$prefix";;
2381 esac
2382 ;;
a0d0e21e 2383esac
8e07c86e
AD
2384prefix="$ans"
2385prefixexp="$ansexp"
a0d0e21e 2386
8e07c86e
AD
2387: set the prefixit variable, to compute a suitable default value
2388prefixit='case "$3" in
2389""|none)
2390 case "$oldprefix" in
2391 "") eval "$1=\"\$$2\"";;
2392 *)
2393 case "$3" in
2394 "") eval "$1=";;
2395 none)
2396 eval "tp=\"\$$2\"";
2397 case "$tp" in
2398 ""|" ") eval "$1=\"\$$2\"";;
2399 *) eval "$1=";;
2400 esac;;
2401 esac;;
2402 esac;;
2403*)
2404 eval "tp=\"$oldprefix-\$$2-\""; eval "tp=\"$tp\"";
2405 case "$tp" in
2406 --|/*--|\~*--) eval "$1=\"$prefix/$3\"";;
2407 /*-$oldprefix/*|\~*-$oldprefix/*)
2408 eval "$1=\`echo \$$2 | sed \"s,^$oldprefix,$prefix,\"\`";;
2409 *) eval "$1=\"\$$2\"";;
2410 esac;;
2411esac'
a0d0e21e 2412
4633a7c4
LW
2413: determine where private library files go
2414: Usual default is /usr/local/lib/perl5. Also allow things like
2415: /opt/perl/lib, since /opt/perl/lib/perl5 would be redundant.
2416case "$prefix" in
2417*perl*) set dflt privlib lib ;;
2418*) set dflt privlib lib/$package ;;
2419esac
8e07c86e 2420eval $prefixit
4633a7c4
LW
2421$cat <<EOM
2422
2423There are some auxiliary files for $package that need to be put into a
2424private library directory that is accessible by everyone.
2425
2426EOM
2427fn=d~+
2428rp='Pathname where the private library files will reside?'
8e07c86e 2429. ./getfile
4633a7c4
LW
2430if $test "X$privlibexp" != "X$ansexp"; then
2431 installprivlib=''
8e07c86e 2432fi
4633a7c4
LW
2433privlib="$ans"
2434privlibexp="$ansexp"
8e07c86e
AD
2435if $afs; then
2436 $cat <<EOM
2304df62 2437
8e07c86e 2438Since you are running AFS, I need to distinguish the directory in which
4633a7c4 2439private files reside from the directory in which they are installed (and from
8e07c86e 2440which they are presumably copied to the former directory by occult means).
a0d0e21e 2441
8e07c86e 2442EOM
4633a7c4
LW
2443 case "$installprivlib" in
2444 '') dflt=`echo $privlibexp | sed 's#^/afs/#/afs/.#'`;;
2445 *) dflt="$installprivlib";;
8e07c86e
AD
2446 esac
2447 fn=de~
4633a7c4 2448 rp='Where will private files be installed?'
8e07c86e 2449 . ./getfile
4633a7c4 2450 installprivlib="$ans"
8e07c86e 2451else
4633a7c4
LW
2452 installprivlib="$privlibexp"
2453fi
2454
2455: set the base revision
774d564b 2456baserev=5.0
4633a7c4
LW
2457
2458: get the patchlevel
2459echo " "
2460echo "Getting the current patchlevel..." >&4
2461if $test -r ../patchlevel.h;then
760ac839
LW
2462 patchlevel=`awk '/PATCHLEVEL/ {print $3}' ../patchlevel.h`
2463 subversion=`awk '/SUBVERSION/ {print $3}' ../patchlevel.h`
4633a7c4
LW
2464else
2465 patchlevel=0
f55a7265 2466 subversion=0
8e07c86e 2467fi
5f05dabc 2468$echo $n "(You have $package" $c
2469case "$package" in
2470"*$baserev") ;;
2471*) $echo $n " $baserev" $c ;;
2472esac
2473$echo $n " patchlevel $patchlevel" $c
36477c24 2474test 0 -eq "$subversion" || $echo $n " subversion $subversion" $c
2475echo ".)"
2304df62 2476
8e07c86e
AD
2477: set the prefixup variable, to restore leading tilda escape
2478prefixup='case "$prefixexp" in
2479"$prefix") ;;
2480*) eval "$1=\`echo \$$1 | sed \"s,^$prefixexp,$prefix,\"\`";;
2481esac'
2482
4633a7c4
LW
2483: determine where public architecture dependent libraries go
2484set archlib archlib
8e07c86e 2485eval $prefixit
4633a7c4 2486case "$archlib" in
8e07c86e 2487'')
774d564b 2488 case "$privlib" in
2489 '') dflt=`./loc . "." $prefixexp/lib /usr/local/lib /usr/lib /lib`
2490 set dflt
2491 eval $prefixup
8e07c86e 2492 ;;
774d564b 2493 *) if test 0 -eq "$subversion"; then
2494 version=`LC_ALL=C; export LC_ALL; \
2495 echo $baserev $patchlevel | \
2496 $awk '{ printf "%.3f\n", $1 + $2/1000.0 }'`
2497 else
2498 version=`LC_ALL=C; export LC_ALL; \
2499 echo $baserev $patchlevel $subversion | \
2500 $awk '{ printf "%.5f\n", $1 + $2/1000.0 + $3/100000.0 }'`
2501 fi
aa7e9289 2502 dflt="$privlib/$archname/$version"
774d564b 2503 ;;
2504 esac
2505 ;;
2506*)
2507 dflt="$archlib"
2508 ;;
8e07c86e 2509esac
4633a7c4
LW
2510cat <<EOM
2511
2512$spackage contains architecture-dependent library files. If you are
2513sharing libraries in a heterogeneous environment, you might store
2514these files in a separate location. Otherwise, you can just include
2515them with the rest of the public library files.
2516
8e07c86e 2517EOM
4633a7c4
LW
2518fn=d+~
2519rp='Where do you want to put the public architecture-dependent libraries?'
8e07c86e 2520. ./getfile
4633a7c4
LW
2521archlib="$ans"
2522archlibexp="$ansexp"
2523
8e07c86e
AD
2524if $afs; then
2525 $cat <<EOM
2526
2527Since you are running AFS, I need to distinguish the directory in which
4633a7c4 2528private files reside from the directory in which they are installed (and from
8e07c86e
AD
2529which they are presumably copied to the former directory by occult means).
2530
2531EOM
4633a7c4
LW
2532 case "$installarchlib" in
2533 '') dflt=`echo $archlibexp | sed 's#^/afs/#/afs/.#'`;;
2534 *) dflt="$installarchlib";;
8e07c86e
AD
2535 esac
2536 fn=de~
4633a7c4 2537 rp='Where will architecture-dependent library files be installed?'
8e07c86e 2538 . ./getfile
4633a7c4 2539 installarchlib="$ans"
8e07c86e 2540else
4633a7c4
LW
2541 installarchlib="$archlibexp"
2542fi
2543if $test X"$archlib" = X"$privlib"; then
2544 d_archlib="$undef"
2545else
2546 d_archlib="$define"
8e07c86e
AD
2547fi
2548
40a7a20a 2549: set up the script used to warn in case of inconsistency
28757baa 2550cat <<EOS >whoa
2551$startsh
2552EOS
2553cat <<'EOSC' >>whoa
40a7a20a 2554dflt=y
2555echo " "
2556echo "*** WHOA THERE!!! ***" >&4
2557echo " The $hint value for \$$var on this machine was \"$was\"!" >&4
2558rp=" Keep the $hint value?"
2559. ./myread
2560case "$ans" in
2561y) td=$was; tu=$was;;
2562esac
2563EOSC
2564
2565: function used to set $1 to $val
2566setvar='var=$1; eval "was=\$$1"; td=$define; tu=$undef;
2567case "$val$was" in
2568$define$undef) . ./whoa; eval "$var=\$td";;
2569$undef$define) . ./whoa; eval "$var=\$tu";;
2570*) eval "$var=$val";;
2571esac'
2572
5f05dabc 2573$cat <<EOM
2574
2575Perl 5.004 can be compiled for binary compatibility with 5.003.
2576If you decide to do so, you will be able to continue using any
2577extensions that were compiled for Perl 5.003. However, binary
2578compatibility forces Perl to expose some of its internal symbols
2579in the same way that 5.003 did. So you may have symbol conflicts
2580if you embed a binary-compatible Perl in other programs.
2581
2582EOM
2583case "$d_bincompat3" in
2584"$undef") dflt=n ;;
2585*) dflt=y ;;
2586esac
2587rp='Binary compatibility with Perl 5.003?'
2588. ./myread
2589case "$ans" in
2590y*) val="$define" ;;
2591*) val="$undef" ;;
2592esac
2593set d_bincompat3
2594eval $setvar
2595case "$d_bincompat3" in
2596"$define") bincompat3=y ;;
2597*) bincompat3=n ;;
2598esac
2599
40a7a20a 2600: make some quick guesses about what we are up against
2601echo " "
2602$echo $n "Hmm... $c"
2603echo exit 1 >bsd
2604echo exit 1 >usg
2605echo exit 1 >v7
2606echo exit 1 >osf1
2607echo exit 1 >eunice
2608echo exit 1 >xenix
2609echo exit 1 >venix
8ff267be 2610echo exit 1 >os2
40a7a20a 2611d_bsd="$undef"
2612$cat /usr/include/signal.h /usr/include/sys/signal.h >foo 2>/dev/null
2613if test -f /osf_boot || $contains 'OSF/1' /usr/include/ctype.h >/dev/null 2>&1
2614then
2615 echo "Looks kind of like an OSF/1 system, but we'll see..."
2616 echo exit 0 >osf1
2617elif test `echo abc | tr a-z A-Z` = Abc ; then
2618 xxx=`./loc addbib blurfl $pth`
2619 if $test -f $xxx; then
2620 echo "Looks kind of like a USG system with BSD features, but we'll see..."
2621 echo exit 0 >bsd
2622 echo exit 0 >usg
2623 else
2624 if $contains SIGTSTP foo >/dev/null 2>&1 ; then
2625 echo "Looks kind of like an extended USG system, but we'll see..."
2626 else
2627 echo "Looks kind of like a USG system, but we'll see..."
2628 fi
2629 echo exit 0 >usg
2630 fi
2631elif $contains SIGTSTP foo >/dev/null 2>&1 ; then
2632 echo "Looks kind of like a BSD system, but we'll see..."
2633 d_bsd="$define"
2634 echo exit 0 >bsd
2635else
2636 echo "Looks kind of like a Version 7 system, but we'll see..."
2637 echo exit 0 >v7
2638fi
2639case "$eunicefix" in
2640*unixtovms*)
2641 $cat <<'EOI'
2642There is, however, a strange, musty smell in the air that reminds me of
2643something...hmm...yes...I've got it...there's a VMS nearby, or I'm a Blit.
2644EOI
2645 echo exit 0 >eunice
2646 d_eunice="$define"
2647: it so happens the Eunice I know will not run shell scripts in Unix format
2648 ;;
2649*)
2650 echo " "
2651 echo "Congratulations. You aren't running Eunice."
2652 d_eunice="$undef"
2653 ;;
2654esac
8ff267be 2655: Detect OS2. The p_ variable is set above in the Head.U unit.
2656case "$p_" in
2657:) ;;
2658*)
2659 $cat <<'EOI'
2660I have the feeling something is not exactly right, however...don't tell me...
2661lemme think...does HAL ring a bell?...no, of course, you're only running OS/2!
2662EOI
2663 echo exit 0 >os2
2664 ;;
2665esac
40a7a20a 2666if test -f /xenix; then
2667 echo "Actually, this looks more like a XENIX system..."
2668 echo exit 0 >xenix
2669 d_xenix="$define"
2670else
2671 echo " "
2672 echo "It's not Xenix..."
2673 d_xenix="$undef"
2674fi
2675chmod +x xenix
2676$eunicefix xenix
2677if test -f /venix; then
2678 echo "Actually, this looks more like a VENIX system..."
2679 echo exit 0 >venix
2680else
2681 echo " "
2682 if ./xenix; then
2683 : null
2684 else
2685 echo "Nor is it Venix..."
2686 fi
2687fi
8ff267be 2688chmod +x bsd usg v7 osf1 eunice xenix venix os2
2689$eunicefix bsd usg v7 osf1 eunice xenix venix os2
40a7a20a 2690$rm -f foo
2691
2692: see if setuid scripts can be secure
2693$cat <<EOM
2694
2695Some kernels have a bug that prevents setuid #! scripts from being
2696secure. Some sites have disabled setuid #! scripts because of this.
2697
2698First let's decide if your kernel supports secure setuid #! scripts.
2699(If setuid #! scripts would be secure but have been disabled anyway,
2700don't say that they are secure if asked.)
2701
2702EOM
2703
2704val="$undef"
2705if $test -d /dev/fd; then
2706 echo "#!$ls" >reflect
2707 chmod +x,u+s reflect
2708 ./reflect >flect 2>&1
2709 if $contains "/dev/fd" flect >/dev/null; then
2710 echo "Congratulations, your kernel has secure setuid scripts!" >&4
2711 val="$define"
2712 else
2713 $cat <<EOM
2714If you are not sure if they are secure, I can check but I'll need a
2715username and password different from the one you are using right now.
2716If you don't have such a username or don't want me to test, simply
2717enter 'none'.
2718
2719EOM
2720 rp='Other username to test security of setuid scripts with?'
2721 dflt='none'
2722 . ./myread
2723 case "$ans" in
2724 n|none)
2725 case "$d_suidsafe" in
2726 '') echo "I'll assume setuid scripts are *not* secure." >&4
2727 dflt=n;;
2728 "$undef")
2729 echo "Well, the $hint value is *not* secure." >&4
2730 dflt=n;;
2731 *) echo "Well, the $hint value *is* secure." >&4
2732 dflt=y;;
2733 esac
2734 ;;
2735 *)
2736 $rm -f reflect flect
2737 echo "#!$ls" >reflect
2738 chmod +x,u+s reflect
2739 echo >flect
2740 chmod a+w flect
2741 echo '"su" will (probably) prompt you for '"$ans's password."
2742 su $ans -c './reflect >flect'
2743 if $contains "/dev/fd" flect >/dev/null; then
2744 echo "Okay, it looks like setuid scripts are secure." >&4
2745 dflt=y
2746 else
2747 echo "I don't think setuid scripts are secure." >&4
2748 dflt=n
2749 fi
2750 ;;
2751 esac
2752 rp='Does your kernel have *secure* setuid scripts?'
2753 . ./myread
2754 case "$ans" in
2755 [yY]*) val="$define";;
2756 *) val="$undef";;
2757 esac
2758 fi
2759else
2760 echo "I don't think setuid scripts are secure (no /dev/fd directory)." >&4
760ac839 2761 echo "(That's for file descriptors, not floppy disks.)"
40a7a20a 2762 val="$undef"
2763fi
2764set d_suidsafe
2765eval $setvar
2766
2767$rm -f reflect flect
2768
2769: now see if they want to do setuid emulation
2770echo " "
2771val="$undef"
2772case "$d_suidsafe" in
2773"$define")
2774 val="$undef"
2775 echo "No need to emulate SUID scripts since they are secure here." >& 4
2776 ;;
2777*)
2778 $cat <<EOM
2779Some systems have disabled setuid scripts, especially systems where
2780setuid scripts cannot be secure. On systems where setuid scripts have
2781been disabled, the setuid/setgid bits on scripts are currently
2782useless. It is possible for $package to detect those bits and emulate
2783setuid/setgid in a secure fashion. This emulation will only work if
2784setuid scripts have been disabled in your kernel.
2785
2786EOM
2787 case "$d_dosuid" in
2788 "$define") dflt=y ;;
2789 *) dflt=n ;;
2790 esac
2791 rp="Do you want to do setuid/setgid emulation?"
2792 . ./myread
2793 case "$ans" in
2794 [yY]*) val="$define";;
2795 *) val="$undef";;
2796 esac
2797 ;;
2798esac
2799set d_dosuid
2800eval $setvar
2801
37120919
AD
2802: determine where site specific libraries go.
2803set sitelib sitelib
2804eval $prefixit
2805case "$sitelib" in
2806'') dflt="$privlib/site_perl" ;;
2807*) dflt="$sitelib" ;;
2808esac
2809$cat <<EOM
2810
2811The installation process will also create a directory for
2812site-specific extensions and modules. Some users find it convenient
2813to place all local files in this directory rather than in the main
2814distribution directory.
2815
2816EOM
2817fn=d~+
2818rp='Pathname for the site-specific library files?'
2819. ./getfile
2820if $test "X$sitelibexp" != "X$ansexp"; then
2821 installsitelib=''
2822fi
2823sitelib="$ans"
2824sitelibexp="$ansexp"
2825if $afs; then
2826 $cat <<EOM
2827
2828Since you are running AFS, I need to distinguish the directory in which
2829private files reside from the directory in which they are installed (and from
2830which they are presumably copied to the former directory by occult means).
2831
2832EOM
2833 case "$installsitelib" in
2834 '') dflt=`echo $sitelibexp | sed 's#^/afs/#/afs/.#'`;;
2835 *) dflt="$installsitelib";;
2836 esac
2837 fn=de~
2838 rp='Where will private files be installed?'
2839 . ./getfile
2840 installsitelib="$ans"
2841else
2842 installsitelib="$sitelibexp"
2843fi
4633a7c4 2844
37120919
AD
2845: determine where site specific architecture-dependent libraries go.
2846xxx=`echo $sitelib/$archname | sed 's!^$prefix!!'`
2847: xxx is usuually lib/site_perl/archname.
2848set sitearch sitearch none
8e07c86e 2849eval $prefixit
37120919
AD
2850case "$sitearch" in
2851'') dflt="$sitelib/$archname" ;;
2852*) dflt="$sitearch" ;;
2853esac
8e07c86e
AD
2854$cat <<EOM
2855
4633a7c4
LW
2856The installation process will also create a directory for
2857architecture-dependent site-specific extensions and modules.
8e07c86e
AD
2858
2859EOM
4633a7c4
LW
2860fn=nd~+
2861rp='Pathname for the site-specific architecture-dependent library files?'
8e07c86e 2862. ./getfile
4633a7c4
LW
2863if $test "X$sitearchexp" != "X$ansexp"; then
2864 installsitearch=''
8e07c86e 2865fi
4633a7c4
LW
2866sitearch="$ans"
2867sitearchexp="$ansexp"
8e07c86e
AD
2868if $afs; then
2869 $cat <<EOM
2870
2871Since you are running AFS, I need to distinguish the directory in which
2872private files reside from the directory in which they are installed (and from
2873which they are presumably copied to the former directory by occult means).
2874
2875EOM
4633a7c4
LW
2876 case "$installsitearch" in
2877 '') dflt=`echo $sitearchexp | sed 's#^/afs/#/afs/.#'`;;
2878 *) dflt="$installsitearch";;
8e07c86e
AD
2879 esac
2880 fn=de~
2881 rp='Where will private files be installed?'
2882 . ./getfile
4633a7c4 2883 installsitearch="$ans"
8e07c86e 2884else
4633a7c4 2885 installsitearch="$sitearchexp"
8e07c86e
AD
2886fi
2887
4633a7c4
LW
2888: determine where old public architecture dependent libraries might be
2889case "$oldarchlib" in
2890'') case "$privlib" in
2891 '') ;;
2892 *) dflt="$privlib/$archname"
8e07c86e 2893 ;;
8e07c86e
AD
2894 esac
2895 ;;
4633a7c4
LW
2896*) dflt="$oldarchlib"
2897 ;;
8e07c86e 2898esac
4633a7c4
LW
2899if $test ! -d "$dflt/auto"; then
2900 dflt=none
2901fi
8e07c86e
AD
2902cat <<EOM
2903
760ac839 2904In 5.001, Perl stored architecture-dependent library files in a directory
4633a7c4
LW
2905with a name such as $privlib/$archname,
2906and this directory contained files from the standard extensions and
2907files from any additional extensions you might have added. Starting
2908with version 5.002, all the architecture-dependent standard extensions
760ac839
LW
2909will go into a version-specific directory such as
2910$archlib,
4633a7c4
LW
2911while locally-added extensions will go into
2912$sitearch.
2913
2914If you wish Perl to continue to search the old architecture-dependent
2915library for your local extensions, give the path to that directory.
2916If you do not wish to use your old architecture-dependent library
2917files, answer 'none'.
8e07c86e
AD
2918
2919EOM
4633a7c4
LW
2920fn=dn~
2921rp='Directory for your old 5.001 architecture-dependent libraries?'
8e07c86e 2922. ./getfile
4633a7c4
LW
2923oldarchlib="$ans"
2924oldarchlibexp="$ansexp"
2925case "$oldarchlib" in
2926''|' ') val="$undef" ;;
2927*) val="$define" ;;
2928esac
2929set d_oldarchlib
2930eval $setvar
8e07c86e 2931
4633a7c4
LW
2932: determine where public executables go
2933echo " "
2934set dflt bin bin
2935eval $prefixit
2936fn=d~
2937rp='Pathname where the public executables will reside?'
2938. ./getfile
2939if $test "X$ansexp" != "X$binexp"; then
2940 installbin=''
2941fi
2942bin="$ans"
2943binexp="$ansexp"
8e07c86e
AD
2944if $afs; then
2945 $cat <<EOM
2946
2947Since you are running AFS, I need to distinguish the directory in which
4633a7c4 2948executables reside from the directory in which they are installed (and from
8e07c86e
AD
2949which they are presumably copied to the former directory by occult means).
2950
2951EOM
4633a7c4
LW
2952 case "$installbin" in
2953 '') dflt=`echo $binexp | sed 's#^/afs/#/afs/.#'`;;
2954 *) dflt="$installbin";;
8e07c86e
AD
2955 esac
2956 fn=de~
4633a7c4 2957 rp='Where will public executables be installed?'
8e07c86e 2958 . ./getfile
4633a7c4 2959 installbin="$ans"
8e07c86e 2960else
4633a7c4 2961 installbin="$binexp"
8e07c86e
AD
2962fi
2963
2c7991dc 2964: determine where manual pages are on this system
2965echo " "
2966case "$sysman" in
2967'')
2968 syspath='/usr/man/man1 /usr/man/mann /usr/man/manl /usr/man/local/man1'
2969 syspath="$syspath /usr/man/u_man/man1 /usr/share/man/man1"
2970 syspath="$syspath /usr/catman/u_man/man1 /usr/man/l_man/man1"
2971 syspath="$syspath /usr/local/man/u_man/man1 /usr/local/man/l_man/man1"
2972 syspath="$syspath /usr/man/man.L /local/man/man1 /usr/local/man/man1"
2973 sysman=`./loc . /usr/man/man1 $syspath`
2974 ;;
2975esac
2976if $test -d "$sysman"; then
2977 echo "System manual is in $sysman." >&4
2978else
2979 echo "Could not find manual pages in source form." >&4
2980fi
2981
2afac517 2982: see what memory models we can support
2983case "$models" in
2984'')
2985 $cat >pdp11.c <<'EOP'
2986main() {
2987#ifdef pdp11
2988 exit(0);
2989#else
2990 exit(1);
2991#endif
2992}
2993EOP
2994 cc -o pdp11 pdp11.c >/dev/null 2>&1
2995 if ./pdp11 2>/dev/null; then
2996 dflt='unsplit split'
2997 else
2998 tans=`./loc . X /lib/small /lib/large /usr/lib/small /usr/lib/large /lib/medium /usr/lib/medium /lib/huge`
2999 case "$tans" in
3000 X) dflt='none';;
3001 *) if $test -d /lib/small || $test -d /usr/lib/small; then
3002 dflt='small'
3003 else
3004 dflt=''
3005 fi
3006 if $test -d /lib/medium || $test -d /usr/lib/medium; then
3007 dflt="$dflt medium"
3008 fi
3009 if $test -d /lib/large || $test -d /usr/lib/large; then
3010 dflt="$dflt large"
3011 fi
3012 if $test -d /lib/huge || $test -d /usr/lib/huge; then
3013 dflt="$dflt huge"
3014 fi
3015 esac
3016 fi;;
3017*) dflt="$models";;
3018esac
8e07c86e 3019$cat <<EOM
2afac517 3020
3021Some systems have different model sizes. On most systems they are called
3022small, medium, large, and huge. On the PDP11 they are called unsplit and
3023split. If your system doesn't support different memory models, say "none".
3024If you wish to force everything to one memory model, say "none" here and
3025put the appropriate flags later when it asks you for other cc and ld flags.
3026Venix systems may wish to put "none" and let the compiler figure things out.
3027(In the following question multiple model names should be space separated.)
8e07c86e 3028
8e07c86e 3029EOM
2afac517 3030rp="Which memory models are supported?"
3031. ./myread
3032models="$ans"
3033
3034case "$models" in
3035none)
3036 small=''
3037 medium=''
3038 large=''
3039 huge=''
3040 unsplit=''
3041 split=''
2c7991dc 3042 ;;
2afac517 3043*split)
3044 case "$split" in
3045 '') if $contains '\-i' $sysman/ld.1 >/dev/null 2>&1 || \
3046 $contains '\-i' $sysman/cc.1 >/dev/null 2>&1; then
3047 dflt='-i'
3048 else
3049 dflt='none'
3050 fi;;
3051 *) dflt="$split";;
3052 esac
3053 rp="What flag indicates separate I and D space?"
3054 . ./myread
3055 tans="$ans"
3056 case "$tans" in
3057 none) tans='';;
3058 esac
3059 split="$tans"
3060 unsplit='';;
3061*large*|*small*|*medium*|*huge*)
3062 case "$models" in
3063 *large*)
3064 case "$large" in
3065 '') dflt='-Ml';;
3066 *) dflt="$large";;
3067 esac
3068 rp="What flag indicates large model?"
3069 . ./myread
3070 tans="$ans"
3071 case "$tans" in
3072 none) tans='';
3073 esac
3074 large="$tans";;
3075 *) large='';;
3076 esac
3077 case "$models" in
3078 *huge*) case "$huge" in
3079 '') dflt='-Mh';;
3080 *) dflt="$huge";;
3081 esac
3082 rp="What flag indicates huge model?"
3083 . ./myread
3084 tans="$ans"
3085 case "$tans" in
3086 none) tans='';
3087 esac
3088 huge="$tans";;
3089 *) huge="$large";;
3090 esac
3091 case "$models" in
3092 *medium*) case "$medium" in
3093 '') dflt='-Mm';;
3094 *) dflt="$medium";;
3095 esac
3096 rp="What flag indicates medium model?"
3097 . ./myread
3098 tans="$ans"
3099 case "$tans" in
3100 none) tans='';
3101 esac
3102 medium="$tans";;
3103 *) medium="$large";;
3104 esac
3105 case "$models" in
3106 *small*) case "$small" in
3107 '') dflt='none';;
3108 *) dflt="$small";;
3109 esac
3110 rp="What flag indicates small model?"
3111 . ./myread
3112 tans="$ans"
3113 case "$tans" in
3114 none) tans='';
3115 esac
3116 small="$tans";;
3117 *) small='';;
25f94b33 3118 esac
8e07c86e 3119 ;;
2afac517 3120*)
3121 echo "Unrecognized memory models--you may have to edit Makefile.SH" >&4
8e07c86e
AD
3122 ;;
3123esac
8e07c86e 3124
2afac517 3125: see if we need a special compiler
3126echo " "
3127if ./usg; then
3128 case "$cc" in
3129 '') case "$Mcc" in
3130 /*) dflt='Mcc';;
3131 *) case "$large" in
3132 -M*) dflt='cc';;
3133 *) if $contains '\-M' $sysman/cc.1 >/dev/null 2>&1 ; then
3134 if $contains '\-M' $sysman/cpp.1 >/dev/null 2>&1; then
3135 dflt='cc'
3136 else
3137 dflt='cc -M'
3138 fi
3139 else
3140 dflt='cc'
3141 fi;;
3142 esac;;
3143 esac;;
3144 *) dflt="$cc";;
3145 esac
3146 $cat <<'EOM'
3147On some systems the default C compiler will not resolve multiple global
3148references that happen to have the same name. On some such systems the "Mcc"
3149command may be used to force these to be resolved. On other systems a "cc -M"
3150command is required. (Note that the -M flag on other systems indicates a
3151memory model to use!) If you have the Gnu C compiler, you might wish to use
3152that instead.
8e07c86e
AD
3153
3154EOM
2afac517 3155 rp="What command will force resolution on this system?"
3156 . ./myread
3157 cc="$ans"
8e07c86e 3158else
2afac517 3159 case "$cc" in
3160 '') dflt=cc;;
3161 *) dflt="$cc";;
3162 esac
3163 rp="Use which C compiler?"
3164 . ./myread
3165 cc="$ans"
8e07c86e 3166fi
2afac517 3167echo " "
3168echo "Checking for GNU cc in disguise and/or its version number..." >&4
3169$cat >gccvers.c <<EOM
3170#include <stdio.h>
3171int main() {
3172#ifdef __GNUC__
3173#ifdef __VERSION__
3174 printf("%s\n", __VERSION__);
3175#else
3176 printf("%s\n", "1");
3177#endif
3178#endif
3179 exit(0);
3180}
3181EOM
3182if $cc -o gccvers gccvers.c >/dev/null 2>&1; then
3183 gccversion=`./gccvers`
3184 case "$gccversion" in
3185 '') echo "You are not using GNU cc." ;;
3186 *) echo "You are using GNU cc $gccversion." ;;
3187 esac
3188else
3189 echo " "
3190 echo "*** WHOA THERE!!! ***" >&4
3191 echo " Your C compiler \"$cc\" doesn't seem to be working!" >&4
3192 case "$knowitall" in
3193 '')
3194 echo " You'd better start hunting for one and let me know about it." >&4
3195 exit 1
2c7991dc 3196 ;;
8e07c86e 3197 esac
2afac517 3198fi
3199$rm -f gccvers*
3200case "$gccversion" in
32011*) cpp=`./loc gcc-cpp $cpp $pth` ;;
8e07c86e
AD
3202esac
3203
2afac517 3204: What should the include directory be ?
8e07c86e 3205echo " "
2afac517 3206$echo $n "Hmm... $c"
3207dflt='/usr/include'
3208incpath=''
3209mips_type=''
3210if $test -f /bin/mips && /bin/mips; then
3211 echo "Looks like a MIPS system..."
3212 $cat >usr.c <<'EOCP'
3213#ifdef SYSTYPE_BSD43
3214/bsd43
3215#endif
3216EOCP
3217 if $cc -E usr.c > usr.out && $contains / usr.out >/dev/null 2>&1; then
3218 dflt='/bsd43/usr/include'
3219 incpath='/bsd43'
3220 mips_type='BSD 4.3'
8e07c86e 3221 else
2afac517 3222 mips_type='System V'
8e07c86e 3223 fi
2afac517 3224 $rm -f usr.c usr.out
3225 echo "and you're compiling with the $mips_type compiler and libraries."
3226 xxx_prompt=y
3227 echo "exit 0" >mips
8e07c86e 3228else
2afac517 3229 echo "Doesn't look like a MIPS system."
3230 xxx_prompt=n
3231 echo "exit 1" >mips
3232fi
3233chmod +x mips
3234$eunicefix mips
3235echo " "
3236case "$usrinc" in
3237'') ;;
3238*) dflt="$usrinc";;
3239esac
3240case "$xxx_prompt" in
3241y) fn=d/
3242 rp='Where are the include files you want to use?'
3243 . ./getfile
3244 usrinc="$ans"
3245 ;;
3246*) usrinc="$dflt"
3247 ;;
3248esac
8e07c86e 3249
2afac517 3250: Set private lib path
3251case "$plibpth" in
3252'') if ./mips; then
3253 plibpth="$incpath/usr/lib /usr/local/lib /usr/ccs/lib"
3254 fi;;
3255esac
3256case "$libpth" in
3257' ') dlist='';;
3258'') dlist="$loclibpth $plibpth $glibpth";;
3259*) dlist="$libpth";;
3260esac
8e07c86e 3261
2afac517 3262: Now check and see which directories actually exist, avoiding duplicates
3263libpth=''
3264for xxx in $dlist
3265do
3266 if $test -d $xxx; then
3267 case " $libpth " in
3268 *" $xxx "*) ;;
3269 *) libpth="$libpth $xxx";;
3270 esac
3271 fi
3272done
3273$cat <<'EOM'
8e07c86e 3274
2afac517 3275Some systems have incompatible or broken versions of libraries. Among
3276the directories listed in the question below, please remove any you
3277know not to be holding relevant libraries, and add any that are needed.
3278Say "none" for none.
8e07c86e 3279
8e07c86e 3280EOM
2afac517 3281case "$libpth" in
3282'') dflt='none';;
3283*)
3284 set X $libpth
3285 shift
3286 dflt=${1+"$@"}
4633a7c4 3287 ;;
8e07c86e 3288esac
2afac517 3289rp="Directories to use for library searches?"
3290. ./myread
3291case "$ans" in
3292none) libpth=' ';;
3293*) libpth="$ans";;
3294esac
8e07c86e 3295
5f05dabc 3296: Define several unixisms. Hints files or command line options
3297: can be used to override them.
3298case "$ar" in
3299'') ar='ar';;
3300esac
3301case "$lib_ext" in
3302'') lib_ext='.a';;
3303esac
3304case "$obj_ext" in
3305'') obj_ext='.o';;
3306esac
3307case "$path_sep" in
3308'') path_sep=':';;
3309esac
3310: Which makefile gets called first. This is used by make depend.
3311case "$firstmakefile" in
3312'') firstmakefile='makefile';;
3313esac
3314
2afac517 3315: compute shared library extension
3316case "$so" in
3317'')
3318 if xxx=`./loc libc.sl X $libpth`; $test -f "$xxx"; then
3319 dflt='sl'
3320 else
3321 dflt='so'
3322 fi
3323 ;;
3324*) dflt="$so";;
8e07c86e 3325esac
2afac517 3326$cat <<EOM
8e07c86e 3327
2afac517 3328On some systems, shared libraries may be available. Answer 'none' if
3329you want to suppress searching of shared libraries for the remaining
3330of this configuration.
8e07c86e
AD
3331
3332EOM
2afac517 3333rp='What is the file extension used for shared libraries?'
3334. ./myread
3335so="$ans"
8e07c86e 3336
2afac517 3337: Looking for optional libraries
3338echo " "
3339echo "Checking for optional libraries..." >&4
3340case "$libs" in
3341' '|'') dflt='';;
3342*) dflt="$libs";;
8e07c86e 3343esac
2afac517 3344case "$libswanted" in
3345'') libswanted='c_s';;
3346esac
3347for thislib in $libswanted; do
3348
3349 if xxx=`./loc lib$thislib.$so.[0-9]'*' X $libpth`; $test -f "$xxx"; then
3350 echo "Found -l$thislib (shared)."
3351 case " $dflt " in
3352 *"-l$thislib "*);;
3353 *) dflt="$dflt -l$thislib";;
4633a7c4 3354 esac
2afac517 3355 elif xxx=`./loc lib$thislib.$so X $libpth` ; $test -f "$xxx"; then
3356 echo "Found -l$thislib (shared)."
3357 case " $dflt " in
3358 *"-l$thislib "*);;
3359 *) dflt="$dflt -l$thislib";;
3360 esac
5f05dabc 3361 elif xxx=`./loc lib$thislib$lib_ext X $libpth`; $test -f "$xxx"; then
2afac517 3362 echo "Found -l$thislib."
3363 case " $dflt " in
3364 *"-l$thislib "*);;
3365 *) dflt="$dflt -l$thislib";;
3366 esac
5f05dabc 3367 elif xxx=`./loc $thislib$lib_ext X $libpth`; $test -f "$xxx"; then
2afac517 3368 echo "Found -l$thislib."
3369 case " $dflt " in
3370 *"-l$thislib "*);;
3371 *) dflt="$dflt -l$thislib";;
3372 esac
5f05dabc 3373 elif xxx=`./loc lib${thislib}_s$lib_ext X $libpth`; $test -f "$xxx"; then
2afac517 3374 echo "Found -l${thislib}_s."
3375 case " $dflt " in
3376 *"-l$thislib "*);;
3377 *) dflt="$dflt -l${thislib}_s";;
3378 esac
5f05dabc 3379 elif xxx=`./loc Slib$thislib$lib_ext X $xlibpth`; $test -f "$xxx"; then
2afac517 3380 echo "Found -l$thislib."
3381 case " $dflt " in
3382 *"-l$thislib "*);;
3383 *) dflt="$dflt -l$thislib";;
3384 esac
3385 else
3386 echo "No -l$thislib."
3387 fi
3388done
3389set X $dflt
3390shift
3391dflt="$*"
3392case "$libs" in
3393'') dflt="$dflt";;
3394*) dflt="$libs";;
3395esac
3396case "$dflt" in
3397' '|'') dflt='none';;
8e07c86e 3398esac
2afac517 3399
4633a7c4
LW
3400$cat <<EOM
3401
2afac517 3402Some versions of Unix support shared libraries, which make executables smaller
3403but make load time slightly longer.
8e07c86e 3404
2afac517 3405On some systems, mostly System V Release 3's, the shared library is included
3406by putting the option "-lc_s" as the last thing on the cc command line when
3407linking. Other systems use shared libraries by default. There may be other
3408libraries needed to compile $package on your machine as well. If your system
3409needs the "-lc_s" option, include it here. Include any other special libraries
3410here as well. Say "none" for none.
4633a7c4 3411EOM
2afac517 3412
3413echo " "
3414rp="Any additional libraries?"
8e07c86e 3415. ./myread
2afac517 3416case "$ans" in
3417none) libs=' ';;
3418*) libs="$ans";;
3419esac
8e07c86e 3420
4633a7c4 3421: see how we invoke the C preprocessor
2304df62 3422echo " "
4633a7c4
LW
3423echo "Now, how can we feed standard input to your C preprocessor..." >&4
3424cat <<'EOT' >testcpp.c
3425#define ABC abc
3426#define XYZ xyz
3427ABC.XYZ
3428EOT
3429cd ..
3430echo 'cat >.$$.c; '"$cc"' -E ${1+"$@"} .$$.c; rm .$$.c' >cppstdin
3431chmod 755 cppstdin
3432wrapper=`pwd`/cppstdin
3433ok='false'
3434cd UU
3435
3436if $test "X$cppstdin" != "X" && \
3437 $cppstdin $cppminus <testcpp.c >testcpp.out 2>&1 && \
3438 $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1
3439then
3440 echo "You used to use $cppstdin $cppminus so we'll use that again."
3441 case "$cpprun" in
3442 '') echo "But let's see if we can live without a wrapper..." ;;
3443 *)
3444 if $cpprun $cpplast <testcpp.c >testcpp.out 2>&1 && \
3445 $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1
3446 then
3447 echo "(And we'll use $cpprun $cpplast to preprocess directly.)"
3448 ok='true'
a0d0e21e 3449 else
4633a7c4 3450 echo "(However, $cpprun $cpplast does not work, let's see...)"
2304df62 3451 fi
2304df62 3452 ;;
2304df62 3453 esac
4633a7c4
LW
3454else
3455 case "$cppstdin" in
3456 '') ;;
3457 *)
3458 echo "Good old $cppstdin $cppminus does not seem to be of any help..."
3459 ;;
3460 esac
3461fi
3462
3463if $ok; then
3464 : nothing
3465elif echo 'Maybe "'"$cc"' -E" will work...'; \
3466 $cc -E <testcpp.c >testcpp.out 2>&1; \
3467 $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3468 echo "Yup, it does."
3469 x_cpp="$cc -E"
3470 x_minus='';
3471elif echo 'Nope...maybe "'"$cc"' -E -" will work...'; \
3472 $cc -E - <testcpp.c >testcpp.out 2>&1; \
3473 $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3474 echo "Yup, it does."
3475 x_cpp="$cc -E"
3476 x_minus='-';
3477elif echo 'Nope...maybe "'"$cc"' -P" will work...'; \
3478 $cc -P <testcpp.c >testcpp.out 2>&1; \
3479 $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3480 echo "Yipee, that works!"
3481 x_cpp="$cc -P"
3482 x_minus='';
3483elif echo 'Nope...maybe "'"$cc"' -P -" will work...'; \
3484 $cc -P - <testcpp.c >testcpp.out 2>&1; \
3485 $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3486 echo "At long last!"
3487 x_cpp="$cc -P"
3488 x_minus='-';
3489elif echo 'No such luck, maybe "'$cpp'" will work...'; \
3490 $cpp <testcpp.c >testcpp.out 2>&1; \
3491 $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3492 echo "It works!"
3493 x_cpp="$cpp"
3494 x_minus='';
3495elif echo 'Nixed again...maybe "'$cpp' -" will work...'; \
3496 $cpp - <testcpp.c >testcpp.out 2>&1; \
3497 $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3498 echo "Hooray, it works! I was beginning to wonder."
3499 x_cpp="$cpp"
3500 x_minus='-';
3501elif echo 'Uh-uh. Time to get fancy. Trying a wrapper...'; \
3502 $wrapper <testcpp.c >testcpp.out 2>&1; \
3503 $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3504 x_cpp="$wrapper"
3505 x_minus=''
3506 echo "Eureka!"
3507else
3508 dflt=''
3509 rp="No dice. I can't find a C preprocessor. Name one:"
3510 . ./myread
3511 x_cpp="$ans"
3512 x_minus=''
3513 $x_cpp <testcpp.c >testcpp.out 2>&1
3514 if $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3515 echo "OK, that will do." >&4
3516 else
3517echo "Sorry, I can't get that to work. Go find one and rerun Configure." >&4
3518 exit 1
3519 fi
3520fi
3521
3522case "$ok" in
3523false)
3524 cppstdin="$x_cpp"
3525 cppminus="$x_minus"
3526 cpprun="$x_cpp"
3527 cpplast="$x_minus"
3528 set X $x_cpp
3529 shift
3530 case "$1" in
3531 "$cpp")
3532 echo "Perhaps can we force $cc -E using a wrapper..."
3533 if $wrapper <testcpp.c >testcpp.out 2>&1; \
3534 $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1
3535 then
3536 echo "Yup, we can."
3537 cppstdin="$wrapper"
3538 cppminus='';
3539 else
3540 echo "Nope, we'll have to live without it..."
3541 fi
3542 ;;
3543 esac
3544 case "$cpprun" in
3545 "$wrapper")
3546 cpprun=''
3547 cpplast=''
3548 ;;
3549 esac
3550 ;;
3551esac
3552
3553case "$cppstdin" in
3554"$wrapper") ;;
3555*) $rm -f $wrapper;;
3556esac
3557$rm -f testcpp.c testcpp.out
3558
2afac517 3559: determine optimize, if desired, or use for debug flag also
3560case "$optimize" in
2ae324a7 3561' '|$undef) dflt='none';;
2afac517 3562'') dflt='-O';;
3563*) dflt="$optimize";;
4633a7c4 3564esac
2afac517 3565$cat <<EOH
4633a7c4 3566
760ac839 3567Some C compilers have problems with their optimizers. By default, $package
4633a7c4
LW
3568compiles with the -O flag to use the optimizer. Alternately, you might want
3569to use the symbolic debugger, which uses the -g flag (on traditional Unix
3570systems). Either flag can be specified here. To use neither flag, specify
3571the word "none".
3572
3573EOH
3574rp="What optimizer/debugger flag should be used?"
3575. ./myread
3576optimize="$ans"
3577case "$optimize" in
3578'none') optimize=" ";;
3579esac
3580
3581dflt=''
25f94b33
AD
3582: We will not override a previous value, but we might want to
3583: augment a hint file
3584case "$hint" in
3585none|recommended)
4633a7c4
LW
3586 case "$gccversion" in
3587 1*) dflt='-fpcc-struct-return' ;;
3588 esac
3589 case "$optimize" in
3590 *-g*) dflt="$dflt -DDEBUGGING";;
3591 esac
3592 case "$gccversion" in
3593 2*) if test -d /etc/conf/kconfig.d &&
3594 $contains _POSIX_VERSION $usrinc/sys/unistd.h >/dev/null 2>&1
3595 then
3596 dflt="$dflt -posix"
3597 fi
3598 ;;
3599 esac
3600 ;;
3601esac
3602
a4f3eea9 3603case "$mips_type" in
3604*BSD*|'') inclwanted="$locincpth $usrinc";;
3605*) inclwanted="$locincpth $inclwanted $usrinc/bsd";;
3606esac
3607for thisincl in $inclwanted; do
3608 if $test -d $thisincl; then
3609 if $test x$thisincl != x$usrinc; then
3610 case "$dflt" in
3611 *$thisincl*);;
3612 *) dflt="$dflt -I$thisincl";;
3613 esac
3614 fi
3615 fi
3616done
3617
3618inctest='if $contains $2 $usrinc/$1 >/dev/null 2>&1; then
3619 xxx=true;
3620elif $contains $2 $usrinc/sys/$1 >/dev/null 2>&1; then
3621 xxx=true;
3622else
3623 xxx=false;
3624fi;
3625if $xxx; then
3626 case "$dflt" in
3627 *$2*);;
3628 *) dflt="$dflt -D$2";;
3629 esac;
3630fi'
3631
3632if ./osf1; then
3633 set signal.h __LANGUAGE_C__; eval $inctest
3634else
3635 set signal.h LANGUAGE_C; eval $inctest
3636fi
a4f3eea9 3637
3638case "$hint" in
3639none|recommended) dflt="$ccflags $dflt" ;;
3640*) dflt="$ccflags";;
3641esac
3642
3643case "$dflt" in
3644''|' ') dflt=none;;
3645esac
3646$cat <<EOH
3647
3648Your C compiler may want other flags. For this question you should include
3649-I/whatever and -DWHATEVER flags and any other flags used by the C compiler,
3650but you should NOT include libraries or ld flags like -lwhatever. If you
3651want $package to honor its debug switch, you should include -DDEBUGGING here.
3652Your C compiler might also need additional flags, such as -D_POSIX_SOURCE,
3653-DHIDEMYMALLOC or -DCRIPPLED_CC.
3654
3655To use no flags, specify the word "none".
3656
3657EOH
3658set X $dflt
3659shift
3660dflt=${1+"$@"}
3661rp="Any additional cc flags?"
3662. ./myread
3663case "$ans" in
3664none) ccflags='';;
3665*) ccflags="$ans";;
3666esac
3667
3668: the following weeds options from ccflags that are of no interest to cpp
3669cppflags="$ccflags"
3670case "$gccversion" in
36711*) cppflags="$cppflags -D__GNUC__"
3672esac
3673case "$mips_type" in
3674'');;
3675*BSD*) cppflags="$cppflags -DSYSTYPE_BSD43";;
3676esac
3677case "$cppflags" in
3678'');;
3679*)
3680 echo " "
3681 echo "Let me guess what the preprocessor flags are..." >&4
3682 set X $cppflags
3683 shift
3684 cppflags=''
3685 $cat >cpp.c <<'EOM'
3686#define BLURFL foo
3687
3688BLURFL xx LFRULB
3689EOM
3690 previous=''
3691 for flag in $*
3692 do
3693 case "$flag" in
3694 -*) ftry="$flag";;
3695 *) ftry="$previous $flag";;
3696 esac
3697 if $cppstdin -DLFRULB=bar $ftry $cppminus <cpp.c \
3698 >cpp1.out 2>/dev/null && \
3699 $cpprun -DLFRULB=bar $ftry $cpplast <cpp.c \
3700 >cpp2.out 2>/dev/null && \
3701 $contains 'foo.*xx.*bar' cpp1.out >/dev/null 2>&1 && \
3702 $contains 'foo.*xx.*bar' cpp2.out >/dev/null 2>&1
3703 then
3704 cppflags="$cppflags $ftry"
3705 previous=''
3706 else
3707 previous="$flag"
3708 fi
3709 done
3710 set X $cppflags
3711 shift
3712 cppflags=${1+"$@"}
3713 case "$cppflags" in
3714 *-*) echo "They appear to be: $cppflags";;
3715 esac
3716 $rm -f cpp.c cpp?.out
3717 ;;
3718esac
3719
3720: flags used in final linking phase
3721
3722case "$ldflags" in
3723'') if ./venix; then
3724 dflt='-i -z'
3725 else
3726 dflt=''
3727 fi
3728 case "$ccflags" in
3729 *-posix*) dflt="$dflt -posix" ;;
3730 esac
3731 ;;
3732*) dflt="$ldflags";;
3733esac
3734
3735: Try to guess additional flags to pick up local libraries.
3736for thislibdir in $libpth; do
3737 case " $loclibpth " in
3738 *" $thislibdir "*)
3739 case "$dflt " in
3740 *"-L$thislibdir "*) ;;
3741 *) dflt="$dflt -L$thislibdir" ;;
3742 esac
3743 ;;
3744 esac
3745done
3746
3747case "$dflt" in
3748'') dflt='none' ;;
3749esac
3750
3751$cat <<EOH
3752
3753Your C linker may need flags. For this question you should
3754include -L/whatever and any other flags used by the C linker, but you
3755should NOT include libraries like -lwhatever.
3756
3757Make sure you include the appropriate -L/path flags if your C linker
3758does not normally search all of the directories you specified above,
3759namely
3760 $libpth
3761To use no flags, specify the word "none".
3762
3763EOH
3764
3765rp="Any additional ld flags (NOT including libraries)?"
3766. ./myread
3767case "$ans" in
3768none) ldflags='';;
3769*) ldflags="$ans";;
3770esac
3771rmlist="$rmlist pdp11"
3772
3773: coherency check
3774echo " "
1e422769 3775echo "Checking your choice of C compiler, libs, and flags for coherency..." >&4
3776set X $cc $optimize $ccflags $ldflags -o try try.c $libs
a4f3eea9 3777shift
3778$cat >try.msg <<EOM
3779I've tried to compile and run a simple program with:
3780
3781 $*
3782 ./try
3783
3784and I got the following output:
3785
3786EOM
3787$cat > try.c <<'EOF'
3788#include <stdio.h>
3789main() { exit(0); }
3790EOF
3791dflt=y
1e422769 3792if sh -c "$cc $optimize $ccflags -o try try.c $ldflags $libs" >>try.msg 2>&1; then
a4f3eea9 3793 if sh -c './try' >>try.msg 2>&1; then
3794 dflt=n
3795 else
3796 echo "The program compiled OK, but exited with status $?." >>try.msg
3797 rp="You have a problem. Shall I abort Configure"
3798 dflt=y
3799 fi
3800else
3801 echo "I can't compile the test program." >>try.msg
3802 rp="You have a BIG problem. Shall I abort Configure"
3803 dflt=y
3804fi
3805case "$dflt" in
3806y)
3807 $cat try.msg
3808 case "$knowitall" in
3809 '')
3810 echo "(The supplied flags might be incorrect with this C compiler.)"
3811 ;;
3812 *) dflt=n;;
3813 esac
3814 echo " "
3815 . ./myread
3816 case "$ans" in
3817 n*|N*) ;;
3818 *) echo "Ok. Stopping Configure." >&4
3819 exit 1
3820 ;;
3821 esac
3822 ;;
3823n) echo "OK, that should do.";;
3824esac
3825$rm -f try try.* core
3826
3827echo " "
3828echo "Checking for GNU C Library..." >&4
3829cat >gnulibc.c <<EOM
3830int
3831main()
3832{
3833 return __libc_main();
3834}
3835EOM
3836if $cc $ccflags $ldflags -o gnulibc gnulibc.c $libs >/dev/null 2>&1 && \
3837 ./gnulibc | $contains '^GNU C Library' >/dev/null 2>&1; then
3838 val="$define"
3839 echo "You are using the GNU C Library"
4633a7c4 3840else
a4f3eea9 3841 val="$undef"
3842 echo "You are not using the GNU C Library"
4633a7c4 3843fi
a4f3eea9 3844$rm -f gnulibc*
3845set d_gnulibc
3846eval $setvar
25f94b33 3847
a4f3eea9 3848: see if nm is to be used to determine whether a symbol is defined or not
3849case "$usenm" in
3850'')
3851 case "$d_gnulibc" in
3852 $define)
3853 dflt=n
3854 ;;
3855 *)
3856 dflt=`egrep 'inlibc|csym' ../Configure | wc -l 2>/dev/null`
3857 if $test $dflt -gt 20; then
3858 dflt=y
3859 else
3860 dflt=n
3861 fi
3862 ;;
3863 esac
3864 ;;
3865*)
3866 case "$usenm" in
3867 true) dflt=y;;
3868 *) dflt=n;;
3869 esac
3870 ;;
25f94b33 3871esac
a4f3eea9 3872$cat <<EOM
4633a7c4 3873
a4f3eea9 3874I can use 'nm' to extract the symbols from your C libraries. This is a time
3875consuming task which may generate huge output on the disk (up to 3 megabytes)
3876but that should make the symbols extraction faster. The alternative is to skip
3877the 'nm' extraction part and to compile a small test program instead to
3878determine whether each symbol is present. If you have a fast C compiler and/or
3879if your 'nm' output cannot be parsed, this may be the best solution.
3880You shouldn't let me use 'nm' if you have the GNU C Library.
4633a7c4 3881
a4f3eea9 3882EOM
3883rp='Shall I use nm to extract C symbols from the libraries?'
4633a7c4
LW
3884. ./myread
3885case "$ans" in
a4f3eea9 3886n|N) usenm=false;;
3887*) usenm=true;;
4633a7c4
LW
3888esac
3889
a4f3eea9 3890runnm=$usenm
3891case "$reuseval" in
3892true) runnm=false;;
4633a7c4 3893esac
a4f3eea9 3894
3895: nm options which may be necessary
3896case "$nm_opt" in
3897'') if $test -f /mach_boot; then
1e422769 3898 nm_opt='' # Mach
a4f3eea9 3899 elif $test -d /usr/ccs/lib; then
1e422769 3900 nm_opt='-p' # Solaris (and SunOS?)
a4f3eea9 3901 elif $test -f /dgux; then
1e422769 3902 nm_opt='-p' # DG-UX
2ae324a7 3903 elif $test -f /lib64/rld; then
1e422769 3904 nm_opt='-p' # 64-bit Irix
a4f3eea9 3905 else
3906 nm_opt=''
3907 fi;;
4633a7c4 3908esac
4633a7c4 3909
a4f3eea9 3910: nm options which may be necessary for shared libraries but illegal
3911: for archive libraries. Thank you, Linux.
3912case "$nm_so_opt" in
3913'') case "$myuname" in
3914 *linux*)
3915 if nm --help | $grep 'dynamic' > /dev/null 2>&1; then
3916 nm_so_opt='--dynamic'
4633a7c4 3917 fi
a4f3eea9 3918 ;;
4633a7c4 3919 esac
4633a7c4
LW
3920 ;;
3921esac
3922
a4f3eea9 3923case "$runnm" in
3924true)
3925: get list of predefined functions in a handy place
3926echo " "
3927case "$libc" in
3928'') libc=unknown
3929 case "$libs" in
5f05dabc 3930 *-lc_s*) libc=`./loc libc_s$lib_ext $libc $libpth`
a4f3eea9 3931 esac
3932 ;;
3933esac
3934libnames='';
3935case "$libs" in
3936'') ;;
3937*) for thislib in $libs; do
3938 case "$thislib" in
3939 -lc|-lc_s)
3940 : Handle C library specially below.
3941 ;;
3942 -l*)
3943 thislib=`echo $thislib | $sed -e 's/^-l//'`
3944 if try=`./loc lib$thislib.$so.'*' X $libpth`; $test -f "$try"; then
3945 :
3946 elif try=`./loc lib$thislib.$so X $libpth`; $test -f "$try"; then
3947 :
5f05dabc 3948 elif try=`./loc lib$thislib$lib_ext X $libpth`; $test -f "$try"; then
a4f3eea9 3949 :
d97d40b5
IZ
3950 elif try=`./loc $thislib$lib_ext X $libpth`; $test -f "$try"; then
3951 :
a4f3eea9 3952 elif try=`./loc lib$thislib X $libpth`; $test -f "$try"; then
3953 :
3954 elif try=`./loc $thislib X $libpth`; $test -f "$try"; then
3955 :
5f05dabc 3956 elif try=`./loc Slib$thislib$lib_ext X $xlibpth`; $test -f "$try"; then
a4f3eea9 3957 :
3958 else
3959 try=''
3960 fi
3961 libnames="$libnames $try"
3962 ;;
3963 *) libnames="$libnames $thislib" ;;
3964 esac
3965 done
3966 ;;
3967esac
3968xxx=normal
3969case "$libc" in
3970unknown)
3971 set /lib/libc.$so
3972 for xxx in $libpth; do
3973 $test -r $1 || set $xxx/libc.$so
3974 : The messy sed command sorts on library version numbers.
3975 $test -r $1 || \
3976 set `echo blurfl; echo $xxx/libc.$so.[0-9]* | \
3977 tr ' ' '\012' | egrep -v '\.[A-Za-z]*$' | $sed -e '
3978 h
3979 s/[0-9][0-9]*/0000&/g
3980 s/0*\([0-9][0-9][0-9][0-9][0-9]\)/\1/g
3981 G
3982 s/\n/ /' | \
3983 sort | $sed -e 's/^.* //'`
3984 eval set \$$#
3985 done
3986 $test -r $1 || set /usr/ccs/lib/libc.$so
5f05dabc 3987 $test -r $1 || set /lib/libsys_s$lib_ext
a4f3eea9 3988 ;;
3989*)
3990 set blurfl
3991 ;;
3992esac
3993if $test -r "$1"; then
3994 echo "Your (shared) C library seems to be in $1."
3995 libc="$1"
3996elif $test -r /lib/libc && $test -r /lib/clib; then
3997 echo "Your C library seems to be in both /lib/clib and /lib/libc."
3998 xxx=apollo
3999 libc='/lib/clib /lib/libc'
4000 if $test -r /lib/syslib; then
4001 echo "(Your math library is in /lib/syslib.)"
4002 libc="$libc /lib/syslib"
4003 fi
4004elif $test -r "$libc" || (test -h "$libc") >/dev/null 2>&1; then
4005 echo "Your C library seems to be in $libc, as you said before."
5f05dabc 4006elif $test -r $incpath/usr/lib/libc$lib_ext; then
4007 libc=$incpath/usr/lib/libc$lib_ext;
a4f3eea9 4008 echo "Your C library seems to be in $libc. That's fine."
5f05dabc 4009elif $test -r /lib/libc$lib_ext; then
4010 libc=/lib/libc$lib_ext;
a4f3eea9 4011 echo "Your C library seems to be in $libc. You're normal."
4012else
5f05dabc 4013 if tans=`./loc libc$lib_ext blurfl/dyick $libpth`; $test -r "$tans"; then
a4f3eea9 4014 :
4015 elif tans=`./loc libc blurfl/dyick $libpth`; $test -r "$tans"; then
4016 libnames="$libnames "`./loc clib blurfl/dyick $libpth`
4017 elif tans=`./loc clib blurfl/dyick $libpth`; $test -r "$tans"; then
4018 :
5f05dabc 4019 elif tans=`./loc Slibc$lib_ext blurfl/dyick $xlibpth`; $test -r "$tans"; then
a4f3eea9 4020 :
5f05dabc 4021 elif tans=`./loc Mlibc$lib_ext blurfl/dyick $xlibpth`; $test -r "$tans"; then
a4f3eea9 4022 :
4633a7c4 4023 else
5f05dabc 4024 tans=`./loc Llibc$lib_ext blurfl/dyick $xlibpth`
4633a7c4 4025 fi
a4f3eea9 4026 if $test -r "$tans"; then
4027 echo "Your C library seems to be in $tans, of all places."
4028 libc=$tans
4029 else
4030 libc='blurfl'
4031 fi
4032fi
4033if $test $xxx = apollo -o -r "$libc" || (test -h "$libc") >/dev/null 2>&1; then
4034 dflt="$libc"
4035 cat <<EOM
4633a7c4 4036
a4f3eea9 4037If the guess above is wrong (which it might be if you're using a strange
4038compiler, or your machine supports multiple models), you can override it here.
4633a7c4 4039
a4f3eea9 4040EOM
4041else
4042 dflt=''
4043 echo $libpth | tr ' ' '\012' | sort | uniq > libpath
4044 cat >&4 <<EOM
4045I can't seem to find your C library. I've looked in the following places:
4633a7c4 4046
a4f3eea9 4047EOM
4048 $sed 's/^/ /' libpath
4049 cat <<EOM
4633a7c4 4050
a4f3eea9 4051None of these seems to contain your C library. I need to get its name...
4633a7c4 4052
a4f3eea9 4053EOM
4054fi
4055fn=f
4056rp='Where is your C library?'
4057. ./getfile
4058libc="$ans"
4633a7c4 4059
4633a7c4 4060echo " "
a4f3eea9 4061echo $libc $libnames | tr ' ' '\012' | sort | uniq > libnames
4062set X `cat libnames`
4633a7c4 4063shift
a4f3eea9 4064xxx=files
4065case $# in 1) xxx=file; esac
4066echo "Extracting names from the following $xxx for later perusal:" >&4
4067echo " "
4068$sed 's/^/ /' libnames >&4
4069echo " "
4070$echo $n "This may take a while...$c" >&4
4633a7c4 4071
a4f3eea9 4072: Linux may need the special Dynamic option to nm for shared libraries.
4073: In general, this is stored in the nm_so_opt variable.
4074: Unfortunately, that option may be fatal on non-shared libraries.
4075for nm_libs_ext in $*; do
4076 case $nm_libs_ext in
4077 *$so*) nm $nm_so_opt $nm_opt $nm_libs_ext 2>/dev/null ;;
4078 *) nm $nm_opt $nm_libs_ext 2>/dev/null ;;
4079 esac
4080done > libc.tmp
4633a7c4 4081
a4f3eea9 4082$echo $n ".$c"
4083$grep fprintf libc.tmp > libc.ptf
4084xscan='eval "<libc.ptf $com >libc.list"; $echo $n ".$c" >&4'
4085xrun='eval "<libc.tmp $com >libc.list"; echo "done" >&4'
4086xxx='[ADTSIW]'
4087if com="$sed -n -e 's/__IO//' -e 's/^.* $xxx *_[_.]*//p' -e 's/^.* $xxx *//p'";\
4088 eval $xscan;\
4089 $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4090 eval $xrun
4091elif com="$sed -n -e 's/^__*//' -e 's/^\([a-zA-Z_0-9$]*\).*xtern.*/\1/p'";\
4092 eval $xscan;\
4093 $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4094 eval $xrun
4095elif com="$sed -n -e '/|UNDEF/d' -e '/FUNC..GL/s/^.*|__*//p'";\
4096 eval $xscan;\
4097 $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4098 eval $xrun
4099elif com="$sed -n -e 's/^.* D __*//p' -e 's/^.* D //p'";\
4100 eval $xscan;\
4101 $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4102 eval $xrun
4103elif com="$sed -n -e 's/^_//' -e 's/^\([a-zA-Z_0-9]*\).*xtern.*text.*/\1/p'";\
4104 eval $xscan;\
4105 $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4106 eval $xrun
4107elif com="$sed -n -e 's/^.*|FUNC |GLOB .*|//p'";\
4108 eval $xscan;\
4109 $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4110 eval $xrun
4111elif com="$grep '|' | $sed -n -e '/|COMMON/d' -e '/|DATA/d' \
4112 -e '/ file/d' -e 's/^\([^ ]*\).*/\1/p'";\
4113 eval $xscan;\
4114 $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4115 eval $xrun
4116elif com="$sed -n -e 's/^.*|FUNC |GLOB .*|//p' -e 's/^.*|FUNC |WEAK .*|//p'";\
4117 eval $xscan;\
4118 $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4119 eval $xrun
4120elif com="$sed -n -e 's/^__//' -e '/|Undef/d' -e '/|Proc/s/ .*//p'";\
4121 eval $xscan;\
4122 $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4123 eval $xrun
1e422769 4124elif com="$sed -n -e 's/^.*|Proc .*|Text *| *//p'";\
4125 eval $xscan;\
4126 $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4127 eval $xrun
a4f3eea9 4128elif com="$sed -n -e '/Def. Text/s/.* \([^ ]*\)\$/\1/p'";\
4129 eval $xscan;\
4130 $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4131 eval $xrun
4132elif com="$sed -n -e 's/^[-0-9a-f ]*_\(.*\)=.*/\1/p'";\
4133 eval $xscan;\
4134 $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4135 eval $xrun
44a8e56a 4136elif com="$sed -n -e 's/.*\.text n\ \ \ \.//p'";\
4137 eval $xscan;\
4138 $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4139 eval $xrun
a4f3eea9 4140else
4141 nm -p $* 2>/dev/null >libc.tmp
4142 $grep fprintf libc.tmp > libc.ptf
4143 if com="$sed -n -e 's/^.* [ADTSIW] *_[_.]*//p' -e 's/^.* [ADTSIW] //p'";\
4144 eval $xscan; $contains '^fprintf$' libc.list >/dev/null 2>&1
4145 then
4146 nm_opt='-p'
4147 eval $xrun
4633a7c4 4148 else
a4f3eea9 4149 echo " "
4150 echo "nm didn't seem to work right. Trying ar instead..." >&4
4151 com=''
4152 if ar t $libc > libc.tmp; then
4153 for thisname in $libnames; do
4154 ar t $thisname >>libc.tmp
4155 done
4156 $sed -e 's/\.o$//' < libc.tmp > libc.list
4157 echo "Ok." >&4
4158 else
4159 echo "ar didn't seem to work right." >&4
4160 echo "Maybe this is a Cray...trying bld instead..." >&4
4161 if bld t $libc | $sed -e 's/.*\///' -e 's/\.o:.*$//' > libc.list
4162 then
4163 for thisname in $libnames; do
4164 bld t $libnames | \
4165 $sed -e 's/.*\///' -e 's/\.o:.*$//' >>libc.list
4166 ar t $thisname >>libc.tmp
4167 done
4168 echo "Ok." >&4
4169 else
4170 echo "That didn't work either. Giving up." >&4
4171 exit 1
4172 fi
4173 fi
4633a7c4 4174 fi
4633a7c4 4175fi
a4f3eea9 4176nm_extract="$com"
4177if $test -f /lib/syscalls.exp; then
4633a7c4 4178 echo " "
a4f3eea9 4179 echo "Also extracting names from /lib/syscalls.exp for good ole AIX..." >&4
4180 $sed -n 's/^\([^ ]*\)[ ]*syscall$/\1/p' /lib/syscalls.exp >>libc.list
4181fi
4182;;
4183esac
4184$rm -f libnames libpath
4185
2afac517 4186: determine filename position in cpp output
4633a7c4 4187echo " "
2afac517 4188echo "Computing filename position in cpp output for #include directives..." >&4
4189echo '#include <stdio.h>' > foo.c
4190$cat >fieldn <<EOF
4191$startsh
4192$cppstdin $cppflags $cppminus <foo.c 2>/dev/null | \
4193$grep '^[ ]*#.*stdio\.h' | \
4194while read cline; do
4195 pos=1
4196 set \$cline
4197 while $test \$# -gt 0; do
4198 if $test -r \`echo \$1 | $tr -d '"'\`; then
4199 echo "\$pos"
4200 exit 0
4201 fi
4202 shift
4203 pos=\`expr \$pos + 1\`
4204 done
4633a7c4 4205done
2afac517 4206EOF
4207chmod +x fieldn
4208fieldn=`./fieldn`
4209$rm -f foo.c fieldn
4210case $fieldn in
4211'') pos='???';;
42121) pos=first;;
42132) pos=second;;
42143) pos=third;;
4215*) pos="${fieldn}th";;
4633a7c4 4216esac
2afac517 4217echo "Your cpp writes the filename in the $pos field of the line."
4633a7c4 4218
2afac517 4219: locate header file
4220$cat >findhdr <<EOF
4221$startsh
4222wanted=\$1
4223name=''
4224if test -f $usrinc/\$wanted; then
4225 echo "$usrinc/\$wanted"
4226 exit 0
4227fi
4228awkprg='{ print \$$fieldn }'
4229echo "#include <\$wanted>" > foo\$\$.c
4230$cppstdin $cppminus $cppflags < foo\$\$.c 2>/dev/null | \
4231$grep "^[ ]*#.*\$wanted" | \
4232while read cline; do
4233 name=\`echo \$cline | $awk "\$awkprg" | $tr -d '"'\`
4234 case "\$name" in
4235 */\$wanted) echo "\$name"; exit 0;;
4236 *) name='';;
4237 esac;
4238done;
4239$rm -f foo\$\$.c;
4240case "\$name" in
4241'') exit 1;;
4633a7c4 4242esac
2afac517 4243EOF
4244chmod +x findhdr
4633a7c4 4245
2afac517 4246: define an alternate in-header-list? function
4247inhdr='echo " "; td=$define; tu=$undef; yyy=$@;
4248cont=true; xxf="echo \"<\$1> found.\" >&4";
4249case $# in 2) xxnf="echo \"<\$1> NOT found.\" >&4";;
4250*) xxnf="echo \"<\$1> NOT found, ...\" >&4";;
4251esac;
4252case $# in 4) instead=instead;; *) instead="at last";; esac;
4253while $test "$cont"; do
4254 xxx=`./findhdr $1`
4255 var=$2; eval "was=\$$2";
4256 if $test "$xxx" && $test -r "$xxx";
4257 then eval $xxf;
4258 eval "case \"\$$var\" in $undef) . ./whoa; esac"; eval "$var=\$td";
4259 cont="";
4260 else eval $xxnf;
4261 eval "case \"\$$var\" in $define) . ./whoa; esac"; eval "$var=\$tu"; fi;
4262 set $yyy; shift; shift; yyy=$@;
4263 case $# in 0) cont="";;
4264 2) xxf="echo \"but I found <\$1> $instead.\" >&4";
4265 xxnf="echo \"and I did not find <\$1> either.\" >&4";;
4266 *) xxf="echo \"but I found <\$1\> instead.\" >&4";
4267 xxnf="echo \"there is no <\$1>, ...\" >&4";;
4268 esac;
4269done;
4270while $test "$yyy";
4271do set $yyy; var=$2; eval "was=\$$2";
4272 eval "case \"\$$var\" in $define) . ./whoa; esac"; eval "$var=\$tu";
4273 set $yyy; shift; shift; yyy=$@;
4274done'
4633a7c4 4275
2afac517 4276: see if dld is available
4277set dld.h i_dld
4278eval $inhdr
4633a7c4 4279
2afac517 4280: is a C symbol defined?
4281csym='tlook=$1;
4282case "$3" in
4283-v) tf=libc.tmp; tc=""; tdc="";;
4284-a) tf=libc.tmp; tc="[0]"; tdc="[]";;
4285*) tlook="^$1\$"; tf=libc.list; tc="()"; tdc="()";;
4286esac;
4287tx=yes;
4288case "$reuseval-$4" in
4289true-) ;;
4290true-*) tx=no; eval "tval=\$$4"; case "$tval" in "") tx=yes;; esac;;
4291esac;
4292case "$tx" in
4293yes)
4294 case "$runnm" in
4295 true)
4296 if $contains $tlook $tf >/dev/null 2>&1;
4297 then tval=true;
4298 else tval=false;
4299 fi;;
4300 *)
4301 echo "main() { extern short $1$tdc; printf(\"%hd\", $1$tc); }" > t.c;
4302 if $cc $ccflags $ldflags -o t t.c $libs >/dev/null 2>&1;
4303 then tval=true;
4304 else tval=false;
4305 fi;
4306 $rm -f t t.c;;
4307 esac;;
4308*)
4309 case "$tval" in
4310 $define) tval=true;;
4311 *) tval=false;;
4312 esac;;
4313esac;
4314eval "$2=$tval"'
4633a7c4 4315
2afac517 4316: define an is-in-libc? function
4317inlibc='echo " "; td=$define; tu=$undef;
4318sym=$1; var=$2; eval "was=\$$2";
4319tx=yes;
4320case "$reuseval$was" in
4321true) ;;
4322true*) tx=no;;
4323esac;
4324case "$tx" in
4325yes)
4326 set $sym tres -f;
4327 eval $csym;
4328 case "$tres" in
4329 true)
4330 echo "$sym() found." >&4;
4331 case "$was" in $undef) . ./whoa; esac; eval "$var=\$td";;
4332 *)
4333 echo "$sym() NOT found." >&4;
4334 case "$was" in $define) . ./whoa; esac; eval "$var=\$tu";;
4335 esac;;
4336*)
4337 case "$was" in
4338 $define) echo "$sym() found." >&4;;
4339 *) echo "$sym() NOT found." >&4;;
4340 esac;;
4341esac'
4633a7c4 4342
2afac517 4343: see if dlopen exists
4344xxx_runnm="$runnm"
4345runnm=false
4346set dlopen d_dlopen
4347eval $inlibc
4348runnm="$xxx_runnm"
40a7a20a 4349
2afac517 4350: determine which dynamic loading, if any, to compile in
4633a7c4 4351echo " "
2afac517 4352dldir="ext/DynaLoader"
4353case "$usedl" in
4354$define|y|true)
4355 dflt='y'
4356 usedl="$define"
4357 ;;
4358$undef|n|false)
4359 dflt='n'
4360 usedl="$undef"
4361 ;;
4362*)
4363 dflt='n'
4364 case "$d_dlopen" in
4365 $define) dflt='y' ;;
4366 esac
4367 case "$i_dld" in
4368 $define) dflt='y' ;;
4633a7c4 4369 esac
2afac517 4370 : Does a dl_xxx.xs file exist for this operating system
4371 $test -f ../$dldir/dl_${osname}.xs && dflt='y'
4633a7c4
LW
4372 ;;
4373esac
2afac517 4374rp="Do you wish to use dynamic loading?"
4375. ./myread
4376usedl="$ans"
4377case "$ans" in
4378y*) usedl="$define"
4379 case "$dlsrc" in
4380 '')
4381 if $test -f ../$dldir/dl_${osname}.xs ; then
4382 dflt="$dldir/dl_${osname}.xs"
4383 elif $test "$d_dlopen" = "$define" ; then
4384 dflt="$dldir/dl_dlopen.xs"
4385 elif $test "$i_dld" = "$define" ; then
4386 dflt="$dldir/dl_dld.xs"
4633a7c4 4387 else
2afac517 4388 dflt=''
4633a7c4 4389 fi
4633a7c4 4390 ;;
2afac517 4391 *) dflt="$dldir/$dlsrc"
4392 ;;
4633a7c4 4393 esac
2afac517 4394 echo "The following dynamic loading files are available:"
4395 : Can not go over to $dldir because getfile has path hard-coded in.
4396 cd ..; ls -C $dldir/dl*.xs; cd UU
4397 rp="Source file to use for dynamic loading"
4398 fn="fne"
4399 . ./getfile
4400 usedl="$define"
4401 : emulate basename
4402 dlsrc=`echo $ans | $sed -e 's@.*/\([^/]*\)$@\1@'`
2304df62 4403
2afac517 4404 $cat << EOM
2304df62 4405
2afac517 4406Some systems may require passing special flags to $cc -c to
4407compile modules that will be used to create a shared library.
4408To use no flags, say "none".
2304df62
AD
4409
4410EOM
2afac517 4411 case "$cccdlflags" in
4412 '') case "$gccversion" in
4413 '') case "$osname" in
4414 hpux) dflt='+z' ;;
4415 next) dflt='none' ;;
8cc95fdb 4416 svr4*|esix*) dflt='-Kpic' ;;
4417 irix*) dflt='-KPIC' ;;
4418 solaris) case "$ccflags" in
4419 *-DDEBUGGING*) dflt='-KPIC' ;;
4420 *) dflt='-Kpic' ;;
4421 esac ;;
2afac517 4422 sunos) dflt='-pic' ;;
4423 *) dflt='none' ;;
4424 esac ;;
81d89818
HF
4425 *) case "$osname/$ccflags" in
4426 solaris/*-DDEBUGGING*) dflt='-fPIC' ;;
4427 *) dflt='-fpic' ;;
4428 esac ;;
2afac517 4429 esac ;;
4430 *) dflt="$cccdlflags" ;;
4431 esac
4432 rp="Any special flags to pass to $cc -c to compile shared library modules?"
4433 . ./myread
4434 case "$ans" in
4435 none) cccdlflags=' ' ;;
4436 *) cccdlflags="$ans" ;;
4437 esac
2304df62 4438
2afac517 4439 cat << EOM
ecfc5424 4440
2afac517 4441Some systems use ld to create libraries that can be dynamically loaded,
4442while other systems (such as those using ELF) use $cc.
a0f45b59 4443
2afac517 4444EOM
4445 case "$ld" in
4446 '') $cat >try.c <<'EOM'
4447/* Test for whether ELF binaries are produced */
4448#include <fcntl.h>
4449#include <stdlib.h>
4450main() {
4451 char b[4];
4452 int i = open("a.out",O_RDONLY);
4453 if(i == -1)
4454 exit(1); /* fail */
4455 if(read(i,b,4)==4 && b[0]==127 && b[1]=='E' && b[2]=='L' && b[3]=='F')
4456 exit(0); /* succeed (yes, it's ELF) */
2304df62 4457 else
2afac517 4458 exit(1); /* fail */
4459}
4460EOM
4461 if $cc $ccflags try.c >/dev/null 2>&1 && ./a.out; then
4462 cat <<EOM
4463You appear to have ELF support. I'll use $cc to build dynamic libraries.
4464EOM
4465 dflt="$cc"
2304df62 4466 else
2afac517 4467 echo "I'll use ld to build dynamic libraries."
4468 dflt='ld'
2304df62 4469 fi
2afac517 4470 rm -f try.c a.out
4471 ;;
4472 *) dflt="$ld"
4473 ;;
4474 esac
4475
4476 rp="What command should be used to create dynamic libraries?"
4477 . ./myread
4478 ld="$ans"
4479
4480 cat << EOM
4481
4482Some systems may require passing special flags to $ld to create a
4483library that can be dynamically loaded. If your ld flags include
4484-L/other/path options to locate libraries outside your loader's normal
4485search path, you may need to specify those -L options here as well. To
4486use no flags, say "none".
4487
4488EOM
4489 case "$lddlflags" in
4490 '') case "$osname" in
4491 hpux) dflt='-b' ;;
4492 linux|irix*) dflt='-shared' ;;
4493 next) dflt='none' ;;
4494 solaris) dflt='-G' ;;
4495 sunos) dflt='-assert nodefinitions' ;;
4496 svr4*|esix*) dflt="-G $ldflags" ;;
4497 *) dflt='none' ;;
4498 esac
4499 ;;
4500 *) dflt="$lddlflags" ;;
4501 esac
4502
4503: Try to guess additional flags to pick up local libraries.
4504for thisflag in $ldflags; do
4505 case "$thisflag" in
4506 -L*)
4507 case " $dflt " in
4508 *" $thisflag "*) ;;
4509 *) dflt="$dflt $thisflag" ;;
4510 esac
4511 ;;
4512 esac
4513done
4514
4515case "$dflt" in
4516'') dflt='none' ;;
4517esac
4518
4519 rp="Any special flags to pass to $ld to create a dynamically loaded library?"
4520 . ./myread
4521 case "$ans" in
4522 none) lddlflags=' ' ;;
4523 *) lddlflags="$ans" ;;
4524 esac
4525
4526 cat <<EOM
4527
4528Some systems may require passing special flags to $cc to indicate that
4529the resulting executable will use dynamic linking. To use no flags,
4530say "none".
4531
4532EOM
4533 case "$ccdlflags" in
4534 '') case "$osname" in
4535 hpux) dflt='-Wl,-E' ;;
4536 linux) dflt='-rdynamic' ;;
4537 next) dflt='none' ;;
4538 sunos) dflt='none' ;;
4539 *) dflt='none' ;;
4540 esac ;;
4541 *) dflt="$ccdlflags" ;;
4542 esac
4543 rp="Any special flags to pass to $cc to use dynamic loading?"
4544 . ./myread
4545 case "$ans" in
4546 none) ccdlflags=' ' ;;
4547 *) ccdlflags="$ans" ;;
4548 esac
4549 ;;
4550*) usedl="$undef"
4551 ld='ld'
4552 dlsrc='dl_none.xs'
4553 lddlflags=''
4554 ccdlflags=''
4555 ;;
4556esac
4557
4558also=''
4559case "$usedl" in
4560$undef)
4561 # No dynamic loading being used, so don't bother even to prompt.
4562 useshrplib='false'
4563 ;;
4564*) case "$useshrplib" in
4565 '') case "$osname" in
2ae324a7 4566 svr4*|dgux|dynixptx|esix|powerux)
2afac517 4567 dflt='yes'
4568 also='Building a shared libperl is required for dynamic loading to work on your system.'
4569 ;;
4570 next*)
4571 case "$osvers" in
4572 4*) dflt='yes'
4573 also='Building a shared libperl is needed for MAB support.'
4574 ;;
4575 *) dflt='no'
4576 ;;
4577 esac
4578 ;;
4579 sunos)
4580 dflt='no'
4581 also='Building a shared libperl will definitely not work on SunOS 4.'
4582 ;;
4583 *) dflt='no'
4584 ;;
4585 esac
4586 ;;
4587 $define|true|[Yy]*)
4588 dflt='yes'
4589 ;;
4590 *) dflt='no'
4591 ;;
4592 esac
4593 $cat << EOM
4594
4595The perl executable is normally obtained by linking perlmain.c with
4596libperl${lib_ext}, any static extensions (usually just DynaLoader), and
4597any other libraries needed on this system (such as -lm, etc.). Since
4598your system supports dynamic loading, it is probably possible to build
4599a shared libperl.$so. If you will have more than one executable linked
4600to libperl.$so, this will significantly reduce the size of each
4601executable, but it may have a noticeable affect on performance. The
4602default is probably sensible for your system.
4603$also
4604
4605EOM
4606 rp="Build a shared libperl.$so (y/n)"
4607 . ./myread
4608 case "$ans" in
4609 true|$define|[Yy]*)
4610 useshrplib='true'
4611 # Why does next4 have to be so different?
4612 case "${osname}${osvers}" in
4613 next4*) xxx='DYLD_LIBRARY_PATH' ;;
4614 *) xxx='LD_LIBRARY_PATH' ;;
4615 esac
4616 $cat <<EOM >&4
4617
4618To build perl, you must add the current working directory to your
4619$xxx environtment variable before running make. You can do
4620this with
4621 $xxx=\`pwd\`; export $xxx
4622for Bourne-style shells, or
4623 setenv $xxx \`pwd\`
4624for Csh-style shells. You *MUST* do this before running make.
4625
4626EOM
4627 ;;
4628 *) useshrplib='false' ;;
4629 esac
4630 ;;
4631esac
4632
4633case "$useshrplib" in
4634true)
4635 case "$libperl" in
4636 '')
4637 # Figure out a good name for libperl.so. Since it gets stored in
4638 # a version-specific architecture-dependent library, the version
4639 # number isn't really that important, except for making cc/ld happy.
4640 #
4641 # A name such as libperl.so.3.1
4642 majmin="libperl.$so.$patchlevel.$subversion"
4643 # A name such as libperl.so.301
4644 majonly=`echo $patchlevel $subversion |
4645 $awk '{printf "%d%02d", $1, $2}'`
4646 majonly=libperl.$so.$majonly
4647 # I'd prefer to keep the os-specific stuff here to a minimum, and
4648 # rely on figuring it out from the naming of libc.
4649 case "${osname}${osvers}" in
4650 next4*)
4651 dflt=libperl.5.$so
4652 # XXX How handle the --version stuff for MAB?
4653 ;;
4654 linux*) # ld won't link with a bare -lperl otherwise.
4655 dflt=libperl.$so
4656 ;;
4657 *) # Try to guess based on whether libc has major.minor.
4658 case "$libc" in
4659 *libc.$so.[0-9]*.[0-9]*) dflt=$majmin ;;
4660 *libc.$so.[0-9]*) dflt=$majonly ;;
4661 *) dflt=libperl.$so ;;
4662 esac
4663 ;;
4664 esac
4665 ;;
4666 *) dflt=$libperl
4667 ;;
4668 esac
4669 cat << EOM
4670
4671I need to select a good name for the shared libperl. If your system uses
4672library names with major and minor numbers, then you might want something
4673like $majmin. Alternatively, if your system uses a single version
4674number for shared libraries, then you might want to use $majonly.
4675Or, your system might be quite happy with a simple libperl.$so.
4676
4677Since the shared libperl will get installed into a version-specific
4678architecture-dependent directory, the version number of the shared perl
4679library probably isn't important, so the default should be o.k.
4680
4681EOM
4682 rp='What name do you want to give to the shared libperl?'
4683 . ./myread
4684 libperl=$ans
4685 echo "Ok, I'll use $libperl"
4686 ;;
4687*)
4688 libperl="libperl${lib_ext}"
4689 ;;
4690esac
4691
4692# Detect old use of shrpdir via undocumented Configure -Dshrpdir
4693case "$shrpdir" in
4694'') ;;
4695*) $cat >&4 <<EOM
4696WARNING: Use of the shrpdir variable for the installation location of
4697the shared $libperl is not supported. It was never documented and
284c50cc
MDLR
4698will not work in this version. Let me (chip@perl.com) know of any
4699problems this may cause.
2afac517 4700
4701EOM
4702 case "$shrpdir" in
4703 "$archlibexp/CORE")
4704 $cat >&4 <<EOM
4705But your current setting of $shrpdir is
4706the default anyway, so it's harmless.
4707EOM
4708 ;;
4709 *)
4710 $cat >&4 <<EOM
4711Further, your current attempted setting of $shrpdir
4712conflicts with the value of $archlibexp/CORE
4713that installperl will use.
4714EOM
4715 ;;
4716 esac
4717 ;;
4718esac
4719
4720# How will the perl executable find the installed shared $libperl?
4721# Add $xxx to ccdlflags.
4722# If we can't figure out a command-line option, use $shrpenv to
4723# set env LD_RUN_PATH. The main perl makefile uses this.
4724shrpdir=$archlibexp/CORE
4725xxx=''
4726tmp_shrpenv=''
4727if "$useshrplib"; then
4728 case "$osname" in
4729 solaris|netbsd)
4730 xxx="-R $shrpdir"
4731 ;;
28757baa 4732 freebsd)
44a8e56a 4733 xxx="-Wl,-R$shrpdir"
28757baa 4734 ;;
b971f6e4 4735 linux|irix*|dec_osf)
2afac517 4736 xxx="-Wl,-rpath,$shrpdir"
4737 ;;
4738 *)
4739 tmp_shrpenv="env LD_RUN_PATH=$shrpdir"
4740 ;;
4741 esac
4742 case "$xxx" in
4743 '') ;;
b971f6e4 4744 *)
4745 # Only add $xxx if it isn't already in ccdlflags.
4746 case " $ccdlflags " in
4747 *" $xxx "*) ;;
4748 *) ccdlflags="$ccdlflags $xxx"
4749 cat <<EOM >&4
2afac517 4750
4751Adding $xxx to the flags
4752passed to $ld so that the perl executable will find the
4753installed shared $libperl.
4754
4755EOM
b971f6e4 4756 ;;
4757 esac
2afac517 4758 ;;
4759 esac
4760fi
4761# Respect a hint or command-line value.
4762case "$shrpenv" in
4763'') shrpenv="$tmp_shrpenv" ;;
4764esac
4765
4766: determine where manual pages go
4767set man1dir man1dir none
4768eval $prefixit
4769$cat <<EOM
4770
4771$spackage has manual pages available in source form.
4772EOM
4773case "$nroff" in
4774nroff)
4775 echo "However, you don't have nroff, so they're probably useless to you."
4776 case "$man1dir" in
4777 '') man1dir="none";;
4778 esac;;
4779esac
4780echo "If you don't want the manual sources installed, answer 'none'."
4781case "$man1dir" in
4782' ') dflt=none
4783 ;;
4784'')
4785 lookpath="$prefixexp/man/man1 $prefixexp/man/l_man/man1"
4786 lookpath="$lookpath $prefixexp/man/p_man/man1"
4787 lookpath="$lookpath $prefixexp/man/u_man/man1"
4788 lookpath="$lookpath $prefixexp/man/man.1"
4789 : If prefix contains 'perl' then we want to keep the man pages
4790 : under the prefix directory. Otherwise, look in a variety of
4791 : other possible places. This is debatable, but probably a
4792 : good compromise. Well, apparently not.
4793 : Experience has shown people expect man1dir to be under prefix,
4794 : so we now always put it there. Users who want other behavior
4795 : can answer interactively or use a command line option.
4796 : Does user have System V-style man paths.
4797 case "$sysman" in
4798 */?_man*) dflt=`./loc . $prefixexp/l_man/man1 $lookpath` ;;
4799 *) dflt=`./loc . $prefixexp/man/man1 $lookpath` ;;
4800 esac
4801 set dflt
4802 eval $prefixup
4803 ;;
4804*) dflt="$man1dir"
4805 ;;
4806esac
4807echo " "
4808fn=dn+~
4809rp="Where do the main $spackage manual pages (source) go?"
4810. ./getfile
4811if $test "X$man1direxp" != "X$ansexp"; then
4812 installman1dir=''
4813fi
4814man1dir="$ans"
4815man1direxp="$ansexp"
4816case "$man1dir" in
4817'') man1dir=' '
4818 installman1dir='';;
4819esac
4820if $afs; then
4821 $cat <<EOM
4822
4823Since you are running AFS, I need to distinguish the directory in which
4824manual pages reside from the directory in which they are installed (and from
4825which they are presumably copied to the former directory by occult means).
4826
4827EOM
4828 case "$installman1dir" in
4829 '') dflt=`echo $man1direxp | sed 's#^/afs/#/afs/.#'`;;
4830 *) dflt="$installman1dir";;
4831 esac
4832 fn=de~
4833 rp='Where will man pages be installed?'
4834 . ./getfile
4835 installman1dir="$ans"
4836else
4837 installman1dir="$man1direxp"
4838fi
4839
4840: What suffix to use on installed man pages
4841
4842case "$man1dir" in
4843' ')
4844 man1ext='0'
4845 ;;
4846*)
4847 rp="What suffix should be used for the main $spackage man pages?"
4848 case "$man1ext" in
4849 '') case "$man1dir" in
4850 *1) dflt=1 ;;
4851 *1p) dflt=1p ;;
4852 *1pm) dflt=1pm ;;
4853 *l) dflt=l;;
4854 *n) dflt=n;;
4855 *o) dflt=o;;
4856 *p) dflt=p;;
4857 *C) dflt=C;;
4858 *L) dflt=L;;
4859 *L1) dflt=L1;;
4860 *) dflt=1;;
4861 esac
4862 ;;
4863 *) dflt="$man1ext";;
4864 esac
4865 . ./myread
4866 man1ext="$ans"
4867 ;;
4868esac
4869
4870: see if we can have long filenames
4871echo " "
4872rmlist="$rmlist /tmp/cf$$"
4873$test -d /tmp/cf$$ || mkdir /tmp/cf$$
4874first=123456789abcdef
4875second=/tmp/cf$$/$first
4876$rm -f $first $second
4877if (echo hi >$first) 2>/dev/null; then
4878 if $test -f 123456789abcde; then
4879 echo 'You cannot have filenames longer than 14 characters. Sigh.' >&4
4880 val="$undef"
4881 else
4882 if (echo hi >$second) 2>/dev/null; then
4883 if $test -f /tmp/cf$$/123456789abcde; then
4884 $cat <<'EOM'
4885That's peculiar... You can have filenames longer than 14 characters, but only
4886on some of the filesystems. Maybe you are using NFS. Anyway, to avoid problems
4887I shall consider your system cannot support long filenames at all.
4888EOM
4889 val="$undef"
4890 else
4891 echo 'You can have filenames longer than 14 characters.' >&4
4892 val="$define"
4893 fi
4894 else
4895 $cat <<'EOM'
4896How confusing! Some of your filesystems are sane enough to allow filenames
4897longer than 14 characters but some others like /tmp can't even think about them.
4898So, for now on, I shall assume your kernel does not allow them at all.
4899EOM
4900 val="$undef"
4901 fi
4902 fi
4903else
4904 $cat <<'EOM'
4905You can't have filenames longer than 14 chars. You can't even think about them!
4906EOM
4907 val="$undef"
4908fi
4909set d_flexfnam
4910eval $setvar
4911$rm -rf /tmp/cf$$ 123456789abcde*
4912
4913: determine where library module manual pages go
4914set man3dir man3dir none
4915eval $prefixit
4916$cat <<EOM
4917
4918$spackage has manual pages for many of the library modules.
4919EOM
4920
4921case "$nroff" in
4922nroff)
4923 $cat <<'EOM'
4924However, you don't have nroff, so they're probably useless to you.
4925You can use the supplied perldoc script instead.
4926EOM
4927 case "$man3dir" in
4928 '') man3dir="none";;
4929 esac;;
4930esac
4931
4932case "$d_flexfnam" in
4933undef)
4934 $cat <<'EOM'
4935However, your system can't handle the long file names like File::Basename.3.
4936You can use the supplied perldoc script instead.
4937EOM
4938 case "$man3dir" in
4939 '') man3dir="none";;
4940 esac;;
4941esac
4942
4943echo "If you don't want the manual sources installed, answer 'none'."
4944: We dont use /usr/local/man/man3 because some man programs will
4945: only show the /usr/local/man/man3 contents, and not the system ones,
4946: thus man less will show the perl module less.pm, but not the system
4947: less command. We might also conflict with TCL man pages.
4948: However, something like /opt/perl/man/man3 is fine.
4949case "$man3dir" in
4950'') case "$prefix" in
4951 *perl*) dflt=`echo $man1dir |
4952 $sed -e 's/man1/man3/g' -e 's/man\.1/man\.3/g'` ;;
4953 *) dflt="$privlib/man/man3" ;;
4954 esac
4955 ;;
4956' ') dflt=none;;
4957*) dflt="$man3dir" ;;
4958esac
4959echo " "
4960
4961fn=dn+~
4962rp="Where do the $spackage library man pages (source) go?"
4963. ./getfile
4964if test "X$man3direxp" != "X$ansexp"; then
4965 installman3dir=''
4966fi
4967
4968man3dir="$ans"
4969man3direxp="$ansexp"
4970case "$man3dir" in
4971'') man3dir=' '
4972 installman3dir='';;
4973esac
4974if $afs; then
4975 $cat <<EOM
4976
4977Since you are running AFS, I need to distinguish the directory in which
4978manual pages reside from the directory in which they are installed (and from
4979which they are presumably copied to the former directory by occult means).
4980
4981EOM
4982 case "$installman3dir" in
4983 '') dflt=`echo $man3direxp | sed 's#^/afs/#/afs/.#'`;;
4984 *) dflt="$installman3dir";;
4985 esac
4986 fn=de~
4987 rp='Where will man pages be installed?'
4988 . ./getfile
4989 installman3dir="$ans"
4990else
4991 installman3dir="$man3direxp"
4992fi
4993
4994: What suffix to use on installed man pages
4995
4996case "$man3dir" in
4997' ')
4998 man3ext='0'
4999 ;;
5000*)
5001 rp="What suffix should be used for the $spackage library man pages?"
5002 case "$man3ext" in
5003 '') case "$man3dir" in
5004 *3) dflt=3 ;;
5005 *3p) dflt=3p ;;
5006 *3pm) dflt=3pm ;;
5007 *l) dflt=l;;
5008 *n) dflt=n;;
5009 *o) dflt=o;;
5010 *p) dflt=p;;
5011 *C) dflt=C;;
5012 *L) dflt=L;;
5013 *L3) dflt=L3;;
5014 *) dflt=3;;
5015 esac
5016 ;;
5017 *) dflt="$man3ext";;
5018 esac
5019 . ./myread
5020 man3ext="$ans"
5021 ;;
5022esac
5023
5024: see if we have to deal with yellow pages, now NIS.
5025if $test -d /usr/etc/yp || $test -d /etc/yp; then
5026 if $test -f /usr/etc/nibindd; then
5027 echo " "
5028 echo "I'm fairly confident you're on a NeXT."
5029 echo " "
5030 rp='Do you get the hosts file via NetInfo?'
5031 dflt=y
5032 case "$hostcat" in
5033 nidump*) ;;
5034 '') ;;
5035 *) dflt=n;;
5036 esac
5037 . ./myread
5038 case "$ans" in
5039 y*) hostcat='nidump hosts .';;
5040 *) case "$hostcat" in
5041 nidump*) hostcat='';;
5042 esac
5043 ;;
5044 esac
5045 fi
5046 case "$hostcat" in
5047 nidump*) ;;
5048 *)
5049 case "$hostcat" in
5050 *ypcat*) dflt=y;;
5051 '') if $contains '^\+' /etc/passwd >/dev/null 2>&1; then
5052 dflt=y
5053 else
5054 dflt=n
5055 fi;;
5056 *) dflt=n;;
5057 esac
5058 echo " "
5059 rp='Are you getting the hosts file via yellow pages?'
5060 . ./myread
5061 case "$ans" in
5062 y*) hostcat='ypcat hosts';;
5063 *) hostcat='cat /etc/hosts';;
5064 esac
5065 ;;
5066 esac
5067fi
5068
5069: now get the host name
5070echo " "
5071echo "Figuring out host name..." >&4
5072case "$myhostname" in
5073'') cont=true
5074 echo 'Maybe "hostname" will work...'
5075 if tans=`sh -c hostname 2>&1` ; then
5076 myhostname=$tans
5077 phostname=hostname
5078 cont=''
5079 fi
5080 ;;
5081*) cont='';;
5082esac
5083if $test "$cont"; then
5084 if ./xenix; then
5085 echo 'Oh, dear. Maybe "/etc/systemid" is the key...'
5086 if tans=`cat /etc/systemid 2>&1` ; then
5087 myhostname=$tans
5088 phostname='cat /etc/systemid'
5089 echo "Whadyaknow. Xenix always was a bit strange..."
5090 cont=''
5091 fi
5092 elif $test -r /etc/systemid; then
5093 echo "(What is a non-Xenix system doing with /etc/systemid?)"
5094 fi
5095fi
5096if $test "$cont"; then
5097 echo 'No, maybe "uuname -l" will work...'
5098 if tans=`sh -c 'uuname -l' 2>&1` ; then
5099 myhostname=$tans
5100 phostname='uuname -l'
5101 else
5102 echo 'Strange. Maybe "uname -n" will work...'
5103 if tans=`sh -c 'uname -n' 2>&1` ; then
5104 myhostname=$tans
5105 phostname='uname -n'
5106 else
5107 echo 'Oh well, maybe I can mine it out of whoami.h...'
5108 if tans=`sh -c $contains' sysname $usrinc/whoami.h' 2>&1` ; then
5109 myhostname=`echo "$tans" | $sed 's/^.*"\(.*\)"/\1/'`
5110 phostname="sed -n -e '"'/sysname/s/^.*\"\\(.*\\)\"/\1/{'"' -e p -e q -e '}' <$usrinc/whoami.h"
5111 else
5112 case "$myhostname" in
5113 '') echo "Does this machine have an identity crisis or something?"
5114 phostname='';;
5115 *)
5116 echo "Well, you said $myhostname before..."
5117 phostname='echo $myhostname';;
5118 esac
5119 fi
5120 fi
5121 fi
5122fi
5123: you do not want to know about this
5124set $myhostname
5125myhostname=$1
5126
5127: verify guess
5128if $test "$myhostname" ; then
5129 dflt=y
5130 rp='Your host name appears to be "'$myhostname'".'" Right?"
5131 . ./myread
5132 case "$ans" in
5133 y*) ;;
5134 *) myhostname='';;
5135 esac
5136fi
5137
5138: bad guess or no guess
5139while $test "X$myhostname" = X ; do
5140 dflt=''
5141 rp="Please type the (one word) name of your host:"
5142 . ./myread
5143 myhostname="$ans"
5144done
5145
5146: translate upper to lower if necessary
5147case "$myhostname" in
5148*[A-Z]*)
5149 echo "(Normalizing case in your host name)"
5150 myhostname=`echo $myhostname | ./tr '[A-Z]' '[a-z]'`
5151 ;;
5152esac
5153
5154case "$myhostname" in
5155*.*)
5156 dflt=`expr "X$myhostname" : "X[^.]*\(\..*\)"`
5157 myhostname=`expr "X$myhostname" : "X\([^.]*\)\."`
5158 echo "(Trimming domain name from host name--host name is now $myhostname)"
5159 ;;
5160*) case "$mydomain" in
5161 '')
5162 {
5163 : If we use NIS, try ypmatch.
5164 : Is there some reason why this was not done before?
5165 test "X$hostcat" = "Xypcat hosts" &&
5166 ypmatch "$myhostname" hosts 2>/dev/null |\
5167 $sed -e 's/[ ]*#.*//; s/$/ /' > hosts && \
5168 $test -s hosts
5169 } || {
5170 : Extract only the relevant hosts, reducing file size,
5171 : remove comments, insert trailing space for later use.
5172 $hostcat | $sed -n -e "s/[ ]*#.*//; s/\$/ /
5173 /[ ]$myhostname[ . ]/p" > hosts
5174 }
5175 tmp_re="[ . ]"
5176 $test x`$awk "/[0-9].*[ ]$myhostname$tmp_re/ { sum++ }
5177 END { print sum }" hosts` = x1 || tmp_re="[ ]"
5178 dflt=.`$awk "/[0-9].*[ ]$myhostname$tmp_re/ {for(i=2; i<=NF;i++) print \\\$i}" \
5179 hosts | $sort | $uniq | \
5180 $sed -n -e "s/$myhostname\.\([-a-zA-Z0-9_.]\)/\1/p"`
5181 case `$echo X$dflt` in
5182 X*\ *) echo "(Several hosts in /etc/hosts matched hostname)"
5183 dflt=.
5184 ;;
5185 X.) echo "(You do not have fully-qualified names in /etc/hosts)"
5186 ;;
5187 esac
5188 case "$dflt" in
5189 .)
5190 tans=`./loc resolv.conf X /etc /usr/etc`
5191 if $test -f "$tans"; then
5192 echo "(Attempting domain name extraction from $tans)"
5193 : Why was there an Egrep here, when Sed works?
5194 : Look for either a search or a domain directive.
a6006777 5195 dflt=.`$sed -n -e 's/ / /g' \
28757baa 5196 -e 's/^search *\([^ ]*\).*/\1/p' $tans \
a6006777 5197 | ./tr '[A-Z]' '[a-z]' 2>/dev/null`
2afac517 5198 case "$dflt" in
a6006777 5199 .) dflt=.`$sed -n -e 's/ / /g' \
28757baa 5200 -e 's/^domain *\([^ ]*\).*/\1/p' $tans \
a6006777 5201 | ./tr '[A-Z]' '[a-z]' 2>/dev/null`
774d564b 5202 ;;
2afac517 5203 esac
5204 fi
5205 ;;
5206 esac
5207 case "$dflt" in
5208 .) echo "(No help from resolv.conf either -- attempting clever guess)"
5209 dflt=.`sh -c domainname 2>/dev/null`
5210 case "$dflt" in
5211 '') dflt='.';;
5212 .nis.*|.yp.*|.main.*) dflt=`echo $dflt | $sed -e 's/^\.[^.]*//'`;;
5213 esac
5214 ;;
5215 esac
5216 case "$dflt" in
5217 .) echo "(Lost all hope -- silly guess then)"
5218 dflt='.uucp'
5219 ;;
5220 esac
5221 $rm -f hosts
5222 ;;
5223 *) dflt="$mydomain";;
5224 esac;;
5225esac
5226echo " "
5227rp="What is your domain name?"
5228. ./myread
5229tans="$ans"
5230case "$ans" in
5231'') ;;
5232.*) ;;
5233*) tans=".$tans";;
5234esac
5235mydomain="$tans"
5236
5237: translate upper to lower if necessary
5238case "$mydomain" in
5239*[A-Z]*)
5240 echo "(Normalizing case in your domain name)"
5241 mydomain=`echo $mydomain | ./tr '[A-Z]' '[a-z]'`
5242 ;;
5243esac
5244
5245: a little sanity check here
5246case "$phostname" in
5247'') ;;
5248*)
5249 case `$phostname | ./tr '[A-Z]' '[a-z]'` in
5250 $myhostname$mydomain|$myhostname) ;;
5251 *)
5252 case "$phostname" in
5253 sed*)
5254 echo "(That doesn't agree with your whoami.h file, by the way.)"
5255 ;;
5256 *)
5257 echo "(That doesn't agree with your $phostname command, by the way.)"
5258 ;;
5259 esac
5260 ;;
5261 esac
5262 ;;
5263esac
5264
5265$cat <<EOM
5266
5267I need to get your e-mail address in Internet format if possible, i.e.
5268something like user@host.domain. Please answer accurately since I have
5269no easy means to double check it. The default value provided below
5270is most probably close to the reality but may not be valid from outside
5271your organization...
5272
5273EOM
5274cont=x
5275while test "$cont"; do
5276 case "$cf_email" in
5277 '') dflt="$cf_by@$myhostname$mydomain";;
5278 *) dflt="$cf_email";;
5279 esac
5280 rp='What is your e-mail address?'
5281 . ./myread
5282 cf_email="$ans"
5283 case "$cf_email" in
5284 *@*.*) cont='' ;;
5285 *)
5286 rp='Address does not look like an Internet one. Use it anyway?'
5287 case "$fastread" in
5288 yes) dflt=y ;;
5289 *) dflt=n ;;
5290 esac
5291 . ./myread
5292 case "$ans" in
5293 y*) cont='' ;;
5294 *) echo " " ;;
5295 esac
5296 ;;
5297 esac
5298done
5299
5300$cat <<EOM
5301
5302If you or somebody else will be maintaining perl at your site, please
5303fill in the correct e-mail address here so that they may be contacted
5304if necessary. Currently, the "perlbug" program included with perl
5305will send mail to this address in addition to perlbug@perl.com. You may
5306enter "none" for no administrator.
5307
5308EOM
5309case "$perladmin" in
5310'') dflt="$cf_email";;
5311*) dflt="$perladmin";;
5312esac
5313rp='Perl administrator e-mail address'
5314. ./myread
5315perladmin="$ans"
5316
5f05dabc 5317: figure out how to guarantee perl startup
5318case "$startperl" in
5319'')
5320 case "$sharpbang" in
5321 *!)
5322 $cat <<EOH
5323
5324I can use the #! construct to start perl on your system. This will
5325make startup of perl scripts faster, but may cause problems if you
5326want to share those scripts and perl is not in a standard place
5327($binexp/perl) on all your platforms. The alternative is to force
5328a shell by starting the script with a single ':' character.
5329
5330EOH
5331 dflt="$binexp/perl"
5332 rp='What shall I put after the #! to start up perl ("none" to not use #!)?'
5333 . ./myread
5334 case "$ans" in
68dc0745 5335 none) startperl=": # use perl";;
5336 *) startperl="#!$ans"
5337 if $test 33 -lt `echo "$ans" | wc -c`; then
5338 $cat >&4 <<EOM
5339
5340WARNING: Some systems limit the #! command to 32 characters.
5341If you experience difficulty running Perl scripts with #!, try
5342installing Perl in a directory with a shorter pathname.
5343
5344EOM
5345 fi ;;
5f05dabc 5346 esac
5347 ;;
5348 *) startperl=": # use perl"
5349 ;;
5350 esac
5351 ;;
5352esac
5353echo "I'll use $startperl to start perl scripts."
5354
5355: figure best path for perl in scripts
5356case "$perlpath" in
5357'')
5358 perlpath="$binexp/perl"
5359 case "$startperl" in
5360 *!*) ;;
5361 *)
5362 $cat <<EOH
5363
5364I will use the "eval 'exec'" idiom to start Perl on your system.
5365I can use the full path of your Perl binary for this purpose, but
5366doing so may cause problems if you want to share those scripts and
5367Perl is not always in a standard place ($binexp/perl).
5368
5369EOH
5370 dflt="$binexp/perl"
5371 rp="What path shall I use in \"eval 'exec'\"?"
5372 . ./myread
5373 perlpath="$ans"
5374 ;;
5375 esac
5376 ;;
5377esac
5378case "$startperl" in
5379*!*) ;;
5380*) echo "I'll use $perlpath in \"eval 'exec'\"" ;;
5381esac
5382
2afac517 5383: determine where public executable scripts go
5384set scriptdir scriptdir
5385eval $prefixit
5386case "$scriptdir" in
5387'')
5388 dflt="$bin"
5389 : guess some guesses
5390 $test -d /usr/share/scripts && dflt=/usr/share/scripts
5391 $test -d /usr/share/bin && dflt=/usr/share/bin
5392 $test -d /usr/local/script && dflt=/usr/local/script
5393 $test -d $prefixexp/script && dflt=$prefixexp/script
5394 set dflt
5395 eval $prefixup
5396 ;;
5397*) dflt="$scriptdir"
5398 ;;
5399esac
5400$cat <<EOM
5401
5402Some installations have a separate directory just for executable scripts so
5403that they can mount it across multiple architectures but keep the scripts in
5404one spot. You might, for example, have a subdirectory of /usr/share for this.
5405Or you might just lump your scripts in with all your other executables.
5406
5407EOM
5408fn=d~
5409rp='Where do you keep publicly executable scripts?'
5410. ./getfile
5411if $test "X$ansexp" != "X$scriptdirexp"; then
5412 installscript=''
5413fi
5414scriptdir="$ans"
5415scriptdirexp="$ansexp"
5416if $afs; then
5417 $cat <<EOM
5418
5419Since you are running AFS, I need to distinguish the directory in which
5420scripts reside from the directory in which they are installed (and from
5421which they are presumably copied to the former directory by occult means).
5422
5423EOM
5424 case "$installscript" in
5425 '') dflt=`echo $scriptdirexp | sed 's#^/afs/#/afs/.#'`;;
5426 *) dflt="$installscript";;
5427 esac
5428 fn=de~
5429 rp='Where will public scripts be installed?'
5430 . ./getfile
5431 installscript="$ans"
5432else
5433 installscript="$scriptdirexp"
2304df62 5434fi
2afac517 5435
2afac517 5436cat <<EOM
5437
5438Previous version of $package used the standard IO mechanisms as defined in
5439<stdio.h>. Versions 5.003_02 and later of perl allow alternate IO
5440mechanisms via a "PerlIO" abstraction, but the stdio mechanism is still
5441the default and is the only supported mechanism. This abstraction
5442layer can use AT&T's sfio (if you already have sfio installed) or
5443fall back on standard IO. This PerlIO abstraction layer is
5444experimental and may cause problems with some extension modules.
5445
5446If this doesn't make any sense to you, just accept the default 'n'.
5447EOM
5448case "$useperlio" in
5449$define|true|[yY]*) dflt='y';;
5450*) dflt='n';;
5451esac
5452rp='Use the experimental PerlIO abstraction layer?'
5453. ./myread
5454case "$ans" in
5455y|Y)
5456 val="$define"
5457 ;;
5458*)
5459 echo "Ok, doing things the stdio way"
5460 val="$undef"
5461 ;;
5462esac
5463set useperlio
5464eval $setvar
2304df62 5465
8e07c86e
AD
5466: Check how to convert floats to strings.
5467echo " "
5468echo "Checking for an efficient way to convert floats to strings."
5469$cat >try.c <<'EOP'
5470#ifdef TRY_gconvert
5471#define Gconvert(x,n,t,b) gconvert((x),(n),(t),(b))
8ff267be 5472char *myname = "gconvert";
8e07c86e
AD
5473#endif
5474#ifdef TRY_gcvt
5475#define Gconvert(x,n,t,b) gcvt((x),(n),(b))
8ff267be 5476char *myname = "gcvt";
8e07c86e
AD
5477#endif
5478#ifdef TRY_sprintf
5479#define Gconvert(x,n,t,b) sprintf((b),"%.*g",(n),(x))
8ff267be 5480char *myname = "sprintf";
8e07c86e 5481#endif
8ff267be 5482
5483#include <stdio.h>
5484
5485int
5486checkit(expect, got)
5487char *expect;
5488char *got;
5489{
5490 if (strcmp(expect, got)) {
5491 printf("%s oddity: Expected %s, got %s\n",
5492 myname, expect, got);
5493 exit(1);
5494 }
5495}
5496
5497int
5498main()
5499{
ecfc5424 5500 char buf[64];
8ff267be 5501 buf[63] = '\0';
5502
5503 /* This must be 1st test on (which?) platform */
5504 /* Alan Burlison <AlanBurlsin@unn.unisys.com> */
5505 Gconvert(0.1, 8, 0, buf);
5506 checkit("0.1", buf);
5507
8e07c86e 5508 Gconvert(1.0, 8, 0, buf);
8ff267be 5509 checkit("1", buf);
5510
8e07c86e 5511 Gconvert(0.0, 8, 0, buf);
8ff267be 5512 checkit("0", buf);
5513
8e07c86e 5514 Gconvert(-1.0, 8, 0, buf);
8ff267be 5515 checkit("-1", buf);
5516
5517 /* Some Linux gcvt's give 1.e+5 here. */
5518 Gconvert(100000.0, 8, 0, buf);
5519 checkit("100000", buf);
5520
5521 /* Some Linux gcvt's give -1.e+5 here. */
5522 Gconvert(-100000.0, 8, 0, buf);
5523 checkit("-100000", buf);
5524
ecfc5424 5525 exit(0);
a0d0e21e
LW
5526}
5527EOP
8e07c86e
AD
5528case "$d_Gconvert" in
5529gconvert*) xxx_list='gconvert gcvt sprintf' ;;
5530gcvt*) xxx_list='gcvt gconvert sprintf' ;;
5531sprintf*) xxx_list='sprintf gconvert gcvt' ;;
5532*) xxx_list='gconvert gcvt sprintf' ;;
5533esac
5534
5535for xxx_convert in $xxx_list; do
5536 echo "Trying $xxx_convert"
5537 $rm -f try try.o
5538 if $cc $ccflags -DTRY_$xxx_convert $ldflags -o try \
5539 try.c $libs > /dev/null 2>&1 ; then
5540 echo "$xxx_convert" found. >&4
5541 if ./try; then
8e07c86e
AD
5542 echo "I'll use $xxx_convert to convert floats into a string." >&4
5543 break;
2304df62 5544 else
8ff267be 5545 echo "...But $xxx_convert didn't work as I expected."
2304df62 5546 fi
8e07c86e
AD
5547 else
5548 echo "$xxx_convert NOT found." >&4
5549 fi
5550done
5551
5552case "$xxx_convert" in
5553gconvert) d_Gconvert='gconvert((x),(n),(t),(b))' ;;
5554gcvt) d_Gconvert='gcvt((x),(n),(b))' ;;
5555*) d_Gconvert='sprintf((b),"%.*g",(n),(x))' ;;
2304df62
AD
5556esac
5557
a0d0e21e
LW
5558: Initialize h_fcntl
5559h_fcntl=false
5560
5561: Initialize h_sysfile
5562h_sysfile=false
2304df62 5563
2304df62
AD
5564: access call always available on UNIX
5565set access d_access
5566eval $inlibc
5567
5568: locate the flags for 'access()'
5569case "$d_access" in
5570"$define")
5571 echo " "
5572 $cat >access.c <<'EOCP'
5573#include <sys/types.h>
5574#ifdef I_FCNTL
5575#include <fcntl.h>
5576#endif
5577#ifdef I_SYS_FILE
5578#include <sys/file.h>
5579#endif
5580#ifdef I_UNISTD
5581#include <unistd.h>
5582#endif
5583main() {
5584 exit(R_OK);
5585}
8e07c86e
AD
5586EOCP
5587 : check sys/file.h first, no particular reason here
5588 if $test `./findhdr sys/file.h` && \
5589 $cc $cppflags -DI_SYS_FILE access.c -o access >/dev/null 2>&1 ; then
5590 h_sysfile=true;
5591 echo "<sys/file.h> defines the *_OK access constants." >&4
5592 elif $test `./findhdr fcntl.h` && \
5593 $cc $cppflags -DI_FCNTL access.c -o access >/dev/null 2>&1 ; then
5594 h_fcntl=true;
5595 echo "<fcntl.h> defines the *_OK access constants." >&4
5596 elif $test `./findhdr unistd.h` && \
5597 $cc $cppflags -DI_UNISTD access.c -o access >/dev/null 2>&1 ; then
5598 echo "<unistd.h> defines the *_OK access constants." >&4
5599 else
5600 echo "I can't find the four *_OK access constants--I'll use mine." >&4
5601 fi
5602 ;;
5603esac
5604$rm -f access*
a0d0e21e 5605
8e07c86e
AD
5606: see if alarm exists
5607set alarm d_alarm
5608eval $inlibc
2304df62 5609
ecfc5424 5610: Look for GNU-cc style attribute checking
2304df62 5611echo " "
a0d0e21e
LW
5612echo "Checking whether your compiler can handle __attribute__ ..." >&4
5613$cat >attrib.c <<'EOCP'
1aef975c 5614#include <stdio.h>
ecfc5424 5615void croak (char* pat,...) __attribute__((format(printf,1,2),noreturn));
a0d0e21e
LW
5616EOCP
5617if $cc $ccflags -c attrib.c >attrib.out 2>&1 ; then
5618 if $contains 'warning' attrib.out >/dev/null 2>&1; then
ecfc5424 5619 echo "Your C compiler doesn't fully support __attribute__."
a0d0e21e
LW
5620 val="$undef"
5621 else
ecfc5424 5622 echo "Your C compiler supports __attribute__."
a0d0e21e
LW
5623 val="$define"
5624 fi
5625else
ecfc5424 5626 echo "Your C compiler doesn't seem to understand __attribute__ at all."
a0d0e21e
LW
5627 val="$undef"
5628fi
ecfc5424 5629set d_attribut
a0d0e21e
LW
5630eval $setvar
5631$rm -f attrib*
5632
5633: see if bcmp exists
5634set bcmp d_bcmp
5635eval $inlibc
5636
5637: see if bcopy exists
5638set bcopy d_bcopy
5639eval $inlibc
5640
2afac517 5641: see if this is a unistd.h system
5642set unistd.h i_unistd
5643eval $inhdr
5644
5645: see if getpgrp exists
5646set getpgrp d_getpgrp
5647eval $inlibc
5648
5649echo "Checking to see which flavor of getpgrp is in use . . . "
5650case "$d_getpgrp" in
5651"$define")
5652 echo " "
5653 $cat >set.c <<EOP
5654#$i_unistd I_UNISTD
5655#include <sys/types.h>
5656#ifdef I_UNISTD
5657# include <unistd.h>
5658#endif
5659main()
5660{
5661 if (getuid() == 0) {
5662 printf("(I see you are running Configure as super-user...)\n");
5663 setuid(1);
5664 }
5665#ifdef TRY_BSD_PGRP
5666 if (getpgrp(1) == 0)
5667 exit(0);
5668#else
5669 if (getpgrp() > 0)
5670 exit(0);
5671#endif
5672 exit(1);
5673}
5674EOP
5675 if $cc -DTRY_BSD_PGRP $ccflags $ldflags -o set set.c $libs >/dev/null 2>&1 && ./set; then
5676 echo "You have to use getpgrp(pid) instead of getpgrp()." >&4
5677 val="$define"
5678 elif $cc $ccflags $ldflags -o set set.c $libs >/dev/null 2>&1 && ./set; then
5679 echo "You have to use getpgrp() instead of getpgrp(pid)." >&4
5680 val="$undef"
5681 else
5682 echo "I can't seem to compile and run the test program."
5683 if ./usg; then
5684 xxx="a USG one, i.e. you use getpgrp()."
5685 else
5686 # SVR4 systems can appear rather BSD-ish.
5687 case "$i_unistd" in
5688 $undef)
5689 xxx="a BSD one, i.e. you use getpgrp(pid)."
5690 val="$define"
5691 ;;
5692 $define)
5693 xxx="probably a USG one, i.e. you use getpgrp()."
5694 val="$undef"
5695 ;;
5696 esac
5697 fi
5698 echo "Assuming your getpgrp is $xxx" >&4
5699 fi
5700 ;;
5701*) val="$undef";;
5702esac
5703set d_bsdgetpgrp
5704eval $setvar
5705$rm -f set set.c
5706
a0d0e21e
LW
5707: see if setpgrp exists
5708set setpgrp d_setpgrp
5709eval $inlibc
5710
2afac517 5711echo "Checking to see which flavor of setpgrp is in use . . . "
a0d0e21e
LW
5712case "$d_setpgrp" in
5713"$define")
5714 echo " "
5715 $cat >set.c <<EOP
2afac517 5716#$i_unistd I_UNISTD
5717#include <sys/types.h>
5718#ifdef I_UNISTD
5719# include <unistd.h>
5720#endif
a0d0e21e
LW
5721main()
5722{
5723 if (getuid() == 0) {
5724 printf("(I see you are running Configure as super-user...)\n");
5725 setuid(1);
5726 }
2afac517 5727#ifdef TRY_BSD_PGRP
a0d0e21e 5728 if (-1 == setpgrp(1, 1))
2afac517 5729 exit(0);
5730#else
5731 if (setpgrp() != -1)
5732 exit(0);
5733#endif
5734 exit(1);
a0d0e21e
LW
5735}
5736EOP
2afac517 5737 if $cc -DTRY_BSD_PGRP $ccflags $ldflags -o set set.c $libs >/dev/null 2>&1 && ./set; then
5738 echo 'You have to use setpgrp(pid,pgrp) instead of setpgrp().' >&4
5739 val="$define"
5740 elif $cc $ccflags $ldflags -o set set.c $libs >/dev/null 2>&1 && ./set; then
5741 echo 'You have to use setpgrp() instead of setpgrp(pid,pgrp).' >&4
5742 val="$undef"
a0d0e21e 5743 else
2afac517 5744 echo "I can't seem to compile and run the test program."
ecfc5424 5745 if ./usg; then
2afac517 5746 xxx="a USG one, i.e. you use setpgrp()."
a0d0e21e 5747 else
2afac517 5748 # SVR4 systems can appear rather BSD-ish.
5749 case "$i_unistd" in
5750 $undef)
5751 xxx="a BSD one, i.e. you use setpgrp(pid,pgrp)."
5752 val="$define"
5753 ;;
5754 $define)
5755 xxx="probably a USG one, i.e. you use setpgrp()."
5756 val="$undef"
5757 ;;
5758 esac
a0d0e21e 5759 fi
2afac517 5760 echo "Assuming your setpgrp is $xxx" >&4
a0d0e21e
LW
5761 fi
5762 ;;
5763*) val="$undef";;
5764esac
2afac517 5765set d_bsdsetpgrp
a0d0e21e 5766eval $setvar
2afac517 5767d_bsdpgrp=$d_bsdsetpgrp
a0d0e21e 5768$rm -f set set.c
a0d0e21e
LW
5769: see if bzero exists
5770set bzero d_bzero
5771eval $inlibc
5772
24fef2a7 5773: check for lengths of integral types
a0d0e21e
LW
5774echo " "
5775case "$intsize" in
5776'')
5777 echo "Checking to see how big your integers are..." >&4
24fef2a7 5778 $cat >intsize.c <<'EOCP'
a0d0e21e
LW
5779#include <stdio.h>
5780main()
5781{
24fef2a7
AD
5782 printf("intsize=%d;\n", sizeof(int));
5783 printf("longsize=%d;\n", sizeof(long));
5784 printf("shortsize=%d;\n", sizeof(short));
5785 fflush(stdout);
8e07c86e 5786 exit(0);
a0d0e21e
LW
5787}
5788EOCP
24fef2a7
AD
5789# If $libs contains -lsfio, and sfio is mis-configured, then it
5790# sometimes (apparently) runs and exits with a 0 status, but with no
5791# output!. Thus we check with test -s whether we actually got any
5792# output. I think it has to do with sfio's use of _exit vs. exit,
5793# but I don't know for sure. --Andy Dougherty 1/27/97.
5794 if $cc $optimize $ccflags $ldflags -o intsize intsize.c $libs >/dev/null 2>&1 &&
5795 ./intsize > intsize.out 2>/dev/null && test -s intsize.out ; then
5796 eval `$cat intsize.out`
8e07c86e 5797 echo "Your integers are $intsize bytes long."
24fef2a7
AD
5798 echo "Your long integers are $longsize bytes long."
5799 echo "Your short integers are $shortsize bytes long."
a0d0e21e 5800 else
24fef2a7
AD
5801 $cat >&4 <<EOM
5802
5803Help! I can't compile and run the intsize test program: please enlighten me!
5804(This is probably a misconfiguration in your system or libraries, and
5805you really ought to fix it. Still, I'll try anyway.)
5806
5807EOM
5808 dflt=4
8e07c86e
AD
5809 rp="What is the size of an integer (in bytes)?"
5810 . ./myread
5811 intsize="$ans"
24fef2a7
AD
5812 dflt=$intsize
5813 rp="What is the size of a long integer (in bytes)?"
5814 . ./myread
5815 longsize="$ans"
5816 dflt=2
5817 rp="What is the size of a short integer (in bytes)?"
5818 . ./myread
5819 shortsize="$ans"
a0d0e21e
LW
5820 fi
5821 ;;
a0d0e21e 5822esac
24fef2a7 5823$rm -f intsize intsize.[co] intsize.out
a0d0e21e 5824
ecfc5424 5825: see if signal is declared as pointer to function returning int or void
a0d0e21e 5826echo " "
ecfc5424
AD
5827xxx=`./findhdr signal.h`
5828$test "$xxx" && $cppstdin $cppminus $cppflags < $xxx >$$.tmp 2>/dev/null
5829if $contains 'int.*\*[ ]*signal' $$.tmp >/dev/null 2>&1 ; then
5830 echo "You have int (*signal())() instead of void." >&4
5831 val="$undef"
5832elif $contains 'void.*\*[ ]*signal' $$.tmp >/dev/null 2>&1 ; then
5833 echo "You have void (*signal())() instead of int." >&4
5834 val="$define"
5835elif $contains 'extern[ ]*[(\*]*signal' $$.tmp >/dev/null 2>&1 ; then
5836 echo "You have int (*signal())() instead of void." >&4
5837 val="$undef"
a0d0e21e 5838else
ecfc5424
AD
5839 case "$d_voidsig" in
5840 '')
5841 echo "I can't determine whether signal handler returns void or int..." >&4
5842 dflt=void
5843 rp="What type does your signal handler return?"
5844 . ./myread
5845 case "$ans" in
5846 v*) val="$define";;
5847 *) val="$undef";;
5848 esac;;
5849 "$define")
5850 echo "As you already told me, signal handler returns void." >&4;;
5851 *)
5852 echo "As you already told me, signal handler returns int." >&4;;
5853 esac
5854fi
5855set d_voidsig
5856eval $setvar
5857case "$d_voidsig" in
5858"$define") signal_t="void";;
5859*) signal_t="int";;
5860esac
5861$rm -f $$.tmp
5862
5863: check for ability to cast large floats to 32-bit ints.
5864echo " "
5865echo 'Checking whether your C compiler can cast large floats to int32.' >&4
5866if $test "$intsize" -eq 4; then
5867 xxx=int
5868else
5869 xxx=long
5870fi
5871$cat >try.c <<EOCP
5872#include <sys/types.h>
5873#include <signal.h>
5874$signal_t blech() { exit(3); }
5875main()
2304df62 5876{
a0d0e21e 5877 $xxx i32;
2304df62
AD
5878 double f;
5879 int result = 0;
5880 signal(SIGFPE, blech);
5881
5882 f = (double) 0x7fffffff;
5883 f = 10 * f;
a0d0e21e 5884 i32 = ($xxx) f;
2304df62 5885
a0d0e21e 5886 if (i32 != ($xxx) f)
2304df62
AD
5887 result |= 1;
5888 exit(result);
5889}
5890EOCP
5891if $cc -o try $ccflags try.c >/dev/null 2>&1; then
5892 ./try
5893 yyy=$?
5894else
a0d0e21e 5895 echo "(I can't seem to compile the test program--assuming it can't)"
2304df62
AD
5896 yyy=1
5897fi
5898case "$yyy" in
58990) val="$define"
5900 echo "Yup, it can."
5901 ;;
5902*) val="$undef"
5903 echo "Nope, it can't."
5904 ;;
5905esac
5906set d_casti32
5907eval $setvar
85e6fe83 5908$rm -f try try.*
a0d0e21e 5909
2304df62
AD
5910: check for ability to cast negative floats to unsigned
5911echo " "
5912echo 'Checking whether your C compiler can cast negative float to unsigned.' >&4
ecfc5424
AD
5913$cat >try.c <<EOCP
5914#include <sys/types.h>
2304df62 5915#include <signal.h>
232e078e
AD
5916$signal_t blech() { exit(7); }
5917$signal_t blech_in_list() { exit(4); }
5918unsigned long dummy_long(p) unsigned long p; { return p; }
5919unsigned int dummy_int(p) unsigned int p; { return p; }
5920unsigned short dummy_short(p) unsigned short p; { return p; }
2304df62
AD
5921main()
5922{
232e078e 5923 double f = -123.;
2304df62
AD
5924 unsigned long along;
5925 unsigned int aint;
5926 unsigned short ashort;
5927 int result = 0;
5928
5929 signal(SIGFPE, blech);
5930 along = (unsigned long)f;
5931 aint = (unsigned int)f;
5932 ashort = (unsigned short)f;
5933 if (along != (unsigned long)-123)
5934 result |= 1;
5935 if (aint != (unsigned int)-123)
5936 result |= 1;
5937 if (ashort != (unsigned short)-123)
5938 result |= 1;
5939 f = (double)0x40000000;
5940 f = f + f;
5941 along = 0;
5942 along = (unsigned long)f;
5943 if (along != 0x80000000)
5944 result |= 2;
5945 f -= 1.;
5946 along = 0;
5947 along = (unsigned long)f;
5948 if (along != 0x7fffffff)
5949 result |= 1;
5950 f += 2.;
5951 along = 0;
5952 along = (unsigned long)f;
5953 if (along != 0x80000001)
5954 result |= 2;
232e078e
AD
5955 if (result)
5956 exit(result);
5957 signal(SIGFPE, blech_in_list);
5958 f = 123.;
5959 along = dummy_long((unsigned long)f);
5960 aint = dummy_int((unsigned int)f);
5961 ashort = dummy_short((unsigned short)f);
5962 if (along != (unsigned long)123)
5963 result |= 4;
5964 if (aint != (unsigned int)123)
5965 result |= 4;
5966 if (ashort != (unsigned short)123)
5967 result |= 4;
2304df62
AD
5968 exit(result);
5969
5970}
5971EOCP
5972if $cc -o try $ccflags try.c >/dev/null 2>&1; then
5973 ./try
5974 castflags=$?
5975else
ecfc5424 5976 echo "(I can't seem to compile the test program--assuming it can't)"
232e078e 5977 castflags=7
2304df62
AD
5978fi
5979case "$castflags" in
59800) val="$define"
5981 echo "Yup, it can."
5982 ;;
5983*) val="$undef"
5984 echo "Nope, it can't."
5985 ;;
5986esac
5987set d_castneg
5988eval $setvar
5989$rm -f try.*
5990
2304df62
AD
5991: see if vprintf exists
5992echo " "
5993if set vprintf val -f d_vprintf; eval $csym; $val; then
5994 echo 'vprintf() found.' >&4
5995 val="$define"
5996 $cat >vprintf.c <<'EOF'
5997#include <varargs.h>
5998
5999main() { xxx("foo"); }
6000
6001xxx(va_alist)
6002va_dcl
6003{
6004 va_list args;
6005 char buf[10];
6006
6007 va_start(args);
6008 exit((unsigned long)vsprintf(buf,"%s",args) > 10L);
6009}
6010EOF
6011 if $cc $ccflags vprintf.c -o vprintf >/dev/null 2>&1 && ./vprintf; then
6012 echo "Your vsprintf() returns (int)." >&4
6013 val2="$undef"
6014 else
6015 echo "Your vsprintf() returns (char*)." >&4
6016 val2="$define"
6017 fi
6018else
6019 echo 'vprintf() NOT found.' >&4
6020 val="$undef"
6021 val2="$undef"
6022fi
6023set d_vprintf
6024eval $setvar
6025val=$val2
6026set d_charvspr
6027eval $setvar
6028
a0d0e21e
LW
6029: see if chown exists
6030set chown d_chown
6031eval $inlibc
6032
6033: see if chroot exists
6034set chroot d_chroot
6035eval $inlibc
6036
2304df62
AD
6037: see if chsize exists
6038set chsize d_chsize
6039eval $inlibc
6040
6041: check for const keyword
6042echo " "
6043echo 'Checking to see if your C compiler knows about "const"...' >&4
6044$cat >const.c <<'EOCP'
6045typedef struct spug { int drokk; } spug;
6046main()
6047{
6048 const char *foo;
6049 const spug y;
6050}
6051EOCP
6052if $cc -c $ccflags const.c >/dev/null 2>&1 ; then
6053 val="$define"
6054 echo "Yup, it does."
6055else
6056 val="$undef"
6057 echo "Nope, it doesn't."
6058fi
6059set d_const
6060eval $setvar
6061
6062: see if crypt exists
6063echo " "
6064if set crypt val -f d_crypt; eval $csym; $val; then
6065 echo 'crypt() found.' >&4
6066 val="$define"
6067 cryptlib=''
6068else
5f05dabc 6069 cryptlib=`./loc Slibcrypt$lib_ext "" $xlibpth`
2304df62 6070 if $test -z "$cryptlib"; then
5f05dabc 6071 cryptlib=`./loc Mlibcrypt$lib_ext "" $xlibpth`
2304df62
AD
6072 else
6073 cryptlib=-lcrypt
6074 fi
6075 if $test -z "$cryptlib"; then
5f05dabc 6076 cryptlib=`./loc Llibcrypt$lib_ext "" $xlibpth`
2304df62
AD
6077 else
6078 cryptlib=-lcrypt
6079 fi
6080 if $test -z "$cryptlib"; then
5f05dabc 6081 cryptlib=`./loc libcrypt$lib_ext "" $libpth`
2304df62
AD
6082 else
6083 cryptlib=-lcrypt
6084 fi
6085 if $test -z "$cryptlib"; then
6086 echo 'crypt() NOT found.' >&4
6087 val="$undef"
6088 else
6089 val="$define"
6090 fi
6091fi
6092set d_crypt
6093eval $setvar
6094
6095: get csh whereabouts
6096case "$csh" in
ba7b5225 6097'csh') val="$undef" ;;
ba7b5225 6098*) val="$define" ;;
2304df62
AD
6099esac
6100set d_csh
6101eval $setvar
46fc3d4c 6102: Respect a hint or command line value for full_csh.
6103case "$full_csh" in
6104'') full_csh=$csh ;;
6105esac
2304df62 6106
a0d0e21e
LW
6107: see if cuserid exists
6108set cuserid d_cuserid
2304df62
AD
6109eval $inlibc
6110
a0d0e21e
LW
6111: see if this is a limits.h system
6112set limits.h i_limits
85e6fe83
LW
6113eval $inhdr
6114
a0d0e21e
LW
6115: see if this is a float.h system
6116set float.h i_float
6117eval $inhdr
6118
6119: See if number of significant digits in a double precision number is known
6120echo " "
6121$cat >dbl_dig.c <<EOM
6122#$i_limits I_LIMITS
6123#$i_float I_FLOAT
6124#ifdef I_LIMITS
6125#include <limits.h>
85e6fe83 6126#endif
a0d0e21e
LW
6127#ifdef I_FLOAT
6128#include <float.h>
6129#endif
6130#ifdef DBL_DIG
6131printf("Contains DBL_DIG");
85e6fe83 6132#endif
85e6fe83 6133EOM
a0d0e21e
LW
6134$cppstdin $cppflags $cppminus < dbl_dig.c >dbl_dig.E 2>/dev/null
6135if $contains 'DBL_DIG' dbl_dig.E >/dev/null 2>&1; then
6136 echo "DBL_DIG found." >&4
6137 val="$define"
2304df62 6138else
a0d0e21e
LW
6139 echo "DBL_DIG NOT found." >&4
6140 val="$undef"
2304df62 6141fi
a0d0e21e
LW
6142$rm -f dbl_dig.?
6143set d_dbl_dig
2304df62 6144eval $setvar
2304df62 6145
a0d0e21e
LW
6146: see if difftime exists
6147set difftime d_difftime
2304df62
AD
6148eval $inlibc
6149
a0d0e21e
LW
6150: see if this is a dirent system
6151echo " "
6152if xinc=`./findhdr dirent.h`; $test "$xinc"; then
6153 val="$define"
6154 echo "<dirent.h> found." >&4
6155else
6156 val="$undef"
6157 if xinc=`./findhdr sys/dir.h`; $test "$xinc"; then
6158 echo "<sys/dir.h> found." >&4
6159 echo " "
6160 else
6161 xinc=`./findhdr sys/ndir.h`
6162 fi
6163 echo "<dirent.h> NOT found." >&4
6164fi
6165set i_dirent
6166eval $setvar
6167
6168: Look for type of directory structure.
6169echo " "
6170$cppstdin $cppflags $cppminus < "$xinc" > try.c
6171
6172case "$direntrytype" in
6173''|' ')
6174 case "$i_dirent" in
6175 $define) guess1='struct dirent' ;;
6176 *) guess1='struct direct' ;;
2afac517 6177 esac
6178 ;;
6179*) guess1="$direntrytype"
6180 ;;
8e07c86e
AD
6181esac
6182
2afac517 6183case "$guess1" in
6184'struct dirent') guess2='struct direct' ;;
6185*) guess2='struct dirent' ;;
6186esac
6187
6188if $contains "$guess1" try.c >/dev/null 2>&1; then
6189 direntrytype="$guess1"
6190 echo "Your directory entries are $direntrytype." >&4
6191elif $contains "$guess2" try.c >/dev/null 2>&1; then
6192 direntrytype="$guess2"
6193 echo "Your directory entries seem to be $direntrytype." >&4
6194else
6195 echo "I don't recognize your system's directory entries." >&4
6196 rp="What type is used for directory entries on this system?"
6197 dflt="$guess1"
6198 . ./myread
6199 direntrytype="$ans"
6200fi
6201$rm -f try.c
a0d0e21e 6202
a0d0e21e 6203
2afac517 6204: see if the directory entry stores field length
6205echo " "
6206$cppstdin $cppflags $cppminus < "$xinc" > try.c
6207if $contains 'd_namlen' try.c >/dev/null 2>&1; then
6208 echo "Good, your directory entry keeps length information in d_namlen." >&4
6209 val="$define"
6210else
6211 echo "Your directory entry does not know about the d_namlen field." >&4
6212 val="$undef"
6213fi
6214set d_dirnamlen
6215eval $setvar
6216$rm -f try.c
a0d0e21e 6217
2afac517 6218: see if dlerror exists
6219xxx_runnm="$runnm"
6220runnm=false
6221set dlerror d_dlerror
6222eval $inlibc
6223runnm="$xxx_runnm"
a0d0e21e
LW
6224
6225: see if dlfcn is available
6226set dlfcn.h i_dlfcn
6227eval $inhdr
6228
6229case "$usedl" in
6230$define|y|true)
6231 $cat << EOM
6232
6233On a few systems, the dynamically loaded modules that perl generates and uses
6234will need a different extension then shared libs. The default will probably
6235be appropriate.
6236
6237EOM
6238 case "$dlext" in
6239 '') dflt="$so" ;;
6240 *) dflt="$dlext" ;;
6241 esac
6242 rp='What is the extension of dynamically loaded modules'
6243 . ./myread
6244 dlext="$ans"
6245 ;;
6246*)
6247 dlext="none"
6248 ;;
6249esac
6250
6251: Check if dlsym need a leading underscore
6252echo " "
6253val="$undef"
6254
6255case "$dlsrc" in
6256dl_dlopen.xs)
6257 echo "Checking whether your dlsym() needs a leading underscore ..." >&4
6258 $cat >dyna.c <<'EOM'
6259fred () { }
6260EOM
6261
6262$cat >fred.c<<EOM
6263
6264#include <stdio.h>
6265#$i_dlfcn I_DLFCN
6266#ifdef I_DLFCN
6267#include <dlfcn.h> /* the dynamic linker include file for Sunos/Solaris */
6268#else
6269#include <sys/types.h>
6270#include <nlist.h>
6271#include <link.h>
6272#endif
6273
6274extern int fred() ;
6275
6276main()
6277{
6278 void * handle ;
6279 void * symbol ;
6280#ifndef RTLD_LAZY
6281 int mode = 1 ;
6282#else
6283 int mode = RTLD_LAZY ;
6284#endif
6285 handle = dlopen("./dyna.$dlext", mode) ;
6286 if (handle == NULL) {
5f05dabc 6287 printf ("1\n") ;
6288 fflush (stdout) ;
6289 exit(0);
a0d0e21e
LW
6290 }
6291 symbol = dlsym(handle, "fred") ;
6292 if (symbol == NULL) {
5f05dabc 6293 /* try putting a leading underscore */
6294 symbol = dlsym(handle, "_fred") ;
6295 if (symbol == NULL) {
6296 printf ("2\n") ;
6297 fflush (stdout) ;
6298 exit(0);
6299 }
6300 printf ("3\n") ;
a0d0e21e
LW
6301 }
6302 else
5f05dabc 6303 printf ("4\n") ;
36477c24 6304 fflush (stdout) ;
6305 exit(0);
a0d0e21e
LW
6306}
6307EOM
760ac839 6308 : Call the object file tmp-dyna.o in case dlext=o.
a0d0e21e 6309 if $cc $ccflags $cccdlflags -c dyna.c > /dev/null 2>&1 &&
8ff267be 6310 mv dyna${obj_ext} tmp-dyna${obj_ext} > /dev/null 2>&1 &&
6311 $ld $lddlflags -o dyna.$dlext tmp-dyna${obj_ext} > /dev/null 2>&1 &&
a0d0e21e
LW
6312 $cc $ccflags $ldflags $cccdlflags $ccdlflags fred.c -o fred $libs > /dev/null 2>&1; then
6313 xxx=`./fred`
6314 case $xxx in
6315 1) echo "Test program failed using dlopen." >&4
6316 echo "Perhaps you should not use dynamic loading." >&4;;
6317 2) echo "Test program failed using dlsym." >&4
6318 echo "Perhaps you should not use dynamic loading." >&4;;
6319 3) echo "dlsym needs a leading underscore" >&4
6320 val="$define" ;;
6321 4) echo "dlsym doesn't need a leading underscore." >&4;;
6322 esac
6323 else
6324 echo "I can't compile and run the test program." >&4
6325 fi
6326 ;;
6327esac
6328
a78b0d02 6329$rm -f fred fred.? dyna.$dlext dyna.? tmp-dyna.?
a0d0e21e
LW
6330
6331set d_dlsymun
6332eval $setvar
6333
a0d0e21e
LW
6334: see if dup2 exists
6335set dup2 d_dup2
6336eval $inlibc
6337
8e07c86e
AD
6338: Locate the flags for 'open()'
6339echo " "
6340$cat >open3.c <<'EOCP'
6341#include <sys/types.h>
6342#ifdef I_FCNTL
6343#include <fcntl.h>
6344#endif
6345#ifdef I_SYS_FILE
6346#include <sys/file.h>
6347#endif
6348main() {
6349 if(O_RDONLY);
6350#ifdef O_TRUNC
6351 exit(0);
6352#else
6353 exit(1);
6354#endif
6355}
6356EOCP
6357: check sys/file.h first to get FREAD on Sun
6358if $test `./findhdr sys/file.h` && \
6359 $cc $cppflags "-DI_SYS_FILE" open3.c -o open3 >/dev/null 2>&1 ; then
6360 h_sysfile=true;
6361 echo "<sys/file.h> defines the O_* constants..." >&4
6362 if ./open3; then
6363 echo "and you have the 3 argument form of open()." >&4
6364 val="$define"
6365 else
6366 echo "but not the 3 argument form of open(). Oh, well." >&4
6367 val="$undef"
6368 fi
6369elif $test `./findhdr fcntl.h` && \
6370 $cc "-DI_FCNTL" open3.c -o open3 >/dev/null 2>&1 ; then
6371 h_fcntl=true;
6372 echo "<fcntl.h> defines the O_* constants..." >&4
6373 if ./open3; then
6374 echo "and you have the 3 argument form of open()." >&4
6375 val="$define"
6376 else
6377 echo "but not the 3 argument form of open(). Oh, well." >&4
6378 val="$undef"
6379 fi
6380else
6381 val="$undef"
6382 echo "I can't find the O_* constant definitions! You got problems." >&4
6383fi
6384set d_open3
6385eval $setvar
6386$rm -f open3*
6387
6388: check for non-blocking I/O stuff
6389case "$h_sysfile" in
6390true) echo "#include <sys/file.h>" > head.c;;
6391*)
6392 case "$h_fcntl" in
6393 true) echo "#include <fcntl.h>" > head.c;;
6394 *) echo "#include <sys/fcntl.h>" > head.c;;
6395 esac
6396 ;;
6397esac
6398echo " "
6399echo "Figuring out the flag used by open() for non-blocking I/O..." >&4
6400case "$o_nonblock" in
6401'')
6402 $cat head.c > try.c
6403 $cat >>try.c <<'EOCP'
6404main() {
6405#ifdef O_NONBLOCK
6406 printf("O_NONBLOCK\n");
6407 exit(0);
6408#endif
6409#ifdef O_NDELAY
6410 printf("O_NDELAY\n");
6411 exit(0);
6412#endif
6413#ifdef FNDELAY
6414 printf("FNDELAY\n");
6415 exit(0);
6416#endif
6417 exit(0);
6418}
6419EOCP
6420 if $cc $ccflags $ldflags try.c -o try >/dev/null 2>&1; then
6421 o_nonblock=`./try`
6422 case "$o_nonblock" in
6423 '') echo "I can't figure it out, assuming O_NONBLOCK will do.";;
6424 *) echo "Seems like we can use $o_nonblock.";;
6425 esac
6426 else
6427 echo "(I can't compile the test program; pray O_NONBLOCK is right!)"
6428 fi
6429 ;;
6430*) echo "Using $hint value $o_nonblock.";;
6431esac
6432$rm -f try try.* .out core
6433
6434echo " "
6435echo "Let's see what value errno gets from read() on a $o_nonblock file..." >&4
6436case "$eagain" in
6437'')
6438 $cat head.c > try.c
6439 $cat >>try.c <<EOCP
6440#include <errno.h>
6441#include <sys/types.h>
6442#include <signal.h>
4633a7c4 6443#define MY_O_NONBLOCK $o_nonblock
8e07c86e
AD
6444extern int errno;
6445$signal_t blech(x) int x; { exit(3); }
4633a7c4
LW
6446EOCP
6447 $cat >> try.c <<'EOCP'
8e07c86e
AD
6448main()
6449{
6450 int pd[2];
6451 int pu[2];
6452 char buf[1];
6453 char string[100];
6454
6455 pipe(pd); /* Down: child -> parent */
6456 pipe(pu); /* Up: parent -> child */
6457 if (0 != fork()) {
6458 int ret;
6459 close(pd[1]); /* Parent reads from pd[0] */
6460 close(pu[0]); /* Parent writes (blocking) to pu[1] */
4633a7c4 6461 if (-1 == fcntl(pd[0], F_SETFL, MY_O_NONBLOCK))
8e07c86e
AD
6462 exit(1);
6463 signal(SIGALRM, blech);
6464 alarm(5);
6465 if ((ret = read(pd[0], buf, 1)) > 0) /* Nothing to read! */
6466 exit(2);
6467 sprintf(string, "%d\n", ret);
6468 write(2, string, strlen(string));
6469 alarm(0);
6470#ifdef EAGAIN
6471 if (errno == EAGAIN) {
6472 printf("EAGAIN\n");
6473 goto ok;
6474 }
6475#endif
6476#ifdef EWOULDBLOCK
6477 if (errno == EWOULDBLOCK)
6478 printf("EWOULDBLOCK\n");
6479#endif
6480 ok:
6481 write(pu[1], buf, 1); /* Unblocks child, tell it to close our pipe */
6482 sleep(2); /* Give it time to close our pipe */
6483 alarm(5);
6484 ret = read(pd[0], buf, 1); /* Should read EOF */
6485 alarm(0);
6486 sprintf(string, "%d\n", ret);
6487 write(3, string, strlen(string));
6488 exit(0);
6489 }
6490
6491 close(pd[0]); /* We write to pd[1] */
6492 close(pu[1]); /* We read from pu[0] */
6493 read(pu[0], buf, 1); /* Wait for parent to signal us we may continue */
6494 close(pd[1]); /* Pipe pd is now fully closed! */
6495 exit(0); /* Bye bye, thank you for playing! */
6496}
6497EOCP
25f94b33 6498 if $cc $ccflags $ldflags try.c -o try >/dev/null 2>&1; then
774d564b 6499 echo "$startsh" >mtry
40a7a20a 6500 echo "./try >try.out 2>try.ret 3>try.err || exit 4" >>mtry
8e07c86e
AD
6501 chmod +x mtry
6502 ./mtry >/dev/null 2>&1
6503 case $? in
6504 0) eagain=`$cat try.out`;;
6505 1) echo "Could not perform non-blocking setting!";;
6506 2) echo "I did a successful read() for something that was not there!";;
6507 3) echo "Hmm... non-blocking I/O does not seem to be working!";;
6508 *) echo "Something terribly wrong happened during testing.";;
6509 esac
6510 rd_nodata=`$cat try.ret`
6511 echo "A read() system call with no data present returns $rd_nodata."
6512 case "$rd_nodata" in
6513 0|-1) ;;
6514 *)
6515 echo "(That's peculiar, fixing that to be -1.)"
6516 rd_nodata=-1
6517 ;;
6518 esac
6519 case "$eagain" in
6520 '')
6521 echo "Forcing errno EAGAIN on read() with no data available."
6522 eagain=EAGAIN
6523 ;;
6524 *)
6525 echo "Your read() sets errno to $eagain when no data is available."
6526 ;;
6527 esac
6528 status=`$cat try.err`
6529 case "$status" in
6530 0) echo "And it correctly returns 0 to signal EOF.";;
6531 -1) echo "But it also returns -1 to signal EOF, so be careful!";;
6532 *) echo "However, your read() returns '$status' on EOF??";;
6533 esac
6534 val="$define"
28757baa 6535 if test "$status" = "$rd_nodata"; then
8e07c86e
AD
6536 echo "WARNING: you can't distinguish between EOF and no data!"
6537 val="$undef"
6538 fi
6539 else
6540 echo "I can't compile the test program--assuming errno EAGAIN will do."
6541 eagain=EAGAIN
6542 fi
6543 set d_eofnblk
6544 eval $setvar
6545 ;;
6546*)
6547 echo "Using $hint value $eagain."
6548 echo "Your read() returns $rd_nodata when no data is present."
6549 case "$d_eofnblk" in
6550 "$define") echo "And you can see EOF because read() returns 0.";;
6551 "$undef") echo "But you can't see EOF status from read() returned value.";;
6552 *)
6553 echo "(Assuming you can't see EOF status from read anyway.)"
6554 d_eofnblk=$undef
6555 ;;
6556 esac
6557 ;;
6558esac
6559$rm -f try try.* .out core head.c mtry
6560
a0d0e21e
LW
6561: see if fchmod exists
6562set fchmod d_fchmod
6563eval $inlibc
6564
6565: see if fchown exists
6566set fchown d_fchown
6567eval $inlibc
6568
6569: see if this is an fcntl system
6570set fcntl d_fcntl
6571eval $inlibc
6572
6573: see if fgetpos exists
6574set fgetpos d_fgetpos
6575eval $inlibc
6576
a0d0e21e
LW
6577: see if flock exists
6578set flock d_flock
6579eval $inlibc
6580
a0d0e21e
LW
6581: see if fork exists
6582set fork d_fork
6583eval $inlibc
6584
6585: see if pathconf exists
6586set pathconf d_pathconf
6587eval $inlibc
6588
6589: see if fpathconf exists
6590set fpathconf d_fpathconf
6591eval $inlibc
6592
6593: see if fsetpos exists
6594set fsetpos d_fsetpos
6595eval $inlibc
6596
6597: see if gethostent exists
6598set gethostent d_gethent
6599eval $inlibc
6600
6601: see if getlogin exists
6602set getlogin d_getlogin
6603eval $inlibc
6604
2afac517 6605: see if getpgid exists
6606set getpgid d_getpgid
a0d0e21e
LW
6607eval $inlibc
6608
6609: see if getpgrp2 exists
6610set getpgrp2 d_getpgrp2
6611eval $inlibc
6612
6613: see if getppid exists
6614set getppid d_getppid
6615eval $inlibc
6616
6617: see if getpriority exists
6618set getpriority d_getprior
6619eval $inlibc
6620
5f05dabc 6621: see if gettimeofday or ftime exists
6622set gettimeofday d_gettimeod
6623eval $inlibc
6624case "$d_gettimeod" in
6625"$undef")
6626 set ftime d_ftime
6627 eval $inlibc
6628 ;;
6629*)
6630 val="$undef"; set d_ftime; eval $setvar
6631 ;;
6632esac
6633case "$d_gettimeod$d_ftime" in
6634"$undef$undef")
6635 echo " "
6636 echo 'No ftime() nor gettimeofday() -- timing may be less accurate.' >&4
6637 ;;
6638esac
6639
a0d0e21e
LW
6640: see if this is a netinet/in.h or sys/in.h system
6641set netinet/in.h i_niin sys/in.h i_sysin
6642eval $inhdr
6643
6644: see if htonl --and friends-- exists
6645val=''
6646set htonl val
6647eval $inlibc
6648
6649: Maybe they are macros.
6650case "$val" in
6651$undef)
6652 $cat >htonl.c <<EOM
6653#include <stdio.h>
6654#include <sys/types.h>
6655#$i_niin I_NETINET_IN
6656#$i_sysin I_SYS_IN
6657#ifdef I_NETINET_IN
6658#include <netinet/in.h>
6659#endif
6660#ifdef I_SYS_IN
6661#include <sys/in.h>
6662#endif
6663#ifdef htonl
6664printf("Defined as a macro.");
6665#endif
6666EOM
6667 $cppstdin $cppflags $cppminus < htonl.c >htonl.E 2>/dev/null
6668 if $contains 'Defined as a macro' htonl.E >/dev/null 2>&1; then
6669 val="$define"
6670 echo "But it seems to be defined as a macro." >&4
6671 fi
6672 $rm -f htonl.?
6673 ;;
6674esac
6675set d_htonl
6676eval $setvar
6677
6678: see which of string.h or strings.h is needed
6679echo " "
6680strings=`./findhdr string.h`
6681if $test "$strings" && $test -r "$strings"; then
6682 echo "Using <string.h> instead of <strings.h>." >&4
6683 val="$define"
6684else
6685 val="$undef"
6686 strings=`./findhdr strings.h`
6687 if $test "$strings" && $test -r "$strings"; then
6688 echo "Using <strings.h> instead of <string.h>." >&4
6689 else
6690 echo "No string header found -- You'll surely have problems." >&4
6691 fi
6692fi
6693set i_string
6694eval $setvar
6695case "$i_string" in
6696"$undef") strings=`./findhdr strings.h`;;
6697*) strings=`./findhdr string.h`;;
6698esac
6699
6700: index or strchr
6701echo " "
6702if set index val -f; eval $csym; $val; then
6703 if set strchr val -f d_strchr; eval $csym; $val; then
6704 if $contains strchr "$strings" >/dev/null 2>&1 ; then
6705 val="$define"
6706 vali="$undef"
6707 echo "strchr() found." >&4
6708 else
6709 val="$undef"
6710 vali="$define"
6711 echo "index() found." >&4
6712 fi
6713 else
6714 val="$undef"
6715 vali="$define"
6716 echo "index() found." >&4
6717 fi
6718else
6719 if set strchr val -f d_strchr; eval $csym; $val; then
6720 val="$define"
6721 vali="$undef"
6722 echo "strchr() found." >&4
6723 else
6724 echo "No index() or strchr() found!" >&4
6725 val="$undef"
6726 vali="$undef"
6727 fi
6728fi
6729set d_strchr; eval $setvar
6730val="$vali"
6731set d_index; eval $setvar
6732
7e1af8bc 6733: check whether inet_aton exists
6734set inet_aton d_inetaton
6735eval $inlibc
6736
a0d0e21e
LW
6737: Look for isascii
6738echo " "
6739$cat >isascii.c <<'EOCP'
6740#include <stdio.h>
6741#include <ctype.h>
6742main() {
6743 int c = 'A';
6744 if (isascii(c))
6745 exit(0);
6746 else
6747 exit(1);
6748}
6749EOCP
6750if $cc $ccflags $ldflags -o isascii isascii.c $libs >/dev/null 2>&1 ; then
6751 echo "isascii() found." >&4
6752 val="$define"
6753else
6754 echo "isascii() NOT found." >&4
6755 val="$undef"
6756fi
6757set d_isascii
6758eval $setvar
6759$rm -f isascii*
6760
6761: see if killpg exists
6762set killpg d_killpg
6763eval $inlibc
6764
6765: see if link exists
6766set link d_link
6767eval $inlibc
6768
a0d0e21e
LW
6769: see if localeconv exists
6770set localeconv d_locconv
6771eval $inlibc
6772
6773: see if lockf exists
6774set lockf d_lockf
6775eval $inlibc
6776
6777: see if lstat exists
6778set lstat d_lstat
6779eval $inlibc
6780
6781: see if mblen exists
6782set mblen d_mblen
6783eval $inlibc
6784
6785: see if mbstowcs exists
6786set mbstowcs d_mbstowcs
6787eval $inlibc
6788
6789: see if mbtowc exists
6790set mbtowc d_mbtowc
6791eval $inlibc
6792
6793: see if memcmp exists
6794set memcmp d_memcmp
6795eval $inlibc
6796
6797: see if memcpy exists
6798set memcpy d_memcpy
6799eval $inlibc
6800
6801: see if memmove exists
6802set memmove d_memmove
2304df62
AD
6803eval $inlibc
6804
6805: see if memset exists
6806set memset d_memset
6807eval $inlibc
6808
6809: see if mkdir exists
6810set mkdir d_mkdir
6811eval $inlibc
6812
a0d0e21e
LW
6813: see if mkfifo exists
6814set mkfifo d_mkfifo
6815eval $inlibc
6816
6817: see if mktime exists
6818set mktime d_mktime
6819eval $inlibc
6820
2304df62
AD
6821: see if msgctl exists
6822set msgctl d_msgctl
6823eval $inlibc
6824
6825: see if msgget exists
6826set msgget d_msgget
6827eval $inlibc
6828
6829: see if msgsnd exists
6830set msgsnd d_msgsnd
6831eval $inlibc
6832
6833: see if msgrcv exists
6834set msgrcv d_msgrcv
6835eval $inlibc
6836
6837: see how much of the 'msg*(2)' library is present.
6838h_msg=true
6839echo " "
6840case "$d_msgctl$d_msgget$d_msgsnd$d_msgrcv" in
6841*"$undef"*) h_msg=false;;
6842esac
6843: we could also check for sys/ipc.h ...
6844if $h_msg && $test `./findhdr sys/msg.h`; then
6845 echo "You have the full msg*(2) library." >&4
6846 val="$define"
6847else
6848 echo "You don't have the full msg*(2) library." >&4
6849 val="$undef"
6850fi
6851set d_msg
6852eval $setvar
6853
a0d0e21e
LW
6854: see if this is a malloc.h system
6855set malloc.h i_malloc
6856eval $inhdr
6857
94b6baf5
AD
6858: see if stdlib is available
6859set stdlib.h i_stdlib
6860eval $inhdr
6861
85e6fe83 6862: determine which malloc to compile in
85e6fe83
LW
6863echo " "
6864case "$usemymalloc" in
a0d0e21e
LW
6865''|y*|true) dflt='y' ;;
6866n*|false) dflt='n' ;;
6867*) dflt="$usemymalloc" ;;
85e6fe83
LW
6868esac
6869rp="Do you wish to attempt to use the malloc that comes with $package?"
6870. ./myread
6871usemymalloc="$ans"
6872case "$ans" in
a0d0e21e
LW
6873y*|true)
6874 usemymalloc='y'
6875 mallocsrc='malloc.c'
6876 mallocobj='malloc.o'
6877 d_mymalloc="$define"
6878 case "$libs" in
6879 *-lmalloc*)
6880 : Remove malloc from list of libraries to use
6881 echo "Removing unneeded -lmalloc from library list" >&4
6882 set `echo X $libs | $sed -e 's/-lmalloc / /' -e 's/-lmalloc$//'`
6883 shift
6884 libs="$*"
6885 echo "libs = $libs" >&4
6886 ;;
6887 esac
6888 ;;
6889*)
6890 usemymalloc='n'
6891 mallocsrc=''
6892 mallocobj=''
6893 d_mymalloc="$undef"
6894 ;;
85e6fe83
LW
6895esac
6896
94b6baf5 6897: compute the return types of malloc and free
85e6fe83 6898echo " "
94b6baf5 6899$cat >malloc.c <<END
a0d0e21e 6900#$i_malloc I_MALLOC
94b6baf5 6901#$i_stdlib I_STDLIB
a0d0e21e
LW
6902#include <stdio.h>
6903#include <sys/types.h>
6904#ifdef I_MALLOC
85e6fe83 6905#include <malloc.h>
a0d0e21e 6906#endif
94b6baf5
AD
6907#ifdef I_STDLIB
6908#include <stdlib.h>
6909#endif
6910#ifdef TRY_MALLOC
85e6fe83 6911void *malloc();
94b6baf5
AD
6912#endif
6913#ifdef TRY_FREE
6914void free();
6915#endif
85e6fe83 6916END
94b6baf5
AD
6917case "$malloctype" in
6918'')
6919 if $cc $ccflags -c -DTRY_MALLOC malloc.c >/dev/null 2>&1; then
85e6fe83
LW
6920 malloctype='void *'
6921 else
6922 malloctype='char *'
6923 fi
85e6fe83
LW
6924 ;;
6925esac
6926echo "Your system wants malloc to return '$malloctype', it would seem." >&4
6927
94b6baf5
AD
6928case "$freetype" in
6929'')
6930 if $cc $ccflags -c -DTRY_FREE malloc.c >/dev/null 2>&1; then
6931 freetype='void'
6932 else
6933 freetype='int'
6934 fi
6935 ;;
8e07c86e
AD
6936esac
6937echo "Your system uses $freetype free(), it would seem." >&4
6938$rm -f malloc.[co]
6939: see if nice exists
6940set nice d_nice
6941eval $inlibc
2304df62 6942
a0d0e21e
LW
6943: see if pause exists
6944set pause d_pause
6945eval $inlibc
6946
6947: see if pipe exists
6948set pipe d_pipe
6949eval $inlibc
6950
8e07c86e
AD
6951: see if poll exists
6952set poll d_poll
6953eval $inlibc
6954
4aa0a1f7
AD
6955: see if this is a pwd.h system
6956set pwd.h i_pwd
6957eval $inhdr
6958
6959case "$i_pwd" in
6960$define)
6961 xxx=`./findhdr pwd.h`
85e6fe83 6962 $cppstdin $cppflags $cppminus < $xxx >$$.h
4aa0a1f7 6963
2304df62 6964 if $contains 'pw_quota' $$.h >/dev/null 2>&1; then
4aa0a1f7 6965 val="$define"
2304df62 6966 else
4aa0a1f7 6967 val="$undef"
2304df62 6968 fi
4aa0a1f7
AD
6969 set d_pwquota
6970 eval $setvar
6971
2304df62 6972 if $contains 'pw_age' $$.h >/dev/null 2>&1; then
4aa0a1f7 6973 val="$define"
2304df62 6974 else
4aa0a1f7 6975 val="$undef"
2304df62 6976 fi
4aa0a1f7
AD
6977 set d_pwage
6978 eval $setvar
6979
2304df62 6980 if $contains 'pw_change' $$.h >/dev/null 2>&1; then
4aa0a1f7 6981 val="$define"
2304df62 6982 else
4aa0a1f7 6983 val="$undef"
2304df62 6984 fi
4aa0a1f7
AD
6985 set d_pwchange
6986 eval $setvar
6987
2304df62 6988 if $contains 'pw_class' $$.h >/dev/null 2>&1; then
4aa0a1f7 6989 val="$define"
2304df62 6990 else
4aa0a1f7 6991 val="$undef"
2304df62 6992 fi
4aa0a1f7
AD
6993 set d_pwclass
6994 eval $setvar
6995
2304df62 6996 if $contains 'pw_expire' $$.h >/dev/null 2>&1; then
4aa0a1f7 6997 val="$define"
2304df62 6998 else
4aa0a1f7 6999 val="$undef"
2304df62 7000 fi
4aa0a1f7
AD
7001 set d_pwexpire
7002 eval $setvar
7003
2304df62 7004 if $contains 'pw_comment' $$.h >/dev/null 2>&1; then
4aa0a1f7 7005 val="$define"
2304df62 7006 else
4aa0a1f7 7007 val="$undef"
2304df62 7008 fi
4aa0a1f7
AD
7009 set d_pwcomment
7010 eval $setvar
7011
2304df62 7012 $rm -f $$.h
4aa0a1f7
AD
7013 ;;
7014*)
7015 val="$undef";
7016 set d_pwquota; eval $setvar
7017 set d_pwage; eval $setvar
7018 set d_pwchange; eval $setvar
7019 set d_pwclass; eval $setvar
7020 set d_pwexpire; eval $setvar
7021 set d_pwcomment; eval $setvar
7022 ;;
7023esac
2304df62 7024
85e6fe83 7025: see if readdir and friends exist
2304df62
AD
7026set readdir d_readdir
7027eval $inlibc
85e6fe83
LW
7028set seekdir d_seekdir
7029eval $inlibc
7030set telldir d_telldir
7031eval $inlibc
7032set rewinddir d_rewinddir
7033eval $inlibc
2304df62 7034
a0d0e21e
LW
7035: see if readlink exists
7036set readlink d_readlink
7037eval $inlibc
7038
2304df62
AD
7039: see if rename exists
7040set rename d_rename
7041eval $inlibc
7042
7043: see if rmdir exists
7044set rmdir d_rmdir
7045eval $inlibc
7046
8ff267be 7047: see if memory.h is available.
7048val=''
7049set memory.h val
7050eval $inhdr
7051
7052: See if it conflicts with string.h
7053case "$val" in
7054$define)
7055 case "$strings" in
7056 '') ;;
7057 *)
7058 $cppstdin $cppflags $cppminus < $strings > mem.h
7059 if $contains 'memcpy' mem.h >/dev/null 2>&1; then
7060 echo " "
7061 echo "We won't be including <memory.h>."
7062 val="$undef"
7063 fi
7064 $rm -f mem.h
7065 ;;
7066 esac
7067esac
7068set i_memory
7069eval $setvar
7070
2304df62
AD
7071: can bcopy handle overlapping blocks?
7072val="$undef"
7073case "$d_bcopy" in
7074"$define")
7075 echo " "
7076 echo "Checking to see if your bcopy() can do overlapping copies..." >&4
8ff267be 7077 $cat >foo.c <<EOCP
7078#$i_memory I_MEMORY
7079#$i_stdlib I_STDLIB
7080#$i_string I_STRING
7081#$i_unistd I_UNISTD
7082EOCP
7083 $cat >>foo.c <<'EOCP'
7084#include <stdio.h>
7085
7086#ifdef I_MEMORY
7087# include <memory.h>
7088#endif
7089#ifdef I_STDLIB
7090# include <stdlib.h>
7091#endif
7092#ifdef I_STRING
7093# include <string.h>
7094#else
7095# include <strings.h>
7096#endif
7097#ifdef I_UNISTD
7098# include <unistd.h> /* Needed for NetBSD */
7099#endif
2304df62
AD
7100main()
7101{
85e6fe83
LW
7102char buf[128], abc[128];
7103char *b;
7104int len;
7105int off;
7106int align;
a0d0e21e 7107
8ff267be 7108/* Copy "abcde..." string to char abc[] so that gcc doesn't
7109 try to store the string in read-only memory. */
85e6fe83 7110bcopy("abcdefghijklmnopqrstuvwxyz0123456789", abc, 36);
2304df62
AD
7111
7112for (align = 7; align >= 0; align--) {
7113 for (len = 36; len; len--) {
7114 b = buf+align;
85e6fe83 7115 bcopy(abc, b, len);
2304df62
AD
7116 for (off = 1; off <= len; off++) {
7117 bcopy(b, b+off, len);
7118 bcopy(b+off, b, len);
85e6fe83 7119 if (bcmp(b, abc, len))
2304df62
AD
7120 exit(1);
7121 }
7122 }
7123}
7124exit(0);
7125}
7126EOCP
774d564b 7127 if $cc $optimize $ccflags $ldflags foo.c \
7128 -o safebcpy $libs >/dev/null 2>&1; then
2304df62
AD
7129 if ./safebcpy 2>/dev/null; then
7130 echo "Yes, it can."
7131 val="$define"
7132 else
7133 echo "It can't, sorry."
8ff267be 7134 case "$d_memmove" in
7135 "$define") echo "But that's Ok since you have memmove()." ;;
7136 esac
2304df62
AD
7137 fi
7138 else
7139 echo "(I can't compile the test program, so we'll assume not...)"
8ff267be 7140 case "$d_memmove" in
7141 "$define") echo "But that's Ok since you have memmove()." ;;
7142 esac
2304df62
AD
7143 fi
7144 ;;
7145esac
7146$rm -f foo.* safebcpy core
7147set d_safebcpy
7148eval $setvar
7149
7150: can memcpy handle overlapping blocks?
7151val="$undef"
7152case "$d_memcpy" in
7153"$define")
7154 echo " "
7155 echo "Checking to see if your memcpy() can do overlapping copies..." >&4
8ff267be 7156 $cat >foo.c <<EOCP
7157#$i_memory I_MEMORY
7158#$i_stdlib I_STDLIB
7159#$i_string I_STRING
7160#$i_unistd I_UNISTD
7161EOCP
7162 $cat >>foo.c <<'EOCP'
7163#include <stdio.h>
7164
7165#ifdef I_MEMORY
7166# include <memory.h>
7167#endif
7168#ifdef I_STDLIB
7169# include <stdlib.h>
7170#endif
7171#ifdef I_STRING
7172# include <string.h>
7173#else
7174# include <strings.h>
7175#endif
7176#ifdef I_UNISTD
7177# include <unistd.h> /* Needed for NetBSD */
7178#endif
2304df62
AD
7179main()
7180{
85e6fe83
LW
7181char buf[128], abc[128];
7182char *b;
7183int len;
7184int off;
7185int align;
7186
8ff267be 7187/* Copy "abcde..." string to char abc[] so that gcc doesn't
7188 try to store the string in read-only memory. */
85e6fe83 7189memcpy(abc, "abcdefghijklmnopqrstuvwxyz0123456789", 36);
2304df62
AD
7190
7191for (align = 7; align >= 0; align--) {
7192 for (len = 36; len; len--) {
7193 b = buf+align;
232e078e 7194 memcpy(b, abc, len);
2304df62 7195 for (off = 1; off <= len; off++) {
2304df62 7196 memcpy(b+off, b, len);
232e078e 7197 memcpy(b, b+off, len);
85e6fe83 7198 if (memcmp(b, abc, len))
2304df62
AD
7199 exit(1);
7200 }
7201 }
7202}
7203exit(0);
7204}
7205EOCP
774d564b 7206 if $cc $optimize $ccflags $ldflags foo.c \
7207 -o safemcpy $libs >/dev/null 2>&1; then
2304df62
AD
7208 if ./safemcpy 2>/dev/null; then
7209 echo "Yes, it can."
7210 val="$define"
7211 else
7212 echo "It can't, sorry."
8ff267be 7213 case "$d_memmove" in
7214 "$define") echo "But that's Ok since you have memmove()." ;;
7215 esac
2304df62
AD
7216 fi
7217 else
7218 echo "(I can't compile the test program, so we'll assume not...)"
8ff267be 7219 case "$d_memmove" in
7220 "$define") echo "But that's Ok since you have memmove()." ;;
7221 esac
2304df62
AD
7222 fi
7223 ;;
7224esac
7225$rm -f foo.* safemcpy core
7226set d_safemcpy
7227eval $setvar
7228
36477c24 7229: can memcmp be trusted to compare relative magnitude?
7230val="$undef"
7231case "$d_memcmp" in
7232"$define")
7233 echo " "
5f05dabc 7234 echo "Checking to see if your memcmp() can compare relative magnitude..." >&4
36477c24 7235 $cat >foo.c <<EOCP
7236#$i_memory I_MEMORY
7237#$i_stdlib I_STDLIB
7238#$i_string I_STRING
7239#$i_unistd I_UNISTD
7240EOCP
7241 $cat >>foo.c <<'EOCP'
7242#include <stdio.h>
7243
7244#ifdef I_MEMORY
7245# include <memory.h>
7246#endif
7247#ifdef I_STDLIB
7248# include <stdlib.h>
7249#endif
7250#ifdef I_STRING
7251# include <string.h>
7252#else
7253# include <strings.h>
7254#endif
7255#ifdef I_UNISTD
7256# include <unistd.h> /* Needed for NetBSD */
7257#endif
7258main()
7259{
7260char a = -1;
7261char b = 0;
7262if ((a < b) && memcmp(&a, &b, 1) < 0)
7263 exit(1);
7264exit(0);
7265}
7266EOCP
774d564b 7267 if $cc $optimize $ccflags $ldflags foo.c \
7268 -o sanemcmp $libs >/dev/null 2>&1; then
36477c24 7269 if ./sanemcmp 2>/dev/null; then
7270 echo "Yes, it can."
7271 val="$define"
7272 else
7273 echo "No, it can't (it uses signed chars)."
7274 fi
7275 else
7276 echo "(I can't compile the test program, so we'll assume not...)"
7277 fi
7278 ;;
7279esac
7280$rm -f foo.* sanemcmp core
7281set d_sanemcmp
7282eval $setvar
7283
2304df62
AD
7284: see if select exists
7285set select d_select
7286eval $inlibc
7287
7288: see if semctl exists
7289set semctl d_semctl
7290eval $inlibc
7291
7292: see if semget exists
7293set semget d_semget
7294eval $inlibc
7295
7296: see if semop exists
7297set semop d_semop
7298eval $inlibc
7299
7300: see how much of the 'sem*(2)' library is present.
7301h_sem=true
7302echo " "
7303case "$d_semctl$d_semget$d_semop" in
7304*"$undef"*) h_sem=false;;
7305esac
7306: we could also check for sys/ipc.h ...
7307if $h_sem && $test `./findhdr sys/sem.h`; then
7308 echo "You have the full sem*(2) library." >&4
7309 val="$define"
7310else
7311 echo "You don't have the full sem*(2) library." >&4
7312 val="$undef"
7313fi
7314set d_sem
7315eval $setvar
7316
7317: see if setegid exists
7318set setegid d_setegid
7319eval $inlibc
7320
7321: see if seteuid exists
7322set seteuid d_seteuid
7323eval $inlibc
7324
a0d0e21e
LW
7325: see if setlinebuf exists
7326set setlinebuf d_setlinebuf
7327eval $inlibc
7328
2304df62
AD
7329: see if setlocale exists
7330set setlocale d_setlocale
7331eval $inlibc
a0d0e21e 7332
2304df62
AD
7333: see if setpgid exists
7334set setpgid d_setpgid
7335eval $inlibc
7336
2304df62
AD
7337: see if setpgrp2 exists
7338set setpgrp2 d_setpgrp2
7339eval $inlibc
7340
7341: see if setpriority exists
7342set setpriority d_setprior
7343eval $inlibc
7344
7345: see if setregid exists
7346set setregid d_setregid
7347eval $inlibc
7348set setresgid d_setresgid
7349eval $inlibc
7350
7351: see if setreuid exists
7352set setreuid d_setreuid
7353eval $inlibc
7354set setresuid d_setresuid
7355eval $inlibc
7356
7357: see if setrgid exists
7358set setrgid d_setrgid
7359eval $inlibc
7360
7361: see if setruid exists
7362set setruid d_setruid
7363eval $inlibc
7364
7365: see if setsid exists
7366set setsid d_setsid
7367eval $inlibc
7368
760ac839
LW
7369: see if sfio.h is available
7370set sfio.h i_sfio
7371eval $inhdr
7372
7373
8ff267be 7374: see if sfio library is available
760ac839
LW
7375case "$i_sfio" in
7376$define)
7377 val=''
7378 set sfreserve val
7379 eval $inlibc
7380 ;;
7381*)
7382 val="$undef"
7383 ;;
7384esac
8ff267be 7385: Ok, but do we want to use it.
760ac839
LW
7386case "$val" in
7387$define)
7388 case "$usesfio" in
8ff267be 7389 true|$define|[yY]*) dflt='y';;
760ac839
LW
7390 *) dflt='n';;
7391 esac
8ff267be 7392 echo "$package can use the sfio library, but it is experimental."
760ac839
LW
7393 rp="You seem to have sfio available, do you want to try using it?"
7394 . ./myread
7395 case "$ans" in
8ff267be 7396 y|Y) ;;
7397 *) echo "Ok, avoiding sfio this time. I'll use stdio instead."
760ac839 7398 val="$undef"
ff0cee69 7399 : Remove sfio from list of libraries to use
7400 set `echo X $libs | $sed -e 's/-lsfio / /' -e 's/-lsfio$//'`
7401 shift
7402 libs="$*"
7403 echo "libs = $libs" >&4
760ac839
LW
7404 ;;
7405 esac
7406 ;;
8ff267be 7407*) case "$usesfio" in
7408 true|$define|[yY]*)
7409 echo "Sorry, cannot find sfio on this machine" >&4
7410 echo "Ignoring your setting of usesfio=$usesfio" >&4
760ac839
LW
7411 ;;
7412 esac
7413 ;;
7414esac
8ff267be 7415set d_sfio
7416eval $setvar
760ac839
LW
7417case "$d_sfio" in
7418$define) usesfio='true';;
7419*) usesfio='false';;
7420esac
7421
2304df62
AD
7422: see if shmctl exists
7423set shmctl d_shmctl
7424eval $inlibc
7425
7426: see if shmget exists
7427set shmget d_shmget
7428eval $inlibc
7429
a0d0e21e
LW
7430: see if shmat exists
7431set shmat d_shmat
7432eval $inlibc
7433: see what shmat returns
7434case "$d_shmat" in
7435"$define")
7436 $cat >shmat.c <<'END'
7437#include <sys/shm.h>
7438void *shmat();
7439END
7440 if $cc $ccflags -c shmat.c >/dev/null 2>&1; then
7441 shmattype='void *'
7442 else
7443 shmattype='char *'
7444 fi
7445 echo "and it returns ($shmattype)." >&4
7446 : see if a prototype for shmat is available
e50aee73
AD
7447 xxx=`./findhdr sys/shm.h`
7448 $cppstdin $cppflags $cppminus < $xxx > shmat.c 2>/dev/null
a0d0e21e
LW
7449 if $contains 'shmat.*(' shmat.c >/dev/null 2>&1; then
7450 val="$define"
7451 else
7452 val="$undef"
7453 fi
7454 $rm -f shmat.[co]
7455 ;;
7456*)
7457 val="$undef"
7458 ;;
7459esac
7460set d_shmatprototype
7461eval $setvar
7462
7463: see if shmdt exists
7464set shmdt d_shmdt
7465eval $inlibc
7466
7467: see how much of the 'shm*(2)' library is present.
7468h_shm=true
7469echo " "
7470case "$d_shmctl$d_shmget$d_shmat$d_shmdt" in
7471*"$undef"*) h_shm=false;;
7472esac
7473: we could also check for sys/ipc.h ...
7474if $h_shm && $test `./findhdr sys/shm.h`; then
7475 echo "You have the full shm*(2) library." >&4
7476 val="$define"
7477else
7478 echo "You don't have the full shm*(2) library." >&4
7479 val="$undef"
7480fi
7481set d_shm
7482eval $setvar
7483
2c7991dc 7484echo " "
8ff267be 7485: see if we have sigaction
7486if set sigaction val -f d_sigaction; eval $csym; $val; then
7487 echo 'sigaction() found.' >&4
7488 val="$define"
2c7991dc 7489else
8ff267be 7490 echo 'sigaction NOT found.' >&4
7491 val="$undef"
2c7991dc 7492fi
7493
8ff267be 7494$cat > set.c <<'EOP'
7495/* Solaris 2.5_x86 with SunWorks Pro C 3.0.1 doesn't have a complete
7496 sigaction structure if compiled with cc -Xc. This compile test
7497 will fail then. <doughera@lafcol.lafayette.edu>
7498*/
7499#include <stdio.h>
7500#include <sys/types.h>
7501#include <signal.h>
7502main()
7503{
7504 struct sigaction act, oact;
7505}
7506EOP
7507
7508if $cc $ccflags $ldflags -o set set.c $libs >/dev/null 2>&1; then
7509 :
7510else
7511 echo "But you don't seem to have a useable struct sigaction." >&4
7512 val="$undef"
7513fi
7514set d_sigaction; eval $setvar
7515$rm -f set set.o set.c
2c7991dc 7516
a5f75d66
AD
7517: see if sigsetjmp exists
7518echo " "
7519case "$d_sigsetjmp" in
7520'')
760ac839 7521 $cat >set.c <<'EOP'
a5f75d66
AD
7522#include <setjmp.h>
7523sigjmp_buf env;
7524int set = 1;
7525main()
7526{
7527 if (sigsetjmp(env,1))
7528 exit(set);
7529 set = 0;
7530 siglongjmp(env, 1);
7531 exit(1);
7532}
7533EOP
760ac839 7534 if $cc $ccflags $ldflags -o set set.c $libs > /dev/null 2>&1 ; then
a5f75d66
AD
7535 if ./set >/dev/null 2>&1; then
7536 echo "POSIX sigsetjmp found." >&4
7537 val="$define"
7538 else
760ac839 7539 $cat >&4 <<EOM
a5f75d66 7540Uh-Oh! You have POSIX sigsetjmp and siglongjmp, but they do not work properly!!
760ac839 7541I'll ignore them.
a5f75d66
AD
7542EOM
7543 val="$undef"
7544 fi
7545 else
760ac839 7546 echo "sigsetjmp not found." >&4
a5f75d66
AD
7547 val="$undef"
7548 fi
7549 ;;
7550*) val="$d_sigsetjmp"
7551 case "$d_sigsetjmp" in
7552 $define) echo "POSIX sigsetjmp found." >&4;;
760ac839 7553 $undef) echo "sigsetjmp not found." >&4;;
a5f75d66
AD
7554 esac
7555 ;;
7556esac
7557set d_sigsetjmp
7558eval $setvar
7559$rm -f set.c set
7560
a0d0e21e
LW
7561socketlib=''
7562sockethdr=''
7563: see whether socket exists
7564echo " "
7565$echo $n "Hmm... $c" >&4
7566if set socket val -f d_socket; eval $csym; $val; then
7567 echo "Looks like you have Berkeley networking support." >&4
7568 d_socket="$define"
7569 if set setsockopt val -f; eval $csym; $val; then
7570 d_oldsock="$undef"
7571 else
7572 echo "...but it uses the old 4.1c interface, rather than 4.2" >&4
7573 d_oldsock="$define"
7574 fi
7575else
7576 if $contains socklib libc.list >/dev/null 2>&1; then
7577 echo "Looks like you have Berkeley networking support." >&4
7578 d_socket="$define"
7579 : we will have to assume that it supports the 4.2 BSD interface
7580 d_oldsock="$undef"
7581 else
5f05dabc 7582 echo "You don't have Berkeley networking in libc$lib_ext..." >&4
7583 if test -f /usr/lib/libnet$lib_ext; then
7584 ( (nm $nm_opt /usr/lib/libnet$lib_ext | eval $nm_extract) || \
7585 ar t /usr/lib/libnet$lib_ext) 2>/dev/null >> libc.list
a0d0e21e
LW
7586 if $contains socket libc.list >/dev/null 2>&1; then
7587 echo "...but the Wollongong group seems to have hacked it in." >&4
7588 socketlib="-lnet"
7589 sockethdr="-I/usr/netinclude"
7590 d_socket="$define"
7591 if $contains setsockopt libc.list >/dev/null 2>&1; then
7592 d_oldsock="$undef"
7593 else
7594 echo "...using the old 4.1c interface, rather than 4.2" >&4
7595 d_oldsock="$define"
7596 fi
7597 else
5f05dabc 7598 echo "or even in libnet$lib_ext, which is peculiar." >&4
a0d0e21e
LW
7599 d_socket="$undef"
7600 d_oldsock="$undef"
7601 fi
7602 else
7603 echo "or anywhere else I see." >&4
7604 d_socket="$undef"
7605 d_oldsock="$undef"
7606 fi
7607 fi
7608fi
7609
7610: see if socketpair exists
7611set socketpair d_sockpair
2304df62
AD
7612eval $inlibc
7613
2304df62
AD
7614: see if stat knows about block sizes
7615echo " "
7616xxx=`./findhdr sys/stat.h`
7617if $contains 'st_blocks;' "$xxx" >/dev/null 2>&1 ; then
7618 if $contains 'st_blksize;' "$xxx" >/dev/null 2>&1 ; then
7619 echo "Your stat() knows about block sizes." >&4
7620 val="$define"
7621 else
7622 echo "Your stat() doesn't know about block sizes." >&4
7623 val="$undef"
7624 fi
7625else
7626 echo "Your stat() doesn't know about block sizes." >&4
7627 val="$undef"
7628fi
7629set d_statblks
7630eval $setvar
7631
16d20bd9
AD
7632: see if _ptr and _cnt from stdio act std
7633echo " "
7634if $contains '_IO_fpos_t' `./findhdr stdio.h` >/dev/null 2>&1 ; then
7635 echo "(Looks like you have stdio.h from Linux.)"
7636 case "$stdio_ptr" in
c2960299
AD
7637 '') stdio_ptr='((fp)->_IO_read_ptr)'
7638 ptr_lval=$define
7639 ;;
8e07c86e 7640 *) ptr_lval=$d_stdio_ptr_lval;;
16d20bd9
AD
7641 esac
7642 case "$stdio_cnt" in
c2960299
AD
7643 '') stdio_cnt='((fp)->_IO_read_end - (fp)->_IO_read_ptr)'
7644 cnt_lval=$undef
7645 ;;
8e07c86e 7646 *) cnt_lval=$d_stdio_cnt_lval;;
16d20bd9
AD
7647 esac
7648 case "$stdio_base" in
7649 '') stdio_base='((fp)->_IO_read_base)';;
7650 esac
7651 case "$stdio_bufsiz" in
c2960299 7652 '') stdio_bufsiz='((fp)->_IO_read_end - (fp)->_IO_read_base)';;
16d20bd9
AD
7653 esac
7654else
7655 case "$stdio_ptr" in
c2960299
AD
7656 '') stdio_ptr='((fp)->_ptr)'
7657 ptr_lval=$define
7658 ;;
8e07c86e 7659 *) ptr_lval=$d_stdio_ptr_lval;;
16d20bd9
AD
7660 esac
7661 case "$stdio_cnt" in
c2960299
AD
7662 '') stdio_cnt='((fp)->_cnt)'
7663 cnt_lval=$define
7664 ;;
8e07c86e 7665 *) cnt_lval=$d_stdio_cnt_lval;;
16d20bd9
AD
7666 esac
7667 case "$stdio_base" in
7668 '') stdio_base='((fp)->_base)';;
7669 esac
7670 case "$stdio_bufsiz" in
7671 '') stdio_bufsiz='((fp)->_cnt + (fp)->_ptr - (fp)->_base)';;
7672 esac
7673fi
7674: test whether _ptr and _cnt really work
7675echo "Checking how std your stdio is..." >&4
7676$cat >try.c <<EOP
7677#include <stdio.h>
7678#define FILE_ptr(fp) $stdio_ptr
7679#define FILE_cnt(fp) $stdio_cnt
8ff267be 7680main() {
16d20bd9
AD
7681 FILE *fp = fopen("try.c", "r");
7682 char c = getc(fp);
7683 if (
7684 18 <= FILE_cnt(fp) &&
7685 strncmp(FILE_ptr(fp), "include <stdio.h>\n", 18) == 0
7686 )
7687 exit(0);
7688 exit(1);
7689}
7690EOP
7691val="$undef"
7692if $cc $ccflags $ldflags -o try try.c $libs >/dev/null 2>&1; then
7693 if ./try; then
7694 echo "Your stdio acts pretty std."
7695 val="$define"
7696 else
7697 echo "Your stdio isn't very std."
7698 fi
7699else
7700 echo "Your stdio doesn't appear very std."
7701fi
7702$rm -f try.c try
7703set d_stdstdio
7704eval $setvar
7705
8e07c86e 7706: Can _ptr be used as an lvalue?
e50aee73
AD
7707case "$d_stdstdio$ptr_lval" in
7708$define$define) val=$define ;;
c2960299
AD
7709*) val=$undef ;;
7710esac
7711set d_stdio_ptr_lval
7712eval $setvar
7713
8e07c86e 7714: Can _cnt be used as an lvalue?
e50aee73
AD
7715case "$d_stdstdio$cnt_lval" in
7716$define$define) val=$define ;;
c2960299
AD
7717*) val=$undef ;;
7718esac
7719set d_stdio_cnt_lval
7720eval $setvar
7721
8ff267be 7722
16d20bd9
AD
7723: see if _base is also standard
7724val="$undef"
7725case "$d_stdstdio" in
7726$define)
7727 $cat >try.c <<EOP
7728#include <stdio.h>
7729#define FILE_base(fp) $stdio_base
7730#define FILE_bufsiz(fp) $stdio_bufsiz
8ff267be 7731main() {
16d20bd9
AD
7732 FILE *fp = fopen("try.c", "r");
7733 char c = getc(fp);
7734 if (
7735 19 <= FILE_bufsiz(fp) &&
7736 strncmp(FILE_base(fp), "#include <stdio.h>\n", 19) == 0
7737 )
7738 exit(0);
7739 exit(1);
7740}
7741EOP
7742 if $cc $ccflags $ldflags -o try try.c $libs > /dev/null 2>&1; then
7743 if ./try; then
8ff267be 7744 echo "And its _base field acts std."
16d20bd9
AD
7745 val="$define"
7746 else
7747 echo "But its _base field isn't std."
7748 fi
7749 else
7750 echo "However, it seems to be lacking the _base field."
7751 fi
7752 $rm -f try.c try
7753 ;;
7754esac
7755set d_stdiobase
7756eval $setvar
7757
a0d0e21e
LW
7758: see if strcoll exists
7759set strcoll d_strcoll
7760eval $inlibc
2304df62
AD
7761
7762: check for structure copying
7763echo " "
7764echo "Checking to see if your C compiler can copy structs..." >&4
7765$cat >try.c <<'EOCP'
7766main()
7767{
7768 struct blurfl {
7769 int dyick;
7770 } foo, bar;
7771
7772 foo = bar;
7773}
7774EOCP
7775if $cc -c try.c >/dev/null 2>&1 ; then
7776 val="$define"
7777 echo "Yup, it can."
7778else
7779 val="$undef"
7780 echo "Nope, it can't."
7781fi
7782set d_strctcpy
7783eval $setvar
7784$rm -f try.*
7785
7786: see if strerror and/or sys_errlist[] exist
7787echo " "
7788if set strerror val -f d_strerror; eval $csym; $val; then
7789 echo 'strerror() found.' >&4
7790 d_strerror="$define"
a0d0e21e 7791 d_strerrm='strerror(e)'
2304df62
AD
7792 if set sys_errlist val -a d_syserrlst; eval $csym; $val; then
7793 echo "(You also have sys_errlist[], so we could roll our own strerror.)"
7794 d_syserrlst="$define"
7795 else
7796 echo "(Since you don't have sys_errlist[], sterror() is welcome.)"
7797 d_syserrlst="$undef"
7798 fi
7799elif xxx=`./findhdr string.h`; test "$xxx" || xxx=`./findhdr strings.h`; \
7800 $contains '#[ ]*define.*strerror' "$xxx" >/dev/null 2>&1; then
7801 echo 'strerror() found in string header.' >&4
7802 d_strerror="$define"
a0d0e21e 7803 d_strerrm='strerror(e)'
2304df62
AD
7804 if set sys_errlist val -a d_syserrlst; eval $csym; $val; then
7805 echo "(Most probably, strerror() uses sys_errlist[] for descriptions.)"
7806 d_syserrlst="$define"
7807 else
7808 echo "(You don't appear to have any sys_errlist[], how can this be?)"
7809 d_syserrlst="$undef"
7810 fi
7811elif set sys_errlist val -a d_syserrlst; eval $csym; $val; then
7812echo "strerror() not found, but you have sys_errlist[] so we'll use that." >&4
7813 d_strerror="$undef"
7814 d_syserrlst="$define"
a0d0e21e 7815 d_strerrm='((e)<0||(e)>=sys_nerr?"unknown":sys_errlist[e])'
2304df62
AD
7816else
7817 echo 'strerror() and sys_errlist[] NOT found.' >&4
7818 d_strerror="$undef"
7819 d_syserrlst="$undef"
a0d0e21e 7820 d_strerrm='"unknown"'
2304df62
AD
7821fi
7822
a89d8a78
DH
7823: see if strtod exists
7824set strtod d_strtod
7825eval $inlibc
7826
7827: see if strtol exists
7828set strtol d_strtol
7829eval $inlibc
7830
7831: see if strtoul exists
7832set strtoul d_strtoul
7833eval $inlibc
7834
a0d0e21e
LW
7835: see if strxfrm exists
7836set strxfrm d_strxfrm
7837eval $inlibc
7838
2304df62
AD
7839: see if symlink exists
7840set symlink d_symlink
7841eval $inlibc
7842
7843: see if syscall exists
7844set syscall d_syscall
7845eval $inlibc
7846
a0d0e21e
LW
7847: see if sysconf exists
7848set sysconf d_sysconf
7849eval $inlibc
7850
2304df62
AD
7851: see if system exists
7852set system d_system
7853eval $inlibc
7854
a0d0e21e
LW
7855: see if tcgetpgrp exists
7856set tcgetpgrp d_tcgetpgrp
7857eval $inlibc
7858
2c7991dc 7859: see if tcsetpgrp exists
7860set tcsetpgrp d_tcsetpgrp
7861eval $inlibc
4633a7c4 7862
2c7991dc 7863: define an is-a-typedef? function
7864typedef='type=$1; var=$2; def=$3; shift; shift; shift; inclist=$@;
7865case "$inclist" in
7866"") inclist="sys/types.h";;
7867esac;
7868eval "varval=\$$var";
7869case "$varval" in
7870"")
7871 $rm -f temp.c;
7872 for inc in $inclist; do
7873 echo "#include <$inc>" >>temp.c;
7874 done;
7875 $cppstdin $cppflags $cppminus < temp.c >temp.E 2>/dev/null;
7876 if $contains $type temp.E >/dev/null 2>&1; then
7877 eval "$var=\$type";
7878 else
7879 eval "$var=\$def";
7880 fi;
7881 $rm -f temp.?;;
7882*) eval "$var=\$varval";;
7883esac'
4633a7c4 7884
2c7991dc 7885: see if this is a sys/times.h system
7886set sys/times.h i_systimes
7887eval $inhdr
4633a7c4 7888
2c7991dc 7889: see if times exists
4633a7c4 7890echo " "
2c7991dc 7891if set times val -f d_times; eval $csym; $val; then
7892 echo 'times() found.' >&4
7893 d_times="$define"
7894 inc=''
7895 case "$i_systimes" in
7896 "$define") inc='sys/times.h';;
7897 esac
7898 set clock_t clocktype long stdio.h sys/types.h $inc
7899 eval $typedef
7900 dflt="$clocktype"
7901 echo " "
7902 rp="What type is returned by times() on this system?"
7903 . ./myread
7904 clocktype="$ans"
7905else
7906 echo 'times() NOT found, hope that will do.' >&4
7907 d_times="$undef"
7908 clocktype='int'
7909fi
2304df62 7910
2c7991dc 7911: see if truncate exists
7912set truncate d_truncate
7913eval $inlibc
2304df62 7914
2c7991dc 7915: see if tzname[] exists
7916echo " "
7917if set tzname val -a d_tzname; eval $csym; $val; then
7918 val="$define"
7919 echo 'tzname[] found.' >&4
7920else
7921 val="$undef"
7922 echo 'tzname[] NOT found.' >&4
7923fi
7924set d_tzname
7925eval $setvar
7926
7927: see if umask exists
7928set umask d_umask
7929eval $inlibc
85e6fe83 7930
4633a7c4 7931: see how we will look up host name
a0d0e21e 7932echo " "
4633a7c4
LW
7933if false; then
7934 : dummy stub to allow use of elif
7935elif set uname val -f d_uname; eval $csym; $val; then
7936 if ./xenix; then
7937 $cat <<'EOM'
7938uname() was found, but you're running xenix, and older versions of xenix
7939have a broken uname(). If you don't really know whether your xenix is old
7940enough to have a broken system call, use the default answer.
7941
85e6fe83 7942EOM
4633a7c4
LW
7943 dflt=y
7944 case "$d_uname" in
7945 "$define") dflt=n;;
7946 esac
7947 rp='Is your uname() broken?'
7948 . ./myread
7949 case "$ans" in
7950 n*) d_uname="$define"; call=uname;;
7951 esac
7952 else
7953 echo 'uname() found.' >&4
7954 d_uname="$define"
7955 call=uname
7956 fi
a0d0e21e 7957fi
4633a7c4
LW
7958case "$d_gethname" in
7959'') d_gethname="$undef";;
7960esac
7961case "$d_uname" in
7962'') d_uname="$undef";;
7963esac
7964case "$d_phostname" in
7965'') d_phostname="$undef";;
7966esac
ecfc5424 7967
4633a7c4
LW
7968: backward compatibility for d_hvfork
7969if test X$d_hvfork != X; then
7970 d_vfork="$d_hvfork"
7971 d_hvfork=''
7972fi
7973: see if there is a vfork
7974val=''
7975set vfork val
7976eval $inlibc
ecfc5424 7977
4633a7c4
LW
7978: Ok, but do we want to use it. vfork is reportedly unreliable in
7979: perl on Solaris 2.x, and probably elsewhere.
7980case "$val" in
7981$define)
16d20bd9 7982 echo " "
4633a7c4
LW
7983 case "$usevfork" in
7984 false) dflt='n';;
7985 *) dflt='y';;
7986 esac
7987 rp="Some systems have problems with vfork(). Do you want to use it?"
7988 . ./myread
7989 case "$ans" in
7990 y|Y) ;;
7991 *)
7992 echo "Ok, we won't use vfork()."
7993 val="$undef"
7994 ;;
7995 esac
ecfc5424
AD
7996 ;;
7997esac
4633a7c4
LW
7998set d_vfork
7999eval $setvar
8000case "$d_vfork" in
8001$define) usevfork='true';;
8002*) usevfork='false';;
8003esac
ecfc5424 8004
4633a7c4
LW
8005: see if this is an sysdir system
8006set sys/dir.h i_sysdir
8007eval $inhdr
8008
8009: see if this is an sysndir system
8010set sys/ndir.h i_sysndir
8011eval $inhdr
8012
8013: see if closedir exists
8014set closedir d_closedir
8015eval $inlibc
8016
8017case "$d_closedir" in
8018"$define")
16d20bd9 8019 echo " "
4633a7c4
LW
8020 echo "Checking whether closedir() returns a status..." >&4
8021 cat > closedir.c <<EOM
8022#$i_dirent I_DIRENT /**/
8023#$i_sysdir I_SYS_DIR /**/
8024#$i_sysndir I_SYS_NDIR /**/
8025
8026#if defined(I_DIRENT)
8027#include <dirent.h>
8028#if defined(NeXT) && defined(I_SYS_DIR) /* NeXT needs dirent + sys/dir.h */
8029#include <sys/dir.h>
4aa0a1f7 8030#endif
4633a7c4
LW
8031#else
8032#ifdef I_SYS_NDIR
8033#include <sys/ndir.h>
8034#else
8035#ifdef I_SYS_DIR
8036#ifdef hp9000s500
8037#include <ndir.h> /* may be wrong in the future */
8038#else
8039#include <sys/dir.h>
8040#endif
8041#endif
8042#endif
8043#endif
8044int main() { return closedir(opendir(".")); }
8045EOM
8046 if $cc $ccflags $ldflags -o closedir closedir.c $libs > /dev/null 2>&1; then
8047 if ./closedir > /dev/null 2>&1 ; then
8048 echo "Yes, it does."
8049 val="$undef"
ecfc5424 8050 else
4633a7c4
LW
8051 echo "No, it doesn't."
8052 val="$define"
ecfc5424
AD
8053 fi
8054 else
4633a7c4
LW
8055 echo "(I can't seem to compile the test program--assuming it doesn't)"
8056 val="$define"
ecfc5424 8057 fi
ecfc5424 8058 ;;
4633a7c4
LW
8059*)
8060 val="$undef";
ecfc5424
AD
8061 ;;
8062esac
4633a7c4
LW
8063set d_void_closedir
8064eval $setvar
8065$rm -f closedir*
8066: check for volatile keyword
ecfc5424 8067echo " "
4633a7c4
LW
8068echo 'Checking to see if your C compiler knows about "volatile"...' >&4
8069$cat >try.c <<'EOCP'
8070main()
8071{
8072 typedef struct _goo_struct goo_struct;
8073 goo_struct * volatile goo = ((goo_struct *)0);
8074 struct _goo_struct {
8075 long long_int;
8076 int reg_int;
8077 char char_var;
8078 };
8079 typedef unsigned short foo_t;
8080 char *volatile foo;
8081 volatile int bar;
8082 volatile foo_t blech;
8083 foo = foo;
a0d0e21e
LW
8084}
8085EOCP
4633a7c4
LW
8086if $cc -c $ccflags try.c >/dev/null 2>&1 ; then
8087 val="$define"
8088 echo "Yup, it does."
8089else
8090 val="$undef"
8091 echo "Nope, it doesn't."
8092fi
8093set d_volatile
8094eval $setvar
8095$rm -f try.*
a0d0e21e 8096
4633a7c4
LW
8097: see if there is a wait4
8098set wait4 d_wait4
8e07c86e
AD
8099eval $inlibc
8100
4633a7c4
LW
8101: see if waitpid exists
8102set waitpid d_waitpid
8103eval $inlibc
8104
8105: see if wcstombs exists
8106set wcstombs d_wcstombs
8107eval $inlibc
8108
8109: see if wctomb exists
8110set wctomb d_wctomb
8111eval $inlibc
8112
8113: preserve RCS keywords in files with variable substitution, grrr
8114Date='$Date'
8115Id='$Id'
8116Log='$Log'
8117RCSfile='$RCSfile'
8118Revision='$Revision'
8119
8120: check for alignment requirements
8121echo " "
8122case "$alignbytes" in
8123'') echo "Checking alignment constraints..." >&4
8124 $cat >try.c <<'EOCP'
8125struct foobar {
8126 char foo;
8127 double bar;
8128} try;
8129main()
8130{
8131 printf("%d\n", (char *)&try.bar - (char *)&try.foo);
8132}
8133EOCP
8134 if $cc $ccflags try.c -o try >/dev/null 2>&1; then
8135 dflt=`./try`
8136 else
8137 dflt='8'
41992daf 8138 echo "(I can't seem to compile the test program...)"
4633a7c4 8139 fi
ecfc5424 8140 ;;
4633a7c4 8141*) dflt="$alignbytes"
8e07c86e 8142 ;;
ecfc5424 8143esac
4633a7c4
LW
8144rp="Doubles must be aligned on a how-many-byte boundary?"
8145. ./myread
8146alignbytes="$ans"
8147$rm -f try.c try
85e6fe83 8148
4633a7c4
LW
8149: check for ordering of bytes in a long
8150case "$byteorder" in
8151'')
8152 $cat <<'EOM'
8153
8154In the following, larger digits indicate more significance. A big-endian
8155machine like a Pyramid or a Motorola 680?0 chip will come out to 4321. A
8156little-endian machine like a Vax or an Intel 80?86 chip would be 1234. Other
8157machines may have weird orders like 3412. A Cray will report 87654321. If
8158the test program works the default is probably right.
8159I'm now running the test program...
8160EOM
8161 $cat >try.c <<'EOCP'
8162#include <stdio.h>
8163main()
8164{
8165 int i;
8166 union {
8167 unsigned long l;
8168 char c[sizeof(long)];
8169 } u;
8170
8171 if (sizeof(long) > 4)
8172 u.l = (0x08070605L << 32) | 0x04030201L;
8173 else
8174 u.l = 0x04030201L;
8175 for (i = 0; i < sizeof(long); i++)
8176 printf("%c", u.c[i]+'0');
8177 printf("\n");
8178 exit(0);
8179}
8180EOCP
8181 xxx_prompt=y
8182 if $cc $ccflags try.c -o try >/dev/null 2>&1 && ./try > /dev/null; then
8183 dflt=`./try`
8184 case "$dflt" in
8185 [1-4][1-4][1-4][1-4]|12345678|87654321)
8186 echo "(The test program ran ok.)"
8187 echo "byteorder=$dflt"
8188 xxx_prompt=n
8189 ;;
8190 ????|????????) echo "(The test program ran ok.)" ;;
8191 *) echo "(The test program didn't run right for some reason.)" ;;
8192 esac
8193 else
8194 dflt='4321'
8195 cat <<'EOM'
8196(I can't seem to compile the test program. Guessing big-endian...)
8197EOM
8198 fi
8199 case "$xxx_prompt" in
8200 y)
8201 rp="What is the order of bytes in a long?"
8202 . ./myread
8203 byteorder="$ans"
8204 ;;
8205 *) byteorder=$dflt
ecfc5424
AD
8206 ;;
8207 esac
8208 ;;
8209esac
4633a7c4 8210$rm -f try.c try
85e6fe83 8211
4633a7c4 8212: how do we catenate cpp tokens here?
2304df62 8213echo " "
4633a7c4
LW
8214echo "Checking to see how your cpp does stuff like catenate tokens..." >&4
8215$cat >cpp_stuff.c <<'EOCP'
8216#define RCAT(a,b)a/**/b
8217#define ACAT(a,b)a ## b
8218RCAT(Rei,ser)
8219ACAT(Cir,cus)
8220EOCP
8221$cppstdin $cppflags $cppminus <cpp_stuff.c >cpp_stuff.out 2>&1
8222if $contains 'Circus' cpp_stuff.out >/dev/null 2>&1; then
8223 echo "Oh! Smells like ANSI's been here."
8224 echo "We can catify or stringify, separately or together!"
8225 cpp_stuff=42
8226elif $contains 'Reiser' cpp_stuff.out >/dev/null 2>&1; then
8227 echo "Ah, yes! The good old days!"
8228 echo "However, in the good old days we don't know how to stringify and"
8229 echo "catify at the same time."
8230 cpp_stuff=1
8231else
8232 $cat >&4 <<EOM
8233Hmm, I don't seem to be able to catenate tokens with your cpp. You're going
8234to have to edit the values of CAT[2-5] in config.h...
a0d0e21e 8235EOM
4633a7c4
LW
8236 cpp_stuff="/* Help! How do we handle cpp_stuff? */*/"
8237fi
8238$rm -f cpp_stuff.*
a0d0e21e 8239
4633a7c4
LW
8240: see if this is a db.h system
8241set db.h i_db
8242eval $inhdr
8243
8244case "$i_db" in
68dc0745 8245$define)
8246 : Check db version. We can not use version 2.
8247 echo " "
8248 echo "Checking Berkeley DB version ..." >&4
8249 $cat >try.c <<EOCP
8250#$d_const HASCONST
8251#ifndef HASCONST
8252#define const
8253#endif
8254#include <sys/types.h>
8255#include <stdio.h>
8256#include <db.h>
8257main()
8258{
6a1b87e5 8259#ifdef DB_VERSION_MAJOR /* DB version >= 2: not yet. */
68dc0745 8260 printf("You have Berkeley DB Version %d.%d\n",
8261 DB_VERSION_MAJOR, DB_VERSION_MINOR);
8262 printf("Perl currently only supports up to version 1.86.\n");
6a1b87e5 8263 exit(2);
68dc0745 8264#else
6a1b87e5
JH
8265#if defined(_DB_H_) && defined(BTREEMAGIC) && defined(HASHMAGIC)
8266 exit(0); /* DB version < 2: the coast is clear. */
8267#else
8268 exit(1); /* <db.h> not Berkeley DB? */
8269#endif
68dc0745 8270#endif
8271}
8272EOCP
8273 if $cc $optimize $ccflags $ldflags -o try try.c $libs && ./try; then
8274 echo 'Looks OK. (Perl supports up to version 1.86).' >&4
8275 else
8276 echo "I can't use your Berkeley DB. I'll disable it." >&4
8277 i_db=$undef
8278 case " $libs " in
8279 *"-ldb "*)
8280 : Remove db from list of libraries to use
8281 echo "Removing unusable -ldb from library list" >&4
8282 set `echo X $libs | $sed -e 's/-ldb / /' -e 's/-ldb$//'`
8283 shift
8284 libs="$*"
8285 echo "libs = $libs" >&4
8286 ;;
8287 esac
8288 fi
8289 $rm -f try.*
8290 ;;
8291esac
8292
8293case "$i_db" in
4633a7c4
LW
8294define)
8295 : Check the return type needed for hash
8296 echo " "
8297 echo "Checking return type needed for hash for Berkeley DB ..." >&4
8298 $cat >try.c <<EOCP
8299#$d_const HASCONST
8300#ifndef HASCONST
8301#define const
8302#endif
8303#include <sys/types.h>
8304#include <db.h>
8305u_int32_t hash_cb (ptr, size)
8306const void *ptr;
8307size_t size;
8308{
8309}
8310HASHINFO info;
8311main()
8312{
8313 info.hash = hash_cb;
8314}
8315EOCP
8316 if $cc $ccflags -c try.c >try.out 2>&1 ; then
8317 if $contains warning try.out >>/dev/null 2>&1 ; then
8318 db_hashtype='int'
8319 else
8320 db_hashtype='u_int32_t'
8321 fi
8322 else
68dc0745 8323 : XXX Maybe we should just give up here.
8324 db_hashtype=u_int32_t
8325 echo "Help: I can't seem to compile the db test program." >&4
8326 echo "Something's wrong, but I'll assume you use $db_hashtype." >&4
4633a7c4
LW
8327 fi
8328 $rm -f try.*
8329 echo "Your version of Berkeley DB uses $db_hashtype for hash."
8330 ;;
68dc0745 8331*) db_hashtype=u_int32_t
4633a7c4
LW
8332 ;;
8333esac
a0d0e21e 8334
4633a7c4
LW
8335case "$i_db" in
8336define)
8337 : Check the return type needed for prefix
8338 echo " "
8339 echo "Checking return type needed for prefix for Berkeley DB ..." >&4
8340 cat >try.c <<EOCP
8341#$d_const HASCONST
8342#ifndef HASCONST
8343#define const
8344#endif
8345#include <sys/types.h>
8346#include <db.h>
8347size_t prefix_cb (key1, key2)
8348const DBT *key1;
8349const DBT *key2;
8350{
8351}
8352BTREEINFO info;
8353main()
8354{
8355 info.prefix = prefix_cb;
8356}
8357EOCP
8358 if $cc $ccflags -c try.c >try.out 2>&1 ; then
8359 if $contains warning try.out >>/dev/null 2>&1 ; then
8360 db_prefixtype='int'
8361 else
8362 db_prefixtype='size_t'
8363 fi
8364 else
68dc0745 8365 db_prefixtype='size_t'
8366 : XXX Maybe we should just give up here.
8367 echo "Help: I can't seem to compile the db test program." >&4
8368 echo "Something's wrong, but I'll assume you use $db_prefixtype." >&4
4633a7c4
LW
8369 fi
8370 $rm -f try.*
8371 echo "Your version of Berkeley DB uses $db_prefixtype for prefix."
a0d0e21e 8372 ;;
68dc0745 8373*) db_prefixtype='size_t'
4633a7c4
LW
8374 ;;
8375esac
a0d0e21e 8376
4633a7c4
LW
8377: check for void type
8378echo " "
8379echo "Checking to see how well your C compiler groks the void type..." >&4
8380echo " "
8381$cat >&4 <<EOM
8382 Support flag bits are:
8383 1: basic void declarations.
8384 2: arrays of pointers to functions returning void.
8385 4: operations between pointers to and addresses of void functions.
8386 8: generic void pointers.
a0d0e21e 8387EOM
4633a7c4
LW
8388echo " "
8389case "$voidflags" in
8390'')
8391 $cat >try.c <<'EOCP'
8392#if TRY & 1
760ac839 8393void sub() {
4633a7c4 8394#else
760ac839 8395sub() {
4633a7c4
LW
8396#endif
8397 extern void moo(); /* function returning void */
8398 void (*goo)(); /* ptr to func returning void */
8399#if TRY & 8
8400 void *hue; /* generic ptr */
8401#endif
8402#if TRY & 2
8403 void (*foo[10])();
8404#endif
a0d0e21e 8405
4633a7c4
LW
8406#if TRY & 4
8407 if(goo == moo) {
8408 exit(0);
8409 }
8410#endif
8411 exit(0);
8412}
760ac839 8413main() { sub(); }
4633a7c4 8414EOCP
760ac839 8415 if $cc $ccflags -c -DTRY=$defvoidused try.c >.out 2>&1 ; then
4633a7c4
LW
8416 voidflags=$defvoidused
8417 echo "It appears to support void to the level $package wants ($defvoidused)."
8418 if $contains warning .out >/dev/null 2>&1; then
8419 echo "However, you might get some warnings that look like this:"
8420 $cat .out
8421 fi
8422 else
8423echo "Hmm, your compiler has some difficulty with void. Checking further..." >&4
760ac839 8424 if $cc $ccflags -c -DTRY=1 try.c >/dev/null 2>&1; then
4633a7c4 8425 echo "It supports 1..."
760ac839 8426 if $cc $ccflags -c -DTRY=3 try.c >/dev/null 2>&1; then
4633a7c4 8427 echo "It also supports 2..."
760ac839 8428 if $cc $ccflags -c -DTRY=7 try.c >/dev/null 2>&1; then
4633a7c4
LW
8429 voidflags=7
8430 echo "And it supports 4 but not 8 definitely."
8431 else
8432 echo "It doesn't support 4..."
760ac839 8433 if $cc $ccflags -c -DTRY=11 try.c >/dev/null 2>&1; then
4633a7c4
LW
8434 voidflags=11
8435 echo "But it supports 8."
8436 else
8437 voidflags=3
8438 echo "Neither does it support 8."
8439 fi
8440 fi
8441 else
8442 echo "It does not support 2..."
760ac839 8443 if $cc $ccflags -c -DTRY=13 try.c >/dev/null 2>&1; then
4633a7c4
LW
8444 voidflags=13
8445 echo "But it supports 4 and 8."
8446 else
760ac839 8447 if $cc $ccflags -c -DTRY=5 try.c >/dev/null 2>&1; then
4633a7c4
LW
8448 voidflags=5
8449 echo "And it supports 4 but has not heard about 8."
8450 else
8451 echo "However it supports 8 but not 4."
8452 fi
8453 fi
8454 fi
8455 else
8456 echo "There is no support at all for void."
8457 voidflags=0
8458 fi
8459 fi
8460esac
2c7991dc 8461: Only prompt user if support does not match the level we want
4633a7c4 8462case "$voidflags" in
2c7991dc 8463"$defvoidused") ;;
8464*)
8465 dflt="$voidflags";
4633a7c4 8466 rp="Your void support flags add up to what?"
a0d0e21e 8467 . ./myread
4633a7c4 8468 voidflags="$ans"
a0d0e21e
LW
8469 ;;
8470esac
4633a7c4 8471$rm -f try.* .out
a0d0e21e
LW
8472
8473: see what type file positions are declared as in the library
8474set fpos_t fpostype long stdio.h sys/types.h
8475eval $typedef
8476echo " "
8477dflt="$fpostype"
8478rp="What is the type for file position used by fsetpos()?"
2304df62 8479. ./myread
a0d0e21e 8480fpostype="$ans"
2304df62 8481
1aef975c
AD
8482: Store the full pathname to the sed program for use in the C program
8483full_sed=$sed
8484
2304df62 8485: see what type gids are declared as in the kernel
a0d0e21e
LW
8486set gid_t gidtype xxx stdio.h sys/types.h
8487eval $typedef
2304df62 8488case "$gidtype" in
a0d0e21e
LW
8489xxx)
8490 xxx=`./findhdr sys/user.h`
8491 set `grep 'groups\[NGROUPS\];' "$xxx" 2>/dev/null` unsigned short
8492 case $1 in
8493 unsigned) dflt="$1 $2" ;;
8494 *) dflt="$1" ;;
8495 esac
2304df62 8496 ;;
a0d0e21e 8497*) dflt="$gidtype";;
2304df62
AD
8498esac
8499echo " "
8500rp="What is the type for group ids returned by getgid()?"
8501. ./myread
a0d0e21e
LW
8502gidtype="$ans"
8503
2304df62
AD
8504: see if getgroups exists
8505set getgroups d_getgrps
8506eval $inlibc
8507
5cd24f17 8508: see if setgroups exists
8509set setgroups d_setgrps
8510eval $inlibc
8511
8cc95fdb 8512: Find type of 2nd arg to 'getgroups()' and 'setgroups()'
a0d0e21e 8513echo " "
5cd24f17 8514case "$d_getgrps$d_setgrps" in
8515*define*)
a0d0e21e 8516 case "$groupstype" in
2304df62
AD
8517 '') dflt="$gidtype" ;;
8518 *) dflt="$groupstype" ;;
a0d0e21e
LW
8519 esac
8520 $cat <<EOM
5cd24f17 8521What is the type of the second argument to getgroups() and setgroups()?
8522Usually this is the same as group ids, $gidtype, but not always.
2304df62
AD
8523
8524EOM
5cd24f17 8525 rp='What type is the second argument to getgroups() and setgroups()?'
a0d0e21e
LW
8526 . ./myread
8527 groupstype="$ans"
8528 ;;
8529*) groupstype="$gidtype";;
2304df62 8530esac
2304df62 8531
85e6fe83 8532: see what type lseek is declared as in the kernel
a0d0e21e
LW
8533set off_t lseektype long stdio.h sys/types.h
8534eval $typedef
2304df62 8535echo " "
a0d0e21e 8536dflt="$lseektype"
85e6fe83
LW
8537rp="What type is lseek's offset on this system declared as?"
8538. ./myread
8539lseektype="$ans"
2304df62 8540
8ff267be 8541echo " "
8542case "$make" in
8543'')
8544 make=`./loc make make $pth`
8545 case "$make" in
8546 /*) echo make is in $make. ;;
8547 ?:[\\/]*) echo make is in $make. ;;
8548 *) echo "I don't know where 'make' is, and my life depends on it." >&4
8549 echo "Go find a make program or fix your PATH setting!" >&4
8550 exit 1
8551 ;;
8552 esac
8553 ;;
8554*) echo make is in $make. ;;
8555esac
8556
8557$echo $n "Checking if your $make program sets \$(MAKE)... $c" >&4
8558case "$make_set_make" in
8559'')
8560 $sed 's/^X //' > testmake.mak << 'EOF'
8561Xall:
8562X @echo 'ac_maketemp="$(MAKE)"'
8563EOF
8564 : GNU make sometimes prints "make[1]: Entering...", which would confuse us.
8565 case "`$make -f testmake.mak 2>/dev/null`" in
8566 *ac_maketemp=*) make_set_make='#' ;;
8567 *) make_set_make="MAKE=$make" ;;
8568 esac
8569 $rm -f testmake.mak
8570 ;;
8571esac
8572case "$make_set_make" in
8573'#') echo "Yup, it does." >&4 ;;
8574*) echo "Nope, it doesn't." >&4 ;;
8575esac
8576
a0d0e21e
LW
8577: see what type is used for mode_t
8578set mode_t modetype int stdio.h sys/types.h
8579eval $typedef
8580dflt="$modetype"
85e6fe83 8581echo " "
a0d0e21e 8582rp="What type is used for file modes?"
85e6fe83 8583. ./myread
a0d0e21e 8584modetype="$ans"
85e6fe83 8585
2c7991dc 8586: locate the preferred pager for this system
8587case "$pager" in
8588'')
8589 dflt=''
8590 case "$pg" in
8591 /*) dflt=$pg;;
8592 esac
8593 case "$more" in
8594 /*) dflt=$more;;
8595 esac
8596 case "$less" in
8597 /*) dflt=$less;;
8598 esac
8599 case "$dflt" in
8600 '') dflt=/usr/ucb/more;;
8601 esac
8602 ;;
8603*) dflt="$pager";;
8604esac
8605echo " "
8606fn=f/
8607rp='What pager is used on your system?'
8608. ./getfile
8609pager="$ans"
8610
2304df62
AD
8611: Cruising for prototypes
8612echo " "
8613echo "Checking out function prototypes..." >&4
8614$cat >prototype.c <<'EOCP'
8615main(int argc, char *argv[]) {
8616 exit(0);}
8617EOCP
a0d0e21e 8618if $cc $ccflags -c prototype.c >prototype.out 2>&1 ; then
2304df62
AD
8619 echo "Your C compiler appears to support function prototypes."
8620 val="$define"
8621else
8622 echo "Your C compiler doesn't seem to understand function prototypes."
8623 val="$undef"
8624fi
8625set prototype
8626eval $setvar
8627$rm -f prototype*
8628
8629: check for size of random number generator
8630echo " "
8631case "$randbits" in
8632'')
8633 echo "Checking to see how many bits your rand function produces..." >&4
8ff267be 8634 $cat >try.c <<EOCP
8635#$i_unistd I_UNISTD
8636#$i_stdlib I_STDLIB
2304df62 8637#include <stdio.h>
8ff267be 8638#ifdef I_UNISTD
8639# include <unistd.h>
8640#endif
8641#ifdef I_STDLIB
8642# include <stdlib.h>
8643#endif
8644EOCP
8645 $cat >>try.c <<'EOCP'
2304df62
AD
8646main()
8647{
8648 register int i;
8649 register unsigned long tmp;
8650 register unsigned long max = 0L;
8651
8652 for (i = 1000; i; i--) {
8653 tmp = (unsigned long)rand();
8654 if (tmp > max) max = tmp;
8655 }
8656 for (i = 0; max; i++)
8657 max /= 2;
8658 printf("%d\n",i);
1e422769 8659 fflush(stdout);
2304df62
AD
8660}
8661EOCP
b971f6e4 8662 if $cc $ccflags $ldflags -o try try.c $libs >/dev/null 2>&1 ; then
2304df62
AD
8663 dflt=`try`
8664 else
8665 dflt='?'
8666 echo "(I can't seem to compile the test program...)"
8667 fi
8668 ;;
8669*)
8670 dflt="$randbits"
8671 ;;
8672esac
a0d0e21e
LW
8673rp='How many bits does your rand() function produce?'
8674. ./myread
8675randbits="$ans"
b971f6e4 8676$rm -f try.c try.o try
a0d0e21e
LW
8677
8678: see if ar generates random libraries by itself
8679echo " "
8680echo "Checking how to generate random libraries on your machine..." >&4
8681echo 'int bar1() { return bar2(); }' > bar1.c
8682echo 'int bar2() { return 2; }' > bar2.c
8683$cat > foo.c <<'EOP'
8684main() { printf("%d\n", bar1()); exit(0); }
8685EOP
8686$cc $ccflags -c bar1.c >/dev/null 2>&1
8687$cc $ccflags -c bar2.c >/dev/null 2>&1
8688$cc $ccflags -c foo.c >/dev/null 2>&1
5f05dabc 8689ar rc bar$lib_ext bar2.o bar1.o >/dev/null 2>&1
8690if $cc $ccflags $ldflags -o foobar foo.o bar$lib_ext $libs > /dev/null 2>&1 &&
a0d0e21e
LW
8691 ./foobar >/dev/null 2>&1; then
8692 echo "ar appears to generate random libraries itself."
8693 orderlib=false
8694 ranlib=":"
5f05dabc 8695elif ar ts bar$lib_ext >/dev/null 2>&1 &&
8696 $cc $ccflags $ldflags -o foobar foo.o bar$lib_ext $libs > /dev/null 2>&1 &&
a0d0e21e
LW
8697 ./foobar >/dev/null 2>&1; then
8698 echo "a table of contents needs to be added with 'ar ts'."
8699 orderlib=false
8700 ranlib="ar ts"
8701else
ecfc5424
AD
8702 case "$ranlib" in
8703 :) ranlib='';;
8704 '')
8705 ranlib=`./loc ranlib X /usr/bin /bin /usr/local/bin`
8706 $test -f $ranlib || ranlib=''
8707 ;;
8708 esac
a0d0e21e 8709 if $test -n "$ranlib"; then
ecfc5424 8710 echo "your system has '$ranlib'; we'll use that."
a0d0e21e
LW
8711 orderlib=false
8712 else
8713 echo "your system doesn't seem to support random libraries"
8714 echo "so we'll use lorder and tsort to order the libraries."
8715 orderlib=true
8716 ranlib=":"
8717 fi
8718fi
8719$rm -f foo* bar*
8720
a0d0e21e
LW
8721: see if sys/select.h has to be included
8722set sys/select.h i_sysselct
8723eval $inhdr
8724
8725: see if we should include time.h, sys/time.h, or both
8726echo " "
8727echo "Testing to see if we should include <time.h>, <sys/time.h> or both." >&4
8728$echo $n "I'm now running the test program...$c"
8729$cat >try.c <<'EOCP'
8730#include <sys/types.h>
8731#ifdef I_TIME
8732#include <time.h>
8733#endif
8734#ifdef I_SYSTIME
8735#ifdef SYSTIMEKERNEL
8736#define KERNEL
8737#endif
8738#include <sys/time.h>
8739#endif
8740#ifdef I_SYSSELECT
8741#include <sys/select.h>
8742#endif
8743main()
8744{
8745 struct tm foo;
8746#ifdef S_TIMEVAL
8747 struct timeval bar;
8748#endif
8749#ifdef S_TIMEZONE
8750 struct timezone tzp;
8751#endif
8752 if (foo.tm_sec == foo.tm_sec)
8753 exit(0);
8754#ifdef S_TIMEVAL
8755 if (bar.tv_sec == bar.tv_sec)
8756 exit(0);
8757#endif
8758 exit(1);
8759}
8760EOCP
8761flags=''
40a7a20a 8762for s_timezone in '-DS_TIMEZONE' ''; do
a0d0e21e
LW
8763sysselect=''
8764for s_timeval in '-DS_TIMEVAL' ''; do
8765for i_systimek in '' '-DSYSTIMEKERNEL'; do
8766for i_time in '' '-DI_TIME'; do
8767for i_systime in '-DI_SYSTIME' ''; do
8768 case "$flags" in
8769 '') $echo $n ".$c"
8770 if $cc $ccflags \
8771 $i_time $i_systime $i_systimek $sysselect $s_timeval $s_timezone \
8772 try.c -o try >/dev/null 2>&1 ; then
8773 set X $i_time $i_systime $i_systimek $sysselect $s_timeval
8774 shift
8775 flags="$*"
8776 echo " "
8777 $echo $n "Succeeded with $flags$c"
8778 fi
8779 ;;
8780 esac
8781done
8782done
8783done
8784done
40a7a20a 8785done
a0d0e21e
LW
8786timeincl=''
8787echo " "
8788case "$flags" in
8789*SYSTIMEKERNEL*) i_systimek="$define"
8790 timeincl=`./findhdr sys/time.h`
8791 echo "We'll include <sys/time.h> with KERNEL defined." >&4;;
8792*) i_systimek="$undef";;
8793esac
8794case "$flags" in
8795*I_TIME*) i_time="$define"
8796 timeincl=`./findhdr time.h`" $timeincl"
8797 echo "We'll include <time.h>." >&4;;
8798*) i_time="$undef";;
8799esac
8800case "$flags" in
8801*I_SYSTIME*) i_systime="$define"
8802 timeincl=`./findhdr sys/time.h`" $timeincl"
8803 echo "We'll include <sys/time.h>." >&4;;
8804*) i_systime="$undef";;
8805esac
2304df62
AD
8806$rm -f try.c try
8807
a0d0e21e
LW
8808: check for fd_set items
8809$cat <<EOM
8810
8811Checking to see how well your C compiler handles fd_set and friends ...
8812EOM
8813$cat >fd_set.c <<EOCP
8814#$i_systime I_SYS_TIME
8815#$i_sysselct I_SYS_SELECT
8816#$d_socket HAS_SOCKET
8817#include <sys/types.h>
8818#ifdef HAS_SOCKET
8819#include <sys/socket.h> /* Might include <sys/bsdtypes.h> */
8820#endif
8821#ifdef I_SYS_TIME
8822#include <sys/time.h>
a4f3eea9 8823#endif
a0d0e21e
LW
8824#ifdef I_SYS_SELECT
8825#include <sys/select.h>
8826#endif
a0d0e21e
LW
8827main() {
8828 fd_set fds;
8829
8830#ifdef TRYBITS
8831 if(fds.fds_bits);
8832#endif
8833
8834#if defined(FD_SET) && defined(FD_CLR) && defined(FD_ISSET) && defined(FD_ZERO)
8835 exit(0);
8836#else
8837 exit(1);
8838#endif
8839}
8840EOCP
8841if $cc $ccflags -DTRYBITS fd_set.c -o fd_set >fd_set.out 2>&1 ; then
8842 d_fds_bits="$define"
8843 d_fd_set="$define"
8844 echo "Well, your system knows about the normal fd_set typedef..." >&4
8845 if ./fd_set; then
8846 echo "and you have the normal fd_set macros (just as I'd expect)." >&4
8847 d_fd_macros="$define"
85e6fe83 8848 else
a0d0e21e
LW
8849 $cat >&4 <<'EOM'
8850but not the normal fd_set macros! Gaaack! I'll have to cover for you.
8851EOM
8852 d_fd_macros="$undef"
85e6fe83
LW
8853 fi
8854else
a0d0e21e
LW
8855 $cat <<'EOM'
8856Hmm, your compiler has some difficulty with fd_set. Checking further...
8857EOM
8858 if $cc $ccflags fd_set.c -o fd_set >fd_set.out 2>&1 ; then
8859 d_fds_bits="$undef"
8860 d_fd_set="$define"
8861 echo "Well, your system has some sort of fd_set available..." >&4
8862 if ./fd_set; then
8863 echo "and you have the normal fd_set macros." >&4
8864 d_fd_macros="$define"
8865 else
8866 $cat <<'EOM'
8867but not the normal fd_set macros! Gross! More work for me...
8868EOM
8869 d_fd_macros="$undef"
8870 fi
85e6fe83 8871 else
a0d0e21e
LW
8872 echo "Well, you got zip. That's OK, I can roll my own fd_set stuff." >&4
8873 d_fd_set="$undef"
8874 d_fds_bits="$undef"
8875 d_fd_macros="$undef"
85e6fe83
LW
8876 fi
8877fi
a0d0e21e
LW
8878$rm -f fd_set*
8879
8880
8881: check for type of arguments to select. This will only really
8882: work if the system supports prototypes and provides one for
8883: select.
8884case "$d_select" in
8885$define)
8886 : Make initial guess
8887 case "$selecttype" in
8888 ''|' ')
8889 case "$d_fd_set" in
8890 $define) xxx='fd_set *' ;;
8891 *) xxx='int *' ;;
8892 esac
8893 ;;
8894 *) xxx="$selecttype"
8895 ;;
8896 esac
8897 : backup guess
8898 case "$xxx" in
8899 'fd_set *') yyy='int *' ;;
8900 'int *') yyy='fd_set *' ;;
8901 esac
85e6fe83 8902
2304df62
AD
8903 $cat <<EOM
8904
a0d0e21e 8905Checking to see what type of arguments are expected by select().
2304df62 8906EOM
a0d0e21e
LW
8907 $cat >try.c <<EOCP
8908#$i_systime I_SYS_TIME
8909#$i_sysselct I_SYS_SELECT
8910#$d_socket HAS_SOCKET
8911#include <sys/types.h>
8912#ifdef HAS_SOCKET
8913#include <sys/socket.h> /* Might include <sys/bsdtypes.h> */
8914#endif
8915#ifdef I_SYS_TIME
8916#include <sys/time.h>
8ff267be 8917#endif
a0d0e21e
LW
8918#ifdef I_SYS_SELECT
8919#include <sys/select.h>
8920#endif
a0d0e21e
LW
8921main()
8922{
8923 int width;
8924 Select_fd_set_t readfds;
8925 Select_fd_set_t writefds;
8926 Select_fd_set_t exceptfds;
8927 struct timeval timeout;
8928 select(width, readfds, writefds, exceptfds, &timeout);
8929 exit(0);
8930}
8931EOCP
8932 if $cc $ccflags -c -DSelect_fd_set_t="$xxx" try.c >/dev/null 2>&1 ; then
8933 selecttype="$xxx"
8934 echo "Your system uses $xxx for the arguments to select." >&4
8935 elif $cc $ccflags -c -DSelect_fd_set_t="$yyy" try.c >/dev/null 2>&1 ; then
8936 selecttype="$yyy"
8937 echo "Your system uses $yyy for the arguments to select." >&4
8938 else
8939 rp='What is the type for the 2nd, 3rd, and 4th arguments to select?'
8940 dflt="$xxx"
8941 . ./myread
8942 selecttype="$ans"
8943 fi
8944 $rm -f try.[co]
8945 ;;
8e07c86e 8946*) selecttype='int *'
a0d0e21e
LW
8947 ;;
8948esac
2304df62 8949
8e07c86e
AD
8950: Trace out the files included by signal.h, then look for SIGxxx names.
8951: Remove SIGARRAYSIZE used by HPUX.
4633a7c4 8952: Remove SIGTYP void lines used by OS2.
8e07c86e
AD
8953xxx=`echo '#include <signal.h>' |
8954 $cppstdin $cppminus $cppflags 2>/dev/null |
8955 $grep '^[ ]*#.*include' |
8956 $awk "{print \\$$fieldn}" | $sed 's!"!!g' | $sort | $uniq`
8957: Check this list of files to be sure we have parsed the cpp output ok.
8958: This will also avoid potentially non-existent files, such
8959: as ../foo/bar.h
8960xxxfiles=''
8961for xx in $xxx /dev/null ; do
8962 $test -f "$xx" && xxxfiles="$xxxfiles $xx"
8963done
8964: If we have found no files, at least try signal.h
8965case "$xxxfiles" in
8966'') xxxfiles=`./findhdr signal.h` ;;
8967esac
8968xxx=`awk '
4633a7c4 8969$1 ~ /^#define$/ && $2 ~ /^SIG[A-Z0-9]*$/ && $2 !~ /SIGARRAYSIZE/ && $3 !~ /void/ {
8e07c86e
AD
8970 print substr($2, 4, 20)
8971}
4633a7c4 8972$1 == "#" && $2 ~ /^define$/ && $3 ~ /^SIG[A-Z0-9]*$/ && $3 !~ /SIGARRAYSIZE/ && $4 !~ /void/ {
8e07c86e
AD
8973 print substr($3, 4, 20)
8974}' $xxxfiles`
8975: Append some common names just in case the awk scan failed.
8976xxx="$xxx ABRT ALRM BUS CHLD CLD CONT DIL EMT FPE HUP ILL INT IO IOT KILL"
8977xxx="$xxx LOST PHONE PIPE POLL PROF PWR QUIT SEGV STKFLT STOP SYS TERM TRAP"
8978xxx="$xxx TSTP TTIN TTOU URG USR1 USR2 USR3 USR4 VTALRM"
8979xxx="$xxx WINCH WIND WINDOW XCPU XFSZ"
8980: generate a few handy files for later
4633a7c4
LW
8981$cat > signal.c <<'EOP'
8982#include <sys/types.h>
8983#include <signal.h>
8984int main() {
760ac839
LW
8985
8986/* Strange style to avoid deeply-nested #if/#else/#endif */
8987#ifndef NSIG
8988# ifdef _NSIG
8989# define NSIG (_NSIG)
8990# endif
8991#endif
8992
8993#ifndef NSIG
8994# ifdef SIGMAX
8995# define NSIG (SIGMAX+1)
8996# endif
8997#endif
8998
8999#ifndef NSIG
9000# ifdef SIG_MAX
9001# define NSIG (SIG_MAX+1)
9002# endif
9003#endif
9004
9005#ifndef NSIG
9006# ifdef MAXSIG
9007# define NSIG (MAXSIG+1)
9008# endif
4633a7c4 9009#endif
760ac839
LW
9010
9011#ifndef NSIG
9012# ifdef MAX_SIG
9013# define NSIG (MAX_SIG+1)
9014# endif
9015#endif
9016
9017#ifndef NSIG
9018# ifdef SIGARRAYSIZE
9019# define NSIG (SIGARRAYSIZE+1) /* Not sure of the +1 */
9020# endif
9021#endif
9022
9023#ifndef NSIG
9024# ifdef _sys_nsig
9025# define NSIG (_sys_nsig) /* Solaris 2.5 */
9026# endif
9027#endif
9028
9029/* Default to some arbitrary number that's big enough to get most
9030 of the common signals.
9031*/
9032#ifndef NSIG
9033# define NSIG 50
4633a7c4 9034#endif
760ac839
LW
9035
9036printf("NSIG %d\n", NSIG);
9037
4633a7c4
LW
9038EOP
9039echo $xxx | $tr ' ' '\012' | $sort | $uniq | $awk '
8e07c86e
AD
9040{
9041 printf "#ifdef SIG"; printf $1; printf "\n"
9042 printf "printf(\""; printf $1; printf " %%d\\n\",SIG";
9043 printf $1; printf ");\n"
9044 printf "#endif\n"
2304df62 9045}
2304df62 9046END {
8e07c86e 9047 printf "}\n";
2304df62 9048}
4633a7c4
LW
9049' >>signal.c
9050$cat >signal.awk <<'EOP'
9051BEGIN { ndups = 0 }
9052$1 ~ /^NSIG$/ { nsig = $2 }
9053($1 !~ /^NSIG$/) && (NF == 2) {
9054 if ($2 > maxsig) { maxsig = $2 }
9055 if (sig_name[$2]) {
9056 dup_name[ndups] = $1
9057 dup_num[ndups] = $2
9058 ndups++
9059 }
9060 else {
9061 sig_name[$2] = $1
9062 sig_num[$2] = $2
9063 }
9064
9065}
9066END {
9067 if (nsig == 0) { nsig = maxsig + 1 }
9068 for (n = 1; n < nsig; n++) {
9069 if (sig_name[n]) {
9070 printf("%s %d\n", sig_name[n], sig_num[n])
9071 }
9072 else {
9073 printf("NUM%d %d\n", n, n)
9074 }
9075 }
9076 for (n = 0; n < ndups; n++) {
9077 printf("%s %d\n", dup_name[n], dup_num[n])
9078 }
9079}
9080EOP
9081$cat >signal_cmd <<EOS
8e07c86e
AD
9082$startsh
9083$test -s signal.lst && exit 0
9084if $cc $ccflags signal.c -o signal $ldflags >/dev/null 2>&1; then
4633a7c4 9085 ./signal | $sort -n +1 | $uniq | $awk -f signal.awk >signal.lst
8e07c86e
AD
9086else
9087 echo "(I can't seem be able to compile the test program -- Guessing)"
9088 echo 'kill -l' >signal
9089 set X \`csh -f <signal\`
9090 $rm -f signal
2304df62 9091 shift
8e07c86e
AD
9092 case \$# in
9093 0) set HUP INT QUIT ILL TRAP ABRT EMT FPE KILL BUS SEGV SYS PIPE ALRM TERM;;
2304df62 9094 esac
8e07c86e
AD
9095 echo \$@ | $tr ' ' '\012' | \
9096 $awk '{ printf $1; printf " %d\n", ++s; }' >signal.lst
9097fi
9098$rm -f signal.c signal signal.o
9099EOS
4633a7c4
LW
9100chmod a+x signal_cmd
9101$eunicefix signal_cmd
8e07c86e
AD
9102
9103: generate list of signal names
9104echo " "
9105case "$sig_name" in
4633a7c4
LW
9106'') sig_num='' ;;
9107esac
9108case "$sig_num" in
9109'') sig_name='' ;;
9110esac
9111case "$sig_name" in
8e07c86e 9112'')
4633a7c4
LW
9113 echo "Generating a list of signal names and numbers..." >&4
9114 ./signal_cmd
8e07c86e
AD
9115 sig_name=`$awk '{printf "%s ", $1}' signal.lst`
9116 sig_name="ZERO $sig_name"
4633a7c4
LW
9117 sig_num=`$awk '{printf "%d ", $2}' signal.lst`
9118 sig_num="0 $sig_num"
a0d0e21e 9119 ;;
2304df62 9120esac
a0d0e21e
LW
9121echo "The following signals are available:"
9122echo " "
9123echo $sig_name | $awk \
9124'BEGIN { linelen = 0 }
9125{
8e07c86e 9126 for (i = 1; i <= NF; i++) {
a0d0e21e
LW
9127 name = "SIG" $i " "
9128 linelen = linelen + length(name)
9129 if (linelen > 70) {
9130 printf "\n"
9131 linelen = length(name)
9132 }
9133 printf "%s", name
9134 }
8e07c86e 9135 printf "\n"
a0d0e21e 9136}'
4633a7c4 9137$rm -f signal signal.c signal.awk signal.lst signal_cmd
a0d0e21e
LW
9138
9139: see what type is used for size_t
9140set size_t sizetype 'unsigned int' stdio.h sys/types.h
9141eval $typedef
9142dflt="$sizetype"
9143echo " "
9144rp="What type is used for the length parameter for string functions?"
2304df62 9145. ./myread
a0d0e21e
LW
9146sizetype="$ans"
9147
9148: see what type is used for signed size_t
9149set ssize_t ssizetype int stdio.h sys/types.h
9150eval $typedef
9151dflt="$ssizetype"
9152$cat > ssize.c <<EOM
9153#include <stdio.h>
9154#include <sys/types.h>
9155#define Size_t $sizetype
9156#define SSize_t $dflt
9157main()
9158{
9159 if (sizeof(Size_t) == sizeof(SSize_t))
9160 printf("$dflt\n");
9161 else if (sizeof(Size_t) == sizeof(int))
9162 printf("int\n");
9163 else
9164 printf("long\n");
d97d40b5 9165 fflush(stdout);
760ac839 9166 exit(0);
a0d0e21e
LW
9167}
9168EOM
9169echo " "
24fef2a7
AD
9170# If $libs contains -lsfio, and sfio is mis-configured, then it
9171# sometimes (apparently) runs and exits with a 0 status, but with no
9172# output!. Thus we check with test -s whether we actually got any
9173# output. I think it has to do with sfio's use of _exit vs. exit,
9174# but I don't know for sure. --Andy Dougherty 1/27/97.
9175if $cc $optimize $ccflags $ldflags -o ssize ssize.c $libs > /dev/null 2>&1 &&
9176 ./ssize > ssize.out 2>/dev/null && test -s ssize.out ; then
9177 ssizetype=`$cat ssize.out`
a0d0e21e
LW
9178 echo "I'll be using $ssizetype for functions returning a byte count." >&4
9179else
24fef2a7
AD
9180 $cat >&4 <<EOM
9181
9182Help! I can't compile and run the ssize_t test program: please enlighten me!
9183(This is probably a misconfiguration in your system or libraries, and
9184you really ought to fix it. Still, I'll try anyway.)
a0d0e21e
LW
9185
9186I need a type that is the same size as $sizetype, but is guaranteed to
24fef2a7 9187be signed. Common values are ssize_t, int and long.
a0d0e21e
LW
9188
9189EOM
9190 rp="What signed type is the same size as $sizetype?"
9191 . ./myread
9192 ssizetype="$ans"
9193fi
24fef2a7 9194$rm -f ssize ssize.[co] ssize.out
a0d0e21e
LW
9195
9196: see what type of char stdio uses.
9197echo " "
9198if $contains 'unsigned.*char.*_ptr;' `./findhdr stdio.h` >/dev/null 2>&1 ; then
9199 echo "Your stdio uses unsigned chars." >&4
9200 stdchar="unsigned char"
9201else
9202 echo "Your stdio uses signed chars." >&4
9203 stdchar="char"
9204fi
9205
9206: see if time exists
9207echo " "
ecfc5424 9208if set time val -f d_time; eval $csym; $val; then
a0d0e21e 9209 echo 'time() found.' >&4
ecfc5424 9210 val="$define"
a0d0e21e
LW
9211 set time_t timetype long stdio.h sys/types.h
9212 eval $typedef
9213 dflt="$timetype"
9214 echo " "
c2960299 9215 rp="What type is returned by time() on this system?"
a0d0e21e
LW
9216 . ./myread
9217 timetype="$ans"
9218else
9219 echo 'time() not found, hope that will do.' >&4
ecfc5424 9220 val="$undef"
a0d0e21e
LW
9221 timetype='int';
9222fi
a0d0e21e
LW
9223set d_time
9224eval $setvar
9225
9226: see what type uids are declared as in the kernel
9227set uid_t uidtype xxx stdio.h sys/types.h
9228eval $typedef
9229case "$uidtype" in
9230xxx)
9231 xxx=`./findhdr sys/user.h`
9232 set `grep '_ruid;' "$xxx" 2>/dev/null` unsigned short
9233 case $1 in
9234 unsigned) dflt="$1 $2" ;;
9235 *) dflt="$1" ;;
9236 esac
9237 ;;
4633a7c4
LW
9238*) dflt="$uidtype";;
9239esac
9240echo " "
9241rp="What is the type for user ids returned by getuid()?"
9242. ./myread
9243uidtype="$ans"
9244
9245: see if dbm.h is available
9246: see if dbmclose exists
9247set dbmclose d_dbmclose
9248eval $inlibc
9249
9250case "$d_dbmclose" in
9251$define)
9252 set dbm.h i_dbm
9253 eval $inhdr
9254 case "$i_dbm" in
9255 $define)
9256 val="$undef"
9257 set i_rpcsvcdbm
9258 eval $setvar
9259 ;;
9260 *) set rpcsvc/dbm.h i_rpcsvcdbm
9261 eval $inhdr
9262 ;;
9263 esac
9264 ;;
9265*) echo "We won't be including <dbm.h>"
9266 val="$undef"
9267 set i_dbm
9268 eval $setvar
9269 val="$undef"
9270 set i_rpcsvcdbm
9271 eval $setvar
9272 ;;
a0d0e21e 9273esac
2304df62 9274
2304df62
AD
9275: see if this is a sys/file.h system
9276val=''
9277set sys/file.h val
9278eval $inhdr
9279
8e07c86e 9280: do we need to include sys/file.h ?
2304df62
AD
9281case "$val" in
9282"$define")
9283 echo " "
9284 if $h_sysfile; then
9285 val="$define"
9286 echo "We'll be including <sys/file.h>." >&4
9287 else
9288 val="$undef"
9289 echo "We won't be including <sys/file.h>." >&4
9290 fi
9291 ;;
9292*)
9293 h_sysfile=false
9294 ;;
9295esac
9296set i_sysfile
9297eval $setvar
9298
9299: see if fcntl.h is there
9300val=''
9301set fcntl.h val
9302eval $inhdr
9303
9304: see if we can include fcntl.h
9305case "$val" in
9306"$define")
9307 echo " "
9308 if $h_fcntl; then
9309 val="$define"
9310 echo "We'll be including <fcntl.h>." >&4
9311 else
9312 val="$undef"
9313 if $h_sysfile; then
9314 echo "We don't need to include <fcntl.h> if we include <sys/file.h>." >&4
9315 else
9316 echo "We won't be including <fcntl.h>." >&4
9317 fi
9318 fi
9319 ;;
9320*)
9321 h_fcntl=false
9322 val="$undef"
9323 ;;
9324esac
9325set i_fcntl
9326eval $setvar
9327
2304df62
AD
9328: see if this is an grp system
9329set grp.h i_grp
9330eval $inhdr
9331
4633a7c4
LW
9332: see if locale.h is available
9333set locale.h i_locale
9334eval $inhdr
9335
a0d0e21e
LW
9336: see if this is a math.h system
9337set math.h i_math
9338eval $inhdr
9339
4633a7c4
LW
9340: see if ndbm.h is available
9341set ndbm.h t_ndbm
9342eval $inhdr
9343case "$t_ndbm" in
9344$define)
9345 : see if dbm_open exists
9346 set dbm_open d_dbm_open
9347 eval $inlibc
9348 case "$d_dbm_open" in
9349 $undef)
9350 t_ndbm="$undef"
9351 echo "We won't be including <ndbm.h>"
9352 ;;
9353 esac
9354 ;;
9355esac
9356val="$t_ndbm"
9357set i_ndbm
9358eval $setvar
9359
85e6fe83 9360: see if net/errno.h is available
a0d0e21e
LW
9361val=''
9362set net/errno.h val
2304df62 9363eval $inhdr
a0d0e21e 9364
85e6fe83 9365: Unfortunately, it causes problems on some systems. Arrgh.
a0d0e21e
LW
9366case "$val" in
9367$define)
9368 cat > try.c <<'EOM'
85e6fe83
LW
9369#include <stdio.h>
9370#include <errno.h>
9371#include <net/errno.h>
9372int func()
9373{
a0d0e21e 9374 return ENOTSOCK;
85e6fe83
LW
9375}
9376EOM
a0d0e21e
LW
9377 if $cc $ccflags -c try.c >/dev/null 2>&1; then
9378 echo "We'll be including <net/errno.h>." >&4
9379 else
9380 echo "We won't be including <net/errno.h>." >&4
9381 val="$undef"
9382 fi
9383 $rm -f try.* try
9384 ;;
85e6fe83 9385esac
a0d0e21e
LW
9386set i_neterrno
9387eval $setvar
2304df62
AD
9388
9389: get C preprocessor symbols handy
9390echo " "
ecfc5424 9391$echo $n "Hmm... $c"
a0d0e21e 9392echo $al | $tr ' ' '\012' >Cppsym.know
2304df62
AD
9393$cat <<EOSS >Cppsym
9394$startsh
9395case "\$1" in
9396-l) list=true
9397 shift
9398 ;;
9399esac
9400unknown=''
9401case "\$list\$#" in
94021|2)
9403 for sym do
9404 if $contains "^\$1$" Cppsym.true >/dev/null 2>&1; then
9405 exit 0
9406 elif $contains "^\$1$" Cppsym.know >/dev/null 2>&1; then
9407 :
9408 else
9409 unknown="\$unknown \$sym"
9410 fi
9411 done
9412 set X \$unknown
9413 shift
9414 ;;
9415esac
9416case \$# in
94170) exit 1;;
9418esac
9419echo \$* | $tr ' ' '\012' | $sed -e 's/\(.*\)/\\
9420#ifdef \1\\
9421exit 0; _ _ _ _\1\\ \1\\
9422#endif\\
9423/' >Cppsym\$\$
9424echo "exit 1; _ _ _" >>Cppsym\$\$
9425$cppstdin $cppminus <Cppsym\$\$ | $grep '^exit [01]; _ _' >Cppsym2\$\$
9426case "\$list" in
9427true) $awk 'NF > 5 {print substr(\$6,2,100)}' <Cppsym2\$\$ ;;
9428*)
9429 sh Cppsym2\$\$
9430 status=\$?
9431 ;;
9432esac
9433$rm -f Cppsym\$\$ Cppsym2\$\$
9434exit \$status
9435EOSS
9436chmod +x Cppsym
9437$eunicefix Cppsym
ecfc5424
AD
9438./Cppsym -l $al | $sort | $grep -v '^$' >Cppsym.true
9439
9440: now check the C compiler for additional symbols
9441$cat >ccsym <<EOS
9442$startsh
9443$cat >tmp.c <<EOF
9444extern int foo;
9445EOF
9446for i in \`$cc -v -c tmp.c 2>&1\`
9447do
9448 case "\$i" in
9449 -D*) echo "\$i" | $sed 's/^-D//';;
9450 -A*) $test "$gccversion" && echo "\$i" | $sed 's/^-A\(.*\)(\(.*\))/\1=\2/';;
9451 esac
9452done
9453$rm -f try.c
9454EOS
9455chmod +x ccsym
9456$eunicefix ccsym
9457./ccsym | $sort | $uniq >ccsym.raw
f0b7e567
AD
9458$awk '/\=/ { print $0; next }
9459 { print $0"=1" }' ccsym.raw >ccsym.list
ecfc5424
AD
9460$awk '{ print $0"=1" }' Cppsym.true >ccsym.true
9461$comm -13 ccsym.true ccsym.list >ccsym.own
9462$comm -12 ccsym.true ccsym.list >ccsym.com
9463$comm -23 ccsym.true ccsym.list >ccsym.cpp
9464also=''
9465symbols='symbols'
9466if $test -z ccsym.raw; then
9467 echo "Your C compiler doesn't seem to define any symbol!" >&4
9468 echo " "
9469 echo "However, your C preprocessor defines the following ones:"
9470 $cat Cppsym.true
9471else
9472 if $test -s ccsym.com; then
9473 echo "Your C compiler and pre-processor define these symbols:"
9474 $sed -e 's/\(.*\)=.*/\1/' ccsym.com
9475 also='also '
9476 symbols='ones'
9477 $test "$silent" || sleep 1
9478 fi
9479 if $test -s ccsym.cpp; then
9480 $test "$also" && echo " "
9481 echo "Your C pre-processor ${also}defines the following $symbols:"
9482 $sed -e 's/\(.*\)=.*/\1/' ccsym.cpp
9483 also='further '
9484 $test "$silent" || sleep 1
9485 fi
9486 if $test -s ccsym.own; then
9487 $test "$also" && echo " "
9488 echo "Your C compiler ${also}defines the following cpp variables:"
9489 $sed -e 's/\(.*\)=1/\1/' ccsym.own
9490 $sed -e 's/\(.*\)=.*/\1/' ccsym.own | $uniq >>Cppsym.true
9491 $test "$silent" || sleep 1
9492 fi
9493fi
9494$rm -f ccsym*
2304df62
AD
9495
9496: see if this is a termio system
9497val="$undef"
9498val2="$undef"
9499val3="$undef"
9500if $test `./findhdr termios.h`; then
9501 set tcsetattr i_termios
9502 eval $inlibc
9503 val3="$i_termios"
9504fi
9505echo " "
9506case "$val3" in
9507"$define") echo "You have POSIX termios.h... good!" >&4;;
ecfc5424 9508*) if ./Cppsym pyr; then
2304df62
AD
9509 case "`/bin/universe`" in
9510 ucb) if $test `./findhdr sgtty.h`; then
9511 val2="$define"
9512 echo "<sgtty.h> found." >&4
9513 else
9514 echo "System is pyramid with BSD universe."
9515 echo "<sgtty.h> not found--you could have problems." >&4
9516 fi;;
9517 *) if $test `./findhdr termio.h`; then
9518 val="$define"
9519 echo "<termio.h> found." >&4
9520 else
9521 echo "System is pyramid with USG universe."
9522 echo "<termio.h> not found--you could have problems." >&4
9523 fi;;
9524 esac
ecfc5424 9525 elif ./usg; then
2304df62
AD
9526 if $test `./findhdr termio.h`; then
9527 echo "<termio.h> found." >&4
9528 val="$define"
9529 elif $test `./findhdr sgtty.h`; then
9530 echo "<sgtty.h> found." >&4
9531 val2="$define"
9532 else
9533echo "Neither <termio.h> nor <sgtty.h> found--you could have problems." >&4
9534 fi
9535 else
9536 if $test `./findhdr sgtty.h`; then
9537 echo "<sgtty.h> found." >&4
9538 val2="$define"
9539 elif $test `./findhdr termio.h`; then
9540 echo "<termio.h> found." >&4
9541 val="$define"
9542 else
9543echo "Neither <sgtty.h> nor <termio.h> found--you could have problems." >&4
9544 fi
9545 fi;;
9546esac
9547set i_termio; eval $setvar
9548val=$val2; set i_sgtty; eval $setvar
9549val=$val3; set i_termios; eval $setvar
9550
a0d0e21e 9551: see if stdarg is available
2304df62 9552echo " "
a0d0e21e
LW
9553if $test `./findhdr stdarg.h`; then
9554 echo "<stdarg.h> found." >&4
9555 valstd="$define"
2304df62 9556else
a0d0e21e
LW
9557 echo "<stdarg.h> NOT found." >&4
9558 valstd="$undef"
2304df62 9559fi
85e6fe83 9560
a0d0e21e 9561: see if varags is available
2304df62
AD
9562echo " "
9563if $test `./findhdr varargs.h`; then
2304df62
AD
9564 echo "<varargs.h> found." >&4
9565else
2304df62
AD
9566 echo "<varargs.h> NOT found, but that's ok (I hope)." >&4
9567fi
2304df62
AD
9568
9569: set up the varargs testing programs
9570$cat > varargs.c <<EOP
9571#ifdef I_STDARG
9572#include <stdarg.h>
9573#endif
9574#ifdef I_VARARGS
9575#include <varargs.h>
9576#endif
9577
9578#ifdef I_STDARG
9579int f(char *p, ...)
9580#else
9581int f(va_alist)
9582va_dcl
9583#endif
9584{
9585 va_list ap;
9586#ifndef I_STDARG
9587 char *p;
9588#endif
9589#ifdef I_STDARG
9590 va_start(ap,p);
9591#else
9592 va_start(ap);
9593 p = va_arg(ap, char *);
9594#endif
9595 va_end(ap);
9596}
9597EOP
9598$cat > varargs <<EOP
40a7a20a 9599$startsh
2304df62
AD
9600if $cc -c $ccflags -D\$1 varargs.c >/dev/null 2>&1; then
9601 echo "true"
9602else
9603 echo "false"
9604fi
9605$rm -f varargs.o
9606EOP
9607chmod +x varargs
9608
9609: now check which varargs header should be included
9610echo " "
9611i_varhdr=''
a0d0e21e 9612case "$valstd" in
2304df62
AD
9613"$define")
9614 if `./varargs I_STDARG`; then
a0d0e21e 9615 val='stdarg.h'
2304df62 9616 elif `./varargs I_VARARGS`; then
a0d0e21e 9617 val='varargs.h'
2304df62
AD
9618 fi
9619 ;;
9620*)
9621 if `./varargs I_VARARGS`; then
a0d0e21e 9622 val='varargs.h'
2304df62
AD
9623 fi
9624 ;;
9625esac
a0d0e21e 9626case "$val" in
2304df62
AD
9627'')
9628echo "I could not find the definition for va_dcl... You have problems..." >&4
a0d0e21e
LW
9629 val="$undef"; set i_stdarg; eval $setvar
9630 val="$undef"; set i_varargs; eval $setvar
2304df62 9631 ;;
a0d0e21e
LW
9632*)
9633 set i_varhdr
9634 eval $setvar
9635 case "$i_varhdr" in
9636 stdarg.h)
9637 val="$define"; set i_stdarg; eval $setvar
9638 val="$undef"; set i_varargs; eval $setvar
9639 ;;
9640 varargs.h)
9641 val="$undef"; set i_stdarg; eval $setvar
9642 val="$define"; set i_varargs; eval $setvar
9643 ;;
9644 esac
9645 echo "We'll include <$i_varhdr> to get va_dcl definition." >&4;;
2304df62
AD
9646esac
9647$rm -f varargs*
9648
a0d0e21e
LW
9649: see if stddef is available
9650set stddef.h i_stddef
9651eval $inhdr
9652
a0d0e21e
LW
9653: see if ioctl defs are in sgtty, termio, sys/filio or sys/ioctl
9654set sys/filio.h i_sysfilio
9655eval $inhdr
9656echo " "
9657if $test `./findhdr sys/ioctl.h`; then
9658 val="$define"
9659 echo '<sys/ioctl.h> found.' >&4
9660else
9661 val="$undef"
9662 if $test $i_sysfilio = "$define"; then
9663 echo '<sys/ioctl.h> NOT found.' >&4
9664 else
9665 $test $i_sgtty = "$define" && xxx="sgtty.h"
9666 $test $i_termio = "$define" && xxx="termio.h"
9667 $test $i_termios = "$define" && xxx="termios.h"
9668echo "No <sys/ioctl.h> found, assuming ioctl args are defined in <$xxx>." >&4
9669 fi
9670fi
9671set i_sysioctl
9672eval $setvar
9673
9674: see if this is a sys/param system
9675set sys/param.h i_sysparam
9676eval $inhdr
9677
8ff267be 9678: see if sys/resource.h has to be included
9679set sys/resource.h i_sysresrc
9680eval $inhdr
9681
1aef975c
AD
9682: see if sys/stat.h is available
9683set sys/stat.h i_sysstat
9684eval $inhdr
9685
fed7345c
AD
9686: see if sys/types.h has to be included
9687set sys/types.h i_systypes
9688eval $inhdr
9689
25f94b33
AD
9690: see if this is a sys/un.h system
9691set sys/un.h i_sysun
9692eval $inhdr
9693
8ff267be 9694: see if this is a syswait system
9695set sys/wait.h i_syswait
a0d0e21e
LW
9696eval $inhdr
9697
9698: see if this is an utime system
9699set utime.h i_utime
9700eval $inhdr
9701
760ac839
LW
9702: see if this is a values.h system
9703set values.h i_values
9704eval $inhdr
9705
2304df62 9706: see if this is a vfork system
85e6fe83 9707case "$d_vfork" in
a0d0e21e
LW
9708"$define")
9709 set vfork.h i_vfork
85e6fe83
LW
9710 eval $inhdr
9711 ;;
a0d0e21e
LW
9712*)
9713 i_vfork="$undef"
9714 ;;
85e6fe83 9715esac
a0d0e21e 9716
4633a7c4
LW
9717: see if gdbm.h is available
9718set gdbm.h t_gdbm
9719eval $inhdr
9720case "$t_gdbm" in
9721$define)
9722 : see if gdbm_open exists
9723 set gdbm_open d_gdbm_open
9724 eval $inlibc
9725 case "$d_gdbm_open" in
9726 $undef)
9727 t_gdbm="$undef"
9728 echo "We won't be including <gdbm.h>"
9729 ;;
9730 esac
9731 ;;
9732esac
9733val="$t_gdbm"
9734set i_gdbm
9735eval $setvar
9736
9737echo " "
9738echo "Looking for extensions..." >&4
9739cd ../ext
9740: If we are using the old config.sh, known_extensions may contain
9741: old or inaccurate or duplicate values.
9742known_extensions=''
9743: We do not use find because it might not be available.
9744: We do not just use MANIFEST because the user may have dropped
9745: some additional extensions into the source tree and expect them
9746: to be built.
9747for xxx in * ; do
5f05dabc 9748 case "$xxx" in
9749 DynaLoader) ;;
9750 *) if $test -f $xxx/$xxx.xs; then
9751 known_extensions="$known_extensions $xxx"
9752 else
9753 if $test -d $xxx; then
9754 cd $xxx
9755 for yyy in * ; do
9756 if $test -f $yyy/$yyy.xs; then
9757 known_extensions="$known_extensions $xxx/$yyy"
9758 fi
9759 done
9760 cd ..
9761 fi
9762 fi ;;
9763 esac
4633a7c4
LW
9764done
9765set X $known_extensions
9766shift
9767known_extensions="$*"
9768cd ../UU
9769
9770: Now see which are supported on this system.
9771avail_ext=''
9772for xxx in $known_extensions ; do
9773 case "$xxx" in
9774 DB_File) case "$i_db" in
9775 $define) avail_ext="$avail_ext $xxx" ;;
9776 esac
9777 ;;
9778 GDBM_File) case "$i_gdbm" in
9779 $define) avail_ext="$avail_ext $xxx" ;;
9780 esac
9781 ;;
9782 NDBM_File) case "$i_ndbm" in
9783 $define) avail_ext="$avail_ext $xxx" ;;
9784 esac
9785 ;;
9786 ODBM_File) case "${i_dbm}${i_rpcsvcdbm}" in
9787 *"${define}"*) avail_ext="$avail_ext $xxx" ;;
9788 esac
9789 ;;
9790 POSIX) case "$useposix" in
9791 true|define|y) avail_ext="$avail_ext $xxx" ;;
9792 esac
9793 ;;
8ff267be 9794 Opcode) case "$useopcode" in
2c7991dc 9795 true|define|y) avail_ext="$avail_ext $xxx" ;;
9796 esac
9797 ;;
4633a7c4
LW
9798 Socket) case "$d_socket" in
9799 $define) avail_ext="$avail_ext $xxx" ;;
9800 esac
9801 ;;
9802 *) avail_ext="$avail_ext $xxx"
9803 ;;
9804 esac
9805done
9806
9807set X $avail_ext
9808shift
9809avail_ext="$*"
9810
9811case $usedl in
9812$define)
9813 $cat <<EOM
9814A number of extensions are supplied with $package. You may choose to
9815compile these extensions for dynamic loading (the default), compile
9816them into the $package executable (static loading), or not include
9817them at all. Answer "none" to include no extensions.
9818
9819EOM
9820 case "$dynamic_ext" in
9821 '') dflt="$avail_ext" ;;
9822 *) dflt="$dynamic_ext" ;;
9823 esac
9824 case "$dflt" in
9825 '') dflt=none;;
9826 esac
9827 rp="What extensions do you wish to load dynamically?"
9828 . ./myread
9829 case "$ans" in
9830 none) dynamic_ext=' ' ;;
9831 *) dynamic_ext="$ans" ;;
9832 esac
9833
9834 case "$static_ext" in
9835 '')
9836 : Exclude those already listed in dynamic linking
9837 dflt=''
9838 for xxx in $avail_ext; do
9839 case " $dynamic_ext " in
9840 *" $xxx "*) ;;
9841 *) dflt="$dflt $xxx" ;;
9842 esac
9843 done
9844 set X $dflt
9845 shift
9846 dflt="$*"
9847 ;;
9848 *) dflt="$static_ext"
9849 ;;
9850 esac
9851
9852 case "$dflt" in
9853 '') dflt=none;;
9854 esac
9855 rp="What extensions do you wish to load statically?"
9856 . ./myread
9857 case "$ans" in
9858 none) static_ext=' ' ;;
9859 *) static_ext="$ans" ;;
9860 esac
9861 ;;
9862*)
9863 $cat <<EOM
9864A number of extensions are supplied with $package. Answer "none"
9865to include no extensions.
9866
9867EOM
9868 case "$static_ext" in
9869 '') dflt="$avail_ext" ;;
9870 *) dflt="$static_ext" ;;
9871 esac
9872
9873 case "$dflt" in
9874 '') dflt=none;;
9875 esac
9876 rp="What extensions do you wish to include?"
9877 . ./myread
9878 case "$ans" in
9879 none) static_ext=' ' ;;
9880 *) static_ext="$ans" ;;
9881 esac
9882 ;;
9883esac
9884
9885set X $dynamic_ext $static_ext
9886shift
9887extensions="$*"
9888
16d20bd9
AD
9889: Remove build directory name from cppstdin so it can be used from
9890: either the present location or the final installed location.
9891echo " "
9892: Get out of the UU directory to get correct path name.
9893cd ..
9894case "$cppstdin" in
9895`pwd`/cppstdin)
9896 echo "Stripping down cppstdin path name"
9897 cppstdin=cppstdin
9898 ;;
9899esac
9900cd UU
9901
2304df62
AD
9902: end of configuration questions
9903echo " "
9904echo "End of configuration questions."
9905echo " "
9906
9907: back to where it started
9908if test -d ../UU; then
9909 cd ..
9910fi
9911
9912: configuration may be patched via a 'config.over' file
9913if $test -f config.over; then
9914 echo " "
9915 dflt=y
9916 rp='I see a config.over file. Do you wish to load it?'
9917 . UU/myread
9918 case "$ans" in
9919 n*) echo "OK, I'll ignore it.";;
9920 *) . ./config.over
9921 echo "Configuration override changes have been loaded."
9922 ;;
9923 esac
9924fi
9925
ecfc5424
AD
9926: in case they want portability, strip down executable paths
9927case "$d_portable" in
9928"$define")
9929 echo " "
9930 echo "Stripping down executable paths..." >&4
9931 for file in $loclist $trylist; do
9932 eval $file="\$file"
9933 done
9934 ;;
9935esac
9936
2304df62
AD
9937: create config.sh file
9938echo " "
9939echo "Creating config.sh..." >&4
9940$spitshell <<EOT >config.sh
9941$startsh
9942#
5cd24f17 9943# This file was produced by running the Configure script. It holds all
9944# the definitions figured out by Configure. Should you modify any of
9945# these values, do not forget to propagate your changes by running
9946# "Configure -S"; or, equivalently, you may run each .SH file yourself.
2304df62
AD
9947#
9948
9949# Configuration time: $cf_time
9950# Configured by: $cf_by
9951# Target system: $myuname
9952
2304df62
AD
9953Author='$Author'
9954Date='$Date'
9955Header='$Header'
9956Id='$Id'
9957Locker='$Locker'
9958Log='$Log'
ecfc5424 9959Mcc='$Mcc'
2304df62
AD
9960RCSfile='$RCSfile'
9961Revision='$Revision'
9962Source='$Source'
9963State='$State'
9964afs='$afs'
a0d0e21e 9965alignbytes='$alignbytes'
ecfc5424 9966aphostname='$aphostname'
4633a7c4 9967ar='$ar'
a0d0e21e
LW
9968archlib='$archlib'
9969archlibexp='$archlibexp'
9970archname='$archname'
4633a7c4 9971archobjs='$archobjs'
ecfc5424
AD
9972awk='$awk'
9973baserev='$baserev'
9974bash='$bash'
2304df62 9975bin='$bin'
5f05dabc 9976bincompat3='$bincompat3'
2304df62 9977binexp='$binexp'
ecfc5424
AD
9978bison='$bison'
9979byacc='$byacc'
2304df62 9980byteorder='$byteorder'
ecfc5424
AD
9981c='$c'
9982castflags='$castflags'
9983cat='$cat'
2304df62 9984cc='$cc'
ecfc5424
AD
9985cccdlflags='$cccdlflags'
9986ccdlflags='$ccdlflags'
2304df62 9987ccflags='$ccflags'
2304df62 9988cf_by='$cf_by'
8e07c86e 9989cf_email='$cf_email'
2304df62 9990cf_time='$cf_time'
ecfc5424
AD
9991chgrp='$chgrp'
9992chmod='$chmod'
9993chown='$chown'
9994clocktype='$clocktype'
9995comm='$comm'
9996compress='$compress'
2304df62 9997contains='$contains'
ecfc5424
AD
9998cp='$cp'
9999cpio='$cpio'
10000cpp='$cpp'
a0d0e21e 10001cpp_stuff='$cpp_stuff'
ecfc5424 10002cppflags='$cppflags'
2304df62
AD
10003cpplast='$cpplast'
10004cppminus='$cppminus'
10005cpprun='$cpprun'
10006cppstdin='$cppstdin'
ecfc5424
AD
10007cryptlib='$cryptlib'
10008csh='$csh'
10009d_Gconvert='$d_Gconvert'
2304df62 10010d_access='$d_access'
a0d0e21e 10011d_alarm='$d_alarm'
ecfc5424
AD
10012d_archlib='$d_archlib'
10013d_attribut='$d_attribut'
2304df62
AD
10014d_bcmp='$d_bcmp'
10015d_bcopy='$d_bcopy'
5f05dabc 10016d_bincompat3='$d_bincompat3'
ecfc5424 10017d_bsd='$d_bsd'
2afac517 10018d_bsdgetpgrp='$d_bsdgetpgrp'
ecfc5424 10019d_bsdpgrp='$d_bsdpgrp'
2afac517 10020d_bsdsetpgrp='$d_bsdsetpgrp'
2304df62
AD
10021d_bzero='$d_bzero'
10022d_casti32='$d_casti32'
2304df62 10023d_castneg='$d_castneg'
ecfc5424 10024d_charvspr='$d_charvspr'
a0d0e21e
LW
10025d_chown='$d_chown'
10026d_chroot='$d_chroot'
2304df62 10027d_chsize='$d_chsize'
a0d0e21e 10028d_closedir='$d_closedir'
2304df62 10029d_const='$d_const'
2304df62
AD
10030d_crypt='$d_crypt'
10031d_csh='$d_csh'
a0d0e21e
LW
10032d_cuserid='$d_cuserid'
10033d_dbl_dig='$d_dbl_dig'
10034d_difftime='$d_difftime'
ecfc5424 10035d_dirnamlen='$d_dirnamlen'
a0d0e21e
LW
10036d_dlerror='$d_dlerror'
10037d_dlopen='$d_dlopen'
10038d_dlsymun='$d_dlsymun'
2304df62
AD
10039d_dosuid='$d_dosuid'
10040d_dup2='$d_dup2'
8e07c86e 10041d_eofnblk='$d_eofnblk'
40a7a20a 10042d_eunice='$d_eunice'
2304df62
AD
10043d_fchmod='$d_fchmod'
10044d_fchown='$d_fchown'
10045d_fcntl='$d_fcntl'
a0d0e21e
LW
10046d_fd_macros='$d_fd_macros'
10047d_fd_set='$d_fd_set'
10048d_fds_bits='$d_fds_bits'
10049d_fgetpos='$d_fgetpos'
2304df62
AD
10050d_flexfnam='$d_flexfnam'
10051d_flock='$d_flock'
a0d0e21e 10052d_fork='$d_fork'
ecfc5424 10053d_fpathconf='$d_fpathconf'
a0d0e21e 10054d_fsetpos='$d_fsetpos'
5f05dabc 10055d_ftime='$d_ftime'
2304df62 10056d_getgrps='$d_getgrps'
5cd24f17 10057d_setgrps='$d_setgrps'
2304df62 10058d_gethent='$d_gethent'
2304df62 10059d_gethname='$d_gethname'
a0d0e21e 10060d_getlogin='$d_getlogin'
2afac517 10061d_getpgid='$d_getpgid'
2304df62
AD
10062d_getpgrp2='$d_getpgrp2'
10063d_getpgrp='$d_getpgrp'
a0d0e21e 10064d_getppid='$d_getppid'
2304df62 10065d_getprior='$d_getprior'
5f05dabc 10066d_gettimeod='$d_gettimeod'
a4f3eea9 10067d_gnulibc='$d_gnulibc'
2304df62 10068d_htonl='$d_htonl'
ecfc5424 10069d_index='$d_index'
7e1af8bc 10070d_inetaton='$d_inetaton'
2304df62
AD
10071d_isascii='$d_isascii'
10072d_killpg='$d_killpg'
10073d_link='$d_link'
a0d0e21e
LW
10074d_locconv='$d_locconv'
10075d_lockf='$d_lockf'
2304df62 10076d_lstat='$d_lstat'
a0d0e21e
LW
10077d_mblen='$d_mblen'
10078d_mbstowcs='$d_mbstowcs'
10079d_mbtowc='$d_mbtowc'
2304df62
AD
10080d_memcmp='$d_memcmp'
10081d_memcpy='$d_memcpy'
10082d_memmove='$d_memmove'
10083d_memset='$d_memset'
10084d_mkdir='$d_mkdir'
a0d0e21e
LW
10085d_mkfifo='$d_mkfifo'
10086d_mktime='$d_mktime'
2304df62
AD
10087d_msg='$d_msg'
10088d_msgctl='$d_msgctl'
10089d_msgget='$d_msgget'
10090d_msgrcv='$d_msgrcv'
10091d_msgsnd='$d_msgsnd'
ecfc5424 10092d_mymalloc='$d_mymalloc'
a0d0e21e 10093d_nice='$d_nice'
4633a7c4 10094d_oldarchlib='$d_oldarchlib'
ecfc5424 10095d_oldsock='$d_oldsock'
2304df62 10096d_open3='$d_open3'
a0d0e21e
LW
10097d_pathconf='$d_pathconf'
10098d_pause='$d_pause'
ecfc5424 10099d_phostname='$d_phostname'
a0d0e21e 10100d_pipe='$d_pipe'
8e07c86e 10101d_poll='$d_poll'
2304df62 10102d_portable='$d_portable'
ecfc5424
AD
10103d_pwage='$d_pwage'
10104d_pwchange='$d_pwchange'
10105d_pwclass='$d_pwclass'
10106d_pwcomment='$d_pwcomment'
10107d_pwexpire='$d_pwexpire'
10108d_pwquota='$d_pwquota'
2304df62 10109d_readdir='$d_readdir'
a0d0e21e 10110d_readlink='$d_readlink'
2304df62 10111d_rename='$d_rename'
ecfc5424 10112d_rewinddir='$d_rewinddir'
2304df62
AD
10113d_rmdir='$d_rmdir'
10114d_safebcpy='$d_safebcpy'
10115d_safemcpy='$d_safemcpy'
36477c24 10116d_sanemcmp='$d_sanemcmp'
ecfc5424 10117d_seekdir='$d_seekdir'
2304df62
AD
10118d_select='$d_select'
10119d_sem='$d_sem'
10120d_semctl='$d_semctl'
10121d_semget='$d_semget'
10122d_semop='$d_semop'
10123d_setegid='$d_setegid'
10124d_seteuid='$d_seteuid'
a0d0e21e 10125d_setlinebuf='$d_setlinebuf'
2304df62
AD
10126d_setlocale='$d_setlocale'
10127d_setpgid='$d_setpgid'
10128d_setpgrp2='$d_setpgrp2'
2304df62
AD
10129d_setpgrp='$d_setpgrp'
10130d_setprior='$d_setprior'
10131d_setregid='$d_setregid'
10132d_setresgid='$d_setresgid'
10133d_setresuid='$d_setresuid'
10134d_setreuid='$d_setreuid'
10135d_setrgid='$d_setrgid'
10136d_setruid='$d_setruid'
10137d_setsid='$d_setsid'
760ac839 10138d_sfio='$d_sfio'
2304df62
AD
10139d_shm='$d_shm'
10140d_shmat='$d_shmat'
a0d0e21e 10141d_shmatprototype='$d_shmatprototype'
2304df62
AD
10142d_shmctl='$d_shmctl'
10143d_shmdt='$d_shmdt'
10144d_shmget='$d_shmget'
2c7991dc 10145d_sigaction='$d_sigaction'
a5f75d66 10146d_sigsetjmp='$d_sigsetjmp'
2304df62
AD
10147d_socket='$d_socket'
10148d_sockpair='$d_sockpair'
2304df62 10149d_statblks='$d_statblks'
c2960299
AD
10150d_stdio_cnt_lval='$d_stdio_cnt_lval'
10151d_stdio_ptr_lval='$d_stdio_ptr_lval'
16d20bd9 10152d_stdiobase='$d_stdiobase'
2304df62 10153d_stdstdio='$d_stdstdio'
2304df62 10154d_strchr='$d_strchr'
a0d0e21e 10155d_strcoll='$d_strcoll'
2304df62
AD
10156d_strctcpy='$d_strctcpy'
10157d_strerrm='$d_strerrm'
10158d_strerror='$d_strerror'
a89d8a78
DH
10159d_strtod='$d_strtod'
10160d_strtol='$d_strtol'
10161d_strtoul='$d_strtoul'
a0d0e21e 10162d_strxfrm='$d_strxfrm'
ecfc5424 10163d_suidsafe='$d_suidsafe'
2304df62
AD
10164d_symlink='$d_symlink'
10165d_syscall='$d_syscall'
a0d0e21e 10166d_sysconf='$d_sysconf'
ecfc5424
AD
10167d_sysernlst='$d_sysernlst'
10168d_syserrlst='$d_syserrlst'
2304df62 10169d_system='$d_system'
a0d0e21e
LW
10170d_tcgetpgrp='$d_tcgetpgrp'
10171d_tcsetpgrp='$d_tcsetpgrp'
ecfc5424 10172d_telldir='$d_telldir'
85e6fe83 10173d_time='$d_time'
2304df62
AD
10174d_times='$d_times'
10175d_truncate='$d_truncate'
a0d0e21e
LW
10176d_tzname='$d_tzname'
10177d_umask='$d_umask'
ecfc5424 10178d_uname='$d_uname'
2304df62 10179d_vfork='$d_vfork'
ecfc5424 10180d_void_closedir='$d_void_closedir'
2304df62 10181d_voidsig='$d_voidsig'
ecfc5424 10182d_voidtty='$d_voidtty'
2304df62 10183d_volatile='$d_volatile'
2304df62
AD
10184d_vprintf='$d_vprintf'
10185d_wait4='$d_wait4'
10186d_waitpid='$d_waitpid'
a0d0e21e
LW
10187d_wcstombs='$d_wcstombs'
10188d_wctomb='$d_wctomb'
ecfc5424
AD
10189d_xenix='$d_xenix'
10190date='$date'
10191db_hashtype='$db_hashtype'
10192db_prefixtype='$db_prefixtype'
10193defvoidused='$defvoidused'
10194direntrytype='$direntrytype'
a0d0e21e 10195dlext='$dlext'
2304df62 10196dlsrc='$dlsrc'
ecfc5424 10197dynamic_ext='$dynamic_ext'
8e07c86e 10198eagain='$eagain'
ecfc5424
AD
10199echo='$echo'
10200egrep='$egrep'
10201emacs='$emacs'
10202eunicefix='$eunicefix'
4633a7c4 10203exe_ext='$exe_ext'
ecfc5424
AD
10204expr='$expr'
10205extensions='$extensions'
10206find='$find'
4633a7c4 10207firstmakefile='$firstmakefile'
ecfc5424 10208flex='$flex'
a0d0e21e 10209fpostype='$fpostype'
94b6baf5 10210freetype='$freetype'
1aef975c
AD
10211full_csh='$full_csh'
10212full_sed='$full_sed'
ecfc5424
AD
10213gcc='$gcc'
10214gccversion='$gccversion'
2304df62 10215gidtype='$gidtype'
ecfc5424
AD
10216glibpth='$glibpth'
10217grep='$grep'
10218groupcat='$groupcat'
2304df62 10219groupstype='$groupstype'
8ff267be 10220gzip='$gzip'
2304df62
AD
10221h_fcntl='$h_fcntl'
10222h_sysfile='$h_sysfile'
ecfc5424
AD
10223hint='$hint'
10224hostcat='$hostcat'
10225huge='$huge'
10226i_bsdioctl='$i_bsdioctl'
a0d0e21e 10227i_db='$i_db'
2304df62 10228i_dbm='$i_dbm'
2304df62 10229i_dirent='$i_dirent'
a0d0e21e 10230i_dld='$i_dld'
2304df62
AD
10231i_dlfcn='$i_dlfcn'
10232i_fcntl='$i_fcntl'
a0d0e21e 10233i_float='$i_float'
2304df62
AD
10234i_gdbm='$i_gdbm'
10235i_grp='$i_grp'
a0d0e21e 10236i_limits='$i_limits'
4633a7c4 10237i_locale='$i_locale'
a0d0e21e
LW
10238i_malloc='$i_malloc'
10239i_math='$i_math'
85e6fe83 10240i_memory='$i_memory'
2304df62 10241i_ndbm='$i_ndbm'
85e6fe83 10242i_neterrno='$i_neterrno'
2304df62 10243i_niin='$i_niin'
2304df62 10244i_pwd='$i_pwd'
8e07c86e 10245i_rpcsvcdbm='$i_rpcsvcdbm'
760ac839 10246i_sfio='$i_sfio'
ecfc5424
AD
10247i_sgtty='$i_sgtty'
10248i_stdarg='$i_stdarg'
2304df62 10249i_stddef='$i_stddef'
a0d0e21e 10250i_stdlib='$i_stdlib'
2304df62 10251i_string='$i_string'
2304df62
AD
10252i_sysdir='$i_sysdir'
10253i_sysfile='$i_sysfile'
a0d0e21e 10254i_sysfilio='$i_sysfilio'
ecfc5424 10255i_sysin='$i_sysin'
2304df62 10256i_sysioctl='$i_sysioctl'
2304df62 10257i_sysndir='$i_sysndir'
a0d0e21e 10258i_sysparam='$i_sysparam'
8ff267be 10259i_sysresrc='$i_sysresrc'
2304df62 10260i_sysselct='$i_sysselct'
ecfc5424 10261i_syssockio='$i_syssockio'
1aef975c 10262i_sysstat='$i_sysstat'
ecfc5424
AD
10263i_systime='$i_systime'
10264i_systimek='$i_systimek'
a0d0e21e 10265i_systimes='$i_systimes'
fed7345c 10266i_systypes='$i_systypes'
25f94b33 10267i_sysun='$i_sysun'
8ff267be 10268i_syswait='$i_syswait'
2304df62
AD
10269i_termio='$i_termio'
10270i_termios='$i_termios'
2304df62 10271i_time='$i_time'
85e6fe83 10272i_unistd='$i_unistd'
2304df62 10273i_utime='$i_utime'
760ac839 10274i_values='$i_values'
2304df62
AD
10275i_varargs='$i_varargs'
10276i_varhdr='$i_varhdr'
10277i_vfork='$i_vfork'
ecfc5424
AD
10278incpath='$incpath'
10279inews='$inews'
10280installarchlib='$installarchlib'
10281installbin='$installbin'
16d20bd9
AD
10282installman1dir='$installman1dir'
10283installman3dir='$installman3dir'
ecfc5424
AD
10284installprivlib='$installprivlib'
10285installscript='$installscript'
4633a7c4 10286installsitearch='$installsitearch'
25f94b33 10287installsitelib='$installsitelib'
2304df62 10288intsize='$intsize'
ecfc5424
AD
10289known_extensions='$known_extensions'
10290ksh='$ksh'
10291large='$large'
232e078e 10292ld='$ld'
ecfc5424
AD
10293lddlflags='$lddlflags'
10294ldflags='$ldflags'
10295less='$less'
4633a7c4 10296lib_ext='$lib_ext'
2304df62 10297libc='$libc'
8ff267be 10298libperl='$libperl'
2304df62 10299libpth='$libpth'
2304df62 10300libs='$libs'
ecfc5424
AD
10301libswanted='$libswanted'
10302line='$line'
10303lint='$lint'
10304lkflags='$lkflags'
10305ln='$ln'
85e6fe83 10306lns='$lns'
8e07c86e
AD
10307locincpth='$locincpth'
10308loclibpth='$loclibpth'
24fef2a7 10309longsize='$longsize'
ecfc5424
AD
10310lp='$lp'
10311lpr='$lpr'
10312ls='$ls'
85e6fe83 10313lseektype='$lseektype'
ecfc5424
AD
10314mail='$mail'
10315mailx='$mailx'
10316make='$make'
8ff267be 10317make_set_make='$make_set_make'
2304df62
AD
10318mallocobj='$mallocobj'
10319mallocsrc='$mallocsrc'
10320malloctype='$malloctype'
16d20bd9
AD
10321man1dir='$man1dir'
10322man1direxp='$man1direxp'
10323man1ext='$man1ext'
10324man3dir='$man3dir'
10325man3direxp='$man3direxp'
10326man3ext='$man3ext'
2304df62 10327medium='$medium'
ecfc5424
AD
10328mips='$mips'
10329mips_type='$mips_type'
10330mkdir='$mkdir'
2304df62 10331models='$models'
a0d0e21e 10332modetype='$modetype'
ecfc5424
AD
10333more='$more'
10334mv='$mv'
40000a8c 10335myarchname='$myarchname'
2304df62
AD
10336mydomain='$mydomain'
10337myhostname='$myhostname'
ecfc5424 10338myuname='$myuname'
2304df62 10339n='$n'
ecfc5424 10340nm_opt='$nm_opt'
40a7a20a 10341nm_so_opt='$nm_so_opt'
ecfc5424 10342nroff='$nroff'
8e07c86e 10343o_nonblock='$o_nonblock'
4633a7c4
LW
10344obj_ext='$obj_ext'
10345oldarchlib='$oldarchlib'
10346oldarchlibexp='$oldarchlibexp'
ecfc5424 10347optimize='$optimize'
85e6fe83 10348orderlib='$orderlib'
ecfc5424
AD
10349osname='$osname'
10350osvers='$osvers'
2304df62 10351package='$package'
2c7991dc 10352pager='$pager'
ecfc5424
AD
10353passcat='$passcat'
10354patchlevel='$patchlevel'
4633a7c4 10355path_sep='$path_sep'
ecfc5424 10356perl='$perl'
8e07c86e 10357perladmin='$perladmin'
4633a7c4 10358perlpath='$perlpath'
ecfc5424
AD
10359pg='$pg'
10360phostname='$phostname'
10361plibpth='$plibpth'
10362pmake='$pmake'
10363pr='$pr'
a0d0e21e 10364prefix='$prefix'
1aef975c 10365prefixexp='$prefixexp'
2304df62
AD
10366privlib='$privlib'
10367privlibexp='$privlibexp'
10368prototype='$prototype'
10369randbits='$randbits'
ecfc5424 10370ranlib='$ranlib'
8e07c86e 10371rd_nodata='$rd_nodata'
ecfc5424
AD
10372rm='$rm'
10373rmail='$rmail'
10374runnm='$runnm'
2304df62
AD
10375scriptdir='$scriptdir'
10376scriptdirexp='$scriptdirexp'
ecfc5424 10377sed='$sed'
a0d0e21e 10378selecttype='$selecttype'
ecfc5424
AD
10379sendmail='$sendmail'
10380sh='$sh'
10381shar='$shar'
10382sharpbang='$sharpbang'
10383shmattype='$shmattype'
24fef2a7 10384shortsize='$shortsize'
2afac517 10385shrpenv='$shrpenv'
ecfc5424 10386shsharp='$shsharp'
2304df62 10387sig_name='$sig_name'
8e07c86e 10388sig_num='$sig_num'
ecfc5424 10389signal_t='$signal_t'
4633a7c4
LW
10390sitearch='$sitearch'
10391sitearchexp='$sitearchexp'
25f94b33
AD
10392sitelib='$sitelib'
10393sitelibexp='$sitelibexp'
a0d0e21e 10394sizetype='$sizetype'
ecfc5424
AD
10395sleep='$sleep'
10396smail='$smail'
10397small='$small'
a0d0e21e 10398so='$so'
ecfc5424
AD
10399sockethdr='$sockethdr'
10400socketlib='$socketlib'
10401sort='$sort'
10402spackage='$spackage'
2304df62 10403spitshell='$spitshell'
ecfc5424 10404split='$split'
a0d0e21e 10405ssizetype='$ssizetype'
4633a7c4 10406startperl='$startperl'
2304df62 10407startsh='$startsh'
ecfc5424 10408static_ext='$static_ext'
2304df62 10409stdchar='$stdchar'
16d20bd9
AD
10410stdio_base='$stdio_base'
10411stdio_bufsiz='$stdio_bufsiz'
10412stdio_cnt='$stdio_cnt'
10413stdio_ptr='$stdio_ptr'
ecfc5424
AD
10414strings='$strings'
10415submit='$submit'
f55a7265 10416subversion='$subversion'
2304df62 10417sysman='$sysman'
ecfc5424
AD
10418tail='$tail'
10419tar='$tar'
10420tbl='$tbl'
10421test='$test'
10422timeincl='$timeincl'
10423timetype='$timetype'
10424touch='$touch'
10425tr='$tr'
10426troff='$troff'
2304df62 10427uidtype='$uidtype'
ecfc5424
AD
10428uname='$uname'
10429uniq='$uniq'
10430usedl='$usedl'
10431usemymalloc='$usemymalloc'
2304df62 10432usenm='$usenm'
8ff267be 10433useopcode='$useopcode'
10434useperlio='$useperlio'
ecfc5424 10435useposix='$useposix'
8ff267be 10436usesfio='$usesfio'
10437useshrplib='$useshrplib'
ecfc5424 10438usevfork='$usevfork'
2304df62 10439usrinc='$usrinc'
ecfc5424
AD
10440uuname='$uuname'
10441vi='$vi'
2304df62 10442voidflags='$voidflags'
ecfc5424
AD
10443xlibpth='$xlibpth'
10444zcat='$zcat'
8ff267be 10445zip='$zip'
2304df62
AD
10446EOT
10447
10448: add special variables
10449$test -f patchlevel.h && \
10450awk '/^#define/ {printf "%s=%s\n",$2,$3}' patchlevel.h >>config.sh
10451echo "CONFIG=true" >>config.sh
10452
10453: propagate old symbols
10454if $test -f UU/config.sh; then
10455 <UU/config.sh sort | uniq >UU/oldconfig.sh
10456 sed -n 's/^\([a-zA-Z_0-9]*\)=.*/\1/p' config.sh config.sh UU/oldconfig.sh |\
10457 sort | uniq -u >UU/oldsyms
10458 set X `cat UU/oldsyms`
10459 shift
10460 case $# in
10461 0) ;;
10462 *)
10463 cat <<EOM
10464Hmm...You had some extra variables I don't know about...I'll try to keep 'em...
10465EOM
10466 echo "# Variables propagated from previous config.sh file." >>config.sh
10467 for sym in `cat UU/oldsyms`; do
10468 echo " Propagating $hint variable "'$'"$sym..."
10469 eval 'tmp="$'"${sym}"'"'
10470 echo "$tmp" | \
10471 sed -e "s/'/'\"'\"'/g" -e "s/^/$sym='/" -e "s/$/'/" >>config.sh
10472 done
10473 ;;
10474 esac
10475fi
10476
10477: Finish up by extracting the .SH files
10478case "$alldone" in
10479exit)
10480 $rm -rf UU
10481 echo "Done."
10482 exit 0
10483 ;;
10484cont)
10485 ;;
10486'')
2304df62
AD
10487 dflt=''
10488 nostick=true
40000a8c
AD
10489 $cat <<EOM
10490
10491If you'd like to make any changes to the config.sh file before I begin
10492to configure things, do it as a shell escape now (e.g. !vi config.sh).
10493
10494EOM
10495 rp="Press return or use a shell escape to edit config.sh:"
2304df62
AD
10496 . UU/myread
10497 nostick=''
10498 case "$ans" in
10499 '') ;;
10500 *) : in case they cannot read
10501 sh 1>&4 -c "$ans";;
10502 esac
10503 ;;
10504esac
10505
10506: if this fails, just run all the .SH files by hand
10507. ./config.sh
10508
10509echo " "
10510exec 1>&4
10511. ./UU/extract
10512
10513if $contains '^depend:' [Mm]akefile >/dev/null 2>&1; then
10514 dflt=y
10515 case "$silent" in
10516 true) ;;
10517 *)
10518 $cat <<EOM
10519
10520Now you need to generate make dependencies by running "make depend".
10521You might prefer to run it in background: "make depend > makedepend.out &"
10522It can take a while, so you might not want to run it right now.
10523
10524EOM
10525 ;;
10526 esac
10527 rp="Run make depend now?"
10528 . UU/myread
10529 case "$ans" in
10530 y*)
10531 make depend && echo "Now you must run a make."
10532 ;;
10533 *)
10534 echo "You must run 'make depend' then 'make'."
10535 ;;
10536 esac
10537elif test -f [Mm]akefile; then
10538 echo " "
10539 echo "Now you must run a make."
10540else
10541 echo "Done."
10542fi
10543
10544$rm -f kit*isdone ark*isdone
10545$rm -rf UU
a0d0e21e 10546
2304df62 10547: End of Configure
a0d0e21e 10548