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