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