This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
PWPASSWD problem for passwd less pwd's
[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
dfe9444c
AD
17# comp.sources.misc and is available on CPAN under authors/id/RAM so
18# you may fetch it yourself from your nearest archive site.)
2304df62
AD
19#
20
dfe9444c 21# $Id: Head.U,v 3.0.1.9 1997/02/28 15:02:09 ram Exp $
2304df62 22#
69eadf66 23# Generated on Tue Oct 3 05:18:15 EET DST 2000 [metaconfig 3.0 PL70]
7f2de2d2 24# (with additional metaconfig patches by perlbug@perl.org)
2304df62
AD
25
26cat >/tmp/c1$$ <<EOF
27ARGGGHHHH!!!!!
28
29SCO csh still thinks true is false. Write to SCO today and tell them that next
30year Configure ought to "rm /bin/csh" unless they fix their blasted shell. :-)
31
32(Actually, Configure ought to just patch csh in place. Hmm. Hmmmmm. All
33we'd have to do is go in and swap the && and || tokens, wherever they are.)
34
35[End of diatribe. We now return you to your regularly scheduled programming...]
36EOF
37cat >/tmp/c2$$ <<EOF
38
39OOPS! You naughty creature! You didn't run Configure with sh!
40I will attempt to remedy the situation by running sh for you...
41EOF
42
43true || cat /tmp/c1$$ /tmp/c2$$
44true || exec sh $0 $argv:q
45
46(exit $?0) || cat /tmp/c2$$
47(exit $?0) || exec sh $0 $argv:q
48rm -f /tmp/c1$$ /tmp/c2$$
49
a0d0e21e
LW
50: compute my invocation name
51me=$0
52case "$0" in
53*/*)
54 me=`echo $0 | sed -e 's!.*/\(.*\)!\1!' 2>/dev/null`
55 test "$me" || me=$0
56 ;;
57esac
58
dfe9444c 59: Proper separator for the PATH environment variable
8e07c86e
AD
60p_=:
61: On OS/2 this directory should exist if this is not floppy only system :-]
dfe9444c
AD
62if test -d c:/. ; then
63 if test -n "$OS2_SHELL"; then
64 p_=\;
65 PATH=`cmd /c "echo %PATH%" | tr '\\\\' / `
66 OS2_SHELL=`cmd /c "echo %OS2_SHELL%" | tr '\\\\' / | tr '[A-Z]' '[a-z]'`
c4f23d77 67 elif test -n "$DJGPP"; then
dfe9444c
AD
68 p_=\;
69 fi
39e571d4 70fi
a0d0e21e
LW
71
72: Proper PATH setting
73paths='/bin /usr/bin /usr/local/bin /usr/ucb /usr/local /usr/lbin'
16d20bd9 74paths="$paths /opt/bin /opt/local/bin /opt/local /opt/lbin"
232e078e 75paths="$paths /usr/5bin /etc /usr/gnu/bin /usr/new /usr/new/bin /usr/nbin"
16d20bd9 76paths="$paths /opt/gnu/bin /opt/new /opt/new/bin /opt/nbin"
232e078e
AD
77paths="$paths /sys5.3/bin /sys5.3/usr/bin /bsd4.3/bin /bsd4.3/usr/ucb"
78paths="$paths /bsd4.3/usr/bin /usr/bsd /bsd43/bin /usr/ccs/bin"
79paths="$paths /etc /usr/lib /usr/ucblib /lib /usr/ccs/lib"
80paths="$paths /sbin /usr/sbin /usr/libexec"
a0d0e21e
LW
81
82for p in $paths
83do
8e07c86e
AD
84 case "$p_$PATH$p_" in
85 *$p_$p$p_*) ;;
86 *) test -d $p && PATH=$PATH$p_$p ;;
a0d0e21e
LW
87 esac
88done
89
8e07c86e 90PATH=.$p_$PATH
2304df62
AD
91export PATH
92
dfe9444c
AD
93: shall we be using ksh?
94inksh=''
95needksh=''
96avoidksh=''
97newsh=/bin/ksh
98changesh=''
ff0cee69 99if (PATH=.; alias -x) >/dev/null 2>&1; then
dfe9444c
AD
100 inksh=true
101fi
102if test -f /hp-ux -a -f /bin/ksh; then
103 needksh='to avoid sh bug in "here document" expansion'
104fi
105if test -d /usr/lpp -a -f /usr/bin/bsh -a -f /usr/bin/uname; then
106 if test X`/usr/bin/uname -v` = X4; then
107 avoidksh="to avoid AIX 4's /bin/sh"
108 newsh=/usr/bin/bsh
2304df62 109 fi
dfe9444c 110fi
cf04f91f
JH
111if test -f /osf_boot -a -f /usr/sbin/setld; then
112 if test X`/usr/bin/uname -s` = XOSF1; then
113 avoidksh="to avoid Digital UNIX' ksh"
114 newsh=/bin/sh
115 unset BIN_SH # if this is 'xpg4' sh will start up ksh
116 fi
117fi
dfe9444c
AD
118case "$inksh/$needksh" in
119/[a-z]*)
c4f23d77 120 ENV=''
dfe9444c
AD
121 changesh=true
122 reason="$needksh"
123 ;;
124esac
125case "$inksh/$avoidksh" in
126true/[a-z]*)
127 changesh=true
128 reason="$avoidksh"
129 ;;
130esac
131case "$inksh/$needksh-$avoidksh-" in
132true/--)
a0d0e21e
LW
133 cat <<EOM
134(I see you are using the Korn shell. Some ksh's blow up on $me,
dfe9444c 135mainly on older exotic systems. If yours does, try the Bourne shell instead.)
ff0cee69 136EOM
dfe9444c
AD
137 ;;
138esac
139case "$changesh" in
140true)
141 echo "(Feeding myself to $newsh $reason.)"
142 case "$0" in
143 Configure|*/Configure) exec $newsh $0 "$@";;
144 *) exec $newsh Configure "$@";;
145 esac
146 ;;
147esac
2304df62 148
bfb7748a
AD
149: if needed set CDPATH to a harmless value that is not chatty
150: avoid bash 2.02 problems with empty CDPATH.
151case "$CDPATH" in
152'') ;;
153*) case "$SHELL" in
154 *bash*) CDPATH='.' ;;
155 *) CDPATH='' ;;
156 esac
157 ;;
158esac
2304df62
AD
159: Configure runs within the UU subdirectory
160test -d UU || mkdir UU
8e07c86e 161cd UU && rm -f ./*
2304df62 162
6b356c8e
JH
163ccname=''
164ccversion=''
b4eb6b3d
JH
165ccsymbols=''
166cppccsymbols=''
167cppsymbols=''
9c839522 168perllibs=''
b4eb6b3d
JH
169dynamic_ext=''
170extensions=''
171known_extensions=''
172nonxs_ext=''
173static_ext=''
174useopcode=''
175useposix=''
ecfc5424 176d_bsd=''
40a7a20a 177d_eunice=''
2304df62
AD
178d_xenix=''
179eunicefix=''
180Mcc=''
dfe9444c 181ar=''
2304df62
AD
182awk=''
183bash=''
184bison=''
185byacc=''
186cat=''
187chgrp=''
188chmod=''
189chown=''
ecfc5424 190comm=''
2304df62
AD
191compress=''
192cp=''
193cpio=''
194cpp=''
195csh=''
196date=''
197echo=''
198egrep=''
199emacs=''
200expr=''
201find=''
202flex=''
2304df62 203grep=''
8ff267be 204gzip=''
2304df62
AD
205inews=''
206ksh=''
207less=''
208line=''
209lint=''
210ln=''
211lp=''
212lpr=''
213ls=''
214mail=''
215mailx=''
dfe9444c 216make=''
2304df62
AD
217mkdir=''
218more=''
219mv=''
693762b4 220nm=''
2304df62
AD
221nroff=''
222perl=''
223pg=''
224pmake=''
225pr=''
226rm=''
227rmail=''
228sed=''
229sendmail=''
2304df62
AD
230shar=''
231sleep=''
232smail=''
233sort=''
234submit=''
235tail=''
236tar=''
237tbl=''
693762b4 238tee=''
2304df62
AD
239test=''
240touch=''
241tr=''
242troff=''
243uname=''
244uniq=''
245uuname=''
246vi=''
247zcat=''
8ff267be 248zip=''
b4eb6b3d
JH
249full_ar=''
250full_sed=''
a0d0e21e 251libswanted=''
2304df62
AD
252hint=''
253myuname=''
85e6fe83
LW
254osname=''
255osvers=''
2304df62
AD
256Author=''
257Date=''
258Header=''
259Id=''
260Locker=''
261Log=''
262RCSfile=''
263Revision=''
264Source=''
265State=''
dfe9444c
AD
266_a=''
267_exe=''
268_o=''
4633a7c4
LW
269archobjs=''
270exe_ext=''
271firstmakefile=''
272lib_ext=''
273obj_ext=''
274path_sep=''
b4eb6b3d
JH
275afs=''
276alignbytes=''
277ansi2knr=''
278archlib=''
279archlibexp=''
280d_archlib=''
281installarchlib=''
282archname=''
283myarchname=''
284d_atolf=''
285d_atoll=''
286baserev=''
287bin=''
288binexp=''
289installbin=''
290bincompat5005=''
291d_bincompat5005=''
292byteorder=''
2304df62 293cc=''
2304df62
AD
294ccflags=''
295cppflags=''
296ldflags=''
297lkflags=''
8e07c86e 298locincpth=''
2304df62 299optimize=''
b4eb6b3d 300cf_email=''
2304df62
AD
301cf_by=''
302cf_time=''
b4eb6b3d 303charsize=''
2304df62 304contains=''
b4eb6b3d 305cpp_stuff=''
2304df62
AD
306cpplast=''
307cppminus=''
308cpprun=''
309cppstdin=''
b4eb6b3d
JH
310crosscompile=''
311d_access=''
312d_accessx=''
313d_alarm=''
314d_attribut=''
315d_bcmp=''
316d_bcopy=''
317d_bzero=''
318d_casti32=''
319castflags=''
320d_castneg=''
321d_chown=''
322d_chroot=''
323d_chsize=''
324d_closedir=''
325d_void_closedir=''
326d_const=''
327cryptlib=''
328d_crypt=''
329d_csh=''
330full_csh=''
331d_cuserid=''
332d_dbl_dig=''
333d_difftime=''
334d_dlerror=''
a0d0e21e 335d_dlopen=''
b4eb6b3d
JH
336d_dlsymun=''
337d_dosuid=''
338d_suidsafe=''
339d_drand48proto=''
340d_dup2=''
341d_eaccess=''
342d_endgrent=''
343d_endhent=''
344d_endnent=''
345d_endpent=''
346d_endpwent=''
347d_endsent=''
348d_fchmod=''
349d_fchown=''
350d_fcntl=''
351d_fd_macros=''
352d_fd_set=''
353d_fds_bits=''
354d_fgetpos=''
355d_flexfnam=''
356d_flock=''
357d_fork=''
358d_fpos64_t=''
359d_frexpl=''
360d_fs_data_s=''
361d_fseeko=''
362d_fsetpos=''
363d_fstatfs=''
364d_ftello=''
365d_ftime=''
366d_gettimeod=''
367d_Gconvert=''
368d_getcwd=''
369d_getespwnam=''
370d_getfsstat=''
371d_getgrent=''
372d_getgrps=''
373d_gethbyaddr=''
374d_gethbyname=''
375d_gethent=''
376aphostname=''
377d_gethname=''
378d_phostname=''
379d_uname=''
380d_gethostprotos=''
381d_getlogin=''
382d_getmnt=''
383d_getmntent=''
384d_getnbyaddr=''
385d_getnbyname=''
386d_getnent=''
387d_getnetprotos=''
388d_getpent=''
389d_getpgid=''
390d_getpgrp2=''
391d_bsdgetpgrp=''
392d_getpgrp=''
393d_getppid=''
394d_getprior=''
395d_getpbyname=''
396d_getpbynumber=''
397d_getprotoprotos=''
398d_getprpwnam=''
399d_getpwent=''
400d_getsent=''
401d_getservprotos=''
402d_getspnam=''
403d_getsbyname=''
404d_getsbyport=''
a4f3eea9 405d_gnulibc=''
b4eb6b3d
JH
406d_hasmntopt=''
407d_htonl=''
408d_iconv=''
409d_inetaton=''
410d_int64_t=''
411d_isascii=''
412d_isnan=''
413d_isnanl=''
414d_killpg=''
415d_lchown=''
416d_ldbl_dig=''
417d_link=''
418d_locconv=''
419d_lockf=''
420d_longdbl=''
421longdblsize=''
422d_longlong=''
423longlongsize=''
424d_lseekproto=''
425d_lstat=''
426d_madvise=''
427d_mblen=''
428d_mbstowcs=''
429d_mbtowc=''
430d_memchr=''
431d_memcmp=''
432d_memcpy=''
433d_memmove=''
434d_memset=''
435d_mkdir=''
436d_mkdtemp=''
437d_mkfifo=''
438d_mkstemp=''
439d_mkstemps=''
440d_mktime=''
441d_mmap=''
442mmaptype=''
443d_modfl=''
444d_mprotect=''
445d_msg=''
446d_msgctl=''
447d_msgget=''
448d_msgrcv=''
449d_msgsnd=''
450d_msync=''
451d_munmap=''
452d_nice=''
453d_off64_t=''
454d_open3=''
455d_fpathconf=''
456d_pathconf=''
457d_pause=''
458d_pipe=''
459d_poll=''
2304df62 460d_portable=''
b4eb6b3d
JH
461d_old_pthread_create_joinable=''
462old_pthread_create_joinable=''
463d_pthread_yield=''
464d_sched_yield=''
465sched_yield=''
466d_qgcvt=''
467d_readdir=''
468d_rewinddir=''
469d_seekdir=''
470d_telldir=''
471d_readlink=''
472d_rename=''
473d_rmdir=''
474d_safebcpy=''
475d_safemcpy=''
476d_sanemcmp=''
477d_select=''
478d_sem=''
479d_semctl=''
480d_semget=''
481d_semop=''
482d_setegid=''
483d_seteuid=''
484d_setgrent=''
485d_setgrps=''
486d_sethent=''
487d_setlinebuf=''
488d_setlocale=''
489d_setnent=''
490d_setpent=''
491d_setpgid=''
492d_setpgrp2=''
493d_bsdsetpgrp=''
494d_setpgrp=''
495d_setprior=''
496d_setproctitle=''
497d_setpwent=''
498d_setregid=''
499d_setresgid=''
500d_setresuid=''
501d_setreuid=''
502d_setrgid=''
503d_setruid=''
504d_setsent=''
505d_setsid=''
506d_setvbuf=''
507d_sfio=''
508usesfio=''
509d_shm=''
510d_shmat=''
511d_shmatprototype=''
512shmattype=''
513d_shmctl=''
514d_shmdt=''
515d_shmget=''
516d_sigaction=''
517d_sigsetjmp=''
518d_msg_ctrunc=''
519d_msg_dontroute=''
520d_msg_oob=''
521d_msg_peek=''
522d_msg_proxy=''
523d_oldsock=''
524d_scm_rights=''
525d_socket=''
526d_sockpair=''
527sockethdr=''
528socketlib=''
529d_socklen_t=''
530d_socks5_init=''
531d_sqrtl=''
532d_statblks=''
533d_statfs_f_flags=''
534d_statfs_s=''
535d_fstatvfs=''
536d_statvfs=''
537d_stdio_cnt_lval=''
538d_stdio_ptr_lval=''
539d_stdiobase=''
540d_stdstdio=''
541stdio_base=''
542stdio_bufsiz=''
543stdio_cnt=''
544stdio_filbuf=''
545stdio_ptr=''
546d_index=''
547d_strchr=''
548d_strcoll=''
549d_strctcpy=''
550d_strerrm=''
551d_strerror=''
552d_sysernlst=''
553d_syserrlst=''
554d_strtod=''
555d_strtol=''
556d_strtold=''
557d_strtoll=''
558d_strtoul=''
559d_strtoull=''
560d_strtouq=''
561d_strxfrm=''
562d_symlink=''
563d_syscall=''
564d_sysconf=''
565d_system=''
566d_tcgetpgrp=''
567d_tcsetpgrp=''
568d_telldirproto=''
569d_time=''
570timetype=''
571clocktype=''
572d_times=''
573d_truncate=''
574d_tzname=''
575d_umask=''
576d_semctl_semid_ds=''
577d_semctl_semun=''
578d_union_semun=''
579d_ustat=''
580d_vfork=''
581usevfork=''
582d_voidsig=''
583signal_t=''
584d_volatile=''
585d_charvspr=''
586d_vprintf=''
587d_wait4=''
588d_waitpid=''
589d_wcstombs=''
590d_wctomb=''
591dlext=''
85e6fe83
LW
592cccdlflags=''
593ccdlflags=''
2304df62 594dlsrc=''
232e078e 595ld=''
85e6fe83 596lddlflags=''
2304df62 597usedl=''
b4eb6b3d
JH
598doublesize=''
599ebcdic=''
600fflushNULL=''
601fflushall=''
602fpossize=''
603fpostype=''
5b463ca7 604gccosandvers=''
8a27cf78 605gccversion=''
b4eb6b3d
JH
606gidformat=''
607gidsign=''
608gidsize=''
609gidtype=''
610groupstype=''
611h_fcntl=''
612h_sysfile=''
613i_arpainet=''
614db_hashtype=''
615db_prefixtype=''
616i_db=''
617i_dbm=''
618i_rpcsvcdbm=''
619d_dirnamlen=''
620direntrytype=''
621i_dirent=''
a0d0e21e 622i_dld=''
b4eb6b3d
JH
623i_dlfcn=''
624i_fcntl=''
625i_float=''
626i_gdbm=''
627d_grpasswd=''
628i_grp=''
629i_iconv=''
630i_ieeefp=''
631i_inttypes=''
632i_libutil=''
633i_limits=''
634i_locale=''
635i_machcthr=''
636i_malloc=''
637i_math=''
638i_memory=''
639i_mntent=''
640i_ndbm=''
641i_netdb=''
642i_neterrno=''
643i_netinettcp=''
644i_niin=''
645i_sysin=''
646i_poll=''
647i_prot=''
648i_pthread=''
649d_pwage=''
650d_pwchange=''
651d_pwclass=''
652d_pwcomment=''
653d_pwexpire=''
654d_pwgecos=''
655d_pwpasswd=''
656d_pwquota=''
657i_pwd=''
658i_sfio=''
659i_shadow=''
660i_socks=''
661i_stddef=''
662i_stdlib=''
663i_string=''
664strings=''
665i_sunmath=''
666i_sysaccess=''
667i_sysdir=''
668i_sysfile=''
669d_voidtty=''
670i_bsdioctl=''
671i_sysfilio=''
672i_sysioctl=''
673i_syssockio=''
674i_syslog=''
675i_sysmman=''
676i_sysmode=''
677i_sysmount=''
678i_sysndir=''
679i_sysparam=''
680i_sysresrc=''
681i_syssecrt=''
682i_sysselct=''
683i_sysstat=''
684i_sysstatfs=''
685i_sysstatvfs=''
686i_systimes=''
687i_systypes=''
688i_sysuio=''
689i_sysun=''
690i_sysutsname=''
691i_sysvfs=''
692i_syswait=''
693i_sgtty=''
694i_termio=''
695i_termios=''
696i_systime=''
697i_systimek=''
698i_time=''
699timeincl=''
700i_unistd=''
701i_ustat=''
702i_utime=''
703i_values=''
704i_stdarg=''
705i_varargs=''
706i_varhdr=''
707i_vfork=''
708inc_version_list=''
709inc_version_list_init=''
710installprefix=''
711installprefixexp=''
712installstyle=''
713installusrbinperl=''
714intsize=''
715longsize=''
716shortsize=''
2304df62 717libc=''
b4eb6b3d
JH
718ldlibpthname=''
719libperl=''
720shrpenv=''
721useshrplib=''
a0d0e21e 722glibpth=''
2304df62 723libpth=''
8e07c86e 724loclibpth=''
2304df62
AD
725plibpth=''
726xlibpth=''
1cfa4ec7 727ignore_versioned_solibs=''
2304df62 728libs=''
43999f95
JH
729libsdirs=''
730libsfiles=''
731libsfound=''
13b3f787 732libspath=''
85e6fe83 733lns=''
b4eb6b3d
JH
734d_PRIEUldbl=''
735d_PRIFUldbl=''
736d_PRIGUldbl=''
737d_PRIeldbl=''
738d_PRIfldbl=''
739d_PRIgldbl=''
740d_SCNfldbl=''
741sPRIEUldbl=''
742sPRIFUldbl=''
743sPRIGUldbl=''
744sPRIeldbl=''
745sPRIfldbl=''
746sPRIgldbl=''
747sSCNfldbl=''
748lseeksize=''
749lseektype=''
8ff267be 750make_set_make=''
b4eb6b3d
JH
751d_mymalloc=''
752freetype=''
753mallocobj=''
754mallocsrc=''
755malloctype=''
756usemymalloc=''
757installman1dir=''
758man1dir=''
759man1direxp=''
760man1ext=''
761installman3dir=''
762man3dir=''
763man3direxp=''
764man3ext=''
765modetype=''
766multiarch=''
767mydomain=''
768myhostname=''
769phostname=''
2304df62
AD
770c=''
771n=''
b4eb6b3d
JH
772d_eofnblk=''
773eagain=''
774o_nonblock=''
775rd_nodata=''
776netdb_hlen_type=''
777netdb_host_type=''
778netdb_name_type=''
779netdb_net_type=''
780groupcat=''
781hostcat=''
782passcat=''
783orderlib=''
784ranlib=''
785d_perl_otherlibdirs=''
786otherlibdirs=''
2304df62
AD
787package=''
788spackage=''
b4eb6b3d
JH
789pager=''
790api_revision=''
791api_subversion=''
792api_version=''
793api_versionstring=''
794patchlevel=''
795revision=''
796subversion=''
797version=''
798perl5=''
799perladmin=''
800perlpath=''
801d_nv_preserves_uv=''
802d_nv_preserves_uv_bits=''
803i16size=''
804i16type=''
805i32size=''
806i32type=''
807i64size=''
808i64type=''
809i8size=''
810i8type=''
811ivsize=''
812ivtype=''
813nvsize=''
814nvtype=''
815u16size=''
816u16type=''
817u32size=''
818u32type=''
819u64size=''
820u64type=''
821u8size=''
822u8type=''
823uvsize=''
824uvtype=''
825ivdformat=''
826nvEUformat=''
827nvFUformat=''
828nvGUformat=''
829nveformat=''
830nvfformat=''
831nvgformat=''
832uvXUformat=''
833uvoformat=''
834uvuformat=''
835uvxformat=''
836pidtype=''
837prefix=''
838prefixexp=''
839installprivlib=''
840privlib=''
841privlibexp=''
842prototype=''
843ptrsize=''
844d_PRIXU64=''
845d_PRId64=''
846d_PRIi64=''
847d_PRIo64=''
848d_PRIu64=''
849d_PRIx64=''
850sPRIXU64=''
851sPRId64=''
852sPRIi64=''
853sPRIo64=''
854sPRIu64=''
855sPRIx64=''
856d_quad=''
857quadkind=''
858quadtype=''
859uquadtype=''
860drand01=''
861randbits=''
862randfunc=''
863randseedtype=''
864seedfunc=''
865installscript=''
866scriptdir=''
867scriptdirexp=''
868selectminbits=''
869selecttype=''
8ff267be 870sh=''
b4eb6b3d
JH
871sig_count=''
872sig_name=''
873sig_name_init=''
874sig_num=''
875sig_num_init=''
876installsitearch=''
877sitearch=''
878sitearchexp=''
879installsitebin=''
880sitebin=''
881sitebinexp=''
882installsitelib=''
883sitelib=''
884sitelib_stem=''
885sitelibexp=''
886siteprefix=''
887siteprefixexp=''
888sizesize=''
889sizetype=''
a0d0e21e 890so=''
b4eb6b3d 891socksizetype=''
2304df62
AD
892sharpbang=''
893shsharp=''
894spitshell=''
dfe9444c 895src=''
b4eb6b3d
JH
896ssizetype=''
897startperl=''
2304df62 898startsh=''
b4eb6b3d
JH
899stdchar=''
900d_stdio_stream_array=''
901stdio_stream_array=''
902sysman=''
5ff3f7a4 903trnl=''
b4eb6b3d
JH
904uidformat=''
905uidsign=''
906uidsize=''
907uidtype=''
908archname64=''
909use64bitall=''
910use64bitint=''
911ccflags_uselargefiles=''
912ldflags_uselargefiles=''
913libswanted_uselargefiles=''
914uselargefiles=''
915uselongdouble=''
916usemorebits=''
917usemultiplicity=''
2304df62 918nm_opt=''
40a7a20a 919nm_so_opt=''
2304df62
AD
920runnm=''
921usenm=''
b4eb6b3d 922useperlio=''
29209bc5 923usesocks=''
b4eb6b3d
JH
924d_oldpthreads=''
925use5005threads=''
926useithreads=''
927usethreads=''
2304df62 928incpath=''
2304df62
AD
929mips_type=''
930usrinc=''
b4eb6b3d
JH
931d_vendorarch=''
932installvendorarch=''
933vendorarch=''
934vendorarchexp=''
935d_vendorbin=''
936installvendorbin=''
937vendorbin=''
938vendorbinexp=''
939d_vendorlib=''
940installvendorlib=''
941vendorlib=''
942vendorlib_stem=''
943vendorlibexp=''
944usevendorprefix=''
945vendorprefix=''
946vendorprefixexp=''
947defvoidused=''
948voidflags=''
949pm_apiversion=''
950xs_apiversion=''
2304df62
AD
951CONFIG=''
952
ecfc5424
AD
953define='define'
954undef='undef'
955smallmach='pdp11 i8086 z8000 i80286 iAPX286'
956rmlist=''
957
958: We must find out about Eunice early
959eunicefix=':'
960if test -f /etc/unixtovms; then
961 eunicefix=/etc/unixtovms
962fi
963if test -f /etc/unixtovms.exe; then
964 eunicefix=/etc/unixtovms.exe
965fi
966
b4eb6b3d 967i_whoami=''
6b356c8e
JH
968ccname=''
969ccversion=''
9c839522 970perllibs=''
b4eb6b3d
JH
971: set useposix=false in your hint file to disable the POSIX extension.
972useposix=true
973: set useopcode=false in your hint file to disable the Opcode extension.
974useopcode=true
dfe9444c 975: Trailing extension. Override this in a hint file, if needed.
4e2a5f63 976_exe=''
dfe9444c
AD
977: Extra object files, if any, needed on this platform.
978archobjs=''
b4eb6b3d 979archname=''
ff935051
JH
980: Possible local include directories to search.
981: Set locincpth to "" in a hint file to defeat local include searches.
982locincpth="/usr/local/include /opt/local/include /usr/gnu/include"
983locincpth="$locincpth /opt/gnu/include /usr/GNU/include /opt/GNU/include"
984:
985: no include file wanted by default
986inclwanted=''
987
b4eb6b3d 988groupstype=''
732c9516
JH
989: change the next line if compiling for Xenix/286 on Xenix/386
990xlibpth='/usr/lib/386 /lib/386'
732c9516
JH
991: Possible local library directories to search.
992loclibpth="/usr/local/lib /opt/local/lib /usr/gnu/lib"
993loclibpth="$loclibpth /opt/gnu/lib /usr/GNU/lib /opt/GNU/lib"
994
995: general looking path for locating libraries
5869b1f1 996glibpth="/lib /usr/lib $xlibpth"
732c9516 997glibpth="$glibpth /usr/ccs/lib /usr/ucblib /usr/local/lib"
f7dd4e7f
JH
998test -f /usr/shlib/libc.so && glibpth="/usr/shlib $glibpth"
999test -f /shlib/libc.so && glibpth="/shlib $glibpth"
732c9516
JH
1000
1001: Private path used by Configure to find libraries. Its value
1002: is prepended to libpth. This variable takes care of special
1003: machines, like the mips. Usually, it should be empty.
1004plibpth=''
1005
1cfa4ec7
GS
1006: default library list
1007libswanted=''
921b2963 1008: some systems want to use only the non-versioned libso:s
1cfa4ec7 1009ignore_versioned_solibs=''
b4eb6b3d
JH
1010archname64=''
1011ccflags_uselargefiles=''
1012ldflags_uselargefiles=''
1013libswanted_uselargefiles=''
1014: set usemultiplicity on the Configure command line to enable multiplicity.
29209bc5 1015: set usesocks on the Configure command line to enable socks.
b4eb6b3d
JH
1016: set usethreads on the Configure command line to enable threads.
1017: full support for void wanted by default
1018defvoidused=15
1019
ecfc5424 1020: List of libraries we want.
693762b4 1021: If anyone needs -lnet, put it in a hint file.
997d70a2 1022libswanted='sfio socket bind inet nsl nm ndbm gdbm dbm db malloc dl'
69e84d1d 1023libswanted="$libswanted dld ld sun m c cposix posix"
f1066039 1024libswanted="$libswanted ndir dir crypt sec"
0c9177ab 1025libswanted="$libswanted ucb bsd BSD PW x iconv util"
1aef975c 1026: We probably want to search /usr/shlib before most other libraries.
94b6baf5 1027: This is only used by the lib/ExtUtils/MakeMaker.pm routine extliblist.
ecfc5424
AD
1028glibpth=`echo " $glibpth " | sed -e 's! /usr/shlib ! !'`
1029glibpth="/usr/shlib $glibpth"
1030: Do not use vfork unless overridden by a hint file.
1031usevfork=false
1032
8ff267be 1033: Find the basic shell for Bourne shell scripts
1034case "$sh" in
1035'')
8ff267be 1036 case "$SYSTYPE" in
1037 *bsd*|sys5*) xxx="/$SYSTYPE/bin/sh";;
1038 *) xxx='/bin/sh';;
1039 esac
1040 if test -f "$xxx"; then
1041 sh="$xxx"
1042 else
1043 : Build up a list and do a single loop so we can 'break' out.
1044 pth=`echo $PATH | sed -e "s/$p_/ /g"`
1045 for xxx in sh bash ksh pdksh ash; do
1046 for p in $pth; do
1047 try="$try ${p}/${xxx}"
1048 done
1049 done
1050 for xxx in $try; do
1051 if test -f "$xxx"; then
1052 sh="$xxx";
8ff267be 1053 break
1054 elif test -f "$xxx.exe"; then
1055 sh="$xxx";
8ff267be 1056 break
1057 fi
1058 done
1059 fi
1060 ;;
1061esac
1062
1063case "$sh" in
1064'') cat <<EOM >&2
1065$me: Fatal Error: I can't find a Bourne Shell anywhere.
dfe9444c 1066
8ff267be 1067Usually it's in /bin/sh. How did you even get this far?
7f2de2d2 1068Please contact me (Perl Maintainers) at perlbug@perl.org and
dfe9444c 1069we'll try to straighten this all out.
8ff267be 1070EOM
1071 exit 1
1072 ;;
1073esac
1074
760ac839 1075: see if sh knows # comments
8ff267be 1076if `$sh -c '#' >/dev/null 2>&1`; then
760ac839
LW
1077 shsharp=true
1078 spitshell=cat
760ac839
LW
1079 xcat=/bin/cat
1080 test -f $xcat || xcat=/usr/bin/cat
1081 echo "#!$xcat" >try
1082 $eunicefix try
1083 chmod +x try
1084 ./try > today
1085 if test -s today; then
760ac839
LW
1086 sharpbang='#!'
1087 else
1088 echo "#! $xcat" > try
1089 $eunicefix try
1090 chmod +x try
1091 ./try > today
1092 if test -s today; then
760ac839
LW
1093 sharpbang='#! '
1094 else
760ac839
LW
1095 sharpbang=': use '
1096 fi
1097 fi
1098else
dfe9444c 1099 echo " "
8ff267be 1100 echo "Your $sh doesn't grok # comments--I will strip them later on."
760ac839
LW
1101 shsharp=false
1102 cd ..
1103 echo "exec grep -v '^[ ]*#'" >spitshell
1104 chmod +x spitshell
1105 $eunicefix spitshell
1106 spitshell=`pwd`/spitshell
1107 cd UU
1108 echo "I presume that if # doesn't work, #! won't work either!"
1109 sharpbang=': use '
1110fi
1111rm -f try today
1112
1113: figure out how to guarantee sh startup
8ff267be 1114case "$startsh" in
1115'') startsh=${sharpbang}${sh} ;;
1116*)
760ac839 1117esac
760ac839
LW
1118cat >try <<EOSS
1119$startsh
1120set abc
1121test "$?abc" != 1
1122EOSS
1123
1124chmod +x try
1125$eunicefix try
1126if ./try; then
8ff267be 1127 : echo "Yup, it does."
760ac839 1128else
dfe9444c
AD
1129 echo "Hmm... '$startsh' does not guarantee sh startup..."
1130 echo "You may have to fix up the shell scripts to make sure $sh runs them."
760ac839
LW
1131fi
1132rm -f try
1133
aebf16e7
AD
1134
1135: Save command line options in file UU/cmdline.opt for later use in
1136: generating config.sh.
1137cat > cmdline.opt <<EOSH
1138# Configure command line arguments.
1139config_arg0='$0'
1140config_args='$*'
1141config_argc=$#
1142EOSH
1143argn=1
1144for arg in "$@"; do
1145 cat >>cmdline.opt <<EOSH
1146config_arg$argn='$arg'
1147EOSH
1148 argn=`expr $argn + 1`
1149done
1150
2304df62
AD
1151: produce awk script to parse command line options
1152cat >options.awk <<'EOF'
1153BEGIN {
02e93a22 1154 optstr = "A:dD:eEf:hKOrsSU:V"; # getopt-style specification
2304df62
AD
1155
1156 len = length(optstr);
1157 for (i = 1; i <= len; i++) {
1158 c = substr(optstr, i, 1);
1159 if (i < len) a = substr(optstr, i + 1, 1); else a = "";
1160 if (a == ":") {
1161 arg[c] = 1;
1162 i++;
1163 }
1164 opt[c] = 1;
1165 }
1166}
1167{
1168 expect = 0;
1169 str = $0;
1170 if (substr(str, 1, 1) != "-") {
1171 printf("'%s'\n", str);
1172 next;
1173 }
1174 len = length($0);
1175 for (i = 2; i <= len; i++) {
1176 c = substr(str, i, 1);
1177 if (!opt[c]) {
1178 printf("-%s\n", substr(str, i));
1179 next;
1180 }
1181 printf("-%s\n", c);
1182 if (arg[c]) {
1183 if (i < len)
1184 printf("'%s'\n", substr(str, i + 1));
1185 else
1186 expect = 1;
1187 next;
1188 }
1189 }
1190}
1191END {
1192 if (expect)
1193 print "?";
1194}
1195EOF
1196
1197: process the command line options
4633a7c4
LW
1198set X `for arg in "$@"; do echo "X$arg"; done |
1199 sed -e s/X// | awk -f options.awk`
2304df62
AD
1200eval "set $*"
1201shift
1202rm -f options.awk
1203
1204: set up default values
1205fastread=''
1206reuseval=false
1207config_sh=''
1208alldone=''
1209error=''
1210silent=''
1211extractsh=''
ecfc5424 1212override=''
16d20bd9 1213knowitall=''
02e93a22 1214rm -f optdef.sh posthint.sh
28757baa 1215cat >optdef.sh <<EOS
1216$startsh
1217EOS
2304df62 1218
dfe9444c 1219
2304df62
AD
1220: option parsing
1221while test $# -gt 0; do
1222 case "$1" in
1223 -d) shift; fastread=yes;;
1224 -e) shift; alldone=cont;;
1225 -f)
1226 shift
1227 cd ..
1228 if test -r "$1"; then
1229 config_sh="$1"
1230 else
a0d0e21e 1231 echo "$me: cannot read config file $1." >&2
2304df62
AD
1232 error=true
1233 fi
1234 cd UU
1235 shift;;
1236 -h) shift; error=true;;
1237 -r) shift; reuseval=true;;
dfe9444c 1238 -s) shift; silent=true; realsilent=true;;
2304df62 1239 -E) shift; alldone=exit;;
16d20bd9 1240 -K) shift; knowitall=true;;
ecfc5424 1241 -O) shift; override=true;;
dfe9444c 1242 -S) shift; silent=true; extractsh=true;;
a0d0e21e
LW
1243 -D)
1244 shift
1245 case "$1" in
1246 *=)
1247 echo "$me: use '-U symbol=', not '-D symbol='." >&2
1248 echo "$me: ignoring -D $1" >&2
1249 ;;
ecfc5424 1250 *=*) echo "$1" | \
1aef975c
AD
1251 sed -e "s/'/'\"'\"'/g" -e "s/=\(.*\)/='\1'/" >> optdef.sh;;
1252 *) echo "$1='define'" >> optdef.sh;;
a0d0e21e
LW
1253 esac
1254 shift
1255 ;;
1256 -U)
1257 shift
1258 case "$1" in
1aef975c 1259 *=) echo "$1" >> optdef.sh;;
a0d0e21e
LW
1260 *=*)
1261 echo "$me: use '-D symbol=val', not '-U symbol=val'." >&2
1262 echo "$me: ignoring -U $1" >&2
1263 ;;
1aef975c 1264 *) echo "$1='undef'" >> optdef.sh;;
a0d0e21e
LW
1265 esac
1266 shift
1267 ;;
02e93a22
JH
1268 -A)
1269 shift
1270 xxx=''
1271 yyy="$1"
02e93a22 1272 zzz=''
5f83a3e9 1273 uuu=undef
02e93a22 1274 case "$yyy" in
5f83a3e9
JH
1275 *=*) zzz=`echo $yyy|sed 's!=.*!!'`
1276 case "$zzz" in
1277 *:*) zzz='' ;;
1278 *) xxx=append
1279 zzz=" "`echo $yyy|sed 's!^[^=]*=!!'`
1280 yyy=`echo $yyy|sed 's!=.*!!'` ;;
1281 esac
1282 ;;
1283 esac
1284 case "$xxx" in
1285 '') case "$yyy" in
1286 *:*) xxx=`echo $yyy|sed 's!:.*!!'`
1287 yyy=`echo $yyy|sed 's!^[^:]*:!!'`
1288 zzz=`echo $yyy|sed 's!^[^=]*=!!'`
1289 yyy=`echo $yyy|sed 's!=.*!!'` ;;
1290 *) xxx=`echo $yyy|sed 's!:.*!!'`
1291 yyy=`echo $yyy|sed 's!^[^:]*:!!'` ;;
1292 esac
1293 ;;
1294 esac
02e93a22
JH
1295 case "$xxx" in
1296 append)
5f83a3e9 1297 echo "$yyy=\"\${$yyy}$zzz\"" >> posthint.sh ;;
02e93a22 1298 clear)
5f83a3e9 1299 echo "$yyy=''" >> posthint.sh ;;
02e93a22
JH
1300 define)
1301 case "$zzz" in
1302 '') zzz=define ;;
1303 esac
5f83a3e9 1304 echo "$yyy='$zzz'" >> posthint.sh ;;
02e93a22 1305 eval)
5f83a3e9 1306 echo "eval \"$yyy=$zzz\"" >> posthint.sh ;;
02e93a22 1307 prepend)
5f83a3e9 1308 echo "$yyy=\"$zzz\${$yyy}\"" >> posthint.sh ;;
02e93a22
JH
1309 undef)
1310 case "$zzz" in
1311 '') zzz="$uuu" ;;
1312 esac
5f83a3e9
JH
1313 echo "$yyy=$zzz" >> posthint.sh ;;
1314 *) echo "$me: unknown -A command '$xxx', ignoring -A $1" >&2 ;;
02e93a22 1315 esac
bde6b06b 1316 shift
02e93a22 1317 ;;
dfe9444c 1318 -V) echo "$me generated by metaconfig 3.0 PL70." >&2
5f83a3e9 1319 exit 0;;
2304df62 1320 --) break;;
a0d0e21e 1321 -*) echo "$me: unknown option $1" >&2; shift; error=true;;
2304df62
AD
1322 *) break;;
1323 esac
1324done
1325
1326case "$error" in
1327true)
1328 cat >&2 <<EOM
2afac517 1329Usage: $me [-dehrsEKOSV] [-f config.sh] [-D symbol] [-D symbol=value]
02e93a22 1330 [-U symbol] [-U symbol=] [-A command:symbol...]
2304df62
AD
1331 -d : use defaults for all answers.
1332 -e : go on without questioning past the production of config.sh.
1333 -f : specify an alternate default configuration file.
1334 -h : print this help message and exit (with an error status).
1335 -r : reuse C symbols value if possible (skips costly nm extraction).
1336 -s : silent mode, only echoes questions and essential information.
a0d0e21e
LW
1337 -D : define symbol to have some value:
1338 -D symbol symbol gets the value 'define'
1339 -D symbol=value symbol gets the value 'value'
2304df62 1340 -E : stop at the end of questions, after having produced config.sh.
16d20bd9 1341 -K : do not use unless you know what you are doing.
ecfc5424 1342 -O : let -D and -U override definitions from loaded configuration file.
2304df62 1343 -S : perform variable substitutions on all .SH files (can mix with -f)
a0d0e21e
LW
1344 -U : undefine symbol:
1345 -U symbol symbol gets the value 'undef'
1346 -U symbol= symbol gets completely empty
02e93a22 1347 -A : manipulate symbol after the platform specific hints have been applied:
5f83a3e9 1348 -A symbol=value append " "value to symbol
02e93a22
JH
1349 -A append:symbol=value append value to symbol
1350 -A define:symbol=value define symbol to have value
02e93a22
JH
1351 -A clear:symbol define symbol to be ''
1352 -A define:symbol define symbol to be 'define'
1353 -A eval:symbol=value define symbol to be eval of value
1354 -A prepend:symbol=value prepend value to symbol
1355 -A undef:symbol define symbol to be 'undef'
1356 -A undef:symbol= define symbol to be ''
2304df62
AD
1357 -V : print version number and exit (with a zero status).
1358EOM
1359 exit 1
1360 ;;
1361esac
1362
dfe9444c
AD
1363: Sanity checks
1364case "$fastread$alldone" in
1365yescont|yesexit) ;;
1366*)
aaeb8e51
GS
1367 case "$extractsh" in
1368 true) ;;
1369 *)
1370 if test ! -t 0; then
1371 echo "Say 'sh Configure', not 'sh <Configure'"
1372 exit 1
1373 fi
1374 ;;
1375 esac
dfe9444c
AD
1376 ;;
1377esac
1378
2304df62
AD
1379exec 4>&1
1380case "$silent" in
1381true) exec 1>/dev/null;;
1382esac
1383
ecfc5424 1384: run the defines and the undefines, if any, but leave the file out there...
1aef975c
AD
1385touch optdef.sh
1386. ./optdef.sh
02e93a22
JH
1387: create the posthint manipulation script and leave the file out there...
1388touch posthint.sh
a0d0e21e 1389
2304df62 1390: set package name
85e6fe83 1391package=perl5
b4eb6b3d
JH
1392first=`echo $package | sed -e 's/^\(.\).*/\1/'`
1393last=`echo $package | sed -e 's/^.\(.*\)/\1/'`
1394case "`echo AbyZ | tr '[:lower:]' '[:upper:]' 2>/dev/null`" in
1395ABYZ) spackage=`echo $first | tr '[:lower:]' '[:upper:]'`$last;;
1396*) spackage=`echo $first | tr '[a-z]' '[A-Z]'`$last;;
1397esac
2304df62 1398
2304df62
AD
1399: Some greps do not return status, grrr.
1400echo "grimblepritz" >grimble
1401if grep blurfldyick grimble >/dev/null 2>&1 ; then
1402 contains=contains
1403elif grep grimblepritz grimble >/dev/null 2>&1 ; then
1404 contains=grep
1405else
1406 contains=contains
1407fi
1408rm -f grimble
1409: the following should work in any shell
1410case "$contains" in
1411contains*)
1412 echo " "
1413 echo "AGH! Grep doesn't return a status. Attempting remedial action."
1414 cat >contains <<'EOSS'
1415grep "$1" "$2" >.greptmp && cat .greptmp && test -s .greptmp
1416EOSS
1417chmod +x contains
1418esac
1419
dfe9444c
AD
1420: Find the path to the source tree
1421case "$src" in
1422'') case "$0" in
b233458b
JH
1423 */*) src=`echo $0 | sed -e 's%/[^/][^/]*$%%'`
1424 case "$src" in
1425 /*) ;;
1426 *) src=`cd ../$src && pwd` ;;
1427 esac
1428 ;;
dfe9444c
AD
1429 *) src='.';;
1430 esac;;
1431esac
1432case "$src" in
1433'') src=/
1434 rsrc=/
1435 ;;
1436/*) rsrc="$src";;
1437*) rsrc="../$src";;
1438esac
1439if test -f $rsrc/Configure && \
1440 $contains "^package=$package$" $rsrc/Configure >/dev/null 2>&1
1441then
1442 : found it, so we are ok.
1443else
1444 rsrc=''
1445 for src in . .. ../.. ../../.. ../../../..; do
1446 if test -f ../$src/Configure && \
1447 $contains "^package=$package$" ../$src/Configure >/dev/null 2>&1
1448 then
1449 rsrc=../$src
1450 break
1451 fi
1452 done
1453fi
1454case "$rsrc" in
1455'')
1456 cat <<EOM >&4
1457
1458Sorry, I can't seem to locate the source dir for $package. Please start
1459Configure with an explicit path -- i.e. /some/path/Configure.
1460
1461EOM
1462 exit 1
1463 ;;
1464../.) rsrc='..';;
1465*)
1466 echo " "
1467 echo "Sources for $package found in \"$src\"." >&4
1468 ;;
1469esac
1470
1471: script used to extract .SH files with variable substitutions
1472cat >extract <<'EOS'
2000072c 1473CONFIGDOTSH=true
dfe9444c
AD
1474echo "Doing variable substitutions on .SH files..."
1475if test -f $src/MANIFEST; then
f7ab18e9 1476 set x `awk '{print $1}' <$src/MANIFEST | grep '\.SH$'`
dfe9444c
AD
1477else
1478 echo "(Looking for .SH files under the source directory.)"
1479 set x `(cd $src; find . -name "*.SH" -print)`
1480fi
1481shift
1482case $# in
14830) set x `(cd $src; echo *.SH)`; shift;;
1484esac
1485if test ! -f $src/$1; then
1486 shift
1487fi
1488mkdir_p='
1489name=$1;
1490create="";
1491while test $name; do
1492 if test ! -d "$name"; then
1493 create="$name $create";
1494 name=`echo $name | sed -e "s|^[^/]*$||"`;
1495 name=`echo $name | sed -e "s|\(.*\)/.*|\1|"`;
1496 else
1497 name="";
1498 fi;
1499done;
1500for file in $create; do
1501 mkdir $file;
1502done
1503'
1504for file in $*; do
1505 case "$src" in
1506 ".")
1507 case "$file" in
1508 */*)
1509 dir=`expr X$file : 'X\(.*\)/'`
1510 file=`expr X$file : 'X.*/\(.*\)'`
1511 (cd $dir && . ./$file)
1512 ;;
1513 *)
1514 . ./$file
1515 ;;
1516 esac
1517 ;;
1518 *)
1519 case "$file" in
1520 */*)
1521 dir=`expr X$file : 'X\(.*\)/'`
1522 file=`expr X$file : 'X.*/\(.*\)'`
1523 (set x $dir; shift; eval $mkdir_p)
1524 sh <$src/$dir/$file
1525 ;;
1526 *)
1527 sh <$src/$file
1528 ;;
1529 esac
1530 ;;
1531 esac
1532done
1533if test -f $src/config_h.SH; then
1534 if test ! -f config.h; then
1535 : oops, they left it out of MANIFEST, probably, so do it anyway.
1536 . $src/config_h.SH
1537 fi
1538fi
1539EOS
1540
1541: extract files and exit if asked to do so
1542case "$extractsh" in
1543true)
1544 case "$realsilent" in
1545 true) ;;
1546 *) exec 1>&4;;
1547 esac
1548 case "$config_sh" in
1549 '') config_sh='config.sh';;
1550 esac
1551 echo " "
1552 echo "Fetching answers from $config_sh..."
1553 cd ..
1554 . $config_sh
1555 test "$override" && . ./optdef.sh
1556 echo " "
1557 . UU/extract
1558 rm -rf UU
1559 echo "Done."
1560 exit 0
1561 ;;
1562esac
1563
1564: Eunice requires " " instead of "", can you believe it
1565echo " "
1566: Here we go...
1567echo "Beginning of configuration questions for $package."
1568
1569trap 'echo " "; test -d ../UU && rm -rf X $rmlist; exit 1' 1 2 3 15
1570
2304df62
AD
1571: first determine how to suppress newline on echo command
1572echo " "
1573echo "Checking echo to see how to suppress newlines..."
1574(echo "hi there\c" ; echo " ") >.echotmp
1575if $contains c .echotmp >/dev/null 2>&1 ; then
1576 echo "...using -n."
1577 n='-n'
1578 c=''
1579else
1580 cat <<'EOM'
1581...using \c
1582EOM
1583 n=''
1584 c='\c'
1585fi
1586echo $n "The star should be here-->$c"
1587echo '*'
1588rm -f .echotmp
1589
1590: Now test for existence of everything in MANIFEST
1591echo " "
dfe9444c 1592if test -f $rsrc/MANIFEST; then
2304df62 1593 echo "First let's make sure your kit is complete. Checking..." >&4
dfe9444c 1594 awk '$1 !~ /PACK[A-Z]+/ {print $1}' $rsrc/MANIFEST | split -50
2304df62 1595 rm -f missing
dfe9444c 1596 tmppwd=`pwd`
2304df62 1597 for filelist in x??; do
dfe9444c 1598 (cd $rsrc; ls `cat $tmppwd/$filelist` >/dev/null 2>>$tmppwd/missing)
2304df62
AD
1599 done
1600 if test -s missing; then
1601 cat missing >&4
1602 cat >&4 <<'EOM'
1603
1604THIS PACKAGE SEEMS TO BE INCOMPLETE.
1605
1606You have the option of continuing the configuration process, despite the
1607distinct possibility that your kit is damaged, by typing 'y'es. If you
1608do, don't blame me if something goes wrong. I advise you to type 'n'o
7f2de2d2 1609and contact the author (perlbug@perl.org).
2304df62
AD
1610
1611EOM
1612 echo $n "Continue? [n] $c" >&4
1613 read ans
1614 case "$ans" in
1615 y*)
1616 echo "Continuing..." >&4
1617 rm -f missing
1618 ;;
1619 *)
1620 echo "ABORTING..." >&4
1621 kill $$
1622 ;;
1623 esac
1624 else
dfe9444c 1625 echo "Looks good..."
2304df62
AD
1626 fi
1627else
1628 echo "There is no MANIFEST file. I hope your kit is complete !"
1629fi
1630rm -f missing x??
1631
5ff3f7a4
GS
1632echo " "
1633: Find the appropriate value for a newline for tr
1634if test -n "$DJGPP"; then
1635 trnl='\012'
1636fi
1637if test X"$trnl" = X; then
1638 case "`echo foo|tr '\n' x 2>/dev/null`" in
1639 foox) trnl='\n' ;;
1640 esac
1641fi
1642if test X"$trnl" = X; then
1643 case "`echo foo|tr '\012' x 2>/dev/null`" in
1644 foox) trnl='\012' ;;
1645 esac
1646fi
1647if test X"$trnl" = X; then
1648 cat <<EOM >&2
1649
1650$me: Fatal Error: cannot figure out how to translate newlines with 'tr'.
1651
1652EOM
1653 exit 1
1654fi
1655
2304df62
AD
1656: compute the number of columns on the terminal for proper question formatting
1657case "$COLUMNS" in
1658'') COLUMNS='80';;
1659esac
1660
1661: set up the echo used in my read
1662myecho="case \"\$xxxm\" in
1663'') echo $n \"\$rp $c\" >&4;;
1664*) case \"\$rp\" in
1665 '') echo $n \"[\$xxxm] $c\";;
1666 *)
1667 if test \`echo \"\$rp [\$xxxm] \" | wc -c\` -ge $COLUMNS; then
1668 echo \"\$rp\" >&4
1669 echo $n \"[\$xxxm] $c\" >&4
1670 else
1671 echo $n \"\$rp [\$xxxm] $c\" >&4
1672 fi
1673 ;;
1674 esac;;
1675esac"
1676
1677: now set up to do reads with possible shell escape and default assignment
1678cat <<EOSC >myread
28757baa 1679$startsh
2304df62
AD
1680xxxm=\$dflt
1681$myecho
1682ans='!'
1683case "\$fastread" in
1684yes) case "\$dflt" in
1685 '') ;;
1686 *) ans='';
1687 case "\$silent-\$rp" in
1688 true-) ;;
1689 *) echo " " >&4;;
1690 esac;;
1691 esac;;
1692*) case "\$silent" in
1693 true) case "\$rp" in
1694 '') ans='';;
1695 esac;;
1696 esac;;
1697esac
1698while expr "X\$ans" : "X!" >/dev/null; do
1699 read answ
1700 set x \$xxxm
1701 shift
dfe9444c 1702 aok=''; eval "ans=\\"\$answ\\"" && aok=y
2304df62 1703 case "\$answ" in
dfe9444c
AD
1704 "!")
1705 sh 1>&4
1706 echo " "
1707 $myecho
1708 ;;
1709 !*)
1710 set x \`expr "X\$ans" : "X!\(.*\)\$"\`
1711 shift
1712 sh 1>&4 -c "\$*"
1713 echo " "
1714 $myecho
1715 ;;
2304df62
AD
1716 "\$ans")
1717 case "\$ans" in
ecfc5424
AD
1718 \\&*)
1719 set x \`expr "X\$ans" : "X&\(.*\)\$"\`
1720 shift
1721 case "\$1" in
1722 -d)
1723 fastread=yes
40a7a20a 1724 echo "(OK, I'll run with -d after this question.)" >&4
ecfc5424
AD
1725 ;;
1726 -*)
40a7a20a 1727 echo "*** Sorry, \$1 not supported yet." >&4
ecfc5424
AD
1728 ;;
1729 esac
1730 $myecho
1731 ans=!
1732 ;;
2304df62
AD
1733 esac;;
1734 *)
1735 case "\$aok" in
1736 y)
1737 echo "*** Substitution done -- please confirm."
1738 xxxm="\$ans"
c9795ab7 1739 ans=\`echo $n "\$ans$c" | tr '$trnl' ' '\`
2304df62
AD
1740 xxxm="\$ans"
1741 ans=!
1742 ;;
1743 *)
1744 echo "*** Error -- try again."
1745 ans=!
1746 ;;
1747 esac
1748 $myecho
1749 ;;
1750 esac
1751 case "\$ans\$xxxm\$nostick" in
1752 '')
1753 ans=!
1754 $myecho
1755 ;;
1756 esac
1757done
1758case "\$ans" in
1759'') ans="\$xxxm";;
1760esac
1761EOSC
1762
1763: create .config dir to save info across Configure sessions
1764test -d ../.config || mkdir ../.config
1765cat >../.config/README <<EOF
1766This directory created by Configure to save information that should
dfe9444c 1767persist across sessions for $package.
2304df62
AD
1768
1769You may safely delete it if you wish.
1770EOF
1771
9507cadf 1772xversion=`awk '/define[ ]+PERL_VERSION/ {print $3}' $rsrc/patchlevel.h`
af960fef 1773case "$usedevel" in
0107c034 1774$define|true|[yY]*) ;;
9507cadf 1775*) case "$xversion" in
0107c034
JH
1776 *[13579])
1777 cat >&4 <<EOH
1778*** WHOA THERE!!! ***
1779
1780 This is an UNSTABLE DEVELOPMENT release.
9507cadf
JH
1781 The version of this $package distribution is $xversion, that is, odd,
1782 (as opposed to even) and that signifies a development release.
3d5d58b1 1783 If you want a maintenance release, you want an even-numbered version.
0107c034
JH
1784
1785 Do ***NOT*** install this into production use.
1786 Data corruption and crashes are possible.
1787
1788 It is most seriously suggested that you do not continue any further
1789 unless you want to help in developing and debugging Perl.
1790
1791EOH
1792 rp='Do you really want to continue?'
1793 dflt='n'
1794 . ./myread
1795 case "$ans" in
1796 [yY]) echo >&4 "Okay, continuing." ;;
1797 *) echo >&4 "Okay, bye."
1798 exit 1
1799 ;;
1800 esac
1801 ;;
1802 esac
1803 ;;
1804esac
1805
2304df62
AD
1806: general instructions
1807needman=true
1808firsttime=true
760ac839 1809user=`(logname) 2>/dev/null`
dfe9444c
AD
1810case "$user" in
1811'') user=`whoami 2>&1`;;
760ac839 1812esac
2304df62
AD
1813if $contains "^$user\$" ../.config/instruct >/dev/null 2>&1; then
1814 firsttime=false
1815 echo " "
1816 rp='Would you like to see the instructions?'
1817 dflt=n
1818 . ./myread
1819 case "$ans" in
1820 [yY]*) ;;
1821 *) needman=false;;
1822 esac
1823fi
1824if $needman; then
1825 cat <<EOH
4e2a5f63 1826
2304df62 1827This installation shell script will examine your system and ask you questions
a0d0e21e 1828to determine how the perl5 package should be installed. If you get
2304df62
AD
1829stuck on a question, you may use a ! shell escape to start a subshell or
1830execute a command. Many of the questions will have default answers in square
1831brackets; typing carriage return will give you the default.
1832
1833On some of the questions which ask for file or directory names you are allowed
1834to use the ~name construct to specify the login directory belonging to "name",
1835even if you don't have a shell which knows about that. Questions where this is
1836allowed will be marked "(~name ok)".
1837
1838EOH
1839 rp=''
1840 dflt='Type carriage return to continue'
1841 . ./myread
1842 cat <<'EOH'
1843
1844The prompter used in this script allows you to use shell variables and
1845backticks in your answers. You may use $1, $2, etc... to refer to the words
1846in the default answer, as if the default line was a set of arguments given to a
1847script shell. This means you may also use $* to repeat the whole default line,
1848so you do not have to re-type everything to add something to the default.
1849
1850Everytime there is a substitution, you will have to confirm. If there is an
1851error (e.g. an unmatched backtick), the default answer will remain unchanged
1852and you will be prompted again.
1853
1854If you are in a hurry, you may run 'Configure -d'. This will bypass nearly all
1855the questions and use the computed defaults (or the previous answers if there
1856was already a config.sh file). Type 'Configure -h' for a list of options.
ecfc5424 1857You may also start interactively and then answer '& -d' at any prompt to turn
dfe9444c 1858on the non-interactive behaviour for the remainder of the execution.
2304df62
AD
1859
1860EOH
1861 . ./myread
1862 cat <<EOH
1863
1864Much effort has been expended to ensure that this shell script will run on any
1865Unix system. If despite that it blows up on yours, your best bet is to edit
40000a8c
AD
1866Configure and run it again. If you can't run Configure for some reason,
1867you'll have to generate a config.sh file by hand. Whatever problems you
7f2de2d2 1868have, let me (perlbug@perl.org) know how I blew it.
2304df62
AD
1869
1870This installation script affects things in two ways:
1871
18721) it may do direct variable substitutions on some of the files included
1873 in this kit.
18742) it builds a config.h file for inclusion in C programs. You may edit
1875 any of these files as the need arises after running this script.
1876
1877If you make a mistake on a question, there is no easy way to back up to it
1878currently. The easiest thing to do is to edit config.sh and rerun all the SH
1879files. Configure will offer to let you do this before it runs the SH files.
1880
1881EOH
1882 dflt='Type carriage return to continue'
1883 . ./myread
1884 case "$firsttime" in
1885 true) echo $user >>../.config/instruct;;
1886 esac
1887fi
1888
2304df62
AD
1889: find out where common programs are
1890echo " "
1891echo "Locating common programs..." >&4
1892cat <<EOSC >loc
1893$startsh
1894case \$# in
18950) exit 1;;
1896esac
1897thing=\$1
1898shift
1899dflt=\$1
1900shift
1901for dir in \$*; do
1902 case "\$thing" in
1903 .)
1904 if test -d \$dir/\$thing; then
1905 echo \$dir
1906 exit 0
1907 fi
1908 ;;
1909 *)
a0d0e21e 1910 for thisthing in \$dir/\$thing; do
ecfc5424 1911 : just loop through to pick last item
a0d0e21e 1912 done
25f94b33 1913 if test -f \$thisthing; then
a0d0e21e 1914 echo \$thisthing
2304df62
AD
1915 exit 0
1916 elif test -f \$dir/\$thing.exe; then
c4f23d77
AD
1917 if test -n "$DJGPP"; then
1918 echo \$dir/\$thing.exe
1919 else
1920 : on Eunice apparently
1921 echo \$dir/\$thing
1922 fi
2304df62
AD
1923 exit 0
1924 fi
1925 ;;
1926 esac
1927done
1928echo \$dflt
1929exit 1
1930EOSC
1931chmod +x loc
1932$eunicefix loc
1933loclist="
1934awk
1935cat
b4eb6b3d
JH
1936comm
1937cp
2304df62
AD
1938echo
1939expr
1940grep
a0d0e21e 1941ls
dfe9444c 1942make
b4eb6b3d 1943mkdir
2304df62
AD
1944rm
1945sed
b4eb6b3d 1946sort
85e6fe83 1947touch
2304df62 1948tr
b4eb6b3d 1949uniq
2304df62
AD
1950"
1951trylist="
1952Mcc
dfe9444c 1953ar
b4eb6b3d 1954byacc
2304df62 1955cpp
b4eb6b3d 1956csh
2304df62
AD
1957date
1958egrep
8ff267be 1959gzip
b4eb6b3d 1960less
8ff267be 1961ln
b4eb6b3d 1962more
693762b4 1963nm
b4eb6b3d
JH
1964nroff
1965pg
2304df62
AD
1966test
1967uname
8ff267be 1968zip
2304df62 1969"
8e07c86e 1970pth=`echo $PATH | sed -e "s/$p_/ /g"`
2304df62
AD
1971pth="$pth /lib /usr/lib"
1972for file in $loclist; do
dfe9444c
AD
1973 eval xxx=\$$file
1974 case "$xxx" in
1975 /*|?:[\\/]*)
1976 if test -f "$xxx"; then
1977 : ok
1978 else
1979 echo "WARNING: no $xxx -- ignoring your setting for $file." >&4
1980 xxx=`./loc $file $file $pth`
1981 fi
1982 ;;
1983 '') xxx=`./loc $file $file $pth`;;
1984 *) xxx=`./loc $xxx $xxx $pth`;;
1985 esac
2304df62
AD
1986 eval $file=$xxx
1987 eval _$file=$xxx
1988 case "$xxx" in
1989 /*)
1990 echo $file is in $xxx.
1991 ;;
8e07c86e
AD
1992 ?:[\\/]*)
1993 echo $file is in $xxx.
1994 ;;
2304df62 1995 *)
25f94b33
AD
1996 echo "I don't know where '$file' is, and my life depends on it." >&4
1997 echo "Go find a public domain implementation or fix your PATH setting!" >&4
4633a7c4 1998 exit 1
2304df62
AD
1999 ;;
2000 esac
2001done
2002echo " "
2003echo "Don't worry if any of the following aren't found..."
2004say=offhand
2005for file in $trylist; do
dfe9444c
AD
2006 eval xxx=\$$file
2007 case "$xxx" in
2008 /*|?:[\\/]*)
2009 if test -f "$xxx"; then
2010 : ok
2011 else
2012 echo "WARNING: no $xxx -- ignoring your setting for $file." >&4
2013 xxx=`./loc $file $file $pth`
2014 fi
2015 ;;
2016 '') xxx=`./loc $file $file $pth`;;
2017 *) xxx=`./loc $xxx $xxx $pth`;;
2018 esac
2304df62
AD
2019 eval $file=$xxx
2020 eval _$file=$xxx
2021 case "$xxx" in
2022 /*)
2023 echo $file is in $xxx.
2024 ;;
8e07c86e
AD
2025 ?:[\\/]*)
2026 echo $file is in $xxx.
2027 ;;
2304df62
AD
2028 *)
2029 echo "I don't see $file out there, $say."
2030 say=either
2031 ;;
2032 esac
2033done
2034case "$egrep" in
2035egrep)
2036 echo "Substituting grep for egrep."
2037 egrep=$grep
2038 ;;
2039esac
8ff267be 2040case "$ln" in
2041ln)
2042 echo "Substituting cp for ln."
2043 ln=$cp
2044 ;;
2045esac
2304df62
AD
2046case "$test" in
2047test)
2048 echo "Hopefully test is built into your sh."
2049 ;;
2050*)
ecfc5424 2051 if `sh -c "PATH= test true" >/dev/null 2>&1`; then
2304df62
AD
2052 echo "Using the test built into your sh."
2053 test=test
2054 _test=test
2055 fi
2056 ;;
2057esac
2058case "$echo" in
2059echo)
2060 echo "Hopefully echo is built into your sh."
2061 ;;
2062'') ;;
2063*)
2064 echo " "
2065echo "Checking compatibility between $echo and builtin echo (if any)..." >&4
2066 $echo $n "hi there$c" >foo1
2067 echo $n "hi there$c" >foo2
2068 if cmp foo1 foo2 >/dev/null 2>&1; then
2069 echo "They are compatible. In fact, they may be identical."
2070 else
2071 case "$n" in
2072 '-n') n='' c='\c';;
2073 *) n='-n' c='';;
2074 esac
2075 cat <<FOO
2076They are not compatible! You are probably running ksh on a non-USG system.
2077I'll have to use $echo instead of the builtin, since Bourne shell doesn't
2078have echo built in and we may have to run some Bourne shell scripts. That
2079means I'll have to use '$n$c' to suppress newlines now. Life is ridiculous.
2080
2081FOO
2082 $echo $n "The star should be here-->$c"
2083 $echo "*"
2084 fi
2085 $rm -f foo1 foo2
2086 ;;
2087esac
2088
2573c5f9
JH
2089cat <<EOS >checkcc
2090$startsh
2091EOS
2092cat <<'EOSC' >>checkcc
2093case "$cc" in
2094'') ;;
2095*) $rm -f try try.*
2096 $cat >try.c <<EOM
2097int main(int argc, char *argv[]) {
2098 return 0;
2099}
2100EOM
2101 if $cc -o try try.c; then
2102 :
2103 else
2104 echo "Uh-oh, the C compiler '$cc' doesn't seem to be working." >&4
2105 despair=yes
2106 trygcc=yes
2107 case "$cc" in
2108 *gcc*) trygcc=no ;;
2109 esac
2110 case "`$cc -v -c try.c 2>&1`" in
2111 *gcc*) trygcc=no ;;
2112 esac
2113 if $test X"$trygcc" = Xyes; then
2114 if gcc -o try -c try.c; then
2115 echo " "
2116 echo "You seem to have a working gcc, though." >&4
2117 rp="Would you like to use it?"
2118 dflt=y
2119 if $test -f myread; then
2120 . ./myread
2121 else
2122 if $test -f UU/myread; then
2123 . ./UU/myread
2124 else
2125 echo "Cannot find myread, sorry. Aborting." >&2
2126 exit 1
2127 fi
2128 fi
2129 case "$ans" in
e723fc21 2130 [yY]*) cc=gcc; ccname=gcc; ccflags=''; despair=no ;;
2573c5f9
JH
2131 esac
2132 fi
2133 fi
2134 if $test X"$despair" = Xyes; then
2135 echo "You need to find a working C compiler." >&4
2136 echo "I cannot continue any further, aborting." >&4
2137 exit 1
2138 fi
2139 fi
2140 $rm -f try try.*
2141 ;;
2142esac
2143EOSC
2144
a0d0e21e
LW
2145: determine whether symbolic links are supported
2146echo " "
2147$touch blurfl
2148if $ln -s blurfl sym > /dev/null 2>&1 ; then
2149 echo "Symbolic links are supported." >&4
2150 lns="$ln -s"
2151else
2152 echo "Symbolic links are NOT supported." >&4
2153 lns="$ln"
2154fi
2155$rm -f blurfl sym
2156
ecfc5424
AD
2157: see whether [:lower:] and [:upper:] are supported character classes
2158echo " "
ecfc5424
AD
2159case "`echo AbyZ | $tr '[:lower:]' '[:upper:]' 2>/dev/null`" in
2160ABYZ)
2161 echo "Good, your tr supports [:lower:] and [:upper:] to convert case." >&4
2162 up='[:upper:]'
2163 low='[:lower:]'
2164 ;;
28e8609d
JH
2165*) # There is a discontinuity in EBCDIC between 'I' and 'J'
2166 # (0xc9 and 0xd1), therefore that is a nice testing point.
2167 if test "X$up" = X -o "X$low" = X; then
3eaeeeae 2168 case "`echo IJ | $tr '[I-J]' '[i-j]' 2>/dev/null`" in
28e8609d
JH
2169 ij) up='[A-Z]'
2170 low='[a-z]'
2171 ;;
2172 esac
2173 fi
2174 if test "X$up" = X -o "X$low" = X; then
3eaeeeae 2175 case "`echo IJ | $tr I-J i-j 2>/dev/null`" in
28e8609d
JH
2176 ij) up='A-Z'
2177 low='a-z'
2178 ;;
2179 esac
2180 fi
2181 if test "X$up" = X -o "X$low" = X; then
2182 case "`echo IJ | od -x 2>/dev/null`" in
2183 *C9D1*|*c9d1*)
2184 echo "Hey, this might be EBCDIC." >&4
2185 if test "X$up" = X -o "X$low" = X; then
5ff3f7a4 2186 case "`echo IJ | $tr '[A-IJ-RS-Z]' '[a-ij-rs-z]' 2>/dev/null`" in
28e8609d
JH
2187 ij) up='[A-IJ-RS-Z]'
2188 low='[a-ij-rs-z]'
2189 ;;
2190 esac
2191 fi
2192 if test "X$up" = X -o "X$low" = X; then
5ff3f7a4 2193 case "`echo IJ | $tr A-IJ-RS-Z a-ij-rs-z 2>/dev/null`" in
28e8609d
JH
2194 ij) up='A-IJ-RS-Z'
2195 low='a-ij-rs-z'
2196 ;;
2197 esac
2198 fi
2199 ;;
2200 esac
2201 fi
2202esac
3eaeeeae 2203case "`echo IJ | $tr \"$up\" \"$low\" 2>/dev/null`" in
28e8609d
JH
2204ij)
2205 echo "Using $up and $low to convert case." >&4
2206 ;;
ecfc5424 2207*)
28e8609d
JH
2208 echo "I don't know how to translate letters from upper to lower case." >&4
2209 echo "Your tr is not acting any way I know of." >&4
2210 exit 1
2211 ;;
ecfc5424
AD
2212esac
2213: set up the translation script tr, must be called with ./tr of course
2214cat >tr <<EOSC
2215$startsh
2216case "\$1\$2" in
2217'[A-Z][a-z]') exec $tr '$up' '$low';;
2218'[a-z][A-Z]') exec $tr '$low' '$up';;
2219esac
2220exec $tr "\$@"
2221EOSC
2222chmod +x tr
2223$eunicefix tr
2224
2304df62
AD
2225: Try to determine whether config.sh was made on this system
2226case "$config_sh" in
2227'')
43999f95
JH
2228myuname=`$uname -a 2>/dev/null`
2229$test -z "$myuname" && myuname=`hostname 2>/dev/null`
28e8609d
JH
2230# tr '[A-Z]' '[a-z]' would not work in EBCDIC
2231# because the A-Z/a-z are not consecutive.
a0d0e21e 2232myuname=`echo $myuname | $sed -e 's/^[^=]*=//' -e 's/\///g' | \
3eaeeeae 2233 ./tr '[A-Z]' '[a-z]' | $tr $trnl ' '`
1aef975c 2234newmyuname="$myuname"
2304df62 2235dflt=n
16d20bd9
AD
2236case "$knowitall" in
2237'')
2238 if test -f ../config.sh; then
2239 if $contains myuname= ../config.sh >/dev/null 2>&1; then
2240 eval "`grep myuname= ../config.sh`"
2241 fi
2242 if test "X$myuname" = "X$newmyuname"; then
2243 dflt=y
2244 fi
2304df62 2245 fi
16d20bd9
AD
2246 ;;
2247*) dflt=y;;
2248esac
2304df62
AD
2249
2250: Get old answers from old config file if Configure was run on the
2251: same system, otherwise use the hints.
2252hint=default
2253cd ..
2254if test -f config.sh; then
16d20bd9
AD
2255 echo " "
2256 rp="I see a config.sh file. Shall I use it to set the defaults?"
2304df62
AD
2257 . UU/myread
2258 case "$ans" in
2259 n*|N*) echo "OK, I'll ignore it."; mv config.sh config.sh.old;;
2260 *) echo "Fetching default answers from your old config.sh file..." >&4
ecfc5424
AD
2261 tmp_n="$n"
2262 tmp_c="$c"
85cad39c 2263 tmp_sh="$sh"
2304df62
AD
2264 . ./config.sh
2265 cp config.sh UU
ecfc5424
AD
2266 n="$tmp_n"
2267 c="$tmp_c"
85cad39c 2268 : Older versions did not always set $sh. Catch re-use of such
2269 : an old config.sh.
2270 case "$sh" in
2271 '') sh="$tmp_sh" ;;
2272 esac
2304df62
AD
2273 hint=previous
2274 ;;
2275 esac
2276fi
2573c5f9 2277. ./UU/checkcc
2304df62
AD
2278if test ! -f config.sh; then
2279 $cat <<EOM
2280
4e2a5f63
AD
2281First time through, eh? I have some defaults handy for some systems
2282that need some extra help getting the Configure answers right:
2304df62
AD
2283
2284EOM
dfe9444c 2285 (cd $src/hints; ls -C *.sh) | $sed 's/\.sh/ /g' >&4
2304df62
AD
2286 dflt=''
2287 : Half the following guesses are probably wrong... If you have better
7f2de2d2 2288 : tests or hints, please send them to perlbug@perl.org
2304df62 2289 : The metaconfig authors would also appreciate a copy...
a0d0e21e 2290 $test -f /irix && osname=irix
85e6fe83
LW
2291 $test -f /xenix && osname=sco_xenix
2292 $test -f /dynix && osname=dynix
2293 $test -f /dnix && osname=dnix
5f05dabc 2294 $test -f /lynx.os && osname=lynxos
2295 $test -f /unicos && osname=unicos && osvers=`$uname -r`
c71a9cee 2296 $test -f /unicosmk && osname=unicosmk && osvers=`$uname -r`
7a4c00b4 2297 $test -f /unicosmk.ar && osname=unicosmk && osvers=`$uname -r`
85e6fe83 2298 $test -f /bin/mips && /bin/mips && osname=mips
ecfc5424
AD
2299 $test -d /NextApps && set X `hostinfo | grep 'NeXT Mach.*:' | \
2300 $sed -e 's/://' -e 's/\./_/'` && osname=next && osvers=$4
a0d0e21e
LW
2301 $test -d /usr/apollo/bin && osname=apollo
2302 $test -f /etc/saf/_sactab && osname=svr4
85e6fe83 2303 $test -d /usr/include/minix && osname=minix
e060872b 2304 if $test -d /MachTen -o -d /MachTen_Folder; then
dfe9444c 2305 osname=machten
4633a7c4 2306 if $test -x /sbin/version; then
dfe9444c 2307 osvers=`/sbin/version | $awk '{print $2}' |
4633a7c4
LW
2308 $sed -e 's/[A-Za-z]$//'`
2309 elif $test -x /usr/etc/version; then
dfe9444c 2310 osvers=`/usr/etc/version | $awk '{print $2}' |
4633a7c4
LW
2311 $sed -e 's/[A-Za-z]$//'`
2312 else
2313 osvers="$2.$3"
2314 fi
2315 fi
aaacdc8b
GS
2316
2317 $test -f /sys/posix.dll &&
2318 $test -f /usr/bin/what &&
2319 set X `/usr/bin/what /sys/posix.dll` &&
2320 $test "$3" = UWIN &&
2321 osname=uwin &&
2322 osvers="$5"
2323
2304df62
AD
2324 if $test -f $uname; then
2325 set X $myuname
2326 shift
2327
2304df62 2328 case "$5" in
85e6fe83 2329 fps*) osname=fps ;;
2304df62
AD
2330 mips*)
2331 case "$4" in
85e6fe83
LW
2332 umips) osname=umips ;;
2333 *) osname=mips ;;
2304df62 2334 esac;;
85e6fe83
LW
2335 [23]100) osname=mips ;;
2336 next*) osname=next ;;
ecfc5424 2337 i386*)
c6912327
JH
2338 tmp=`/bin/uname -X 2>/dev/null|awk '/3\.2v[45]/{ print $(NF) }'`
2339 if $test "$tmp" != "" -a "$3" = "3.2" -a -f '/etc/systemid'; then
619ffc2b
JH
2340 osname='sco'
2341 osvers=$tmp
2342 elif $test -f /etc/kconfig; then
ecfc5424 2343 osname=isc
bd628c73 2344 if test "$lns" = "$ln -s"; then
a0d0e21e
LW
2345 osvers=4
2346 elif $contains _SYSV3 /usr/include/stdio.h > /dev/null 2>&1 ; then
2347 osvers=3
2304df62 2348 elif $contains _POSIX_SOURCE /usr/include/stdio.h > /dev/null 2>&1 ; then
a0d0e21e 2349 osvers=2
ecfc5424
AD
2350 fi
2351 fi
2000072c 2352 tmp=''
ecfc5424 2353 ;;
c4f23d77
AD
2354 pc*)
2355 if test -n "$DJGPP"; then
2356 osname=dos
2357 osvers=djgpp
2358 fi
2359 ;;
2304df62
AD
2360 esac
2361
2362 case "$1" in
a0d0e21e
LW
2363 aix) osname=aix
2364 tmp=`( (oslevel) 2>/dev/null || echo "not found") 2>&1`
2365 case "$tmp" in
1aef975c 2366 'not found') osvers="$4"."$3" ;;
a0d0e21e
LW
2367 '<3240'|'<>3240') osvers=3.2.0 ;;
2368 '=3240'|'>3240'|'<3250'|'<>3250') osvers=3.2.4 ;;
2369 '=3250'|'>3250') osvers=3.2.5 ;;
1aef975c 2370 *) osvers=$tmp;;
a0d0e21e
LW
2371 esac
2372 ;;
aaacdc8b
GS
2373 bsd386) osname=bsd386
2374 osvers=`$uname -r`
2375 ;;
2376 cygwin*) osname=cygwin
2377 osvers="$3"
2378 ;;
23f87696
SZ
2379 *dc.osx) osname=dcosx
2380 osvers="$3"
2381 ;;
a0d0e21e
LW
2382 dnix) osname=dnix
2383 osvers="$3"
2384 ;;
2385 domainos) osname=apollo
2386 osvers="$3"
2387 ;;
2388 dgux) osname=dgux
2389 osvers="$3"
2390 ;;
760ac839 2391 dynixptx*) osname=dynixptx
e58e581d 2392 osvers=`echo "$4"|sed 's/^v//'`
760ac839 2393 ;;
a0d0e21e
LW
2394 freebsd) osname=freebsd
2395 osvers="$3" ;;
2396 genix) osname=genix ;;
2397 hp*) osname=hpux
bfb7748a 2398 osvers=`echo "$3" | $sed 's,.*\.\([0-9]*\.[0-9]*\),\1,'`
a0d0e21e 2399 ;;
a78b0d02 2400 irix*) osname=irix
a0d0e21e
LW
2401 case "$3" in
2402 4*) osvers=4 ;;
2403 5*) osvers=5 ;;
ecfc5424 2404 *) osvers="$3" ;;
a0d0e21e
LW
2405 esac
2406 ;;
2407 linux) osname=linux
2408 case "$3" in
a0d0e21e
LW
2409 *) osvers="$3" ;;
2410 esac
2411 ;;
28e8609d
JH
2412 MiNT) osname=mint
2413 ;;
2414 netbsd*) osname=netbsd
ecfc5424
AD
2415 osvers="$3"
2416 ;;
4e81affe
MM
2417 news-os) osvers="$3"
2418 case "$3" in
2419 4*) osname=newsos4 ;;
2420 *) osname=newsos ;;
2421 esac
2422 ;;
aaacdc8b
GS
2423 next*) osname=next ;;
2424 POSIX-BC | posix-bc ) osname=posix-bc
2425 osvers="$3"
a0d0e21e 2426 ;;
ae3afa4e
TH
2427 powerux | power_ux | powermax_os | powermaxos | \
2428 powerunix | power_unix) osname=powerux
2429 osvers="$3"
2430 ;;
aaacdc8b
GS
2431 qnx) osname=qnx
2432 osvers="$4"
2433 ;;
a0d0e21e
LW
2434 solaris) osname=solaris
2435 case "$3" in
2436 5*) osvers=`echo $3 | $sed 's/^5/2/g'` ;;
ecfc5424 2437 *) osvers="$3" ;;
a0d0e21e
LW
2438 esac
2439 ;;
85e6fe83
LW
2440 sunos) osname=sunos
2441 case "$3" in
85e6fe83
LW
2442 5*) osname=solaris
2443 osvers=`echo $3 | $sed 's/^5/2/g'` ;;
a0d0e21e 2444 *) osvers="$3" ;;
2304df62
AD
2445 esac
2446 ;;
a0d0e21e 2447 titanos) osname=titanos
85e6fe83 2448 case "$3" in
a0d0e21e
LW
2449 1*) osvers=1 ;;
2450 2*) osvers=2 ;;
2451 3*) osvers=3 ;;
2452 4*) osvers=4 ;;
ecfc5424 2453 *) osvers="$3" ;;
2304df62
AD
2454 esac
2455 ;;
85e6fe83 2456 ultrix) osname=ultrix
ecfc5424 2457 osvers="$3"
2304df62 2458 ;;
28757baa 2459 osf1|mls+) case "$5" in
fed7345c
AD
2460 alpha)
2461 osname=dec_osf
2aa76180
JH
2462 osvers=`sizer -v | awk '{print $3}' | tr '[A-Z]' '[a-z]' | sed 's/^[xvt]//'`
2463 case "$osvers" in
2464 [1-9].[0-9]*) ;;
2465 *) osvers=`echo "$3" | sed 's/^[xvt]//'` ;;
2466 esac
ecfc5424
AD
2467 ;;
2468 hp*) osname=hp_osf1 ;;
2469 mips) osname=mips_osf1 ;;
85e6fe83
LW
2470 esac
2471 ;;
0337d152
BG
2472 unixware) osname=svr5
2473 osvers="$4"
2474 ;;
2475 uts) osname=uts
a0d0e21e
LW
2476 osvers="$3"
2477 ;;
85e6fe83 2478 $2) case "$osname" in
2304df62 2479 *isc*) ;;
a0d0e21e 2480 *freebsd*) ;;
5f05dabc 2481 svr*)
a0d0e21e
LW
2482 : svr4.x or possibly later
2483 case "svr$3" in
2484 ${osname}*)
2485 osname=svr$3
2486 osvers=$4
2487 ;;
2488 esac
2489 case "$osname" in
2490 svr4.0)
2491 : Check for ESIX
2492 if test -f /stand/boot ; then
2493 eval `grep '^INITPROG=[a-z/0-9]*$' /stand/boot`
ecfc5424
AD
2494 if test -n "$INITPROG" -a -f "$INITPROG"; then
2495 isesix=`strings -a $INITPROG|grep 'ESIX SYSTEM V/386 Release 4.0'`
2496 if test -n "$isesix"; then
a0d0e21e
LW
2497 osname=esix4
2498 fi
2499 fi
2500 fi
2501 ;;
2502 esac
2503 ;;
2304df62 2504 *) if test -f /etc/systemid; then
a0d0e21e
LW
2505 osname=sco
2506 set `echo $3 | $sed 's/\./ /g'` $4
c4f23d77 2507 if $test -f $src/hints/sco_$1_$2_$3.sh; then
85e6fe83 2508 osvers=$1.$2.$3
c4f23d77 2509 elif $test -f $src/hints/sco_$1_$2.sh; then
85e6fe83 2510 osvers=$1.$2
c4f23d77 2511 elif $test -f $src/hints/sco_$1.sh; then
85e6fe83 2512 osvers=$1
2304df62 2513 fi
a0d0e21e
LW
2514 else
2515 case "$osname" in
2516 '') : Still unknown. Probably a generic Sys V.
2517 osname="sysv"
2518 osvers="$3"
2519 ;;
2520 esac
2304df62
AD
2521 fi
2522 ;;
2523 esac
2524 ;;
a0d0e21e
LW
2525 *) case "$osname" in
2526 '') : Still unknown. Probably a generic BSD.
2527 osname="$1"
2528 osvers="$3"
2529 ;;
2530 esac
2531 ;;
2304df62
AD
2532 esac
2533 else
dfe9444c
AD
2534 if test -f /vmunix -a -f $src/hints/news_os.sh; then
2535 (what /vmunix | UU/tr '[A-Z]' '[a-z]') > UU/kernel.what 2>&1
2536 if $contains news-os UU/kernel.what >/dev/null 2>&1; then
2537 osname=news_os
2304df62 2538 fi
dfe9444c 2539 $rm -f UU/kernel.what
8e07c86e
AD
2540 elif test -d c:/.; then
2541 set X $myuname
2542 osname=os2
2543 osvers="$5"
2304df62
AD
2544 fi
2545 fi
85e6fe83 2546
a0d0e21e
LW
2547 : Now look for a hint file osname_osvers, unless one has been
2548 : specified already.
2549 case "$hintfile" in
2550 ''|' ')
1e127011 2551 file=`echo "${osname}_${osvers}" | $sed -e 's%\.%_%g' -e 's%_$%%'`
a0d0e21e 2552 : Also try without trailing minor version numbers.
1e127011
DD
2553 xfile=`echo $file | $sed -e 's%_[^_]*$%%'`
2554 xxfile=`echo $xfile | $sed -e 's%_[^_]*$%%'`
2555 xxxfile=`echo $xxfile | $sed -e 's%_[^_]*$%%'`
2556 xxxxfile=`echo $xxxfile | $sed -e 's%_[^_]*$%%'`
a0d0e21e
LW
2557 case "$file" in
2558 '') dflt=none ;;
2559 *) case "$osvers" in
2560 '') dflt=$file
2561 ;;
dfe9444c 2562 *) if $test -f $src/hints/$file.sh ; then
a0d0e21e 2563 dflt=$file
dfe9444c 2564 elif $test -f $src/hints/$xfile.sh ; then
a0d0e21e 2565 dflt=$xfile
dfe9444c 2566 elif $test -f $src/hints/$xxfile.sh ; then
a0d0e21e 2567 dflt=$xxfile
dfe9444c 2568 elif $test -f $src/hints/$xxxfile.sh ; then
a0d0e21e 2569 dflt=$xxxfile
dfe9444c 2570 elif $test -f $src/hints/$xxxxfile.sh ; then
a0d0e21e 2571 dflt=$xxxxfile
dfe9444c 2572 elif $test -f "$src/hints/${osname}.sh" ; then
a0d0e21e
LW
2573 dflt="${osname}"
2574 else
2575 dflt=none
2576 fi
2577 ;;
2578 esac
85e6fe83
LW
2579 ;;
2580 esac
4e2a5f63
AD
2581 if $test -f Policy.sh ; then
2582 case "$dflt" in
2583 *Policy*) ;;
2584 none) dflt="Policy" ;;
2585 *) dflt="Policy $dflt" ;;
2586 esac
2587 fi
85e6fe83 2588 ;;
a0d0e21e 2589 *)
ecfc5424 2590 dflt=`echo $hintfile | $sed 's/\.sh$//'`
a0d0e21e 2591 ;;
2304df62 2592 esac
1aef975c 2593
4e2a5f63
AD
2594 if $test -f Policy.sh ; then
2595 $cat <<EOM
2596
2597There's also a Policy hint file available, which should make the
2598site-specific (policy) questions easier to answer.
2599EOM
2600
2601 fi
2602
2304df62
AD
2603 $cat <<EOM
2604
2605You may give one or more space-separated answers, or "none" if appropriate.
4e2a5f63 2606A well-behaved OS will have no hints, so answering "none" or just "Policy"
a3635516 2607is a good thing. DO NOT give a wrong version or a wrong OS.
2304df62
AD
2608
2609EOM
4e2a5f63 2610
2304df62 2611 rp="Which of these apply, if any?"
dfe9444c 2612 . UU/myread
85e6fe83
LW
2613 tans=$ans
2614 for file in $tans; do
4e2a5f63
AD
2615 if $test X$file = XPolicy -a -f Policy.sh; then
2616 . Policy.sh
2617 $cat Policy.sh >> UU/config.sh
2618 elif $test -f $src/hints/$file.sh; then
dfe9444c
AD
2619 . $src/hints/$file.sh
2620 $cat $src/hints/$file.sh >> UU/config.sh
85e6fe83 2621 elif $test X$tans = X -o X$tans = Xnone ; then
2304df62
AD
2622 : nothing
2623 else
85e6fe83
LW
2624 : Give one chance to correct a possible typo.
2625 echo "$file.sh does not exist"
2626 dflt=$file
2627 rp="hint to use instead?"
dfe9444c 2628 . UU/myread
85e6fe83 2629 for file in $ans; do
dfe9444c
AD
2630 if $test -f "$src/hints/$file.sh"; then
2631 . $src/hints/$file.sh
2632 $cat $src/hints/$file.sh >> UU/config.sh
85e6fe83
LW
2633 elif $test X$ans = X -o X$ans = Xnone ; then
2634 : nothing
2635 else
2636 echo "$file.sh does not exist -- ignored."
2637 fi
2638 done
2304df62
AD
2639 fi
2640 done
85e6fe83 2641
2304df62 2642 hint=recommended
85e6fe83 2643 : Remember our hint file for later.
dfe9444c 2644 if $test -f "$src/hints/$file.sh" ; then
a0d0e21e 2645 hintfile="$file"
85e6fe83 2646 else
a0d0e21e 2647 hintfile=''
85e6fe83 2648 fi
2304df62
AD
2649fi
2650cd UU
2651;;
2652*)
2653 echo " "
2654 echo "Fetching default answers from $config_sh..." >&4
ecfc5424
AD
2655 tmp_n="$n"
2656 tmp_c="$c"
2304df62
AD
2657 cd ..
2658 cp $config_sh config.sh 2>/dev/null
a78b0d02 2659 chmod +w config.sh
2304df62
AD
2660 . ./config.sh
2661 cd UU
2662 cp ../config.sh .
ecfc5424
AD
2663 n="$tmp_n"
2664 c="$tmp_c"
2304df62
AD
2665 hint=previous
2666 ;;
2667esac
1aef975c
AD
2668test "$override" && . ./optdef.sh
2669myuname="$newmyuname"
2304df62
AD
2670
2671: Restore computed paths
2672for file in $loclist $trylist; do
2673 eval $file="\$_$file"
2674done
2675
85e6fe83 2676cat << EOM
a0d0e21e 2677
85e6fe83 2678Configure uses the operating system name and version to set some defaults.
ecfc5424
AD
2679The default value is probably right if the name rings a bell. Otherwise,
2680since spelling matters for me, either accept the default or answer "none"
2681to leave it blank.
a0d0e21e 2682
85e6fe83 2683EOM
85e6fe83 2684case "$osname" in
a0d0e21e 2685 ''|' ')
85e6fe83 2686 case "$hintfile" in
a0d0e21e 2687 ''|' '|none) dflt=none ;;
ecfc5424 2688 *) dflt=`echo $hintfile | $sed -e 's/\.sh$//' -e 's/_.*$//'` ;;
85e6fe83
LW
2689 esac
2690 ;;
2691 *) dflt="$osname" ;;
2692esac
2693rp="Operating system name?"
2694. ./myread
2695case "$ans" in
ecfc5424
AD
2696none) osname='' ;;
2697*) osname=`echo "$ans" | $sed -e 's/[ ][ ]*/_/g' | ./tr '[A-Z]' '[a-z]'`;;
85e6fe83 2698esac
8ff267be 2699echo " "
2700case "$osvers" in
2701 ''|' ')
2702 case "$hintfile" in
2703 ''|' '|none) dflt=none ;;
2704 *) dflt=`echo $hintfile | $sed -e 's/\.sh$//' -e 's/^[^_]*//'`
2705 dflt=`echo $dflt | $sed -e 's/^_//' -e 's/_/./g'`
2706 case "$dflt" in
2707 ''|' ') dflt=none ;;
2708 esac
2709 ;;
2710 esac
2711 ;;
2712 *) dflt="$osvers" ;;
2713esac
2714rp="Operating system version?"
2715. ./myread
2716case "$ans" in
2717none) osvers='' ;;
2718*) osvers="$ans" ;;
2719esac
2720
02e93a22
JH
2721
2722. ./posthint.sh
2723
2304df62 2724: who configured the system
59b83a6f 2725cf_time=`LC_ALL=C; LANGUAGE=C; export LC_ALL; export LANGUAGE; $date 2>&1`
8ff267be 2726cf_by=`(logname) 2>/dev/null`
dfe9444c
AD
2727case "$cf_by" in
2728"")
8ff267be 2729 cf_by=`(whoami) 2>/dev/null`
dfe9444c
AD
2730 case "$cf_by" in
2731 "") cf_by=unknown ;;
8ff267be 2732 esac ;;
2733esac
2304df62 2734
b4eb6b3d
JH
2735: set up the script used to warn in case of inconsistency
2736cat <<EOS >whoa
2737$startsh
2738EOS
2739cat <<'EOSC' >>whoa
2740dflt=y
2741echo " "
2742echo "*** WHOA THERE!!! ***" >&4
2743echo " The $hint value for \$$var on this machine was \"$was\"!" >&4
2744rp=" Keep the $hint value?"
2745. ./myread
2746case "$ans" in
2747y) td=$was; tu=$was;;
2748esac
2749EOSC
2750
2751: function used to set $1 to $val
2752setvar='var=$1; eval "was=\$$1"; td=$define; tu=$undef;
2753case "$val$was" in
2754$define$undef) . ./whoa; eval "$var=\$td";;
2755$undef$define) . ./whoa; eval "$var=\$tu";;
2756*) eval "$var=$val";;
2757esac'
2758
2759case "$usethreads" in
2760$define|true|[yY]*) dflt='y';;
2761*) dflt='n';;
2762esac
2763cat <<EOM
2764
2765Perl can be built to take advantage of threads on some systems.
2766To do so, Configure can be run with -Dusethreads.
2767
2768Note that threading is a highly experimental feature, and
2769some known race conditions still remain. If you choose to try
2770it, be very sure to not actually deploy it for production
2771purposes. README.threads has more details, and is required
2772reading if you enable threads.
2773
2774If this doesn't make any sense to you, just accept the default '$dflt'.
2775EOM
2776rp='Build a threading Perl?'
2777. ./myread
2778case "$ans" in
2779y|Y) val="$define" ;;
2780*) val="$undef" ;;
2781esac
2782set usethreads
2783eval $setvar
2784
2785case "$usethreads" in
2786$define)
2787 $cat <<EOM
2788
2789As of 5.5.640, Perl has two different internal threading implementations,
2790the 5.005 version (5005threads) and an interpreter-based version
2791(ithreads) that has one interpreter per thread. Both are very
2792experimental. This arrangement exists to help developers work out
2793which one is better.
2794
2795If you're a casual user, you probably don't want interpreter-threads
2796at this time. There doesn't yet exist a way to create threads from
2797within Perl in this model, i.e., "use Thread;" will NOT work.
2798EOM
2799 : Default to ithreads unless overridden on command line or with
2800 : old config.sh
2801 dflt='y'
2802 case "$use5005threads" in
2803 $define|true|[yY]*) dflt='n';;
2804 esac
2805 case "$useithreads" in
2806 $undef|false|[nN]*) dflt='n';;
2807 esac
2808 rp='Use interpreter-based ithreads?'
2809 . ./myread
2810 case "$ans" in
2811 y|Y) val="$define" ;;
2812 *) val="$undef" ;;
2813 esac
2814 set useithreads
2815 eval $setvar
2816 : Now set use5005threads to the opposite value.
2817 case "$useithreads" in
2818 $define) val="$undef" ;;
2819 *) val="$define" ;;
2820 esac
2821 set use5005threads
2822 eval $setvar
2823 ;;
2824*)
2825 useithreads="$undef"
2826 use5005threads="$undef"
2827 ;;
2828esac
2829
2830case "$d_oldpthreads" in
2831'') : Configure tests would be welcome here. For now, assume undef.
2832 val="$undef" ;;
2833*) val="$d_oldpthreads" ;;
2834esac
2835set d_oldpthreads
2836eval $setvar
2837
2838
2839case "$usethreads" in
2840"$define"|true|[yY]*)
2841: Look for a hint-file generated 'call-back-unit'. If the
2842: user has specified that a threading perl is to be built,
2843: we may need to set or change some other defaults.
2844 if $test -f usethreads.cbu; then
2845 echo "Your platform has some specific hints for threaded builds, using them..."
2846 . ./usethreads.cbu
2847 else
2848 $cat <<EOM
2849(Your platform doesn't have any specific hints for threaded builds.
2850 Assuming POSIX threads, then.)
2851EOM
2852 fi
2853 ;;
2854esac
2855
2856cat <<EOM
2857
2858Perl can be built so that multiple Perl interpreters can coexist
2859within the same Perl executable.
2860EOM
2861
2862case "$useithreads" in
2863$define)
2864 cat <<EOM
2865This multiple interpreter support is required for interpreter-based threads.
2866EOM
2867 val="$define"
2868 ;;
2869*) case "$usemultiplicity" in
2870 $define|true|[yY]*) dflt='y';;
2871 *) dflt='n';;
2872 esac
2873 echo " "
2874 echo "If this doesn't make any sense to you, just accept the default '$dflt'."
2875 rp='Build Perl for multiplicity?'
2876 . ./myread
2877 case "$ans" in
2878 y|Y) val="$define" ;;
2879 *) val="$undef" ;;
2880 esac
2881 ;;
2882esac
2883set usemultiplicity
2884eval $setvar
2885
e5e20432
JH
2886: make some quick guesses about what we are up against
2887echo " "
2888$echo $n "Hmm... $c"
2889echo exit 1 >bsd
2890echo exit 1 >usg
2891echo exit 1 >v7
2892echo exit 1 >osf1
2893echo exit 1 >eunice
2894echo exit 1 >xenix
2895echo exit 1 >venix
2896echo exit 1 >os2
2897d_bsd="$undef"
2898$cat /usr/include/signal.h /usr/include/sys/signal.h >foo 2>/dev/null
2899if test -f /osf_boot || $contains 'OSF/1' /usr/include/ctype.h >/dev/null 2>&1
2900then
2901 echo "Looks kind of like an OSF/1 system, but we'll see..."
2902 echo exit 0 >osf1
2903elif test `echo abc | tr a-z A-Z` = Abc ; then
2904 xxx=`./loc addbib blurfl $pth`
2905 if $test -f $xxx; then
2906 echo "Looks kind of like a USG system with BSD features, but we'll see..."
2907 echo exit 0 >bsd
2908 echo exit 0 >usg
2909 else
2910 if $contains SIGTSTP foo >/dev/null 2>&1 ; then
2911 echo "Looks kind of like an extended USG system, but we'll see..."
2912 else
2913 echo "Looks kind of like a USG system, but we'll see..."
2914 fi
2915 echo exit 0 >usg
2916 fi
2917elif $contains SIGTSTP foo >/dev/null 2>&1 ; then
2918 echo "Looks kind of like a BSD system, but we'll see..."
2919 d_bsd="$define"
2920 echo exit 0 >bsd
2921else
2922 echo "Looks kind of like a Version 7 system, but we'll see..."
2923 echo exit 0 >v7
2924fi
2925case "$eunicefix" in
2926*unixtovms*)
2927 $cat <<'EOI'
2928There is, however, a strange, musty smell in the air that reminds me of
2929something...hmm...yes...I've got it...there's a VMS nearby, or I'm a Blit.
2930EOI
2931 echo exit 0 >eunice
2932 d_eunice="$define"
2933: it so happens the Eunice I know will not run shell scripts in Unix format
2934 ;;
2935*)
2936 echo " "
2937 echo "Congratulations. You aren't running Eunice."
2938 d_eunice="$undef"
2939 ;;
2940esac
2941: Detect OS2. The p_ variable is set above in the Head.U unit.
3d5d58b1
JH
2942: Note that this also -- wrongly -- detects e.g. dos-djgpp, which also uses
2943: semicolon as a patch separator
e5e20432
JH
2944case "$p_" in
2945:) ;;
2946*)
2947 $cat <<'EOI'
2948I have the feeling something is not exactly right, however...don't tell me...
2949lemme think...does HAL ring a bell?...no, of course, you're only running OS/2!
3d5d58b1 2950(Or you may be running DOS with DJGPP.)
e5e20432
JH
2951EOI
2952 echo exit 0 >os2
2953 ;;
2954esac
2955if test -f /xenix; then
2956 echo "Actually, this looks more like a XENIX system..."
2957 echo exit 0 >xenix
2958 d_xenix="$define"
2959else
2960 echo " "
2961 echo "It's not Xenix..."
2962 d_xenix="$undef"
2963fi
2964chmod +x xenix
2965$eunicefix xenix
2966if test -f /venix; then
2967 echo "Actually, this looks more like a VENIX system..."
2968 echo exit 0 >venix
2969else
2970 echo " "
2971 if ./xenix; then
2972 : null
2973 else
2974 echo "Nor is it Venix..."
2975 fi
2976fi
2977chmod +x bsd usg v7 osf1 eunice xenix venix os2
2978$eunicefix bsd usg v7 osf1 eunice xenix venix os2
2979$rm -f foo
2980
5869b1f1
JH
2981case "$cc" in
2982'') dflt=cc;;
2983*) dflt="$cc";;
2984esac
2985rp="Use which C compiler?"
2986. ./myread
2987cc="$ans"
e5e20432
JH
2988: Look for a hint-file generated 'call-back-unit'. Now that the
2989: user has specified the compiler, we may need to set or change some
2990: other defaults.
2991if $test -f cc.cbu; then
2992 . ./cc.cbu
2993fi
2573c5f9 2994. ./checkcc
8a27cf78 2995
e5e20432
JH
2996echo " "
2997echo "Checking for GNU cc in disguise and/or its version number..." >&4
2998$cat >gccvers.c <<EOM
2999#include <stdio.h>
3000int main() {
3001#ifdef __GNUC__
3002#ifdef __VERSION__
3003 printf("%s\n", __VERSION__);
3004#else
3005 printf("%s\n", "1");
3006#endif
3007#endif
3008 exit(0);
3009}
3010EOM
bf0c440f 3011if $cc $ldflags -o gccvers gccvers.c; then
e5e20432
JH
3012 gccversion=`./gccvers`
3013 case "$gccversion" in
3014 '') echo "You are not using GNU cc." ;;
fc68435e 3015 *) echo "You are using GNU cc $gccversion."
e723fc21 3016 ccname=gcc
fc68435e 3017 ;;
e5e20432
JH
3018 esac
3019else
3020 echo " "
3021 echo "*** WHOA THERE!!! ***" >&4
3022 echo " Your C compiler \"$cc\" doesn't seem to be working!" >&4
3023 case "$knowitall" in
3024 '')
3025 echo " You'd better start hunting for one and let me know about it." >&4
3026 exit 1
3027 ;;
3028 esac
3029fi
3030$rm -f gccvers*
3031case "$gccversion" in
30321*) cpp=`./loc gcc-cpp $cpp $pth` ;;
3033esac
5b463ca7
KS
3034case "$gccversion" in
3035'') gccosandvers='' ;;
10b4ebb5
JH
3036*) gccshortvers=`echo "$gccversion"|sed 's/ .*//'`
3037 gccosandvers=`$cc -v 2>&1|grep '/specs$'|sed "s!.*/[^-/]*-[^-/]*-\([^-/]*\)/$gccshortvers/specs!\1!"`
3038 gccshortvers=''
5b463ca7 3039 case "$gccosandvers" in
02903077
JH
3040 $osname) gccosandvers='' ;; # linux gccs seem to have no linux osvers, grr
3041 $osname$osvers) ;; # looking good
5b463ca7
KS
3042 $osname*) cat <<EOM >&4
3043
3044*** WHOA THERE!!! ***
3045
3046 Your gcc has not been compiled for the exact release of
3047 your operating system ($gccosandvers versus $osname$osvers).
3048
3049 In general it is a good idea to keep gcc synchronized with
3050 the operating system because otherwise serious problems
3051 may ensue when trying to compile software, like Perl.
3052
3053 I'm trying to be optimistic here, though, and will continue.
3054 If later during the configuration and build icky compilation
02903077
JH
3055 problems appear (headerfile conflicts being the most common
3056 manifestation), I suggest reinstalling the gcc to match
5b463ca7
KS
3057 your operating system release.
3058
3059EOM
3060 ;;
81575342 3061 *) gccosandvers='' ;; # failed to parse, better be silent
5b463ca7
KS
3062 esac
3063 ;;
3064esac
e723fc21
JH
3065case "$ccname" in
3066'') ccname="$cc" ;;
3067esac
e5e20432 3068
8a27cf78
JH
3069: see how we invoke the C preprocessor
3070echo " "
3071echo "Now, how can we feed standard input to your C preprocessor..." >&4
3072cat <<'EOT' >testcpp.c
3073#define ABC abc
3074#define XYZ xyz
3075ABC.XYZ
3076EOT
3077cd ..
3078if test ! -f cppstdin; then
3079 if test "X$osname" = "Xaix" -a "X$gccversion" = X; then
3080 # AIX cc -E doesn't show the absolute headerfile
3081 # locations but we'll cheat by using the -M flag.
3082 echo 'cat >.$$.c; rm -f .$$.u; '"$cc"' ${1+"$@"} -M -c .$$.c 2>/dev/null; test -s .$$.u && awk '"'"'$2 ~ /\.h$/ { print "# 0 \""$2"\"" }'"'"' .$$.u; rm -f .$$.o .$$.u; '"$cc"' -E ${1+"$@"} .$$.c; rm .$$.c' > cppstdin
3083 else
3084 echo 'cat >.$$.c; '"$cc"' -E ${1+"$@"} .$$.c; rm .$$.c' >cppstdin
3085 fi
3086else
3087 echo "Keeping your $hint cppstdin wrapper."
3088fi
3089chmod 755 cppstdin
3090wrapper=`pwd`/cppstdin
3091ok='false'
3092cd UU
3093
3094if $test "X$cppstdin" != "X" && \
3095 $cppstdin $cppminus <testcpp.c >testcpp.out 2>&1 && \
3096 $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1
3097then
3098 echo "You used to use $cppstdin $cppminus so we'll use that again."
3099 case "$cpprun" in
3100 '') echo "But let's see if we can live without a wrapper..." ;;
3101 *)
3102 if $cpprun $cpplast <testcpp.c >testcpp.out 2>&1 && \
3103 $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1
3104 then
3105 echo "(And we'll use $cpprun $cpplast to preprocess directly.)"
3106 ok='true'
3107 else
3108 echo "(However, $cpprun $cpplast does not work, let's see...)"
3109 fi
3110 ;;
3111 esac
3112else
3113 case "$cppstdin" in
3114 '') ;;
3115 *)
3116 echo "Good old $cppstdin $cppminus does not seem to be of any help..."
3117 ;;
3118 esac
3119fi
3120
3121if $ok; then
3122 : nothing
3123elif echo 'Maybe "'"$cc"' -E" will work...'; \
3124 $cc -E <testcpp.c >testcpp.out 2>&1; \
3125 $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3126 echo "Yup, it does."
3127 x_cpp="$cc -E"
3128 x_minus='';
3129elif echo 'Nope...maybe "'"$cc"' -E -" will work...'; \
3130 $cc -E - <testcpp.c >testcpp.out 2>&1; \
3131 $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3132 echo "Yup, it does."
3133 x_cpp="$cc -E"
3134 x_minus='-';
3135elif echo 'Nope...maybe "'"$cc"' -P" will work...'; \
3136 $cc -P <testcpp.c >testcpp.out 2>&1; \
3137 $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3138 echo "Yipee, that works!"
3139 x_cpp="$cc -P"
3140 x_minus='';
3141elif echo 'Nope...maybe "'"$cc"' -P -" will work...'; \
3142 $cc -P - <testcpp.c >testcpp.out 2>&1; \
3143 $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3144 echo "At long last!"
3145 x_cpp="$cc -P"
3146 x_minus='-';
3147elif echo 'No such luck, maybe "'$cpp'" will work...'; \
3148 $cpp <testcpp.c >testcpp.out 2>&1; \
3149 $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3150 echo "It works!"
3151 x_cpp="$cpp"
3152 x_minus='';
3153elif echo 'Nixed again...maybe "'$cpp' -" will work...'; \
3154 $cpp - <testcpp.c >testcpp.out 2>&1; \
3155 $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3156 echo "Hooray, it works! I was beginning to wonder."
3157 x_cpp="$cpp"
3158 x_minus='-';
3159elif echo 'Uh-uh. Time to get fancy. Trying a wrapper...'; \
3160 $wrapper <testcpp.c >testcpp.out 2>&1; \
3161 $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3162 x_cpp="$wrapper"
3163 x_minus=''
3164 echo "Eureka!"
3165else
3166 dflt=''
3167 rp="No dice. I can't find a C preprocessor. Name one:"
3168 . ./myread
3169 x_cpp="$ans"
3170 x_minus=''
3171 $x_cpp <testcpp.c >testcpp.out 2>&1
3172 if $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3173 echo "OK, that will do." >&4
3174 else
3175echo "Sorry, I can't get that to work. Go find one and rerun Configure." >&4
3176 exit 1
3177 fi
3178fi
3179
3180case "$ok" in
3181false)
3182 cppstdin="$x_cpp"
3183 cppminus="$x_minus"
3184 cpprun="$x_cpp"
3185 cpplast="$x_minus"
3186 set X $x_cpp
3187 shift
3188 case "$1" in
3189 "$cpp")
3190 echo "Perhaps can we force $cc -E using a wrapper..."
3191 if $wrapper <testcpp.c >testcpp.out 2>&1; \
3192 $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1
3193 then
3194 echo "Yup, we can."
3195 cppstdin="$wrapper"
3196 cppminus='';
3197 else
3198 echo "Nope, we'll have to live without it..."
3199 fi
3200 ;;
3201 esac
3202 case "$cpprun" in
3203 "$wrapper")
3204 cpprun=''
3205 cpplast=''
3206 ;;
3207 esac
3208 ;;
3209esac
3210
3211case "$cppstdin" in
3212"$wrapper"|'cppstdin') ;;
3213*) $rm -f $wrapper;;
3214esac
3215$rm -f testcpp.c testcpp.out
3216
bd9b35c9
JH
3217: decide how portable to be. Allow command line overrides.
3218case "$d_portable" in
3219"$undef") ;;
3220*) d_portable="$define" ;;
104d25b7 3221esac
85ab1d1d 3222
bd9b35c9
JH
3223: set up shell script to do ~ expansion
3224cat >filexp <<EOSS
3225$startsh
3226: expand filename
3227case "\$1" in
3228 ~/*|~)
3229 echo \$1 | $sed "s|~|\${HOME-\$LOGDIR}|"
3230 ;;
3231 ~*)
3232 if $test -f /bin/csh; then
3233 /bin/csh -f -c "glob \$1"
3234 failed=\$?
3235 echo ""
3236 exit \$failed
e5e20432 3237 else
bd9b35c9
JH
3238 name=\`$expr x\$1 : '..\([^/]*\)'\`
3239 dir=\`$sed -n -e "/^\${name}:/{s/^[^:]*:[^:]*:[^:]*:[^:]*:[^:]*:\([^:]*\).*"'\$'"/\1/" -e p -e q -e '}' </etc/passwd\`
3240 if $test ! -d "\$dir"; then
3241 me=\`basename \$0\`
3242 echo "\$me: can't locate home directory for: \$name" >&2
3243 exit 1
3244 fi
3245 case "\$1" in
3246 */*)
3247 echo \$dir/\`$expr x\$1 : '..[^/]*/\(.*\)'\`
3248 ;;
3249 *)
3250 echo \$dir
e5e20432
JH
3251 ;;
3252 esac
3253 fi
b691c02f 3254 ;;
4633a7c4 3255*)
bd9b35c9 3256 echo \$1
2304df62
AD
3257 ;;
3258esac
4633a7c4
LW
3259EOSS
3260chmod +x filexp
3261$eunicefix filexp
2304df62
AD
3262
3263: now set up to get a file name
28757baa 3264cat <<EOS >getfile
3265$startsh
3266EOS
3267cat <<'EOSC' >>getfile
2304df62
AD
3268tilde=''
3269fullpath=''
3270already=''
3271skip=''
3272none_ok=''
3273exp_file=''
a0d0e21e 3274nopath_ok=''
2304df62
AD
3275orig_rp="$rp"
3276orig_dflt="$dflt"
b233458b
JH
3277case "$gfpth" in
3278'') gfpth='.' ;;
3279esac
2304df62
AD
3280
3281case "$fn" in
ecfc5424 3282*\(*)
28e8609d 3283 expr $fn : '.*(\(.*\)).*' | tr ',' $trnl >getfile.ok
ecfc5424
AD
3284 fn=`echo $fn | sed 's/(.*)//'`
3285 ;;
3286esac
3287
3288case "$fn" in
a0d0e21e
LW
3289*:*)
3290 loc_file=`expr $fn : '.*:\(.*\)'`
3291 fn=`expr $fn : '\(.*\):.*'`
3292 ;;
3293esac
3294
3295case "$fn" in
2304df62
AD
3296*~*) tilde=true;;
3297esac
3298case "$fn" in
3299*/*) fullpath=true;;
3300esac
3301case "$fn" in
3302*+*) skip=true;;
3303esac
3304case "$fn" in
3305*n*) none_ok=true;;
3306esac
3307case "$fn" in
3308*e*) exp_file=true;;
3309esac
a0d0e21e
LW
3310case "$fn" in
3311*p*) nopath_ok=true;;
3312esac
2304df62
AD
3313
3314case "$fn" in
3315*f*) type='File';;
3316*d*) type='Directory';;
a0d0e21e 3317*l*) type='Locate';;
2304df62
AD
3318esac
3319
3320what="$type"
3321case "$what" in
3322Locate) what='File';;
3323esac
3324
3325case "$exp_file" in
3326'')
3327 case "$d_portable" in
3328 "$define") ;;
3329 *) exp_file=true;;
3330 esac
3331 ;;
3332esac
3333
3334cd ..
3335while test "$type"; do
3336 redo=''
3337 rp="$orig_rp"
3338 dflt="$orig_dflt"
3339 case "$tilde" in
3340 true) rp="$rp (~name ok)";;
3341 esac
3342 . UU/myread
ecfc5424
AD
3343 if test -f UU/getfile.ok && \
3344 $contains "^$ans\$" UU/getfile.ok >/dev/null 2>&1
3345 then
3346 value="$ans"
3347 ansexp="$ans"
3348 break
3349 fi
2304df62
AD
3350 case "$ans" in
3351 none)
3352 value=''
3353 ansexp=''
3354 case "$none_ok" in
3355 true) type='';;
3356 esac
3357 ;;
3358 *)
3359 case "$tilde" in
3360 '') value="$ans"
3361 ansexp="$ans";;
3362 *)
3363 value=`UU/filexp $ans`
3364 case $? in
3365 0)
3366 if test "$ans" != "$value"; then
ecfc5424 3367 echo "(That expands to $value on this system.)"
2304df62
AD
3368 fi
3369 ;;
3370 *) value="$ans";;
3371 esac
3372 ansexp="$value"
3373 case "$exp_file" in
3374 '') value="$ans";;
3375 esac
3376 ;;
3377 esac
3378 case "$fullpath" in
3379 true)
3380 case "$ansexp" in
3381 /*) value="$ansexp" ;;
23da6c43 3382 [a-zA-Z]:/*) value="$ansexp" ;;
2304df62
AD
3383 *)
3384 redo=true
3385 case "$already" in
3386 true)
3387 echo "I shall only accept a full path name, as in /bin/ls." >&4
3388 echo "Use a ! shell escape if you wish to check pathnames." >&4
3389 ;;
3390 *)
3391 echo "Please give a full path name, starting with slash." >&4
3392 case "$tilde" in
3393 true)
3394 echo "Note that using ~name is ok provided it expands well." >&4
3395 already=true
3396 ;;
3397 esac
3398 esac
3399 ;;
3400 esac
3401 ;;
3402 esac
3403 case "$redo" in
3404 '')
3405 case "$type" in
3406 File)
b233458b
JH
3407 for fp in $gfpth; do
3408 if test "X$fp" = X.; then
3409 pf="$ansexp"
3410 else
3411 pf="$fp/$ansexp"
3412 fi
3413 if test -f "$pf"; then
3414 type=''
3415 elif test -r "$pf" || (test -h "$pf") >/dev/null 2>&1
3416 then
3417 echo "($value is not a plain file, but that's ok.)"
3418 type=''
3419 fi
3420 if test X"$type" = X; then
3421 value="$pf"
3422 break
3423 fi
3424 done
2304df62
AD
3425 ;;
3426 Directory)
b233458b
JH
3427 for fp in $gfpth; do
3428 if test "X$fp" = X.; then
f78bfc9c
JH
3429 dir="$ans"
3430 direxp="$ansexp"
b233458b 3431 else
dd858076 3432 dir="$fp/$ansexp"
f78bfc9c 3433 direxp="$fp/$ansexp"
b233458b 3434 fi
f78bfc9c 3435 if test -d "$direxp"; then
b233458b 3436 type=''
f78bfc9c 3437 value="$dir"
b233458b
JH
3438 break
3439 fi
3440 done
2304df62
AD
3441 ;;
3442 Locate)
40000a8c 3443 if test -d "$ansexp"; then
a0d0e21e
LW
3444 echo "(Looking for $loc_file in directory $value.)"
3445 value="$value/$loc_file"
40000a8c 3446 ansexp="$ansexp/$loc_file"
2304df62 3447 fi
40000a8c 3448 if test -f "$ansexp"; then
2304df62
AD
3449 type=''
3450 fi
a0d0e21e
LW
3451 case "$nopath_ok" in
3452 true) case "$value" in
3453 */*) ;;
3454 *) echo "Assuming $value will be in people's path."
3455 type=''
3456 ;;
3457 esac
3458 ;;
3459 esac
2304df62
AD
3460 ;;
3461 esac
3462
3463 case "$skip" in
3464 true) type='';
3465 esac
3466
3467 case "$type" in
3468 '') ;;
3469 *)
3470 if test "$fastread" = yes; then
3471 dflt=y
3472 else
3473 dflt=n
3474 fi
3475 rp="$what $value doesn't exist. Use that name anyway?"
3476 . UU/myread
3477 dflt=''
3478 case "$ans" in
3479 y*) type='';;
3480 *) echo " ";;
3481 esac
3482 ;;
3483 esac
3484 ;;
3485 esac
3486 ;;
3487 esac
3488done
3489cd UU
3490ans="$value"
3491rp="$orig_rp"
3492dflt="$orig_dflt"
ecfc5424 3493rm -f getfile.ok
b233458b 3494test "X$gfpthkeep" != Xy && gfpth=""
2304df62
AD
3495EOSC
3496
bd9b35c9
JH
3497: What should the include directory be ?
3498echo " "
3499$echo $n "Hmm... $c"
3500dflt='/usr/include'
3501incpath=''
3502mips_type=''
3503if $test -f /bin/mips && /bin/mips; then
3504 echo "Looks like a MIPS system..."
3505 $cat >usr.c <<'EOCP'
3506#ifdef SYSTYPE_BSD43
3507/bsd43
3508#endif
3509EOCP
8a27cf78 3510 if cc -E usr.c > usr.out && $contains / usr.out >/dev/null 2>&1; then
bd9b35c9
JH
3511 dflt='/bsd43/usr/include'
3512 incpath='/bsd43'
3513 mips_type='BSD 4.3'
3514 else
3515 mips_type='System V'
3516 fi
3517 $rm -f usr.c usr.out
3518 echo "and you're compiling with the $mips_type compiler and libraries."
3519 xxx_prompt=y
3520 echo "exit 0" >mips
3521else
3522 echo "Doesn't look like a MIPS system."
3523 xxx_prompt=n
3524 echo "exit 1" >mips
3525fi
3526chmod +x mips
3527$eunicefix mips
3528case "$usrinc" in
3529'') ;;
3530*) dflt="$usrinc";;
3531esac
3532case "$xxx_prompt" in
3533y) fn=d/
3534 echo " "
3535 rp='Where are the include files you want to use?'
3536 . ./getfile
3537 usrinc="$ans"
8e07c86e 3538 ;;
bd9b35c9 3539*) usrinc="$dflt"
8e07c86e
AD
3540 ;;
3541esac
2304df62 3542
bd9b35c9
JH
3543: Set private lib path
3544case "$plibpth" in
3545'') if ./mips; then
3546 plibpth="$incpath/usr/lib /usr/local/lib /usr/ccs/lib"
3547 fi;;
3548esac
3549case "$libpth" in
3550' ') dlist='';;
3551'') dlist="$loclibpth $plibpth $glibpth";;
3552*) dlist="$libpth";;
3553esac
3554
3555: Now check and see which directories actually exist, avoiding duplicates
3556libpth=''
3557for xxx in $dlist
3558do
3559 if $test -d $xxx; then
3560 case " $libpth " in
3561 *" $xxx "*) ;;
3562 *) libpth="$libpth $xxx";;
3563 esac
3564 fi
3565done
3566$cat <<'EOM'
3567
3568Some systems have incompatible or broken versions of libraries. Among
3569the directories listed in the question below, please remove any you
3570know not to be holding relevant libraries, and add any that are needed.
3571Say "none" for none.
8e07c86e
AD
3572
3573EOM
bd9b35c9
JH
3574case "$libpth" in
3575'') dflt='none';;
8e07c86e 3576*)
bd9b35c9
JH
3577 set X $libpth
3578 shift
3579 dflt=${1+"$@"}
8e07c86e 3580 ;;
a0d0e21e 3581esac
bd9b35c9
JH
3582rp="Directories to use for library searches?"
3583. ./myread
3584case "$ans" in
3585none) libpth=' ';;
3586*) libpth="$ans";;
3587esac
a0d0e21e 3588
bd9b35c9
JH
3589: compute shared library extension
3590case "$so" in
3591'')
3592 if xxx=`./loc libc.sl X $libpth`; $test -f "$xxx"; then
3593 dflt='sl'
dd4e71fd 3594 else
bd9b35c9 3595 dflt='so'
dd4e71fd
JH
3596 fi
3597 ;;
bd9b35c9 3598*) dflt="$so";;
dd4e71fd 3599esac
dd4e71fd
JH
3600$cat <<EOM
3601
bd9b35c9 3602On some systems, shared libraries may be available. Answer 'none' if
7f95ee77 3603you want to suppress searching of shared libraries for the remainder
bd9b35c9 3604of this configuration.
dd4e71fd
JH
3605
3606EOM
bd9b35c9
JH
3607rp='What is the file extension used for shared libraries?'
3608. ./myread
3609so="$ans"
dd4e71fd 3610
bd9b35c9
JH
3611: Define several unixisms.
3612: Hints files or command line option can be used to override them.
3613: The convoluted testing is in case hints files set either the old
3614: or the new name.
3615case "$_exe" in
3616'') case "$exe_ext" in
3617 '') ;;
3618 *) _exe="$exe_ext" ;;
dd4e71fd 3619 esac
bd9b35c9 3620 ;;
bfb7748a 3621esac
bd9b35c9
JH
3622case "$_a" in
3623'') case "$lib_ext" in
3624 '') _a='.a';;
3625 *) _a="$lib_ext" ;;
dd4e71fd
JH
3626 esac
3627 ;;
dd4e71fd 3628esac
bd9b35c9
JH
3629case "$_o" in
3630'') case "$obj_ext" in
3631 '') _o='.o';;
3632 *) _o="$obj_ext";;
3633 esac
3634 ;;
3635esac
3636case "$p_" in
3637'') case "$path_sep" in
3638 '') p_=':';;
3639 *) p_="$path_sep";;
3640 esac
3641 ;;
3642esac
3643exe_ext=$_exe
3644lib_ext=$_a
3645obj_ext=$_o
3646path_sep=$p_
dd4e71fd 3647
b4eb6b3d
JH
3648: Which makefile gets called first. This is used by make depend.
3649case "$firstmakefile" in
3650'') firstmakefile='makefile';;
4633a7c4 3651esac
4633a7c4 3652
0f0995ae
JH
3653case "$usesocks" in
3654$define|true|[yY]*) dflt='y';;
3655*) dflt='n';;
3656esac
bd9b35c9 3657cat <<EOM
4633a7c4 3658
bd9b35c9
JH
3659Perl can be built to use the SOCKS proxy protocol library. To do so,
3660Configure must be run with -Dusesocks.
4633a7c4 3661
0f0995ae 3662If this doesn't make any sense to you, just accept the default '$dflt'.
bd9b35c9 3663EOM
bd9b35c9
JH
3664rp='Build Perl for SOCKS?'
3665. ./myread
3666case "$ans" in
3667y|Y) val="$define" ;;
3668*) val="$undef" ;;
3669esac
3670set usesocks
3671eval $setvar
3672
3673: Looking for optional libraries
3674echo " "
3675echo "Checking for optional libraries..." >&4
3676case "$libs" in
3677' '|'') dflt='';;
3678*) dflt="$libs";;
3679esac
3680case "$libswanted" in
3681'') libswanted='c_s';;
3682esac
3683case "$usesocks" in
923fc586 3684"$define") libswanted="$libswanted socks5 socks5_sh" ;;
8e07c86e 3685esac
68435ea7
JH
3686libsfound=''
3687libsfiles=''
3688libsdirs=''
13b3f787
JH
3689libspath=''
3690for thisdir in $libpth $xlibpth; do
3691 test -d $thisdir && libspath="$libspath $thisdir"
3692done
bd9b35c9 3693for thislib in $libswanted; do
13b3f787 3694 for thisdir in $libspath; do
f7dd4e7f
JH
3695 xxx=''
3696 if $test ! -f "$xxx" -a "X$ignore_versioned_solibs" = "X"; then
3697 xxx=`ls $thisdir/lib$thislib.$so.[0-9] 2>/dev/null|tail -1`
3698 $test -f "$xxx" && eval $libscheck
3699 $test -f "$xxx" && libstyle=shared
3700 fi
3701 if test ! -f "$xxx"; then
3702 xxx=$thisdir/lib$thislib.$so
3703 $test -f "$xxx" && eval $libscheck
3704 $test -f "$xxx" && libstyle=shared
3705 fi
3706 if test ! -f "$xxx"; then
3707 xxx=$thisdir/lib$thislib$_a
3708 $test -f "$xxx" && eval $libscheck
3709 $test -f "$xxx" && libstyle=static
3710 fi
3711 if test ! -f "$xxx"; then
3712 xxx=$thisdir/$thislib$_a
3713 $test -f "$xxx" && eval $libscheck
3714 $test -f "$xxx" && libstyle=static
3715 fi
3716 if test ! -f "$xxx"; then
3717 xxx=$thisdir/lib${thislib}_s$_a
3718 $test -f "$xxx" && eval $libscheck
3719 $test -f "$xxx" && libstyle=static
09ea5ba9 3720 $test -f "$xxx" && thislib=${thislib}_s
f7dd4e7f
JH
3721 fi
3722 if test ! -f "$xxx"; then
3723 xxx=$thisdir/Slib$thislib$_a
3724 $test -f "$xxx" && eval $libscheck
3725 $test -f "$xxx" && libstyle=static
3726 fi
3727 if $test -f "$xxx"; then
43999f95 3728 case "$libstyle" in
f7dd4e7f
JH
3729 shared) echo "Found -l$thislib (shared)." ;;
3730 static) echo "Found -l$thislib." ;;
3731 *) echo "Found -l$thislib ($libstyle)." ;;
43999f95 3732 esac
bd9b35c9
JH
3733 case " $dflt " in
3734 *"-l$thislib "*);;
f7dd4e7f 3735 *) dflt="$dflt -l$thislib"
43999f95
JH
3736 libsfound="$libsfound $xxx"
3737 yyy=`basename $xxx`
3738 libsfiles="$libsfiles $yyy"
1e127011 3739 yyy=`echo $xxx|$sed -e "s%/$yyy\\$%%"`
43999f95
JH
3740 case " $libsdirs " in
3741 *" $yyy "*) ;;
3742 *) libsdirs="$libsdirs $yyy" ;;
3743 esac
3744 ;;
bd9b35c9 3745 esac
f7dd4e7f
JH
3746 break
3747 fi
3748 done
3749 if $test ! -f "$xxx"; then
3750 echo "No -l$thislib."
bd9b35c9
JH
3751 fi
3752done
3753set X $dflt
3754shift
3755dflt="$*"
3756case "$libs" in
3757'') dflt="$dflt";;
3758*) dflt="$libs";;
3759esac
3760case "$dflt" in
3761' '|'') dflt='none';;
3762esac
4633a7c4 3763
bd9b35c9 3764$cat <<EOM
4633a7c4 3765
bd9b35c9
JH
3766In order to compile $package on your machine, a number of libraries
3767are usually needed. Include any other special libraries here as well.
3768Say "none" for none. The default list is almost always right.
8e07c86e 3769EOM
8e07c86e 3770
bd9b35c9
JH
3771echo " "
3772rp="What libraries to use?"
3773. ./myread
3774case "$ans" in
3775none) libs=' ';;
3776*) libs="$ans";;
3777esac
d71b2b6b 3778
bd9b35c9
JH
3779: determine optimization, if desired, or use for debug flag also
3780case "$optimize" in
3781' '|$undef) dflt='none';;
3782'') dflt='-O';;
3783*) dflt="$optimize";;
3784esac
3785$cat <<EOH
d71b2b6b 3786
bd9b35c9
JH
3787By default, $package compiles with the -O flag to use the optimizer.
3788Alternately, you might want to use the symbolic debugger, which uses
3789the -g flag (on traditional Unix systems). Either flag can be
3790specified here. To use neither flag, specify the word "none".
d71b2b6b 3791
bd9b35c9
JH
3792EOH
3793rp="What optimizer/debugger flag should be used?"
3794. ./myread
3795optimize="$ans"
3796case "$optimize" in
3797'none') optimize=" ";;
3798esac
3799
3800dflt=''
3801: We will not override a previous value, but we might want to
3802: augment a hint file
3803case "$hint" in
3804default|recommended)
3805 case "$gccversion" in
3806 1*) dflt='-fpcc-struct-return' ;;
d71b2b6b 3807 esac
bd9b35c9
JH
3808 case "$optimize" in
3809 *-g*) dflt="$dflt -DDEBUGGING";;
d71b2b6b 3810 esac
bd9b35c9
JH
3811 case "$gccversion" in
3812 2*) if test -d /etc/conf/kconfig.d &&
3813 $contains _POSIX_VERSION $usrinc/sys/unistd.h >/dev/null 2>&1
3814 then
3815 dflt="$dflt -posix"
3816 fi
f0d04425 3817 ;;
bd9b35c9
JH
3818 esac
3819 case "$gccversion" in
3820 1*) ;;
3821 2.[0-8]*) ;;
3822 ?*) echo " "
3823 echo "Checking if your compiler accepts -fno-strict-aliasing" 2>&1
3824 echo 'int main(void) { return 0; }' > gcctest.c
3825 if $cc -O2 -fno-strict-aliasing -o gcctest gcctest.c; then
3826 echo "Yes, it does." 2>&1
3827 case "$ccflags" in
3828 *strict-aliasing*)
3829 echo "Leaving current flags $ccflags alone." 2>&1
3830 ;;
3831 *) dflt="$dflt -fno-strict-aliasing" ;;
3832 esac
3833 else
3834 echo "Nope, it doesn't, but that's ok." 2>&1
3835 fi
f0d04425 3836 ;;
e5e20432
JH
3837 esac
3838 ;;
3839esac
3840
bd9b35c9
JH
3841case "$mips_type" in
3842*BSD*|'') inclwanted="$locincpth $usrinc";;
3843*) inclwanted="$locincpth $inclwanted $usrinc/bsd";;
3844esac
3845for thisincl in $inclwanted; do
3846 if $test -d $thisincl; then
3847 if $test x$thisincl != x$usrinc; then
3848 case "$dflt" in
422af00a
LC
3849 *" -I$thisincl "*);;
3850 *) dflt="$dflt -I$thisincl ";;
bd9b35c9
JH
3851 esac
3852 fi
3853 fi
3854done
40a7a20a 3855
bd9b35c9
JH
3856inctest='if $contains $2 $usrinc/$1 >/dev/null 2>&1; then
3857 xxx=true;
3858elif $contains $2 $usrinc/sys/$1 >/dev/null 2>&1; then
3859 xxx=true;
3860else
3861 xxx=false;
3862fi;
3863if $xxx; then
3864 case "$dflt" in
3865 *$2*);;
3866 *) dflt="$dflt -D$2";;
3867 esac;
3868fi'
40a7a20a 3869
bd9b35c9 3870set signal.h LANGUAGE_C; eval $inctest
40a7a20a 3871
bd9b35c9
JH
3872case "$usesocks" in
3873$define)
3874 ccflags="$ccflags -DSOCKS"
3875 ;;
3876esac
40a7a20a 3877
bd9b35c9
JH
3878case "$hint" in
3879default|recommended) dflt="$ccflags $dflt" ;;
3880*) dflt="$ccflags";;
3881esac
40a7a20a 3882
bd9b35c9
JH
3883case "$dflt" in
3884''|' ') dflt=none;;
3885esac
422af00a 3886
bd9b35c9 3887$cat <<EOH
40a7a20a 3888
bd9b35c9
JH
3889Your C compiler may want other flags. For this question you should include
3890-I/whatever and -DWHATEVER flags and any other flags used by the C compiler,
3891but you should NOT include libraries or ld flags like -lwhatever. If you
3892want $package to honor its debug switch, you should include -DDEBUGGING here.
3893Your C compiler might also need additional flags, such as -D_POSIX_SOURCE.
40a7a20a 3894
bd9b35c9 3895To use no flags, specify the word "none".
40a7a20a 3896
bd9b35c9
JH
3897EOH
3898set X $dflt
3899shift
3900dflt=${1+"$@"}
3901rp="Any additional cc flags?"
3902. ./myread
3903case "$ans" in
3904none) ccflags='';;
3905*) ccflags="$ans";;
3906esac
8e07c86e 3907
bd9b35c9
JH
3908: the following weeds options from ccflags that are of no interest to cpp
3909cppflags="$ccflags"
3910case "$gccversion" in
39111*) cppflags="$cppflags -D__GNUC__"
4633a7c4 3912esac
bd9b35c9
JH
3913case "$mips_type" in
3914'');;
3915*BSD*) cppflags="$cppflags -DSYSTYPE_BSD43";;
3916esac
3917case "$cppflags" in
3918'');;
3919*)
3920 echo " "
3921 echo "Let me guess what the preprocessor flags are..." >&4
3922 set X $cppflags
3923 shift
3924 cppflags=''
3925 $cat >cpp.c <<'EOM'
3926#define BLURFL foo
8e07c86e 3927
bd9b35c9
JH
3928BLURFL xx LFRULB
3929EOM
3930 previous=''
3931 for flag in $*
3932 do
3933 case "$flag" in
3934 -*) ftry="$flag";;
3935 *) ftry="$previous $flag";;
3936 esac
3937 if $cppstdin -DLFRULB=bar $cppflags $ftry $cppminus <cpp.c \
3938 >cpp1.out 2>/dev/null && \
3939 $cpprun -DLFRULB=bar $cppflags $ftry $cpplast <cpp.c \
3940 >cpp2.out 2>/dev/null && \
3941 $contains 'foo.*xx.*bar' cpp1.out >/dev/null 2>&1 && \
3942 $contains 'foo.*xx.*bar' cpp2.out >/dev/null 2>&1
3943 then
3944 cppflags="$cppflags $ftry"
3945 previous=''
3946 else
3947 previous="$flag"
3948 fi
3949 done
3950 set X $cppflags
3951 shift
3952 cppflags=${1+"$@"}
3953 case "$cppflags" in
3954 *-*) echo "They appear to be: $cppflags";;
3955 esac
3956 $rm -f cpp.c cpp?.out
2afac517 3957 ;;
3958esac
8e07c86e 3959
bd9b35c9
JH
3960: flags used in final linking phase
3961case "$ldflags" in
3962'') if ./venix; then
3963 dflt='-i -z'
10a23457 3964 else
bd9b35c9 3965 dflt=''
10a23457 3966 fi
bd9b35c9
JH
3967 case "$ccflags" in
3968 *-posix*) dflt="$dflt -posix" ;;
c4f23d77 3969 esac
bd9b35c9
JH
3970 ;;
3971*) dflt="$ldflags";;
3972esac
3973
3974: Try to guess additional flags to pick up local libraries.
3975for thislibdir in $libpth; do
3976 case " $loclibpth " in
3977 *" $thislibdir "*)
3978 case "$dflt " in
3979 *"-L$thislibdir "*) ;;
3980 *) dflt="$dflt -L$thislibdir" ;;
3981 esac
c4f23d77
AD
3982 ;;
3983 esac
bd9b35c9 3984done
c4f23d77 3985
bd9b35c9
JH
3986case "$dflt" in
3987'') dflt='none' ;;
3988esac
c4f23d77 3989
bd9b35c9
JH
3990$cat <<EOH
3991
3992Your C linker may need flags. For this question you should
3993include -L/whatever and any other flags used by the C linker, but you
3994should NOT include libraries like -lwhatever.
3995
3996Make sure you include the appropriate -L/path flags if your C linker
3997does not normally search all of the directories you specified above,
3998namely
3999 $libpth
4000To use no flags, specify the word "none".
4001
4002EOH
4003
4004rp="Any additional ld flags (NOT including libraries)?"
4005. ./myread
4006case "$ans" in
4007none) ldflags='';;
4008*) ldflags="$ans";;
4009esac
4010rmlist="$rmlist pdp11"
4011
4012: coherency check
4013echo " "
4014echo "Checking your choice of C compiler and flags for coherency..." >&4
4015$cat > try.c <<'EOF'
4016#include <stdio.h>
4017int main() { printf("Ok\n"); exit(0); }
4018EOF
4019set X $cc $optimize $ccflags -o try $ldflags try.c $libs
4020shift
4021$cat >try.msg <<'EOM'
4022I've tried to compile and run the following simple program:
4023
4024EOM
4025$cat try.c >> try.msg
4026
4027$cat >> try.msg <<EOM
4028
4029I used the command:
4030
4031 $*
4032 ./try
4033
4034and I got the following output:
4035
4036EOM
4037dflt=y
4038if sh -c "$cc $optimize $ccflags -o try $ldflags try.c $libs" >>try.msg 2>&1; then
4039 if sh -c './try' >>try.msg 2>&1; then
4040 xxx=`./try`
4041 case "$xxx" in
4042 "Ok") dflt=n ;;
4043 *) echo 'The program compiled OK, but produced no output.' >> try.msg
4044 case " $libs " in
4045 *" -lsfio "*)
4046 cat >> try.msg <<'EOQS'
4047If $libs contains -lsfio, and sfio is mis-configured, then it
4048sometimes (apparently) runs and exits with a 0 status, but with no
4049output! It may have to do with sfio's use of _exit vs. exit.
4050
4051EOQS
4052 rp="You have a big problem. Shall I abort Configure"
4053 dflt=y
4054 ;;
4055 esac
4056 ;;
4057 esac
4058 else
4059 echo "The program compiled OK, but exited with status $?." >>try.msg
4060 rp="You have a problem. Shall I abort Configure"
4061 dflt=y
4062 fi
4063else
4064 echo "I can't compile the test program." >>try.msg
4065 rp="You have a BIG problem. Shall I abort Configure"
4066 dflt=y
4067fi
4068case "$dflt" in
4069y)
4070 $cat try.msg >&4
4071 case "$knowitall" in
4072 '')
4073 echo "(The supplied flags or libraries might be incorrect.)"
c4f23d77 4074 ;;
bd9b35c9 4075 *) dflt=n;;
c4f23d77 4076 esac
bd9b35c9
JH
4077 echo " "
4078 . ./myread
4079 case "$ans" in
4080 n*|N*) ;;
4081 *) echo "Ok. Stopping Configure." >&4
4082 exit 1
c4f23d77
AD
4083 ;;
4084 esac
4085 ;;
bd9b35c9 4086n) echo "OK, that should do.";;
c4f23d77 4087esac
bd9b35c9 4088$rm -f try try.* core
c4f23d77 4089
b4eb6b3d
JH
4090: define an is-a-typedef? function
4091typedef='type=$1; var=$2; def=$3; shift; shift; shift; inclist=$@;
4092case "$inclist" in
4093"") inclist="sys/types.h";;
4094esac;
4095eval "varval=\$$var";
4096case "$varval" in
4097"")
4098 $rm -f temp.c;
4099 for inc in $inclist; do
4100 echo "#include <$inc>" >>temp.c;
4101 done;
4102 echo "#ifdef $type" >> temp.c;
4103 echo "printf(\"We have $type\");" >> temp.c;
4104 echo "#endif" >> temp.c;
4105 $cppstdin $cppflags $cppminus < temp.c >temp.E 2>/dev/null;
4106 if $contains $type temp.E >/dev/null 2>&1; then
4107 eval "$var=\$type";
4108 else
4109 eval "$var=\$def";
4110 fi;
4111 $rm -f temp.?;;
4112*) eval "$var=\$varval";;
4113esac'
4114
4115: define an is-a-typedef? function that prompts if the type is not available.
4116typedef_ask='type=$1; var=$2; def=$3; shift; shift; shift; inclist=$@;
4117case "$inclist" in
4118"") inclist="sys/types.h";;
4119esac;
4120eval "varval=\$$var";
4121case "$varval" in
4122"")
4123 $rm -f temp.c;
4124 for inc in $inclist; do
4125 echo "#include <$inc>" >>temp.c;
4126 done;
4127 echo "#ifdef $type" >> temp.c;
4128 echo "printf(\"We have $type\");" >> temp.c;
4129 echo "#endif" >> temp.c;
4130 $cppstdin $cppflags $cppminus < temp.c >temp.E 2>/dev/null;
4131 echo " " ;
4132 echo "$rp" | $sed -e "s/What is/Looking for/" -e "s/?/./";
4133 if $contains $type temp.E >/dev/null 2>&1; then
4134 echo "$type found." >&4;
4135 eval "$var=\$type";
4136 else
4137 echo "$type NOT found." >&4;
4138 dflt="$def";
4139 . ./myread ;
4140 eval "$var=\$ans";
4141 fi;
4142 $rm -f temp.?;;
4143*) eval "$var=\$varval";;
4144esac'
4145
bd9b35c9
JH
4146: define a shorthand compile call
4147compile='
4148mc_file=$1;
4149shift;
4150$cc $optimize $ccflags $ldflags -o ${mc_file} $* ${mc_file}.c $libs > /dev/null 2>&1;'
4151: define a shorthand compile call for compilations that should be ok.
4152compile_ok='
4153mc_file=$1;
4154shift;
4155$cc $optimize $ccflags $ldflags -o ${mc_file} $* ${mc_file}.c $libs;'
8e07c86e 4156
b4eb6b3d 4157: check for lengths of integral types
bd9b35c9 4158echo " "
b4eb6b3d
JH
4159case "$intsize" in
4160'')
4161 echo "Checking to see how big your integers are..." >&4
4162 $cat >intsize.c <<'EOCP'
bd9b35c9
JH
4163#include <stdio.h>
4164int main()
4165{
b4eb6b3d
JH
4166 printf("intsize=%d;\n", (int)sizeof(int));
4167 printf("longsize=%d;\n", (int)sizeof(long));
4168 printf("shortsize=%d;\n", (int)sizeof(short));
4169 exit(0);
bd9b35c9 4170}
b4eb6b3d
JH
4171EOCP
4172 set intsize
4173 if eval $compile_ok && ./intsize > /dev/null; then
4174 eval `./intsize`
4175 echo "Your integers are $intsize bytes long."
4176 echo "Your long integers are $longsize bytes long."
4177 echo "Your short integers are $shortsize bytes long."
4178 else
4179 $cat >&4 <<EOM
4180!
4181Help! I can't compile and run the intsize test program: please enlighten me!
4182(This is probably a misconfiguration in your system or libraries, and
4183you really ought to fix it. Still, I'll try anyway.)
4184!
bd9b35c9 4185EOM
b4eb6b3d
JH
4186 dflt=4
4187 rp="What is the size of an integer (in bytes)?"
4188 . ./myread
4189 intsize="$ans"
4190 dflt=$intsize
4191 rp="What is the size of a long integer (in bytes)?"
4192 . ./myread
4193 longsize="$ans"
4194 dflt=2
4195 rp="What is the size of a short integer (in bytes)?"
4196 . ./myread
4197 shortsize="$ans"
4198 fi
4199 ;;
4200esac
4201$rm -f intsize intsize.*
c1a7f87b 4202
b4eb6b3d
JH
4203: see what type lseek is declared as in the kernel
4204rp="What is the type used for lseek's offset on this system?"
4205set off_t lseektype long stdio.h sys/types.h
4206eval $typedef_ask
4207
4208echo " "
4209echo "Checking to see how big your file offsets are..." >&4
4210$cat >try.c <<EOCP
4211#include <sys/types.h>
4212#include <stdio.h>
4213int main()
4214{
4215 printf("%d\n", (int)sizeof($lseektype));
4216 return(0);
4217}
4218EOCP
4219set try
4220if eval $compile_ok; then
4221 lseeksize=`./try`
4222 echo "Your file offsets are $lseeksize bytes long."
4223else
4224 dflt=$longsize
4225 echo " "
4226 echo "(I can't seem to compile the test program. Guessing...)"
4227 rp="What is the size of your file offsets (in bytes)?"
4228 . ./myread
4229 lseeksize="$ans"
4230fi
4231$rm -f try.c try
4232
4233: see what type file positions are declared as in the library
4234rp="What is the type for file position used by fsetpos()?"
4235set fpos_t fpostype long stdio.h sys/types.h
4236eval $typedef_ask
4237
4238echo " "
4239case "$fpostype" in
4240*_t) zzz="$fpostype" ;;
4241*) zzz="fpos_t" ;;
4242esac
4243echo "Checking the size of $zzz..." >&4
4244cat > try.c <<EOCP
4245#include <sys/types.h>
4246#include <stdio.h>
4247int main() {
4248 printf("%d\n", (int)sizeof($fpostype));
4249 exit(0);
4250}
4251EOCP
4252set try
4253if eval $compile_ok; then
4254 yyy=`./try`
4255 case "$yyy" in
4256 '') fpossize=4
4257 echo "(I can't execute the test program--guessing $fpossize.)" >&4
4258 ;;
4259 *) fpossize=$yyy
4260 echo "Your $zzz is $fpossize bytes long."
4261 ;;
4262 esac
4263else
4264 dflt="$longsize"
4265 echo " " >&4
4266 echo "(I can't compile the test program. Guessing...)" >&4
4267 rp="What is the size of your file positions (in bytes)?"
4268 . ./myread
4269 fpossize="$ans"
4270fi
4271
4272
4273
4274# Backward compatibility (uselfs is deprecated).
4275case "$uselfs" in
4276"$define"|true|[yY]*)
4277 cat <<EOM >&4
4278
4279*** Configure -Duselfs is deprecated, using -Duselargefiles instead.
4280EOM
4281 uselargefiles="$define"
4282 ;;
4283esac
4284
4285case "$lseeksize:$fpossize" in
42868:8) cat <<EOM
4287
4288You can have files larger than 2 gigabytes.
4289EOM
4290 val="$define" ;;
4291*) case "$uselargefiles" in
4292 "$undef"|false|[nN]*) dflt='n' ;;
4293 *) dflt='y' ;;
4294 esac
4295 cat <<EOM
4296
4297Perl can be built to understand large files (files larger than 2 gigabytes)
4298on some systems. To do so, Configure can be run with -Duselargefiles.
4299
4300If this doesn't make any sense to you, just accept the default '$dflt'.
4301EOM
4302 rp='Try to understand large files, if available?'
4303 . ./myread
4304 case "$ans" in
4305 y|Y) val="$define" ;;
4306 *) val="$undef" ;;
4307 esac
4308 ;;
4309esac
4310set uselargefiles
4311eval $setvar
4312case "$uselargefiles" in
4313"$define")
4314: Look for a hint-file generated 'call-back-unit'. If the
4315: user has specified that a large files perl is to be built,
4316: we may need to set or change some other defaults.
4317 if $test -f uselargefiles.cbu; then
4318 echo "Your platform has some specific hints for large file builds, using them..."
4319 . ./uselargefiles.cbu
4320 echo " "
4321 echo "Rechecking to see how big your file offsets are..." >&4
4322 $cat >try.c <<EOCP
4323#include <sys/types.h>
4324#include <stdio.h>
4325int main()
4326{
4327 printf("%d\n", (int)sizeof($lseektype));
4328 return(0);
4329}
4330EOCP
4331 set try
4332 if eval $compile_ok; then
4333 lseeksize=`./try`
4334 $echo "Your file offsets are now $lseeksize bytes long."
4335 else
4336 dflt="$lseeksize"
4337 echo " "
4338 echo "(I can't seem to compile the test program. Guessing...)"
4339 rp="What is the size of your file offsets (in bytes)?"
4340 . ./myread
4341 lseeksize="$ans"
4342 fi
4343 case "$fpostype" in
4344 *_t) zzz="$fpostype" ;;
4345 *) zzz="fpos_t" ;;
4346 esac
4347 $echo $n "Rechecking the size of $zzz...$c" >&4
4348 $cat > try.c <<EOCP
4349#include <sys/types.h>
4350#include <stdio.h>
4351int main() {
4352 printf("%d\n", (int)sizeof($fpostype));
4353 exit(0);
4354}
4355EOCP
4356 set try
4357 if eval $compile_ok; then
4358 yyy=`./try`
4359 dflt="$lseeksize"
4360 case "$yyy" in
4361 '') echo " "
4362 echo "(I can't execute the test program--guessing $fpossize.)" >&4
4363 ;;
4364 *) fpossize=$yyy
4365 echo " $fpossize bytes." >&4
4366 ;;
4367 esac
4368 else
4369 dflt="$fpossize"
4370 echo " "
4371 echo "(I can't compile the test program. Guessing...)" >&4
4372 rp="What is the size of your file positions (in bytes)?"
4373 . ./myread
4374 fpossize="$ans"
4375 fi
4376 $rm -f try.c try
4377 fi
4378 ;;
4379esac
4380
4381
4382case "$usemorebits" in
4383"$define"|true|[yY]*)
4384 use64bitint="$define"
4385 uselongdouble="$define"
4386 usemorebits="$define"
4387 ;;
4388*) usemorebits="$undef"
4389 ;;
4390esac
4391
4392
4393case "$uselonglong" in
4394"$define"|true|[yY]*)
4395 cat <<EOM >&4
4396
4397*** Configure -Duselonglong is deprecated, using -Duse64bitint instead.
4398EOM
4399 use64bitint="$define"
4400 ;;
4401esac
4402case "$use64bits" in
4403"$define"|true|[yY]*)
4404 cat <<EOM >&4
4405
4406*** Configure -Duse64bits is deprecated, using -Duse64bitint instead.
4407EOM
4408 use64bitint="$define"
4409 ;;
4410esac
4411case "$use64bitints" in
4412"$define"|true|[yY]*)
4413 cat <<EOM >&4
4414
4415*** There is no Configure -Duse64bitints, using -Duse64bitint instead.
4416EOM
4417 use64bitint="$define"
4418 ;;
4419esac
4420case "$use64bitsint" in
4421"$define"|true|[yY]*)
4422 cat <<EOM >&4
4423
4424*** There is no Configure -Duse64bitsint, using -Duse64bitint instead.
4425EOM
4426 use64bitint="$define"
4427 ;;
4428esac
4429case "$uselonglongs" in
4430"$define"|true|[yY]*)
4431 cat <<EOM >&4
4432
4433*** There is no Configure -Duselonglongs, using -Duse64bitint instead.
4434EOM
4435 use64bitint="$define"
4436 ;;
4437esac
4438case "$use64bitsall" in
4439"$define"|true|[yY]*)
4440 cat <<EOM >&4
4441
4442*** There is no Configure -Duse64bitsall, using -Duse64bitall instead.
4443EOM
4444 use64bitall="$define"
4445 ;;
4446esac
4447
4448case "$ccflags" in
4449*-DUSE_LONG_LONG*|*-DUSE_64_BIT_INT*|*-DUSE_64_BIT_ALL*) use64bitint="$define";;
4450esac
4451case "$use64bitall" in
4452"$define"|true|[yY]*) use64bitint="$define" ;;
4453esac
4454
4455case "$longsize" in
44568) cat <<EOM
4457
4458You have natively 64-bit long integers.
4459EOM
4460 val="$define"
4461 ;;
4462*) case "$use64bitint" in
4463 "$define"|true|[yY]*) dflt='y';;
4464 *) dflt='n';;
4465 esac
4466 cat <<EOM
4467
4468Perl can be built to take advantage of 64-bit integer types
4469on some systems. To do so, Configure can be run with -Duse64bitint.
4470Choosing this option will most probably introduce binary incompatibilities.
4471
4472If this doesn't make any sense to you, just accept the default '$dflt'.
4473EOM
4474 rp='Try to use 64-bit integers, if available?'
4475 . ./myread
4476 case "$ans" in
4477 [yY]*) val="$define" ;;
4478 *) val="$undef" ;;
4479 esac
4480 ;;
4481esac
4482set use64bitint
4483eval $setvar
4484
4485case "$use64bitall" in
4486"$define"|true|[yY]*) dflt='y' ;;
4487*) case "$longsize" in
4488 8) dflt='y' ;;
4489 *) dflt='n' ;;
4490 esac
4491 ;;
4492esac
4493cat <<EOM
4494
4495You may also choose to try maximal 64-bitness. It means using as much
449664-bitness as possible on the platform. This in turn means even more
4497binary incompatibilities. On the other hand, your platform may not
4498have any more 64-bitness available than what you already have chosen.
4499
4500If this doesn't make any sense to you, just accept the default '$dflt'.
4501EOM
4502rp='Try to use maximal 64-bit support, if available?'
4503. ./myread
4504case "$ans" in
4505[yY]*) val="$define" ;;
4506*) val="$undef" ;;
4507esac
4508set use64bitall
4509eval $setvar
4510case "$use64bitall" in
4511"$define")
4512 case "$use64bitint" in
4513 "$undef")
4514 cat <<EOM
4515
4516Since you have chosen a maximally 64-bit build, I'm also turning on
4517the use of 64-bit integers.
4518EOM
4519 use64bitint="$define" ;;
4520 esac
4521 ;;
4522esac
4523
4524case "$use64bitint" in
4525"$define"|true|[yY]*)
4526: Look for a hint-file generated 'call-back-unit'. If the
4527: user has specified that a 64-bit perl is to be built,
4528: we may need to set or change some other defaults.
4529 if $test -f use64bitint.cbu; then
4530 echo "Your platform has some specific hints for 64-bit integers, using them..."
4531 . ./use64bitint.cbu
4532 fi
4533 case "$longsize" in
4534 4) case "$archname64" in
4535 '') archname64=64int ;;
4536 esac
4537 ;;
4538 esac
4539 ;;
4540esac
4541
4542case "$use64bitall" in
4543"$define"|true|[yY]*)
4544: Look for a hint-file generated 'call-back-unit'. If the
4545: user has specified that a maximally 64-bit perl is to be built,
4546: we may need to set or change some other defaults.
4547 if $test -f use64bitall.cbu; then
4548 echo "Your platform has some specific hints for 64-bit builds, using them..."
4549 . ./use64bitall.cbu
4550 fi
4551 case "$longsize" in
4552 4) case "$archname64" in
4553 ''|64int) archname64=64all ;;
4554 esac
4555 ;;
4556 esac
4557 ;;
4558esac
4559
4560echo " "
4561echo "Checking for GNU C Library..." >&4
4562cat >gnulibc.c <<EOM
4563#include <stdio.h>
4564int main()
4565{
4566#ifdef __GLIBC__
4567 exit(0);
4568#else
4569 exit(1);
4570#endif
4571}
4572EOM
4573set gnulibc
4574if eval $compile_ok && ./gnulibc; then
4575 val="$define"
4576 echo "You are using the GNU C Library"
4577else
4578 val="$undef"
4579 echo "You are not using the GNU C Library"
4580fi
4581$rm -f gnulibc*
4582set d_gnulibc
4583eval $setvar
4584
4585: see if nm is to be used to determine whether a symbol is defined or not
4586case "$usenm" in
4587'')
4588 dflt=''
c1a7f87b
JH
4589 case "$d_gnulibc" in
4590 "$define")
4591 echo " "
4592 echo "nm probably won't work on the GNU C Library." >&4
4593 dflt=n
bd9b35c9 4594 ;;
c1a7f87b
JH
4595 esac
4596 case "$dflt" in
4597 '')
4598 if $test "$osname" = aix -a ! -f /lib/syscalls.exp; then
4599 echo " "
4600 echo "Whoops! This is an AIX system without /lib/syscalls.exp!" >&4
4601 echo "'nm' won't be sufficient on this sytem." >&4
4602 dflt=n
4603 fi
4604 ;;
4605 esac
4606 case "$dflt" in
4607 '') dflt=`$egrep 'inlibc|csym' $rsrc/Configure | wc -l 2>/dev/null`
4608 if $test $dflt -gt 20; then
4609 dflt=y
4610 else
4611 dflt=n
4612 fi
bd9b35c9
JH
4613 ;;
4614 esac
bd9b35c9
JH
4615 ;;
4616*)
c1a7f87b
JH
4617 case "$usenm" in
4618 true|$define) dflt=y;;
4619 *) dflt=n;;
4620 esac
bd9b35c9
JH
4621 ;;
4622esac
4623$cat <<EOM
4624
c1a7f87b
JH
4625I can use $nm to extract the symbols from your C libraries. This
4626is a time consuming task which may generate huge output on the disk (up
4627to 3 megabytes) but that should make the symbols extraction faster. The
4628alternative is to skip the 'nm' extraction part and to compile a small
4629test program instead to determine whether each symbol is present. If
4630you have a fast C compiler and/or if your 'nm' output cannot be parsed,
4631this may be the best solution.
4632
4633You probably shouldn't let me use 'nm' if you are using the GNU C Library.
bd9b35c9
JH
4634
4635EOM
c1a7f87b
JH
4636rp="Shall I use $nm to extract C symbols from the libraries?"
4637. ./myread
4638case "$ans" in
4639[Nn]*) usenm=false;;
4640*) usenm=true;;
bd9b35c9 4641esac
bd9b35c9 4642
c1a7f87b
JH
4643runnm=$usenm
4644case "$reuseval" in
4645true) runnm=false;;
8e07c86e 4646esac
29209bc5 4647
c1a7f87b
JH
4648: nm options which may be necessary
4649case "$nm_opt" in
4650'') if $test -f /mach_boot; then
4651 nm_opt='' # Mach
4652 elif $test -d /usr/ccs/lib; then
4653 nm_opt='-p' # Solaris (and SunOS?)
4654 elif $test -f /dgux; then
4655 nm_opt='-p' # DG-UX
4656 elif $test -f /lib64/rld; then
4657 nm_opt='-p' # 64-bit Irix
4658 else
4659 nm_opt=''
4660 fi;;
4661esac
bd9b35c9 4662
c1a7f87b
JH
4663: nm options which may be necessary for shared libraries but illegal
4664: for archive libraries. Thank you, Linux.
4665case "$nm_so_opt" in
4666'') case "$myuname" in
4667 *linux*)
4668 if $nm --help | $grep 'dynamic' > /dev/null 2>&1; then
4669 nm_so_opt='--dynamic'
4670 fi
4671 ;;
bd9b35c9 4672 esac
c1a7f87b
JH
4673 ;;
4674esac
8e07c86e 4675
c1a7f87b
JH
4676case "$runnm" in
4677true)
4678: get list of predefined functions in a handy place
4679echo " "
4680case "$libc" in
4681'') libc=unknown
4682 case "$libs" in
4683 *-lc_s*) libc=`./loc libc_s$_a $libc $libpth`
bd9b35c9 4684 esac
ff935051
JH
4685 ;;
4686esac
c1a7f87b
JH
4687libnames='';
4688case "$libs" in
4689'') ;;
4690*) for thislib in $libs; do
4691 case "$thislib" in
4692 -lc|-lc_s)
4693 : Handle C library specially below.
4694 ;;
4695 -l*)
4696 thislib=`echo $thislib | $sed -e 's/^-l//'`
4697 if try=`./loc lib$thislib.$so.'*' X $libpth`; $test -f "$try"; then
4698 :
4699 elif try=`./loc lib$thislib.$so X $libpth`; $test -f "$try"; then
4700 :
4701 elif try=`./loc lib$thislib$_a X $libpth`; $test -f "$try"; then
4702 :
4703 elif try=`./loc $thislib$_a X $libpth`; $test -f "$try"; then
4704 :
4705 elif try=`./loc lib$thislib X $libpth`; $test -f "$try"; then
4706 :
4707 elif try=`./loc $thislib X $libpth`; $test -f "$try"; then
4708 :
4709 elif try=`./loc Slib$thislib$_a X $xlibpth`; $test -f "$try"; then
4710 :
4711 else
4712 try=''
4713 fi
4714 libnames="$libnames $try"
4715 ;;
4716 *) libnames="$libnames $thislib" ;;
34d1710f 4717 esac
c1a7f87b 4718 done
4633a7c4
LW
4719 ;;
4720esac
c1a7f87b
JH
4721xxx=normal
4722case "$libc" in
4723unknown)
4724 set /lib/libc.$so
4725 for xxx in $libpth; do
4726 $test -r $1 || set $xxx/libc.$so
4727 : The messy sed command sorts on library version numbers.
4728 $test -r $1 || \
4729 set `echo blurfl; echo $xxx/libc.$so.[0-9]* | \
4730 tr ' ' $trnl | egrep -v '\.[A-Za-z]*$' | $sed -e '
4731 h
4732 s/[0-9][0-9]*/0000&/g
4733 s/0*\([0-9][0-9][0-9][0-9][0-9]\)/\1/g
4734 G
4735 s/\n/ /' | \
4736 sort | $sed -e 's/^.* //'`
4737 eval set \$$#
4738 done
4739 $test -r $1 || set /usr/ccs/lib/libc.$so
4740 $test -r $1 || set /lib/libsys_s$_a
4741 ;;
4742*)
4743 set blurfl
4744 ;;
a4f3eea9 4745esac
c1a7f87b
JH
4746if $test -r "$1"; then
4747 echo "Your (shared) C library seems to be in $1."
4748 libc="$1"
4749elif $test -r /lib/libc && $test -r /lib/clib; then
4750 echo "Your C library seems to be in both /lib/clib and /lib/libc."
4751 xxx=apollo
4752 libc='/lib/clib /lib/libc'
4753 if $test -r /lib/syslib; then
4754 echo "(Your math library is in /lib/syslib.)"
4755 libc="$libc /lib/syslib"
4756 fi
4757elif $test -r "$libc" || (test -h "$libc") >/dev/null 2>&1; then
4758 echo "Your C library seems to be in $libc, as you said before."
4759elif $test -r $incpath/usr/lib/libc$_a; then
4760 libc=$incpath/usr/lib/libc$_a;
4761 echo "Your C library seems to be in $libc. That's fine."
4762elif $test -r /lib/libc$_a; then
4763 libc=/lib/libc$_a;
4764 echo "Your C library seems to be in $libc. You're normal."
4765else
4766 if tans=`./loc libc$_a blurfl/dyick $libpth`; $test -r "$tans"; then
4767 :
4768 elif tans=`./loc libc blurfl/dyick $libpth`; $test -r "$tans"; then
4769 libnames="$libnames "`./loc clib blurfl/dyick $libpth`
4770 elif tans=`./loc clib blurfl/dyick $libpth`; $test -r "$tans"; then
4771 :
4772 elif tans=`./loc Slibc$_a blurfl/dyick $xlibpth`; $test -r "$tans"; then
4773 :
4774 elif tans=`./loc Mlibc$_a blurfl/dyick $xlibpth`; $test -r "$tans"; then
4775 :
4776 else
4777 tans=`./loc Llibc$_a blurfl/dyick $xlibpth`
4778 fi
4779 if $test -r "$tans"; then
4780 echo "Your C library seems to be in $tans, of all places."
4781 libc=$tans
4782 else
4783 libc='blurfl'
4784 fi
4785fi
4786if $test $xxx = apollo -o -r "$libc" || (test -h "$libc") >/dev/null 2>&1; then
4787 dflt="$libc"
4788 cat <<EOM
a4f3eea9 4789
c1a7f87b
JH
4790If the guess above is wrong (which it might be if you're using a strange
4791compiler, or your machine supports multiple models), you can override it here.
bd9b35c9
JH
4792
4793EOM
a4f3eea9 4794else
c1a7f87b
JH
4795 dflt=''
4796 echo $libpth | tr ' ' $trnl | sort | uniq > libpath
4797 cat >&4 <<EOM
4798I can't seem to find your C library. I've looked in the following places:
a4f3eea9 4799
c1a7f87b
JH
4800EOM
4801 $sed 's/^/ /' libpath
4802 cat <<EOM
29209bc5 4803
c1a7f87b 4804None of these seems to contain your C library. I need to get its name...
a4f3eea9 4805
bd9b35c9 4806EOM
bd9b35c9 4807fi
c1a7f87b
JH
4808fn=f
4809rp='Where is your C library?'
4810. ./getfile
4811libc="$ans"
a4f3eea9 4812
c1a7f87b
JH
4813echo " "
4814echo $libc $libnames | tr ' ' $trnl | sort | uniq > libnames
4815set X `cat libnames`
4816shift
4817xxx=files
4818case $# in 1) xxx=file; esac
4819echo "Extracting names from the following $xxx for later perusal:" >&4
4820echo " "
4821$sed 's/^/ /' libnames >&4
4822echo " "
4823$echo $n "This may take a while...$c" >&4
a4f3eea9 4824
c1a7f87b
JH
4825for file in $*; do
4826 case $file in
4827 *$so*) $nm $nm_so_opt $nm_opt $file 2>/dev/null;;
4828 *) $nm $nm_opt $file 2>/dev/null;;
a4f3eea9 4829 esac
c1a7f87b 4830done >libc.tmp
a4f3eea9 4831
c1a7f87b
JH
4832$echo $n ".$c"
4833$grep fprintf libc.tmp > libc.ptf
4834xscan='eval "<libc.ptf $com >libc.list"; $echo $n ".$c" >&4'
4835xrun='eval "<libc.tmp $com >libc.list"; echo "done" >&4'
4836xxx='[ADTSIW]'
4837if com="$sed -n -e 's/__IO//' -e 's/^.* $xxx *_[_.]*//p' -e 's/^.* $xxx *//p'";\
4838 eval $xscan;\
4839 $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4840 eval $xrun
4841elif com="$sed -n -e 's/^__*//' -e 's/^\([a-zA-Z_0-9$]*\).*xtern.*/\1/p'";\
4842 eval $xscan;\
4843 $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4844 eval $xrun
4845elif com="$sed -n -e '/|UNDEF/d' -e '/FUNC..GL/s/^.*|__*//p'";\
4846 eval $xscan;\
4847 $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4848 eval $xrun
4849elif com="$sed -n -e 's/^.* D __*//p' -e 's/^.* D //p'";\
4850 eval $xscan;\
4851 $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4852 eval $xrun
4853elif com="$sed -n -e 's/^_//' -e 's/^\([a-zA-Z_0-9]*\).*xtern.*text.*/\1/p'";\
4854 eval $xscan;\
4855 $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4856 eval $xrun
4857elif com="$sed -n -e 's/^.*|FUNC |GLOB .*|//p'";\
4858 eval $xscan;\
4859 $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4860 eval $xrun
4861elif com="$grep '|' | $sed -n -e '/|COMMON/d' -e '/|DATA/d' \
4862 -e '/ file/d' -e 's/^\([^ ]*\).*/\1/p'";\
4863 eval $xscan;\
4864 $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4865 eval $xrun
4866elif com="$sed -n -e 's/^.*|FUNC |GLOB .*|//p' -e 's/^.*|FUNC |WEAK .*|//p'";\
4867 eval $xscan;\
4868 $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4869 eval $xrun
4870elif com="$sed -n -e 's/^__//' -e '/|Undef/d' -e '/|Proc/s/ .*//p'";\
4871 eval $xscan;\
4872 $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4873 eval $xrun
4874elif com="$sed -n -e 's/^.*|Proc .*|Text *| *//p'";\
4875 eval $xscan;\
4876 $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4877 eval $xrun
4878elif com="$sed -n -e '/Def. Text/s/.* \([^ ]*\)\$/\1/p'";\
4879 eval $xscan;\
4880 $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4881 eval $xrun
4882elif com="$sed -n -e 's/^[-0-9a-f ]*_\(.*\)=.*/\1/p'";\
4883 eval $xscan;\
4884 $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4885 eval $xrun
4886elif com="$sed -n -e 's/.*\.text n\ \ \ \.//p'";\
4887 eval $xscan;\
4888 $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4889 eval $xrun
4890elif com="sed -n -e 's/^__.*//' -e 's/[ ]*D[ ]*[0-9]*.*//p'";\
4891 eval $xscan;\
4892 $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4893 eval $xrun
4894else
4895 $nm -p $* 2>/dev/null >libc.tmp
4896 $grep fprintf libc.tmp > libc.ptf
4897 if com="$sed -n -e 's/^.* [ADTSIW] *_[_.]*//p' -e 's/^.* [ADTSIW] //p'";\
4898 eval $xscan; $contains '^fprintf$' libc.list >/dev/null 2>&1
4899 then
4900 nm_opt='-p'
4901 eval $xrun
bd9b35c9 4902 else
c1a7f87b
JH
4903 echo " "
4904 echo "$nm didn't seem to work right. Trying $ar instead..." >&4
4905 com=''
4906 if $ar t $libc > libc.tmp && $contains '^fprintf$' libc.tmp >/dev/null 2>&1; then
4907 for thisname in $libnames $libc; do
4908 $ar t $thisname >>libc.tmp
4909 done
4910 $sed -e "s/\\$_o\$//" < libc.tmp > libc.list
4911 echo "Ok." >&4
4912 elif test "X$osname" = "Xos2" && $ar tv $libc > libc.tmp; then
4913 # Repeat libc to extract forwarders to DLL entries too
4914 for thisname in $libnames $libc; do
4915 $ar tv $thisname >>libc.tmp
4916 # Revision 50 of EMX has bug in $ar.
4917 # it will not extract forwarders to DLL entries
4918 # Use emximp which will extract exactly them.
4919 emximp -o tmp.imp $thisname \
4920 2>/dev/null && \
4921 $sed -e 's/^\([_a-zA-Z0-9]*\) .*$/\1/p' \
4922 < tmp.imp >>libc.tmp
4923 $rm tmp.imp
4924 done
4925 $sed -e "s/\\$_o\$//" -e 's/^ \+//' < libc.tmp > libc.list
4926 echo "Ok." >&4
4927 else
4928 echo "$ar didn't seem to work right." >&4
4929 echo "Maybe this is a Cray...trying bld instead..." >&4
4930 if bld t $libc | $sed -e 's/.*\///' -e "s/\\$_o:.*\$//" > libc.list
4931 then
4932 for thisname in $libnames; do
4933 bld t $libnames | \
4934 $sed -e 's/.*\///' -e "s/\\$_o:.*\$//" >>libc.list
4935 $ar t $thisname >>libc.tmp
4936 done
4937 echo "Ok." >&4
bd9b35c9 4938 else
c1a7f87b
JH
4939 echo "That didn't work either. Giving up." >&4
4940 exit 1
bd9b35c9 4941 fi
c1a7f87b 4942 fi
a4f3eea9 4943 fi
a4f3eea9 4944fi
c1a7f87b
JH
4945nm_extract="$com"
4946if $test -f /lib/syscalls.exp; then
4947 echo " "
4948 echo "Also extracting names from /lib/syscalls.exp for good ole AIX..." >&4
4949 $sed -n 's/^\([^ ]*\)[ ]*syscall[0-9]*$/\1/p' /lib/syscalls.exp >>libc.list
4950fi
4951;;
4952esac
4953$rm -f libnames libpath
bd9b35c9 4954
c1a7f87b
JH
4955: is a C symbol defined?
4956csym='tlook=$1;
4957case "$3" in
4958-v) tf=libc.tmp; tc=""; tdc="";;
4959-a) tf=libc.tmp; tc="[0]"; tdc="[]";;
4960*) tlook="^$1\$"; tf=libc.list; tc="()"; tdc="()";;
4961esac;
4962tx=yes;
4963case "$reuseval-$4" in
4964true-) ;;
4965true-*) tx=no; eval "tval=\$$4"; case "$tval" in "") tx=yes;; esac;;
4966esac;
4967case "$tx" in
4968yes)
4969 case "$runnm" in
4970 true)
4971 if $contains $tlook $tf >/dev/null 2>&1;
4972 then tval=true;
4973 else tval=false;
4974 fi;;
4975 *)
4976 echo "int main() { extern short $1$tdc; printf(\"%hd\", $1$tc); }" > t.c;
4977 if $cc $optimize $ccflags $ldflags -o t t.c $libs >/dev/null 2>&1;
4978 then tval=true;
4979 else tval=false;
4980 fi;
4981 $rm -f t t.c;;
4982 esac;;
4983*)
4984 case "$tval" in
4985 $define) tval=true;;
4986 *) tval=false;;
4987 esac;;
4988esac;
4989eval "$2=$tval"'
bd9b35c9 4990
c1a7f87b
JH
4991: define an is-in-libc? function
4992inlibc='echo " "; td=$define; tu=$undef;
4993sym=$1; var=$2; eval "was=\$$2";
4994tx=yes;
4995case "$reuseval$was" in
4996true) ;;
4997true*) tx=no;;
4998esac;
4999case "$tx" in
5000yes)
5001 set $sym tres -f;
5002 eval $csym;
5003 case "$tres" in
5004 true)
5005 echo "$sym() found." >&4;
5006 case "$was" in $undef) . ./whoa; esac; eval "$var=\$td";;
5007 *)
5008 echo "$sym() NOT found." >&4;
5009 case "$was" in $define) . ./whoa; esac; eval "$var=\$tu";;
5010 esac;;
bd9b35c9 5011*)
c1a7f87b
JH
5012 case "$was" in
5013 $define) echo "$sym() found." >&4;;
5014 *) echo "$sym() NOT found." >&4;;
5015 esac;;
5016esac'
5017
b4eb6b3d
JH
5018: see if sqrtl exists
5019set sqrtl d_sqrtl
c1a7f87b
JH
5020eval $inlibc
5021
b4eb6b3d
JH
5022case "$ccflags" in
5023*-DUSE_LONG_DOUBLE*|*-DUSE_MORE_BITS*) uselongdouble="$define" ;;
c1a7f87b 5024esac
b4eb6b3d
JH
5025
5026case "$uselongdouble" in
5027$define|true|[yY]*) dflt='y';;
5028*) dflt='n';;
5029esac
5030cat <<EOM
5031
5032Perl can be built to take advantage of long doubles which
5033(if available) may give more accuracy and range for floating point numbers.
5034
5035If this doesn't make any sense to you, just accept the default '$dflt'.
5036EOM
5037rp='Try to use long doubles if available?'
c1a7f87b
JH
5038. ./myread
5039case "$ans" in
b4eb6b3d
JH
5040y|Y) val="$define" ;;
5041*) val="$undef" ;;
5042esac
5043set uselongdouble
5044eval $setvar
bfb7748a 5045
b4eb6b3d
JH
5046case "$uselongdouble" in
5047true|[yY]*) uselongdouble="$define" ;;
5048esac
bfb7748a 5049
b4eb6b3d
JH
5050case "$uselongdouble" in
5051$define)
5052: Look for a hint-file generated 'call-back-unit'. If the
5053: user has specified that long doubles should be used,
5054: we may need to set or change some other defaults.
5055 if $test -f uselongdouble.cbu; then
5056 echo "Your platform has some specific hints for long doubles, using them..."
5057 . ./uselongdouble.cbu
5058 else
5059 $cat <<EOM
5060(Your platform doesn't have any specific hints for long doubles.)
c1a7f87b 5061EOM
b4eb6b3d
JH
5062 fi
5063 ;;
5064esac
5065
5066case "$uselongdouble:$d_sqrtl" in
5067$define:$undef)
5068 $cat <<EOM >&4
5069
5070*** You requested the use of long doubles but you do not seem to have
5071*** the mathematic functions for long doubles. I'm disabling the use
5072*** of long doubles.
5073
5074EOM
5075 uselongdouble=$undef
5076 ;;
5077esac
5078
5079: check for length of double
5080echo " "
5081case "$doublesize" in
5082'')
5083 echo "Checking to see how big your double precision numbers are..." >&4
5084 $cat >try.c <<'EOCP'
5085#include <stdio.h>
5086int main()
5087{
5088 printf("%d\n", (int)sizeof(double));
5089 exit(0);
5090}
5091EOCP
5092 set try
5093 if eval $compile_ok; then
5094 doublesize=`./try`
5095 echo "Your double is $doublesize bytes long."
5096 else
5097 dflt='8'
5098 echo "(I can't seem to compile the test program. Guessing...)"
5099 rp="What is the size of a double precision number (in bytes)?"
5100 . ./myread
5101 doublesize="$ans"
5102 fi
5103 ;;
5104esac
5105$rm -f try.c try
5106
5107: check for long doubles
5108echo " "
5109echo "Checking to see if you have long double..." >&4
5110echo 'int main() { long double x = 7.0; }' > try.c
5111set try
5112if eval $compile; then
5113 val="$define"
5114 echo "You have long double."
5115else
5116 val="$undef"
5117 echo "You do not have long double."
5118fi
5119$rm try.*
5120set d_longdbl
5121eval $setvar
5122
5123: check for length of long double
5124case "${d_longdbl}${longdblsize}" in
5125$define)
5126 echo " "
5127 echo "Checking to see how big your long doubles are..." >&4
5128 $cat >try.c <<'EOCP'
5129#include <stdio.h>
5130int main()
5131{
5132 printf("%d\n", sizeof(long double));
5133}
5134EOCP
5135 set try
5136 set try
5137 if eval $compile; then
5138 longdblsize=`./try$exe_ext`
5139 echo "Your long doubles are $longdblsize bytes long."
5140 else
5141 dflt='8'
5142 echo " "
5143 echo "(I can't seem to compile the test program. Guessing...)" >&4
5144 rp="What is the size of a long double (in bytes)?"
5145 . ./myread
5146 longdblsize="$ans"
5147 fi
5148 if $test "X$doublesize" = "X$longdblsize"; then
5149 echo "(That isn't any different from an ordinary double.)"
5150 fi
5151 ;;
5152esac
5153$rm -f try.* try
5154
5155: determine the architecture name
5156echo " "
5157if xxx=`./loc arch blurfl $pth`; $test -f "$xxx"; then
5158 tarch=`arch`"-$osname"
5159elif xxx=`./loc uname blurfl $pth`; $test -f "$xxx" ; then
5160 if uname -m > tmparch 2>&1 ; then
5161 tarch=`$sed -e 's/ *$//' -e 's/ /_/g' \
5162 -e 's/$/'"-$osname/" tmparch`
5163 else
5164 tarch="$osname"
5165 fi
5166 $rm -f tmparch
5167else
5168 tarch="$osname"
5169fi
5170case "$myarchname" in
5171''|"$tarch") ;;
5172*)
5173 echo "(Your architecture name used to be $myarchname.)"
5174 archname=''
5175 ;;
5176esac
5177myarchname="$tarch"
5178case "$archname" in
5179'') dflt="$tarch";;
5180*) dflt="$archname";;
5181esac
5182rp='What is your architecture name'
5183. ./myread
5184archname="$ans"
5185case "$usethreads" in
5186$define)
5187 echo "Threads selected." >&4
5188 case "$archname" in
5189 *-thread*) echo "...and architecture name already has -thread." >&4
5190 ;;
5191 *) archname="$archname-thread"
5192 echo "...setting architecture name to $archname." >&4
5193 ;;
5194 esac
5195 ;;
5196esac
5197case "$usemultiplicity" in
5198$define)
5199 echo "Multiplicity selected." >&4
5200 case "$archname" in
5201 *-multi*) echo "...and architecture name already has -multi." >&4
5202 ;;
5203 *) archname="$archname-multi"
5204 echo "...setting architecture name to $archname." >&4
5205 ;;
5206 esac
5207 ;;
5208esac
5209case "$use64bitint$use64bitall" in
5210*"$define"*)
5211 case "$archname64" in
5212 '')
5213 echo "This architecture is naturally 64-bit, not changing architecture name." >&4
5214 ;;
5215 *)
5216 case "$use64bitint" in
5217 "$define") echo "64 bit integers selected." >&4 ;;
5218 esac
5219 case "$use64bitall" in
5220 "$define") echo "Maximal 64 bitness selected." >&4 ;;
5221 esac
5222 case "$archname" in
5223 *-$archname64*) echo "...and architecture name already has $archname64." >&4
5224 ;;
5225 *) archname="$archname-$archname64"
5226 echo "...setting architecture name to $archname." >&4
5227 ;;
5228 esac
5229 ;;
5230 esac
5231esac
5232case "$uselongdouble" in
5233$define)
5234 echo "Long doubles selected." >&4
5235 case "$longdblsize" in
5236 $doublesize)
5237 "...but long doubles are equal to doubles, not changing architecture name." >&4
5238 ;;
5239 *)
5240 case "$archname" in
5241 *-ld*) echo "...and architecture name already has -ld." >&4
5242 ;;
5243 *) archname="$archname-ld"
5244 echo "...setting architecture name to $archname." >&4
5245 ;;
5246 esac
5247 ;;
5248 esac
5249 ;;
5250esac
5251
5252: determine root of directory hierarchy where package will be installed.
5253case "$prefix" in
5254'')
5255 dflt=`./loc . /usr/local /usr/local /local /opt /usr`
5256 ;;
5257*)
5258 dflt="$prefix"
5259 ;;
5260esac
5261$cat <<EOM
5262
5263By default, $package will be installed in $dflt/bin, manual pages
5264under $dflt/man, etc..., i.e. with $dflt as prefix for all
5265installation directories. Typically this is something like /usr/local.
5266If you wish to have binaries under /usr/bin but other parts of the
5267installation under /usr/local, that's ok: you will be prompted
5268separately for each of the installation directories, the prefix being
5269only used to set the defaults.
5270
5271EOM
5272fn=d~
5273rp='Installation prefix to use?'
5274. ./getfile
5275oldprefix=''
5276case "$prefix" in
5277'') ;;
5278*)
5279 case "$ans" in
5280 "$prefix") ;;
5281 *) oldprefix="$prefix";;
5282 esac
5283 ;;
5284esac
5285prefix="$ans"
5286prefixexp="$ansexp"
5287
5288: is AFS running?
5289echo " "
5290case "$afs" in
5291$define|true) afs=true ;;
5292$undef|false) afs=false ;;
5293*) if test -d /afs; then
5294 afs=true
5295 else
5296 afs=false
5297 fi
5298 ;;
5299esac
5300if $afs; then
5301 echo "AFS may be running... I'll be extra cautious then..." >&4
5302else
5303 echo "AFS does not seem to be running..." >&4
5304fi
5305
5306: determine installation prefix for where package is to be installed.
5307if $afs; then
5308$cat <<EOM
5309
5310Since you are running AFS, I need to distinguish the directory in which
5311files will reside from the directory in which they are installed (and from
5312which they are presumably copied to the former directory by occult means).
5313
5314EOM
5315 case "$installprefix" in
5316 '') dflt=`echo $prefix | sed 's#^/afs/#/afs/.#'`;;
5317 *) dflt="$installprefix";;
5318 esac
5319else
5320$cat <<EOM
5321
5322In some special cases, particularly when building $package for distribution,
5323it is convenient to distinguish between the directory in which files should
5324be installed from the directory ($prefix) in which they
5325will eventually reside. For most users, these two directories are the same.
5326
5327EOM
5328 case "$installprefix" in
5329 '') dflt=$prefix ;;
5330 *) dflt=$installprefix;;
5331 esac
5332fi
5333fn=d~
5334rp='What installation prefix should I use for installing files?'
5335. ./getfile
5336installprefix="$ans"
5337installprefixexp="$ansexp"
5338
5339: set the prefixit variable, to compute a suitable default value
5340prefixit='case "$3" in
5341""|none)
5342 case "$oldprefix" in
5343 "") eval "$1=\"\$$2\"";;
5344 *)
5345 case "$3" in
5346 "") eval "$1=";;
5347 none)
5348 eval "tp=\"\$$2\"";
5349 case "$tp" in
5350 ""|" ") eval "$1=\"\$$2\"";;
5351 *) eval "$1=";;
5352 esac;;
5353 esac;;
5354 esac;;
5355*)
5356 eval "tp=\"$oldprefix-\$$2-\""; eval "tp=\"$tp\"";
5357 case "$tp" in
5358 --|/*--|\~*--) eval "$1=\"$prefix/$3\"";;
5359 /*-$oldprefix/*|\~*-$oldprefix/*)
5360 eval "$1=\`echo \$$2 | sed \"s,^$oldprefix,$prefix,\"\`";;
5361 *) eval "$1=\"\$$2\"";;
5362 esac;;
5363esac'
5364
5365
5366: get the patchlevel
5367echo " "
5368echo "Getting the current patchlevel..." >&4
5369if $test -r $rsrc/patchlevel.h;then
5370 revision=`awk '/define[ ]+PERL_REVISION/ {print $3}' $rsrc/patchlevel.h`
5371 patchlevel=`awk '/define[ ]+PERL_VERSION/ {print $3}' $rsrc/patchlevel.h`
5372 subversion=`awk '/define[ ]+PERL_SUBVERSION/ {print $3}' $rsrc/patchlevel.h`
5373 api_revision=`awk '/define[ ]+PERL_API_REVISION/ {print $3}' $rsrc/patchlevel.h`
5374 api_version=`awk '/define[ ]+PERL_API_VERSION/ {print $3}' $rsrc/patchlevel.h`
5375 api_subversion=`awk '/define[ ]+PERL_API_SUBVERSION/ {print $3}' $rsrc/patchlevel.h`
5376else
5377 revision=0
5378 patchlevel=0
5379 subversion=0
5380 api_revision=0
5381 api_version=0
5382 api_subversion=0
5383fi
5384$echo "(You have $package version $patchlevel subversion $subversion.)"
5385case "$osname" in
5386dos|vms)
5387 : XXX Should be a Configure test for double-dots in filenames.
5388 version=`echo $revision $patchlevel $subversion | \
5389 $awk '{ printf "%d_%d_%d\n", $1, $2, $3 }'`
5390 api_versionstring=`echo $api_revision $api_version $api_subversion | \
5391 $awk '{ printf "%d_%d_%d\n", $1, $2, $3 }'`
5392 ;;
5393*)
5394 version=`echo $revision $patchlevel $subversion | \
5395 $awk '{ printf "%d.%d.%d\n", $1, $2, $3 }'`
5396 api_versionstring=`echo $api_revision $api_version $api_subversion | \
5397 $awk '{ printf "%d.%d.%d\n", $1, $2, $3 }'`
5398 ;;
5399esac
5400: Special case the 5.005_xx maintenance series, which used 5.005
5401: without any subversion label as a subdirectory in $sitelib
5402if test "${api_revision}${api_version}${api_subversion}" = "550"; then
5403 api_versionstring='5.005'
5404fi
5405
5406: determine installation style
5407: For now, try to deduce it from prefix unless it is already set.
5408: Reproduce behavior of 5.005 and earlier, maybe drop that in 5.7.
5409case "$installstyle" in
5410'') case "$prefix" in
5411 *perl*) dflt='lib';;
5412 *) dflt='lib/perl5' ;;
5413 esac
5414 ;;
5415*) dflt="$installstyle" ;;
5416esac
5417: Probably not worth prompting for this since we prompt for all
5418: the directories individually, and the prompt would be too long and
5419: confusing anyway.
5420installstyle=$dflt
5421
5422: determine where private library files go
5423: Usual default is /usr/local/lib/perl5/$version.
5424: Also allow things like /opt/perl/lib/$version, since
5425: /opt/perl/lib/perl5... would be redundant.
5426: The default "style" setting is made in installstyle.U
5427case "$installstyle" in
5428*lib/perl5*) set dflt privlib lib/$package/$version ;;
5429*) set dflt privlib lib/$version ;;
5430esac
5431eval $prefixit
5432$cat <<EOM
5433
5434There are some auxiliary files for $package that need to be put into a
5435private library directory that is accessible by everyone.
5436
5437EOM
5438fn=d~+
5439rp='Pathname where the private library files will reside?'
5440. ./getfile
5441privlib="$ans"
5442privlibexp="$ansexp"
5443: Change installation prefix, if necessary.
5444if $test X"$prefix" != X"$installprefix"; then
5445 installprivlib=`echo $privlibexp | sed "s#^$prefix#$installprefix#"`
5446else
5447 installprivlib="$privlibexp"
5448fi
5449
5450: set the prefixup variable, to restore leading tilda escape
5451prefixup='case "$prefixexp" in
5452"$prefix") ;;
5453*) eval "$1=\`echo \$$1 | sed \"s,^$prefixexp,$prefix,\"\`";;
5454esac'
5455
5456: determine where public architecture dependent libraries go
5457set archlib archlib
5458eval $prefixit
5459: privlib default is /usr/local/lib/$package/$version
5460: archlib default is /usr/local/lib/$package/$version/$archname
5461: privlib may have an optional trailing /share.
5462tdflt=`echo $privlib | $sed 's,/share$,,'`
5463tdflt=$tdflt/$archname
5464case "$archlib" in
5465'') dflt=$tdflt
5466 ;;
5467*) dflt="$archlib"
5468 ;;
5469esac
5470$cat <<EOM
5471
5472$spackage contains architecture-dependent library files. If you are
5473sharing libraries in a heterogeneous environment, you might store
5474these files in a separate location. Otherwise, you can just include
5475them with the rest of the public library files.
5476
5477EOM
5478fn=d+~
5479rp='Where do you want to put the public architecture-dependent libraries?'
5480. ./getfile
5481archlib="$ans"
5482archlibexp="$ansexp"
5483if $test X"$archlib" = X"$privlib"; then
5484 d_archlib="$undef"
5485else
5486 d_archlib="$define"
5487fi
5488: Change installation prefix, if necessary.
5489if $test X"$prefix" != X"$installprefix"; then
5490 installarchlib=`echo $archlibexp | sed "s#^$prefix#$installprefix#"`
5491else
5492 installarchlib="$archlibexp"
5493fi
5494
5495
5496: Binary compatibility with 5.005 is not possible for builds
5497: with advanced features
5498case "$usethreads$usemultiplicity" in
5499*define*)
5500 bincompat5005="$undef"
5501 d_bincompat5005="$undef"
5502 ;;
5503*) $cat <<EOM
5504
5505This version of Perl can be compiled for binary compatibility with 5.005.
5506If you decide to do so, you will be able to continue using most of the
5507extensions that were compiled for Perl 5.005.
5508
5509EOM
5510 case "$bincompat5005$d_bincompat5005" in
5511 *"$undef"*) dflt=n ;;
5512 *) dflt=y ;;
5513 esac
5514 rp='Binary compatibility with Perl 5.005?'
5515 . ./myread
5516 case "$ans" in
5517 y*) val="$define" ;;
5518 *) val="$undef" ;;
5519 esac
5520 set d_bincompat5005
5521 eval $setvar
5522 case "$d_bincompat5005" in
5523 "$define")
5524 bincompat5005="$define"
5525 ;;
5526 *) bincompat5005="$undef"
5527 d_bincompat5005="$undef"
5528 ;;
5529 esac
5530 ;;
5531esac
5532
5533
5534: see if setuid scripts can be secure
5535$cat <<EOM
5536
5537Some kernels have a bug that prevents setuid #! scripts from being
5538secure. Some sites have disabled setuid #! scripts because of this.
5539
5540First let's decide if your kernel supports secure setuid #! scripts.
5541(If setuid #! scripts would be secure but have been disabled anyway,
5542don't say that they are secure if asked.)
5543
5544EOM
5545
5546val="$undef"
5547if $test -d /dev/fd; then
5548 echo "#!$ls" >reflect
5549 chmod +x,u+s reflect
5550 ./reflect >flect 2>&1
5551 if $contains "/dev/fd" flect >/dev/null; then
5552 echo "Congratulations, your kernel has secure setuid scripts!" >&4
5553 val="$define"
5554 else
5555 $cat <<EOM
5556If you are not sure if they are secure, I can check but I'll need a
5557username and password different from the one you are using right now.
5558If you don't have such a username or don't want me to test, simply
5559enter 'none'.
5560
5561EOM
5562 rp='Other username to test security of setuid scripts with?'
5563 dflt='none'
5564 . ./myread
5565 case "$ans" in
5566 n|none)
5567 case "$d_suidsafe" in
5568 '') echo "I'll assume setuid scripts are *not* secure." >&4
5569 dflt=n;;
5570 "$undef")
5571 echo "Well, the $hint value is *not* secure." >&4
5572 dflt=n;;
5573 *) echo "Well, the $hint value *is* secure." >&4
5574 dflt=y;;
5575 esac
c1a7f87b 5576 ;;
b4eb6b3d
JH
5577 *)
5578 $rm -f reflect flect
5579 echo "#!$ls" >reflect
5580 chmod +x,u+s reflect
5581 echo >flect
5582 chmod a+w flect
5583 echo '"su" will (probably) prompt you for '"$ans's password."
5584 su $ans -c './reflect >flect'
5585 if $contains "/dev/fd" flect >/dev/null; then
5586 echo "Okay, it looks like setuid scripts are secure." >&4
5587 dflt=y
5588 else
5589 echo "I don't think setuid scripts are secure." >&4
5590 dflt=n
5591 fi
5592 ;;
5593 esac
5594 rp='Does your kernel have *secure* setuid scripts?'
5595 . ./myread
5596 case "$ans" in
5597 [yY]*) val="$define";;
5598 *) val="$undef";;
5599 esac
5600 fi
5601else
5602 echo "I don't think setuid scripts are secure (no /dev/fd directory)." >&4
5603 echo "(That's for file descriptors, not floppy disks.)"
5604 val="$undef"
5605fi
5606set d_suidsafe
5607eval $setvar
5608
5609$rm -f reflect flect
5610
5611: now see if they want to do setuid emulation
5612echo " "
5613val="$undef"
5614case "$d_suidsafe" in
5615"$define")
5616 val="$undef"
5617 echo "No need to emulate SUID scripts since they are secure here." >& 4
5618 ;;
5619*)
5620 $cat <<EOM
5621Some systems have disabled setuid scripts, especially systems where
5622setuid scripts cannot be secure. On systems where setuid scripts have
5623been disabled, the setuid/setgid bits on scripts are currently
5624useless. It is possible for $package to detect those bits and emulate
5625setuid/setgid in a secure fashion. This emulation will only work if
5626setuid scripts have been disabled in your kernel.
5627
5628EOM
5629 case "$d_dosuid" in
5630 "$define") dflt=y ;;
5631 *) dflt=n ;;
5632 esac
5633 rp="Do you want to do setuid/setgid emulation?"
5634 . ./myread
5635 case "$ans" in
5636 [yY]*) val="$define";;
5637 *) val="$undef";;
5638 esac
5639 ;;
5640esac
5641set d_dosuid
5642eval $setvar
5643
5644: determine filename position in cpp output
5645echo " "
5646echo "Computing filename position in cpp output for #include directives..." >&4
5647echo '#include <stdio.h>' > foo.c
5648$cat >fieldn <<EOF
5649$startsh
5650$cppstdin $cppflags $cppminus <foo.c 2>/dev/null | \
5651$grep '^[ ]*#.*stdio\.h' | \
5652while read cline; do
5653 pos=1
5654 set \$cline
5655 while $test \$# -gt 0; do
5656 if $test -r \`echo \$1 | $tr -d '"'\`; then
5657 echo "\$pos"
5658 exit 0
5659 fi
5660 shift
5661 pos=\`expr \$pos + 1\`
5662 done
5663done
5664EOF
5665chmod +x fieldn
5666fieldn=`./fieldn`
5667$rm -f foo.c fieldn
5668case $fieldn in
5669'') pos='???';;
56701) pos=first;;
56712) pos=second;;
56723) pos=third;;
5673*) pos="${fieldn}th";;
5674esac
5675echo "Your cpp writes the filename in the $pos field of the line."
5676
5677: locate header file
5678$cat >findhdr <<EOF
5679$startsh
5680wanted=\$1
5681name=''
5682for usrincdir in $usrinc
5683do
5684 if test -f \$usrincdir/\$wanted; then
5685 echo "\$usrincdir/\$wanted"
5686 exit 0
5687 fi
5688done
5689awkprg='{ print \$$fieldn }'
5690echo "#include <\$wanted>" > foo\$\$.c
5691$cppstdin $cppminus $cppflags < foo\$\$.c 2>/dev/null | \
5692$grep "^[ ]*#.*\$wanted" | \
5693while read cline; do
5694 name=\`echo \$cline | $awk "\$awkprg" | $tr -d '"'\`
5695 case "\$name" in
5696 *[/\\\\]\$wanted) echo "\$name"; exit 1;;
5697 *[\\\\/]\$wanted) echo "\$name"; exit 1;;
5698 *) exit 2;;
5699 esac;
5700done;
5701#
5702# status = 0: grep returned 0 lines, case statement not executed
5703# status = 1: headerfile found
5704# status = 2: while loop executed, no headerfile found
5705#
5706status=\$?
5707$rm -f foo\$\$.c;
5708if test \$status -eq 1; then
5709 exit 0;
5710fi
5711exit 1
5712EOF
5713chmod +x findhdr
5714
5715: define an alternate in-header-list? function
5716inhdr='echo " "; td=$define; tu=$undef; yyy=$@;
5717cont=true; xxf="echo \"<\$1> found.\" >&4";
5718case $# in 2) xxnf="echo \"<\$1> NOT found.\" >&4";;
5719*) xxnf="echo \"<\$1> NOT found, ...\" >&4";;
5720esac;
5721case $# in 4) instead=instead;; *) instead="at last";; esac;
5722while $test "$cont"; do
5723 xxx=`./findhdr $1`
5724 var=$2; eval "was=\$$2";
5725 if $test "$xxx" && $test -r "$xxx";
5726 then eval $xxf;
5727 eval "case \"\$$var\" in $undef) . ./whoa; esac"; eval "$var=\$td";
5728 cont="";
5729 else eval $xxnf;
5730 eval "case \"\$$var\" in $define) . ./whoa; esac"; eval "$var=\$tu"; fi;
5731 set $yyy; shift; shift; yyy=$@;
5732 case $# in 0) cont="";;
5733 2) xxf="echo \"but I found <\$1> $instead.\" >&4";
5734 xxnf="echo \"and I did not find <\$1> either.\" >&4";;
5735 *) xxf="echo \"but I found <\$1\> instead.\" >&4";
5736 xxnf="echo \"there is no <\$1>, ...\" >&4";;
5737 esac;
5738done;
5739while $test "$yyy";
5740do set $yyy; var=$2; eval "was=\$$2";
5741 eval "case \"\$$var\" in $define) . ./whoa; esac"; eval "$var=\$tu";
5742 set $yyy; shift; shift; yyy=$@;
5743done'
5744
5745: see if this is a malloc.h system
5746set malloc.h i_malloc
5747eval $inhdr
5748
5749: see if stdlib is available
5750set stdlib.h i_stdlib
5751eval $inhdr
5752
5753: determine which malloc to compile in
5754echo " "
5755case "$usemymalloc" in
5756''|[yY]*|true|$define) dflt='y' ;;
5757*) dflt='n' ;;
5758esac
5759rp="Do you wish to attempt to use the malloc that comes with $package?"
5760. ./myread
5761usemymalloc="$ans"
5762case "$ans" in
5763y*|true)
5764 usemymalloc='y'
5765 mallocsrc='malloc.c'
5766 mallocobj="malloc$_o"
5767 d_mymalloc="$define"
5768 case "$libs" in
5769 *-lmalloc*)
5770 : Remove malloc from list of libraries to use
5771 echo "Removing unneeded -lmalloc from library list" >&4
5772 set `echo X $libs | $sed -e 's/-lmalloc / /' -e 's/-lmalloc$//'`
5773 shift
5774 libs="$*"
5775 echo "libs = $libs" >&4
5776 ;;
5777 esac
5778 ;;
5779*)
5780 usemymalloc='n'
5781 mallocsrc=''
5782 mallocobj=''
5783 d_mymalloc="$undef"
5784 ;;
5785esac
5786
5787: compute the return types of malloc and free
5788echo " "
5789$cat >malloc.c <<END
5790#$i_malloc I_MALLOC
5791#$i_stdlib I_STDLIB
5792#include <stdio.h>
5793#include <sys/types.h>
5794#ifdef I_MALLOC
5795#include <malloc.h>
5796#endif
5797#ifdef I_STDLIB
5798#include <stdlib.h>
5799#endif
5800#ifdef TRY_MALLOC
5801void *malloc();
5802#endif
5803#ifdef TRY_FREE
5804void free();
5805#endif
5806END
5807case "$malloctype" in
5808'')
5809 if $cc $ccflags -c -DTRY_MALLOC malloc.c >/dev/null 2>&1; then
5810 malloctype='void *'
5811 else
5812 malloctype='char *'
5813 fi
5814 ;;
5815esac
5816echo "Your system wants malloc to return '$malloctype', it would seem." >&4
5817
5818case "$freetype" in
5819'')
5820 if $cc $ccflags -c -DTRY_FREE malloc.c >/dev/null 2>&1; then
5821 freetype='void'
5822 else
5823 freetype='int'
5824 fi
5825 ;;
5826esac
5827echo "Your system uses $freetype free(), it would seem." >&4
5828$rm -f malloc.[co]
5829$cat <<EOM
5830
5831After $package is installed, you may wish to install various
5832add-on modules and utilities. Typically, these add-ons will
5833be installed under $prefix with the rest
5834of this package. However, you may wish to install such add-ons
5835elsewhere under a different prefix.
5836
5837If you do not wish to put everything under a single prefix, that's
5838ok. You will be prompted for the individual locations; this siteprefix
5839is only used to suggest the defaults.
5840
5841The default should be fine for most people.
5842
5843EOM
5844fn=d~+
5845rp='Installation prefix to use for add-on modules and utilities?'
5846: XXX Here might be another good place for an installstyle setting.
5847case "$siteprefix" in
5848'') dflt=$prefix ;;
5849*) dflt=$siteprefix ;;
5850esac
5851. ./getfile
5852: XXX Prefixit unit does not yet support siteprefix and vendorprefix
5853oldsiteprefix=''
5854case "$siteprefix" in
5855'') ;;
5856*) case "$ans" in
5857 "$prefix") ;;
5858 *) oldsiteprefix="$prefix";;
5859 esac
5860 ;;
5861esac
5862siteprefix="$ans"
5863siteprefixexp="$ansexp"
5864
5865: determine where site specific libraries go.
5866: Usual default is /usr/local/lib/perl5/site_perl/$version
5867: The default "style" setting is made in installstyle.U
5868: XXX No longer works with Prefixit stuff.
5869prog=`echo $package | $sed 's/-*[0-9.]*$//'`
5870case "$sitelib" in
5871'') case "$installstyle" in
5872 *lib/perl5*) dflt=$siteprefix/lib/$package/site_$prog/$version ;;
5873 *) dflt=$siteprefix/lib/site_$prog/$version ;;
5874 esac
5875 ;;
5876*) dflt="$sitelib"
5877 ;;
5878esac
5879$cat <<EOM
5880
5881The installation process will create a directory for
5882site-specific extensions and modules. Most users find it convenient
5883to place all site-specific files in this directory rather than in the
5884main distribution directory.
5885
5886EOM
5887fn=d~+
5888rp='Pathname for the site-specific library files?'
5889. ./getfile
5890sitelib="$ans"
5891sitelibexp="$ansexp"
5892sitelib_stem=`echo "$sitelibexp" | sed "s,/$version$,,"`
5893: Change installation prefix, if necessary.
5894if $test X"$prefix" != X"$installprefix"; then
5895 installsitelib=`echo $sitelibexp | $sed "s#^$prefix#$installprefix#"`
5896else
5897 installsitelib="$sitelibexp"
5898fi
5899
5900: determine where site specific architecture-dependent libraries go.
5901: sitelib default is /usr/local/lib/perl5/site_perl/$version
5902: sitearch default is /usr/local/lib/perl5/site_perl/$version/$archname
5903: sitelib may have an optional trailing /share.
5904case "$sitearch" in
5905'') dflt=`echo $sitelib | $sed 's,/share$,,'`
5906 dflt="$dflt/$archname"
5907 ;;
5908*) dflt="$sitearch"
5909 ;;
5910esac
5911set sitearch sitearch none
5912eval $prefixit
5913$cat <<EOM
5914
5915The installation process will also create a directory for
5916architecture-dependent site-specific extensions and modules.
5917
5918EOM
5919fn=d~+
5920rp='Pathname for the site-specific architecture-dependent library files?'
5921. ./getfile
5922sitearch="$ans"
5923sitearchexp="$ansexp"
5924: Change installation prefix, if necessary.
5925if $test X"$prefix" != X"$installprefix"; then
5926 installsitearch=`echo $sitearchexp | sed "s#^$prefix#$installprefix#"`
5927else
5928 installsitearch="$sitearchexp"
5929fi
5930
5931$cat <<EOM
5932
5933The installation process will also create a directory for
5934vendor-supplied add-ons. Vendors who supply perl with their system
5935may find it convenient to place all vendor-supplied files in this
5936directory rather than in the main distribution directory. This will
5937ease upgrades between binary-compatible maintenance versions of perl.
5938
5939Of course you may also use these directories in whatever way you see
5940fit. For example, you might use them to access modules shared over a
5941company-wide network.
5942
5943The default answer should be fine for most people.
5944This causes further questions about vendor add-ons to be skipped
5945and no vendor-specific directories will be configured for perl.
5946
5947EOM
5948rp='Do you want to configure vendor-specific add-on directories?'
5949case "$usevendorprefix" in
5950define|true|[yY]*) dflt=y ;;
5951*) : User may have set vendorprefix directly on Configure command line.
5952 case "$vendorprefix" in
5953 ''|' ') dflt=n ;;
5954 *) dflt=y ;;
5955 esac
5956 ;;
5957esac
5958. ./myread
5959case "$ans" in
5960[yY]*) fn=d~+
5961 rp='Installation prefix to use for vendor-supplied add-ons?'
5962 case "$vendorprefix" in
5963 '') dflt='' ;;
5964 *) dflt=$vendorprefix ;;
5965 esac
5966 . ./getfile
5967 : XXX Prefixit unit does not yet support siteprefix and vendorprefix
5968 oldvendorprefix=''
5969 case "$vendorprefix" in
5970 '') ;;
5971 *) case "$ans" in
5972 "$prefix") ;;
5973 *) oldvendorprefix="$prefix";;
5974 esac
5975 ;;
5976 esac
5977 usevendorprefix="$define"
5978 vendorprefix="$ans"
5979 vendorprefixexp="$ansexp"
5980 ;;
5981*) usevendorprefix="$undef"
5982 vendorprefix=''
5983 vendorprefixexp=''
5984 ;;
5985esac
5986
5987case "$vendorprefix" in
5988'') d_vendorlib="$undef"
5989 vendorlib=''
5990 vendorlibexp=''
5991 ;;
5992*) d_vendorlib="$define"
5993 : determine where vendor-supplied modules go.
5994 : Usual default is /usr/local/lib/perl5/vendor_perl/$version
5995 case "$vendorlib" in
5996 '')
5997 prog=`echo $package | $sed 's/-*[0-9.]*$//'`
5998 case "$installstyle" in
5999 *lib/perl5*) dflt=$vendorprefix/lib/$package/vendor_$prog/$version ;;
6000 *) dflt=$vendorprefix/lib/vendor_$prog/$version ;;
6001 esac
6002 ;;
6003 *) dflt="$vendorlib"
6004 ;;
6005 esac
6006 fn=d~+
6007 rp='Pathname for the vendor-supplied library files?'
6008 . ./getfile
6009 vendorlib="$ans"
6010 vendorlibexp="$ansexp"
6011 ;;
6012esac
6013vendorlib_stem=`echo "$vendorlibexp" | sed "s,/$version$,,"`
6014: Change installation prefix, if necessary.
6015if $test X"$prefix" != X"$installprefix"; then
6016 installvendorlib=`echo $vendorlibexp | $sed "s#^$prefix#$installprefix#"`
6017else
6018 installvendorlib="$vendorlibexp"
6019fi
6020
6021case "$vendorprefix" in
6022'') d_vendorarch="$undef"
6023 vendorarch=''
6024 vendorarchexp=''
6025 ;;
6026*) d_vendorarch="$define"
6027 : determine where vendor-supplied architecture-dependent libraries go.
6028 : vendorlib default is /usr/local/lib/perl5/vendor_perl/$version
6029 : vendorarch default is /usr/local/lib/perl5/vendor_perl/$version/$archname
6030 : vendorlib may have an optional trailing /share.
6031 case "$vendorarch" in
6032 '') dflt=`echo $vendorlib | $sed 's,/share$,,'`
6033 dflt="$dflt/$archname"
6034 ;;
6035 *) dflt="$vendorarch" ;;
6036 esac
6037 fn=d~+
6038 rp='Pathname for vendor-supplied architecture-dependent files?'
6039 . ./getfile
6040 vendorarch="$ans"
6041 vendorarchexp="$ansexp"
6042 ;;
6043esac
6044: Change installation prefix, if necessary.
6045if $test X"$prefix" != X"$installprefix"; then
6046 installvendorarch=`echo $vendorarchexp | sed "s#^$prefix#$installprefix#"`
6047else
6048 installvendorarch="$vendorarchexp"
6049fi
6050
6051: Final catch-all directories to search
6052$cat <<EOM
6053
6054Lastly, you can have perl look in other directories for extensions and
6055modules in addition to those already specified.
6056These directories will be searched after
6057 $sitearch
6058 $sitelib
6059EOM
6060test X"$vendorlib" != "X" && echo ' ' $vendorlib
6061test X"$vendorarch" != "X" && echo ' ' $vendorarch
6062echo ' '
6063case "$otherlibdirs" in
6064''|' ') dflt='none' ;;
6065*) dflt="$otherlibdirs" ;;
6066esac
6067$cat <<EOM
6068Enter a colon-separated set of extra paths to include in perl's @INC
6069search path, or enter 'none' for no extra paths.
6070
6071EOM
6072
6073rp='Colon-separated list of additional directories for perl to search?'
6074. ./myread
6075case "$ans" in
6076' '|''|none) otherlibdirs=' ' ;;
6077*) otherlibdirs="$ans" ;;
6078esac
6079case "$otherlibdirs" in
6080' ') val=$undef ;;
6081*) val=$define ;;
6082esac
6083set d_perl_otherlibdirs
6084eval $setvar
6085
6086: Cruising for prototypes
6087echo " "
6088echo "Checking out function prototypes..." >&4
6089$cat >prototype.c <<'EOCP'
6090int main(int argc, char *argv[]) {
6091 exit(0);}
6092EOCP
6093if $cc $ccflags -c prototype.c >prototype.out 2>&1 ; then
6094 echo "Your C compiler appears to support function prototypes."
6095 val="$define"
6096else
6097 echo "Your C compiler doesn't seem to understand function prototypes."
6098 val="$undef"
6099fi
6100set prototype
6101eval $setvar
6102$rm -f prototype*
6103
6104case "$prototype" in
6105"$define") ;;
6106*) ansi2knr='ansi2knr'
6107 echo " "
6108 cat <<EOM >&4
6109
6110$me: FATAL ERROR:
6111This version of $package can only be compiled by a compiler that
6112understands function prototypes. Unfortunately, your C compiler
6113 $cc $ccflags
6114doesn't seem to understand them. Sorry about that.
6115
6116If GNU cc is available for your system, perhaps you could try that instead.
6117
6118Eventually, we hope to support building Perl with pre-ANSI compilers.
6119If you would like to help in that effort, please contact <perlbug@perl.org>.
6120
6121Aborting Configure now.
6122EOM
6123 exit 2
6124 ;;
6125esac
6126
6127: determine where public executables go
6128echo " "
6129set dflt bin bin
6130eval $prefixit
6131fn=d~
6132rp='Pathname where the public executables will reside?'
6133. ./getfile
6134if $test "X$ansexp" != "X$binexp"; then
6135 installbin=''
6136fi
6137bin="$ans"
6138binexp="$ansexp"
6139: Change installation prefix, if necessary.
6140: XXX Bug? -- ignores Configure -Dinstallprefix setting.
6141if $test X"$prefix" != X"$installprefix"; then
6142 installbin=`echo $binexp | sed "s#^$prefix#$installprefix#"`
6143else
6144 installbin="$binexp"
6145fi
6146
6147: Find perl5.005 or later.
6148echo "Looking for a previously installed perl5.005 or later... "
6149case "$perl5" in
6150'') for tdir in `echo "$binexp:$PATH" | $sed "s/$path_sep/ /g"`; do
6151 : Check if this perl is recent and can load a simple module
6152 if $test -x $tdir/perl && $tdir/perl -Mless -e 'use 5.005;' >/dev/null 2>&1; then
6153 perl5=$tdir/perl
6154 break;
6155 elif $test -x $tdir/perl5 && $tdir/perl5 -Mless -e 'use 5.005;' >/dev/null 2>&1; then
6156 perl5=$tdir/perl
6157 break;
6158 fi
6159 done
6160 ;;
6161*) perl5="$perl5"
6162 ;;
6163esac
6164case "$perl5" in
6165'') echo "None found. That's ok.";;
6166*) echo "Using $perl5." ;;
6167esac
6168
6169: Determine list of previous versions to include in @INC
6170$cat > getverlist <<EOPL
6171#!$perl5 -w
6172use File::Basename;
6173\$api_versionstring = "$api_versionstring";
6174\$version = "$version";
6175\$stem = "$sitelib_stem";
6176\$archname = "$archname";
6177EOPL
6178 $cat >> getverlist <<'EOPL'
6179# Can't have leading @ because metaconfig interprets it as a command!
6180;@inc_version_list=();
6181# XXX Redo to do opendir/readdir?
6182if (-d $stem) {
6183 chdir($stem);
6184 ;@candidates = glob("5.*");
6185}
6186else {
6187 ;@candidates = ();
6188}
6189
6190# XXX ToDo: These comparisons must be reworked when two-digit
6191# subversions come along, so that 5.7.10 compares as greater than
6192# 5.7.3! By that time, hope that 5.6.x is sufficiently
6193# widespread that we can use the built-in version vectors rather
6194# than reinventing them here. For 5.6.0, however, we must
6195# assume this script will likely be run by 5.005_0x. --AD 1/2000.
6196foreach $d (@candidates) {
6197 if ($d lt $version) {
6198 if ($d ge $api_versionstring) {
6199 unshift(@inc_version_list, grep { -d } "$d/$archname", $d);
6200 }
6201 elsif ($d ge "5.005") {
6202 unshift(@inc_version_list, grep { -d } $d);
6203 }
6204 }
6205 else {
6206 # Skip newer version. I.e. don't look in
6207 # 5.7.0 if we're installing 5.6.1.
6208 }
6209}
6210
6211if (@inc_version_list) {
6212 print join(' ', @inc_version_list);
6213}
6214else {
6215 # Blank space to preserve value for next Configure run.
6216 print " ";
6217}
6218EOPL
6219chmod +x getverlist
6220case "$inc_version_list" in
6221'') if test -x "$perl5"; then
6222 dflt=`$perl5 getverlist`
6223 else
6224 dflt='none'
6225 fi
6226 ;;
6227$undef) dflt='none' ;;
6228*) dflt="$inc_version_list" ;;
6229esac
6230case "$dflt" in
6231''|' ') dflt=none ;;
6232esac
6233case "$dflt" in
62345.005) case "$bincompat5005" in
6235 $define|true|[yY]*) ;;
6236 *) dflt=none ;;
6237 esac
6238 ;;
6239esac
6240$cat <<'EOM'
6241
6242In order to ease the process of upgrading, this version of perl
6243can be configured to use modules built and installed with earlier
6244versions of perl that were installed under $prefix. Specify here
6245the list of earlier versions that this version of perl should check.
6246If Configure detected no earlier versions of perl installed under
6247$prefix, then the list will be empty. Answer 'none' to tell perl
6248to not search earlier versions.
6249
6250The default should almost always be sensible, so if you're not sure,
6251just accept the default.
6252EOM
6253
6254rp='List of earlier versions to include in @INC?'
6255. ./myread
6256case "$ans" in
6257[Nn]one|''|' ') inc_version_list=' ' ;;
6258*) inc_version_list="$ans" ;;
6259esac
6260case "$inc_version_list" in
6261''|' ')
6262 inc_version_list_init='0';;
6263*) inc_version_list_init=`echo $inc_version_list |
6264 $sed -e 's/^/"/' -e 's/ /","/g' -e 's/$/",0/'`
6265 ;;
6266esac
6267$rm -f getverlist
6268
6269: determine whether to install perl also as /usr/bin/perl
6270
6271echo " "
6272if $test -d /usr/bin -a "X$installbin" != X/usr/bin; then
6273 $cat <<EOM
6274Many scripts expect perl to be installed as /usr/bin/perl.
6275I can install the perl you are about to compile also as /usr/bin/perl
6276(in addition to $installbin/perl).
6277EOM
6278 case "$installusrbinperl" in
6279 "$undef"|[nN]*) dflt='n';;
6280 *) dflt='y';;
6281 esac
6282 rp="Do you want to install perl as /usr/bin/perl?"
6283 . ./myread
6284 case "$ans" in
6285 [yY]*) val="$define";;
6286 *) val="$undef" ;;
6287 esac
6288else
6289 val="$undef"
6290fi
6291set installusrbinperl
6292eval $setvar
6293
6294: see if dld is available
6295set dld.h i_dld
6296eval $inhdr
6297
6298: see if dlopen exists
6299xxx_runnm="$runnm"
6300runnm=false
6301set dlopen d_dlopen
6302eval $inlibc
6303runnm="$xxx_runnm"
6304
6305: determine which dynamic loading, if any, to compile in
6306echo " "
6307dldir="ext/DynaLoader"
6308case "$usedl" in
6309$define|y|true)
6310 dflt='y'
6311 usedl="$define"
6312 ;;
6313$undef|n|false)
6314 dflt='n'
6315 usedl="$undef"
6316 ;;
6317*)
6318 dflt='n'
6319 case "$d_dlopen" in
6320 $define) dflt='y' ;;
6321 esac
6322 case "$i_dld" in
6323 $define) dflt='y' ;;
6324 esac
6325 : Does a dl_xxx.xs file exist for this operating system
6326 $test -f $rsrc/$dldir/dl_${osname}.xs && dflt='y'
6327 ;;
6328esac
6329rp="Do you wish to use dynamic loading?"
6330. ./myread
6331usedl="$ans"
6332case "$ans" in
6333y*) usedl="$define"
6334 case "$dlsrc" in
6335 '')
6336 if $test -f $rsrc/$dldir/dl_${osname}.xs ; then
6337 dflt="$dldir/dl_${osname}.xs"
6338 elif $test "$d_dlopen" = "$define" ; then
6339 dflt="$dldir/dl_dlopen.xs"
6340 elif $test "$i_dld" = "$define" ; then
6341 dflt="$dldir/dl_dld.xs"
6342 else
6343 dflt=''
6344 fi
6345 ;;
6346 *) dflt="$dldir/$dlsrc"
6347 ;;
6348 esac
6349 echo "The following dynamic loading files are available:"
6350 : Can not go over to $dldir because getfile has path hard-coded in.
6351 tdir=`pwd`; cd $rsrc; $ls -C $dldir/dl*.xs; cd $tdir
6352 rp="Source file to use for dynamic loading"
6353 fn="fne"
6354 gfpth="$src"
6355 . ./getfile
6356 usedl="$define"
6357 : emulate basename
6358 dlsrc=`echo $ans | $sed -e 's%.*/\([^/]*\)$%\1%'`
6359
6360 $cat << EOM
6361
6362Some systems may require passing special flags to $cc -c to
6363compile modules that will be used to create a shared library.
6364To use no flags, say "none".
6365
6366EOM
6367 case "$cccdlflags" in
6368 '') case "$gccversion" in
6369 '') case "$osname" in
6370 hpux) dflt='+z' ;;
6371 next) dflt='none' ;;
6372 irix*) dflt='-KPIC' ;;
6373 svr4*|esix*|solaris) dflt='-KPIC' ;;
6374 sunos) dflt='-pic' ;;
6375 *) dflt='none' ;;
6376 esac
6377 ;;
6378 *) case "$osname" in
6379 svr4*|esix*|solaris) dflt='-fPIC' ;;
6380 *) dflt='-fpic' ;;
6381 esac ;;
6382 esac ;;
6383 ' ') dflt='none' ;;
6384 *) dflt="$cccdlflags" ;;
6385 esac
6386 rp="Any special flags to pass to $cc -c to compile shared library modules?"
6387 . ./myread
6388 case "$ans" in
6389 none) cccdlflags=' ' ;;
6390 *) cccdlflags="$ans" ;;
6391 esac
6392
6393 cat << EOM
6394
6395Some systems use ld to create libraries that can be dynamically loaded,
6396while other systems (such as those using ELF) use $cc.
6397
6398EOM
6399 case "$ld" in
6400 '') $cat >try.c <<'EOM'
6401/* Test for whether ELF binaries are produced */
6402#include <fcntl.h>
6403#include <stdlib.h>
6404int main() {
6405 char b[4];
6406 int i = open("a.out",O_RDONLY);
6407 if(i == -1)
6408 exit(1); /* fail */
6409 if(read(i,b,4)==4 && b[0]==127 && b[1]=='E' && b[2]=='L' && b[3]=='F')
6410 exit(0); /* succeed (yes, it's ELF) */
6411 else
6412 exit(1); /* fail */
6413}
6414EOM
6415 if $cc $ccflags try.c >/dev/null 2>&1 && ./a.out; then
6416 cat <<EOM
6417You appear to have ELF support. I'll use $cc to build dynamic libraries.
6418EOM
6419 dflt="$cc"
6420 else
6421 echo "I'll use ld to build dynamic libraries."
6422 dflt='ld'
6423 fi
6424 rm -f try.c a.out
6425 ;;
6426 *) dflt="$ld"
6427 ;;
6428 esac
6429
6430 rp="What command should be used to create dynamic libraries?"
6431 . ./myread
6432 ld="$ans"
6433
6434 cat << EOM
6435
6436Some systems may require passing special flags to $ld to create a
6437library that can be dynamically loaded. If your ld flags include
6438-L/other/path options to locate libraries outside your loader's normal
6439search path, you may need to specify those -L options here as well. To
6440use no flags, say "none".
6441
6442EOM
6443 case "$lddlflags" in
6444 '') case "$osname" in
6445 beos) dflt='-nostart' ;;
6446 hpux) dflt='-b';
6447 case "$gccversion" in
6448 '') dflt="$dflt +vnocompatwarnings" ;;
6449 esac
6450 ;;
6451 linux|irix*) dflt='-shared' ;;
6452 next) dflt='none' ;;
6453 solaris) dflt='-G' ;;
6454 sunos) dflt='-assert nodefinitions' ;;
6455 svr4*|esix*) dflt="-G $ldflags" ;;
6456 *) dflt='none' ;;
6457 esac
6458 ;;
6459 *) dflt="$lddlflags" ;;
6460 esac
6461
6462 : Try to guess additional flags to pick up local libraries.
6463 : Be careful not to append to a plain 'none'
6464 case "$dflt" in
6465 none) dflt='' ;;
6466 esac
6467 for thisflag in $ldflags; do
6468 case "$thisflag" in
6469 -L*|-R*)
6470 case " $dflt " in
6471 *" $thisflag "*) ;;
6472 *) dflt="$dflt $thisflag" ;;
6473 esac
6474 ;;
6475 esac
6476 done
6477
6478 case "$dflt" in
6479 ''|' ') dflt='none' ;;
6480 esac
6481
6482 rp="Any special flags to pass to $ld to create a dynamically loaded library?"
6483 . ./myread
6484 case "$ans" in
6485 none) lddlflags=' ' ;;
6486 *) lddlflags="$ans" ;;
6487 esac
6488
6489 cat <<EOM
6490
6491Some systems may require passing special flags to $cc to indicate that
6492the resulting executable will use dynamic linking. To use no flags,
6493say "none".
6494
6495EOM
6496 case "$ccdlflags" in
6497 '') case "$osname" in
6498 hpux) dflt='-Wl,-E' ;;
6499 linux) dflt='-rdynamic' ;;
6500 next) dflt='none' ;;
6501 sunos) dflt='none' ;;
6502 *) dflt='none' ;;
6503 esac ;;
6504 ' ') dflt='none' ;;
6505 *) dflt="$ccdlflags" ;;
6506 esac
6507 rp="Any special flags to pass to $cc to use dynamic linking?"
6508 . ./myread
6509 case "$ans" in
6510 none) ccdlflags=' ' ;;
6511 *) ccdlflags="$ans" ;;
6512 esac
6513 ;;
6514*) usedl="$undef"
6515 ld='ld'
6516 dlsrc='dl_none.xs'
6517 lddlflags=''
6518 ccdlflags=''
6519 ;;
6520esac
6521
6522also=''
6523case "$usedl" in
6524$undef)
6525 # No dynamic loading being used, so don't bother even to prompt.
6526 useshrplib='false'
6527 ;;
6528*) case "$useshrplib" in
6529 '') case "$osname" in
6530 svr4*|dgux|dynixptx|esix|powerux|beos|cygwin*)
6531 dflt=y
6532 also='Building a shared libperl is required for dynamic loading to work on your system.'
6533 ;;
6534 next*)
6535 case "$osvers" in
6536 4*) dflt=y
6537 also='Building a shared libperl is needed for MAB support.'
6538 ;;
6539 *) dflt=n
6540 ;;
6541 esac
6542 ;;
6543 *) dflt=n
6544 ;;
6545 esac
6546 ;;
6547 $define|true|[Yy]*)
6548 dflt=y
6549 ;;
6550 *) dflt=n
6551 ;;
6552 esac
6553 $cat << EOM
6554
6555The perl executable is normally obtained by linking perlmain.c with
6556libperl${_a}, any static extensions (usually just DynaLoader), and
6557any other libraries needed on this system (such as -lm, etc.). Since
6558your system supports dynamic loading, it is probably possible to build
6559a shared libperl.$so. If you will have more than one executable linked
6560to libperl.$so, this will significantly reduce the size of each
6561executable, but it may have a noticeable affect on performance. The
6562default is probably sensible for your system.
6563$also
6564
6565EOM
6566 rp="Build a shared libperl.$so (y/n)"
6567 . ./myread
6568 case "$ans" in
6569 true|$define|[Yy]*)
6570 useshrplib='true' ;;
6571 *) useshrplib='false' ;;
6572 esac
6573 ;;
6574esac
6575
6576case "$useshrplib" in
6577true)
6578 case "$libperl" in
6579 '')
6580 # Figure out a good name for libperl.so. Since it gets stored in
6581 # a version-specific architecture-dependent library, the version
6582 # number isn't really that important, except for making cc/ld happy.
6583 #
6584 # A name such as libperl.so.3.1
6585 majmin="libperl.$so.$patchlevel.$subversion"
6586 # A name such as libperl.so.301
6587 majonly=`echo $patchlevel $subversion |
6588 $awk '{printf "%d%02d", $1, $2}'`
6589 majonly=libperl.$so.$majonly
6590 # I'd prefer to keep the os-specific stuff here to a minimum, and
6591 # rely on figuring it out from the naming of libc.
6592 case "${osname}${osvers}" in
6593 next4*)
6594 dflt=libperl.5.$so
6595 # XXX How handle the --version stuff for MAB?
6596 ;;
6597 linux*) # ld won't link with a bare -lperl otherwise.
6598 dflt=libperl.$so
6599 ;;
6600 cygwin*) # include version
6601 dflt=`echo libperl$version | sed -e 's/\./_/g'`$lib_ext
6602 ;;
6603 *) # Try to guess based on whether libc has major.minor.
6604 case "$libc" in
6605 *libc.$so.[0-9]*.[0-9]*) dflt=$majmin ;;
6606 *libc.$so.[0-9]*) dflt=$majonly ;;
6607 *) dflt=libperl.$so ;;
6608 esac
6609 ;;
6610 esac
6611 ;;
6612 *) dflt=$libperl
6613 ;;
6614 esac
6615 cat << EOM
6616
6617I need to select a good name for the shared libperl. If your system uses
6618library names with major and minor numbers, then you might want something
6619like $majmin. Alternatively, if your system uses a single version
6620number for shared libraries, then you might want to use $majonly.
6621Or, your system might be quite happy with a simple libperl.$so.
6622
6623Since the shared libperl will get installed into a version-specific
6624architecture-dependent directory, the version number of the shared perl
6625library probably isn't important, so the default should be o.k.
6626
6627EOM
6628 rp='What name do you want to give to the shared libperl?'
6629 . ./myread
6630 libperl=$ans
6631 echo "Ok, I'll use $libperl"
6632 ;;
6633*)
6634 libperl="libperl${_a}"
6635 ;;
6636esac
6637
6638# Detect old use of shrpdir via undocumented Configure -Dshrpdir
6639case "$shrpdir" in
6640'') ;;
6641*) $cat >&4 <<EOM
6642WARNING: Use of the shrpdir variable for the installation location of
6643the shared $libperl is not supported. It was never documented and
6644will not work in this version. Let me (perlbug@perl.org)
6645know of any problems this may cause.
6646
6647EOM
6648 case "$shrpdir" in
6649 "$archlibexp/CORE")
6650 $cat >&4 <<EOM
6651But your current setting of $shrpdir is
6652the default anyway, so it's harmless.
6653EOM
6654 ;;
6655 *)
6656 $cat >&4 <<EOM
6657Further, your current attempted setting of $shrpdir
6658conflicts with the value of $archlibexp/CORE
6659that installperl will use.
6660EOM
6661 ;;
6662 esac
6663 ;;
6664esac
6665
6666# How will the perl executable find the installed shared $libperl?
6667# Add $xxx to ccdlflags.
6668# If we can't figure out a command-line option, use $shrpenv to
6669# set env LD_RUN_PATH. The main perl makefile uses this.
6670shrpdir=$archlibexp/CORE
6671xxx=''
6672tmp_shrpenv=''
6673if "$useshrplib"; then
6674 case "$osname" in
6675 aix)
6676 # We'll set it in Makefile.SH...
6677 ;;
6678 solaris|netbsd)
6679 xxx="-R $shrpdir"
6680 ;;
6681 freebsd)
6682 xxx="-Wl,-R$shrpdir"
6683 ;;
6684 linux|irix*|dec_osf)
6685 xxx="-Wl,-rpath,$shrpdir"
6686 ;;
6687 next)
6688 # next doesn't like the default...
6689 ;;
6690 beos)
6691 # beos doesn't like the default, either.
6692 ;;
6693 hpux*)
6694 # hpux doesn't like the default, either.
6695 tmp_shrpenv="env LDOPTS=\"+s +b${shrpdir}\""
6696 ;;
6697 *)
6698 tmp_shrpenv="env LD_RUN_PATH=$shrpdir"
6699 ;;
6700 esac
6701 case "$xxx" in
6702 '') ;;
6703 *)
6704 # Only add $xxx if it isn't already in ccdlflags.
6705 case " $ccdlflags " in
6706 *" $xxx "*) ;;
6707 *) ccdlflags="$ccdlflags $xxx"
6708 cat <<EOM >&4
6709
6710Adding $xxx to the flags
6711passed to $ld so that the perl executable will find the
6712installed shared $libperl.
6713
6714EOM
6715 ;;
6716 esac
6717 ;;
6718 esac
6719fi
6720# Fix ccdlflags in AIX for building external extensions.
6721# (For building Perl itself bare -bE:perl.exp is needed,
6722# Makefile.SH takes care of this.)
6723case "$osname" in
6724aix) ccdlflags="$ccdlflags -bE:$installarchlib/CORE/perl.exp" ;;
6725esac
6726# Respect a hint or command-line value.
6727case "$shrpenv" in
6728'') shrpenv="$tmp_shrpenv" ;;
6729esac
6730case "$ldlibpthname" in
6731'') ldlibpthname=LD_LIBRARY_PATH ;;
6732none) ldlibpthname='' ;;
6733esac
6734
6735: determine where manual pages are on this system
6736echo " "
6737case "$sysman" in
6738'')
6739 syspath='/usr/man/man1 /usr/man/mann /usr/man/manl /usr/man/local/man1'
6740 syspath="$syspath /usr/man/u_man/man1 /usr/share/man/man1"
6741 syspath="$syspath /usr/catman/u_man/man1 /usr/man/l_man/man1"
6742 syspath="$syspath /usr/local/man/u_man/man1 /usr/local/man/l_man/man1"
6743 syspath="$syspath /usr/man/man.L /local/man/man1 /usr/local/man/man1"
6744 sysman=`./loc . /usr/man/man1 $syspath`
6745 ;;
6746esac
6747if $test -d "$sysman"; then
6748 echo "System manual is in $sysman." >&4
6749else
6750 echo "Could not find manual pages in source form." >&4
6751fi
6752
6753: determine where manual pages go
6754set man1dir man1dir none
6755eval $prefixit
6756$cat <<EOM
6757
6758$spackage has manual pages available in source form.
6759EOM
6760case "$nroff" in
6761nroff)
6762 echo "However, you don't have nroff, so they're probably useless to you."
6763 case "$man1dir" in
6764 '') man1dir="none";;
6765 esac;;
6766esac
6767echo "If you don't want the manual sources installed, answer 'none'."
6768case "$man1dir" in
6769' ') dflt=none
6770 ;;
6771'')
6772 lookpath="$prefixexp/man/man1 $prefixexp/man/l_man/man1"
6773 lookpath="$lookpath $prefixexp/man/p_man/man1"
6774 lookpath="$lookpath $prefixexp/man/u_man/man1"
6775 lookpath="$lookpath $prefixexp/man/man.1"
6776 case "$sysman" in
6777 */?_man*) dflt=`./loc . $prefixexp/l_man/man1 $lookpath` ;;
6778 *) dflt=`./loc . $prefixexp/man/man1 $lookpath` ;;
6779 esac
6780 set dflt
6781 eval $prefixup
6782 ;;
6783*) dflt="$man1dir"
6784 ;;
6785esac
6786echo " "
6787fn=dn+~
6788rp="Where do the main $spackage manual pages (source) go?"
6789. ./getfile
6790if $test "X$man1direxp" != "X$ansexp"; then
6791 installman1dir=''
6792fi
6793man1dir="$ans"
6794man1direxp="$ansexp"
6795case "$man1dir" in
6796'') man1dir=' '
6797 installman1dir='';;
6798esac
6799
6800: Change installation prefix, if necessary.
6801if $test X"$prefix" != X"$installprefix"; then
6802 installman1dir=`echo $man1direxp | $sed "s#^$prefix#$installprefix#"`
6803else
6804 installman1dir="$man1direxp"
6805fi
6806
6807: What suffix to use on installed man pages
6808
6809case "$man1dir" in
6810' ')
6811 man1ext='0'
6812 ;;
6813*)
6814 rp="What suffix should be used for the main $spackage man pages?"
6815 case "$man1ext" in
6816 '') case "$man1dir" in
6817 *1) dflt=1 ;;
6818 *1p) dflt=1p ;;
6819 *1pm) dflt=1pm ;;
6820 *l) dflt=l;;
6821 *n) dflt=n;;
6822 *o) dflt=o;;
6823 *p) dflt=p;;
6824 *C) dflt=C;;
6825 *L) dflt=L;;
6826 *L1) dflt=L1;;
6827 *) dflt=1;;
6828 esac
6829 ;;
6830 *) dflt="$man1ext";;
6831 esac
6832 . ./myread
6833 man1ext="$ans"
6834 ;;
6835esac
6836
6837: see if we can have long filenames
6838echo " "
6839first=123456789abcdef
6840$rm -f $first
6841if (echo hi >$first) 2>/dev/null; then
6842 if $test -f 123456789abcde; then
6843 echo 'You cannot have filenames longer than 14 characters. Sigh.' >&4
6844 val="$undef"
6845 else
6846 echo 'You can have filenames longer than 14 characters.'>&4
6847 val="$define"
6848 fi
6849else
6850 $cat <<'EOM'
6851You can't have filenames longer than 14 chars.
6852You can't even think about them!
6853EOM
6854 val="$undef"
6855fi
6856set d_flexfnam
6857eval $setvar
6858$rm -rf 123456789abcde*
6859
6860: determine where library module manual pages go
6861set man3dir man3dir none
6862eval $prefixit
6863$cat <<EOM
6864
6865$spackage has manual pages for many of the library modules.
6866EOM
6867
6868case "$nroff" in
6869nroff)
6870 $cat <<'EOM'
6871However, you don't have nroff, so they're probably useless to you.
6872EOM
6873 case "$man3dir" in
6874 '') man3dir="none";;
6875 esac;;
6876esac
6877
6878case "$d_flexfnam" in
6879undef)
6880 $cat <<'EOM'
6881However, your system can't handle the long file names like File::Basename.3.
6882EOM
6883 case "$man3dir" in
6884 '') man3dir="none";;
6885 esac;;
6886esac
6887
6888echo "If you don't want the manual sources installed, answer 'none'."
6889prog=`echo $package | $sed 's/-*[0-9.]*$//'`
6890case "$man3dir" in
6891'') dflt=`echo "$man1dir" | $sed -e 's/man1/man3/g' -e 's/man\.1/man\.3/g'`
6892 if $test -d "$privlib/man/man3"; then
6893 cat <<EOM >&4
6894
6895WARNING: Previous versions of perl installed man3 pages into
6896$privlib/man/man3. This version will suggest a
6897new default of $dflt.
6898EOM
6899 tdflt=$dflt
6900 dflt='n'
6901 rp='Do you wish to preserve the old behavior?(y/n)'
6902 . ./myread
6903 case "$ans" in
6904 y*) dflt="$privlib/man/man3" ;;
6905 *) dflt=$tdflt ;;
6906 esac
6907 fi
6908 ;;
6909*) dflt="$man3dir" ;;
6910esac
6911case "$dflt" in
6912' ') dflt=none ;;
6913esac
6914echo " "
6915fn=dn+~
6916rp="Where do the $package library man pages (source) go?"
6917. ./getfile
6918man3dir="$ans"
6919man3direxp="$ansexp"
6920case "$man3dir" in
6921'') man3dir=' '
6922 installman3dir='';;
6923esac
6924
6925: Change installation prefix, if necessary.
6926if $test X"$prefix" != X"$installprefix"; then
6927 installman3dir=`echo $man3direxp | $sed "s#^$prefix#$installprefix#"`
6928else
6929 installman3dir="$man3direxp"
6930fi
6931
6932: What suffix to use on installed man pages
6933case "$man3dir" in
6934' ')
6935 man3ext='0'
6936 ;;
6937*)
6938 rp="What suffix should be used for the $package library man pages?"
6939 case "$man3ext" in
6940 '') case "$man3dir" in
6941 *3) dflt=3 ;;
6942 *3p) dflt=3p ;;
6943 *3pm) dflt=3pm ;;
6944 *l) dflt=l;;
6945 *n) dflt=n;;
6946 *o) dflt=o;;
6947 *p) dflt=p;;
6948 *C) dflt=C;;
6949 *L) dflt=L;;
6950 *L3) dflt=L3;;
6951 *) dflt=3;;
6952 esac
6953 ;;
6954 *) dflt="$man3ext";;
6955 esac
6956 . ./myread
6957 man3ext="$ans"
6958 ;;
6959esac
6960
6961: see if we have to deal with yellow pages, now NIS.
6962if $test -d /usr/etc/yp || $test -d /etc/yp; then
6963 if $test -f /usr/etc/nibindd; then
6964 echo " "
6965 echo "I'm fairly confident you're on a NeXT."
6966 echo " "
6967 rp='Do you get the hosts file via NetInfo?'
6968 dflt=y
6969 case "$hostcat" in
6970 nidump*) ;;
6971 '') ;;
6972 *) dflt=n;;
6973 esac
6974 . ./myread
6975 case "$ans" in
6976 y*) hostcat='nidump hosts .';;
6977 *) case "$hostcat" in
6978 nidump*) hostcat='';;
6979 esac
6980 ;;
6981 esac
6982 fi
6983 case "$hostcat" in
6984 nidump*) ;;
6985 *)
6986 case "$hostcat" in
6987 *ypcat*) dflt=y;;
6988 '') if $contains '^\+' /etc/passwd >/dev/null 2>&1; then
6989 dflt=y
6990 else
6991 dflt=n
6992 fi;;
6993 *) dflt=n;;
6994 esac
6995 echo " "
6996 rp='Are you getting the hosts file via yellow pages?'
6997 . ./myread
6998 case "$ans" in
6999 y*) hostcat='ypcat hosts';;
7000 *) hostcat='cat /etc/hosts';;
7001 esac
7002 ;;
7003 esac
7004fi
7005case "$hostcat" in
7006'') test -f /etc/hosts && hostcat='cat /etc/hosts';;
7007esac
7008case "$groupcat" in
7009'') test -f /etc/group && groupcat='cat /etc/group';;
7010esac
7011case "$passcat" in
7012'') test -f /etc/passwd && passcat='cat /etc/passwd';;
7013esac
7014
7015: now get the host name
7016echo " "
7017echo "Figuring out host name..." >&4
7018case "$myhostname" in
7019'') cont=true
7020 echo 'Maybe "hostname" will work...'
7021 if tans=`sh -c hostname 2>&1` ; then
7022 myhostname=$tans
7023 phostname=hostname
7024 cont=''
7025 fi
7026 ;;
7027*) cont='';;
7028esac
7029if $test "$cont"; then
7030 if ./xenix; then
7031 echo 'Oh, dear. Maybe "/etc/systemid" is the key...'
7032 if tans=`cat /etc/systemid 2>&1` ; then
7033 myhostname=$tans
7034 phostname='cat /etc/systemid'
7035 echo "Whadyaknow. Xenix always was a bit strange..."
7036 cont=''
7037 fi
7038 elif $test -r /etc/systemid; then
7039 echo "(What is a non-Xenix system doing with /etc/systemid?)"
7040 fi
7041fi
7042if $test "$cont"; then
7043 echo 'No, maybe "uuname -l" will work...'
7044 if tans=`sh -c 'uuname -l' 2>&1` ; then
7045 myhostname=$tans
7046 phostname='uuname -l'
7047 else
7048 echo 'Strange. Maybe "uname -n" will work...'
7049 if tans=`sh -c 'uname -n' 2>&1` ; then
7050 myhostname=$tans
7051 phostname='uname -n'
7052 else
7053 echo 'Oh well, maybe I can mine it out of whoami.h...'
7054 if tans=`sh -c $contains' sysname $usrinc/whoami.h' 2>&1` ; then
7055 myhostname=`echo "$tans" | $sed 's/^.*"\(.*\)"/\1/'`
7056 phostname="sed -n -e '"'/sysname/s/^.*\"\\(.*\\)\"/\1/{'"' -e p -e q -e '}' <$usrinc/whoami.h"
7057 else
7058 case "$myhostname" in
7059 '') echo "Does this machine have an identity crisis or something?"
7060 phostname='';;
7061 *)
7062 echo "Well, you said $myhostname before..."
7063 phostname='echo $myhostname';;
7064 esac
7065 fi
7066 fi
7067 fi
7068fi
7069: you do not want to know about this
7070set $myhostname
7071myhostname=$1
7072
7073: verify guess
7074if $test "$myhostname" ; then
7075 dflt=y
7076 rp='Your host name appears to be "'$myhostname'".'" Right?"
7077 . ./myread
7078 case "$ans" in
7079 y*) ;;
7080 *) myhostname='';;
7081 esac
7082fi
7083
7084: bad guess or no guess
7085while $test "X$myhostname" = X ; do
7086 dflt=''
7087 rp="Please type the (one word) name of your host:"
7088 . ./myread
7089 myhostname="$ans"
7090done
7091
7092: translate upper to lower if necessary
7093case "$myhostname" in
7094*[A-Z]*)
7095 echo "(Normalizing case in your host name)"
7096 myhostname=`echo $myhostname | ./tr '[A-Z]' '[a-z]'`
7097 ;;
7098esac
7099
7100case "$myhostname" in
7101*.*)
7102 dflt=`expr "X$myhostname" : "X[^.]*\(\..*\)"`
7103 myhostname=`expr "X$myhostname" : "X\([^.]*\)\."`
7104 echo "(Trimming domain name from host name--host name is now $myhostname)"
7105 ;;
7106*) case "$mydomain" in
7107 '')
7108 {
7109 test "X$hostcat" = "Xypcat hosts" &&
7110 ypmatch "$myhostname" hosts 2>/dev/null |\
7111 $sed -e 's/[ ]*#.*//; s/$/ /' > hosts && \
7112 $test -s hosts
7113 } || {
7114 test "X$hostcat" != "X" &&
7115 $hostcat | $sed -n -e "s/[ ]*#.*//; s/\$/ /
7116 /[ ]$myhostname[ . ]/p" > hosts
7117 }
7118 tmp_re="[ . ]"
7119 $test x`$awk "/[0-9].*[ ]$myhostname$tmp_re/ { sum++ }
7120 END { print sum }" hosts` = x1 || tmp_re="[ ]"
7121 dflt=.`$awk "/[0-9].*[ ]$myhostname$tmp_re/ {for(i=2; i<=NF;i++) print \\\$i}" \
7122 hosts | $sort | $uniq | \
7123 $sed -n -e "s/$myhostname\.\([-a-zA-Z0-9_.]\)/\1/p"`
7124 case `$echo X$dflt` in
7125 X*\ *) echo "(Several hosts in /etc/hosts matched hostname)"
7126 dflt=.
7127 ;;
7128 X.) echo "(You do not have fully-qualified names in /etc/hosts)"
7129 ;;
7130 esac
7131 case "$dflt" in
7132 .)
7133 tans=`./loc resolv.conf X /etc /usr/etc`
7134 if $test -f "$tans"; then
7135 echo "(Attempting domain name extraction from $tans)"
7136 dflt=.`$sed -n -e 's/ / /g' \
7137 -e 's/^search *\([^ ]*\).*/\1/p' $tans \
7138 | ./tr '[A-Z]' '[a-z]' 2>/dev/null`
7139 case "$dflt" in
7140 .) dflt=.`$sed -n -e 's/ / /g' \
7141 -e 's/^domain *\([^ ]*\).*/\1/p' $tans \
7142 | ./tr '[A-Z]' '[a-z]' 2>/dev/null`
7143 ;;
7144 esac
7145 fi
7146 ;;
7147 esac
7148 case "$dflt" in
7149 .) echo "(No help from resolv.conf either -- attempting clever guess)"
7150 dflt=.`sh -c domainname 2>/dev/null`
7151 case "$dflt" in
7152 '') dflt='.';;
7153 .nis.*|.yp.*|.main.*) dflt=`echo $dflt | $sed -e 's/^\.[^.]*//'`;;
7154 esac
7155 ;;
7156 esac
7157 case "$dflt" in
7158 .) echo "(Lost all hope -- silly guess then)"
7159 dflt='.uucp'
7160 ;;
7161 esac
7162 $rm -f hosts
7163 ;;
7164 *) dflt="$mydomain";;
7165 esac;;
7166esac
7167echo " "
7168rp="What is your domain name?"
7169. ./myread
7170tans="$ans"
7171case "$ans" in
7172'') ;;
7173.*) ;;
7174*) tans=".$tans";;
7175esac
7176mydomain="$tans"
7177
7178: translate upper to lower if necessary
7179case "$mydomain" in
7180*[A-Z]*)
7181 echo "(Normalizing case in your domain name)"
7182 mydomain=`echo $mydomain | ./tr '[A-Z]' '[a-z]'`
7183 ;;
7184esac
7185
7186: a little sanity check here
7187case "$phostname" in
7188'') ;;
7189*)
7190 case `$phostname | ./tr '[A-Z]' '[a-z]'` in
7191 $myhostname$mydomain|$myhostname) ;;
7192 *)
7193 case "$phostname" in
7194 sed*)
7195 echo "(That doesn't agree with your whoami.h file, by the way.)"
7196 ;;
7197 *)
7198 echo "(That doesn't agree with your $phostname command, by the way.)"
7199 ;;
7200 esac
7201 ;;
7202 esac
7203 ;;
7204esac
7205
7206$cat <<EOM
7207
7208I need to get your e-mail address in Internet format if possible, i.e.
7209something like user@host.domain. Please answer accurately since I have
7210no easy means to double check it. The default value provided below
7211is most probably close to reality but may not be valid from outside
7212your organization...
7213
7214EOM
7215cont=x
7216while test "$cont"; do
7217 case "$cf_email" in
7218 '') dflt="$cf_by@$myhostname$mydomain";;
7219 *) dflt="$cf_email";;
7220 esac
7221 rp='What is your e-mail address?'
7222 . ./myread
7223 cf_email="$ans"
7224 case "$cf_email" in
7225 *@*.*) cont='' ;;
7226 *)
7227 rp='Address does not look like an Internet one. Use it anyway?'
7228 case "$fastread" in
7229 yes) dflt=y ;;
7230 *) dflt=n ;;
7231 esac
7232 . ./myread
7233 case "$ans" in
7234 y*) cont='' ;;
7235 *) echo " " ;;
7236 esac
7237 ;;
7238 esac
7239done
7240
7241$cat <<EOM
7242
7243If you or somebody else will be maintaining perl at your site, please
7244fill in the correct e-mail address here so that they may be contacted
7245if necessary. Currently, the "perlbug" program included with perl
7246will send mail to this address in addition to perlbug@perl.org. You may
7247enter "none" for no administrator.
7248
7249EOM
7250case "$perladmin" in
7251'') dflt="$cf_email";;
7252*) dflt="$perladmin";;
7253esac
7254rp='Perl administrator e-mail address'
7255. ./myread
7256perladmin="$ans"
7257
7258: figure out how to guarantee perl startup
7259case "$startperl" in
7260'')
7261 case "$sharpbang" in
7262 *!)
7263 $cat <<EOH
7264
7265I can use the #! construct to start perl on your system. This will
7266make startup of perl scripts faster, but may cause problems if you
7267want to share those scripts and perl is not in a standard place
7268($binexp/perl) on all your platforms. The alternative is to force
7269a shell by starting the script with a single ':' character.
7270
7271EOH
7272 dflt="$binexp/perl"
7273 rp='What shall I put after the #! to start up perl ("none" to not use #!)?'
7274 . ./myread
7275 case "$ans" in
7276 none) startperl=": # use perl";;
7277 *) startperl="#!$ans"
7278 if $test 30 -lt `echo "$ans" | wc -c`; then
7279 $cat >&4 <<EOM
7280
7281WARNING: Some systems limit the #! command to 32 characters.
7282If you experience difficulty running Perl scripts with #!, try
7283installing Perl in a directory with a shorter pathname.
7284
7285EOM
7286 fi ;;
7287 esac
7288 ;;
7289 *) startperl=": # use perl"
7290 ;;
7291 esac
7292 ;;
7293esac
7294echo "I'll use $startperl to start perl scripts."
7295
7296: figure best path for perl in scripts
7297case "$perlpath" in
7298'')
7299 perlpath="$binexp/perl"
7300 case "$startperl" in
7301 *!*) ;;
7302 *)
7303 $cat <<EOH
7304
7305I will use the "eval 'exec'" idiom to start Perl on your system.
7306I can use the full path of your Perl binary for this purpose, but
7307doing so may cause problems if you want to share those scripts and
7308Perl is not always in a standard place ($binexp/perl).
7309
7310EOH
7311 dflt="$binexp/perl"
7312 rp="What path shall I use in \"eval 'exec'\"?"
7313 . ./myread
7314 perlpath="$ans"
7315 ;;
7316 esac
7317 ;;
7318esac
7319case "$startperl" in
7320*!*) ;;
7321*) echo "I'll use $perlpath in \"eval 'exec'\"" ;;
7322esac
7323
7324: determine where public executable scripts go
7325set scriptdir scriptdir
7326eval $prefixit
7327case "$scriptdir" in
7328'')
7329 dflt="$bin"
7330 : guess some guesses
7331 $test -d /usr/share/scripts && dflt=/usr/share/scripts
7332 $test -d /usr/share/bin && dflt=/usr/share/bin
7333 $test -d /usr/local/script && dflt=/usr/local/script
7334 $test -d /usr/local/scripts && dflt=/usr/local/scripts
7335 $test -d $prefixexp/script && dflt=$prefixexp/script
7336 set dflt
7337 eval $prefixup
7338 ;;
7339*) dflt="$scriptdir"
7340 ;;
7341esac
7342$cat <<EOM
7343
7344Some installations have a separate directory just for executable scripts so
7345that they can mount it across multiple architectures but keep the scripts in
7346one spot. You might, for example, have a subdirectory of /usr/share for this.
7347Or you might just lump your scripts in with all your other executables.
7348
7349EOM
7350fn=d~
7351rp='Where do you keep publicly executable scripts?'
7352. ./getfile
7353if $test "X$ansexp" != "X$scriptdirexp"; then
7354 installscript=''
7355fi
7356scriptdir="$ans"
7357scriptdirexp="$ansexp"
7358: Change installation prefix, if necessary.
7359if $test X"$prefix" != X"$installprefix"; then
7360 installscript=`echo $scriptdirexp | sed "s#^$prefix#$installprefix#"`
7361else
7362 installscript="$scriptdirexp"
7363fi
7364
7365: determine where add-on public executables go
7366case "$sitebin" in
7367'') dflt=$siteprefix/bin ;;
7368*) dflt=$sitebin ;;
7369esac
7370fn=d~
7371rp='Pathname where the add-on public executables should be installed?'
7372. ./getfile
7373sitebin="$ans"
7374sitebinexp="$ansexp"
7375: Change installation prefix, if necessary.
7376if $test X"$prefix" != X"$installprefix"; then
7377 installsitebin=`echo $sitebinexp | sed "s#^$prefix#$installprefix#"`
7378else
7379 installsitebin="$sitebinexp"
7380fi
7381
7382case "$useperlio" in
7383$define|true|[yY]*) dflt='y';;
7384*) dflt='n';;
7385esac
7386cat <<EOM
7387
7388Previous version of $package used the standard IO mechanisms as defined
7389in <stdio.h>. Versions 5.003_02 and later of perl allow alternate IO
7390mechanisms via a "PerlIO" abstraction, but the stdio mechanism is still
7391the default. This abstraction layer can use AT&T's sfio (if you already
7392have sfio installed) or regular stdio. Using PerlIO with sfio may cause
7393problems with some extension modules. Using PerlIO with stdio is safe,
7394but it is slower than plain stdio and therefore is not the default.
7395
7396If this doesn't make any sense to you, just accept the default '$dflt'.
7397EOM
7398rp='Use the experimental PerlIO abstraction layer?'
7399. ./myread
7400case "$ans" in
7401y|Y)
7402 val="$define"
7403 ;;
7404*)
7405 echo "Ok, doing things the stdio way"
7406 val="$undef"
7407 ;;
7408esac
7409set useperlio
7410eval $setvar
7411
7412case "$vendorprefix" in
7413'') d_vendorbin="$undef"
7414 vendorbin=''
7415 vendorbinexp=''
7416 ;;
7417*) d_vendorbin="$define"
7418 : determine where vendor-supplied executables go.
7419 case "$vendorbin" in
7420 '') dflt=$vendorprefix/bin ;;
7421 *) dflt="$vendorbin" ;;
7422 esac
7423 fn=d~+
7424 rp='Pathname for the vendor-supplied executables directory?'
7425 . ./getfile
7426 vendorbin="$ans"
7427 vendorbinexp="$ansexp"
7428 ;;
7429esac
7430: Change installation prefix, if necessary.
7431if $test X"$prefix" != X"$installprefix"; then
7432 installvendorbin=`echo $vendorbinexp | $sed "s#^$prefix#$installprefix#"`
7433else
7434 installvendorbin="$vendorbinexp"
7435fi
7436
7437: see if qgcvt exists
7438set qgcvt d_qgcvt
7439eval $inlibc
7440
7441echo " "
7442
7443if $test X"$d_longdbl" = X"$define"; then
7444
7445echo "Checking how to print long doubles..." >&4
7446
7447if $test X"$sPRIfldbl" = X -a X"$doublesize" = X"$longdblsize"; then
7448 $cat >try.c <<'EOCP'
7449#include <sys/types.h>
7450#include <stdio.h>
7451int main() {
7452 double d = 123.456;
7453 printf("%.3f\n", d);
7454}
7455EOCP
7456 set try
7457 if eval $compile; then
7458 yyy=`./try$exe_ext`
7459 case "$yyy" in
7460 123.456)
7461 sPRIfldbl='"f"'; sPRIgldbl='"g"'; sPRIeldbl='"e"';
7462 sPRIFUldbl='"F"'; sPRIGUldbl='"G"'; sPRIEUldbl='"E"';
7463 echo "We will use %f."
7464 ;;
7465 esac
7466 fi
7467fi
7468
7469if $test X"$sPRIfldbl" = X; then
7470 $cat >try.c <<'EOCP'
7471#include <sys/types.h>
7472#include <stdio.h>
7473int main() {
7474 long double d = 123.456;
7475 printf("%.3llf\n", d);
7476}
7477EOCP
7478 set try
7479 if eval $compile; then
7480 yyy=`./try$exe_ext`
7481 case "$yyy" in
7482 123.456)
7483 sPRIfldbl='"llf"'; sPRIgldbl='"llg"'; sPRIeldbl='"lle"';
7484 sPRIFUldbl='"llF"'; sPRIGUldbl='"llG"'; sPRIEUldbl='"llE"';
7485 echo "We will use %llf."
7486 ;;
7487 esac
7488 fi
7489fi
7490
7491if $test X"$sPRIfldbl" = X; then
7492 $cat >try.c <<'EOCP'
7493#include <sys/types.h>
7494#include <stdio.h>
7495int main() {
7496 long double d = 123.456;
7497 printf("%.3Lf\n", d);
7498}
7499EOCP
7500 set try
7501 if eval $compile; then
7502 yyy=`./try$exe_ext`
7503 case "$yyy" in
7504 123.456)
7505 sPRIfldbl='"Lf"'; sPRIgldbl='"Lg"'; sPRIeldbl='"Le"';
7506 sPRIFUldbl='"LF"'; sPRIGUldbl='"LG"'; sPRIEUldbl='"LE"';
7507 echo "We will use %Lf."
7508 ;;
7509 esac
7510 fi
7511fi
7512
7513if $test X"$sPRIfldbl" = X; then
7514 $cat >try.c <<'EOCP'
7515#include <sys/types.h>
7516#include <stdio.h>
7517int main() {
7518 long double d = 123.456;
7519 printf("%.3lf\n", d);
7520}
7521EOCP
7522 set try
7523 if eval $compile; then
7524 yyy=`./try$exe_ext`
7525 case "$yyy" in
7526 123.456)
7527 sPRIfldbl='"lf"'; sPRIgldbl='"lg"'; sPRIeldbl='"le"';
7528 sPRIFUldbl='"lF"'; sPRIGUldbl='"lG"'; sPRIEUldbl='"lE"';
7529 echo "We will use %lf."
7530 ;;
7531 esac
7532 fi
7533fi
7534
7535if $test X"$sPRIfldbl" = X; then
7536 echo "Cannot figure out how to print long doubles." >&4
7537else
7538 sSCNfldbl=$sPRIfldbl # expect consistency
7539fi
7540
7541$rm -f try try.*
7542
7543fi # d_longdbl
7544
7545case "$sPRIfldbl" in
7546'') d_PRIfldbl="$undef"; d_PRIgldbl="$undef"; d_PRIeldbl="$undef";
7547 d_PRIFUldbl="$undef"; d_PRIGUldbl="$undef"; d_PRIEUldbl="$undef";
7548 d_SCNfldbl="$undef";
7549 ;;
7550*) d_PRIfldbl="$define"; d_PRIgldbl="$define"; d_PRIeldbl="$define";
7551 d_PRIFUldbl="$define"; d_PRIGUldbl="$define"; d_PRIEUldbl="$define";
7552 d_SCNfldbl="$define";
7553 ;;
7554esac
7555
7556: Check how to convert floats to strings.
7557echo " "
7558echo "Checking for an efficient way to convert floats to strings."
7559echo " " > try.c
7560case "$uselongdouble" in
7561"$define") echo "#define USE_LONG_DOUBLE" >>try.c ;;
7562esac
7563case "$d_longdbl" in
7564"$define") echo "#define HAS_LONG_DOUBLE" >>try.c ;;
7565esac
7566case "$d_PRIgldbl" in
7567"$define") echo "#define HAS_PRIgldbl" >>try.c ;;
7568esac
7569$cat >>try.c <<EOP
7570#ifdef TRY_gconvert
7571#define Gconvert(x,n,t,b) gconvert((x),(n),(t),(b))
7572char *myname = "gconvert";
7573#endif
7574#ifdef TRY_gcvt
7575#define Gconvert(x,n,t,b) gcvt((x),(n),(b))
7576char *myname = "gcvt";
7577#endif
7578#ifdef TRY_qgcvt
7579#define Gconvert(x,n,t,b) qgcvt((x),(n),(b))
7580char *myname = "qgcvt";
7581#define DOUBLETYPE long double
7582#endif
7583#ifdef TRY_sprintf
7584#if defined(USE_LONG_DOUBLE) && defined(HAS_LONG_DOUBLE) && defined(HAS_PRIgldbl)
7585#define Gconvert(x,n,t,b) sprintf((b),"%.*"$sPRIgldbl,(n),(x))
7586#else
7587#define Gconvert(x,n,t,b) sprintf((b),"%.*g",(n),(x))
7588#endif
7589char *myname = "sprintf";
7590#endif
7591
7592#ifndef DOUBLETYPE
7593#if defined(USE_LONG_DOUBLE) && defined(HAS_LONG_DOUBLE)
7594#define DOUBLETYPE long double
7595#else
7596#define DOUBLETYPE double
7597#endif
7598#endif
7599
7600#include <stdio.h>
7601
7602#define I_STDLIB $i_stdlib
7603#ifdef I_STDLIB
7604#include <stdlib.h>
7605#endif
7606
7607int
7608checkit(expect, got)
7609char *expect;
7610char *got;
7611{
7612 if (strcmp(expect, got)) {
7613 printf("%s oddity: Expected %s, got %s\n",
7614 myname, expect, got);
7615 exit(1);
7616 }
7617}
7618
7619int main()
7620{
7621 char buf[64];
7622 buf[63] = '\0';
7623
7624 /* This must be 1st test on (which?) platform */
7625 /* Alan Burlison <AlanBurlsin@unn.unisys.com> */
7626 Gconvert((DOUBLETYPE)0.1, 8, 0, buf);
7627 checkit("0.1", buf);
7628
7629 Gconvert((DOUBLETYPE)1.0, 8, 0, buf);
7630 checkit("1", buf);
7631
7632 Gconvert((DOUBLETYPE)1.1, 8, 0, buf);
7633 checkit("1.1", buf);
7634
7635 Gconvert((DOUBLETYPE)1.01, 8, 0, buf);
7636 checkit("1.01", buf);
7637
7638 Gconvert((DOUBLETYPE)1.001, 8, 0, buf);
7639 checkit("1.001", buf);
7640
7641 Gconvert((DOUBLETYPE)1.0001, 8, 0, buf);
7642 checkit("1.0001", buf);
7643
7644 Gconvert((DOUBLETYPE)1.00001, 8, 0, buf);
7645 checkit("1.00001", buf);
7646
7647 Gconvert((DOUBLETYPE)1.000001, 8, 0, buf);
7648 checkit("1.000001", buf);
7649
7650 Gconvert((DOUBLETYPE)0.0, 8, 0, buf);
7651 checkit("0", buf);
7652
7653 Gconvert((DOUBLETYPE)-1.0, 8, 0, buf);
7654 checkit("-1", buf);
7655
7656 /* Some Linux gcvt's give 1.e+5 here. */
7657 Gconvert((DOUBLETYPE)100000.0, 8, 0, buf);
7658 checkit("100000", buf);
7659
7660 /* Some Linux gcvt's give -1.e+5 here. */
7661 Gconvert((DOUBLETYPE)-100000.0, 8, 0, buf);
7662 checkit("-100000", buf);
7663
7664 Gconvert((DOUBLETYPE)123.456, 8, 0, buf);
7665 checkit("123.456", buf);
7666
7667 exit(0);
7668}
7669EOP
7670case "$d_Gconvert" in
7671gconvert*) xxx_list='gconvert gcvt sprintf' ;;
7672gcvt*) xxx_list='gcvt gconvert sprintf' ;;
7673sprintf*) xxx_list='sprintf gconvert gcvt' ;;
7674*) xxx_list='gconvert gcvt sprintf' ;;
7675esac
7676
7677case "$d_longdbl$uselongdouble$d_PRIgldbl" in
7678"$define$define$define")
7679 # for long doubles prefer first qgcvt, then sprintf
7680 xxx_list="`echo $xxx_list|sed s/sprintf//`"
7681 xxx_list="sprintf $xxx_list"
7682 case "$d_qgcvt" in
7683 "$define") xxx_list="qgcvt $xxx_list" ;;
7684 esac
7685 ;;
7686esac
7687
7688for xxx_convert in $xxx_list; do
7689 echo "Trying $xxx_convert..."
7690 $rm -f try try$_o
7691 set try -DTRY_$xxx_convert
7692 if eval $compile; then
7693 echo "$xxx_convert() found." >&4
7694 if ./try; then
7695 echo "I'll use $xxx_convert to convert floats into a string." >&4
7696 break;
7697 else
7698 echo "...But $xxx_convert didn't work as I expected."
7699 fi
7700 else
7701 echo "$xxx_convert NOT found." >&4
7702 fi
7703done
7704
7705case "$xxx_convert" in
7706gconvert) d_Gconvert='gconvert((x),(n),(t),(b))' ;;
7707gcvt) d_Gconvert='gcvt((x),(n),(b))' ;;
7708qgcvt) d_Gconvert='qgcvt((x),(n),(b))' ;;
7709*) case "$uselongdouble$d_longdbl$d_PRIgldbl" in
7710 "$define$define$define")
7711 d_Gconvert="sprintf((b),\"%.*\"$sPRIgldbl,(n),(x))" ;;
7712 *) d_Gconvert='sprintf((b),"%.*g",(n),(x))' ;;
7713 esac
7714 ;;
7715esac
7716
7717: Initialize h_fcntl
7718h_fcntl=false
7719
7720: Initialize h_sysfile
7721h_sysfile=false
7722
7723: access call always available on UNIX
7724set access d_access
7725eval $inlibc
7726
7727: locate the flags for 'access()'
7728case "$d_access" in
7729"$define")
7730 echo " "
7731 $cat >access.c <<'EOCP'
7732#include <sys/types.h>
7733#ifdef I_FCNTL
7734#include <fcntl.h>
7735#endif
7736#ifdef I_SYS_FILE
7737#include <sys/file.h>
7738#endif
7739#ifdef I_UNISTD
7740#include <unistd.h>
7741#endif
7742int main() {
7743 exit(R_OK);
7744}
7745EOCP
7746 : check sys/file.h first, no particular reason here
7747 if $test `./findhdr sys/file.h` && \
7748 $cc $cppflags -DI_SYS_FILE -o access access.c >/dev/null 2>&1 ; then
7749 h_sysfile=true;
7750 echo "<sys/file.h> defines the *_OK access constants." >&4
7751 elif $test `./findhdr fcntl.h` && \
7752 $cc $cppflags -DI_FCNTL -o access access.c >/dev/null 2>&1 ; then
7753 h_fcntl=true;
7754 echo "<fcntl.h> defines the *_OK access constants." >&4
7755 elif $test `./findhdr unistd.h` && \
7756 $cc $cppflags -DI_UNISTD -o access access.c >/dev/null 2>&1 ; then
7757 echo "<unistd.h> defines the *_OK access constants." >&4
7758 else
7759 echo "I can't find the four *_OK access constants--I'll use mine." >&4
7760 fi
7761 ;;
7762esac
7763$rm -f access*
7764
7765: see if accessx exists
7766set accessx d_accessx
7767eval $inlibc
7768
7769: see if alarm exists
7770set alarm d_alarm
7771eval $inlibc
7772
7773: see if atolf exists
7774set atolf d_atolf
7775eval $inlibc
7776
7777: see if atoll exists
7778set atoll d_atoll
7779eval $inlibc
7780
7781: Look for GNU-cc style attribute checking
7782echo " "
7783echo "Checking whether your compiler can handle __attribute__ ..." >&4
7784$cat >attrib.c <<'EOCP'
7785#include <stdio.h>
7786void croak (char* pat,...) __attribute__((format(printf,1,2),noreturn));
7787EOCP
7788if $cc $ccflags -c attrib.c >attrib.out 2>&1 ; then
7789 if $contains 'warning' attrib.out >/dev/null 2>&1; then
7790 echo "Your C compiler doesn't fully support __attribute__."
7791 val="$undef"
7792 else
7793 echo "Your C compiler supports __attribute__."
7794 val="$define"
7795 fi
7796else
7797 echo "Your C compiler doesn't seem to understand __attribute__ at all."
7798 val="$undef"
7799fi
7800set d_attribut
7801eval $setvar
7802$rm -f attrib*
7803
7804: see if bcmp exists
7805set bcmp d_bcmp
7806eval $inlibc
7807
7808: see if bcopy exists
7809set bcopy d_bcopy
7810eval $inlibc
7811
7812: see if this is a unistd.h system
7813set unistd.h i_unistd
7814eval $inhdr
7815
7816: see if getpgrp exists
7817set getpgrp d_getpgrp
7818eval $inlibc
7819
7820case "$d_getpgrp" in
7821"$define")
7822 echo " "
7823 echo "Checking to see which flavor of getpgrp is in use..."
7824 $cat >set.c <<EOP
7825#$i_unistd I_UNISTD
7826#include <sys/types.h>
7827#ifdef I_UNISTD
7828# include <unistd.h>
7829#endif
7830int main()
7831{
7832 if (getuid() == 0) {
7833 printf("(I see you are running Configure as super-user...)\n");
7834 setuid(1);
7835 }
7836#ifdef TRY_BSD_PGRP
7837 if (getpgrp(1) == 0)
7838 exit(0);
7839#else
7840 if (getpgrp() > 0)
7841 exit(0);
7842#endif
7843 exit(1);
7844}
7845EOP
7846 if $cc -DTRY_BSD_PGRP $ccflags $ldflags -o set set.c $libs >/dev/null 2>&1 && ./set; then
7847 echo "You have to use getpgrp(pid) instead of getpgrp()." >&4
7848 val="$define"
7849 elif $cc $ccflags $ldflags -o set set.c $libs >/dev/null 2>&1 && ./set; then
7850 echo "You have to use getpgrp() instead of getpgrp(pid)." >&4
7851 val="$undef"
7852 else
7853 echo "I can't seem to compile and run the test program."
7854 if ./usg; then
7855 xxx="a USG one, i.e. you use getpgrp()."
7856 else
7857 # SVR4 systems can appear rather BSD-ish.
7858 case "$i_unistd" in
7859 $undef)
7860 xxx="a BSD one, i.e. you use getpgrp(pid)."
7861 val="$define"
7862 ;;
7863 $define)
7864 xxx="probably a USG one, i.e. you use getpgrp()."
7865 val="$undef"
7866 ;;
7867 esac
7868 fi
7869 echo "Assuming your getpgrp is $xxx" >&4
7870 fi
7871 ;;
7872*) val="$undef";;
7873esac
7874set d_bsdgetpgrp
7875eval $setvar
7876$rm -f set set.c
7877
7878: see if setpgrp exists
7879set setpgrp d_setpgrp
7880eval $inlibc
7881
7882case "$d_setpgrp" in
7883"$define")
7884 echo " "
7885 echo "Checking to see which flavor of setpgrp is in use..."
7886 $cat >set.c <<EOP
7887#$i_unistd I_UNISTD
7888#include <sys/types.h>
7889#ifdef I_UNISTD
7890# include <unistd.h>
7891#endif
7892int main()
7893{
7894 if (getuid() == 0) {
7895 printf("(I see you are running Configure as super-user...)\n");
7896 setuid(1);
7897 }
7898#ifdef TRY_BSD_PGRP
7899 if (-1 == setpgrp(1, 1))
7900 exit(0);
7901#else
7902 if (setpgrp() != -1)
7903 exit(0);
7904#endif
7905 exit(1);
7906}
7907EOP
7908 if $cc -DTRY_BSD_PGRP $ccflags $ldflags -o set set.c $libs >/dev/null 2>&1 && ./set; then
7909 echo 'You have to use setpgrp(pid,pgrp) instead of setpgrp().' >&4
7910 val="$define"
7911 elif $cc $ccflags $ldflags -o set set.c $libs >/dev/null 2>&1 && ./set; then
7912 echo 'You have to use setpgrp() instead of setpgrp(pid,pgrp).' >&4
7913 val="$undef"
7914 else
7915 echo "(I can't seem to compile and run the test program.)"
7916 if ./usg; then
7917 xxx="a USG one, i.e. you use setpgrp()."
7918 else
7919 # SVR4 systems can appear rather BSD-ish.
7920 case "$i_unistd" in
7921 $undef)
7922 xxx="a BSD one, i.e. you use setpgrp(pid,pgrp)."
7923 val="$define"
7924 ;;
7925 $define)
7926 xxx="probably a USG one, i.e. you use setpgrp()."
7927 val="$undef"
7928 ;;
7929 esac
7930 fi
7931 echo "Assuming your setpgrp is $xxx" >&4
7932 fi
7933 ;;
7934*) val="$undef";;
7935esac
7936set d_bsdsetpgrp
7937eval $setvar
7938$rm -f set set.c
7939: see if bzero exists
7940set bzero d_bzero
7941eval $inlibc
7942
7943: see if signal is declared as pointer to function returning int or void
7944echo " "
7945xxx=`./findhdr signal.h`
7946$test "$xxx" && $cppstdin $cppminus $cppflags < $xxx >$$.tmp 2>/dev/null
7947if $contains 'int.*\*[ ]*signal' $$.tmp >/dev/null 2>&1 ; then
7948 echo "You have int (*signal())() instead of void." >&4
7949 val="$undef"
7950elif $contains 'void.*\*[ ]*signal' $$.tmp >/dev/null 2>&1 ; then
7951 echo "You have void (*signal())()." >&4
7952 val="$define"
7953elif $contains 'extern[ ]*[(\*]*signal' $$.tmp >/dev/null 2>&1 ; then
7954 echo "You have int (*signal())() instead of void." >&4
7955 val="$undef"
7956elif $contains 'void.*\*.*sig' $$.tmp >/dev/null 2>&1 ; then
7957 echo "You have void (*signal())()." >&4
7958 val="$define"
7959else
7960 case "$d_voidsig" in
7961 '')
7962 echo "I can't determine whether signal handler returns void or int..." >&4
7963 dflt=void
7964 rp="What type does your signal handler return?"
7965 . ./myread
7966 case "$ans" in
7967 v*) val="$define";;
7968 *) val="$undef";;
7969 esac;;
7970 "$define")
7971 echo "As you already told me, signal handler returns void." >&4
7972 val="$define"
7973 ;;
7974 *) echo "As you already told me, signal handler returns int." >&4
7975 val="$undef"
7976 ;;
7977 esac
7978fi
7979set d_voidsig
7980eval $setvar
7981case "$d_voidsig" in
7982"$define") signal_t="void";;
7983*) signal_t="int";;
7984esac
7985$rm -f $$.tmp
7986
7987: check for ability to cast large floats to 32-bit ints.
7988echo " "
7989echo 'Checking whether your C compiler can cast large floats to int32.' >&4
7990if $test "$intsize" -ge 4; then
7991 xxx=int
7992else
7993 xxx=long
7994fi
7995$cat >try.c <<EOCP
7996#include <stdio.h>
7997#include <sys/types.h>
7998#include <signal.h>
7999$signal_t blech(s) int s; { exit(3); }
8000int main()
8001{
8002 $xxx i32;
8003 double f, g;
8004 int result = 0;
8005 char str[16];
8006 signal(SIGFPE, blech);
8007
8008 /* Don't let compiler optimize the test away. Store the number
8009 in a writable string for gcc to pass to sscanf under HP/UX.
8010 */
8011 sprintf(str, "2147483647");
8012 sscanf(str, "%lf", &f); /* f = (double) 0x7fffffff; */
8013 g = 10 * f;
8014 i32 = ($xxx) g;
8015
8016 /* x86 processors will probably give 0x8000 0000, which is a
8017 sign change. We don't want that. We want to mimic SPARC
8018 behavior here, which is to preserve the sign and give
8019 back 0x7fff ffff.
8020 */
8021 if (i32 != ($xxx) f)
8022 result |= 1;
8023 exit(result);
8024}
8025EOCP
8026set try
8027if eval $compile_ok; then
8028 ./try
8029 yyy=$?
8030else
8031 echo "(I can't seem to compile the test program--assuming it can't)"
8032 yyy=1
8033fi
8034case "$yyy" in
80350) val="$define"
8036 echo "Yup, it can."
8037 ;;
8038*) val="$undef"
8039 echo "Nope, it can't."
8040 ;;
8041esac
8042set d_casti32
8043eval $setvar
8044$rm -f try try.*
8045
8046: check for ability to cast negative floats to unsigned
8047echo " "
8048echo 'Checking whether your C compiler can cast negative float to unsigned.' >&4
8049$cat >try.c <<EOCP
8050#include <stdio.h>
8051#include <sys/types.h>
8052#include <signal.h>
8053$signal_t blech(s) int s; { exit(7); }
8054$signal_t blech_in_list(s) int s; { exit(4); }
8055unsigned long dummy_long(p) unsigned long p; { return p; }
8056unsigned int dummy_int(p) unsigned int p; { return p; }
8057unsigned short dummy_short(p) unsigned short p; { return p; }
8058int main()
8059{
8060 double f;
8061 unsigned long along;
8062 unsigned int aint;
8063 unsigned short ashort;
8064 int result = 0;
8065 char str[16];
8066
8067 /* Frustrate gcc-2.7.2's optimizer which failed this test with
8068 a direct f = -123. assignment. gcc-2.8.0 reportedly
8069 optimized the whole file away
8070 */
8071 /* Store the number in a writable string for gcc to pass to
8072 sscanf under HP/UX.
8073 */
8074 sprintf(str, "-123");
8075 sscanf(str, "%lf", &f); /* f = -123.; */
8076
8077 signal(SIGFPE, blech);
8078 along = (unsigned long)f;
8079 aint = (unsigned int)f;
8080 ashort = (unsigned short)f;
8081 if (along != (unsigned long)-123)
8082 result |= 1;
8083 if (aint != (unsigned int)-123)
8084 result |= 1;
8085 if (ashort != (unsigned short)-123)
8086 result |= 1;
8087 sprintf(str, "1073741824.");
8088 sscanf(str, "%lf", &f); /* f = (double)0x40000000; */
8089 f = f + f;
8090 along = 0;
8091 along = (unsigned long)f;
8092 if (along != 0x80000000)
8093 result |= 2;
8094 f -= 1.;
8095 along = 0;
8096 along = (unsigned long)f;
8097 if (along != 0x7fffffff)
8098 result |= 1;
8099 f += 2.;
8100 along = 0;
8101 along = (unsigned long)f;
8102 if (along != 0x80000001)
8103 result |= 2;
8104 if (result)
8105 exit(result);
8106 signal(SIGFPE, blech_in_list);
8107 sprintf(str, "123.");
8108 sscanf(str, "%lf", &f); /* f = 123.; */
8109 along = dummy_long((unsigned long)f);
8110 aint = dummy_int((unsigned int)f);
8111 ashort = dummy_short((unsigned short)f);
8112 if (along != (unsigned long)123)
8113 result |= 4;
8114 if (aint != (unsigned int)123)
8115 result |= 4;
8116 if (ashort != (unsigned short)123)
8117 result |= 4;
8118 exit(result);
8119
8120}
8121EOCP
8122set try
8123if eval $compile_ok; then
8124 ./try
8125 castflags=$?
8126else
8127 echo "(I can't seem to compile the test program--assuming it can't)"
8128 castflags=7
8129fi
8130case "$castflags" in
81310) val="$define"
8132 echo "Yup, it can."
8133 ;;
8134*) val="$undef"
8135 echo "Nope, it can't."
8136 ;;
8137esac
8138set d_castneg
8139eval $setvar
8140$rm -f try.*
8141
8142: see if vprintf exists
8143echo " "
8144if set vprintf val -f d_vprintf; eval $csym; $val; then
8145 echo 'vprintf() found.' >&4
8146 val="$define"
8147 $cat >vprintf.c <<'EOF'
8148#include <varargs.h>
8149
8150int main() { xxx("foo"); }
8151
8152xxx(va_alist)
8153va_dcl
8154{
8155 va_list args;
8156 char buf[10];
8157
8158 va_start(args);
8159 exit((unsigned long)vsprintf(buf,"%s",args) > 10L);
8160}
8161EOF
8162 set vprintf
8163 if eval $compile && ./vprintf; then
8164 echo "Your vsprintf() returns (int)." >&4
8165 val2="$undef"
8166 else
8167 echo "Your vsprintf() returns (char*)." >&4
8168 val2="$define"
8169 fi
8170else
8171 echo 'vprintf() NOT found.' >&4
8172 val="$undef"
8173 val2="$undef"
8174fi
8175set d_vprintf
8176eval $setvar
8177val=$val2
8178set d_charvspr
8179eval $setvar
8180
8181: see if chown exists
8182set chown d_chown
8183eval $inlibc
8184
8185: see if chroot exists
8186set chroot d_chroot
8187eval $inlibc
8188
8189: see if chsize exists
8190set chsize d_chsize
8191eval $inlibc
8192
8193: check for const keyword
8194echo " "
8195echo 'Checking to see if your C compiler knows about "const"...' >&4
8196$cat >const.c <<'EOCP'
8197typedef struct spug { int drokk; } spug;
8198int main()
8199{
8200 const char *foo;
8201 const spug y;
8202}
8203EOCP
8204if $cc -c $ccflags const.c >/dev/null 2>&1 ; then
8205 val="$define"
8206 echo "Yup, it does."
8207else
8208 val="$undef"
8209 echo "Nope, it doesn't."
8210fi
8211set d_const
8212eval $setvar
8213
8214: see if crypt exists
8215echo " "
8216if set crypt val -f d_crypt; eval $csym; $val; then
8217 echo 'crypt() found.' >&4
8218 val="$define"
8219 cryptlib=''
8220else
8221 cryptlib=`./loc Slibcrypt$_a "" $xlibpth`
8222 if $test -z "$cryptlib"; then
8223 cryptlib=`./loc Mlibcrypt$_a "" $xlibpth`
8224 else
8225 cryptlib=-lcrypt
8226 fi
8227 if $test -z "$cryptlib"; then
8228 cryptlib=`./loc Llibcrypt$_a "" $xlibpth`
8229 else
8230 cryptlib=-lcrypt
8231 fi
8232 if $test -z "$cryptlib"; then
8233 cryptlib=`./loc libcrypt$_a "" $libpth`
8234 else
8235 cryptlib=-lcrypt
8236 fi
8237 if $test -z "$cryptlib"; then
8238 echo 'crypt() NOT found.' >&4
8239 val="$undef"
8240 else
8241 val="$define"
8242 fi
8243fi
8244set d_crypt
8245eval $setvar
8246
8247: get csh whereabouts
8248case "$csh" in
8249'csh') val="$undef" ;;
8250*) val="$define" ;;
8251esac
8252set d_csh
8253eval $setvar
8254: Respect a hint or command line value for full_csh.
8255case "$full_csh" in
8256'') full_csh=$csh ;;
8257esac
8258
8259: see if cuserid exists
8260set cuserid d_cuserid
8261eval $inlibc
8262
8263: see if this is a limits.h system
8264set limits.h i_limits
8265eval $inhdr
8266
8267: see if this is a float.h system
8268set float.h i_float
8269eval $inhdr
8270
8271: See if number of significant digits in a double precision number is known
8272echo " "
8273$cat >dbl_dig.c <<EOM
8274#$i_limits I_LIMITS
8275#$i_float I_FLOAT
8276#ifdef I_LIMITS
8277#include <limits.h>
8278#endif
8279#ifdef I_FLOAT
8280#include <float.h>
8281#endif
8282#ifdef DBL_DIG
8283printf("Contains DBL_DIG");
8284#endif
8285EOM
8286$cppstdin $cppflags $cppminus < dbl_dig.c >dbl_dig.E 2>/dev/null
8287if $contains 'DBL_DIG' dbl_dig.E >/dev/null 2>&1; then
8288 echo "DBL_DIG found." >&4
8289 val="$define"
8290else
8291 echo "DBL_DIG NOT found." >&4
8292 val="$undef"
8293fi
8294$rm -f dbl_dig.?
8295set d_dbl_dig
8296eval $setvar
8297
8298: see if difftime exists
8299set difftime d_difftime
8300eval $inlibc
8301
8302: see if this is a dirent system
8303echo " "
8304if xinc=`./findhdr dirent.h`; $test "$xinc"; then
8305 val="$define"
8306 echo "<dirent.h> found." >&4
8307else
8308 val="$undef"
8309 if xinc=`./findhdr sys/dir.h`; $test "$xinc"; then
8310 echo "<sys/dir.h> found." >&4
8311 echo " "
8312 else
8313 xinc=`./findhdr sys/ndir.h`
8314 fi
8315 echo "<dirent.h> NOT found." >&4
8316fi
8317set i_dirent
8318eval $setvar
8319
8320: Look for type of directory structure.
8321echo " "
8322$cppstdin $cppflags $cppminus < "$xinc" > try.c
8323
8324case "$direntrytype" in
8325''|' ')
8326 case "$i_dirent" in
8327 $define) guess1='struct dirent' ;;
8328 *) guess1='struct direct' ;;
8329 esac
8330 ;;
8331*) guess1="$direntrytype"
8332 ;;
8333esac
8334
8335case "$guess1" in
8336'struct dirent') guess2='struct direct' ;;
8337*) guess2='struct dirent' ;;
8338esac
8339
8340if $contains "$guess1" try.c >/dev/null 2>&1; then
8341 direntrytype="$guess1"
8342 echo "Your directory entries are $direntrytype." >&4
8343elif $contains "$guess2" try.c >/dev/null 2>&1; then
8344 direntrytype="$guess2"
8345 echo "Your directory entries seem to be $direntrytype." >&4
8346else
8347 echo "I don't recognize your system's directory entries." >&4
8348 rp="What type is used for directory entries on this system?"
8349 dflt="$guess1"
8350 . ./myread
8351 direntrytype="$ans"
8352fi
8353$rm -f try.c
8354
8355
8356: see if the directory entry stores field length
8357echo " "
8358$cppstdin $cppflags $cppminus < "$xinc" > try.c
8359if $contains 'd_namlen' try.c >/dev/null 2>&1; then
8360 echo "Good, your directory entry keeps length information in d_namlen." >&4
8361 val="$define"
8362else
8363 echo "Your directory entry does not know about the d_namlen field." >&4
8364 val="$undef"
8365fi
8366set d_dirnamlen
8367eval $setvar
8368$rm -f try.c
8369
8370: see if dlerror exists
8371xxx_runnm="$runnm"
8372runnm=false
8373set dlerror d_dlerror
8374eval $inlibc
8375runnm="$xxx_runnm"
8376
8377: see if dlfcn is available
8378set dlfcn.h i_dlfcn
8379eval $inhdr
8380
8381case "$usedl" in
8382$define|y|true)
8383 $cat << EOM
8384
8385On a few systems, the dynamically loaded modules that perl generates and uses
8386will need a different extension than shared libs. The default will probably
8387be appropriate.
8388
8389EOM
8390 case "$dlext" in
8391 '') dflt="$so" ;;
8392 *) dflt="$dlext" ;;
8393 esac
8394 rp='What is the extension of dynamically loaded modules'
8395 . ./myread
8396 dlext="$ans"
8397 ;;
8398*)
8399 dlext="none"
8400 ;;
8401esac
8402
8403: Check if dlsym need a leading underscore
8404echo " "
8405val="$undef"
8406
8407case "$dlsrc" in
8408dl_dlopen.xs)
8409 echo "Checking whether your dlsym() needs a leading underscore ..." >&4
8410 $cat >dyna.c <<'EOM'
8411fred () { }
8412EOM
8413
8414$cat >fred.c<<EOM
8415
8416#include <stdio.h>
8417#$i_dlfcn I_DLFCN
8418#ifdef I_DLFCN
8419#include <dlfcn.h> /* the dynamic linker include file for Sunos/Solaris */
8420#else
8421#include <sys/types.h>
8422#include <nlist.h>
8423#include <link.h>
8424#endif
8425
8426extern int fred() ;
8427
8428int main()
8429{
8430 void * handle ;
8431 void * symbol ;
8432#ifndef RTLD_LAZY
8433 int mode = 1 ;
8434#else
8435 int mode = RTLD_LAZY ;
8436#endif
8437 handle = dlopen("./dyna.$dlext", mode) ;
8438 if (handle == NULL) {
8439 printf ("1\n") ;
8440 fflush (stdout) ;
8441 exit(0);
8442 }
8443 symbol = dlsym(handle, "fred") ;
8444 if (symbol == NULL) {
8445 /* try putting a leading underscore */
8446 symbol = dlsym(handle, "_fred") ;
8447 if (symbol == NULL) {
8448 printf ("2\n") ;
8449 fflush (stdout) ;
8450 exit(0);
8451 }
8452 printf ("3\n") ;
8453 }
8454 else
8455 printf ("4\n") ;
8456 fflush (stdout) ;
8457 exit(0);
8458}
8459EOM
8460 : Call the object file tmp-dyna.o in case dlext=o.
8461 if $cc $ccflags $cccdlflags -c dyna.c > /dev/null 2>&1 &&
8462 mv dyna${_o} tmp-dyna${_o} > /dev/null 2>&1 &&
8463 $ld $lddlflags -o dyna.$dlext tmp-dyna${_o} > /dev/null 2>&1 &&
8464 $cc $ccflags -o fred $ldflags $cccdlflags $ccdlflags fred.c $libs > /dev/null 2>&1; then
8465 xxx=`./fred`
8466 case $xxx in
8467 1) echo "Test program failed using dlopen." >&4
8468 echo "Perhaps you should not use dynamic loading." >&4;;
8469 2) echo "Test program failed using dlsym." >&4
8470 echo "Perhaps you should not use dynamic loading." >&4;;
8471 3) echo "dlsym needs a leading underscore" >&4
8472 val="$define" ;;
8473 4) echo "dlsym doesn't need a leading underscore." >&4;;
8474 esac
8475 else
8476 echo "I can't compile and run the test program." >&4
8477 echo "I'm guessing that dlsym doesn't need a leading underscore." >&4
8478 fi
8479 ;;
8480esac
8481
8482$rm -f fred fred.? dyna.$dlext dyna.? tmp-dyna.?
8483
8484set d_dlsymun
8485eval $setvar
8486
8487hasproto='varname=$1; func=$2; shift; shift;
8488while $test $# -ge 2; do
8489 case "$1" in
8490 $define) echo "#include <$2>";;
8491 esac ;
8492 shift 2;
8493done > try.c;
8494$cppstdin $cppflags $cppminus < try.c > tryout.c 2>/dev/null;
8495if $contains "$func.*(" tryout.c >/dev/null 2>&1; then
8496 echo "$func() prototype found.";
8497 val="$define";
8498else
8499 echo "$func() prototype NOT found.";
8500 val="$undef";
8501fi;
8502set $varname;
8503eval $setvar;
8504$rm -f try.c tryout.c'
8505
8506: see if prototype for drand48 is available
8507echo " "
8508set d_drand48proto drand48 $i_stdlib stdlib.h $i_unistd unistd.h
8509eval $hasproto
8510
8511: see if dup2 exists
8512set dup2 d_dup2
8513eval $inlibc
8514
8515: see if eaccess exists
8516set eaccess d_eaccess
8517eval $inlibc
8518
8519: see if endgrent exists
8520set endgrent d_endgrent
8521eval $inlibc
8522
8523: see if endhostent exists
8524set endhostent d_endhent
8525eval $inlibc
8526
8527: see if endnetent exists
8528set endnetent d_endnent
8529eval $inlibc
8530
8531: see if endprotoent exists
8532set endprotoent d_endpent
8533eval $inlibc
8534
8535: see if endpwent exists
8536set endpwent d_endpwent
8537eval $inlibc
8538
8539: see if endservent exists
8540set endservent d_endsent
8541eval $inlibc
8542
8543: Locate the flags for 'open()'
8544echo " "
8545$cat >open3.c <<'EOCP'
8546#include <sys/types.h>
8547#ifdef I_FCNTL
8548#include <fcntl.h>
8549#endif
8550#ifdef I_SYS_FILE
8551#include <sys/file.h>
8552#endif
8553int main() {
8554 if(O_RDONLY);
8555#ifdef O_TRUNC
8556 exit(0);
8557#else
8558 exit(1);
8559#endif
8560}
8561EOCP
8562: check sys/file.h first to get FREAD on Sun
8563if $test `./findhdr sys/file.h` && \
8564 set open3 -DI_SYS_FILE && eval $compile; then
8565 h_sysfile=true;
8566 echo "<sys/file.h> defines the O_* constants..." >&4
8567 if ./open3; then
8568 echo "and you have the 3 argument form of open()." >&4
8569 val="$define"
8570 else
8571 echo "but not the 3 argument form of open(). Oh, well." >&4
8572 val="$undef"
8573 fi
8574elif $test `./findhdr fcntl.h` && \
8575 set open3 -DI_FCNTL && eval $compile; then
8576 h_fcntl=true;
8577 echo "<fcntl.h> defines the O_* constants..." >&4
8578 if ./open3; then
8579 echo "and you have the 3 argument form of open()." >&4
8580 val="$define"
8581 else
8582 echo "but not the 3 argument form of open(). Oh, well." >&4
8583 val="$undef"
8584 fi
8585else
8586 val="$undef"
8587 echo "I can't find the O_* constant definitions! You got problems." >&4
8588fi
8589set d_open3
8590eval $setvar
8591$rm -f open3*
8592
8593: see which of string.h or strings.h is needed
8594echo " "
8595strings=`./findhdr string.h`
8596if $test "$strings" && $test -r "$strings"; then
8597 echo "Using <string.h> instead of <strings.h>." >&4
8598 val="$define"
8599else
8600 val="$undef"
8601 strings=`./findhdr strings.h`
8602 if $test "$strings" && $test -r "$strings"; then
8603 echo "Using <strings.h> instead of <string.h>." >&4
8604 else
8605 echo "No string header found -- You'll surely have problems." >&4
8606 fi
8607fi
8608set i_string
8609eval $setvar
8610case "$i_string" in
8611"$undef") strings=`./findhdr strings.h`;;
8612*) strings=`./findhdr string.h`;;
8613esac
8614
8615: check for non-blocking I/O stuff
8616case "$h_sysfile" in
8617true) echo "#include <sys/file.h>" > head.c;;
8618*)
8619 case "$h_fcntl" in
8620 true) echo "#include <fcntl.h>" > head.c;;
8621 *) echo "#include <sys/fcntl.h>" > head.c;;
8622 esac
8623 ;;
8624esac
8625echo " "
8626echo "Figuring out the flag used by open() for non-blocking I/O..." >&4
8627case "$o_nonblock" in
8628'')
8629 $cat head.c > try.c
8630 $cat >>try.c <<'EOCP'
8631#include <stdio.h>
8632int main() {
8633#ifdef O_NONBLOCK
8634 printf("O_NONBLOCK\n");
8635 exit(0);
8636#endif
8637#ifdef O_NDELAY
8638 printf("O_NDELAY\n");
8639 exit(0);
8640#endif
8641#ifdef FNDELAY
8642 printf("FNDELAY\n");
8643 exit(0);
8644#endif
8645 exit(0);
8646}
8647EOCP
8648 set try
8649 if eval $compile_ok; then
8650 o_nonblock=`./try`
8651 case "$o_nonblock" in
8652 '') echo "I can't figure it out, assuming O_NONBLOCK will do.";;
8653 *) echo "Seems like we can use $o_nonblock.";;
8654 esac
8655 else
8656 echo "(I can't compile the test program; pray O_NONBLOCK is right!)"
8657 fi
8658 ;;
8659*) echo "Using $hint value $o_nonblock.";;
8660esac
8661$rm -f try try.* .out core
8662
8663echo " "
8664echo "Let's see what value errno gets from read() on a $o_nonblock file..." >&4
8665case "$eagain" in
8666'')
8667 $cat head.c > try.c
8668 $cat >>try.c <<EOCP
8669#include <errno.h>
8670#include <sys/types.h>
8671#include <signal.h>
8672#include <stdio.h>
8673#define MY_O_NONBLOCK $o_nonblock
8674#ifndef errno /* XXX need better Configure test */
8675extern int errno;
8676#endif
8677#$i_unistd I_UNISTD
8678#ifdef I_UNISTD
8679#include <unistd.h>
8680#endif
8681#$i_string I_STRING
8682#ifdef I_STRING
8683#include <string.h>
8684#else
8685#include <strings.h>
8686#endif
8687$signal_t blech(x) int x; { exit(3); }
8688EOCP
8689 $cat >> try.c <<'EOCP'
8690int main()
8691{
8692 int pd[2];
8693 int pu[2];
8694 char buf[1];
8695 char string[100];
8696
8697 pipe(pd); /* Down: child -> parent */
8698 pipe(pu); /* Up: parent -> child */
8699 if (0 != fork()) {
8700 int ret;
8701 close(pd[1]); /* Parent reads from pd[0] */
8702 close(pu[0]); /* Parent writes (blocking) to pu[1] */
8703 if (-1 == fcntl(pd[0], F_SETFL, MY_O_NONBLOCK))
8704 exit(1);
8705 signal(SIGALRM, blech);
8706 alarm(5);
8707 if ((ret = read(pd[0], buf, 1)) > 0) /* Nothing to read! */
8708 exit(2);
8709 sprintf(string, "%d\n", ret);
8710 write(2, string, strlen(string));
8711 alarm(0);
8712#ifdef EAGAIN
8713 if (errno == EAGAIN) {
8714 printf("EAGAIN\n");
8715 goto ok;
8716 }
8717#endif
8718#ifdef EWOULDBLOCK
8719 if (errno == EWOULDBLOCK)
8720 printf("EWOULDBLOCK\n");
8721#endif
8722 ok:
8723 write(pu[1], buf, 1); /* Unblocks child, tell it to close our pipe */
8724 sleep(2); /* Give it time to close our pipe */
8725 alarm(5);
8726 ret = read(pd[0], buf, 1); /* Should read EOF */
8727 alarm(0);
8728 sprintf(string, "%d\n", ret);
8729 write(3, string, strlen(string));
8730 exit(0);
8731 }
8732
8733 close(pd[0]); /* We write to pd[1] */
8734 close(pu[1]); /* We read from pu[0] */
8735 read(pu[0], buf, 1); /* Wait for parent to signal us we may continue */
8736 close(pd[1]); /* Pipe pd is now fully closed! */
8737 exit(0); /* Bye bye, thank you for playing! */
8738}
8739EOCP
8740 set try
8741 if eval $compile_ok; then
8742 echo "$startsh" >mtry
8743 echo "./try >try.out 2>try.ret 3>try.err || exit 4" >>mtry
8744 chmod +x mtry
8745 ./mtry >/dev/null 2>&1
8746 case $? in
8747 0) eagain=`$cat try.out`;;
8748 1) echo "Could not perform non-blocking setting!";;
8749 2) echo "I did a successful read() for something that was not there!";;
8750 3) echo "Hmm... non-blocking I/O does not seem to be working!";;
8751 *) echo "Something terribly wrong happened during testing.";;
8752 esac
8753 rd_nodata=`$cat try.ret`
8754 echo "A read() system call with no data present returns $rd_nodata."
8755 case "$rd_nodata" in
8756 0|-1) ;;
8757 *)
8758 echo "(That's peculiar, fixing that to be -1.)"
8759 rd_nodata=-1
8760 ;;
8761 esac
8762 case "$eagain" in
8763 '')
8764 echo "Forcing errno EAGAIN on read() with no data available."
8765 eagain=EAGAIN
8766 ;;
8767 *)
8768 echo "Your read() sets errno to $eagain when no data is available."
8769 ;;
8770 esac
8771 status=`$cat try.err`
8772 case "$status" in
8773 0) echo "And it correctly returns 0 to signal EOF.";;
8774 -1) echo "But it also returns -1 to signal EOF, so be careful!";;
8775 *) echo "However, your read() returns '$status' on EOF??";;
8776 esac
8777 val="$define"
8778 if test "$status" = "$rd_nodata"; then
8779 echo "WARNING: you can't distinguish between EOF and no data!"
8780 val="$undef"
8781 fi
8782 else
8783 echo "I can't compile the test program--assuming errno EAGAIN will do."
8784 eagain=EAGAIN
8785 fi
8786 set d_eofnblk
8787 eval $setvar
8788 ;;
8789*)
8790 echo "Using $hint value $eagain."
8791 echo "Your read() returns $rd_nodata when no data is present."
8792 case "$d_eofnblk" in
8793 "$define") echo "And you can see EOF because read() returns 0.";;
8794 "$undef") echo "But you can't see EOF status from read() returned value.";;
8795 *)
8796 echo "(Assuming you can't see EOF status from read anyway.)"
8797 d_eofnblk=$undef
8798 ;;
8799 esac
8800 ;;
8801esac
8802$rm -f try try.* .out core head.c mtry
8803
8804: see if fchmod exists
8805set fchmod d_fchmod
8806eval $inlibc
8807
8808: see if fchown exists
8809set fchown d_fchown
8810eval $inlibc
8811
8812: see if this is an fcntl system
8813set fcntl d_fcntl
8814eval $inlibc
8815
8816hasfield='varname=$1; struct=$2; field=$3; shift; shift; shift;
8817while $test $# -ge 2; do
8818 case "$1" in
8819 $define) echo "#include <$2>";;
8820 esac ;
8821 shift 2;
8822done > try.c;
8823echo "int main () { struct $struct foo; char* bar; bar = (char*)foo.$field; }" >> try.c;
8824set try;
8825if eval $compile; then
8826 val="$define";
8827else
8828 val="$undef";
8829fi;
8830set $varname;
8831eval $setvar;
8832$rm -f try.c try.o'
8833
8834socketlib=''
8835sockethdr=''
8836: see whether socket exists
8837echo " "
8838$echo $n "Hmm... $c" >&4
8839if set socket val -f d_socket; eval $csym; $val; then
8840 echo "Looks like you have Berkeley networking support." >&4
8841 d_socket="$define"
8842 if set setsockopt val -f; eval $csym; $val; then
8843 d_oldsock="$undef"
8844 else
8845 echo "...but it uses the old BSD 4.1c interface, rather than 4.2." >&4
8846 d_oldsock="$define"
8847 fi
8848else
8849 if $contains socklib libc.list >/dev/null 2>&1; then
8850 echo "Looks like you have Berkeley networking support." >&4
8851 d_socket="$define"
8852 : we will have to assume that it supports the 4.2 BSD interface
8853 d_oldsock="$undef"
8854 else
8855 echo "You don't have Berkeley networking in libc$_a..." >&4
8856 if test "X$d_socket" = "X$define"; then
8857 echo "...but you seem to believe that you have sockets." >&4
8858 else
8859 for net in net socket
8860 do
8861 if test -f /usr/lib/lib$net$_a; then
8862 ( ($nm $nm_opt /usr/lib/lib$net$_a | eval $nm_extract) || \
8863 $ar t /usr/lib/lib$net$_a) 2>/dev/null >> libc.list
8864 if $contains socket libc.list >/dev/null 2>&1; then
8865 d_socket="$define"
8866 socketlib="-l$net"
8867 case "$net" in
8868 net)
8869 echo "...but the Wollongong group seems to have hacked it in." >&4
8870 sockethdr="-I/usr/netinclude"
8871 ;;
8872 esac
8873 echo "Found Berkeley sockets interface in lib$net." >& 4
8874 if $contains setsockopt libc.list >/dev/null 2>&1; then
8875 d_oldsock="$undef"
8876 else
8877 echo "...using the old BSD 4.1c interface, rather than 4.2." >&4
8878 d_oldsock="$define"
8879 fi
8880 break
8881 fi
8882 fi
8883 done
8884 if test "X$d_socket" != "X$define"; then
8885 echo "or anywhere else I see." >&4
8886 d_socket="$undef"
8887 d_oldsock="$undef"
8888 fi
8889 fi
8890 fi
8891fi
8892
8893: see if socketpair exists
8894set socketpair d_sockpair
8895eval $inlibc
8896
8897
8898echo " "
8899echo "Checking the availability of certain socket constants..." >& 4
8900for ENUM in MSG_CTRUNC MSG_DONTROUTE MSG_OOB MSG_PEEK MSG_PROXY SCM_RIGHTS; do
8901 enum=`$echo $ENUM|./tr '[A-Z]' '[a-z]'`
8902 $cat >try.c <<EOF
8903#include <sys/types.h>
8904#include <sys/socket.h>
8905int main() {
8906 int i = $ENUM;
8907}
8908EOF
8909 val="$undef"
8910 set try; if eval $compile; then
8911 val="$define"
8912 fi
8913 set d_${enum}; eval $setvar
8914 $rm -f try.c try
8915done
8916
8917: see if sys/select.h has to be included
8918set sys/select.h i_sysselct
8919eval $inhdr
8920
8921: see if we should include time.h, sys/time.h, or both
8922echo " "
8923if test "X$timeincl" = X; then
8924 echo "Testing to see if we should include <time.h>, <sys/time.h> or both." >&4
8925 $echo $n "I'm now running the test program...$c"
8926 $cat >try.c <<'EOCP'
8927#include <sys/types.h>
8928#ifdef I_TIME
8929#include <time.h>
8930#endif
8931#ifdef I_SYSTIME
8932#ifdef SYSTIMEKERNEL
8933#define KERNEL
8934#endif
8935#include <sys/time.h>
8936#endif
8937#ifdef I_SYSSELECT
8938#include <sys/select.h>
8939#endif
8940int main()
8941{
8942 struct tm foo;
8943#ifdef S_TIMEVAL
8944 struct timeval bar;
8945#endif
8946#ifdef S_TIMEZONE
8947 struct timezone tzp;
8948#endif
8949 if (foo.tm_sec == foo.tm_sec)
8950 exit(0);
8951#ifdef S_TIMEVAL
8952 if (bar.tv_sec == bar.tv_sec)
8953 exit(0);
8954#endif
8955 exit(1);
8956}
8957EOCP
8958 flags=''
8959 for s_timezone in '-DS_TIMEZONE' ''; do
8960 sysselect=''
8961 for s_timeval in '-DS_TIMEVAL' ''; do
8962 for i_systimek in '' '-DSYSTIMEKERNEL'; do
8963 for i_time in '' '-DI_TIME'; do
8964 for i_systime in '-DI_SYSTIME' ''; do
8965 case "$flags" in
8966 '') $echo $n ".$c"
8967 set try $i_time $i_systime $i_systimek $sysselect $s_timeval $s_timezone
8968 if eval $compile; then
8969 set X $i_time $i_systime $i_systimek $sysselect $s_timeval
8970 shift
8971 flags="$*"
8972 echo " "
8973 $echo $n "Succeeded with $flags$c"
8974 fi
8975 ;;
8976 esac
8977 done
8978 done
8979 done
8980 done
8981 done
8982 timeincl=''
8983 echo " "
8984 case "$flags" in
8985 *SYSTIMEKERNEL*) i_systimek="$define"
8986 timeincl=`./findhdr sys/time.h`
8987 echo "We'll include <sys/time.h> with KERNEL defined." >&4;;
8988 *) i_systimek="$undef";;
8989 esac
8990 case "$flags" in
8991 *I_TIME*) i_time="$define"
8992 timeincl=`./findhdr time.h`" $timeincl"
8993 echo "We'll include <time.h>." >&4;;
8994 *) i_time="$undef";;
8995 esac
8996 case "$flags" in
8997 *I_SYSTIME*) i_systime="$define"
8998 timeincl=`./findhdr sys/time.h`" $timeincl"
8999 echo "We'll include <sys/time.h>." >&4;;
9000 *) i_systime="$undef";;
9001 esac
9002 $rm -f try.c try
9003fi
9004
9005: check for fd_set items
9006$cat <<EOM
9007
9008Checking to see how well your C compiler handles fd_set and friends ...
9009EOM
9010$cat >fd_set.c <<EOCP
9011#$i_systime I_SYS_TIME
9012#$i_sysselct I_SYS_SELECT
9013#$d_socket HAS_SOCKET
9014#include <sys/types.h>
9015#ifdef HAS_SOCKET
9016#include <sys/socket.h> /* Might include <sys/bsdtypes.h> */
9017#endif
9018#ifdef I_SYS_TIME
9019#include <sys/time.h>
9020#endif
9021#ifdef I_SYS_SELECT
9022#include <sys/select.h>
9023#endif
9024int main() {
9025 fd_set fds;
9026
9027#ifdef TRYBITS
9028 if(fds.fds_bits);
9029#endif
9030
9031#if defined(FD_SET) && defined(FD_CLR) && defined(FD_ISSET) && defined(FD_ZERO)
9032 exit(0);
9033#else
9034 exit(1);
9035#endif
9036}
9037EOCP
9038set fd_set -DTRYBITS
9039if eval $compile; then
9040 d_fds_bits="$define"
9041 d_fd_set="$define"
9042 echo "Well, your system knows about the normal fd_set typedef..." >&4
9043 if ./fd_set; then
9044 echo "and you have the normal fd_set macros (just as I'd expect)." >&4
9045 d_fd_macros="$define"
9046 else
9047 $cat >&4 <<'EOM'
9048but not the normal fd_set macros! Gaaack! I'll have to cover for you.
9049EOM
9050 d_fd_macros="$undef"
9051 fi
9052else
9053 $cat <<'EOM'
9054Hmm, your compiler has some difficulty with fd_set. Checking further...
9055EOM
9056 set fd_set
9057 if eval $compile; then
9058 d_fds_bits="$undef"
9059 d_fd_set="$define"
9060 echo "Well, your system has some sort of fd_set available..." >&4
9061 if ./fd_set; then
9062 echo "and you have the normal fd_set macros." >&4
9063 d_fd_macros="$define"
9064 else
9065 $cat <<'EOM'
9066but not the normal fd_set macros! Gross! More work for me...
9067EOM
9068 d_fd_macros="$undef"
9069 fi
9070 else
9071 echo "Well, you got zip. That's OK, I can roll my own fd_set stuff." >&4
9072 d_fd_set="$undef"
9073 d_fds_bits="$undef"
9074 d_fd_macros="$undef"
9075 fi
9076fi
9077$rm -f fd_set*
9078
9079: see if fgetpos exists
9080set fgetpos d_fgetpos
9081eval $inlibc
9082
9083: see if flock exists
9084set flock d_flock
9085eval $inlibc
9086
9087: see if fork exists
9088set fork d_fork
9089eval $inlibc
9090
9091: see if pathconf exists
9092set pathconf d_pathconf
9093eval $inlibc
9094
9095: see if fpathconf exists
9096set fpathconf d_fpathconf
9097eval $inlibc
9098
9099
9100: check for fpos64_t
9101echo " "
9102echo "Checking to see if you have fpos64_t..." >&4
9103$cat >try.c <<EOCP
9104#include <stdio.h>
9105int main() { fpos64_t x = 7; }
9106EOCP
9107set try
9108if eval $compile; then
9109 val="$define"
9110 echo "You have fpos64_t."
9111else
9112 val="$undef"
9113 echo "You do not have fpos64_t."
9114 case "$fpossize" in
9115 8) echo "(Your fpos_t is 64 bits, so you could use that.)" ;;
9116 esac
9117fi
9118$rm -f try.* try
9119set d_fpos64_t
9120eval $setvar
9121
9122: see if frexpl exists
9123set frexpl d_frexpl
9124eval $inlibc
9125
9126hasstruct='varname=$1; struct=$2; shift; shift;
9127while $test $# -ge 2; do
9128 case "$1" in
9129 $define) echo "#include <$2>";;
9130 esac ;
9131 shift 2;
9132done > try.c;
9133echo "int main () { struct $struct foo; }" >> try.c;
9134set try;
9135if eval $compile; then
9136 val="$define";
9137else
9138 val="$undef";
9139fi;
9140set $varname;
9141eval $setvar;
9142$rm -f try.c try.o'
9143
9144: see if this is a sys/param system
9145set sys/param.h i_sysparam
9146eval $inhdr
9147
9148: see if this is a sys/mount.h system
9149set sys/mount.h i_sysmount
9150eval $inhdr
9151
9152: see if sys/types.h has to be included
9153set sys/types.h i_systypes
9154eval $inhdr
9155
9156
9157echo " "
9158echo "Checking to see if your system supports struct fs_data..." >&4
9159set d_fs_data_s fs_data $i_systypes sys/types.h $i_sysparam sys/param.h $i_sysmount sys/mount.h
9160eval $hasstruct
9161case "$d_fs_data_s" in
9162"$define") echo "Yes, it does." ;;
9163*) echo "No, it doesn't." ;;
9164esac
9165
9166: see if fseeko exists
9167set fseeko d_fseeko
9168eval $inlibc
9169case "$longsize" in
91708) echo "(Your long is 64 bits, so you could use fseek.)" ;;
9171esac
9172
9173: see if fsetpos exists
9174set fsetpos d_fsetpos
9175eval $inlibc
9176
9177
9178: see if fstatfs exists
9179set fstatfs d_fstatfs
9180eval $inlibc
9181
9182
9183: see if statvfs exists
9184set statvfs d_statvfs
9185eval $inlibc
9186
9187: see if fstatvfs exists
9188set fstatvfs d_fstatvfs
9189eval $inlibc
9190
9191
9192: see if ftello exists
9193set ftello d_ftello
9194eval $inlibc
9195case "$longsize" in
91968) echo "(Your long is 64 bits, so you could use ftell.)" ;;
9197esac
9198
9199: see if getcwd exists
9200set getcwd d_getcwd
9201eval $inlibc
9202
9203: see if getespwnam exists
9204set getespwnam d_getespwnam
9205eval $inlibc
9206
9207
9208: see if getfsstat exists
9209set getfsstat d_getfsstat
9210eval $inlibc
9211
9212: see if getgrent exists
9213set getgrent d_getgrent
9214eval $inlibc
9215
9216: see if gethostbyaddr exists
9217set gethostbyaddr d_gethbyaddr
9218eval $inlibc
9219
9220: see if gethostbyname exists
9221set gethostbyname d_gethbyname
9222eval $inlibc
9223
9224: see if gethostent exists
9225set gethostent d_gethent
9226eval $inlibc
9227
9228: see how we will look up host name
9229echo " "
9230call=''
9231if set gethostname val -f d_gethname; eval $csym; $val; then
9232 echo 'gethostname() found.' >&4
9233 d_gethname="$define"
9234 call=gethostname
9235fi
9236if set uname val -f d_uname; eval $csym; $val; then
9237 if ./xenix; then
9238 $cat <<'EOM'
9239uname() was found, but you're running xenix, and older versions of xenix
9240have a broken uname(). If you don't really know whether your xenix is old
9241enough to have a broken system call, use the default answer.
9242
9243EOM
9244 dflt=y
9245 case "$d_uname" in
9246 "$define") dflt=n;;
9247 esac
9248 rp='Is your uname() broken?'
9249 . ./myread
9250 case "$ans" in
9251 n*) d_uname="$define"; call=uname;;
9252 esac
9253 else
9254 echo 'uname() found.' >&4
9255 d_uname="$define"
9256 case "$call" in
9257 '') call=uname ;;
9258 esac
9259 fi
9260fi
9261case "$d_gethname" in
9262'') d_gethname="$undef";;
9263esac
9264case "$d_uname" in
9265'') d_uname="$undef";;
9266esac
9267case "$d_uname$d_gethname" in
9268*define*)
9269 dflt=n
9270 cat <<EOM
9271
9272Every now and then someone has a $call() that lies about the hostname
9273but can't be fixed for political or economic reasons. If you wish, I can
9274pretend $call() isn't there and maybe compute hostname at run-time
9275thanks to the '$phostname' command.
9276
9277EOM
9278 rp="Shall I ignore $call() from now on?"
9279 . ./myread
9280 case "$ans" in
9281 y*) d_uname="$undef" d_gethname="$undef"; $echo $n "Okay...$c";;
9282 esac;;
9283esac
9284case "$phostname" in
9285'') aphostname='';;
9286*) case "$aphostname" in
9287 /*) ;;
9288 *) set X $phostname
9289 shift
9290 file=$1
9291 shift
9292 file=`./loc $file $file $pth`
9293 aphostname=`echo $file $*`
9294 ;;
9295 esac
9296 ;;
9297esac
9298case "$d_uname$d_gethname" in
9299*define*) ;;
9300*)
9301 case "$phostname" in
9302 '')
9303 echo "There will be no way for $package to get your hostname." >&4;;
9304 *)
9305 echo "I'll use 'popen("'"'$aphostname'", "r")'"' to get your hostname." >&4
9306 ;;
9307 esac;;
9308esac
9309case "$d_phostname" in
9310'') d_phostname="$undef";;
9311esac
9312
9313: see if this is a netdb.h system
9314set netdb.h i_netdb
9315eval $inhdr
9316
9317: see if prototypes for various gethostxxx netdb.h functions are available
9318echo " "
9319set d_gethostprotos gethostent $i_netdb netdb.h
9320eval $hasproto
9321
9322: see if getlogin exists
9323set getlogin d_getlogin
9324eval $inlibc
9325
9326: see if getmnt exists
9327set getmnt d_getmnt
9328eval $inlibc
9329
9330: see if getmntent exists
9331set getmntent d_getmntent
9332eval $inlibc
9333
9334: see if getnetbyaddr exists
9335set getnetbyaddr d_getnbyaddr
9336eval $inlibc
9337
9338: see if getnetbyname exists
9339set getnetbyname d_getnbyname
9340eval $inlibc
9341
9342: see if getnetent exists
9343set getnetent d_getnent
9344eval $inlibc
9345
9346: see if prototypes for various getnetxxx netdb.h functions are available
9347echo " "
9348set d_getnetprotos getnetent $i_netdb netdb.h
9349eval $hasproto
9350
9351
9352: see if getprotobyname exists
9353set getprotobyname d_getpbyname
9354eval $inlibc
9355
9356: see if getprotobynumber exists
9357set getprotobynumber d_getpbynumber
9358eval $inlibc
9359
9360: see if getprotoent exists
9361set getprotoent d_getpent
9362eval $inlibc
9363
9364: see if getpgid exists
9365set getpgid d_getpgid
9366eval $inlibc
9367
9368: see if getpgrp2 exists
9369set getpgrp2 d_getpgrp2
9370eval $inlibc
9371
9372: see if getppid exists
9373set getppid d_getppid
9374eval $inlibc
9375
9376: see if getpriority exists
9377set getpriority d_getprior
9378eval $inlibc
9379
9380: see if prototypes for various getprotoxxx netdb.h functions are available
9381echo " "
9382set d_getprotoprotos getprotoent $i_netdb netdb.h
9383eval $hasproto
9384
9385: see if getprpwnam exists
9386set getprpwnam d_getprpwnam
9387eval $inlibc
9388
9389: see if getpwent exists
9390set getpwent d_getpwent
9391eval $inlibc
9392
9393
9394: see if getservbyname exists
9395set getservbyname d_getsbyname
9396eval $inlibc
9397
9398: see if getservbyport exists
9399set getservbyport d_getsbyport
9400eval $inlibc
9401
9402: see if getservent exists
9403set getservent d_getsent
9404eval $inlibc
9405
9406: see if prototypes for various getservxxx netdb.h functions are available
9407echo " "
9408set d_getservprotos getservent $i_netdb netdb.h
9409eval $hasproto
9410
9411: see if getspnam exists
9412set getspnam d_getspnam
9413eval $inlibc
9414
9415: see if gettimeofday or ftime exists
9416set gettimeofday d_gettimeod
9417eval $inlibc
9418case "$d_gettimeod" in
9419"$undef")
9420 set ftime d_ftime
9421 eval $inlibc
9422 ;;
9423*)
9424 val="$undef"; set d_ftime; eval $setvar
9425 ;;
9426esac
9427case "$d_gettimeod$d_ftime" in
9428"$undef$undef")
9429 echo " "
9430 echo 'No ftime() nor gettimeofday() -- timing may be less accurate.' >&4
9431 ;;
9432esac
9433
9434: see if this is an grp system
9435set grp.h i_grp
9436eval $inhdr
9437
9438case "$i_grp" in
9439$define)
9440 xxx=`./findhdr grp.h`
9441 $cppstdin $cppflags $cppminus < $xxx >$$.h
9442
9443 if $contains 'gr_passwd' $$.h >/dev/null 2>&1; then
9444 val="$define"
9445 else
9446 val="$undef"
9447 fi
9448 set d_grpasswd
9449 eval $setvar
9450
9451 $rm -f $$.h
9452 ;;
9453*)
9454 val="$undef";
9455 set d_grpasswd; eval $setvar
9456 ;;
9457esac
9458
9459: see if hasmntopt exists
9460set hasmntopt d_hasmntopt
9461eval $inlibc
9462
9463: see if this is a netinet/in.h or sys/in.h system
9464set netinet/in.h i_niin sys/in.h i_sysin
9465eval $inhdr
9466
9467: see if arpa/inet.h has to be included
9468set arpa/inet.h i_arpainet
9469eval $inhdr
9470
9471: see if htonl --and friends-- exists
9472val=''
9473set htonl val
9474eval $inlibc
9475
9476: Maybe they are macros.
9477case "$val" in
9478$undef)
9479 $cat >htonl.c <<EOM
9480#include <stdio.h>
9481#include <sys/types.h>
9482#$i_niin I_NETINET_IN
9483#$i_sysin I_SYS_IN
9484#$i_arpainet I_ARPA_INET
9485#ifdef I_NETINET_IN
9486#include <netinet/in.h>
9487#endif
9488#ifdef I_SYS_IN
9489#include <sys/in.h>
9490#endif
9491#ifdef I_ARPA_INET
9492#include <arpa/inet.h>
9493#endif
9494#ifdef htonl
9495printf("Defined as a macro.");
9496#endif
9497EOM
9498 $cppstdin $cppflags $cppminus < htonl.c >htonl.E 2>/dev/null
9499 if $contains 'Defined as a macro' htonl.E >/dev/null 2>&1; then
9500 val="$define"
9501 echo "But it seems to be defined as a macro." >&4
9502 fi
9503 $rm -f htonl.?
9504 ;;
9505esac
9506set d_htonl
9507eval $setvar
9508
9509: see if iconv exists
9510set iconv d_iconv
9511eval $inlibc
9512
9513: index or strchr
9514echo " "
9515if set index val -f; eval $csym; $val; then
9516 if set strchr val -f d_strchr; eval $csym; $val; then
9517 if $contains strchr "$strings" >/dev/null 2>&1 ; then
9518 val="$define"
9519 vali="$undef"
9520 echo "strchr() found." >&4
9521 else
9522 val="$undef"
9523 vali="$define"
9524 echo "index() found." >&4
9525 fi
9526 else
9527 val="$undef"
9528 vali="$define"
9529 echo "index() found." >&4
9530 fi
9531else
9532 if set strchr val -f d_strchr; eval $csym; $val; then
9533 val="$define"
9534 vali="$undef"
9535 echo "strchr() found." >&4
9536 else
9537 echo "No index() or strchr() found!" >&4
9538 val="$undef"
9539 vali="$undef"
9540 fi
9541fi
9542set d_strchr; eval $setvar
9543val="$vali"
9544set d_index; eval $setvar
9545
9546: check whether inet_aton exists
9547set inet_aton d_inetaton
9548eval $inlibc
9549
9550: see if inttypes.h is available
9551: we want a real compile instead of Inhdr because some systems
9552: have an inttypes.h which includes non-existent headers
9553echo " "
9554$cat >try.c <<EOCP
9555#include <inttypes.h>
9556int main() {
9557 static int32_t foo32 = 0x12345678;
9558}
9559EOCP
9560set try
9561if eval $compile; then
9562 echo "<inttypes.h> found." >&4
9563 val="$define"
9564else
9565 echo "<inttypes.h> NOT found." >&4
9566 val="$undef"
9567fi
9568$rm -f try.c try
9569set i_inttypes
9570eval $setvar
9571
9572: check for int64_t
9573echo " "
9574echo "Checking to see if you have int64_t..." >&4
9575$cat >try.c <<EOCP
9576#include <sys/types.h>
9577#$i_inttypes I_INTTYPES
9578#ifdef I_INTTYPES
9579#include <inttypes.h>
9580#endif
9581int main() { int64_t x = 7; }
9582EOCP
9583set try
9584if eval $compile; then
9585 val="$define"
9586 echo "You have int64_t."
9587else
9588 val="$undef"
9589 echo "You do not have int64_t."
9590fi
9591$rm -f try try.*
9592set d_int64_t
9593eval $setvar
9594
9595: Look for isascii
9596echo " "
9597$cat >isascii.c <<'EOCP'
9598#include <stdio.h>
9599#include <ctype.h>
9600int main() {
9601 int c = 'A';
9602 if (isascii(c))
9603 exit(0);
9604 else
9605 exit(1);
9606}
9607EOCP
9608set isascii
9609if eval $compile; then
9610 echo "isascii() found." >&4
9611 val="$define"
9612else
9613 echo "isascii() NOT found." >&4
9614 val="$undef"
9615fi
9616set d_isascii
9617eval $setvar
9618$rm -f isascii*
9619
9620: see if isnan exists
9621set isnan d_isnan
9622eval $inlibc
9623
9624: see if isnanl exists
9625set isnanl d_isnanl
9626eval $inlibc
9627
9628: see if killpg exists
9629set killpg d_killpg
9630eval $inlibc
9631
9632: see if lchown exists
9633echo " "
9634$cat > try.c <<'EOCP'
9635/* System header to define __stub macros and hopefully few prototypes,
9636 which can conflict with char lchown(); below. */
9637#include <assert.h>
9638/* Override any gcc2 internal prototype to avoid an error. */
9639/* We use char because int might match the return type of a gcc2
9640 builtin and then its argument prototype would still apply. */
9641char lchown();
9642int main() {
9643 /* The GNU C library defines this for functions which it implements
9644 to always fail with ENOSYS. Some functions are actually named
9645 something starting with __ and the normal name is an alias. */
9646#if defined (__stub_lchown) || defined (__stub___lchown)
9647choke me
9648#else
9649lchown();
9650#endif
9651; return 0; }
9652EOCP
9653set try
9654if eval $compile; then
9655 $echo "lchown() found." >&4
9656 val="$define"
9657else
9658 $echo "lchown() NOT found." >&4
9659 val="$undef"
9660fi
9661set d_lchown
9662eval $setvar
9663
9664: See if number of significant digits in a double precision number is known
9665echo " "
9666$cat >ldbl_dig.c <<EOM
9667#$i_limits I_LIMITS
9668#$i_float I_FLOAT
9669#ifdef I_LIMITS
9670#include <limits.h>
9671#endif
9672#ifdef I_FLOAT
9673#include <float.h>
9674#endif
9675#ifdef LDBL_DIG
9676printf("Contains LDBL_DIG");
9677#endif
9678EOM
9679$cppstdin $cppflags $cppminus < ldbl_dig.c >ldbl_dig.E 2>/dev/null
9680if $contains 'LDBL_DIG' ldbl_dig.E >/dev/null 2>&1; then
9681 echo "LDBL_DIG found." >&4
9682 val="$define"
9683else
9684 echo "LDBL_DIG NOT found." >&4
9685 val="$undef"
9686fi
9687$rm -f ldbl_dig.?
9688set d_ldbl_dig
9689eval $setvar
9690
9691: see if link exists
9692set link d_link
9693eval $inlibc
9694
9695: see if localeconv exists
9696set localeconv d_locconv
9697eval $inlibc
9698
9699: see if lockf exists
9700set lockf d_lockf
9701eval $inlibc
9702
9703: check for long long
9704echo " "
9705echo "Checking to see if you have long long..." >&4
9706echo 'int main() { long long x = 7; return 0; }' > try.c
9707set try
9708if eval $compile; then
9709 val="$define"
9710 echo "You have long long."
9711else
9712 val="$undef"
9713 echo "You do not have long long."
9714fi
9715$rm try.*
9716set d_longlong
9717eval $setvar
9718
9719: check for length of long long
9720case "${d_longlong}${longlongsize}" in
9721$define)
9722 echo " "
9723 echo "Checking to see how big your long longs are..." >&4
9724 $cat >try.c <<'EOCP'
9725#include <stdio.h>
9726int main()
9727{
9728 printf("%d\n", (int)sizeof(long long));
9729 return(0);
9730}
9731EOCP
9732 set try
9733 if eval $compile_ok; then
9734 longlongsize=`./try$exe_ext`
9735 echo "Your long longs are $longlongsize bytes long."
9736 else
9737 dflt='8'
9738 echo " "
9739 echo "(I can't seem to compile the test program. Guessing...)"
9740 rp="What is the size of a long long (in bytes)?"
9741 . ./myread
9742 longlongsize="$ans"
9743 fi
9744 if $test "X$longsize" = "X$longlongsize"; then
9745 echo "(That isn't any different from an ordinary long.)"
9746 fi
9747 ;;
9748esac
9749$rm -f try.* try
9750
9751: see if prototype for lseek is available
9752echo " "
9753set d_lseekproto lseek $i_systypes sys/types.h $i_unistd unistd.h
9754eval $hasproto
9755
9756: see if lstat exists
9757set lstat d_lstat
9758eval $inlibc
9759
9760: see if madvise exists
9761set madvise d_madvise
9762eval $inlibc
9763
9764: see if mblen exists
9765set mblen d_mblen
9766eval $inlibc
9767
9768: see if mbstowcs exists
9769set mbstowcs d_mbstowcs
9770eval $inlibc
9771
9772: see if mbtowc exists
9773set mbtowc d_mbtowc
9774eval $inlibc
9775
9776: see if memchr exists
9777set memchr d_memchr
9778eval $inlibc
9779
9780: see if memcmp exists
9781set memcmp d_memcmp
9782eval $inlibc
9783
9784: see if memcpy exists
9785set memcpy d_memcpy
9786eval $inlibc
9787
9788: see if memmove exists
9789set memmove d_memmove
9790eval $inlibc
9791
9792: see if memset exists
9793set memset d_memset
9794eval $inlibc
9795
9796: see if mkdir exists
9797set mkdir d_mkdir
9798eval $inlibc
9799
9800: see if mkdtemp exists
9801set mkdtemp d_mkdtemp
9802eval $inlibc
9803
9804: see if mkfifo exists
9805set mkfifo d_mkfifo
9806eval $inlibc
9807
9808: see if mkstemp exists
9809set mkstemp d_mkstemp
9810eval $inlibc
9811
9812: see if mkstemps exists
9813set mkstemps d_mkstemps
9814eval $inlibc
9815
9816: see if mktime exists
9817set mktime d_mktime
9818eval $inlibc
9819
9820: see if this is a sys/mman.h system
9821set sys/mman.h i_sysmman
9822eval $inhdr
9823
9824: see if mmap exists
9825set mmap d_mmap
9826eval $inlibc
9827: see what shmat returns
9828: default to something harmless
9829mmaptype='void *'
9830case "$i_sysmman$d_mmap" in
9831"$define$define")
9832 $cat >mmap.c <<'END'
9833#include <sys/mman.h>
9834void *mmap();
9835END
9836 if $cc $ccflags -c mmap.c >/dev/null 2>&1; then
9837 mmaptype='void *'
9838 else
9839 mmaptype='caddr_t'
9840 fi
9841 echo "and it returns ($mmaptype)." >&4
9842 ;;
9843esac
9844
9845
9846
9847: see if modfl exists
9848set modfl d_modfl
9849eval $inlibc
9850
9851: see if mprotect exists
9852set mprotect d_mprotect
9853eval $inlibc
9854
9855: see if msgctl exists
9856set msgctl d_msgctl
9857eval $inlibc
9858
9859: see if msgget exists
9860set msgget d_msgget
9861eval $inlibc
9862
9863: see if msgsnd exists
9864set msgsnd d_msgsnd
9865eval $inlibc
9866
9867: see if msgrcv exists
9868set msgrcv d_msgrcv
9869eval $inlibc
9870
9871: see how much of the 'msg*(2)' library is present.
9872h_msg=true
9873echo " "
9874case "$d_msgctl$d_msgget$d_msgsnd$d_msgrcv" in
9875*"$undef"*) h_msg=false;;
9876esac
9877case "$osname" in
9878freebsd)
9879 case "`ipcs 2>&1`" in
9880 "SVID messages"*"not configured"*)
9881 echo "Your $osname does not have the msg*(2) configured." >&4
9882 h_msg=false
9883 val="$undef"
9884 set msgctl d_msgctl
9885 eval $setvar
9886 set msgget d_msgget
9887 eval $setvar
9888 set msgsnd d_msgsnd
9889 eval $setvar
9890 set msgrcv d_msgrcv
9891 eval $setvar
9892 ;;
9893 esac
9894 ;;
9895esac
9896: we could also check for sys/ipc.h ...
9897if $h_msg && $test `./findhdr sys/msg.h`; then
9898 echo "You have the full msg*(2) library." >&4
9899 val="$define"
9900else
9901 echo "You don't have the full msg*(2) library." >&4
9902 val="$undef"
9903fi
9904set d_msg
9905eval $setvar
9906
9907: see if msync exists
9908set msync d_msync
9909eval $inlibc
9910
9911: see if munmap exists
9912set munmap d_munmap
9913eval $inlibc
9914
9915: see if nice exists
9916set nice d_nice
9917eval $inlibc
9918
9919
9920echo " "
9921echo "Checking which 64-bit integer type we could use..." >&4
9922
9923case "$intsize" in
99248) val=int
9925 set quadtype
9926 eval $setvar
9927 val='"unsigned int"'
9928 set uquadtype
9929 eval $setvar
9930 quadkind=1
9931 ;;
9932*) case "$longsize" in
9933 8) val=long
9934 set quadtype
9935 eval $setvar
9936 val='"unsigned long"'
9937 set uquadtype
9938 eval $setvar
9939 quadkind=2
9940 ;;
9941 *) case "$d_longlong:$longlongsize" in
9942 define:8)
9943 val='"long long"'
9944 set quadtype
9945 eval $setvar
9946 val='"unsigned long long"'
9947 set uquadtype
9948 eval $setvar
9949 quadkind=3
9950 ;;
9951 *) case "$d_int64_t" in
9952 define)
9953 val=int64_t
9954 set quadtype
9955 eval $setvar
9956 val=uint64_t
9957 set uquadtype
9958 eval $setvar
9959 quadkind=4
9960 ;;
9961 esac
9962 ;;
9963 esac
9964 ;;
9965 esac
9966 ;;
9967esac
9968
9969case "$quadtype" in
9970'') echo "Alas, no 64-bit integer types in sight." >&4
9971 d_quad="$undef"
9972 ;;
9973*) if test X"$use64bitint" = Xdefine -o X"$longsize" = X8; then
9974 verb="will"
9975 else
9976 verb="could"
9977 fi
9978 echo "We $verb use '$quadtype' for 64-bit integers." >&4
9979 d_quad="$define"
9980 ;;
9981esac
9982
9983: check for length of character
9984echo " "
9985case "$charsize" in
9986'')
9987 echo "Checking to see how big your characters are (hey, you never know)..." >&4
9988 $cat >try.c <<'EOCP'
9989#include <stdio.h>
9990int main()
9991{
9992 printf("%d\n", (int)sizeof(char));
9993 exit(0);
9994}
9995EOCP
9996 set try
9997 if eval $compile_ok; then
9998 dflt=`./try`
9999 else
10000 dflt='1'
10001 echo "(I can't seem to compile the test program. Guessing...)"
10002 fi
10003 ;;
10004*)
10005 dflt="$charsize"
10006 ;;
10007esac
10008rp="What is the size of a character (in bytes)?"
10009. ./myread
10010charsize="$ans"
10011$rm -f try.c try
10012
10013
10014echo " "
10015$echo "Choosing the C types to be used for Perl's internal types..." >&4
10016
10017case "$use64bitint:$d_quad:$quadtype" in
10018define:define:?*)
10019 ivtype="$quadtype"
10020 uvtype="$uquadtype"
10021 ivsize=8
10022 uvsize=8
10023 ;;
10024*) ivtype="long"
10025 uvtype="unsigned long"
10026 ivsize=$longsize
10027 uvsize=$longsize
10028 ;;
10029esac
10030
10031case "$uselongdouble:$d_longdbl" in
10032define:define)
10033 nvtype="long double"
10034 nvsize=$longdblsize
10035 ;;
10036*) nvtype=double
10037 nvsize=$doublesize
10038 ;;
10039esac
10040
10041$echo "(IV will be "$ivtype", $ivsize bytes)"
10042$echo "(UV will be "$uvtype", $uvsize bytes)"
10043$echo "(NV will be "$nvtype", $nvsize bytes)"
10044
10045$cat >try.c <<EOCP
10046#$i_inttypes I_INTTYPES
10047#ifdef I_INTTYPES
10048#include <inttypes.h>
10049#endif
10050#include <stdio.h>
10051int main() {
10052#ifdef INT8
10053 int8_t i = INT8_MAX;
10054 uint8_t u = UINT8_MAX;
10055 printf("int8_t\n");
10056#endif
10057#ifdef INT16
10058 int16_t i = INT16_MAX;
10059 uint16_t i = UINT16_MAX;
10060 printf("int16_t\n");
10061#endif
10062#ifdef INT32
10063 int32_t i = INT32_MAX;
10064 uint32_t u = UINT32_MAX;
10065 printf("int32_t\n");
10066#endif
10067}
10068EOCP
10069
10070case "$i8type" in
10071'') case "$charsize" in
10072 1) i8type=char
10073 u8type="unsigned char"
10074 i8size=$charsize
10075 u8size=$charsize
10076 ;;
10077 esac
10078 ;;
10079esac
10080case "$i8type" in
10081'') set try -DINT8
10082 if eval $compile; then
10083 case "`./try$exe_ext`" in
10084 int8_t) i8type=int8_t
10085 u8type=uint8_t
10086 i8size=1
10087 u8size=1
10088 ;;
10089 esac
10090 fi
10091 ;;
10092esac
10093case "$i8type" in
10094'') if $test $charsize -ge 1; then
10095 i8type=char
10096 u8type="unsigned char"
10097 i8size=$charsize
10098 u8size=$charsize
10099 fi
10100 ;;
10101esac
10102
10103case "$i16type" in
10104'') case "$shortsize" in
10105 2) i16type=short
10106 u16type="unsigned short"
10107 i16size=$shortsize
10108 u16size=$shortsize
10109 ;;
10110 esac
10111 ;;
10112esac
10113case "$i16type" in
10114'') set try -DINT16
10115 if eval $compile; then
10116 case "`./try$exe_ext`" in
10117 int16_t)
10118 i16type=int16_t
10119 u16type=uint16_t
10120 i16size=2
10121 u16size=2
10122 ;;
10123 esac
10124 fi
10125 ;;
10126esac
10127case "$i16type" in
10128'') if $test $shortsize -ge 2; then
10129 i16type=short
10130 u16type="unsigned short"
10131 i16size=$shortsize
10132 u16size=$shortsize
10133 fi
10134 ;;
10135esac
10136
10137case "$i32type" in
10138'') case "$longsize" in
10139 4) i32type=long
10140 u32type="unsigned long"
10141 i32size=$longsize
10142 u32size=$longsize
10143 ;;
10144 *) case "$intsize" in
10145 4) i32type=int
10146 u32type="unsigned int"
10147 i32size=$intsize
10148 u32size=$intsize
10149 ;;
10150 esac
10151 ;;
10152 esac
10153 ;;
10154esac
10155case "$i32type" in
10156'') set try -DINT32
10157 if eval $compile; then
10158 case "`./try$exe_ext`" in
10159 int32_t)
10160 i32type=int32_t
10161 u32type=uint32_t
10162 i32size=4
10163 u32size=4
10164 ;;
10165 esac
10166 fi
10167 ;;
10168esac
10169case "$i32type" in
10170'') if $test $intsize -ge 4; then
10171 i32type=int
10172 u32type="unsigned int"
10173 i32size=$intsize
10174 u32size=$intsize
10175 fi
10176 ;;
10177esac
10178
10179case "$i64type" in
10180'') case "$d_quad:$quadtype" in
10181 define:?*)
10182 i64type="$quadtype"
10183 u64type="$uquadtype"
10184 i64size=8
10185 u64size=8
10186 ;;
10187 esac
10188 ;;
10189esac
10190
10191$echo "Checking whether your NVs can preserve your UVs..." >&4
10192$cat <<EOP >try.c
10193#include <stdio.h>
10194int main() {
10195 $uvtype k = ($uvtype)~0, l;
10196 $nvtype d;
10197 l = k;
10198 d = ($nvtype)l;
10199 l = ($uvtype)d;
10200 if (l == k)
10201 printf("preserve\n");
10202 exit(0);
10203}
10204EOP
10205set try
10206if eval $compile; then
10207 case "`./try$exe_ext`" in
10208 preserve) d_nv_preserves_uv="$define" ;;
10209 esac
10210fi
10211case "$d_nv_preserves_uv" in
10212$define) $echo "Yes, they can." 2>&1 ;;
10213*) $echo "No, they can't." 2>&1
10214 d_nv_preserves_uv="$undef"
10215 ;;
10216esac
10217
10218$rm -f try.* try
10219
10220case "$d_nv_preserves_uv" in
10221"$define") d_nv_preserves_uv_bits=`expr $uvsize \* 8` ;;
10222*) $echo "Checking how many bits of your UVs your NVs can preserve..." >&4
10223 $cat <<EOP >try.c
10224#include <stdio.h>
10225int main() {
10226 $uvtype u = 0;
10227 int n = 8 * $uvsize;
10228 int i;
10229 for (i = 0; i < n; i++) {
10230 u = u << 1 | ($uvtype)1;
10231 if (($uvtype)($nvtype)u != u)
10232 break;
10233 }
10234 printf("%d\n", i);
10235 exit(0);
10236}
10237EOP
10238 set try
10239 if eval $compile; then
10240 d_nv_preserves_uv_bits="`./try$exe_ext`"
10241 fi
10242 case "$d_nv_preserves_uv_bits" in
10243 [1-9]*) $echo "Your NVs can preserve $d_nv_preserves_uv_bits bits of your UVs." 2>&1 ;;
10244 *) $echo "Can't figure out how many bits your NVs preserve." 2>&1
10245 d_nv_preserves_uv_bits="$undef"
10246 ;;
10247 esac
10248 $rm -f try.* try
10249 ;;
10250esac
10251
10252
10253: check for off64_t
10254echo " "
10255echo "Checking to see if you have off64_t..." >&4
10256$cat >try.c <<EOCP
10257#include <sys/types.h>
10258#include <unistd.h>
10259int main() { off64_t x = 7; }
10260EOCP
10261set try
10262if eval $compile; then
10263 val="$define"
10264 echo "You have off64_t."
10265else
10266 val="$undef"
10267 echo "You do not have off64_t."
10268 case "$lseeksize" in
10269 8) echo "(Your off_t is 64 bits, so you could use that.)" ;;
10270 esac
10271fi
10272$rm -f try.* try
10273set d_off64_t
10274eval $setvar
10275
10276: see if POSIX threads are available
10277set pthread.h i_pthread
10278eval $inhdr
10279
10280
10281
10282
10283: how to create joinable pthreads
10284if test "X$usethreads" = "X$define" -a "X$i_pthread" = "X$define"; then
10285 echo " "
10286 echo "Checking what constant to use for creating joinable pthreads..." >&4
10287 $cat >try.c <<'EOCP'
10288#include <pthread.h>
10289int main() {
10290 int detachstate = JOINABLE;
10291}
10292EOCP
10293 set try -DJOINABLE=PTHREAD_CREATE_JOINABLE
10294 if eval $compile; then
10295 echo "You seem to use PTHREAD_CREATE_JOINABLE." >&4
10296 val="$undef" # Yes, undef.
10297 set d_old_pthread_create_joinable
10298 eval $setvar
10299 val=""
10300 set old_pthread_create_joinable
10301 eval $setvar
10302 else
10303 set try -DJOINABLE=PTHREAD_CREATE_UNDETACHED
10304 if eval $compile; then
10305 echo "You seem to use PTHREAD_CREATE_UNDETACHED." >&4
10306 val="$define"
10307 set d_old_pthread_create_joinable
10308 eval $setvar
10309 val=PTHREAD_CREATE_UNDETACHED
10310 set old_pthread_create_joinable
10311 eval $setvar
10312 else
10313 set try -DJOINABLE=__UNDETACHED
10314 if eval $compile; then
10315 echo "You seem to use __UNDETACHED." >&4
10316 val="$define"
10317 set d_old_pthread_create_joinable
10318 eval $setvar
10319 val=__UNDETACHED
10320 set old_pthread_create_joinable
10321 eval $setvar
10322 else
10323 echo "Egads, nothing obvious found. Guessing that you use 0." >&4
10324 val="$define"
10325 set d_old_pthread_create_joinable
10326 eval $setvar
10327 val=0
10328 set old_pthread_create_joinable
10329 eval $setvar
10330 fi
10331 fi
10332 fi
10333 $rm -f try try.*
10334else
10335 d_old_pthread_create_joinable="$undef"
10336 old_pthread_create_joinable=""
10337fi
10338
10339: see if pause exists
10340set pause d_pause
10341eval $inlibc
10342
10343: see if pipe exists
10344set pipe d_pipe
10345eval $inlibc
10346
10347: see if poll exists
10348set poll d_poll
10349eval $inlibc
10350
10351
10352: see whether the various POSIXish _yields exist
10353$cat >try.c <<EOP
10354#include <pthread.h>
10355#include <stdio.h>
10356int main() {
10357#ifdef SCHED_YIELD
10358 sched_yield();
10359#else
10360#ifdef PTHREAD_YIELD
10361 pthread_yield();
10362#else
10363#ifdef PTHREAD_YIELD_NULL
10364 pthread_yield(NULL);
10365#endif
10366#endif
10367#endif
10368}
10369EOP
10370: see if sched_yield exists
10371set try -DSCHED_YIELD
10372if eval $compile; then
10373 val="$define"
10374 sched_yield='sched_yield()'
10375else
10376 val="$undef"
10377fi
10378case "$usethreads" in
10379$define)
10380 case "$val" in
10381 $define) echo 'sched_yield() found.' >&4 ;;
10382 *) echo 'sched_yield() NOT found.' >&4 ;;
10383 esac
10384esac
10385set d_sched_yield
10386eval $setvar
10387
10388: see if pthread_yield exists
10389set try -DPTHREAD_YIELD
10390if eval $compile; then
10391 val="$define"
10392 case "$sched_yield" in
10393 '') sched_yield='pthread_yield()' ;;
10394 esac
10395else
10396 set try -DPTHREAD_YIELD_NULL
10397 if eval $compile; then
10398 val="$define"
10399 case "$sched_yield" in
10400 '') sched_yield='pthread_yield(NULL)' ;;
10401 esac
10402 else
10403 val="$undef"
10404 fi
10405fi
10406case "$usethreads" in
10407$define)
10408 case "$val" in
10409 $define) echo 'pthread_yield() found.' >&4 ;;
10410 *) echo 'pthread_yield() NOT found.' >&4 ;;
10411 esac
10412 ;;
10413esac
10414set d_pthread_yield
10415eval $setvar
10416
10417case "$sched_yield" in
10418'') sched_yield=undef ;;
10419esac
10420
10421$rm -f try try.*
10422
10423: see if this is a pwd.h system
10424set pwd.h i_pwd
10425eval $inhdr
10426
10427case "$i_pwd" in
10428$define)
10429 xxx=`./findhdr pwd.h`
10430 $cppstdin $cppflags $cppminus < $xxx >$$.h
10431
10432 if $contains 'pw_quota' $$.h >/dev/null 2>&1; then
10433 val="$define"
10434 else
10435 val="$undef"
10436 fi
10437 set d_pwquota
10438 eval $setvar
10439
10440 if $contains 'pw_age' $$.h >/dev/null 2>&1; then
10441 val="$define"
10442 else
10443 val="$undef"
10444 fi
10445 set d_pwage
10446 eval $setvar
10447
10448 if $contains 'pw_change' $$.h >/dev/null 2>&1; then
10449 val="$define"
10450 else
10451 val="$undef"
10452 fi
10453 set d_pwchange
10454 eval $setvar
10455
10456 if $contains 'pw_class' $$.h >/dev/null 2>&1; then
10457 val="$define"
10458 else
10459 val="$undef"
10460 fi
10461 set d_pwclass
10462 eval $setvar
10463
10464 if $contains 'pw_expire' $$.h >/dev/null 2>&1; then
10465 val="$define"
10466 else
10467 val="$undef"
10468 fi
10469 set d_pwexpire
10470 eval $setvar
10471
10472 if $contains 'pw_comment' $$.h >/dev/null 2>&1; then
10473 val="$define"
10474 else
10475 val="$undef"
10476 fi
10477 set d_pwcomment
10478 eval $setvar
10479
10480 if $contains 'pw_gecos' $$.h >/dev/null 2>&1; then
10481 val="$define"
10482 else
10483 val="$undef"
10484 fi
10485 set d_pwgecos
10486 eval $setvar
10487
10488 if $contains 'pw_passwd' $$.h >/dev/null 2>&1; then
10489 val="$define"
10490 else
10491 val="$undef"
10492 fi
10493 set d_pwpasswd
10494 eval $setvar
10495
10496 $rm -f $$.h
10497 ;;
10498*)
10499 val="$undef";
10500 set d_pwquota; eval $setvar
10501 set d_pwage; eval $setvar
10502 set d_pwchange; eval $setvar
10503 set d_pwclass; eval $setvar
10504 set d_pwexpire; eval $setvar
10505 set d_pwcomment; eval $setvar
10506 set d_pwgecos; eval $setvar
10507 set d_pwpasswd; eval $setvar
10508 ;;
10509esac
10510
10511: see if readdir and friends exist
10512set readdir d_readdir
10513eval $inlibc
10514set seekdir d_seekdir
10515eval $inlibc
10516set telldir d_telldir
10517eval $inlibc
10518set rewinddir d_rewinddir
10519eval $inlibc
10520
10521: see if readlink exists
10522set readlink d_readlink
10523eval $inlibc
10524
10525: see if rename exists
10526set rename d_rename
10527eval $inlibc
10528
10529: see if rmdir exists
10530set rmdir d_rmdir
10531eval $inlibc
10532
10533: see if memory.h is available.
10534val=''
10535set memory.h val
10536eval $inhdr
10537
10538: See if it conflicts with string.h
10539case "$val" in
10540$define)
10541 case "$strings" in
10542 '') ;;
10543 *)
10544 $cppstdin $cppflags $cppminus < $strings > mem.h
10545 if $contains 'memcpy' mem.h >/dev/null 2>&1; then
10546 echo " "
10547 echo "We won't be including <memory.h>."
10548 val="$undef"
10549 fi
10550 $rm -f mem.h
10551 ;;
10552 esac
10553esac
10554set i_memory
10555eval $setvar
10556
10557: can bcopy handle overlapping blocks?
10558val="$undef"
10559case "$d_bcopy" in
10560"$define")
10561 echo " "
10562 echo "Checking to see if your bcopy() can do overlapping copies..." >&4
10563 $cat >try.c <<EOCP
10564#$i_memory I_MEMORY
10565#$i_stdlib I_STDLIB
10566#$i_string I_STRING
10567#$i_unistd I_UNISTD
10568EOCP
10569 $cat >>try.c <<'EOCP'
10570#include <stdio.h>
10571#ifdef I_MEMORY
10572# include <memory.h>
10573#endif
10574#ifdef I_STDLIB
10575# include <stdlib.h>
10576#endif
10577#ifdef I_STRING
10578# include <string.h>
10579#else
10580# include <strings.h>
10581#endif
10582#ifdef I_UNISTD
10583# include <unistd.h> /* Needed for NetBSD */
10584#endif
10585int main()
10586{
10587char buf[128], abc[128];
10588char *b;
10589int len;
10590int off;
10591int align;
10592
10593bcopy("abcdefghijklmnopqrstuvwxyz0123456789", abc, 36);
10594
10595for (align = 7; align >= 0; align--) {
10596 for (len = 36; len; len--) {
10597 b = buf+align;
10598 bcopy(abc, b, len);
10599 for (off = 1; off <= len; off++) {
10600 bcopy(b, b+off, len);
10601 bcopy(b+off, b, len);
10602 if (bcmp(b, abc, len))
10603 exit(1);
10604 }
10605 }
10606}
10607exit(0);
10608}
10609EOCP
10610 set try
10611 if eval $compile_ok; then
10612 if ./try 2>/dev/null; then
10613 echo "Yes, it can."
10614 val="$define"
10615 else
10616 echo "It can't, sorry."
10617 case "$d_memmove" in
10618 "$define") echo "But that's Ok since you have memmove()." ;;
10619 esac
10620 fi
10621 else
10622 echo "(I can't compile the test program, so we'll assume not...)"
10623 case "$d_memmove" in
10624 "$define") echo "But that's Ok since you have memmove()." ;;
10625 esac
10626 fi
10627 ;;
10628esac
10629$rm -f try.* try core
10630set d_safebcpy
10631eval $setvar
10632
10633: can memcpy handle overlapping blocks?
10634val="$undef"
10635case "$d_memcpy" in
10636"$define")
10637 echo " "
10638 echo "Checking to see if your memcpy() can do overlapping copies..." >&4
10639 $cat >try.c <<EOCP
10640#$i_memory I_MEMORY
10641#$i_stdlib I_STDLIB
10642#$i_string I_STRING
10643#$i_unistd I_UNISTD
10644EOCP
10645 $cat >>try.c <<'EOCP'
10646#include <stdio.h>
10647#ifdef I_MEMORY
10648# include <memory.h>
10649#endif
10650#ifdef I_STDLIB
10651# include <stdlib.h>
10652#endif
10653#ifdef I_STRING
10654# include <string.h>
10655#else
10656# include <strings.h>
10657#endif
10658#ifdef I_UNISTD
10659# include <unistd.h> /* Needed for NetBSD */
10660#endif
10661int main()
10662{
10663char buf[128], abc[128];
10664char *b;
10665int len;
10666int off;
10667int align;
10668
10669/* Copy "abcde..." string to char abc[] so that gcc doesn't
10670 try to store the string in read-only memory. */
10671memcpy(abc, "abcdefghijklmnopqrstuvwxyz0123456789", 36);
10672
10673for (align = 7; align >= 0; align--) {
10674 for (len = 36; len; len--) {
10675 b = buf+align;
10676 memcpy(b, abc, len);
10677 for (off = 1; off <= len; off++) {
10678 memcpy(b+off, b, len);
10679 memcpy(b, b+off, len);
10680 if (memcmp(b, abc, len))
10681 exit(1);
10682 }
10683 }
10684}
10685exit(0);
10686}
10687EOCP
10688 set try
10689 if eval $compile_ok; then
10690 if ./try 2>/dev/null; then
10691 echo "Yes, it can."
10692 val="$define"
10693 else
10694 echo "It can't, sorry."
10695 case "$d_memmove" in
10696 "$define") echo "But that's Ok since you have memmove()." ;;
10697 esac
10698 fi
10699 else
10700 echo "(I can't compile the test program, so we'll assume not...)"
10701 case "$d_memmove" in
10702 "$define") echo "But that's Ok since you have memmove()." ;;
10703 esac
10704 fi
10705 ;;
10706esac
10707$rm -f try.* try core
10708set d_safemcpy
10709eval $setvar
10710
10711: can memcmp be trusted to compare relative magnitude?
10712val="$undef"
10713case "$d_memcmp" in
10714"$define")
10715 echo " "
10716 echo "Checking if your memcmp() can compare relative magnitude..." >&4
10717 $cat >try.c <<EOCP
10718#$i_memory I_MEMORY
10719#$i_stdlib I_STDLIB
10720#$i_string I_STRING
10721#$i_unistd I_UNISTD
10722EOCP
10723 $cat >>try.c <<'EOCP'
10724#include <stdio.h>
10725#ifdef I_MEMORY
10726# include <memory.h>
10727#endif
10728#ifdef I_STDLIB
10729# include <stdlib.h>
10730#endif
10731#ifdef I_STRING
10732# include <string.h>
10733#else
10734# include <strings.h>
10735#endif
10736#ifdef I_UNISTD
10737# include <unistd.h> /* Needed for NetBSD */
10738#endif
10739int main()
10740{
10741char a = -1;
10742char b = 0;
10743if ((a < b) && memcmp(&a, &b, 1) < 0)
10744 exit(1);
10745exit(0);
10746}
10747EOCP
10748 set try
10749 if eval $compile_ok; then
10750 if ./try 2>/dev/null; then
10751 echo "Yes, it can."
10752 val="$define"
10753 else
10754 echo "No, it can't (it uses signed chars)."
10755 fi
10756 else
10757 echo "(I can't compile the test program, so we'll assume not...)"
10758 fi
10759 ;;
10760esac
10761$rm -f try.* try core
10762set d_sanemcmp
10763eval $setvar
10764
10765: see if select exists
10766set select d_select
10767eval $inlibc
10768
10769: see if semctl exists
10770set semctl d_semctl
10771eval $inlibc
10772
10773: see if semget exists
10774set semget d_semget
10775eval $inlibc
10776
10777: see if semop exists
10778set semop d_semop
10779eval $inlibc
10780
10781: see how much of the 'sem*(2)' library is present.
10782h_sem=true
10783echo " "
10784case "$d_semctl$d_semget$d_semop" in
10785*"$undef"*) h_sem=false;;
10786esac
10787case "$osname" in
10788freebsd)
10789 case "`ipcs 2>&1`" in
10790 "SVID messages"*"not configured"*)
10791 echo "Your $osname does not have the sem*(2) configured." >&4
10792 h_sem=false
10793 val="$undef"
10794 set semctl d_semctl
10795 eval $setvar
10796 set semget d_semget
10797 eval $setvar
10798 set semop d_semop
10799 eval $setvar
10800 ;;
10801 esac
10802 ;;
10803esac
10804: we could also check for sys/ipc.h ...
10805if $h_sem && $test `./findhdr sys/sem.h`; then
10806 echo "You have the full sem*(2) library." >&4
10807 val="$define"
10808else
10809 echo "You don't have the full sem*(2) library." >&4
10810 val="$undef"
10811fi
10812set d_sem
10813eval $setvar
10814
10815: see whether sys/sem.h defines union semun
10816echo " "
10817$cat > try.c <<'END'
10818#include <sys/types.h>
10819#include <sys/ipc.h>
10820#include <sys/sem.h>
10821int main () { union semun semun; semun.buf = 0; }
10822END
10823set try
10824if eval $compile; then
10825 echo "You have union semun in <sys/sem.h>." >&4
10826 val="$define"
10827else
10828 echo "You do not have union semun in <sys/sem.h>." >&4
10829 val="$undef"
10830fi
10831$rm -f try try.c try.h
10832set d_union_semun
10833eval $setvar
10834
10835: see how to do semctl IPC_STAT
10836case "$d_sem" in
10837$define)
10838 : see whether semctl IPC_STAT can use union semun
10839 echo " "
10840 $cat > try.h <<END
10841#ifndef S_IRUSR
10842# ifdef S_IREAD
10843# define S_IRUSR S_IREAD
10844# define S_IWUSR S_IWRITE
10845# define S_IXUSR S_IEXEC
10846# else
10847# define S_IRUSR 0400
10848# define S_IWUSR 0200
10849# define S_IXUSR 0100
10850# endif
10851# define S_IRGRP (S_IRUSR>>3)
10852# define S_IWGRP (S_IWUSR>>3)
10853# define S_IXGRP (S_IXUSR>>3)
10854# define S_IROTH (S_IRUSR>>6)
10855# define S_IWOTH (S_IWUSR>>6)
10856# define S_IXOTH (S_IXUSR>>6)
10857#endif
10858#ifndef S_IRWXU
10859# define S_IRWXU (S_IRUSR|S_IWUSR|S_IXUSR)
10860# define S_IRWXG (S_IRGRP|S_IWGRP|S_IXGRP)
10861# define S_IRWXO (S_IROTH|S_IWOTH|S_IXOTH)
10862#endif
10863END
10864
10865 $cat > try.c <<END
10866#include <sys/types.h>
10867#include <sys/ipc.h>
10868#include <sys/sem.h>
10869#include <sys/stat.h>
10870#include <stdio.h>
10871#include <errno.h>
10872#include "try.h"
10873#ifndef errno
10874extern int errno;
10875#endif
10876#$d_union_semun HAS_UNION_SEMUN
10877int main() {
10878 union semun
10879#ifndef HAS_UNION_SEMUN
10880 {
10881 int val;
10882 struct semid_ds *buf;
10883 unsigned short *array;
10884 }
10885#endif
10886 arg;
10887 int sem, st;
10888
10889#if defined(IPC_PRIVATE) && defined(S_IRWXU) && defined(S_IRWXG) && defined(S_IRWXO) && defined(IPC_CREAT)
10890 sem = semget(IPC_PRIVATE, 1, S_IRWXU|S_IRWXG|S_IRWXO|IPC_CREAT);
10891 if (sem > -1) {
10892 struct semid_ds argbuf;
10893 arg.buf = &argbuf;
10894# ifdef IPC_STAT
10895 st = semctl(sem, 0, IPC_STAT, arg);
10896 if (st == 0)
10897 printf("semun\n");
10898 else
10899# endif /* IPC_STAT */
10900 printf("semctl IPC_STAT failed: errno = %d\n", errno);
10901# ifdef IPC_RMID
10902 if (semctl(sem, 0, IPC_RMID, arg) != 0)
10903# endif /* IPC_RMID */
10904 printf("semctl IPC_RMID failed: errno = %d\n", errno);
10905 } else
10906#endif /* IPC_PRIVATE && ... */
10907 printf("semget failed: errno = %d\n", errno);
10908 return 0;
10909}
10910END
10911 val="$undef"
10912 set try
10913 if eval $compile; then
10914 xxx=`./try`
10915 case "$xxx" in
10916 semun) val="$define" ;;
10917 esac
10918 fi
10919 $rm -f try try.c
10920 set d_semctl_semun
10921 eval $setvar
10922 case "$d_semctl_semun" in
10923 $define)
10924 echo "You can use union semun for semctl IPC_STAT." >&4
10925 also='also'
10926 ;;
10927 *) echo "You cannot use union semun for semctl IPC_STAT." >&4
10928 also=''
10929 ;;
10930 esac
10931
10932 : see whether semctl IPC_STAT can use struct semid_ds pointer
10933 $cat > try.c <<'END'
10934#include <sys/types.h>
10935#include <sys/ipc.h>
10936#include <sys/sem.h>
10937#include <sys/stat.h>
10938#include "try.h"
10939#include <stdio.h>
10940#include <errno.h>
10941#ifndef errno
10942extern int errno;
10943#endif
10944int main() {
10945 struct semid_ds arg;
10946 int sem, st;
10947
10948#if defined(IPC_PRIVATE) && defined(S_IRWXU) && defined(S_IRWXG) && defined(S_IRWXO) && defined(IPC_CREAT)
10949 sem = semget(IPC_PRIVATE, 1, S_IRWXU|S_IRWXG|S_IRWXO|IPC_CREAT);
10950 if (sem > -1) {
10951# ifdef IPC_STAT
10952 st = semctl(sem, 0, IPC_STAT, &arg);
10953 if (st == 0)
10954 printf("semid_ds\n");
10955 else
10956# endif /* IPC_STAT */
10957 printf("semctl IPC_STAT failed: errno = %d\n", errno);
10958# ifdef IPC_RMID
10959 if (semctl(sem, 0, IPC_RMID, &arg) != 0)
10960# endif /* IPC_RMID */
10961 printf("semctl IPC_RMID failed: errno = %d\n", errno);
10962 } else
10963#endif /* IPC_PRIVATE && ... */
10964 printf("semget failed: errno = %d\n", errno);
10965
10966 return 0;
10967}
10968END
10969 val="$undef"
10970 set try
10971 if eval $compile; then
10972 xxx=`./try`
10973 case "$xxx" in
10974 semid_ds) val="$define" ;;
10975 esac
10976 fi
10977 $rm -f try try.c
10978 set d_semctl_semid_ds
10979 eval $setvar
10980 case "$d_semctl_semid_ds" in
10981 $define)
10982 echo "You can $also use struct semid_ds* for semctl IPC_STAT." >&4
10983 ;;
10984 *) echo "You cannot use struct semid_ds* for semctl IPC_STAT." >&4
10985 ;;
10986 esac
10987 $rm -f try.h
10988 ;;
10989*) val="$undef"
10990
10991 # We do not have the full sem*(2) library, so assume we can not
10992 # use either.
10993
10994 set d_semctl_semun
10995 eval $setvar
10996
10997 set d_semctl_semid_ds
10998 eval $setvar
10999 ;;
11000esac
11001
11002: see if setegid exists
11003set setegid d_setegid
11004eval $inlibc
11005
11006: see if seteuid exists
11007set seteuid d_seteuid
11008eval $inlibc
11009
11010: see if setgrent exists
11011set setgrent d_setgrent
11012eval $inlibc
11013
11014: see if sethostent exists
11015set sethostent d_sethent
11016eval $inlibc
11017
11018: see if setlinebuf exists
11019set setlinebuf d_setlinebuf
11020eval $inlibc
11021
11022: see if setlocale exists
11023set setlocale d_setlocale
11024eval $inlibc
11025
11026: see if setnetent exists
11027set setnetent d_setnent
11028eval $inlibc
11029
11030: see if setprotoent exists
11031set setprotoent d_setpent
11032eval $inlibc
11033
11034: see if setpgid exists
11035set setpgid d_setpgid
11036eval $inlibc
11037
11038: see if setpgrp2 exists
11039set setpgrp2 d_setpgrp2
11040eval $inlibc
11041
11042: see if setpriority exists
11043set setpriority d_setprior
11044eval $inlibc
11045
11046: see if setproctitle exists
11047set setproctitle d_setproctitle
11048eval $inlibc
11049
11050: see if setpwent exists
11051set setpwent d_setpwent
11052eval $inlibc
11053
11054: see if setregid exists
11055set setregid d_setregid
11056eval $inlibc
11057set setresgid d_setresgid
11058eval $inlibc
11059
11060: see if setreuid exists
11061set setreuid d_setreuid
11062eval $inlibc
11063set setresuid d_setresuid
11064eval $inlibc
11065
11066: see if setrgid exists
11067set setrgid d_setrgid
11068eval $inlibc
11069
11070: see if setruid exists
11071set setruid d_setruid
11072eval $inlibc
11073
11074: see if setservent exists
11075set setservent d_setsent
11076eval $inlibc
11077
11078: see if setsid exists
11079set setsid d_setsid
11080eval $inlibc
11081
11082: see if setvbuf exists
11083set setvbuf d_setvbuf
11084eval $inlibc
11085
11086: see if sfio.h is available
11087set sfio.h i_sfio
11088eval $inhdr
11089
11090
11091: see if sfio library is available
11092case "$i_sfio" in
11093$define)
11094 val=''
11095 set sfreserve val
11096 eval $inlibc
11097 ;;
11098*)
11099 val="$undef"
11100 ;;
11101esac
11102: Ok, but do we want to use it.
11103case "$val" in
11104$define)
11105 case "$usesfio" in
11106 true|$define|[yY]*) dflt='y';;
11107 *) dflt='n';;
11108 esac
11109 echo "$package can use the sfio library, but it is experimental."
11110 case "$useperlio" in
11111 "$undef")
11112 echo "For sfio also the PerlIO abstraction layer is needed."
11113 echo "Earlier you said you wouldn't want that."
11114 ;;
11115 esac
11116 rp="You seem to have sfio available, do you want to try using it?"
11117 . ./myread
11118 case "$ans" in
11119 y|Y) echo "Ok, turning on both sfio and PerlIO, then."
11120 useperlio="$define"
11121 val="$define"
11122 ;;
11123 *) echo "Ok, avoiding sfio this time. I'll use stdio instead."
11124 val="$undef"
11125 : Remove sfio from list of libraries to use
11126 set `echo X $libs | $sed -e 's/-lsfio / /' -e 's/-lsfio$//'`
11127 shift
11128 libs="$*"
11129 echo "libs = $libs" >&4
11130 ;;
11131 esac
11132 ;;
11133*) case "$usesfio" in
11134 true|$define|[yY]*)
11135 echo "Sorry, cannot find sfio on this machine." >&4
11136 echo "Ignoring your setting of usesfio=$usesfio." >&4
11137 val="$undef"
11138 ;;
11139 esac
11140 ;;
11141esac
11142set d_sfio
11143eval $setvar
11144case "$d_sfio" in
11145$define) usesfio='true';;
11146*) usesfio='false';;
11147esac
11148
11149: see if shmctl exists
11150set shmctl d_shmctl
11151eval $inlibc
11152
11153: see if shmget exists
11154set shmget d_shmget
11155eval $inlibc
11156
11157: see if shmat exists
11158set shmat d_shmat
11159eval $inlibc
11160: see what shmat returns
11161case "$d_shmat" in
11162"$define")
11163 $cat >shmat.c <<'END'
11164#include <sys/shm.h>
11165void *shmat();
11166END
11167 if $cc $ccflags -c shmat.c >/dev/null 2>&1; then
11168 shmattype='void *'
11169 else
11170 shmattype='char *'
11171 fi
11172 echo "and it returns ($shmattype)." >&4
11173 : see if a prototype for shmat is available
11174 xxx=`./findhdr sys/shm.h`
11175 $cppstdin $cppflags $cppminus < $xxx > shmat.c 2>/dev/null
11176 if $contains 'shmat.*(' shmat.c >/dev/null 2>&1; then
11177 val="$define"
11178 else
11179 val="$undef"
11180 fi
11181 $rm -f shmat.[co]
11182 ;;
11183*)
11184 val="$undef"
11185 ;;
11186esac
11187set d_shmatprototype
11188eval $setvar
11189
11190: see if shmdt exists
11191set shmdt d_shmdt
11192eval $inlibc
11193
11194: see how much of the 'shm*(2)' library is present.
11195h_shm=true
11196echo " "
11197case "$d_shmctl$d_shmget$d_shmat$d_shmdt" in
11198*"$undef"*) h_shm=false;;
11199esac
11200case "$osname" in
11201freebsd)
11202 case "`ipcs 2>&1`" in
11203 "SVID shared memory"*"not configured"*)
11204 echo "Your $osname does not have the shm*(2) configured." >&4
11205 h_shm=false
11206 val="$undef"
11207 set shmctl d_shmctl
11208 evat $setvar
11209 set shmget d_shmget
11210 evat $setvar
11211 set shmat d_shmat
11212 evat $setvar
11213 set shmdt d_shmdt
11214 evat $setvar
11215 ;;
11216 esac
11217 ;;
11218esac
11219: we could also check for sys/ipc.h ...
11220if $h_shm && $test `./findhdr sys/shm.h`; then
11221 echo "You have the full shm*(2) library." >&4
11222 val="$define"
11223else
11224 echo "You don't have the full shm*(2) library." >&4
11225 val="$undef"
11226fi
11227set d_shm
11228eval $setvar
11229
11230echo " "
11231: see if we have sigaction
11232if set sigaction val -f d_sigaction; eval $csym; $val; then
11233 echo 'sigaction() found.' >&4
11234 $cat > try.c <<'EOP'
11235#include <stdio.h>
11236#include <sys/types.h>
11237#include <signal.h>
11238int main()
11239{
11240 struct sigaction act, oact;
11241 act.sa_flags = 0;
11242 oact.sa_handler = 0;
11243 /* so that act and oact are used */
11244 exit(act.sa_flags == 0 && oact.sa_handler == 0);
11245}
11246EOP
11247 set try
11248 if eval $compile_ok; then
11249 val="$define"
11250 else
11251 echo "But you don't seem to have a useable struct sigaction." >&4
11252 val="$undef"
11253 fi
11254else
11255 echo 'sigaction NOT found.' >&4
11256 val="$undef"
11257fi
11258set d_sigaction; eval $setvar
11259$rm -f try try$_o try.c
11260
11261: see if sigsetjmp exists
11262echo " "
11263case "$d_sigsetjmp" in
11264'')
11265 $cat >try.c <<'EOP'
11266#include <setjmp.h>
11267sigjmp_buf env;
11268int set = 1;
11269int main()
11270{
11271 if (sigsetjmp(env,1))
11272 exit(set);
11273 set = 0;
11274 siglongjmp(env, 1);
11275 exit(1);
11276}
11277EOP
11278 set try
11279 if eval $compile; then
11280 if ./try >/dev/null 2>&1; then
11281 echo "POSIX sigsetjmp found." >&4
11282 val="$define"
11283 else
11284 $cat >&4 <<EOM
11285Uh-Oh! You have POSIX sigsetjmp and siglongjmp, but they do not work properly!!
11286I'll ignore them.
11287EOM
11288 val="$undef"
11289 fi
11290 else
11291 echo "sigsetjmp not found." >&4
11292 val="$undef"
11293 fi
11294 ;;
11295*) val="$d_sigsetjmp"
11296 case "$d_sigsetjmp" in
11297 $define) echo "POSIX sigsetjmp found." >&4;;
11298 $undef) echo "sigsetjmp not found." >&4;;
11299 esac
11300 ;;
11301esac
11302set d_sigsetjmp
11303eval $setvar
11304$rm -f try.c try
11305
11306: see if socks5_init exists
11307set socks5_init d_socks5_init
11308eval $inlibc
11309
11310: see if sys/stat.h is available
11311set sys/stat.h i_sysstat
11312eval $inhdr
11313
11314
11315: see if stat knows about block sizes
11316echo " "
11317echo "Checking to see if your struct stat has st_blocks field..." >&4
11318set d_statblks stat st_blocks $i_sysstat sys/stat.h
11319eval $hasfield
11320
11321
11322: see if this is a sys/vfs.h system
11323set sys/vfs.h i_sysvfs
11324eval $inhdr
11325
11326
11327: see if this is a sys/statfs.h system
11328set sys/statfs.h i_sysstatfs
11329eval $inhdr
11330
11331
11332echo " "
11333echo "Checking to see if your system supports struct statfs..." >&4
11334set d_statfs_s statfs $i_systypes sys/types.h $i_sysparam sys/param.h $i_sysmount sys/mount.h $i_sysvfs sys/vfs.h $i_sysstatfs sys/statfs.h
11335eval $hasstruct
11336case "$d_statfs_s" in
11337"$define") echo "Yes, it does." ;;
11338*) echo "No, it doesn't." ;;
11339esac
11340
11341
11342
11343: see if struct statfs knows about f_flags
11344case "$d_statfs_s" in
11345define)
11346 echo " "
11347 echo "Checking to see if your struct statfs has f_flags field..." >&4
11348 set d_statfs_f_flags statfs f_flags $i_systypes sys/types.h $i_sysparam sys/param.h $i_sysmount sys/mount.h $i_sysvfs sys/vfs.h $i_sysstatfs sys/statfs.h
11349 eval $hasfield
11350 ;;
11351*) val="$undef"
11352 set d_statfs_f_flags
11353 eval $setvar
11354 ;;
11355esac
11356case "$d_statfs_f_flags" in
11357"$define") echo "Yes, it does." ;;
11358*) echo "No, it doesn't." ;;
11359esac
11360
11361: see if _ptr and _cnt from stdio act std
11362echo " "
11363if $contains '_IO_fpos_t' `./findhdr stdio.h` `./findhdr libio.h` >/dev/null 2>&1 ; then
11364 echo "(Looks like you have stdio.h from Linux.)"
11365 case "$stdio_ptr" in
11366 '') stdio_ptr='((fp)->_IO_read_ptr)'
11367 ptr_lval=$define
11368 ;;
11369 *) ptr_lval=$d_stdio_ptr_lval;;
11370 esac
11371 case "$stdio_cnt" in
11372 '') stdio_cnt='((fp)->_IO_read_end - (fp)->_IO_read_ptr)'
11373 cnt_lval=$undef
11374 ;;
11375 *) cnt_lval=$d_stdio_cnt_lval;;
11376 esac
11377 case "$stdio_base" in
11378 '') stdio_base='((fp)->_IO_read_base)';;
11379 esac
11380 case "$stdio_bufsiz" in
11381 '') stdio_bufsiz='((fp)->_IO_read_end - (fp)->_IO_read_base)';;
11382 esac
11383else
11384 case "$stdio_ptr" in
11385 '') stdio_ptr='((fp)->_ptr)'
11386 ptr_lval=$define
11387 ;;
11388 *) ptr_lval=$d_stdio_ptr_lval;;
11389 esac
11390 case "$stdio_cnt" in
11391 '') stdio_cnt='((fp)->_cnt)'
11392 cnt_lval=$define
11393 ;;
11394 *) cnt_lval=$d_stdio_cnt_lval;;
11395 esac
11396 case "$stdio_base" in
11397 '') stdio_base='((fp)->_base)';;
11398 esac
11399 case "$stdio_bufsiz" in
11400 '') stdio_bufsiz='((fp)->_cnt + (fp)->_ptr - (fp)->_base)';;
11401 esac
11402fi
11403: test whether _ptr and _cnt really work
11404echo "Checking how std your stdio is..." >&4
11405$cat >try.c <<EOP
11406#include <stdio.h>
11407#define FILE_ptr(fp) $stdio_ptr
11408#define FILE_cnt(fp) $stdio_cnt
11409int main() {
11410 FILE *fp = fopen("try.c", "r");
11411 char c = getc(fp);
11412 if (
11413 18 <= FILE_cnt(fp) &&
11414 strncmp(FILE_ptr(fp), "include <stdio.h>\n", 18) == 0
11415 )
11416 exit(0);
11417 exit(1);
11418}
11419EOP
11420val="$undef"
11421set try
11422if eval $compile; then
11423 if ./try; then
11424 echo "Your stdio acts pretty std."
11425 val="$define"
11426 else
11427 echo "Your stdio isn't very std."
11428 fi
11429else
11430 echo "Your stdio doesn't appear very std."
11431fi
11432$rm -f try.c try
11433set d_stdstdio
11434eval $setvar
11435
11436: Can _ptr be used as an lvalue?
11437case "$d_stdstdio$ptr_lval" in
11438$define$define) val=$define ;;
11439*) val=$undef ;;
11440esac
11441set d_stdio_ptr_lval
11442eval $setvar
11443
11444: Can _cnt be used as an lvalue?
11445case "$d_stdstdio$cnt_lval" in
11446$define$define) val=$define ;;
11447*) val=$undef ;;
11448esac
11449set d_stdio_cnt_lval
11450eval $setvar
11451
11452: see if _base is also standard
11453val="$undef"
11454case "$d_stdstdio" in
11455$define)
11456 $cat >try.c <<EOP
11457#include <stdio.h>
11458#define FILE_base(fp) $stdio_base
11459#define FILE_bufsiz(fp) $stdio_bufsiz
11460int main() {
11461 FILE *fp = fopen("try.c", "r");
11462 char c = getc(fp);
11463 if (
11464 19 <= FILE_bufsiz(fp) &&
11465 strncmp(FILE_base(fp), "#include <stdio.h>\n", 19) == 0
11466 )
11467 exit(0);
11468 exit(1);
11469}
11470EOP
11471 set try
11472 if eval $compile; then
11473 if ./try; then
11474 echo "And its _base field acts std."
11475 val="$define"
11476 else
11477 echo "But its _base field isn't std."
11478 fi
11479 else
11480 echo "However, it seems to be lacking the _base field."
11481 fi
11482 $rm -f try.c try
11483 ;;
11484esac
11485set d_stdiobase
11486eval $setvar
11487
11488$cat >&4 <<EOM
11489Checking how to access stdio streams by file descriptor number...
11490EOM
11491case "$stdio_stream_array" in
11492'') $cat >try.c <<EOCP
11493#include <stdio.h>
11494int main() {
11495 if (&STDIO_STREAM_ARRAY[fileno(stdin)] == stdin)
11496 printf("yes\n");
11497}
11498EOCP
11499 for s in _iob __iob __sF
11500 do
11501 set try -DSTDIO_STREAM_ARRAY=$s
11502 if eval $compile; then
11503 case "`./try$exe_ext`" in
11504 yes) stdio_stream_array=$s; break ;;
11505 esac
11506 fi
11507 done
11508 $rm -f try.* try$exe_ext
11509esac
11510case "$stdio_stream_array" in
11511'') $cat >&4 <<EOM
11512I can't figure out how to access stdio streams by file descriptor number.
11513EOM
11514 d_stdio_stream_array="$undef"
11515 ;;
11516*) $cat >&4 <<EOM
11517You can access stdio streams by file descriptor number by the $stdio_stream_array array.
11518EOM
11519 d_stdio_stream_array="$define"
11520 ;;
11521esac
11522
11523: see if strcoll exists
11524set strcoll d_strcoll
11525eval $inlibc
11526
11527: check for structure copying
11528echo " "
11529echo "Checking to see if your C compiler can copy structs..." >&4
11530$cat >try.c <<'EOCP'
11531int main()
11532{
11533 struct blurfl {
11534 int dyick;
11535 } foo, bar;
11536
11537 foo = bar;
11538}
11539EOCP
11540if $cc -c try.c >/dev/null 2>&1 ; then
11541 val="$define"
11542 echo "Yup, it can."
11543else
11544 val="$undef"
11545 echo "Nope, it can't."
11546fi
11547set d_strctcpy
11548eval $setvar
11549$rm -f try.*
11550
11551: see if strerror and/or sys_errlist[] exist
11552echo " "
11553if test "X$d_strerror" = X -o "X$d_syserrlst" = X; then
11554 if set strerror val -f d_strerror; eval $csym; $val; then
11555 echo 'strerror() found.' >&4
11556 d_strerror="$define"
11557 d_strerrm='strerror(e)'
11558 if set sys_errlist val -a d_syserrlst; eval $csym; $val; then
11559 echo "(You also have sys_errlist[], so we could roll our own strerror.)"
11560 d_syserrlst="$define"
11561 else
11562 echo "(Since you don't have sys_errlist[], sterror() is welcome.)"
11563 d_syserrlst="$undef"
11564 fi
11565 elif xxx=`./findhdr string.h`; test "$xxx" || xxx=`./findhdr strings.h`; \
11566 $contains '#[ ]*define.*strerror' "$xxx" >/dev/null 2>&1; then
11567 echo 'strerror() found in string header.' >&4
11568 d_strerror="$define"
11569 d_strerrm='strerror(e)'
11570 if set sys_errlist val -a d_syserrlst; eval $csym; $val; then
11571 echo "(Most probably, strerror() uses sys_errlist[] for descriptions.)"
11572 d_syserrlst="$define"
11573 else
11574 echo "(You don't appear to have any sys_errlist[], how can this be?)"
11575 d_syserrlst="$undef"
11576 fi
11577 elif set sys_errlist val -a d_syserrlst; eval $csym; $val; then
11578 echo "strerror() not found, but you have sys_errlist[] so we'll use that." >&4
11579 d_strerror="$undef"
11580 d_syserrlst="$define"
11581 d_strerrm='((e)<0||(e)>=sys_nerr?"unknown":sys_errlist[e])'
11582 else
11583 echo 'strerror() and sys_errlist[] NOT found.' >&4
11584 d_strerror="$undef"
11585 d_syserrlst="$undef"
11586 d_strerrm='"unknown"'
11587 fi
11588fi
11589
11590: see if strtod exists
11591set strtod d_strtod
11592eval $inlibc
11593
11594: see if strtol exists
11595set strtol d_strtol
11596eval $inlibc
11597
11598: see if strtold exists
11599set strtold d_strtold
11600eval $inlibc
11601
11602: see if strtoll exists
11603set strtoll d_strtoll
11604eval $inlibc
11605
11606case "$d_longlong-$d_strtoll" in
11607"$define-$define")
11608 $cat <<EOM
11609Checking whether your strtoll() works okay...
11610EOM
11611 $cat >try.c <<'EOCP'
11612#include <errno.h>
11613#ifdef __hpux
11614#define strtoll __strtoll
11615#endif
e75931a7
YST
11616#ifdef __EMX__
11617#define strtoll _strtoll
11618#endif
b4eb6b3d
JH
11619#include <stdio.h>
11620extern long long int strtoll(char *s, char **, int);
11621static int bad = 0;
11622int check(char *s, long long ell, int een) {
11623 long long gll;
11624 errno = 0;
11625 gll = strtoll(s, 0, 10);
11626 if (!((gll == ell) && (errno == een)))
11627 bad++;
11628}
11629int main() {
11630 check(" 1", 1LL, 0);
11631 check(" 0", 0LL, 0);
11632 check("-1", -1LL, 0);
11633 check("-9223372036854775808", -9223372036854775808LL, 0);
11634 check("-9223372036854775808", -9223372036854775808LL, 0);
11635 check(" 9223372036854775807", 9223372036854775807LL, 0);
11636 check("-9223372036854775808", -9223372036854775808LL, 0);
11637 check(" 9223372036854775808", 9223372036854775807LL, ERANGE);
11638 check("-9223372036854775809", -9223372036854775808LL, ERANGE);
11639 if (!bad)
11640 printf("ok\n");
11641}
11642EOCP
11643 set try
11644 if eval $compile; then
e75931a7
YST
11645 yyy=`./try`
11646 case "$yyy" in
b4eb6b3d
JH
11647 ok) echo "Your strtoll() seems to be working okay." ;;
11648 *) cat <<EOM >&4
11649Your strtoll() doesn't seem to be working okay.
11650EOM
11651 d_strtoll="$undef"
11652 ;;
69eadf66 11653 esac
e75931a7
YST
11654 else
11655 echo "(I can't seem to compile the test program--assuming it doesn't)"
11656 d_strtoll="$undef"
b4eb6b3d
JH
11657 fi
11658 ;;
11659esac
11660
11661: see if strtoul exists
11662set strtoul d_strtoul
11663eval $inlibc
11664
11665: see if strtoull exists
11666set strtoull d_strtoull
11667eval $inlibc
11668
11669case "$d_longlong-$d_strtoull" in
11670"$define-$define")
11671 $cat <<EOM
11672Checking whether your strtoull() works okay...
11673EOM
11674 $cat >try.c <<'EOCP'
11675#include <errno.h>
11676#ifdef __hpux
11677#define strtoull __strtoull
11678#endif
11679#include <stdio.h>
11680extern unsigned long long int strtoull(char *s, char **, int);
11681static int bad = 0;
11682int check(char *s, long long eull, int een) {
11683 long long gull;
11684 errno = 0;
11685 gull = strtoull(s, 0, 10);
11686 if (!((gull == eull) && (errno == een)))
11687 bad++;
11688}
11689int main() {
11690 check(" 1", 1LL, 0);
11691 check(" 0", 0LL, 0);
11692 check("18446744073709551615", 18446744073709551615ULL, 0);
11693 check("18446744073709551616", 18446744073709551615ULL, ERANGE);
11694 if (!bad)
11695 printf("ok\n");
11696}
11697EOCP
11698 set try
11699 if eval $compile; then
11700 case "`./try`" in
11701 ok) echo "Your strtoull() seems to be working okay." ;;
11702 *) cat <<EOM >&4
11703Your strtoull() doesn't seem to be working okay.
11704EOM
11705 d_strtoull="$undef"
11706 ;;
11707 esac
11708 fi
11709 ;;
11710esac
11711
11712: see if strtouq exists
11713set strtouq d_strtouq
11714eval $inlibc
11715
11716: see if strxfrm exists
11717set strxfrm d_strxfrm
11718eval $inlibc
11719
11720: see if symlink exists
11721set symlink d_symlink
11722eval $inlibc
11723
11724: see if syscall exists
11725set syscall d_syscall
11726eval $inlibc
11727
11728: see if sysconf exists
11729set sysconf d_sysconf
11730eval $inlibc
11731
11732: see if system exists
11733set system d_system
11734eval $inlibc
11735
11736: see if tcgetpgrp exists
11737set tcgetpgrp d_tcgetpgrp
11738eval $inlibc
11739
11740: see if tcsetpgrp exists
11741set tcsetpgrp d_tcsetpgrp
11742eval $inlibc
11743
11744: see if prototype for telldir is available
11745echo " "
11746set d_telldirproto telldir $i_systypes sys/types.h $i_dirent dirent.h
11747eval $hasproto
11748
11749: see if this is a sys/times.h system
11750set sys/times.h i_systimes
11751eval $inhdr
11752
11753: see if times exists
11754echo " "
11755if set times val -f d_times; eval $csym; $val; then
11756 echo 'times() found.' >&4
11757 d_times="$define"
11758 inc=''
11759 case "$i_systimes" in
11760 "$define") inc='sys/times.h';;
11761 esac
11762 rp="What is the type returned by times() on this system?"
11763 set clock_t clocktype long stdio.h sys/types.h $inc
11764 eval $typedef_ask
11765else
11766 echo 'times() NOT found, hope that will do.' >&4
11767 d_times="$undef"
11768 clocktype='int'
11769fi
11770
11771: see if truncate exists
11772set truncate d_truncate
11773eval $inlibc
11774
11775: see if tzname[] exists
11776echo " "
11777if set tzname val -a d_tzname; eval $csym; $val; then
11778 val="$define"
11779 echo 'tzname[] found.' >&4
11780else
11781 val="$undef"
11782 echo 'tzname[] NOT found.' >&4
11783fi
11784set d_tzname
11785eval $setvar
11786
11787: see if umask exists
11788set umask d_umask
11789eval $inlibc
11790
11791: see if ustat exists
11792set ustat d_ustat
11793eval $inlibc
11794
11795: backward compatibility for d_hvfork
11796if test X$d_hvfork != X; then
11797 d_vfork="$d_hvfork"
11798 d_hvfork=''
11799fi
11800: see if there is a vfork
11801val=''
11802set vfork val
11803eval $inlibc
11804
11805: Ok, but do we want to use it. vfork is reportedly unreliable in
11806: perl on Solaris 2.x, and probably elsewhere.
11807case "$val" in
11808$define)
11809 echo " "
11810 case "$usevfork" in
11811 false) dflt='n';;
11812 *) dflt='y';;
11813 esac
11814 cat <<'EOM'
11815
11816Perl can only use a vfork() that doesn't suffer from strict
11817restrictions on calling functions or modifying global data in
11818the child. For example, glibc-2.1 contains such a vfork()
11819that is unsuitable. If your system provides a proper fork()
11820call, chances are that you do NOT want perl to use vfork().
11821
11822EOM
11823 rp="Do you still want to use vfork()?"
11824 . ./myread
11825 case "$ans" in
11826 y|Y) ;;
11827 *)
11828 echo "Ok, we won't use vfork()."
11829 val="$undef"
11830 ;;
11831 esac
11832 ;;
11833esac
11834set d_vfork
11835eval $setvar
11836case "$d_vfork" in
11837$define) usevfork='true';;
11838*) usevfork='false';;
11839esac
11840
11841: see if this is an sysdir system
11842set sys/dir.h i_sysdir
11843eval $inhdr
11844
11845: see if this is an sysndir system
11846set sys/ndir.h i_sysndir
11847eval $inhdr
11848
11849: see if closedir exists
11850set closedir d_closedir
11851eval $inlibc
11852
11853case "$d_closedir" in
11854"$define")
11855 echo " "
11856 echo "Checking whether closedir() returns a status..." >&4
11857 cat > closedir.c <<EOM
11858#$i_dirent I_DIRENT /**/
11859#$i_sysdir I_SYS_DIR /**/
11860#$i_sysndir I_SYS_NDIR /**/
11861#$i_systypes I_SYS_TYPES /**/
11862
11863#if defined(I_SYS_TYPES)
11864#include <sys/types.h>
11865#endif
11866#if defined(I_DIRENT)
11867#include <dirent.h>
11868#if defined(NeXT) && defined(I_SYS_DIR) /* NeXT needs dirent + sys/dir.h */
11869#include <sys/dir.h>
11870#endif
11871#else
11872#ifdef I_SYS_NDIR
11873#include <sys/ndir.h>
11874#else
11875#ifdef I_SYS_DIR
11876#ifdef hp9000s500
11877#include <ndir.h> /* may be wrong in the future */
11878#else
11879#include <sys/dir.h>
11880#endif
11881#endif
11882#endif
11883#endif
11884int main() { return closedir(opendir(".")); }
11885EOM
11886 set closedir
11887 if eval $compile_ok; then
11888 if ./closedir > /dev/null 2>&1 ; then
11889 echo "Yes, it does."
11890 val="$undef"
11891 else
11892 echo "No, it doesn't."
11893 val="$define"
11894 fi
11895 else
11896 echo "(I can't seem to compile the test program--assuming it doesn't)"
11897 val="$define"
11898 fi
11899 ;;
11900*)
11901 val="$undef";
11902 ;;
11903esac
11904set d_void_closedir
11905eval $setvar
11906$rm -f closedir*
11907: check for volatile keyword
11908echo " "
11909echo 'Checking to see if your C compiler knows about "volatile"...' >&4
11910$cat >try.c <<'EOCP'
11911int main()
11912{
11913 typedef struct _goo_struct goo_struct;
11914 goo_struct * volatile goo = ((goo_struct *)0);
11915 struct _goo_struct {
11916 long long_int;
11917 int reg_int;
11918 char char_var;
11919 };
11920 typedef unsigned short foo_t;
11921 char *volatile foo;
11922 volatile int bar;
11923 volatile foo_t blech;
11924 foo = foo;
11925}
11926EOCP
11927if $cc -c $ccflags try.c >/dev/null 2>&1 ; then
11928 val="$define"
11929 echo "Yup, it does."
11930else
11931 val="$undef"
11932 echo "Nope, it doesn't."
11933fi
11934set d_volatile
11935eval $setvar
11936$rm -f try.*
11937
11938: see if there is a wait4
11939set wait4 d_wait4
11940eval $inlibc
11941
11942: see if waitpid exists
11943set waitpid d_waitpid
11944eval $inlibc
11945
11946: see if wcstombs exists
11947set wcstombs d_wcstombs
11948eval $inlibc
11949
11950: see if wctomb exists
11951set wctomb d_wctomb
11952eval $inlibc
11953
11954: preserve RCS keywords in files with variable substitution, grrr
11955Date='$Date'
11956Id='$Id'
11957Log='$Log'
11958RCSfile='$RCSfile'
11959Revision='$Revision'
11960
11961case "$crosscompile" in
11962''|[nN]*) crosscompile="$undef" ;;
11963esac
11964
11965case "$osname" in
11966next|rhapsody|darwin) multiarch="$define" ;;
11967esac
11968case "$multiarch" in
11969''|[nN]*) multiarch="$undef" ;;
11970esac
11971
11972: check for alignment requirements
11973echo " "
11974case "$crosscompile$multiarch" in
11975*$define*)
11976 $cat <<EOM
11977You seem to be either cross-compiling or doing a multiarchitecture build,
11978skipping the memory alignment check.
11979
11980EOM
11981 case "$alignbytes" in
11982 '') alignbytes=8 ;;
11983 esac
11984 ;;
11985*)
11986 case "$alignbytes" in
11987 '') echo "Checking alignment constraints..." >&4
11988 if $test "X$uselongdouble" = Xdefine -a "X$d_longdbl" = Xdefine; then
11989 $cat >try.c <<'EOCP'
11990typedef long double NV;
11991EOCP
11992 else
11993 $cat >try.c <<'EOCP'
11994typedef double NV;
11995EOCP
11996 fi
11997 $cat >>try.c <<'EOCP'
11998#include <stdio.h>
11999struct foobar {
12000 char foo;
12001 NV bar;
12002} try_algn;
12003int main()
12004{
12005 printf("%d\n", (int)((char *)&try_algn.bar - (char *)&try_algn.foo));
12006 return(0);
12007}
12008EOCP
12009 set try
12010 if eval $compile_ok; then
12011 dflt=`./try`
12012 else
12013 dflt='8'
12014 echo "(I can't seem to compile the test program...)"
12015 fi
12016 ;;
12017 *) dflt="$alignbytes"
12018 ;;
12019 esac
12020 rp="Doubles must be aligned on a how-many-byte boundary?"
12021 . ./myread
12022 alignbytes="$ans"
12023 $rm -f try.c try
12024 ;;
12025esac
12026
12027
12028: set the base revision
12029baserev=5.0
12030
12031: check for ordering of bytes in a long
12032echo " "
12033case "$crosscompile$multiarch" in
12034*$define*)
12035 $cat <<EOM
12036You seem to be either cross-compiling or doing a multiarchitecture build,
12037skipping the byteorder check.
12038
12039EOM
12040 byteorder='0xffff'
12041 ;;
12042*)
12043 case "$byteorder" in
12044 '')
12045 $cat <<'EOM'
12046In the following, larger digits indicate more significance. A big-endian
12047machine like a Pyramid or a Motorola 680?0 chip will come out to 4321. A
12048little-endian machine like a Vax or an Intel 80?86 chip would be 1234. Other
12049machines may have weird orders like 3412. A Cray will report 87654321,
12050an Alpha will report 12345678. If the test program works the default is
12051probably right.
12052I'm now running the test program...
12053EOM
12054 $cat >try.c <<'EOCP'
12055#include <stdio.h>
12056int main()
12057{
12058 int i;
12059 union {
12060 unsigned long l;
12061 char c[sizeof(long)];
12062 } u;
12063
12064 if (sizeof(long) > 4)
12065 u.l = (0x08070605L << 32) | 0x04030201L;
12066 else
12067 u.l = 0x04030201L;
12068 for (i = 0; i < sizeof(long); i++)
12069 printf("%c", u.c[i]+'0');
12070 printf("\n");
12071 exit(0);
12072}
12073EOCP
12074 xxx_prompt=y
12075 set try
12076 if eval $compile && ./try > /dev/null; then
12077 dflt=`./try`
12078 case "$dflt" in
12079 [1-4][1-4][1-4][1-4]|12345678|87654321)
12080 echo "(The test program ran ok.)"
12081 echo "byteorder=$dflt"
12082 xxx_prompt=n
12083 ;;
12084 ????|????????) echo "(The test program ran ok.)" ;;
12085 *) echo "(The test program didn't run right for some reason.)" ;;
12086 esac
12087 else
12088 dflt='4321'
12089 cat <<'EOM'
12090(I can't seem to compile the test program. Guessing big-endian...)
12091EOM
12092 fi
12093 case "$xxx_prompt" in
12094 y)
12095 rp="What is the order of bytes in a long?"
12096 . ./myread
12097 byteorder="$ans"
12098 ;;
12099 *) byteorder=$dflt
12100 ;;
12101 esac
12102 ;;
12103 esac
12104 $rm -f try.c try
12105 ;;
12106esac
12107
12108
12109: how do we catenate cpp tokens here?
12110echo " "
12111echo "Checking to see how your cpp does stuff like catenate tokens..." >&4
12112$cat >cpp_stuff.c <<'EOCP'
12113#define RCAT(a,b)a/**/b
12114#define ACAT(a,b)a ## b
12115RCAT(Rei,ser)
12116ACAT(Cir,cus)
12117EOCP
12118$cppstdin $cppflags $cppminus <cpp_stuff.c >cpp_stuff.out 2>&1
12119if $contains 'Circus' cpp_stuff.out >/dev/null 2>&1; then
12120 echo "Oh! Smells like ANSI's been here." >&4
12121 echo "We can catify or stringify, separately or together!"
12122 cpp_stuff=42
12123elif $contains 'Reiser' cpp_stuff.out >/dev/null 2>&1; then
12124 echo "Ah, yes! The good old days!" >&4
12125 echo "However, in the good old days we don't know how to stringify and"
12126 echo "catify at the same time."
12127 cpp_stuff=1
12128else
12129 $cat >&4 <<EOM
12130Hmm, I don't seem to be able to catenate tokens with your cpp. You're going
12131to have to edit the values of CAT[2-5] in config.h...
12132EOM
12133 cpp_stuff="/* Help! How do we handle cpp_stuff? */*/"
12134fi
12135$rm -f cpp_stuff.*
12136
12137: see if this is a db.h system
12138set db.h i_db
12139eval $inhdr
12140
12141case "$i_db" in
12142$define)
12143 : Check db version.
12144 echo " "
12145 echo "Checking Berkeley DB version ..." >&4
12146 $cat >try.c <<EOCP
12147#$d_const HASCONST
12148#ifndef HASCONST
12149#define const
12150#endif
12151#include <sys/types.h>
12152#include <stdio.h>
12153#include <db.h>
12154int main()
12155{
12156#ifdef DB_VERSION_MAJOR /* DB version >= 2 */
12157 int Major, Minor, Patch ;
12158 unsigned long Version ;
12159 (void)db_version(&Major, &Minor, &Patch) ;
12160 printf("You have Berkeley DB Version 2 or greater\n");
12161
12162 printf("db.h is from Berkeley DB Version %d.%d.%d\n",
12163 DB_VERSION_MAJOR, DB_VERSION_MINOR, DB_VERSION_PATCH);
12164 printf("libdb is from Berkeley DB Version %d.%d.%d\n",
12165 Major, Minor, Patch) ;
12166
12167 /* check that db.h & libdb are compatible */
12168 if (DB_VERSION_MAJOR != Major || DB_VERSION_MINOR != Minor || DB_VERSION_PATCH != Patch) {
12169 printf("db.h and libdb are incompatible\n") ;
12170 exit(3);
12171 }
12172
12173 printf("db.h and libdb are compatible\n") ;
12174
12175 Version = DB_VERSION_MAJOR * 1000000 + DB_VERSION_MINOR * 1000
12176 + DB_VERSION_PATCH ;
12177
12178 /* needs to be >= 2.3.4 */
12179 if (Version < 2003004) {
12180 /* if (DB_VERSION_MAJOR == 2 && DB_VERSION_MINOR == 0 && DB_VERSION_PATCH < 5) { */
12181 printf("but Perl needs Berkeley DB 2.3.4 or greater\n") ;
12182 exit(2);
12183 }
12184
12185 exit(0);
12186#else
12187#if defined(_DB_H_) && defined(BTREEMAGIC) && defined(HASHMAGIC)
12188 printf("You have Berkeley DB Version 1\n");
12189 exit(0); /* DB version < 2: the coast is clear. */
12190#else
12191 exit(1); /* <db.h> not Berkeley DB? */
12192#endif
12193#endif
12194}
12195EOCP
12196 set try
12197 if eval $compile_ok && ./try; then
12198 echo 'Looks OK.' >&4
12199 else
12200 echo "I can't use Berkeley DB with your <db.h>. I'll disable Berkeley DB." >&4
12201 i_db=$undef
12202 case " $libs " in
12203 *"-ldb "*)
12204 : Remove db from list of libraries to use
12205 echo "Removing unusable -ldb from library list" >&4
12206 set `echo X $libs | $sed -e 's/-ldb / /' -e 's/-ldb$//'`
12207 shift
12208 libs="$*"
12209 echo "libs = $libs" >&4
12210 ;;
12211 esac
12212 fi
12213 $rm -f try.*
12214 ;;
12215esac
12216
12217case "$i_db" in
12218define)
12219 : Check the return type needed for hash
12220 echo " "
12221 echo "Checking return type needed for hash for Berkeley DB ..." >&4
12222 $cat >try.c <<EOCP
12223#$d_const HASCONST
12224#ifndef HASCONST
12225#define const
12226#endif
12227#include <sys/types.h>
12228#include <db.h>
12229
12230#ifndef DB_VERSION_MAJOR
12231u_int32_t hash_cb (ptr, size)
12232const void *ptr;
12233size_t size;
12234{
12235}
12236HASHINFO info;
12237int main()
12238{
12239 info.hash = hash_cb;
12240}
12241#endif
12242EOCP
12243 if $cc $ccflags -c try.c >try.out 2>&1 ; then
12244 if $contains warning try.out >>/dev/null 2>&1 ; then
12245 db_hashtype='int'
12246 else
12247 db_hashtype='u_int32_t'
12248 fi
12249 else
12250 : XXX Maybe we should just give up here.
12251 db_hashtype=u_int32_t
12252 $cat try.out >&4
12253 echo "Help: I can't seem to compile the db test program." >&4
12254 echo "Something's wrong, but I'll assume you use $db_hashtype." >&4
12255 fi
12256 $rm -f try.*
12257 echo "Your version of Berkeley DB uses $db_hashtype for hash."
12258 ;;
12259*) db_hashtype=u_int32_t
12260 ;;
12261esac
12262case "$i_db" in
12263define)
12264 : Check the return type needed for prefix
12265 echo " "
12266 echo "Checking return type needed for prefix for Berkeley DB ..." >&4
12267 cat >try.c <<EOCP
12268#$d_const HASCONST
12269#ifndef HASCONST
12270#define const
12271#endif
12272#include <sys/types.h>
12273#include <db.h>
12274
12275#ifndef DB_VERSION_MAJOR
12276size_t prefix_cb (key1, key2)
12277const DBT *key1;
12278const DBT *key2;
12279{
12280}
12281BTREEINFO info;
12282int main()
12283{
12284 info.prefix = prefix_cb;
12285}
12286#endif
12287EOCP
12288 if $cc $ccflags -c try.c >try.out 2>&1 ; then
12289 if $contains warning try.out >>/dev/null 2>&1 ; then
12290 db_prefixtype='int'
12291 else
12292 db_prefixtype='size_t'
12293 fi
12294 else
12295 db_prefixtype='size_t'
12296 : XXX Maybe we should just give up here.
12297 $cat try.out >&4
12298 echo "Help: I can't seem to compile the db test program." >&4
12299 echo "Something's wrong, but I'll assume you use $db_prefixtype." >&4
12300 fi
12301 $rm -f try.*
12302 echo "Your version of Berkeley DB uses $db_prefixtype for prefix."
12303 ;;
12304*) db_prefixtype='size_t'
12305 ;;
12306esac
12307
12308: check for void type
12309echo " "
12310echo "Checking to see how well your C compiler groks the void type..." >&4
12311case "$voidflags" in
12312'')
12313 $cat >try.c <<'EOCP'
12314#if TRY & 1
12315void sub() {
12316#else
12317sub() {
12318#endif
12319 extern void moo(); /* function returning void */
12320 void (*goo)(); /* ptr to func returning void */
12321#if TRY & 8
12322 void *hue; /* generic ptr */
12323#endif
12324#if TRY & 2
12325 void (*foo[10])();
12326#endif
12327
12328#if TRY & 4
12329 if(goo == moo) {
12330 exit(0);
12331 }
12332#endif
12333 exit(0);
12334}
12335int main() { sub(); }
12336EOCP
12337 if $cc $ccflags -c -DTRY=$defvoidused try.c >.out 2>&1 ; then
12338 voidflags=$defvoidused
12339 echo "Good. It appears to support void to the level $package wants.">&4
12340 if $contains warning .out >/dev/null 2>&1; then
12341 echo "However, you might get some warnings that look like this:"
12342 $cat .out
12343 fi
12344 else
12345echo "Hmm, your compiler has some difficulty with void. Checking further..." >&4
12346 if $cc $ccflags -c -DTRY=1 try.c >/dev/null 2>&1; then
12347 echo "It supports 1..."
12348 if $cc $ccflags -c -DTRY=3 try.c >/dev/null 2>&1; then
12349 echo "It also supports 2..."
12350 if $cc $ccflags -c -DTRY=7 try.c >/dev/null 2>&1; then
12351 voidflags=7
12352 echo "And it supports 4 but not 8 definitely."
12353 else
12354 echo "It doesn't support 4..."
12355 if $cc $ccflags -c -DTRY=11 try.c >/dev/null 2>&1; then
12356 voidflags=11
12357 echo "But it supports 8."
12358 else
12359 voidflags=3
12360 echo "Neither does it support 8."
12361 fi
12362 fi
12363 else
12364 echo "It does not support 2..."
12365 if $cc $ccflags -c -DTRY=13 try.c >/dev/null 2>&1; then
12366 voidflags=13
12367 echo "But it supports 4 and 8."
12368 else
12369 if $cc $ccflags -c -DTRY=5 try.c >/dev/null 2>&1; then
12370 voidflags=5
12371 echo "And it supports 4 but has not heard about 8."
12372 else
12373 echo "However it supports 8 but not 4."
12374 fi
12375 fi
12376 fi
12377 else
12378 echo "There is no support at all for void."
12379 voidflags=0
12380 fi
12381 fi
12382esac
12383case "$voidflags" in
12384"$defvoidused") ;;
12385*) $cat >&4 <<'EOM'
12386 Support flag bits are:
12387 1: basic void declarations.
12388 2: arrays of pointers to functions returning void.
12389 4: operations between pointers to and addresses of void functions.
12390 8: generic void pointers.
12391EOM
12392 dflt="$voidflags";
12393 rp="Your void support flags add up to what?"
12394 . ./myread
12395 voidflags="$ans"
12396 ;;
12397esac
12398$rm -f try.* .out
12399
12400
12401: How can we generate normalized random numbers ?
12402echo " "
12403echo "Looking for a random number function..." >&4
12404case "$randfunc" in
12405'')
12406 if set drand48 val -f; eval $csym; $val; then
12407 dflt="drand48"
12408 echo "Good, found drand48()." >&4
12409 elif set random val -f; eval $csym; $val; then
12410 dflt="random"
12411 echo "OK, found random()." >&4
12412 else
12413 dflt="rand"
12414 echo "Yick, looks like I have to use rand()." >&4
12415 fi
12416 echo " "
12417 ;;
12418*)
12419 dflt="$randfunc"
12420 ;;
12421esac
12422cont=true
12423
12424case "$ccflags" in
12425*-Dmy_rand=*|*-Dmy_srand=*)
12426 echo "Removing obsolete -Dmy_rand, -Dmy_srand, and -Drandbits from ccflags." >&4
12427 ccflags="`echo $ccflags | sed -e 's/-Dmy_rand=random/ /'`"
12428 ccflags="`echo $ccflags | sed -e 's/-Dmy_srand=srandom/ /'`"
12429 ccflags="`echo $ccflags | sed -e 's/-Drandbits=[0-9][0-9]*/ /'`"
12430 ;;
12431esac
12432
12433while $test "$cont"; do
12434 rp="Use which function to generate random numbers?"
12435 . ./myread
12436 if $test "$ans" = "$dflt"; then
12437 : null
12438 else
12439 randbits=''
12440 fi
12441 randfunc="$ans"
12442 if set $ans val -f; eval $csym; $val; then
12443 cont=''
12444 else
12445 dflt=y
12446 rp="I cannot find function $ans. Use that name anyway?"
12447 . ./myread
12448 dflt=rand
12449 case "$ans" in
12450 [yY]*) cont='';;
12451 esac
12452 fi
12453 case "$cont" in
12454 '')
12455 case "$randfunc" in
12456 drand48)
12457 drand01="drand48()"
12458 seedfunc="srand48"
12459 randbits=48
12460 randseedtype=long
12461 ;;
12462 rand|random)
12463 case "$randbits" in
12464 '')
12465echo "Checking to see how many bits your $randfunc() function produces..." >&4
12466 $cat >try.c <<EOCP
12467#$i_unistd I_UNISTD
12468#$i_stdlib I_STDLIB
12469#include <stdio.h>
12470#ifdef I_UNISTD
12471# include <unistd.h>
12472#endif
12473#ifdef I_STDLIB
12474# include <stdlib.h>
12475#endif
12476int main()
12477{
12478 register int i;
12479 register unsigned long tmp;
12480 register unsigned long max = 0L;
12481
12482 for (i = 1000; i; i--) {
12483 tmp = (unsigned long) $randfunc();
12484 if (tmp > max) max = tmp;
12485 }
12486 for (i = 0; max; i++)
12487 max /= 2;
12488 printf("%d\n",i);
12489}
12490EOCP
12491 set try
12492 if eval $compile_ok; then
12493 dflt=`try`
12494 else
12495 dflt='?'
12496 echo "(I can't seem to compile the test program...)"
12497 fi
12498 ;;
12499 *)
12500 dflt="$randbits"
12501 ;;
12502 esac
12503 rp="How many bits does your $randfunc() function produce?"
12504 . ./myread
12505 randbits="$ans"
12506 $rm -f try.c try
12507 drand01="($randfunc() / (double) ((unsigned long)1 << $randbits))"
12508 seedfunc="s$randfunc"
12509 randseedtype=unsigned
12510 ;;
12511 *)
12512 dflt="31"
12513 rp="How many bits does your $randfunc() function produce?"
12514 . ./myread
12515 randbits="$ans"
12516 seedfunc="s$randfunc"
12517 drand01="($randfunc() / (double) ((unsigned long)1 << $randbits))"
12518 if set $seedfunc val -f; eval $csym; $val; then
12519 echo "(Using $seedfunc() to seed random generator)"
12520 else
12521 echo "(Warning: no $seedfunc() to seed random generator)"
12522 seedfunc=rand
12523 fi
12524 randseedtype=unsigned
12525 ;;
12526 esac
12527 ;;
12528 esac
12529done
12530
12531echo " "
12532echo "Determining whether or not we are on an EBCDIC system..." >&4
12533$cat >tebcdic.c <<'EOM'
12534int main()
12535{
12536 if ('M'==0xd4) return 0;
12537 return 1;
12538}
12539EOM
12540
12541val=$undef
12542set tebcdic
12543if eval $compile_ok; then
12544 if ./tebcdic; then
12545 echo "You seem to speak EBCDIC." >&4
12546 val="$define"
12547 else
12548 echo "Nope, no EBCDIC, probably ASCII or some ISO Latin. Or UTF8." >&4
12549 fi
12550else
12551 echo "I'm unable to compile the test program." >&4
12552 echo "I'll assume ASCII or some ISO Latin. Or UTF8." >&4
12553fi
12554$rm -f tebcdic.c tebcdic
12555set ebcdic
12556eval $setvar
12557
12558echo " "
12559$cat >&4 <<EOM
12560Checking how to flush all pending stdio output...
12561EOM
12562# I only know how to find the first 32 possibly open files on SunOS.
12563# See also hints/sunos_4_1.sh and util.c --AD
12564case "$osname" in
12565sunos) $echo '#define PERL_FFLUSH_ALL_FOPEN_MAX 32' > try.c ;;
12566esac
12567$cat >>try.c <<EOCP
12568#include <stdio.h>
12569#$i_unistd I_UNISTD
12570#ifdef I_UNISTD
12571# include <unistd.h>
12572#endif
12573#$d_sysconf HAS_SYSCONF
12574#$d_stdio_stream_array HAS_STDIO_STREAM_ARRAY
12575#ifdef HAS_STDIO_STREAM_ARRAY
12576# define STDIO_STREAM_ARRAY $stdio_stream_array
12577#endif
12578int main() {
12579 FILE* p = fopen("try.out", "w");
12580#ifdef TRY_FPUTC
12581 fputc('x', p);
12582#else
12583# ifdef TRY_FPRINTF
12584 fprintf(p, "x");
12585# endif
12586#endif
12587#ifdef TRY_FFLUSH_NULL
12588 fflush(NULL);
12589#endif
12590#ifdef TRY_FFLUSH_ALL
12591 {
12592 long open_max = -1;
12593# ifdef PERL_FFLUSH_ALL_FOPEN_MAX
12594 open_max = PERL_FFLUSH_ALL_FOPEN_MAX;
12595# else
12596# if defined(HAS_SYSCONF) && defined(_SC_OPEN_MAX)
12597 open_max = sysconf(_SC_OPEN_MAX);
12598# else
12599# ifdef FOPEN_MAX
12600 open_max = FOPEN_MAX;
12601# else
12602# ifdef OPEN_MAX
12603 open_max = OPEN_MAX;
12604# else
12605# ifdef _NFILE
12606 open_max = _NFILE;
12607# endif
12608# endif
12609# endif
12610# endif
12611# endif
12612# ifdef HAS_STDIO_STREAM_ARRAY
12613 if (open_max > 0) {
12614 long i;
12615 for (i = 0; i < open_max; i++)
12616 if (STDIO_STREAM_ARRAY[i]._file >= 0 &&
12617 STDIO_STREAM_ARRAY[i]._file < open_max &&
12618 STDIO_STREAM_ARRAY[i]._flag)
12619 fflush(&STDIO_STREAM_ARRAY[i]);
12620 }
12621 }
12622# endif
12623#endif
12624 _exit(42);
12625}
12626EOCP
12627: first we have to find out how _not_ to flush
12628if $test "X$fflushNULL" = X -o "X$fflushall" = X; then
12629 output=''
12630 set try -DTRY_FPUTC
12631 if eval $compile; then
12632 $rm -f try.out
12633 ./try$exe_ext 2>/dev/null
12634 if $test ! -s try.out -a "X$?" = X42; then
12635 output=-DTRY_FPUTC
12636 fi
12637 fi
12638 case "$output" in
12639 '')
12640 set try -DTRY_FPRINTF
12641 $rm -f try.out
12642 if eval $compile; then
12643 $rm -f try.out
12644 ./try$exe_ext 2>/dev/null
12645 if $test ! -s try.out -a "X$?" = X42; then
12646 output=-DTRY_FPRINTF
12647 fi
12648 fi
12649 ;;
12650 esac
12651fi
12652: check for fflush NULL behaviour
12653case "$fflushNULL" in
12654'') set try -DTRY_FFLUSH_NULL $output
12655 if eval $compile; then
12656 $rm -f try.out
12657 ./try$exe_ext 2>/dev/null
12658 code="$?"
12659 if $test -s try.out -a "X$code" = X42; then
12660 fflushNULL="`$cat try.out`"
12661 else
12662 if $test "X$code" != X42; then
12663 $cat >&4 <<EOM
12664(If this test failed, don't worry, we'll try another method shortly.)
12665EOM
12666 fi
12667 fi
12668 fi
12669 $rm -f core try.core core.try.*
12670 case "$fflushNULL" in
12671 x) $cat >&4 <<EOM
12672Your fflush(NULL) works okay for output streams.
12673Let's see if it clobbers input pipes...
12674EOM
12675# As of mid-March 2000 all versions of Solaris appear to have a stdio
12676# bug that improperly flushes the input end of pipes. So we avoid the
12677# autoflush on fork/system/exec support for now. :-(
12678$cat >tryp.c <<EOCP
12679#include <stdio.h>
12680int
12681main(int argc, char **argv)
12682{
12683 char buf[1024];
12684 int i;
12685 char *bp = buf;
12686 while (1) {
12687 while ((i = getc(stdin)) != -1
12688 && (*bp++ = i) != '\n'
12689 && bp < &buf[1024])
12690 /* DO NOTHING */ ;
12691 *bp = '\0';
12692 fprintf(stdout, "%s", buf);
12693 fflush(NULL);
12694 if (i == -1)
12695 return 0;
12696 bp = buf;
12697 }
12698}
12699EOCP
12700 fflushNULL="$define"
12701 set tryp
12702 if eval $compile; then
12703 $rm -f tryp.out
12704 $cat tryp.c | ./tryp$exe_ext 2>/dev/null > tryp.out
12705 if cmp tryp.c tryp.out >/dev/null 2>&1; then
12706 $cat >&4 <<EOM
12707fflush(NULL) seems to behave okay with input streams.
12708EOM
12709 fflushNULL="$define"
12710 else
12711 $cat >&4 <<EOM
12712Ouch, fflush(NULL) clobbers input pipes! We will not use it.
12713EOM
12714 fflushNULL="$undef"
12715 fi
12716 fi
12717 $rm -f core tryp.c tryp.core core.tryp.*
12718 ;;
12719 '') $cat >&4 <<EOM
12720Your fflush(NULL) isn't working (contrary to ANSI C).
12721EOM
12722 fflushNULL="$undef"
12723 ;;
12724 *) $cat >&4 <<EOM
12725Cannot figure out whether your fflush(NULL) works or not.
12726I'm assuming it doesn't (contrary to ANSI C).
12727EOM
12728 fflushNULL="$undef"
12729 ;;
12730 esac
12731 ;;
12732$define|true|[yY]*)
12733 fflushNULL="$define"
12734 ;;
12735*)
12736 fflushNULL="$undef"
12737 ;;
12738esac
12739: check explicit looping only if NULL did not work, and if the pipe
12740: bug does not show up on an explicit flush too
12741case "$fflushNULL" in
12742"$undef")
12743 $cat >tryp.c <<EOCP
12744#include <stdio.h>
12745int
12746main(int argc, char **argv)
12747{
12748 char buf[1024];
12749 int i;
12750 char *bp = buf;
12751 while (1) {
12752 while ((i = getc(stdin)) != -1
12753 && (*bp++ = i) != '\n'
12754 && bp < &buf[1024])
12755 /* DO NOTHING */ ;
12756 *bp = '\0';
12757 fprintf(stdout, "%s", buf);
12758 fflush(stdin);
12759 if (i == -1)
12760 return 0;
12761 bp = buf;
12762 }
12763}
12764EOCP
12765 set tryp
12766 if eval $compile; then
12767 $rm -f tryp.out
12768 $cat tryp.c | ./tryp$exe_ext 2>/dev/null > tryp.out
12769 if cmp tryp.c tryp.out >/dev/null 2>&1; then
12770 $cat >&4 <<EOM
12771Good, at least fflush(stdin) seems to behave okay when stdin is a pipe.
12772EOM
12773 : now check for fflushall behaviour
12774 case "$fflushall" in
12775 '') set try -DTRY_FFLUSH_ALL $output
12776 if eval $compile; then
12777 $cat >&4 <<EOM
12778(Now testing the other method--but note that this also may fail.)
12779EOM
12780 $rm -f try.out
12781 ./try$exe_ext 2>/dev/null
12782 if $test -s try.out -a "X$?" = X42; then
12783 fflushall="`$cat try.out`"
12784 fi
12785 fi
12786 $rm -f core try.core core.try.*
12787 case "$fflushall" in
12788 x) $cat >&4 <<EOM
12789Whew. Flushing explicitly all the stdio streams works.
12790EOM
12791 fflushall="$define"
12792 ;;
12793 '') $cat >&4 <<EOM
12794Sigh. Flushing explicitly all the stdio streams doesn't work.
12795EOM
12796 fflushall="$undef"
12797 ;;
12798 *) $cat >&4 <<EOM
12799Cannot figure out whether flushing stdio streams explicitly works or not.
12800I'm assuming it doesn't.
12801EOM
12802 fflushall="$undef"
12803 ;;
12804 esac
12805 ;;
12806 "$define"|true|[yY]*)
12807 fflushall="$define"
12808 ;;
12809 *)
12810 fflushall="$undef"
12811 ;;
12812 esac
12813 else
12814 $cat >&4 <<EOM
12815All is futile. Even fflush(stdin) clobbers input pipes!
12816EOM
12817 fflushall="$undef"
12818 fi
12819 else
12820 fflushall="$undef"
12821 fi
12822 $rm -f core tryp.c tryp.core core.tryp.*
12823 ;;
12824*) fflushall="$undef"
12825 ;;
12826esac
12827
12828case "$fflushNULL$fflushall" in
12829undefundef)
12830 $cat <<EOM
12831OK, I give up. I cannot figure out how to flush pending stdio output.
12832We won't be flushing handles at all before fork/exec/popen.
12833EOM
12834 ;;
12835esac
12836$rm -f try.* try$exe_ext
12837
12838: Store the full pathname to the ar program for use in the C program
12839: Respect a hint or command line value for full_ar.
12840case "$full_ar" in
12841'') full_ar=$ar ;;
12842esac
12843
12844: Store the full pathname to the sed program for use in the C program
12845full_sed=$sed
12846
12847: see what type gids are declared as in the kernel
12848echo " "
12849echo "Looking for the type for group ids returned by getgid()."
12850set gid_t gidtype xxx stdio.h sys/types.h
12851eval $typedef
12852case "$gidtype" in
12853xxx)
12854 xxx=`./findhdr sys/user.h`
12855 set `grep 'groups\[NGROUPS\];' "$xxx" 2>/dev/null` unsigned short
12856 case $1 in
12857 unsigned) dflt="$1 $2" ;;
12858 *) dflt="$1" ;;
12859 esac
12860 ;;
12861*) dflt="$gidtype";;
12862esac
12863case "$gidtype" in
12864gid_t) echo "gid_t found." ;;
12865*) rp="What is the type for group ids returned by getgid()?"
12866 . ./myread
12867 gidtype="$ans"
12868 ;;
12869esac
12870
12871echo " "
12872case "$gidtype" in
12873*_t) zzz="$gidtype" ;;
12874*) zzz="gid" ;;
12875esac
12876echo "Checking the size of $zzz..." >&4
12877cat > try.c <<EOCP
12878#include <sys/types.h>
12879#include <stdio.h>
12880int main() {
12881 printf("%d\n", (int)sizeof($gidtype));
12882 exit(0);
12883}
12884EOCP
12885set try
12886if eval $compile_ok; then
12887 yyy=`./try`
12888 case "$yyy" in
12889 '') gidsize=4
12890 echo "(I can't execute the test program--guessing $gidsize.)" >&4
12891 ;;
12892 *) gidsize=$yyy
12893 echo "Your $zzz is $gidsize bytes long."
12894 ;;
12895 esac
12896else
12897 gidsize=4
12898 echo "(I can't compile the test program--guessing $gidsize.)" >&4
12899fi
12900
12901
12902echo " "
12903case "$gidtype" in
12904*_t) zzz="$gidtype" ;;
12905*) zzz="gid" ;;
12906esac
12907echo "Checking the sign of $zzz..." >&4
12908cat > try.c <<EOCP
12909#include <sys/types.h>
12910#include <stdio.h>
12911int main() {
12912 $gidtype foo = -1;
12913 if (foo < 0)
12914 printf("-1\n");
12915 else
12916 printf("1\n");
12917}
12918EOCP
12919set try
12920if eval $compile; then
12921 yyy=`./try`
12922 case "$yyy" in
12923 '') gidsign=1
12924 echo "(I can't execute the test program--guessing unsigned.)" >&4
12925 ;;
12926 *) gidsign=$yyy
12927 case "$gidsign" in
12928 1) echo "Your $zzz is unsigned." ;;
12929 -1) echo "Your $zzz is signed." ;;
12930 esac
12931 ;;
12932 esac
12933else
12934 gidsign=1
12935 echo "(I can't compile the test program--guessing unsigned.)" >&4
12936fi
12937
12938
12939echo " "
12940
12941if $test X"$quadtype" != X; then
12942
12943echo "Checking how to print 64-bit integers..." >&4
12944
12945if $test X"$sPRId64" = X -a X"$quadtype" = Xint; then
12946 $cat >try.c <<'EOCP'
12947#include <sys/types.h>
12948#include <stdio.h>
12949int main() {
12950 int q = 12345678901;
12951 printf("%ld\n", q);
12952}
12953EOCP
12954 set try
12955 if eval $compile; then
12956 yyy=`./try$exe_ext`
12957 case "$yyy" in
12958 12345678901)
12959 sPRId64='"d"'; sPRIi64='"i"'; sPRIu64='"u"';
12960 sPRIo64='"o"'; sPRIx64='"x"'; sPRIXU64='"X"';
12961 echo "We will use %d."
12962 ;;
12963 esac
12964 fi
12965fi
12966
12967if $test X"$sPRId64" = X -a X"$quadtype" = Xlong; then
12968 $cat >try.c <<'EOCP'
12969#include <sys/types.h>
12970#include <stdio.h>
12971int main() {
12972 long q = 12345678901;
12973 printf("%ld\n", q);
12974}
12975EOCP
12976 set try
12977 if eval $compile; then
12978 yyy=`./try$exe_ext`
12979 case "$yyy" in
12980 12345678901)
12981 sPRId64='"ld"'; sPRIi64='"li"'; sPRIu64='"lu"';
12982 sPRIo64='"lo"'; sPRIx64='"lx"'; sPRIXU64='"lX"';
12983 echo "We will use %ld."
12984 ;;
12985 esac
12986 fi
12987fi
12988
12989if $test X"$sPRId64" = X -a X"$i_inttypes" = X"$define" -a X"$quadtype" = Xint64_t; then
12990 $cat >try.c <<'EOCP'
12991#include <sys/types.h>
12992#include <inttypes.h>
12993#include <stdio.h>
12994int main() {
12995 int64_t q = 12345678901;
12996 printf("%" PRId64 "\n", q);
12997}
12998EOCP
12999 set try
13000 if eval $compile; then
13001 yyy=`./try$exe_ext`
13002 case "$yyy" in
13003 12345678901)
13004 sPRId64=PRId64; sPRIi64=PRIi64; sPRIu64=PRIu64;
13005 sPRIo64=PRIo64; sPRIx64=PRIx64; sPRIXU64=PRIXU64;
13006 echo "We will use the C9X style."
13007 ;;
13008 esac
13009 fi
13010fi
13011
13012if $test X"$sPRId64" = X -a X"$quadtype" = X"long long"; then
13013 $cat >try.c <<'EOCP'
13014#include <sys/types.h>
13015#include <stdio.h>
13016int main() {
13017 long long q = 12345678901LL; /* AIX cc requires the LL suffix. */
13018 printf("%lld\n", q);
13019}
13020EOCP
13021 set try
13022 if eval $compile; then
13023 yyy=`./try$exe_ext`
13024 case "$yyy" in
13025 12345678901)
13026 sPRId64='"lld"'; sPRIi64='"lli"'; sPRIu64='"llu"';
13027 sPRIo64='"llo"'; sPRIx64='"llx"'; sPRIXU64='"llX"';
13028 echo "We will use the %lld style."
13029 ;;
13030 esac
13031 fi
13032fi
13033
13034if $test X"$sPRId64" = X -a X"$quadtype" != X; then
13035 $cat >try.c <<EOCP
13036#include <sys/types.h>
13037#include <stdio.h>
13038int main() {
13039 $quadtype q = 12345678901;
13040 printf("%Ld\n", q);
13041}
13042EOCP
13043 set try
13044 if eval $compile; then
13045 yyy=`./try$exe_ext`
13046 case "$yyy" in
13047 12345678901)
13048 sPRId64='"Ld"'; sPRIi64='"Li"'; sPRIu64='"Lu"';
13049 sPRIo64='"Lo"'; sPRIx64='"Lx"'; sPRIXU64='"LX"';
13050 echo "We will use %Ld."
13051 ;;
13052 esac
13053 fi
13054fi
13055
13056if $test X"$sPRId64" = X -a X"$quadtype" != X; then
13057 $cat >try.c <<EOCP
13058#include <sys/types.h>
13059#include <stdio.h>
13060int main() {
13061 $quadtype q = 12345678901;
13062 printf("%qd\n", q);
13063}
13064EOCP
13065 set try
13066 if eval $compile; then
13067 yyy=`./try$exe_ext`
13068 case "$yyy" in
13069 12345678901)
13070 sPRId64='"qd"'; sPRIi64='"qi"'; sPRIu64='"qu"';
13071 sPRIo64='"qo"'; sPRIx64='"qx"'; sPRIXU64='"qX"';
13072 echo "We will use %qd."
13073 ;;
13074 esac
13075 fi
13076fi
13077
13078if $test X"$sPRId64" = X; then
13079 echo "Cannot figure out how to print 64-bit integers." >&4
13080fi
13081
13082$rm -f try try.*
13083
13084fi
13085
13086case "$sPRId64" in
13087'') d_PRId64="$undef"; d_PRIi64="$undef"; d_PRIu64="$undef";
13088 d_PRIo64="$undef"; d_PRIx64="$undef"; d_PRIXU64="$undef";
13089 ;;
13090*) d_PRId64="$define"; d_PRIi64="$define"; d_PRIu64="$define";
13091 d_PRIo64="$define"; d_PRIx64="$define"; d_PRIXU64="$define";
13092 ;;
13093esac
13094
13095
13096echo " "
13097$echo "Checking the format strings to be used for Perl's internal types..." >&4
13098
13099if $test X"$ivsize" = X8; then
13100 ivdformat="$sPRId64"
13101 uvuformat="$sPRIu64"
13102 uvoformat="$sPRIo64"
13103 uvxformat="$sPRIx64"
13104 uvXUformat="$sPRIXU64"
13105else
13106 if $test X"$ivsize" = X"$longsize"; then
13107 ivdformat='"ld"'
13108 uvuformat='"lu"'
13109 uvoformat='"lo"'
13110 uvxformat='"lx"'
13111 uvXUformat='"lX"'
13112 else
13113 if $test X"$ivsize" = X"$intsize"; then
13114 ivdformat='"d"'
13115 uvuformat='"u"'
13116 uvoformat='"o"'
13117 uvxformat='"x"'
13118 uvXUformat='"X"'
13119 else
13120 : far out
13121 if $test X"$ivsize" = X"$shortsize"; then
13122 ivdformat='"hd"'
13123 uvuformat='"hu"'
13124 uvoformat='"ho"'
13125 uvxformat='"hx"'
13126 uvXUformat='"hX"'
13127 fi
13128 fi
13129 fi
13130fi
13131
13132if $test X"$uselongdouble" = X"$define" -a X"$d_longdbl" = X"$define" -a X"$d_PRIgldbl" = X"$define"; then
13133 nveformat="$sPRIeldbl"
13134 nvfformat="$sPRIfldbl"
13135 nvgformat="$sPRIgldbl"
13136 nvEUformat="$sPRIEUldbl"
13137 nvFUformat="$sPRIFUldbl"
13138 nvGUformat="$sPRIGUldbl"
13139else
13140 nveformat='"e"'
13141 nvfformat='"f"'
13142 nvgformat='"g"'
13143 nvEUformat='"E"'
13144 nvFUformat='"F"'
13145 nvGUformat='"G"'
13146fi
13147
13148case "$ivdformat" in
13149'') echo "$0: Fatal: failed to find format strings, cannot continue." >& 4
13150 exit 1
13151 ;;
13152esac
13153
13154
13155echo " "
13156$echo "Checking the format string to be used for gids..." >&4
13157
13158case "$gidsign" in
13159-1) if $test X"$gidsize" = X"$ivsize"; then
13160 gidformat="$ivdformat"
13161 else
13162 if $test X"$gidsize" = X"$longsize"; then
13163 gidformat='"ld"'
13164 else
13165 if $test X"$gidsize" = X"$intsize"; then
13166 gidformat='"d"'
13167 else
13168 if $test X"$gidsize" = X"$shortsize"; then
13169 gidformat='"hd"'
13170 fi
13171 fi
13172 fi
13173 fi
13174 ;;
13175*) if $test X"$gidsize" = X"$uvsize"; then
13176 gidformat="$uvuformat"
13177 else
13178 if $test X"$gidsize" = X"$longsize"; then
13179 gidformat='"lu"'
13180 else
13181 if $test X"$gidsize" = X"$intsize"; then
13182 gidformat='"u"'
13183 else
13184 if $test X"$gidsize" = X"$shortsize"; then
13185 gidformat='"hu"'
13186 fi
13187 fi
13188 fi
13189 fi
13190 ;;
13191esac
13192
13193: see if getgroups exists
13194set getgroups d_getgrps
13195eval $inlibc
13196
13197: see if setgroups exists
13198set setgroups d_setgrps
13199eval $inlibc
13200
13201
13202: Find type of 2nd arg to 'getgroups()' and 'setgroups()'
13203echo " "
13204case "$d_getgrps$d_setgrps" in
13205*define*)
13206 case "$groupstype" in
13207 '') dflt="$gidtype" ;;
13208 *) dflt="$groupstype" ;;
13209 esac
13210 $cat <<EOM
13211What type of pointer is the second argument to getgroups() and setgroups()?
13212Usually this is the same as group ids, $gidtype, but not always.
13213
13214EOM
13215 rp='What type pointer is the second argument to getgroups() and setgroups()?'
13216 . ./myread
13217 groupstype="$ans"
13218 ;;
13219*) groupstype="$gidtype";;
13220esac
13221
13222echo " "
13223echo "Checking if your $make program sets \$(MAKE)..." >&4
13224case "$make_set_make" in
13225'')
13226 $sed 's/^X //' > testmake.mak << 'EOF'
13227Xall:
13228X @echo 'maketemp="$(MAKE)"'
13229EOF
13230 case "`$make -f testmake.mak 2>/dev/null`" in
13231 *maketemp=*) make_set_make='#' ;;
13232 *) make_set_make="MAKE=$make" ;;
13233 esac
13234 $rm -f testmake.mak
13235 ;;
13236esac
13237case "$make_set_make" in
13238'#') echo "Yup, it does.";;
13239*) echo "Nope, it doesn't.";;
13240esac
13241
13242: see what type is used for mode_t
13243rp="What is the type used for file modes for system calls (e.g. fchmod())?"
13244set mode_t modetype int stdio.h sys/types.h
13245eval $typedef_ask
13246
13247: define a fucntion to check prototypes
13248$cat > protochk <<EOSH
13249$startsh
13250cc="$cc"
13251optimize="$optimize"
13252ccflags="$ccflags"
13253prototype="$prototype"
13254define="$define"
13255rm=$rm
13256EOSH
13257
13258$cat >> protochk <<'EOSH'
13259
13260$rm -f try.c
13261foo="$1"
13262shift
13263while test $# -ge 2; do
13264 case "$1" in
13265 $define) echo "#include <$2>" >> try.c ;;
13266 literal) echo "$2" >> try.c ;;
13267 esac
13268 shift 2
13269done
13270test "$prototype" = "$define" && echo '#define CAN_PROTOTYPE' >> try.c
13271cat >> try.c <<'EOCP'
13272#ifdef CAN_PROTOTYPE
13273#define _(args) args
13274#else
13275#define _(args) ()
13276#endif
13277EOCP
13278echo "$foo" >> try.c
13279echo 'int no_real_function_has_this_name _((void)) { return 0; }' >> try.c
13280$cc $optimize $ccflags -c try.c > /dev/null 2>&1
13281status=$?
13282$rm -f try.[co]
13283exit $status
13284EOSH
13285chmod +x protochk
13286$eunicefix protochk
13287
13288: see what type is used for size_t
13289rp="What is the type used for the length parameter for string functions?"
13290set size_t sizetype 'unsigned int' stdio.h sys/types.h
13291eval $typedef_ask
13292
13293: check for type of arguments to gethostbyaddr.
13294if test "X$netdb_host_type" = X -o "X$netdb_hlen_type" = X; then
13295 case "$d_gethbyaddr" in
13296 $define)
13297 $cat <<EOM
13298
13299Checking to see what type of arguments are accepted by gethostbyaddr().
13300EOM
13301 hdrs="$define sys/types.h
13302 $d_socket sys/socket.h
13303 $i_niin netinet/in.h
13304 $i_netdb netdb.h
13305 $i_unistd unistd.h"
13306 : The first arg can 'char *' or 'void *'
13307 : The second arg is some of integral type
13308 for xxx in in_addr_t 'const void *' 'const char *' 'void *' 'char *'; do
13309 for yyy in size_t long int; do
13310 case "$netdb_host_type" in
13311 '') try="extern struct hostent *gethostbyaddr($xxx, $yyy, int);"
13312 if ./protochk "$try" $hdrs; then
13313 echo "Your system accepts $xxx for the first arg."
13314 echo "...and $yyy for the second arg."
13315 netdb_host_type="$xxx"
13316 netdb_hlen_type="$yyy"
13317 fi
13318 ;;
13319 esac
13320 done
13321 done
13322 : In case none of those worked, prompt the user.
13323 case "$netdb_host_type" in
13324 '') rp='What is the type for the 1st argument to gethostbyaddr?'
13325 dflt='char *'
13326 . ./myread
13327 netdb_host_type=$ans
13328 rp='What is the type for the 2nd argument to gethostbyaddr?'
13329 dflt="$sizetype"
13330 . ./myread
13331 netdb_hlen_type=$ans
13332 ;;
13333 esac
13334 ;;
13335 *) : no gethostbyaddr, so pick harmless defaults
13336 netdb_host_type='char *'
13337 netdb_hlen_type="$sizetype"
13338 ;;
13339 esac
13340 # Remove the "const" if needed. -- but then we'll have a
13341 # prototype clash!
13342 # netdb_host_type=`echo "$netdb_host_type" | sed 's/^const //'`
13343fi
13344
13345: check for type of argument to gethostbyname.
13346if test "X$netdb_name_type" = X ; then
13347 case "$d_gethbyname" in
13348 $define)
13349 $cat <<EOM
13350
13351Checking to see what type of argument is accepted by gethostbyname().
13352EOM
13353 hdrs="$define sys/types.h
13354 $d_socket sys/socket.h
13355 $i_niin netinet/in.h
13356 $i_netdb netdb.h
13357 $i_unistd unistd.h"
13358 for xxx in "const char *" "char *"; do
13359 case "$netdb_name_type" in
13360 '') try="extern struct hostent *gethostbyname($xxx);"
13361 if ./protochk "$try" $hdrs; then
13362 echo "Your system accepts $xxx."
13363 netdb_name_type="$xxx"
13364 fi
13365 ;;
13366 esac
13367 done
13368 : In case none of those worked, prompt the user.
13369 case "$netdb_name_type" in
13370 '') rp='What is the type for the 1st argument to gethostbyname?'
13371 dflt='char *'
13372 . ./myread
13373 netdb_name_type=$ans
13374 ;;
13375 esac
13376 ;;
13377 *) : no gethostbyname, so pick harmless default
13378 netdb_name_type='char *'
13379 ;;
13380 esac
13381fi
13382
13383: check for type of 1st argument to getnetbyaddr.
13384if test "X$netdb_net_type" = X ; then
13385 case "$d_getnbyaddr" in
13386 $define)
13387 $cat <<EOM
13388
13389Checking to see what type of 1st argument is accepted by getnetbyaddr().
13390EOM
13391 hdrs="$define sys/types.h
13392 $d_socket sys/socket.h
13393 $i_niin netinet/in.h
13394 $i_netdb netdb.h
13395 $i_unistd unistd.h"
13396 for xxx in in_addr_t "unsigned long" long "unsigned int" int; do
13397 case "$netdb_net_type" in
13398 '') try="extern struct netent *getnetbyaddr($xxx, int);"
13399 if ./protochk "$try" $hdrs; then
13400 echo "Your system accepts $xxx."
13401 netdb_net_type="$xxx"
13402 fi
13403 ;;
13404 esac
13405 done
13406 : In case none of those worked, prompt the user.
13407 case "$netdb_net_type" in
13408 '') rp='What is the type for the 1st argument to getnetbyaddr?'
13409 dflt='long'
13410 . ./myread
13411 netdb_net_type=$ans
13412 ;;
13413 esac
13414 ;;
13415 *) : no getnetbyaddr, so pick harmless default
13416 netdb_net_type='long'
13417 ;;
13418 esac
13419fi
13420: locate the preferred pager for this system
13421case "$pager" in
13422'')
13423 dflt=''
13424 case "$pg" in
13425 /*) dflt=$pg;;
13426 [a-zA-Z]:/*) dflt=$pg;;
13427 esac
13428 case "$more" in
13429 /*) dflt=$more;;
13430 [a-zA-Z]:/*) dflt=$more;;
13431 esac
13432 case "$less" in
13433 /*) dflt=$less;;
13434 [a-zA-Z]:/*) dflt=$less;;
13435 esac
13436 case "$dflt" in
13437 '') dflt=/usr/ucb/more;;
13438 esac
13439 ;;
13440*) dflt="$pager";;
13441esac
13442echo " "
13443fn=f/
13444rp='What pager is used on your system?'
13445. ./getfile
13446pager="$ans"
13447
13448: see what type pids are declared as in the kernel
13449rp="What is the type of process ids on this system?"
13450set pid_t pidtype int stdio.h sys/types.h
13451eval $typedef_ask
13452
13453: Find earliest binary compatible site_perl subdirectory perl can use.
13454case "$bincompat5005" in
13455"$define") xs_apiversion='5.005' ;;
13456*) xs_apiversion=$version ;; # The current site_perl version.
13457esac
13458: Find earliest pure perl site_perl subdirectory perl can use.
13459: The versioned directories started at 5.005.
13460pm_apiversion='5.005'
13461
13462: check for length of pointer
13463echo " "
13464case "$ptrsize" in
13465'')
13466 echo "Checking to see how big your pointers are..." >&4
13467 if test "$voidflags" -gt 7; then
13468 echo '#define VOID_PTR char *' > try.c
13469 else
13470 echo '#define VOID_PTR void *' > try.c
13471 fi
13472 $cat >>try.c <<'EOCP'
13473#include <stdio.h>
13474int main()
13475{
13476 printf("%d\n", (int)sizeof(VOID_PTR));
13477 exit(0);
13478}
13479EOCP
13480 set try
13481 if eval $compile_ok; then
13482 ptrsize=`./try`
13483 echo "Your pointers are $ptrsize bytes long."
13484 else
13485 dflt='4'
13486 echo "(I can't seem to compile the test program. Guessing...)" >&4
13487 rp="What is the size of a pointer (in bytes)?"
13488 . ./myread
13489 ptrsize="$ans"
13490 fi
13491 ;;
13492esac
13493$rm -f try.c try
13494
13495: see if ar generates random libraries by itself
13496echo " "
13497echo "Checking how to generate random libraries on your machine..." >&4
13498echo 'int bar1() { return bar2(); }' > bar1.c
13499echo 'int bar2() { return 2; }' > bar2.c
13500$cat > foo.c <<'EOP'
13501int main() { printf("%d\n", bar1()); exit(0); }
13502EOP
13503$cc $ccflags -c bar1.c >/dev/null 2>&1
13504$cc $ccflags -c bar2.c >/dev/null 2>&1
13505$cc $ccflags -c foo.c >/dev/null 2>&1
13506$ar rc bar$_a bar2$_o bar1$_o >/dev/null 2>&1
13507if $cc $ccflags $ldflags -o foobar foo$_o bar$_a $libs > /dev/null 2>&1 &&
13508 ./foobar >/dev/null 2>&1; then
13509 echo "$ar appears to generate random libraries itself."
13510 orderlib=false
13511 ranlib=":"
13512elif $ar ts bar$_a >/dev/null 2>&1 &&
13513 $cc $ccflags $ldflags -o foobar foo$_o bar$_a $libs > /dev/null 2>&1 &&
13514 ./foobar >/dev/null 2>&1; then
13515 echo "a table of contents needs to be added with '$ar ts'."
13516 orderlib=false
13517 ranlib="$ar ts"
13518else
13519 case "$ranlib" in
13520 :) ranlib='';;
13521 '')
13522 ranlib=`./loc ranlib X /usr/bin /bin /usr/local/bin`
13523 $test -f $ranlib || ranlib=''
13524 ;;
13525 esac
13526 if $test -n "$ranlib"; then
13527 echo "your system has '$ranlib'; we'll use that."
13528 orderlib=false
13529 else
13530 echo "your system doesn't seem to support random libraries"
13531 echo "so we'll use lorder and tsort to order the libraries."
13532 orderlib=true
13533 ranlib=":"
13534 fi
13535fi
13536$rm -f foo* bar*
13537
13538: check for type of arguments to select.
13539case "$selecttype" in
13540'') case "$d_select" in
13541 $define)
13542 echo " "
13543 $cat <<EOM
13544Checking to see what type of arguments are accepted by select().
13545EOM
13546 hdrs="$define sys/types.h
13547 $i_systime sys/time.h
13548 $i_sysselct sys/select.h
13549 $d_socket sys/socket.h"
13550 : The first arg can be int, unsigned, or size_t
13551 : The last arg may or may not be 'const'
13552 val=''
13553 : void pointer has been seen but using that
13554 : breaks the selectminbits test
13555 for xxx in 'fd_set *' 'int *'; do
13556 for nfd in 'int' 'size_t' 'unsigned long' 'unsigned' ; do
13557 for tmo in 'struct timeval *' 'const struct timeval *'; do
13558 case "$val" in
13559 '') try="extern select _(($nfd, $xxx, $xxx, $xxx, $tmo));"
13560 if ./protochk "$try" $hdrs; then
13561 echo "Your system accepts $xxx."
13562 val="$xxx"
13563 fi
13564 ;;
13565 esac
13566 done
13567 done
13568 done
13569 case "$val" in
13570 '') rp='What is the type for the 2nd, 3rd, and 4th arguments to select?'
13571 case "$d_fd_set" in
13572 $define) dflt="fd_set *" ;;
13573 *) dflt="int *" ;;
13574 esac
13575 . ./myread
13576 val=$ans
13577 ;;
13578 esac
13579 selecttype="$val"
13580 ;;
13581 *) : no select, so pick a harmless default
13582 selecttype='int *'
13583 ;;
13584 esac
13585 ;;
13586esac
13587
13588: check for the select 'width'
13589case "$selectminbits" in
13590'') case "$d_select" in
13591 $define)
13592 $cat <<EOM
13593
13594Checking to see on how many bits at a time your select() operates...
13595EOM
13596 $cat >try.c <<EOCP
13597#include <sys/types.h>
13598#$i_time I_TIME
13599#$i_systime I_SYS_TIME
13600#$i_systimek I_SYS_TIME_KERNEL
13601#ifdef I_TIME
13602# include <time.h>
13603#endif
13604#ifdef I_SYS_TIME
13605# ifdef I_SYS_TIME_KERNEL
13606# define KERNEL
13607# endif
13608# include <sys/time.h>
13609# ifdef I_SYS_TIME_KERNEL
13610# undef KERNEL
13611# endif
13612#endif
13613#$i_sysselct I_SYS_SELECT
13614#ifdef I_SYS_SELECT
13615#include <sys/select.h>
13616#endif
13617#$d_socket HAS_SOCKET
13618#ifdef HAS_SOCKET
13619# include <sys/socket.h> /* Might include <sys/bsdtypes.h> */
13620#endif
13621#include <stdio.h>
13622$selecttype b;
13623#define S sizeof(*(b))
13624#define MINBITS 64
13625#define NBYTES (S * 8 > MINBITS ? S : MINBITS/8)
13626#define NBITS (NBYTES * 8)
13627int main() {
13628 char s[NBYTES];
13629 struct timeval t;
13630 int i;
13631 FILE* fp;
13632 int fd;
13633
13634 fclose(stdin);
13635 fp = fopen("try.c", "r");
13636 if (fp == 0)
13637 exit(1);
13638 fd = fileno(fp);
13639 if (fd < 0)
13640 exit(2);
13641 b = ($selecttype)s;
13642 for (i = 0; i < NBITS; i++)
13643 FD_SET(i, b);
13644 t.tv_sec = 0;
13645 t.tv_usec = 0;
13646 select(fd + 1, b, 0, 0, &t);
13647 for (i = NBITS - 1; i > fd && FD_ISSET(i, b); i--);
13648 printf("%d\n", i + 1);
13649 return 0;
13650}
13651EOCP
13652 set try
13653 if eval $compile_ok; then
13654 selectminbits=`./try`
13655 case "$selectminbits" in
13656 '') cat >&4 <<EOM
13657Cannot figure out on how many bits at a time your select() operates.
13658I'll play safe and guess it is 32 bits.
13659EOM
13660 selectminbits=32
13661 bits="32 bits"
13662 ;;
13663 1) bits="1 bit" ;;
13664 *) bits="$selectminbits bits" ;;
13665 esac
13666 echo "Your select() operates on $bits at a time." >&4
13667 else
13668 rp='What is the minimum number of bits your select() operates on?'
13669 case "$byteorder" in
13670 1234|12345678) dflt=32 ;;
13671 *) dflt=1 ;;
13672 esac
13673 . ./myread
13674 val=$ans
13675 selectminbits="$val"
13676 fi
13677 $rm -f try.* try
13678 ;;
13679 *) : no select, so pick a harmless default
13680 selectminbits='32'
13681 ;;
13682 esac
13683 ;;
13684esac
13685
13686: Trace out the files included by signal.h, then look for SIGxxx names.
13687: Remove SIGARRAYSIZE used by HPUX.
13688: Remove SIGSTKSIZE used by Linux.
13689: Remove SIGSTKSZ used by Posix.
13690: Remove SIGTYP void lines used by OS2.
13691: Some cpps, like os390, dont give the file name anywhere
13692if [ "X$fieldn" = X ]; then
13693 : Just make some guesses. We check them later.
13694 xxx='/usr/include/signal.h /usr/include/sys/signal.h'
13695else
13696 xxx=`echo '#include <signal.h>' |
13697 $cppstdin $cppminus $cppflags 2>/dev/null |
13698 $grep '^[ ]*#.*include' |
13699 $awk "{print \\$$fieldn}" | $sed 's!"!!g' | $sort | $uniq`
13700fi
13701: Check this list of files to be sure we have parsed the cpp output ok.
13702: This will also avoid potentially non-existent files, such
13703: as ../foo/bar.h
13704xxxfiles=''
13705for xx in $xxx /dev/null ; do
13706 $test -f "$xx" && xxxfiles="$xxxfiles $xx"
13707done
13708: If we have found no files, at least try signal.h
13709case "$xxxfiles" in
13710'') xxxfiles=`./findhdr signal.h` ;;
13711esac
13712xxx=`awk '
13713$1 ~ /^#define$/ && $2 ~ /^SIG[A-Z0-9]*$/ && $2 !~ /SIGARRAYSIZE/ && $2 !~ /SIGSTKSIZE/ && $2 !~ /SIGSTKSZ/ && $3 !~ /void/ {
13714 print substr($2, 4, 20)
13715}
13716$1 == "#" && $2 ~ /^define$/ && $3 ~ /^SIG[A-Z0-9]*$/ && $3 !~ /SIGARRAYSIZE/ && $4 !~ /void/ {
13717 print substr($3, 4, 20)
13718}' $xxxfiles`
13719: Append some common names just in case the awk scan failed.
13720xxx="$xxx ABRT ALRM BUS CANCEL CHLD CLD CONT DIL EMT FPE"
13721xxx="$xxx FREEZE HUP ILL INT IO IOT KILL LOST LWP PHONE"
13722xxx="$xxx PIPE POLL PROF PWR QUIT RTMAX RTMIN SEGV STKFLT STOP"
13723xxx="$xxx SYS TERM THAW TRAP TSTP TTIN TTOU URG USR1 USR2"
13724xxx="$xxx USR3 USR4 VTALRM WAITING WINCH WIND WINDOW XCPU XFSZ"
13725
13726: generate a few handy files for later
13727$cat > signal.c <<'EOCP'
13728#include <sys/types.h>
13729#include <signal.h>
13730#include <stdio.h>
13731int main() {
13732
13733/* Strange style to avoid deeply-nested #if/#else/#endif */
13734#ifndef NSIG
13735# ifdef _NSIG
13736# define NSIG (_NSIG)
13737# endif
13738#endif
13739
13740#ifndef NSIG
13741# ifdef SIGMAX
13742# define NSIG (SIGMAX+1)
13743# endif
13744#endif
13745
13746#ifndef NSIG
13747# ifdef SIG_MAX
13748# define NSIG (SIG_MAX+1)
13749# endif
13750#endif
13751
13752#ifndef NSIG
13753# ifdef MAXSIG
13754# define NSIG (MAXSIG+1)
13755# endif
13756#endif
13757
13758#ifndef NSIG
13759# ifdef MAX_SIG
13760# define NSIG (MAX_SIG+1)
13761# endif
13762#endif
13763
13764#ifndef NSIG
13765# ifdef SIGARRAYSIZE
13766# define NSIG (SIGARRAYSIZE+1) /* Not sure of the +1 */
13767# endif
13768#endif
13769
13770#ifndef NSIG
13771# ifdef _sys_nsig
13772# define NSIG (_sys_nsig) /* Solaris 2.5 */
13773# endif
13774#endif
13775
13776/* Default to some arbitrary number that's big enough to get most
13777 of the common signals.
13778*/
13779#ifndef NSIG
13780# define NSIG 50
13781#endif
13782
13783printf("NSIG %d\n", NSIG);
13784
13785#ifndef JUST_NSIG
13786
13787EOCP
13788
13789echo $xxx | $tr ' ' $trnl | $sort | $uniq | $awk '
13790{
13791 printf "#ifdef SIG"; printf $1; printf "\n"
13792 printf "printf(\""; printf $1; printf " %%d\\n\",SIG";
13793 printf $1; printf ");\n"
13794 printf "#endif\n"
13795}
13796END {
13797 printf "#endif /* JUST_NSIG */\n";
13798 printf "exit(0);\n}\n";
13799}
13800' >>signal.c
13801$cat >signal.awk <<'EOP'
13802BEGIN { ndups = 0 }
13803$1 ~ /^NSIG$/ { nsig = $2 }
13804($1 !~ /^NSIG$/) && (NF == 2) {
13805 if ($2 > maxsig) { maxsig = $2 }
13806 if (sig_name[$2]) {
13807 dup_name[ndups] = $1
13808 dup_num[ndups] = $2
13809 ndups++
13810 }
13811 else {
13812 sig_name[$2] = $1
13813 sig_num[$2] = $2
13814 }
13815}
13816END {
13817 if (nsig == 0) {
13818 nsig = maxsig + 1
13819 }
13820 printf("NSIG %d\n", nsig);
13821 for (n = 1; n < nsig; n++) {
13822 if (sig_name[n]) {
13823 printf("%s %d\n", sig_name[n], sig_num[n])
13824 }
13825 else {
13826 printf("NUM%d %d\n", n, n)
13827 }
13828 }
13829 for (n = 0; n < ndups; n++) {
13830 printf("%s %d\n", dup_name[n], dup_num[n])
13831 }
13832}
13833EOP
13834$cat >signal_cmd <<EOS
13835$startsh
13836if $test -s signal.lst; then
13837 echo "Using your existing signal.lst file"
13838 exit 0
13839fi
13840xxx="$xxx"
13841EOS
13842$cat >>signal_cmd <<'EOS'
13843
13844set signal
13845if eval $compile_ok; then
13846 ./signal$_exe | $sort -n +1 | $uniq | $awk -f signal.awk >signal.lst
13847else
13848 echo "(I can't seem be able to compile the whole test program)" >&4
13849 echo "(I'll try it in little pieces.)" >&4
13850 set signal -DJUST_NSIG
13851 if eval $compile_ok; then
13852 ./signal$_exe > signal.nsg
13853 $cat signal.nsg
13854 else
13855 echo "I can't seem to figure out how many signals you have." >&4
13856 echo "Guessing 50." >&4
13857 echo 'NSIG 50' > signal.nsg
13858 fi
13859 : Now look at all the signal names, one at a time.
13860 for xx in `echo $xxx | $tr ' ' $trnl | $sort | $uniq`; do
13861 $cat > signal.c <<EOCP
13862#include <sys/types.h>
13863#include <signal.h>
13864#include <stdio.h>
13865int main() {
13866printf("$xx %d\n", SIG${xx});
13867return 0;
13868}
13869EOCP
13870 set signal
13871 if eval $compile; then
13872 echo "SIG${xx} found."
13873 ./signal$_exe >> signal.ls1
13874 else
13875 echo "SIG${xx} NOT found."
13876 fi
13877 done
13878 if $test -s signal.ls1; then
13879 $cat signal.nsg signal.ls1 |
13880 $sort -n +1 | $uniq | $awk -f signal.awk >signal.lst
13881 fi
13882
13883fi
13884if $test -s signal.lst; then
13885 :
13886else
13887 echo "(AAK! I can't compile the test programs -- Guessing)" >&4
13888 echo 'kill -l' >signal
13889 set X `csh -f <signal`
13890 $rm -f signal
13891 shift
13892 case $# in
13893 0) set HUP INT QUIT ILL TRAP ABRT EMT FPE KILL BUS SEGV SYS PIPE ALRM TERM;;
13894 esac
13895 echo $@ | $tr ' ' $trnl | \
13896 $awk '{ printf "%s %d\n", $1, ++s; }
13897 END { printf "NSIG %d\n", ++s }' >signal.lst
13898fi
13899$rm -f signal.c signal$_exe signal$_o signal.nsg signal.ls1
13900EOS
13901chmod a+x signal_cmd
13902$eunicefix signal_cmd
13903
13904: generate list of signal names
13905echo " "
13906case "$sig_name_init" in
13907'') doinit=yes ;;
13908*) case "$sig_num_init" in
13909 ''|*,*) doinit=yes ;;
13910 esac ;;
13911esac
13912case "$doinit" in
13913yes)
13914 echo "Generating a list of signal names and numbers..." >&4
13915 . ./signal_cmd
13916 sig_count=`$awk '/^NSIG/ { printf "%d", $2 }' signal.lst`
13917 sig_name=`$awk 'BEGIN { printf "ZERO " }
13918 !/^NSIG/ { printf "%s ", $1 }' signal.lst`
13919 sig_num=`$awk 'BEGIN { printf "0 " }
13920 !/^NSIG/ { printf "%d ", $2 }' signal.lst`
13921 sig_name_init=`$awk 'BEGIN { printf "\"ZERO\", " }
13922 !/^NSIG/ { printf "\"%s\", ", $1 }
13923 END { printf "0\n" }' signal.lst`
13924 sig_num_init=`$awk 'BEGIN { printf "0, " }
13925 !/^NSIG/ { printf "%d, ", $2}
13926 END { printf "0\n"}' signal.lst`
13927 ;;
13928esac
13929echo "The following $sig_count signals are available:"
13930echo " "
13931echo $sig_name | $awk \
13932'BEGIN { linelen = 0 }
13933{
13934 for (i = 1; i <= NF; i++) {
13935 name = "SIG" $i " "
13936 linelen = linelen + length(name)
13937 if (linelen > 70) {
13938 printf "\n"
13939 linelen = length(name)
13940 }
13941 printf "%s", name
13942 }
13943 printf "\n"
13944}'
13945$rm -f signal signal.c signal.awk signal.lst signal_cmd
13946
13947echo " "
13948case "$sizetype" in
13949*_t) zzz="$sizetype" ;;
13950*) zzz="filesize" ;;
13951esac
13952echo "Checking the size of $zzz..." >&4
13953cat > try.c <<EOCP
13954#include <sys/types.h>
13955#include <stdio.h>
13956int main() {
13957 printf("%d\n", (int)sizeof($sizetype));
13958 exit(0);
13959}
13960EOCP
13961set try
13962if eval $compile_ok; then
13963 yyy=`./try`
13964 case "$yyy" in
13965 '') sizesize=4
13966 echo "(I can't execute the test program--guessing $sizesize.)" >&4
13967 ;;
13968 *) sizesize=$yyy
13969 echo "Your $zzz size is $sizesize bytes."
13970 ;;
13971 esac
13972else
13973 sizesize=4
13974 echo "(I can't compile the test program--guessing $sizesize.)" >&4
13975fi
13976
13977
13978: check for socklen_t
13979echo " "
13980echo "Checking to see if you have socklen_t..." >&4
13981$cat >try.c <<EOCP
13982#include <sys/types.h>
13983#$d_socket HAS_SOCKET
13984#ifdef HAS_SOCKET
13985#include <sys/socket.h>
13986#endif
13987int main() { socklen_t x = 16; }
13988EOCP
13989set try
13990if eval $compile; then
13991 val="$define"
13992 echo "You have socklen_t."
13993else
13994 val="$undef"
13995 echo "You do not have socklen_t."
13996 case "$sizetype" in
13997 size_t) echo "(You do have size_t, that might work. Some people are happy with just an int.)" ;;
13998 esac
13999fi
14000$rm -f try try.*
14001set d_socklen_t
14002eval $setvar
14003
14004: check for type of the size argument to socket calls
14005case "$d_socket" in
14006"$define")
14007 $cat <<EOM
14008
14009Checking to see what type is the last argument of accept().
14010EOM
14011 hdrs="$define sys/types.h $d_socket sys/socket.h"
14012 yyy=''
14013 case "$d_socklen_t" in
14014 "$define") yyy="$yyy socklen_t"
14015 esac
14016 yyy="$yyy $sizetype int long unsigned"
14017 for xxx in $yyy; do
14018 case "$socksizetype" in
14019 '') try="extern int accept(int, struct sockaddr *, $xxx *);"
14020 if ./protochk "$try" $hdrs; then
14021 echo "Your system accepts '$xxx *' for the last argument of accept()."
14022 socksizetype="$xxx"
14023 fi
14024 ;;
14025 esac
14026 done
14027: In case none of those worked, prompt the user.
14028 case "$socksizetype" in
14029 '') rp='What is the type for socket address structure sizes?'
14030 dflt='int'
14031 . ./myread
14032 socksizetype=$ans
14033 ;;
14034 esac
14035 ;;
14036*) : no sockets, so pick relatively harmless default
14037 socksizetype='int'
14038 ;;
14039esac
14040
14041: see what type is used for signed size_t
14042set ssize_t ssizetype int stdio.h sys/types.h
14043eval $typedef
14044dflt="$ssizetype"
14045$cat > ssize.c <<EOM
14046#include <stdio.h>
14047#include <sys/types.h>
14048#define Size_t $sizetype
14049#define SSize_t $dflt
14050int main()
14051{
14052 if (sizeof(Size_t) == sizeof(SSize_t))
14053 printf("$dflt\n");
14054 else if (sizeof(Size_t) == sizeof(int))
14055 printf("int\n");
14056 else
14057 printf("long\n");
14058 exit(0);
14059}
14060EOM
14061echo " "
14062set ssize
14063if eval $compile_ok && ./ssize > /dev/null; then
14064 ssizetype=`./ssize`
14065 echo "I'll be using $ssizetype for functions returning a byte count." >&4
14066else
14067 $cat >&4 <<EOM
14068Help! I can't compile and run the ssize_t test program: please enlighten me!
14069(This is probably a misconfiguration in your system or libraries, and
14070you really ought to fix it. Still, I'll try anyway.)
14071
14072I need a type that is the same size as $sizetype, but is guaranteed to
14073be signed. Common values are ssize_t, int and long.
14074
14075EOM
14076 rp="What signed type is the same size as $sizetype?"
14077 . ./myread
14078 ssizetype="$ans"
14079fi
14080$rm -f ssize ssize.*
14081
14082: see what type of char stdio uses.
14083echo " "
14084if $contains 'unsigned.*char.*_ptr;' `./findhdr stdio.h` >/dev/null 2>&1 ; then
14085 echo "Your stdio uses unsigned chars." >&4
14086 stdchar="unsigned char"
14087else
14088 echo "Your stdio uses signed chars." >&4
14089 stdchar="char"
14090fi
14091
14092: see if time exists
14093echo " "
14094if test "X$d_time" = X -o X"$timetype" = X; then
14095 if set time val -f d_time; eval $csym; $val; then
14096 echo 'time() found.' >&4
14097 val="$define"
14098 rp="What is the type returned by time() on this system?"
14099 set time_t timetype long stdio.h sys/types.h
14100 eval $typedef_ask
14101 else
14102 echo 'time() not found, hope that will do.' >&4
14103 val="$undef"
14104 timetype='int';
14105 fi
14106 set d_time
14107 eval $setvar
14108fi
14109
14110: see what type uids are declared as in the kernel
14111echo " "
14112echo "Looking for the type for user ids returned by getuid()."
14113set uid_t uidtype xxx stdio.h sys/types.h
14114eval $typedef
14115case "$uidtype" in
14116xxx)
14117 xxx=`./findhdr sys/user.h`
14118 set `grep '_ruid;' "$xxx" 2>/dev/null` unsigned short
14119 case $1 in
14120 unsigned) dflt="$1 $2" ;;
14121 *) dflt="$1" ;;
14122 esac
14123 ;;
14124*) dflt="$uidtype";;
14125esac
14126case "$uidtype" in
14127uid_t) echo "uid_t found." ;;
14128*) rp="What is the type for user ids returned by getuid()?"
14129 . ./myread
14130 uidtype="$ans"
14131 ;;
14132esac
14133
14134echo " "
14135case "$uidtype" in
14136*_t) zzz="$uidtype" ;;
14137*) zzz="uid" ;;
14138esac
14139echo "Checking the size of $zzz..." >&4
14140cat > try.c <<EOCP
14141#include <sys/types.h>
14142#include <stdio.h>
14143int main() {
14144 printf("%d\n", (int)sizeof($uidtype));
14145 exit(0);
14146}
14147EOCP
14148set try
14149if eval $compile_ok; then
14150 yyy=`./try`
14151 case "$yyy" in
14152 '') uidsize=4
14153 echo "(I can't execute the test program--guessing $uidsize.)" >&4
14154 ;;
14155 *) uidsize=$yyy
14156 echo "Your $zzz is $uidsize bytes long."
14157 ;;
14158 esac
14159else
14160 uidsize=4
14161 echo "(I can't compile the test program--guessing $uidsize.)" >&4
14162fi
14163
14164echo " "
14165case "$uidtype" in
14166*_t) zzz="$uidtype" ;;
14167*) zzz="uid" ;;
14168esac
14169echo "Checking the sign of $zzz..." >&4
14170cat > try.c <<EOCP
14171#include <sys/types.h>
14172#include <stdio.h>
14173int main() {
14174 $uidtype foo = -1;
14175 if (foo < 0)
14176 printf("-1\n");
14177 else
14178 printf("1\n");
14179}
14180EOCP
14181set try
14182if eval $compile; then
14183 yyy=`./try`
14184 case "$yyy" in
14185 '') uidsign=1
14186 echo "(I can't execute the test program--guessing unsigned.)" >&4
14187 ;;
14188 *) uidsign=$yyy
14189 case "$uidsign" in
14190 1) echo "Your $zzz is unsigned." ;;
14191 -1) echo "Your $zzz is signed." ;;
14192 esac
14193 ;;
14194 esac
14195else
14196 uidsign=1
14197 echo "(I can't compile the test program--guessing unsigned.)" >&4
14198fi
14199
14200
14201
14202echo " "
14203$echo "Checking the format string to be used for uids..." >&4
14204
14205case "$uidsign" in
14206-1) if $test X"$uidsize" = X"$ivsize"; then
14207 uidformat="$ivdformat"
14208 else
14209 if $test X"$uidsize" = X"$longsize"; then
14210 uidformat='"ld"'
14211 else
14212 if $test X"$uidsize" = X"$intsize"; then
14213 uidformat='"d"'
14214 else
14215 if $test X"$uidsize" = X"$shortsize"; then
14216 uidformat='"hd"'
14217 fi
14218 fi
14219 fi
14220 fi
14221 ;;
14222*) if $test X"$uidsize" = X"$uvsize"; then
14223 uidformat="$uvuformat"
14224 else
14225 if $test X"$uidsize" = X"$longsize"; then
14226 uidformat='"lu"'
14227 else
14228 if $test X"$uidsize" = X"$intsize"; then
14229 uidformat='"u"'
14230 else
14231 if $test X"$uidsize" = X"$shortsize"; then
14232 uidformat='"hu"'
14233 fi
14234 fi
14235 fi
14236 fi
14237 ;;
14238esac
14239
14240: see if dbm.h is available
14241: see if dbmclose exists
14242set dbmclose d_dbmclose
14243eval $inlibc
14244
14245case "$d_dbmclose" in
14246$define)
14247 set dbm.h i_dbm
14248 eval $inhdr
14249 case "$i_dbm" in
14250 $define)
14251 val="$undef"
14252 set i_rpcsvcdbm
14253 eval $setvar
14254 ;;
14255 *) set rpcsvc/dbm.h i_rpcsvcdbm
14256 eval $inhdr
14257 ;;
14258 esac
14259 ;;
14260*) echo "We won't be including <dbm.h>"
14261 val="$undef"
14262 set i_dbm
14263 eval $setvar
14264 val="$undef"
14265 set i_rpcsvcdbm
14266 eval $setvar
14267 ;;
14268esac
14269
14270: see if this is a sys/file.h system
14271val=''
14272set sys/file.h val
14273eval $inhdr
14274
14275: do we need to include sys/file.h ?
14276case "$val" in
14277"$define")
14278 echo " "
14279 if $h_sysfile; then
14280 val="$define"
14281 echo "We'll be including <sys/file.h>." >&4
14282 else
14283 val="$undef"
14284 echo "We won't be including <sys/file.h>." >&4
14285 fi
14286 ;;
14287*)
14288 h_sysfile=false
14289 ;;
14290esac
14291set i_sysfile
14292eval $setvar
14293
14294: see if fcntl.h is there
14295val=''
14296set fcntl.h val
14297eval $inhdr
14298
14299: see if we can include fcntl.h
14300case "$val" in
14301"$define")
14302 echo " "
14303 if $h_fcntl; then
14304 val="$define"
14305 echo "We'll be including <fcntl.h>." >&4
14306 else
14307 val="$undef"
14308 if $h_sysfile; then
14309 echo "We don't need to include <fcntl.h> if we include <sys/file.h>." >&4
14310 else
14311 echo "We won't be including <fcntl.h>." >&4
14312 fi
14313 fi
14314 ;;
14315*)
14316 h_fcntl=false
14317 val="$undef"
14318 ;;
14319esac
14320set i_fcntl
14321eval $setvar
14322
14323: see if this is a iconv.h system
14324set iconv.h i_iconv
14325eval $inhdr
14326
14327: see if this is a ieeefp.h system
14328set ieeefp.h i_ieeefp
14329eval $inhdr
14330
14331: see if this is a libutil.h system
14332set libutil.h i_libutil
14333eval $inhdr
14334
14335: see if locale.h is available
14336set locale.h i_locale
14337eval $inhdr
14338
14339: see if mach cthreads are available
14340if test "X$usethreads" = "X$define"; then
14341 set mach/cthreads.h i_machcthr
14342 eval $inhdr
14343else
14344 i_machcthr="$undef"
14345fi
14346
14347
14348
14349: see if this is a math.h system
14350set math.h i_math
14351eval $inhdr
14352
14353: see if this is a mntent.h system
14354set mntent.h i_mntent
14355eval $inhdr
14356
14357: see if ndbm.h is available
14358set ndbm.h t_ndbm
14359eval $inhdr
14360case "$t_ndbm" in
14361$define)
14362 : see if dbm_open exists
14363 set dbm_open d_dbm_open
14364 eval $inlibc
14365 case "$d_dbm_open" in
14366 $undef)
14367 t_ndbm="$undef"
14368 echo "We won't be including <ndbm.h>"
14369 ;;
14370 esac
14371 ;;
14372esac
14373val="$t_ndbm"
14374set i_ndbm
14375eval $setvar
14376
14377: see if net/errno.h is available
14378val=''
14379set net/errno.h val
14380eval $inhdr
14381
14382: Unfortunately, it causes problems on some systems. Arrgh.
14383case "$val" in
14384$define)
14385 cat > try.c <<'EOM'
14386#include <stdio.h>
14387#include <errno.h>
14388#include <net/errno.h>
14389int func()
14390{
14391 return ENOTSOCK;
14392}
14393EOM
14394 if $cc $ccflags -c try.c >/dev/null 2>&1; then
14395 echo "We'll be including <net/errno.h>." >&4
14396 else
14397 echo "We won't be including <net/errno.h>." >&4
14398 val="$undef"
14399 fi
14400 $rm -f try.* try
14401 ;;
14402esac
14403set i_neterrno
14404eval $setvar
14405
14406: see if netinet/tcp.h is available
14407set netinet/tcp.h i_netinettcp
14408eval $inhdr
14409
14410: see if this is a poll.h system
14411set poll.h i_poll
14412eval $inhdr
14413
14414: see if this is a prot.h system
14415set prot.h i_prot
14416eval $inhdr
14417
14418echo " "
14419$echo "Guessing which symbols your C compiler and preprocessor define..." >&4
14420$cat <<'EOSH' > Cppsym.know
14421a29k ABI64 aegis AES_SOURCE AIX AIX32 AIX370
14422AIX41 AIX42 AIX43 AIX_SOURCE aixpc ALL_SOURCE
14423alliant alpha am29000 AM29000 amiga AMIGAOS AMIX
14424ansi ANSI_C_SOURCE apollo ardent atarist att386 att3b BeOS
14425BIG_ENDIAN BIT_MSF bsd BSD bsd43 bsd4_2 bsd4_3 BSD4_3 bsd4_4
14426BSD_4_3 BSD_4_4 BSD_NET2 BSD_TIME BSD_TYPES BSDCOMPAT bsdi
14427bull c cadmus clipper CMU COFF COMPILER_VERSION
14428concurrent convex cpu cray CRAY CRAYMPP ctix CX_UX
14429CYGWIN DGUX DGUX_SOURCE DJGPP dmert DOLPHIN DPX2 DSO
14430Dynix DynixPTX ELF encore EPI EXTENSIONS FILE_OFFSET_BITS
14431FreeBSD GCC_NEW_VARARGS gcos gcx gimpel
14432GNU_SOURCE GNUC GNUC_MINOR GO32 gould GOULD_PN
14433H3050R H3050RX hbullx20 hcx host_mips
14434hp200 hp300 hp700 HP700 hp800 hp9000
14435hp9000s200 hp9000s300 hp9000s400 hp9000s500
14436hp9000s700 hp9000s800 hp9k8 hp_osf hppa hpux HPUX_SOURCE
14437i186 i286 i386 i486 i586 i686 i8086 i80960 i860 I960
14438iAPX286 ibm ibm032 ibmesa IBMR2 ibmrt ILP32 ILP64
14439INLINE_INTRINSICS INTRINSICS INT64 interdata is68k ksr1
14440LANGUAGE_C LARGE_FILE_API LARGEFILE64_SOURCE
14441LARGEFILE_SOURCE LFS64_LARGEFILE LFS_LARGEFILE
14442Linux LITTLE_ENDIAN LONG64 LONG_DOUBLE LONG_LONG
14443LONGDOUBLE LONGLONG LP64 luna luna88k Lynx
14444M68000 m68k m88100 m88k M88KBCS_TARGET M_COFF
14445M_I186 M_I286 M_I386 M_I8086 M_I86 M_I86SM M_SYS3
14446M_SYS5 M_SYSIII M_SYSV M_UNIX M_XENIX MACH machine MachTen
14447MATH_HAS_NO_SIDE_EFFECTS
14448mc300 mc500 mc68000 mc68010 mc68020 mc68030 mc68040
14449mc68060 mc68k mc68k32 mc700 mc88000 mc88100 merlin
14450mert MiNT mips MIPS_FPSET MIPS_ISA MIPS_SIM MIPS_SZINT
14451MIPS_SZLONG MIPS_SZPTR MIPSEB MIPSEL MODERN_C motorola
14452mpeix MSDOS MTXINU MULTIMAX mvs MVS n16 ncl_el ncl_mr
14453NetBSD news1500 news1700 news1800 news1900 news3700
14454news700 news800 news900 NeXT NLS ns16000 ns32000
14455ns32016 ns32332 ns32k nsc32000
14456OCS88 OEMVS OpenBSD os OS2 OS390 osf OSF1 OSF_SOURCE
14457pa_risc PA_RISC1_1 PA_RISC2_0 PARAGON parisc
14458pc532 pdp11 PGC PIC plexus PORTAR posix
14459POSIX1B_SOURCE POSIX2_SOURCE POSIX4_SOURCE
14460POSIX_C_SOURCE POSIX_SOURCE POWER
14461PROTOTYPES PWB pyr QNX R3000 REENTRANT RES Rhapsody RISC6000
14462riscix riscos RT scs SCO sequent sgi SGI_SOURCE sinix
14463SIZE_INT SIZE_LONG SIZE_PTR SOCKET_SOURCE SOCKETS_SOURCE
14464sony sony_news sonyrisc sparc sparclite spectrum
14465stardent stdc STDC_EXT stratos sun sun3 sun386
14466Sun386i svr3 svr4 SVR4_2 SVR4_SOURCE svr5
14467SX system SYSTYPE_BSD SYSTYPE_BSD43 SYSTYPE_BSD44
14468SYSTYPE_SVR4 SYSTYPE_SVR5 SYSTYPE_SYSV SYSV SYSV3 SYSV4 SYSV5
14469sysV68 sysV88 Tek4132 Tek4300 titan
14470tower tower32 tower32_200 tower32_600 tower32_700
14471tower32_800 tower32_850 tss
14472u370 u3b u3b2 u3b20 u3b200 u3b20d u3b5
14473ultrix UMAXV UnicomPBB UnicomPBD UNICOS UNICOSMK
14474unix UNIX95 UNIX99 unixpc unos USGr4 USGr4_2
14475Utek UTek UTS UWIN uxpm uxps vax venix VMESA vms xenix Xenix286
14476XOPEN_SOURCE XOPEN_SOURCE_EXTENDED XPG2 XPG2_EXTENDED
14477XPG3 XPG3_EXTENDED XPG4 XPG4_EXTENDED
14478z8000
14479EOSH
14480# Maybe put other stuff here too.
14481cat <<EOSH >>Cppsym.know
14482$osname
14483EOSH
14484./tr '[a-z]' '[A-Z]' < Cppsym.know > Cppsym.a
14485./tr '[A-Z]' '[a-z]' < Cppsym.know > Cppsym.b
14486$cat Cppsym.know > Cppsym.c
14487$cat Cppsym.a Cppsym.b Cppsym.c | $tr ' ' $trnl | sort | uniq > Cppsym.know
14488$rm -f Cppsym.a Cppsym.b Cppsym.c
14489cat <<EOSH > Cppsym
14490$startsh
14491if $test \$# -gt 0; then
14492 echo \$* | $tr " " "$trnl" | ./Cppsym.try > Cppsym.got
14493 if $test -s Cppsym.got; then
14494 $rm -f Cppsym.got
14495 exit 0
14496 fi
14497 $rm -f Cppsym.got
14498 exit 1
14499else
14500 $tr " " "$trnl" | ./Cppsym.try
14501 exit 0
14502fi
14503EOSH
14504chmod +x Cppsym
14505$eunicefix Cppsym
14506cat <<EOSH > Cppsym.try
14507$startsh
14508cat <<'EOCP' > try.c
14509#include <stdio.h>
14510int main() {
14511EOCP
14512$awk \\
14513EOSH
14514cat <<'EOSH' >> Cppsym.try
14515'length($1) > 0 {
14516 printf "#ifdef %s\n#if %s+0\nprintf(\"%s=%%ld\\n\", %s);\n#else\nprintf(\"%s\\n\");\n#endif\n#endif\n", $1, $1, $1, $1, $1
14517 printf "#ifdef _%s\n#if _%s+0\nprintf(\"_%s=%%ld\\n\", _%s);\n#else\nprintf(\"_%s\\n\");\n#endif\n#endif\n", $1, $1, $1, $1, $1
14518 printf "#ifdef __%s\n#if __%s+0\nprintf(\"__%s=%%ld\\n\", __%s);\n#else\nprintf(\"__%s\\n\");\n#endif\n#endif\n", $1, $1, $1, $1, $1
14519 printf "#ifdef __%s__\n#if __%s__+0\nprintf(\"__%s__=%%ld\\n\", __%s__);\n#else\nprintf(\"__%s__\\n\");\n#endif\n#endif\n", $1, $1, $1, $1, $1
14520}' >> try.c
14521echo '}' >> try.c
14522EOSH
14523cat <<EOSH >> Cppsym.try
14524ccflags="$ccflags"
14525case "$osname-$gccversion" in
14526irix-) ccflags="\$ccflags -woff 1178" ;;
14527os2-*) ccflags="\$ccflags -Zlinker /PM:VIO" ;;
14528esac
14529$cc $optimize \$ccflags $ldflags -o try try.c $libs && ./try$exe_ext
14530EOSH
14531chmod +x Cppsym.try
14532$eunicefix Cppsym.try
14533./Cppsym < Cppsym.know > Cppsym.true
14534: now check the C compiler for additional symbols
14535postprocess_cc_v=''
14536case "$osname" in
14537aix) postprocess_cc_v="|$tr , ' '" ;;
14538esac
14539$cat >ccsym <<EOS
14540$startsh
14541$cat >tmp.c <<EOF
14542extern int foo;
14543EOF
14544for i in \`$cc -v -c tmp.c 2>&1 $postprocess_cc_v\`
14545do
14546 case "\$i" in
14547 -D*) echo "\$i" | $sed 's/^-D//';;
14548 -A*) $test "$gccversion" && echo "\$i" | $sed 's/^-A\(.*\)(\(.*\))/\1=\2/';;
14549 esac
14550done
14551$rm -f try.c
14552EOS
14553postprocess_cc_v=''
14554chmod +x ccsym
14555$eunicefix ccsym
14556./ccsym > ccsym1.raw
14557if $test -s ccsym1.raw; then
14558 $sort ccsym1.raw | $uniq >ccsym.raw
14559else
14560 mv ccsym1.raw ccsym.raw
14561fi
14562
14563$awk '/\=/ { print $0; next }
14564 { print $0"=1" }' ccsym.raw >ccsym.list
14565$awk '/\=/ { print $0; next }
14566 { print $0"=1" }' Cppsym.true >ccsym.true
14567$comm -13 ccsym.true ccsym.list >ccsym.own
14568$comm -12 ccsym.true ccsym.list >ccsym.com
14569$comm -23 ccsym.true ccsym.list >ccsym.cpp
14570also=''
14571if $test -z ccsym.raw; then
14572 echo "Your C compiler doesn't seem to define any symbols!" >&4
14573 echo " "
14574 echo "However, your C preprocessor defines the following symbols:"
14575 $cat Cppsym.true
14576 ccsymbols=''
14577 cppsymbols=`$cat Cppsym.true`
14578 cppsymbols=`echo $cppsymbols`
14579 cppccsymbols="$cppsymbols"
14580else
14581 if $test -s ccsym.com; then
14582 echo "Your C compiler and pre-processor define these symbols:"
14583 $sed -e 's/\(..*\)=.*/\1/' ccsym.com
14584 also='also '
14585 symbols='ones'
14586 cppccsymbols=`$cat ccsym.com`
14587 cppccsymbols=`echo $cppccsymbols`
14588 $test "$silent" || sleep 1
14589 fi
14590 if $test -s ccsym.cpp; then
14591 $test "$also" && echo " "
14592 echo "Your C pre-processor ${also}defines the following symbols:"
14593 $sed -e 's/\(..*\)=.*/\1/' ccsym.cpp
14594 also='further '
14595 cppsymbols=`$cat ccsym.cpp`
14596 cppsymbols=`echo $cppsymbols`
14597 $test "$silent" || sleep 1
14598 fi
14599 if $test -s ccsym.own; then
14600 $test "$also" && echo " "
14601 echo "Your C compiler ${also}defines the following cpp symbols:"
14602 $sed -e 's/\(..*\)=1/\1/' ccsym.own
14603 $sed -e 's/\(..*\)=.*/\1/' ccsym.own | $uniq >>Cppsym.true
14604 ccsymbols=`$cat ccsym.own`
14605 ccsymbols=`echo $ccsymbols`
14606 $test "$silent" || sleep 1
14607 fi
14608fi
14609$rm -f ccsym* Cppsym.*
14610
14611: see if this is a termio system
14612val="$undef"
14613val2="$undef"
14614val3="$undef"
14615if $test `./findhdr termios.h`; then
14616 set tcsetattr i_termios
14617 eval $inlibc
14618 val3="$i_termios"
14619fi
14620echo " "
14621case "$val3" in
14622"$define") echo "You have POSIX termios.h... good!" >&4;;
14623*) if ./Cppsym pyr; then
14624 case "`/bin/universe`" in
14625 ucb) if $test `./findhdr sgtty.h`; then
14626 val2="$define"
14627 echo "<sgtty.h> found." >&4
14628 else
14629 echo "System is pyramid with BSD universe."
14630 echo "<sgtty.h> not found--you could have problems." >&4
14631 fi;;
14632 *) if $test `./findhdr termio.h`; then
14633 val="$define"
14634 echo "<termio.h> found." >&4
14635 else
14636 echo "System is pyramid with USG universe."
14637 echo "<termio.h> not found--you could have problems." >&4
14638 fi;;
14639 esac
14640 elif ./usg; then
14641 if $test `./findhdr termio.h`; then
14642 echo "<termio.h> found." >&4
14643 val="$define"
14644 elif $test `./findhdr sgtty.h`; then
14645 echo "<sgtty.h> found." >&4
14646 val2="$define"
14647 else
14648echo "Neither <termio.h> nor <sgtty.h> found--you could have problems." >&4
14649 fi
14650 else
14651 if $test `./findhdr sgtty.h`; then
14652 echo "<sgtty.h> found." >&4
14653 val2="$define"
14654 elif $test `./findhdr termio.h`; then
14655 echo "<termio.h> found." >&4
14656 val="$define"
14657 else
14658echo "Neither <sgtty.h> nor <termio.h> found--you could have problems." >&4
14659 fi
14660 fi;;
14661esac
14662set i_termio; eval $setvar
14663val=$val2; set i_sgtty; eval $setvar
14664val=$val3; set i_termios; eval $setvar
14665
14666: see if this is a shadow.h system
14667set shadow.h i_shadow
14668eval $inhdr
14669
14670: see if this is a socks.h system
14671set socks.h i_socks
14672eval $inhdr
14673
14674: see if stdarg is available
14675echo " "
14676if $test `./findhdr stdarg.h`; then
14677 echo "<stdarg.h> found." >&4
14678 valstd="$define"
14679else
14680 echo "<stdarg.h> NOT found." >&4
14681 valstd="$undef"
14682fi
14683
14684: see if varags is available
14685echo " "
14686if $test `./findhdr varargs.h`; then
14687 echo "<varargs.h> found." >&4
14688else
14689 echo "<varargs.h> NOT found, but that's ok (I hope)." >&4
14690fi
14691
14692: set up the varargs testing programs
14693$cat > varargs.c <<EOP
14694#ifdef I_STDARG
14695#include <stdarg.h>
14696#endif
14697#ifdef I_VARARGS
14698#include <varargs.h>
14699#endif
14700
14701#ifdef I_STDARG
14702int f(char *p, ...)
14703#else
14704int f(va_alist)
14705va_dcl
14706#endif
14707{
14708 va_list ap;
14709#ifndef I_STDARG
14710 char *p;
14711#endif
14712#ifdef I_STDARG
14713 va_start(ap,p);
14714#else
14715 va_start(ap);
14716 p = va_arg(ap, char *);
14717#endif
14718 va_end(ap);
14719}
14720EOP
14721$cat > varargs <<EOP
14722$startsh
14723if $cc -c $ccflags -D\$1 varargs.c >/dev/null 2>&1; then
14724 echo "true"
14725else
14726 echo "false"
14727fi
14728$rm -f varargs$_o
14729EOP
14730chmod +x varargs
14731
14732: now check which varargs header should be included
14733echo " "
14734i_varhdr=''
14735case "$valstd" in
14736"$define")
14737 if `./varargs I_STDARG`; then
14738 val='stdarg.h'
14739 elif `./varargs I_VARARGS`; then
14740 val='varargs.h'
14741 fi
14742 ;;
14743*)
14744 if `./varargs I_VARARGS`; then
14745 val='varargs.h'
14746 fi
14747 ;;
14748esac
14749case "$val" in
14750'')
14751echo "I could not find the definition for va_dcl... You have problems..." >&4
14752 val="$undef"; set i_stdarg; eval $setvar
14753 val="$undef"; set i_varargs; eval $setvar
14754 ;;
14755*)
14756 set i_varhdr
14757 eval $setvar
14758 case "$i_varhdr" in
14759 stdarg.h)
14760 val="$define"; set i_stdarg; eval $setvar
14761 val="$undef"; set i_varargs; eval $setvar
14762 ;;
14763 varargs.h)
14764 val="$undef"; set i_stdarg; eval $setvar
14765 val="$define"; set i_varargs; eval $setvar
14766 ;;
14767 esac
14768 echo "We'll include <$i_varhdr> to get va_dcl definition." >&4;;
14769esac
14770$rm -f varargs*
5f80c64f 14771
b4eb6b3d
JH
14772: see if stddef is available
14773set stddef.h i_stddef
14774eval $inhdr
923fc586 14775
b4eb6b3d
JH
14776: see if this is a sunmath.h system
14777set sunmath.h i_sunmath
14778eval $inhdr
5f80c64f 14779
b4eb6b3d
JH
14780: see if sys/access.h is available
14781set sys/access.h i_sysaccess
14782eval $inhdr
14783
14784: see if ioctl defs are in sgtty, termio, sys/filio or sys/ioctl
14785set sys/filio.h i_sysfilio
14786eval $inhdr
14787echo " "
14788if $test `./findhdr sys/ioctl.h`; then
14789 val="$define"
14790 echo '<sys/ioctl.h> found.' >&4
14791else
14792 val="$undef"
14793 if $test $i_sysfilio = "$define"; then
14794 echo '<sys/ioctl.h> NOT found.' >&4
5f80c64f 14795 else
b4eb6b3d
JH
14796 $test $i_sgtty = "$define" && xxx="sgtty.h"
14797 $test $i_termio = "$define" && xxx="termio.h"
14798 $test $i_termios = "$define" && xxx="termios.h"
14799echo "No <sys/ioctl.h> found, assuming ioctl args are defined in <$xxx>." >&4
14800 fi
14801fi
14802set i_sysioctl
14803eval $setvar
14804
14805
14806: see if this is a syslog.h system
14807set syslog.h i_syslog
14808eval $inhdr
14809
14810
14811: see if this is a sys/mode.h system
14812set sys/mode.h i_sysmode
14813eval $inhdr
14814
14815: see if sys/resource.h has to be included
14816set sys/resource.h i_sysresrc
14817eval $inhdr
14818
14819: see if sys/security.h is available
14820set sys/security.h i_syssecrt
14821eval $inhdr
14822
14823: see if this is a sys/statvfs.h system
14824set sys/statvfs.h i_sysstatvfs
14825eval $inhdr
14826
14827: see if this is a sys/uio.h system
14828set sys/uio.h i_sysuio
14829eval $inhdr
14830
14831: see if this is a sys/un.h system
14832set sys/un.h i_sysun
14833eval $inhdr
14834
14835
14836: see if this is a sys/utsname.h system
14837set sys/utsname.h i_sysutsname
14838eval $inhdr
14839
14840: see if this is a syswait system
14841set sys/wait.h i_syswait
14842eval $inhdr
14843
14844: see if this is a ustat.h system
14845set ustat.h i_ustat
14846eval $inhdr
14847
14848: see if this is an utime system
14849set utime.h i_utime
14850eval $inhdr
14851
14852: see if this is a values.h system
14853set values.h i_values
14854eval $inhdr
14855
14856: see if this is a vfork system
14857case "$d_vfork" in
14858"$define")
14859 set vfork.h i_vfork
14860 eval $inhdr
14861 ;;
14862*)
14863 i_vfork="$undef"
14864 ;;
14865esac
14866
14867: see if gdbm.h is available
14868set gdbm.h t_gdbm
14869eval $inhdr
14870case "$t_gdbm" in
14871$define)
14872 : see if gdbm_open exists
14873 set gdbm_open d_gdbm_open
14874 eval $inlibc
14875 case "$d_gdbm_open" in
14876 $undef)
14877 t_gdbm="$undef"
14878 echo "We won't be including <gdbm.h>"
5f80c64f 14879 ;;
b4eb6b3d
JH
14880 esac
14881 ;;
14882esac
14883val="$t_gdbm"
14884set i_gdbm
14885eval $setvar
14886
14887echo " "
14888echo "Looking for extensions..." >&4
14889: If we are using the old config.sh, known_extensions may contain
14890: old or inaccurate or duplicate values.
14891known_extensions=''
14892nonxs_extensions=''
14893: We do not use find because it might not be available.
14894: We do not just use MANIFEST because the user may have dropped
14895: some additional extensions into the source tree and expect them
14896: to be built.
14897
14898: Function to recursively find available extensions, ignoring DynaLoader
14899: NOTE: recursion limit of 10 to prevent runaway in case of symlink madness
14900find_extensions='
14901 for xxx in *; do
14902 case "$xxx" in
14903 DynaLoader|dynaload) ;;
14904 *)
14905 if $test -f $xxx/$xxx.xs; then
14906 known_extensions="$known_extensions $1$xxx";
14907 elif $test -f $xxx/Makefile.PL; then
14908 nonxs_extensions="$nonxs_extensions $1$xxx";
14909 else
14910 if $test -d $xxx -a $# -lt 10; then
14911 set $1$xxx/ $*;
14912 cd $xxx;
14913 eval $find_extensions;
14914 cd ..;
14915 shift;
14916 fi;
14917 fi
14918 ;;
14919 esac;
14920 done'
14921tdir=`pwd`
14922cd $rsrc/ext
14923set X
14924shift
14925eval $find_extensions
14926set X $nonxs_extensions
14927shift
14928nonxs_extensions="$*"
14929set X $known_extensions
14930shift
14931known_extensions="$*"
14932cd $tdir
14933
14934: Now see which are supported on this system.
14935avail_ext=''
14936for xxx in $known_extensions ; do
14937 case "$xxx" in
14938 DB_File|db_file)
14939 case "$i_db" in
14940 $define) avail_ext="$avail_ext $xxx" ;;
14941 esac
14942 ;;
14943 GDBM_File|gdbm_fil)
14944 case "$i_gdbm" in
14945 $define) avail_ext="$avail_ext $xxx" ;;
14946 esac
14947 ;;
14948 NDBM_File|ndbm_fil)
14949 case "$i_ndbm" in
14950 $define)
14951 case "$osname-$use64bitint" in
14952 hpux-define)
14953 case "$libs" in
14954 *-lndbm*) avail_ext="$avail_ext $xxx" ;;
14955 esac
14956 ;;
14957 *) avail_ext="$avail_ext $xxx" ;;
14958 esac
14959 ;;
14960 esac
14961 ;;
14962 ODBM_File|odbm_fil)
14963 case "${i_dbm}${i_rpcsvcdbm}" in
14964 *"${define}"*)
14965 case "$osname-$use64bitint" in
14966 hpux-define)
14967 case "$libs" in
14968 *-ldbm*) avail_ext="$avail_ext $xxx" ;;
14969 esac
14970 ;;
14971 *) avail_ext="$avail_ext $xxx" ;;
14972 esac
14973 ;;
14974 esac
14975 ;;
14976 POSIX|posix)
14977 case "$useposix" in
14978 true|define|y) avail_ext="$avail_ext $xxx" ;;
14979 esac
14980 ;;
14981 Opcode|opcode)
14982 case "$useopcode" in
14983 true|define|y) avail_ext="$avail_ext $xxx" ;;
14984 esac
14985 ;;
14986 Socket|socket)
14987 case "$d_socket" in
14988 true|$define|y) avail_ext="$avail_ext $xxx" ;;
14989 esac
14990 ;;
14991 Sys/Syslog|sys/syslog)
14992 : XXX syslog requires socket
14993 case "$d_socket" in
14994 true|$define|y) avail_ext="$avail_ext $xxx" ;;
14995 esac
14996 ;;
14997 Thread|thread)
14998 case "$usethreads" in
14999 true|$define|y) avail_ext="$avail_ext $xxx" ;;
15000 esac
15001 ;;
15002 IPC/SysV|ipc/sysv)
15003 : XXX Do we need a useipcsysv variable here
15004 case "${d_msg}${d_sem}${d_shm}" in
15005 *"${define}"*) avail_ext="$avail_ext $xxx" ;;
15006 esac
15007 ;;
15008 *) avail_ext="$avail_ext $xxx"
5f80c64f
JH
15009 ;;
15010 esac
b4eb6b3d 15011done
5f80c64f 15012
b4eb6b3d
JH
15013set X $avail_ext
15014shift
15015avail_ext="$*"
5f80c64f 15016
b4eb6b3d
JH
15017: Now see which nonxs extensions are supported on this system.
15018: For now assume all are.
15019nonxs_ext=''
15020for xxx in $nonxs_extensions ; do
15021 case "$xxx" in
15022 *) nonxs_ext="$nonxs_ext $xxx"
15023 ;;
15024 esac
15025done
5f80c64f 15026
b4eb6b3d
JH
15027set X $nonxs_ext
15028shift
15029nonxs_ext="$*"
15030
15031case $usedl in
15032$define)
15033 $cat <<EOM
15034A number of extensions are supplied with $package. You may choose to
15035compile these extensions for dynamic loading (the default), compile
15036them into the $package executable (static loading), or not include
15037them at all. Answer "none" to include no extensions.
15038Note that DynaLoader is always built and need not be mentioned here.
5f80c64f
JH
15039
15040EOM
b4eb6b3d
JH
15041 case "$dynamic_ext" in
15042 '') dflt="$avail_ext" ;;
15043 *) dflt="$dynamic_ext"
15044 # Perhaps we are reusing an old out-of-date config.sh.
15045 case "$hint" in
15046 previous)
15047 if test X"$dynamic_ext" != X"$avail_ext"; then
15048 $cat <<EOM
15049NOTICE: Your previous config.sh list may be incorrect.
15050The extensions now available to you are
15051 ${avail_ext}
15052but the default list from your previous config.sh is
15053 ${dynamic_ext}
9c839522 15054
b4eb6b3d
JH
15055EOM
15056 fi
9c839522
PM
15057 ;;
15058 esac
b4eb6b3d
JH
15059 ;;
15060 esac
5f80c64f 15061 case "$dflt" in
b4eb6b3d
JH
15062 '') dflt=none;;
15063 esac
15064 rp="What extensions do you wish to load dynamically?"
15065 . ./myread
15066 case "$ans" in
15067 none) dynamic_ext=' ' ;;
15068 *) dynamic_ext="$ans" ;;
5f80c64f 15069 esac
5f80c64f 15070
b4eb6b3d
JH
15071 case "$static_ext" in
15072 '')
15073 : Exclude those already listed in dynamic linking
15074 dflt=''
15075 for xxx in $avail_ext; do
15076 case " $dynamic_ext " in
15077 *" $xxx "*) ;;
15078 *) dflt="$dflt $xxx" ;;
15079 esac
15080 done
15081 set X $dflt
15082 shift
15083 dflt="$*"
15084 ;;
15085 *) dflt="$static_ext"
15086 ;;
15087 esac
9c839522 15088
b4eb6b3d
JH
15089 case "$dflt" in
15090 '') dflt=none;;
15091 esac
15092 rp="What extensions do you wish to load statically?"
15093 . ./myread
15094 case "$ans" in
15095 none) static_ext=' ' ;;
15096 *) static_ext="$ans" ;;
15097 esac
15098 ;;
15099*)
15100 $cat <<EOM
15101A number of extensions are supplied with $package. Answer "none"
15102to include no extensions.
15103Note that DynaLoader is always built and need not be mentioned here.
9c839522 15104
b4eb6b3d
JH
15105EOM
15106 case "$static_ext" in
15107 '') dflt="$avail_ext" ;;
15108 *) dflt="$static_ext"
15109 # Perhaps we are reusing an old out-of-date config.sh.
15110 case "$hint" in
15111 previous)
15112 if test X"$static_ext" != X"$avail_ext"; then
15113 $cat <<EOM
15114NOTICE: Your previous config.sh list may be incorrect.
15115The extensions now available to you are
15116 ${avail_ext}
15117but the default list from your previous config.sh is
15118 ${static_ext}
5f80c64f
JH
15119
15120EOM
b4eb6b3d
JH
15121 fi
15122 ;;
15123 esac
15124 ;;
15125 esac
15126 : Exclude those that are not xs extensions
15127 case "$dflt" in
15128 '') dflt=none;;
15129 esac
15130 rp="What extensions do you wish to include?"
15131 . ./myread
15132 case "$ans" in
15133 none) static_ext=' ' ;;
15134 *) static_ext="$ans" ;;
15135 esac
15136 ;;
5f80c64f
JH
15137esac
15138
b4eb6b3d
JH
15139set X $dynamic_ext $static_ext $nonxs_ext
15140shift
15141extensions="$*"
15142
9c839522
PM
15143: Remove libraries needed only for extensions
15144: The appropriate ext/Foo/Makefile.PL will add them back in, if necessary.
15145case "$usedl" in
15146$define|true|[yY]*)
15147 set X `echo " $libs " | sed -e 's@ -lndbm @ @' -e 's@ -lgdbm @ @' -e 's@ -ldbm @ @' -e 's@ -ldb @ @'`
15148 shift
15149 perllibs="$*"
15150 ;;
15151*) perllibs="$libs"
15152 ;;
15153esac
5f80c64f
JH
15154
15155: Remove build directory name from cppstdin so it can be used from
15156: either the present location or the final installed location.
15157echo " "
15158: Get out of the UU directory to get correct path name.
15159cd ..
15160case "$cppstdin" in
15161`pwd`/cppstdin)
15162 echo "Stripping down cppstdin path name"
15163 cppstdin=cppstdin
15164 ;;
15165esac
15166cd UU
15167
15168: end of configuration questions
15169echo " "
15170echo "End of configuration questions."
15171echo " "
15172
15173: back to where it started
15174if test -d ../UU; then
15175 cd ..
15176fi
15177
15178: configuration may be patched via a 'config.over' file
15179if $test -f config.over; then
15180 echo " "
15181 dflt=y
15182 rp='I see a config.over file. Do you wish to load it?'
15183 . UU/myread
15184 case "$ans" in
15185 n*) echo "OK, I'll ignore it.";;
15186 *) . ./config.over
15187 echo "Configuration override changes have been loaded."
15188 ;;
15189 esac
15190fi
15191
15192: in case they want portability, strip down executable paths
15193case "$d_portable" in
15194"$define")
15195 echo " "
15196 echo "Stripping down executable paths..." >&4
15197 for file in $loclist $trylist; do
534ac15a
JH
15198 eval temp=\$$file
15199 eval $file=`basename $temp`
5f80c64f
JH
15200 done
15201 ;;
15202esac
15203
15204: create config.sh file
15205echo " "
15206echo "Creating config.sh..." >&4
15207$spitshell <<EOT >config.sh
15208$startsh
15209#
15210# This file was produced by running the Configure script. It holds all the
15211# definitions figured out by Configure. Should you modify one of these values,
15212# do not forget to propagate your changes by running "Configure -der". You may
15213# instead choose to run each of the .SH files by yourself, or "Configure -S".
15214#
15215
15216# Package name : $package
15217# Source directory : $src
15218# Configuration time: $cf_time
15219# Configured by : $cf_by
15220# Target system : $myuname
15221
15222Author='$Author'
15223Date='$Date'
15224Header='$Header'
15225Id='$Id'
15226Locker='$Locker'
15227Log='$Log'
15228Mcc='$Mcc'
15229RCSfile='$RCSfile'
15230Revision='$Revision'
15231Source='$Source'
15232State='$State'
15233_a='$_a'
15234_exe='$_exe'
15235_o='$_o'
b4eb6b3d
JH
15236afs='$afs'
15237alignbytes='$alignbytes'
15238ansi2knr='$ansi2knr'
15239aphostname='$aphostname'
15240api_revision='$api_revision'
15241api_subversion='$api_subversion'
15242api_version='$api_version'
15243api_versionstring='$api_versionstring'
5f80c64f 15244ar='$ar'
b4eb6b3d
JH
15245archlib='$archlib'
15246archlibexp='$archlibexp'
15247archname64='$archname64'
15248archname='$archname'
5f80c64f
JH
15249archobjs='$archobjs'
15250awk='$awk'
b4eb6b3d 15251baserev='$baserev'
5f80c64f 15252bash='$bash'
b4eb6b3d
JH
15253bin='$bin'
15254bincompat5005='$bincompat5005'
15255binexp='$binexp'
5f80c64f
JH
15256bison='$bison'
15257byacc='$byacc'
b4eb6b3d 15258byteorder='$byteorder'
5f80c64f 15259c='$c'
b4eb6b3d 15260castflags='$castflags'
5f80c64f
JH
15261cat='$cat'
15262cc='$cc'
15263cccdlflags='$cccdlflags'
15264ccdlflags='$ccdlflags'
15265ccflags='$ccflags'
b4eb6b3d 15266ccflags_uselargefiles='$ccflags_uselargefiles'
e723fc21 15267ccname='$ccname'
b4eb6b3d 15268ccsymbols='$ccsymbols'
6b356c8e 15269ccversion='$ccversion'
5f80c64f 15270cf_by='$cf_by'
b4eb6b3d 15271cf_email='$cf_email'
5f80c64f 15272cf_time='$cf_time'
b4eb6b3d 15273charsize='$charsize'
5f80c64f
JH
15274chgrp='$chgrp'
15275chmod='$chmod'
15276chown='$chown'
b4eb6b3d 15277clocktype='$clocktype'
5f80c64f
JH
15278comm='$comm'
15279compress='$compress'
15280contains='$contains'
15281cp='$cp'
15282cpio='$cpio'
15283cpp='$cpp'
b4eb6b3d
JH
15284cpp_stuff='$cpp_stuff'
15285cppccsymbols='$cppccsymbols'
5f80c64f
JH
15286cppflags='$cppflags'
15287cpplast='$cpplast'
15288cppminus='$cppminus'
15289cpprun='$cpprun'
15290cppstdin='$cppstdin'
b4eb6b3d
JH
15291cppsymbols='$cppsymbols'
15292crosscompile='$crosscompile'
15293cryptlib='$cryptlib'
5f80c64f 15294csh='$csh'
b4eb6b3d
JH
15295d_Gconvert='$d_Gconvert'
15296d_PRIEUldbl='$d_PRIEUldbl'
15297d_PRIFUldbl='$d_PRIFUldbl'
15298d_PRIGUldbl='$d_PRIGUldbl'
15299d_PRIXU64='$d_PRIXU64'
15300d_PRId64='$d_PRId64'
15301d_PRIeldbl='$d_PRIeldbl'
15302d_PRIfldbl='$d_PRIfldbl'
15303d_PRIgldbl='$d_PRIgldbl'
15304d_PRIi64='$d_PRIi64'
15305d_PRIo64='$d_PRIo64'
15306d_PRIu64='$d_PRIu64'
15307d_PRIx64='$d_PRIx64'
15308d_SCNfldbl='$d_SCNfldbl'
15309d_access='$d_access'
15310d_accessx='$d_accessx'
15311d_alarm='$d_alarm'
15312d_archlib='$d_archlib'
15313d_atolf='$d_atolf'
15314d_atoll='$d_atoll'
15315d_attribut='$d_attribut'
15316d_bcmp='$d_bcmp'
15317d_bcopy='$d_bcopy'
15318d_bincompat5005='$d_bincompat5005'
5f80c64f 15319d_bsd='$d_bsd'
b4eb6b3d
JH
15320d_bsdgetpgrp='$d_bsdgetpgrp'
15321d_bsdsetpgrp='$d_bsdsetpgrp'
15322d_bzero='$d_bzero'
15323d_casti32='$d_casti32'
15324d_castneg='$d_castneg'
15325d_charvspr='$d_charvspr'
15326d_chown='$d_chown'
15327d_chroot='$d_chroot'
15328d_chsize='$d_chsize'
15329d_closedir='$d_closedir'
15330d_const='$d_const'
15331d_crypt='$d_crypt'
15332d_csh='$d_csh'
15333d_cuserid='$d_cuserid'
15334d_dbl_dig='$d_dbl_dig'
15335d_difftime='$d_difftime'
15336d_dirnamlen='$d_dirnamlen'
15337d_dlerror='$d_dlerror'
5f80c64f 15338d_dlopen='$d_dlopen'
b4eb6b3d
JH
15339d_dlsymun='$d_dlsymun'
15340d_dosuid='$d_dosuid'
15341d_drand48proto='$d_drand48proto'
15342d_dup2='$d_dup2'
15343d_eaccess='$d_eaccess'
15344d_endgrent='$d_endgrent'
15345d_endhent='$d_endhent'
15346d_endnent='$d_endnent'
15347d_endpent='$d_endpent'
15348d_endpwent='$d_endpwent'
15349d_endsent='$d_endsent'
15350d_eofnblk='$d_eofnblk'
5f80c64f 15351d_eunice='$d_eunice'
b4eb6b3d
JH
15352d_fchmod='$d_fchmod'
15353d_fchown='$d_fchown'
15354d_fcntl='$d_fcntl'
15355d_fd_macros='$d_fd_macros'
15356d_fd_set='$d_fd_set'
15357d_fds_bits='$d_fds_bits'
15358d_fgetpos='$d_fgetpos'
15359d_flexfnam='$d_flexfnam'
15360d_flock='$d_flock'
15361d_fork='$d_fork'
15362d_fpathconf='$d_fpathconf'
15363d_fpos64_t='$d_fpos64_t'
15364d_frexpl='$d_frexpl'
15365d_fs_data_s='$d_fs_data_s'
15366d_fseeko='$d_fseeko'
15367d_fsetpos='$d_fsetpos'
15368d_fstatfs='$d_fstatfs'
15369d_fstatvfs='$d_fstatvfs'
15370d_ftello='$d_ftello'
15371d_ftime='$d_ftime'
15372d_getcwd='$d_getcwd'
15373d_getespwnam='$d_getespwnam'
15374d_getfsstat='$d_getfsstat'
15375d_getgrent='$d_getgrent'
15376d_getgrps='$d_getgrps'
15377d_gethbyaddr='$d_gethbyaddr'
15378d_gethbyname='$d_gethbyname'
15379d_gethent='$d_gethent'
15380d_gethname='$d_gethname'
15381d_gethostprotos='$d_gethostprotos'
15382d_getlogin='$d_getlogin'
15383d_getmnt='$d_getmnt'
15384d_getmntent='$d_getmntent'
15385d_getnbyaddr='$d_getnbyaddr'
15386d_getnbyname='$d_getnbyname'
15387d_getnent='$d_getnent'
15388d_getnetprotos='$d_getnetprotos'
15389d_getpbyname='$d_getpbyname'
15390d_getpbynumber='$d_getpbynumber'
15391d_getpent='$d_getpent'
15392d_getpgid='$d_getpgid'
15393d_getpgrp2='$d_getpgrp2'
15394d_getpgrp='$d_getpgrp'
15395d_getppid='$d_getppid'
15396d_getprior='$d_getprior'
15397d_getprotoprotos='$d_getprotoprotos'
15398d_getprpwnam='$d_getprpwnam'
15399d_getpwent='$d_getpwent'
15400d_getsbyname='$d_getsbyname'
15401d_getsbyport='$d_getsbyport'
15402d_getsent='$d_getsent'
15403d_getservprotos='$d_getservprotos'
15404d_getspnam='$d_getspnam'
15405d_gettimeod='$d_gettimeod'
5f80c64f 15406d_gnulibc='$d_gnulibc'
b4eb6b3d
JH
15407d_grpasswd='$d_grpasswd'
15408d_hasmntopt='$d_hasmntopt'
15409d_htonl='$d_htonl'
15410d_iconv='$d_iconv'
15411d_index='$d_index'
15412d_inetaton='$d_inetaton'
15413d_int64_t='$d_int64_t'
15414d_isascii='$d_isascii'
15415d_isnan='$d_isnan'
15416d_isnanl='$d_isnanl'
15417d_killpg='$d_killpg'
15418d_lchown='$d_lchown'
15419d_ldbl_dig='$d_ldbl_dig'
15420d_link='$d_link'
15421d_locconv='$d_locconv'
15422d_lockf='$d_lockf'
15423d_longdbl='$d_longdbl'
15424d_longlong='$d_longlong'
15425d_lseekproto='$d_lseekproto'
15426d_lstat='$d_lstat'
15427d_madvise='$d_madvise'
15428d_mblen='$d_mblen'
15429d_mbstowcs='$d_mbstowcs'
15430d_mbtowc='$d_mbtowc'
15431d_memchr='$d_memchr'
15432d_memcmp='$d_memcmp'
15433d_memcpy='$d_memcpy'
15434d_memmove='$d_memmove'
15435d_memset='$d_memset'
15436d_mkdir='$d_mkdir'
15437d_mkdtemp='$d_mkdtemp'
15438d_mkfifo='$d_mkfifo'
15439d_mkstemp='$d_mkstemp'
15440d_mkstemps='$d_mkstemps'
15441d_mktime='$d_mktime'
15442d_mmap='$d_mmap'
15443d_modfl='$d_modfl'
15444d_mprotect='$d_mprotect'
15445d_msg='$d_msg'
15446d_msg_ctrunc='$d_msg_ctrunc'
15447d_msg_dontroute='$d_msg_dontroute'
15448d_msg_oob='$d_msg_oob'
15449d_msg_peek='$d_msg_peek'
15450d_msg_proxy='$d_msg_proxy'
15451d_msgctl='$d_msgctl'
15452d_msgget='$d_msgget'
15453d_msgrcv='$d_msgrcv'
15454d_msgsnd='$d_msgsnd'
15455d_msync='$d_msync'
15456d_munmap='$d_munmap'
15457d_mymalloc='$d_mymalloc'
15458d_nice='$d_nice'
15459d_nv_preserves_uv='$d_nv_preserves_uv'
15460d_nv_preserves_uv_bits='$d_nv_preserves_uv_bits'
15461d_off64_t='$d_off64_t'
15462d_old_pthread_create_joinable='$d_old_pthread_create_joinable'
15463d_oldpthreads='$d_oldpthreads'
15464d_oldsock='$d_oldsock'
15465d_open3='$d_open3'
15466d_pathconf='$d_pathconf'
15467d_pause='$d_pause'
15468d_perl_otherlibdirs='$d_perl_otherlibdirs'
15469d_phostname='$d_phostname'
15470d_pipe='$d_pipe'
15471d_poll='$d_poll'
5f80c64f 15472d_portable='$d_portable'
b4eb6b3d
JH
15473d_pthread_yield='$d_pthread_yield'
15474d_pwage='$d_pwage'
15475d_pwchange='$d_pwchange'
15476d_pwclass='$d_pwclass'
15477d_pwcomment='$d_pwcomment'
15478d_pwexpire='$d_pwexpire'
15479d_pwgecos='$d_pwgecos'
15480d_pwpasswd='$d_pwpasswd'
15481d_pwquota='$d_pwquota'
15482d_qgcvt='$d_qgcvt'
15483d_quad='$d_quad'
15484d_readdir='$d_readdir'
15485d_readlink='$d_readlink'
15486d_rename='$d_rename'
15487d_rewinddir='$d_rewinddir'
15488d_rmdir='$d_rmdir'
15489d_safebcpy='$d_safebcpy'
15490d_safemcpy='$d_safemcpy'
15491d_sanemcmp='$d_sanemcmp'
15492d_sched_yield='$d_sched_yield'
15493d_scm_rights='$d_scm_rights'
15494d_seekdir='$d_seekdir'
15495d_select='$d_select'
15496d_sem='$d_sem'
15497d_semctl='$d_semctl'
15498d_semctl_semid_ds='$d_semctl_semid_ds'
15499d_semctl_semun='$d_semctl_semun'
15500d_semget='$d_semget'
15501d_semop='$d_semop'
15502d_setegid='$d_setegid'
15503d_seteuid='$d_seteuid'
15504d_setgrent='$d_setgrent'
15505d_setgrps='$d_setgrps'
15506d_sethent='$d_sethent'
15507d_setlinebuf='$d_setlinebuf'
15508d_setlocale='$d_setlocale'
15509d_setnent='$d_setnent'
15510d_setpent='$d_setpent'
15511d_setpgid='$d_setpgid'
15512d_setpgrp2='$d_setpgrp2'
15513d_setpgrp='$d_setpgrp'
15514d_setprior='$d_setprior'
15515d_setproctitle='$d_setproctitle'
15516d_setpwent='$d_setpwent'
15517d_setregid='$d_setregid'
15518d_setresgid='$d_setresgid'
15519d_setresuid='$d_setresuid'
15520d_setreuid='$d_setreuid'
15521d_setrgid='$d_setrgid'
15522d_setruid='$d_setruid'
15523d_setsent='$d_setsent'
15524d_setsid='$d_setsid'
15525d_setvbuf='$d_setvbuf'
15526d_sfio='$d_sfio'
15527d_shm='$d_shm'
15528d_shmat='$d_shmat'
15529d_shmatprototype='$d_shmatprototype'
15530d_shmctl='$d_shmctl'
15531d_shmdt='$d_shmdt'
15532d_shmget='$d_shmget'
15533d_sigaction='$d_sigaction'
15534d_sigsetjmp='$d_sigsetjmp'
15535d_socket='$d_socket'
15536d_socklen_t='$d_socklen_t'
15537d_sockpair='$d_sockpair'
15538d_socks5_init='$d_socks5_init'
15539d_sqrtl='$d_sqrtl'
15540d_statblks='$d_statblks'
15541d_statfs_f_flags='$d_statfs_f_flags'
15542d_statfs_s='$d_statfs_s'
15543d_statvfs='$d_statvfs'
15544d_stdio_cnt_lval='$d_stdio_cnt_lval'
15545d_stdio_ptr_lval='$d_stdio_ptr_lval'
15546d_stdio_stream_array='$d_stdio_stream_array'
15547d_stdiobase='$d_stdiobase'
15548d_stdstdio='$d_stdstdio'
15549d_strchr='$d_strchr'
15550d_strcoll='$d_strcoll'
15551d_strctcpy='$d_strctcpy'
15552d_strerrm='$d_strerrm'
15553d_strerror='$d_strerror'
15554d_strtod='$d_strtod'
15555d_strtol='$d_strtol'
15556d_strtold='$d_strtold'
15557d_strtoll='$d_strtoll'
15558d_strtoul='$d_strtoul'
15559d_strtoull='$d_strtoull'
15560d_strtouq='$d_strtouq'
15561d_strxfrm='$d_strxfrm'
15562d_suidsafe='$d_suidsafe'
15563d_symlink='$d_symlink'
15564d_syscall='$d_syscall'
15565d_sysconf='$d_sysconf'
15566d_sysernlst='$d_sysernlst'
15567d_syserrlst='$d_syserrlst'
15568d_system='$d_system'
15569d_tcgetpgrp='$d_tcgetpgrp'
15570d_tcsetpgrp='$d_tcsetpgrp'
15571d_telldir='$d_telldir'
15572d_telldirproto='$d_telldirproto'
15573d_time='$d_time'
15574d_times='$d_times'
15575d_truncate='$d_truncate'
15576d_tzname='$d_tzname'
15577d_umask='$d_umask'
15578d_uname='$d_uname'
15579d_union_semun='$d_union_semun'
15580d_ustat='$d_ustat'
15581d_vendorarch='$d_vendorarch'
15582d_vendorbin='$d_vendorbin'
15583d_vendorlib='$d_vendorlib'
15584d_vfork='$d_vfork'
15585d_void_closedir='$d_void_closedir'
15586d_voidsig='$d_voidsig'
15587d_voidtty='$d_voidtty'
15588d_volatile='$d_volatile'
15589d_vprintf='$d_vprintf'
15590d_wait4='$d_wait4'
15591d_waitpid='$d_waitpid'
15592d_wcstombs='$d_wcstombs'
15593d_wctomb='$d_wctomb'
5f80c64f
JH
15594d_xenix='$d_xenix'
15595date='$date'
b4eb6b3d
JH
15596db_hashtype='$db_hashtype'
15597db_prefixtype='$db_prefixtype'
15598defvoidused='$defvoidused'
15599direntrytype='$direntrytype'
15600dlext='$dlext'
5f80c64f 15601dlsrc='$dlsrc'
b4eb6b3d
JH
15602doublesize='$doublesize'
15603drand01='$drand01'
15604dynamic_ext='$dynamic_ext'
15605eagain='$eagain'
15606ebcdic='$ebcdic'
5f80c64f
JH
15607echo='$echo'
15608egrep='$egrep'
15609emacs='$emacs'
15610eunicefix='$eunicefix'
15611exe_ext='$exe_ext'
15612expr='$expr'
b4eb6b3d
JH
15613extensions='$extensions'
15614fflushNULL='$fflushNULL'
15615fflushall='$fflushall'
5f80c64f
JH
15616find='$find'
15617firstmakefile='$firstmakefile'
15618flex='$flex'
b4eb6b3d
JH
15619fpossize='$fpossize'
15620fpostype='$fpostype'
15621freetype='$freetype'
15622full_ar='$full_ar'
15623full_csh='$full_csh'
15624full_sed='$full_sed'
5b463ca7 15625gccosandvers='$gccosandvers'
5f80c64f 15626gccversion='$gccversion'
b4eb6b3d
JH
15627gidformat='$gidformat'
15628gidsign='$gidsign'
15629gidsize='$gidsize'
15630gidtype='$gidtype'
5f80c64f
JH
15631glibpth='$glibpth'
15632grep='$grep'
b4eb6b3d
JH
15633groupcat='$groupcat'
15634groupstype='$groupstype'
5f80c64f 15635gzip='$gzip'
b4eb6b3d
JH
15636h_fcntl='$h_fcntl'
15637h_sysfile='$h_sysfile'
5f80c64f 15638hint='$hint'
b4eb6b3d
JH
15639hostcat='$hostcat'
15640i16size='$i16size'
15641i16type='$i16type'
15642i32size='$i32size'
15643i32type='$i32type'
15644i64size='$i64size'
15645i64type='$i64type'
15646i8size='$i8size'
15647i8type='$i8type'
15648i_arpainet='$i_arpainet'
15649i_bsdioctl='$i_bsdioctl'
15650i_db='$i_db'
15651i_dbm='$i_dbm'
15652i_dirent='$i_dirent'
5f80c64f 15653i_dld='$i_dld'
b4eb6b3d
JH
15654i_dlfcn='$i_dlfcn'
15655i_fcntl='$i_fcntl'
15656i_float='$i_float'
15657i_gdbm='$i_gdbm'
15658i_grp='$i_grp'
15659i_iconv='$i_iconv'
15660i_ieeefp='$i_ieeefp'
15661i_inttypes='$i_inttypes'
15662i_libutil='$i_libutil'
15663i_limits='$i_limits'
15664i_locale='$i_locale'
15665i_machcthr='$i_machcthr'
15666i_malloc='$i_malloc'
15667i_math='$i_math'
15668i_memory='$i_memory'
15669i_mntent='$i_mntent'
15670i_ndbm='$i_ndbm'
15671i_netdb='$i_netdb'
15672i_neterrno='$i_neterrno'
15673i_netinettcp='$i_netinettcp'
15674i_niin='$i_niin'
15675i_poll='$i_poll'
15676i_prot='$i_prot'
15677i_pthread='$i_pthread'
15678i_pwd='$i_pwd'
15679i_rpcsvcdbm='$i_rpcsvcdbm'
15680i_sfio='$i_sfio'
15681i_sgtty='$i_sgtty'
15682i_shadow='$i_shadow'
15683i_socks='$i_socks'
15684i_stdarg='$i_stdarg'
15685i_stddef='$i_stddef'
15686i_stdlib='$i_stdlib'
15687i_string='$i_string'
15688i_sunmath='$i_sunmath'
15689i_sysaccess='$i_sysaccess'
15690i_sysdir='$i_sysdir'
15691i_sysfile='$i_sysfile'
15692i_sysfilio='$i_sysfilio'
15693i_sysin='$i_sysin'
15694i_sysioctl='$i_sysioctl'
15695i_syslog='$i_syslog'
15696i_sysmman='$i_sysmman'
15697i_sysmode='$i_sysmode'
15698i_sysmount='$i_sysmount'
15699i_sysndir='$i_sysndir'
15700i_sysparam='$i_sysparam'
15701i_sysresrc='$i_sysresrc'
15702i_syssecrt='$i_syssecrt'
15703i_sysselct='$i_sysselct'
15704i_syssockio='$i_syssockio'
15705i_sysstat='$i_sysstat'
15706i_sysstatfs='$i_sysstatfs'
15707i_sysstatvfs='$i_sysstatvfs'
15708i_systime='$i_systime'
15709i_systimek='$i_systimek'
15710i_systimes='$i_systimes'
15711i_systypes='$i_systypes'
15712i_sysuio='$i_sysuio'
15713i_sysun='$i_sysun'
15714i_sysutsname='$i_sysutsname'
15715i_sysvfs='$i_sysvfs'
15716i_syswait='$i_syswait'
15717i_termio='$i_termio'
15718i_termios='$i_termios'
15719i_time='$i_time'
15720i_unistd='$i_unistd'
15721i_ustat='$i_ustat'
15722i_utime='$i_utime'
15723i_values='$i_values'
15724i_varargs='$i_varargs'
15725i_varhdr='$i_varhdr'
15726i_vfork='$i_vfork'
5f80c64f 15727ignore_versioned_solibs='$ignore_versioned_solibs'
b4eb6b3d
JH
15728inc_version_list='$inc_version_list'
15729inc_version_list_init='$inc_version_list_init'
5f80c64f
JH
15730incpath='$incpath'
15731inews='$inews'
b4eb6b3d
JH
15732installarchlib='$installarchlib'
15733installbin='$installbin'
15734installman1dir='$installman1dir'
15735installman3dir='$installman3dir'
15736installprefix='$installprefix'
15737installprefixexp='$installprefixexp'
15738installprivlib='$installprivlib'
15739installscript='$installscript'
15740installsitearch='$installsitearch'
15741installsitebin='$installsitebin'
15742installsitelib='$installsitelib'
15743installstyle='$installstyle'
15744installusrbinperl='$installusrbinperl'
15745installvendorarch='$installvendorarch'
15746installvendorbin='$installvendorbin'
15747installvendorlib='$installvendorlib'
15748intsize='$intsize'
15749ivdformat='$ivdformat'
15750ivsize='$ivsize'
15751ivtype='$ivtype'
15752known_extensions='$known_extensions'
5f80c64f 15753ksh='$ksh'
5f80c64f
JH
15754ld='$ld'
15755lddlflags='$lddlflags'
15756ldflags='$ldflags'
b4eb6b3d
JH
15757ldflags_uselargefiles='$ldflags_uselargefiles'
15758ldlibpthname='$ldlibpthname'
5f80c64f
JH
15759less='$less'
15760lib_ext='$lib_ext'
15761libc='$libc'
b4eb6b3d 15762libperl='$libperl'
5f80c64f
JH
15763libpth='$libpth'
15764libs='$libs'
43999f95
JH
15765libsdirs='$libsdirs'
15766libsfiles='$libsfiles'
15767libsfound='$libsfound'
13b3f787 15768libspath='$libspath'
5f80c64f 15769libswanted='$libswanted'
b4eb6b3d 15770libswanted_uselargefiles='$libswanted_uselargefiles'
5f80c64f
JH
15771line='$line'
15772lint='$lint'
15773lkflags='$lkflags'
15774ln='$ln'
15775lns='$lns'
15776locincpth='$locincpth'
15777loclibpth='$loclibpth'
b4eb6b3d
JH
15778longdblsize='$longdblsize'
15779longlongsize='$longlongsize'
15780longsize='$longsize'
5f80c64f
JH
15781lp='$lp'
15782lpr='$lpr'
15783ls='$ls'
b4eb6b3d
JH
15784lseeksize='$lseeksize'
15785lseektype='$lseektype'
5f80c64f
JH
15786mail='$mail'
15787mailx='$mailx'
15788make='$make'
15789make_set_make='$make_set_make'
b4eb6b3d
JH
15790mallocobj='$mallocobj'
15791mallocsrc='$mallocsrc'
15792malloctype='$malloctype'
15793man1dir='$man1dir'
15794man1direxp='$man1direxp'
15795man1ext='$man1ext'
15796man3dir='$man3dir'
15797man3direxp='$man3direxp'
15798man3ext='$man3ext'
5f80c64f
JH
15799mips_type='$mips_type'
15800mkdir='$mkdir'
b4eb6b3d
JH
15801mmaptype='$mmaptype'
15802modetype='$modetype'
5f80c64f 15803more='$more'
b4eb6b3d 15804multiarch='$multiarch'
5f80c64f 15805mv='$mv'
b4eb6b3d
JH
15806myarchname='$myarchname'
15807mydomain='$mydomain'
15808myhostname='$myhostname'
5f80c64f
JH
15809myuname='$myuname'
15810n='$n'
b4eb6b3d
JH
15811netdb_hlen_type='$netdb_hlen_type'
15812netdb_host_type='$netdb_host_type'
15813netdb_name_type='$netdb_name_type'
15814netdb_net_type='$netdb_net_type'
5f80c64f
JH
15815nm='$nm'
15816nm_opt='$nm_opt'
15817nm_so_opt='$nm_so_opt'
b4eb6b3d 15818nonxs_ext='$nonxs_ext'
5f80c64f 15819nroff='$nroff'
b4eb6b3d
JH
15820nvEUformat='$nvEUformat'
15821nvFUformat='$nvFUformat'
15822nvGUformat='$nvGUformat'
15823nveformat='$nveformat'
15824nvfformat='$nvfformat'
15825nvgformat='$nvgformat'
15826nvsize='$nvsize'
15827nvtype='$nvtype'
15828o_nonblock='$o_nonblock'
5f80c64f 15829obj_ext='$obj_ext'
b4eb6b3d 15830old_pthread_create_joinable='$old_pthread_create_joinable'
5f80c64f 15831optimize='$optimize'
b4eb6b3d 15832orderlib='$orderlib'
5f80c64f
JH
15833osname='$osname'
15834osvers='$osvers'
b4eb6b3d 15835otherlibdirs='$otherlibdirs'
5f80c64f 15836package='$package'
b4eb6b3d
JH
15837pager='$pager'
15838passcat='$passcat'
15839patchlevel='$patchlevel'
5f80c64f 15840path_sep='$path_sep'
b4eb6b3d 15841perl5='$perl5'
5f80c64f 15842perl='$perl'
b4eb6b3d 15843perladmin='$perladmin'
9c839522 15844perllibs='$perllibs'
b4eb6b3d 15845perlpath='$perlpath'
5f80c64f 15846pg='$pg'
b4eb6b3d
JH
15847phostname='$phostname'
15848pidtype='$pidtype'
5f80c64f 15849plibpth='$plibpth'
b4eb6b3d 15850pm_apiversion='$pm_apiversion'
5f80c64f
JH
15851pmake='$pmake'
15852pr='$pr'
b4eb6b3d
JH
15853prefix='$prefix'
15854prefixexp='$prefixexp'
15855privlib='$privlib'
15856privlibexp='$privlibexp'
15857prototype='$prototype'
15858ptrsize='$ptrsize'
15859quadkind='$quadkind'
15860quadtype='$quadtype'
15861randbits='$randbits'
15862randfunc='$randfunc'
15863randseedtype='$randseedtype'
15864ranlib='$ranlib'
15865rd_nodata='$rd_nodata'
15866revision='$revision'
5f80c64f
JH
15867rm='$rm'
15868rmail='$rmail'
15869runnm='$runnm'
b4eb6b3d
JH
15870sPRIEUldbl='$sPRIEUldbl'
15871sPRIFUldbl='$sPRIFUldbl'
15872sPRIGUldbl='$sPRIGUldbl'
15873sPRIXU64='$sPRIXU64'
15874sPRId64='$sPRId64'
15875sPRIeldbl='$sPRIeldbl'
15876sPRIfldbl='$sPRIfldbl'
15877sPRIgldbl='$sPRIgldbl'
15878sPRIi64='$sPRIi64'
15879sPRIo64='$sPRIo64'
15880sPRIu64='$sPRIu64'
15881sPRIx64='$sPRIx64'
15882sSCNfldbl='$sSCNfldbl'
15883sched_yield='$sched_yield'
15884scriptdir='$scriptdir'
15885scriptdirexp='$scriptdirexp'
5f80c64f 15886sed='$sed'
b4eb6b3d
JH
15887seedfunc='$seedfunc'
15888selectminbits='$selectminbits'
15889selecttype='$selecttype'
5f80c64f
JH
15890sendmail='$sendmail'
15891sh='$sh'
15892shar='$shar'
15893sharpbang='$sharpbang'
b4eb6b3d
JH
15894shmattype='$shmattype'
15895shortsize='$shortsize'
15896shrpenv='$shrpenv'
5f80c64f 15897shsharp='$shsharp'
b4eb6b3d
JH
15898sig_count='$sig_count'
15899sig_name='$sig_name'
15900sig_name_init='$sig_name_init'
15901sig_num='$sig_num'
15902sig_num_init='$sig_num_init'
15903signal_t='$signal_t'
15904sitearch='$sitearch'
15905sitearchexp='$sitearchexp'
15906sitebin='$sitebin'
15907sitebinexp='$sitebinexp'
15908sitelib='$sitelib'
15909sitelib_stem='$sitelib_stem'
15910sitelibexp='$sitelibexp'
15911siteprefix='$siteprefix'
15912siteprefixexp='$siteprefixexp'
15913sizesize='$sizesize'
15914sizetype='$sizetype'
5f80c64f
JH
15915sleep='$sleep'
15916smail='$smail'
5f80c64f 15917so='$so'
b4eb6b3d
JH
15918sockethdr='$sockethdr'
15919socketlib='$socketlib'
15920socksizetype='$socksizetype'
5f80c64f
JH
15921sort='$sort'
15922spackage='$spackage'
15923spitshell='$spitshell'
5f80c64f 15924src='$src'
b4eb6b3d
JH
15925ssizetype='$ssizetype'
15926startperl='$startperl'
5f80c64f 15927startsh='$startsh'
b4eb6b3d
JH
15928static_ext='$static_ext'
15929stdchar='$stdchar'
15930stdio_base='$stdio_base'
15931stdio_bufsiz='$stdio_bufsiz'
15932stdio_cnt='$stdio_cnt'
15933stdio_filbuf='$stdio_filbuf'
15934stdio_ptr='$stdio_ptr'
15935stdio_stream_array='$stdio_stream_array'
15936strings='$strings'
5f80c64f 15937submit='$submit'
b4eb6b3d
JH
15938subversion='$subversion'
15939sysman='$sysman'
5f80c64f
JH
15940tail='$tail'
15941tar='$tar'
15942tbl='$tbl'
15943tee='$tee'
15944test='$test'
b4eb6b3d
JH
15945timeincl='$timeincl'
15946timetype='$timetype'
5f80c64f
JH
15947touch='$touch'
15948tr='$tr'
15949trnl='$trnl'
15950troff='$troff'
b4eb6b3d
JH
15951u16size='$u16size'
15952u16type='$u16type'
15953u32size='$u32size'
15954u32type='$u32type'
15955u64size='$u64size'
15956u64type='$u64type'
15957u8size='$u8size'
15958u8type='$u8type'
15959uidformat='$uidformat'
15960uidsign='$uidsign'
15961uidsize='$uidsize'
15962uidtype='$uidtype'
5f80c64f
JH
15963uname='$uname'
15964uniq='$uniq'
b4eb6b3d
JH
15965uquadtype='$uquadtype'
15966use5005threads='$use5005threads'
15967use64bitall='$use64bitall'
15968use64bitint='$use64bitint'
5f80c64f 15969usedl='$usedl'
b4eb6b3d
JH
15970useithreads='$useithreads'
15971uselargefiles='$uselargefiles'
15972uselongdouble='$uselongdouble'
15973usemorebits='$usemorebits'
15974usemultiplicity='$usemultiplicity'
15975usemymalloc='$usemymalloc'
5f80c64f 15976usenm='$usenm'
b4eb6b3d
JH
15977useopcode='$useopcode'
15978useperlio='$useperlio'
15979useposix='$useposix'
15980usesfio='$usesfio'
15981useshrplib='$useshrplib'
29209bc5 15982usesocks='$usesocks'
b4eb6b3d
JH
15983usethreads='$usethreads'
15984usevendorprefix='$usevendorprefix'
15985usevfork='$usevfork'
5f80c64f
JH
15986usrinc='$usrinc'
15987uuname='$uuname'
b4eb6b3d
JH
15988uvXUformat='$uvXUformat'
15989uvoformat='$uvoformat'
15990uvsize='$uvsize'
15991uvtype='$uvtype'
15992uvuformat='$uvuformat'
15993uvxformat='$uvxformat'
15994vendorarch='$vendorarch'
15995vendorarchexp='$vendorarchexp'
15996vendorbin='$vendorbin'
15997vendorbinexp='$vendorbinexp'
15998vendorlib='$vendorlib'
15999vendorlib_stem='$vendorlib_stem'
16000vendorlibexp='$vendorlibexp'
16001vendorprefix='$vendorprefix'
16002vendorprefixexp='$vendorprefixexp'
16003version='$version'
5f80c64f 16004vi='$vi'
b4eb6b3d 16005voidflags='$voidflags'
5f80c64f 16006xlibpth='$xlibpth'
b4eb6b3d 16007xs_apiversion='$xs_apiversion'
5f80c64f
JH
16008zcat='$zcat'
16009zip='$zip'
16010EOT
16011
16012: Add in command line options if available
16013$test -f UU/cmdline.opt && $cat UU/cmdline.opt >> config.sh
16014
16015: add special variables
16016$test -f $src/patchlevel.h && \
d00b958f 16017awk '/^#define[ ]+PERL_/ {printf "%s=%s\n",$2,$3}' $src/patchlevel.h >>config.sh
2000072c 16018echo "CONFIGDOTSH=true" >>config.sh
5f80c64f
JH
16019
16020: propagate old symbols
16021if $test -f UU/config.sh; then
16022 <UU/config.sh sort | uniq >UU/oldconfig.sh
16023 sed -n 's/^\([a-zA-Z_0-9]*\)=.*/\1/p' config.sh config.sh UU/oldconfig.sh |\
16024 sort | uniq -u >UU/oldsyms
16025 set X `cat UU/oldsyms`
16026 shift
16027 case $# in
16028 0) ;;
16029 *)
16030 cat <<EOM
16031Hmm...You had some extra variables I don't know about...I'll try to keep 'em...
16032EOM
16033 echo "# Variables propagated from previous config.sh file." >>config.sh
16034 for sym in `cat UU/oldsyms`; do
16035 echo " Propagating $hint variable "'$'"$sym..."
16036 eval 'tmp="$'"${sym}"'"'
16037 echo "$tmp" | \
16038 sed -e "s/'/'\"'\"'/g" -e "s/^/$sym='/" -e "s/$/'/" >>config.sh
16039 done
16040 ;;
16041 esac
16042fi
16043
16044: Finish up by extracting the .SH files
16045case "$alldone" in
16046exit)
16047 $rm -rf UU
16048 echo "Done."
16049 exit 0
16050 ;;
16051cont)
16052 ;;
16053'')
16054 dflt=''
16055 nostick=true
16056 $cat <<EOM
16057
16058If you'd like to make any changes to the config.sh file before I begin
16059to configure things, do it as a shell escape now (e.g. !vi config.sh).
16060
16061EOM
16062 rp="Press return or use a shell escape to edit config.sh:"
16063 . UU/myread
16064 nostick=''
16065 case "$ans" in
16066 '') ;;
16067 *) : in case they cannot read
16068 sh 1>&4 -c "$ans";;
16069 esac
16070 ;;
16071esac
16072
16073: if this fails, just run all the .SH files by hand
16074. ./config.sh
16075
16076echo " "
16077exec 1>&4
16078. ./UU/extract
16079
16080if $contains '^depend:' [Mm]akefile >/dev/null 2>&1; then
16081 dflt=y
16082 case "$silent" in
16083 true) ;;
16084 *)
16085 $cat <<EOM
16086
16087Now you need to generate make dependencies by running "$make depend".
16088You might prefer to run it in background: "$make depend > makedepend.out &"
16089It can take a while, so you might not want to run it right now.
16090
16091EOM
16092 ;;
16093 esac
16094 rp="Run $make depend now?"
16095 . UU/myread
16096 case "$ans" in
16097 y*)
3d5d58b1 16098 $make depend && echo "Now you must run '$make'."
5f80c64f
JH
16099 ;;
16100 *)
16101 echo "You must run '$make depend' then '$make'."
16102 ;;
16103 esac
16104elif test -f [Mm]akefile; then
16105 echo " "
16106 echo "Now you must run a $make."
16107else
16108 echo "Done."
16109fi
16110
16111if $test -f Policy.sh; then
16112 $cat <<EOM
16113
16114If you compile $package on a different machine or from a different object
16115directory, copy the Policy.sh file from this object directory to the
16116new one before you run Configure -- this will help you with most of
16117the policy defaults.
16118
16119EOM
16120fi
16121if $test -f config.msg; then
16122 echo "Hmm. I also noted the following information while running:"
16123 echo " "
16124 $cat config.msg >&4
16125 $rm -f config.msg
16126fi
16127$rm -f kit*isdone ark*isdone
16128$rm -rf UU
16129
16130: End of Configure
16131