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