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