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