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