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