This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Integrate with Sarathy.
[perl5.git] / Configure
... / ...
CommitLineData
1#! /bin/sh
2#
3# If these # comments don't work, trim them. Don't worry about any other
4# shell scripts, Configure will trim # comments from them for you.
5#
6# (If you are trying to port this package to a machine without sh,
7# I would suggest you have a look at the prototypical config_h.SH file
8# and edit it to reflect your system. Some packages may include samples
9# of config.h for certain machines, so you might look for one of those.)
10#
11# Yes, you may rip this off to use in other distribution packages. This
12# script belongs to the public domain and cannot be copyrighted.
13#
14# (Note: this Configure script was generated automatically. Rather than
15# working with this copy of Configure, you may wish to get metaconfig.
16# The dist-3.0 package (which contains metaconfig) was posted in
17# comp.sources.misc and is available on CPAN under authors/id/RAM so
18# you may fetch it yourself from your nearest archive site.)
19#
20
21# $Id: Head.U,v 3.0.1.9 1997/02/28 15:02:09 ram Exp $
22#
23# Generated on Wed Jan 26 09:59:39 EET 2000 [metaconfig 3.0 PL70]
24# (with additional metaconfig patches by perlbug@perl.com)
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
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
59: Proper separator for the PATH environment variable
60p_=:
61: On OS/2 this directory should exist if this is not floppy only system :-]
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]'`
67 elif test -n "$DJGPP"; then
68 p_=\;
69 fi
70fi
71
72: Proper PATH setting
73paths='/bin /usr/bin /usr/local/bin /usr/ucb /usr/local /usr/lbin'
74paths="$paths /opt/bin /opt/local/bin /opt/local /opt/lbin"
75paths="$paths /usr/5bin /etc /usr/gnu/bin /usr/new /usr/new/bin /usr/nbin"
76paths="$paths /opt/gnu/bin /opt/new /opt/new/bin /opt/nbin"
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"
81
82for p in $paths
83do
84 case "$p_$PATH$p_" in
85 *$p_$p$p_*) ;;
86 *) test -d $p && PATH=$PATH$p_$p ;;
87 esac
88done
89
90PATH=.$p_$PATH
91export PATH
92
93: shall we be using ksh?
94inksh=''
95needksh=''
96avoidksh=''
97newsh=/bin/ksh
98changesh=''
99if (PATH=.; alias -x) >/dev/null 2>&1; then
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
109 fi
110fi
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
118case "$inksh/$needksh" in
119/[a-z]*)
120 ENV=''
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/--)
133 cat <<EOM
134(I see you are using the Korn shell. Some ksh's blow up on $me,
135mainly on older exotic systems. If yours does, try the Bourne shell instead.)
136EOM
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
148
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
159: Configure runs within the UU subdirectory
160test -d UU || mkdir UU
161cd UU && rm -f ./*
162
163ccsymbols=''
164cppccsymbols=''
165cppsymbols=''
166dynamic_ext=''
167extensions=''
168known_extensions=''
169nonxs_ext=''
170static_ext=''
171useopcode=''
172useposix=''
173d_bsd=''
174d_eunice=''
175d_xenix=''
176eunicefix=''
177Mcc=''
178ar=''
179awk=''
180bash=''
181bison=''
182byacc=''
183cat=''
184chgrp=''
185chmod=''
186chown=''
187comm=''
188compress=''
189cp=''
190cpio=''
191cpp=''
192csh=''
193date=''
194echo=''
195egrep=''
196emacs=''
197expr=''
198find=''
199flex=''
200grep=''
201gzip=''
202inews=''
203ksh=''
204less=''
205line=''
206lint=''
207ln=''
208lp=''
209lpr=''
210ls=''
211mail=''
212mailx=''
213make=''
214mkdir=''
215more=''
216mv=''
217nm=''
218nroff=''
219perl=''
220pg=''
221pmake=''
222pr=''
223rm=''
224rmail=''
225sed=''
226sendmail=''
227shar=''
228sleep=''
229smail=''
230sort=''
231submit=''
232tail=''
233tar=''
234tbl=''
235tee=''
236test=''
237touch=''
238tr=''
239troff=''
240uname=''
241uniq=''
242uuname=''
243vi=''
244zcat=''
245zip=''
246full_ar=''
247full_sed=''
248libswanted=''
249hint=''
250myuname=''
251osname=''
252osvers=''
253Author=''
254Date=''
255Header=''
256Id=''
257Locker=''
258Log=''
259RCSfile=''
260Revision=''
261Source=''
262State=''
263_a=''
264_exe=''
265_o=''
266archobjs=''
267exe_ext=''
268firstmakefile=''
269lib_ext=''
270obj_ext=''
271path_sep=''
272afs=''
273alignbytes=''
274ansi2knr=''
275archlib=''
276archlibexp=''
277d_archlib=''
278installarchlib=''
279archname=''
280myarchname=''
281d_atolf=''
282d_atoll=''
283baserev=''
284bin=''
285binexp=''
286installbin=''
287bincompat5005=''
288d_bincompat5005=''
289byteorder=''
290cc=''
291gccversion=''
292ccflags=''
293cppflags=''
294ldflags=''
295lkflags=''
296locincpth=''
297optimize=''
298cf_email=''
299cf_by=''
300cf_time=''
301charsize=''
302contains=''
303cpp_stuff=''
304cpplast=''
305cppminus=''
306cpprun=''
307cppstdin=''
308crosscompile=''
309d_access=''
310d_accessx=''
311d_alarm=''
312d_attribut=''
313d_bcmp=''
314d_bcopy=''
315d_bzero=''
316d_casti32=''
317castflags=''
318d_castneg=''
319d_chown=''
320d_chroot=''
321d_chsize=''
322d_closedir=''
323d_void_closedir=''
324d_const=''
325cryptlib=''
326d_crypt=''
327d_csh=''
328full_csh=''
329d_cuserid=''
330d_dbl_dig=''
331d_difftime=''
332d_dlerror=''
333d_dlopen=''
334d_dlsymun=''
335d_dosuid=''
336d_suidsafe=''
337d_drand48proto=''
338d_dup2=''
339d_eaccess=''
340d_endgrent=''
341d_endhent=''
342d_endnent=''
343d_endpent=''
344d_endpwent=''
345d_endsent=''
346d_endspent=''
347d_fchmod=''
348d_fchown=''
349d_fcntl=''
350d_fd_macros=''
351d_fd_set=''
352d_fds_bits=''
353d_fgetpos=''
354d_flexfnam=''
355d_flock=''
356d_fork=''
357d_fs_data_s=''
358d_fseeko=''
359d_fsetpos=''
360d_fstatfs=''
361d_ftello=''
362d_ftime=''
363d_gettimeod=''
364d_Gconvert=''
365d_getgrent=''
366d_getgrps=''
367d_gethbyaddr=''
368d_gethbyname=''
369d_gethent=''
370aphostname=''
371d_gethname=''
372d_phostname=''
373d_uname=''
374d_gethostprotos=''
375d_getlogin=''
376d_getmnt=''
377d_getmntent=''
378d_getnbyaddr=''
379d_getnbyname=''
380d_getnent=''
381d_getnetprotos=''
382d_getpent=''
383d_getpgid=''
384d_getpgrp2=''
385d_bsdgetpgrp=''
386d_getpgrp=''
387d_getppid=''
388d_getprior=''
389d_getpbyname=''
390d_getpbynumber=''
391d_getprotoprotos=''
392d_getpwent=''
393d_getsent=''
394d_getservprotos=''
395d_getspent=''
396d_getspnam=''
397d_getsbyname=''
398d_getsbyport=''
399d_gnulibc=''
400d_hasmntopt=''
401d_htonl=''
402d_inetaton=''
403d_int64t=''
404d_isascii=''
405d_killpg=''
406d_lchown=''
407d_ldbl_dig=''
408d_link=''
409d_locconv=''
410d_lockf=''
411d_longdbl=''
412longdblsize=''
413d_longlong=''
414longlongsize=''
415d_lstat=''
416d_mblen=''
417d_mbstowcs=''
418d_mbtowc=''
419d_memchr=''
420d_memcmp=''
421d_memcpy=''
422d_memmove=''
423d_memset=''
424d_mkdir=''
425d_mkfifo=''
426d_mktime=''
427d_msg=''
428d_msgctl=''
429d_msgget=''
430d_msgrcv=''
431d_msgsnd=''
432d_nice=''
433d_open3=''
434d_fpathconf=''
435d_pathconf=''
436d_pause=''
437d_pipe=''
438d_poll=''
439d_portable=''
440d_old_pthread_create_joinable=''
441old_pthread_create_joinable=''
442d_pthread_yield=''
443d_sched_yield=''
444sched_yield=''
445d_readdir=''
446d_rewinddir=''
447d_seekdir=''
448d_telldir=''
449d_readlink=''
450d_rename=''
451d_rmdir=''
452d_safebcpy=''
453d_safemcpy=''
454d_sanemcmp=''
455d_select=''
456d_sem=''
457d_semctl=''
458d_semget=''
459d_semop=''
460d_setegid=''
461d_seteuid=''
462d_setgrent=''
463d_setgrps=''
464d_sethent=''
465d_setlinebuf=''
466d_setlocale=''
467d_setnent=''
468d_setpent=''
469d_setpgid=''
470d_setpgrp2=''
471d_bsdsetpgrp=''
472d_setpgrp=''
473d_setprior=''
474d_setpwent=''
475d_setregid=''
476d_setresgid=''
477d_setresuid=''
478d_setreuid=''
479d_setrgid=''
480d_setruid=''
481d_setsent=''
482d_setsid=''
483d_setspent=''
484d_setvbuf=''
485d_sfio=''
486usesfio=''
487d_shm=''
488d_shmat=''
489d_shmatprototype=''
490shmattype=''
491d_shmctl=''
492d_shmdt=''
493d_shmget=''
494d_sigaction=''
495d_sigsetjmp=''
496d_msg_ctrunc=''
497d_msg_dontroute=''
498d_msg_oob=''
499d_msg_peek=''
500d_msg_proxy=''
501d_oldsock=''
502d_scm_rights=''
503d_socket=''
504d_sockpair=''
505sockethdr=''
506socketlib=''
507d_sqrtl=''
508d_statblks=''
509d_statfs_f_flags=''
510d_statfs_s=''
511d_fstatvfs=''
512d_statvfs=''
513d_stdio_cnt_lval=''
514d_stdio_ptr_lval=''
515d_stdiobase=''
516d_stdstdio=''
517stdio_base=''
518stdio_bufsiz=''
519stdio_cnt=''
520stdio_filbuf=''
521stdio_ptr=''
522d_index=''
523d_strchr=''
524d_strcoll=''
525d_strctcpy=''
526d_strerrm=''
527d_strerror=''
528d_sysernlst=''
529d_syserrlst=''
530d_strtod=''
531d_strtol=''
532d_strtold=''
533d_strtoll=''
534d_strtoul=''
535d_strtoull=''
536d_strtouq=''
537d_strxfrm=''
538d_symlink=''
539d_syscall=''
540d_sysconf=''
541d_system=''
542d_tcgetpgrp=''
543d_tcsetpgrp=''
544d_telldirproto=''
545d_time=''
546timetype=''
547clocktype=''
548d_times=''
549d_truncate=''
550d_tzname=''
551d_umask=''
552d_semctl_semid_ds=''
553d_semctl_semun=''
554d_union_semun=''
555d_ustat=''
556d_vfork=''
557usevfork=''
558d_voidsig=''
559signal_t=''
560d_volatile=''
561d_charvspr=''
562d_vprintf=''
563d_wait4=''
564d_waitpid=''
565d_wcstombs=''
566d_wctomb=''
567dlext=''
568cccdlflags=''
569ccdlflags=''
570dlsrc=''
571ld=''
572lddlflags=''
573usedl=''
574doublesize=''
575ebcdic=''
576fflushNULL=''
577fflushall=''
578fpossize=''
579fpostype=''
580gidformat=''
581gidsign=''
582gidsize=''
583gidtype=''
584groupstype=''
585h_fcntl=''
586h_sysfile=''
587i_arpainet=''
588db_hashtype=''
589db_prefixtype=''
590i_db=''
591i_dbm=''
592i_rpcsvcdbm=''
593d_dirnamlen=''
594direntrytype=''
595i_dirent=''
596i_dld=''
597i_dlfcn=''
598i_fcntl=''
599i_float=''
600i_gdbm=''
601d_grpasswd=''
602i_grp=''
603i_inttypes=''
604i_limits=''
605i_locale=''
606i_machcthr=''
607i_malloc=''
608i_math=''
609i_memory=''
610i_mntent=''
611i_ndbm=''
612i_netdb=''
613i_neterrno=''
614i_netinettcp=''
615i_niin=''
616i_sysin=''
617i_poll=''
618i_pthread=''
619d_pwage=''
620d_pwchange=''
621d_pwclass=''
622d_pwcomment=''
623d_pwexpire=''
624d_pwgecos=''
625d_pwpasswd=''
626d_pwquota=''
627i_pwd=''
628i_sfio=''
629i_shadow=''
630i_socks=''
631i_stddef=''
632i_stdlib=''
633i_string=''
634strings=''
635i_sysaccess=''
636i_sysdir=''
637i_sysfile=''
638d_voidtty=''
639i_bsdioctl=''
640i_sysfilio=''
641i_sysioctl=''
642i_syssockio=''
643i_sysmount=''
644i_sysndir=''
645i_sysparam=''
646i_sysresrc=''
647i_syssecrt=''
648i_sysselct=''
649i_sysstat=''
650i_sysstatfs=''
651i_sysstatvfs=''
652i_systimes=''
653i_systypes=''
654i_sysuio=''
655i_sysun=''
656i_sysvfs=''
657i_syswait=''
658i_sgtty=''
659i_termio=''
660i_termios=''
661i_systime=''
662i_systimek=''
663i_time=''
664timeincl=''
665i_unistd=''
666i_ustat=''
667i_utime=''
668i_values=''
669i_stdarg=''
670i_varargs=''
671i_varhdr=''
672i_vfork=''
673inc_version_list=''
674inc_version_list_init=''
675installprefix=''
676installprefixexp=''
677installstyle=''
678installusrbinperl=''
679intsize=''
680longsize=''
681shortsize=''
682d_fpos64_t=''
683d_off64_t=''
684libc=''
685ldlibpthname=''
686libperl=''
687shrpenv=''
688useshrplib=''
689glibpth=''
690libpth=''
691loclibpth=''
692plibpth=''
693xlibpth=''
694ignore_versioned_solibs=''
695libs=''
696lns=''
697d_PRIEldbl=''
698d_PRIFldbl=''
699d_PRIGldbl=''
700d_PRIeldbl=''
701d_PRIfldbl=''
702d_PRIgldbl=''
703sPRIEldbl=''
704sPRIFldbl=''
705sPRIGldbl=''
706sPRIeldbl=''
707sPRIfldbl=''
708sPRIgldbl=''
709lseeksize=''
710lseektype=''
711make_set_make=''
712d_mymalloc=''
713freetype=''
714mallocobj=''
715mallocsrc=''
716malloctype=''
717usemymalloc=''
718installman1dir=''
719man1dir=''
720man1direxp=''
721man1ext=''
722installman3dir=''
723man3dir=''
724man3direxp=''
725man3ext=''
726huge=''
727large=''
728medium=''
729models=''
730small=''
731split=''
732modetype=''
733multiarch=''
734mydomain=''
735myhostname=''
736phostname=''
737c=''
738n=''
739d_eofnblk=''
740eagain=''
741o_nonblock=''
742rd_nodata=''
743netdb_hlen_type=''
744netdb_host_type=''
745netdb_name_type=''
746netdb_net_type=''
747groupcat=''
748hostcat=''
749passcat=''
750orderlib=''
751ranlib=''
752package=''
753spackage=''
754pager=''
755api_revision=''
756api_subversion=''
757api_version=''
758api_versionstring=''
759patchlevel=''
760subversion=''
761version=''
762perladmin=''
763perlpath=''
764d_nv_preserves_uv=''
765i16size=''
766i16type=''
767i32size=''
768i32type=''
769i64size=''
770i64type=''
771i8size=''
772i8type=''
773ivsize=''
774ivtype=''
775nvsize=''
776nvtype=''
777u16size=''
778u16type=''
779u32size=''
780u32type=''
781u64size=''
782u64type=''
783u8size=''
784u8type=''
785uvsize=''
786uvtype=''
787ivdformat=''
788uvoformat=''
789uvuformat=''
790uvxformat=''
791pidtype=''
792prefix=''
793prefixexp=''
794installprivlib=''
795privlib=''
796privlibexp=''
797prototype=''
798ptrsize=''
799d_PRIX64=''
800d_PRId64=''
801d_PRIi64=''
802d_PRIo64=''
803d_PRIu64=''
804d_PRIx64=''
805sPRIX64=''
806sPRId64=''
807sPRIi64=''
808sPRIo64=''
809sPRIu64=''
810sPRIx64=''
811d_quad=''
812quadkind=''
813quadtype=''
814uquadtype=''
815drand01=''
816randbits=''
817randfunc=''
818randseedtype=''
819seedfunc=''
820installscript=''
821scriptdir=''
822scriptdirexp=''
823selectminbits=''
824selecttype=''
825sh=''
826sig_count=''
827sig_name=''
828sig_name_init=''
829sig_num=''
830sig_num_init=''
831installsitearch=''
832sitearch=''
833sitearchexp=''
834installsitebin=''
835sitebin=''
836sitebinexp=''
837installsitelib=''
838sitelib=''
839sitelibexp=''
840siteprefix=''
841siteprefixexp=''
842sizetype=''
843so=''
844sharpbang=''
845shsharp=''
846spitshell=''
847src=''
848ssizetype=''
849startperl=''
850startsh=''
851stdchar=''
852d_stdio_stream_array=''
853stdio_stream_array=''
854sysman=''
855trnl=''
856uidformat=''
857uidsign=''
858uidsize=''
859uidtype=''
860archname64=''
861use64bits=''
862uselargefiles=''
863uselongdouble=''
864uselonglong=''
865usemorebits=''
866usemultiplicity=''
867nm_opt=''
868nm_so_opt=''
869runnm=''
870usenm=''
871useperlio=''
872usesocks=''
873d_oldpthreads=''
874use5005threads=''
875useithreads=''
876usethreads=''
877incpath=''
878mips_type=''
879usrinc=''
880d_vendorbin=''
881installvendorbin=''
882vendorbin=''
883vendorbinexp=''
884d_vendorlib=''
885installvendorlib=''
886vendorlib=''
887vendorlibexp=''
888usevendorprefix=''
889vendorprefix=''
890vendorprefixexp=''
891defvoidused=''
892voidflags=''
893CONFIG=''
894
895define='define'
896undef='undef'
897smallmach='pdp11 i8086 z8000 i80286 iAPX286'
898rmlist=''
899
900: We must find out about Eunice early
901eunicefix=':'
902if test -f /etc/unixtovms; then
903 eunicefix=/etc/unixtovms
904fi
905if test -f /etc/unixtovms.exe; then
906 eunicefix=/etc/unixtovms.exe
907fi
908
909i_whoami=''
910: list of known cpp symbols, sorted alphabetically
911al="386BSD 3b1 a29k ABI64 aegis AES_SOURCE AIX AIX32 AIX370"
912al="$al AIX41 AIX42 AIX43 AIX_SOURCE aixpc ALL_SOURCE"
913al="$al alliant alpha am29000 AM29000 amiga AMIGAOS AMIX"
914al="$al ansi ANSI_C_SOURCE apollo ardent atarist att386 att3b BeOS"
915al="$al BIG_ENDIAN BIT_MSF bsd BSD bsd43 bsd4_2 bsd4_3 BSD4_3 bsd4_4"
916al="$al BSD_4_3 BSD_4_4 BSD_NET2 BSD_TIME BSD_TYPES BSDCOMPAT bsdi"
917al="$al bull c cadmus clipper CMU COFF COMPILER_VERSION"
918al="$al concurrent convex cpu cray CRAY CRAYMPP ctix CX_UX"
919al="$al CYGWIN DGUX DGUX_SOURCE DJGPP dmert DOLPHIN DPX2 DSO"
920al="$al Dynix DynixPTX ELF encore EPI EXTENSIONS FILE_OFFSET_BITS"
921al="$al FreeBSD GCC_NEW_VARARGS gcos gcx gimpel"
922al="$al GNU_SOURCE GNUC GNUC_MINOR GO32 gould GOULD_PN"
923al="$al H3050R H3050RX hbullx20 hcx host_mips"
924al="$al hp200 hp300 hp700 HP700 hp800 hp9000"
925al="$al hp9000s200 hp9000s300 hp9000s400 hp9000s500"
926al="$al hp9000s700 hp9000s800 hp9k8 hp_osf hppa hpux HPUX_SOURCE"
927al="$al i186 i286 i386 i486 i586 i686 i8086 i80960 i860 I960"
928al="$al iAPX286 ibm ibm032 ibmesa IBMR2 ibmrt ILP32 ILP64"
929al="$al INLINE_INTRINSICS INTRINSICS INT64 interdata is68k ksr1"
930al="$al LANGUAGE_C LARGE_FILE_API LARGEFILE64_SOURCE"
931al="$al LARGEFILE_SOURCE LFS64_LARGEFILE LFS_LARGEFILE"
932al="$al Linux LITTLE_ENDIAN LONG64 LONG_DOUBLE LONG_LONG"
933al="$al LONGDOUBLE LONGLONG LP64 luna luna88k Lynx"
934al="$al M68000 m68k m88100 m88k M88KBCS_TARGET M_COFF"
935al="$al M_I186 M_I286 M_I386 M_I8086 M_I86 M_I86SM M_SYS3"
936al="$al M_SYS5 M_SYSIII M_SYSV M_UNIX M_XENIX MACH machine MachTen"
937al="$al MATH_HAS_NO_SIDE_EFFECTS"
938al="$al mc300 mc500 mc68000 mc68010 mc68020 mc68030 mc68040"
939al="$al mc68060 mc68k mc68k32 mc700 mc88000 mc88100 merlin"
940al="$al mert MiNT mips MIPS_FPSET MIPS_ISA MIPS_SIM MIPS_SZINT"
941al="$al MIPS_SZLONG MIPS_SZPTR MIPSEB MIPSEL MODERN_C motorola"
942al="$al mpeix MSDOS MTXINU MULTIMAX mvs MVS n16 ncl_el ncl_mr"
943al="$al NetBSD news1500 news1700 news1800 news1900 news3700"
944al="$al news700 news800 news900 NeXT NLS ns16000 ns32000"
945al="$al ns32016 ns32332 ns32k nsc32000"
946al="$al OCS88 OEMVS OpenBSD os OS2 OS390 osf OSF1 OSF_SOURCE"
947al="$al pa_risc PA_RISC1_1 PA_RISC2_0 PARAGON parisc"
948al="$al pc532 pdp11 PGC PIC plexus PORTAR posix"
949al="$al POSIX1B_SOURCE POSIX2_SOURCE POSIX4_SOURCE"
950al="$al POSIX_C_SOURCE POSIX_SOURCE POWER"
951al="$al PROTOTYPES PWB pyr QNX R3000 REENTRANT RES Rhapsody RISC6000"
952al="$al riscix riscos RT scs SCO sequent sgi SGI_SOURCE sinix"
953al="$al SIZE_INT SIZE_LONG SIZE_PTR SOCKET_SOURCE SOCKETS_SOURCE"
954al="$al sony sony_news sonyrisc sparc sparclite spectrum"
955al="$al stardent stdc STDC_EXT stratos sun sun3 sun386"
956al="$al Sun386i svr3 svr4 SVR4_2 SVR4_SOURCE svr5"
957al="$al SX system SYSTYPE_BSD SYSTYPE_BSD43 SYSTYPE_BSD44"
958al="$al SYSTYPE_SVR4 SYSTYPE_SVR5 SYSTYPE_SYSV SYSV SYSV3 SYSV4 SYSV5"
959al="$al sysV68 sysV88 Tek4132 Tek4300 titan"
960al="$al tower tower32 tower32_200 tower32_600 tower32_700"
961al="$al tower32_800 tower32_850 tss"
962al="$al u370 u3b u3b2 u3b20 u3b200 u3b20d u3b5"
963al="$al ultrix UMAXV UnicomPBB UnicomPBD UNICOS UNICOSMK"
964al="$al unix UNIX95 UNIX99 unixpc unos USGr4 USGr4_2"
965al="$al Utek UTek UTS UWIN uxpm uxps vax venix VMESA vms xenix Xenix286"
966al="$al XOPEN_SOURCE XOPEN_SOURCE_EXTENDED XPG2 XPG2_EXTENDED"
967al="$al XPG3 XPG3_EXTENDED XPG4 XPG4_EXTENDED"
968al="$al z8000"
969
970: set useposix=false in your hint file to disable the POSIX extension.
971useposix=true
972: set useopcode=false in your hint file to disable the Opcode extension.
973useopcode=true
974: Trailing extension. Override this in a hint file, if needed.
975_exe=''
976: Extra object files, if any, needed on this platform.
977archobjs=''
978: Possible local include directories to search.
979: Set locincpth to "" in a hint file to defeat local include searches.
980locincpth="/usr/local/include /opt/local/include /usr/gnu/include"
981locincpth="$locincpth /opt/gnu/include /usr/GNU/include /opt/GNU/include"
982:
983: no include file wanted by default
984inclwanted=''
985
986groupstype=''
987: change the next line if compiling for Xenix/286 on Xenix/386
988xlibpth='/usr/lib/386 /lib/386'
989
990: Possible local library directories to search.
991loclibpth="/usr/local/lib /opt/local/lib /usr/gnu/lib"
992loclibpth="$loclibpth /opt/gnu/lib /usr/GNU/lib /opt/GNU/lib"
993
994: general looking path for locating libraries
995glibpth="/shlib /usr/shlib /lib/pa1.1 /usr/lib/large"
996glibpth="$glibpth /lib /usr/lib $xlibpth"
997glibpth="$glibpth /lib/large /usr/lib/small /lib/small"
998glibpth="$glibpth /usr/ccs/lib /usr/ucblib /usr/local/lib"
999
1000: Private path used by Configure to find libraries. Its value
1001: is prepended to libpth. This variable takes care of special
1002: machines, like the mips. Usually, it should be empty.
1003plibpth=''
1004
1005: default library list
1006libswanted=''
1007: some systems want to use only the non-versioned libso:s
1008ignore_versioned_solibs=''
1009: set usemultiplicity on the Configure command line to enable multiplicity.
1010: set usesocks on the Configure command line to enable socks.
1011: set usethreads on the Configure command line to enable threads.
1012: full support for void wanted by default
1013defvoidused=15
1014
1015: List of libraries we want.
1016: If anyone needs -lnet, put it in a hint file.
1017libswanted='sfio socket inet nsl nm ndbm gdbm dbm db malloc dl'
1018libswanted="$libswanted dld ld sun m c cposix posix"
1019libswanted="$libswanted ndir dir crypt sec"
1020libswanted="$libswanted ucb bsd BSD PW x"
1021: We probably want to search /usr/shlib before most other libraries.
1022: This is only used by the lib/ExtUtils/MakeMaker.pm routine extliblist.
1023glibpth=`echo " $glibpth " | sed -e 's! /usr/shlib ! !'`
1024glibpth="/usr/shlib $glibpth"
1025: Do not use vfork unless overridden by a hint file.
1026usevfork=false
1027
1028: Find the basic shell for Bourne shell scripts
1029case "$sh" in
1030'')
1031 case "$SYSTYPE" in
1032 *bsd*|sys5*) xxx="/$SYSTYPE/bin/sh";;
1033 *) xxx='/bin/sh';;
1034 esac
1035 if test -f "$xxx"; then
1036 sh="$xxx"
1037 else
1038 : Build up a list and do a single loop so we can 'break' out.
1039 pth=`echo $PATH | sed -e "s/$p_/ /g"`
1040 for xxx in sh bash ksh pdksh ash; do
1041 for p in $pth; do
1042 try="$try ${p}/${xxx}"
1043 done
1044 done
1045 for xxx in $try; do
1046 if test -f "$xxx"; then
1047 sh="$xxx";
1048 break
1049 elif test -f "$xxx.exe"; then
1050 sh="$xxx";
1051 break
1052 fi
1053 done
1054 fi
1055 ;;
1056esac
1057
1058case "$sh" in
1059'') cat <<EOM >&2
1060$me: Fatal Error: I can't find a Bourne Shell anywhere.
1061
1062Usually it's in /bin/sh. How did you even get this far?
1063Please contact me (Perl Maintainers) at perlbug@perl.com and
1064we'll try to straighten this all out.
1065EOM
1066 exit 1
1067 ;;
1068esac
1069
1070: see if sh knows # comments
1071if `$sh -c '#' >/dev/null 2>&1`; then
1072 shsharp=true
1073 spitshell=cat
1074 xcat=/bin/cat
1075 test -f $xcat || xcat=/usr/bin/cat
1076 echo "#!$xcat" >try
1077 $eunicefix try
1078 chmod +x try
1079 ./try > today
1080 if test -s today; then
1081 sharpbang='#!'
1082 else
1083 echo "#! $xcat" > try
1084 $eunicefix try
1085 chmod +x try
1086 ./try > today
1087 if test -s today; then
1088 sharpbang='#! '
1089 else
1090 sharpbang=': use '
1091 fi
1092 fi
1093else
1094 echo " "
1095 echo "Your $sh doesn't grok # comments--I will strip them later on."
1096 shsharp=false
1097 cd ..
1098 echo "exec grep -v '^[ ]*#'" >spitshell
1099 chmod +x spitshell
1100 $eunicefix spitshell
1101 spitshell=`pwd`/spitshell
1102 cd UU
1103 echo "I presume that if # doesn't work, #! won't work either!"
1104 sharpbang=': use '
1105fi
1106rm -f try today
1107
1108: figure out how to guarantee sh startup
1109case "$startsh" in
1110'') startsh=${sharpbang}${sh} ;;
1111*)
1112esac
1113cat >try <<EOSS
1114$startsh
1115set abc
1116test "$?abc" != 1
1117EOSS
1118
1119chmod +x try
1120$eunicefix try
1121if ./try; then
1122 : echo "Yup, it does."
1123else
1124 echo "Hmm... '$startsh' does not guarantee sh startup..."
1125 echo "You may have to fix up the shell scripts to make sure $sh runs them."
1126fi
1127rm -f try
1128
1129
1130: Save command line options in file UU/cmdline.opt for later use in
1131: generating config.sh.
1132cat > cmdline.opt <<EOSH
1133# Configure command line arguments.
1134config_arg0='$0'
1135config_args='$*'
1136config_argc=$#
1137EOSH
1138argn=1
1139for arg in "$@"; do
1140 cat >>cmdline.opt <<EOSH
1141config_arg$argn='$arg'
1142EOSH
1143 argn=`expr $argn + 1`
1144done
1145
1146: produce awk script to parse command line options
1147cat >options.awk <<'EOF'
1148BEGIN {
1149 optstr = "A:dD:eEf:hKOrsSU:V"; # getopt-style specification
1150
1151 len = length(optstr);
1152 for (i = 1; i <= len; i++) {
1153 c = substr(optstr, i, 1);
1154 if (i < len) a = substr(optstr, i + 1, 1); else a = "";
1155 if (a == ":") {
1156 arg[c] = 1;
1157 i++;
1158 }
1159 opt[c] = 1;
1160 }
1161}
1162{
1163 expect = 0;
1164 str = $0;
1165 if (substr(str, 1, 1) != "-") {
1166 printf("'%s'\n", str);
1167 next;
1168 }
1169 len = length($0);
1170 for (i = 2; i <= len; i++) {
1171 c = substr(str, i, 1);
1172 if (!opt[c]) {
1173 printf("-%s\n", substr(str, i));
1174 next;
1175 }
1176 printf("-%s\n", c);
1177 if (arg[c]) {
1178 if (i < len)
1179 printf("'%s'\n", substr(str, i + 1));
1180 else
1181 expect = 1;
1182 next;
1183 }
1184 }
1185}
1186END {
1187 if (expect)
1188 print "?";
1189}
1190EOF
1191
1192: process the command line options
1193set X `for arg in "$@"; do echo "X$arg"; done |
1194 sed -e s/X// | awk -f options.awk`
1195eval "set $*"
1196shift
1197rm -f options.awk
1198
1199: set up default values
1200fastread=''
1201reuseval=false
1202config_sh=''
1203alldone=''
1204error=''
1205silent=''
1206extractsh=''
1207override=''
1208knowitall=''
1209rm -f optdef.sh posthint.sh
1210cat >optdef.sh <<EOS
1211$startsh
1212EOS
1213
1214
1215: option parsing
1216while test $# -gt 0; do
1217 case "$1" in
1218 -d) shift; fastread=yes;;
1219 -e) shift; alldone=cont;;
1220 -f)
1221 shift
1222 cd ..
1223 if test -r "$1"; then
1224 config_sh="$1"
1225 else
1226 echo "$me: cannot read config file $1." >&2
1227 error=true
1228 fi
1229 cd UU
1230 shift;;
1231 -h) shift; error=true;;
1232 -r) shift; reuseval=true;;
1233 -s) shift; silent=true; realsilent=true;;
1234 -E) shift; alldone=exit;;
1235 -K) shift; knowitall=true;;
1236 -O) shift; override=true;;
1237 -S) shift; silent=true; extractsh=true;;
1238 -D)
1239 shift
1240 case "$1" in
1241 *=)
1242 echo "$me: use '-U symbol=', not '-D symbol='." >&2
1243 echo "$me: ignoring -D $1" >&2
1244 ;;
1245 *=*) echo "$1" | \
1246 sed -e "s/'/'\"'\"'/g" -e "s/=\(.*\)/='\1'/" >> optdef.sh;;
1247 *) echo "$1='define'" >> optdef.sh;;
1248 esac
1249 shift
1250 ;;
1251 -U)
1252 shift
1253 case "$1" in
1254 *=) echo "$1" >> optdef.sh;;
1255 *=*)
1256 echo "$me: use '-D symbol=val', not '-U symbol=val'." >&2
1257 echo "$me: ignoring -U $1" >&2
1258 ;;
1259 *) echo "$1='undef'" >> optdef.sh;;
1260 esac
1261 shift
1262 ;;
1263 -A)
1264 shift
1265 xxx=''
1266 yyy="$1"
1267 zzz=''
1268 uuu=undef
1269 case "$yyy" in
1270 *=*) zzz=`echo $yyy|sed 's!=.*!!'`
1271 case "$zzz" in
1272 *:*) zzz='' ;;
1273 *) xxx=append
1274 zzz=" "`echo $yyy|sed 's!^[^=]*=!!'`
1275 yyy=`echo $yyy|sed 's!=.*!!'` ;;
1276 esac
1277 ;;
1278 esac
1279 case "$xxx" in
1280 '') case "$yyy" in
1281 *:*) xxx=`echo $yyy|sed 's!:.*!!'`
1282 yyy=`echo $yyy|sed 's!^[^:]*:!!'`
1283 zzz=`echo $yyy|sed 's!^[^=]*=!!'`
1284 yyy=`echo $yyy|sed 's!=.*!!'` ;;
1285 *) xxx=`echo $yyy|sed 's!:.*!!'`
1286 yyy=`echo $yyy|sed 's!^[^:]*:!!'` ;;
1287 esac
1288 ;;
1289 esac
1290 case "$xxx" in
1291 append)
1292 echo "$yyy=\"\${$yyy}$zzz\"" >> posthint.sh ;;
1293 clear)
1294 echo "$yyy=''" >> posthint.sh ;;
1295 define)
1296 case "$zzz" in
1297 '') zzz=define ;;
1298 esac
1299 echo "$yyy='$zzz'" >> posthint.sh ;;
1300 eval)
1301 echo "eval \"$yyy=$zzz\"" >> posthint.sh ;;
1302 prepend)
1303 echo "$yyy=\"$zzz\${$yyy}\"" >> posthint.sh ;;
1304 undef)
1305 case "$zzz" in
1306 '') zzz="$uuu" ;;
1307 esac
1308 echo "$yyy=$zzz" >> posthint.sh ;;
1309 *) echo "$me: unknown -A command '$xxx', ignoring -A $1" >&2 ;;
1310 esac
1311 ;;
1312 -V) echo "$me generated by metaconfig 3.0 PL70." >&2
1313 exit 0;;
1314 --) break;;
1315 -*) echo "$me: unknown option $1" >&2; shift; error=true;;
1316 *) break;;
1317 esac
1318done
1319
1320case "$error" in
1321true)
1322 cat >&2 <<EOM
1323Usage: $me [-dehrsEKOSV] [-f config.sh] [-D symbol] [-D symbol=value]
1324 [-U symbol] [-U symbol=] [-A command:symbol...]
1325 -d : use defaults for all answers.
1326 -e : go on without questioning past the production of config.sh.
1327 -f : specify an alternate default configuration file.
1328 -h : print this help message and exit (with an error status).
1329 -r : reuse C symbols value if possible (skips costly nm extraction).
1330 -s : silent mode, only echoes questions and essential information.
1331 -D : define symbol to have some value:
1332 -D symbol symbol gets the value 'define'
1333 -D symbol=value symbol gets the value 'value'
1334 -E : stop at the end of questions, after having produced config.sh.
1335 -K : do not use unless you know what you are doing.
1336 -O : let -D and -U override definitions from loaded configuration file.
1337 -S : perform variable substitutions on all .SH files (can mix with -f)
1338 -U : undefine symbol:
1339 -U symbol symbol gets the value 'undef'
1340 -U symbol= symbol gets completely empty
1341 -A : manipulate symbol after the platform specific hints have been applied:
1342 -A symbol=value append " "value to symbol
1343 -A append:symbol=value append value to symbol
1344 -A define:symbol=value define symbol to have value
1345 -A clear:symbol define symbol to be ''
1346 -A define:symbol define symbol to be 'define'
1347 -A eval:symbol=value define symbol to be eval of value
1348 -A prepend:symbol=value prepend value to symbol
1349 -A undef:symbol define symbol to be 'undef'
1350 -A undef:symbol= define symbol to be ''
1351 -V : print version number and exit (with a zero status).
1352EOM
1353 exit 1
1354 ;;
1355esac
1356
1357: Sanity checks
1358case "$fastread$alldone" in
1359yescont|yesexit) ;;
1360*)
1361 if test ! -t 0; then
1362 echo "Say 'sh Configure', not 'sh <Configure'"
1363 exit 1
1364 fi
1365 ;;
1366esac
1367
1368exec 4>&1
1369case "$silent" in
1370true) exec 1>/dev/null;;
1371esac
1372
1373: run the defines and the undefines, if any, but leave the file out there...
1374touch optdef.sh
1375. ./optdef.sh
1376: create the posthint manipulation script and leave the file out there...
1377touch posthint.sh
1378
1379: set package name
1380package=perl5
1381first=`echo $package | sed -e 's/^\(.\).*/\1/'`
1382last=`echo $package | sed -e 's/^.\(.*\)/\1/'`
1383case "`echo AbyZ | tr '[:lower:]' '[:upper:]' 2>/dev/null`" in
1384ABYZ) spackage=`echo $first | tr '[:lower:]' '[:upper:]'`$last;;
1385*) spackage=`echo $first | tr '[a-z]' '[A-Z]'`$last;;
1386esac
1387
1388: Some greps do not return status, grrr.
1389echo "grimblepritz" >grimble
1390if grep blurfldyick grimble >/dev/null 2>&1 ; then
1391 contains=contains
1392elif grep grimblepritz grimble >/dev/null 2>&1 ; then
1393 contains=grep
1394else
1395 contains=contains
1396fi
1397rm -f grimble
1398: the following should work in any shell
1399case "$contains" in
1400contains*)
1401 echo " "
1402 echo "AGH! Grep doesn't return a status. Attempting remedial action."
1403 cat >contains <<'EOSS'
1404grep "$1" "$2" >.greptmp && cat .greptmp && test -s .greptmp
1405EOSS
1406chmod +x contains
1407esac
1408
1409: Find the path to the source tree
1410case "$src" in
1411'') case "$0" in
1412 */*) src=`echo $0 | sed -e 's%/[^/][^/]*$%%'`
1413 case "$src" in
1414 /*) ;;
1415 *) src=`cd ../$src && pwd` ;;
1416 esac
1417 ;;
1418 *) src='.';;
1419 esac;;
1420esac
1421case "$src" in
1422'') src=/
1423 rsrc=/
1424 ;;
1425/*) rsrc="$src";;
1426*) rsrc="../$src";;
1427esac
1428if test -f $rsrc/Configure && \
1429 $contains "^package=$package$" $rsrc/Configure >/dev/null 2>&1
1430then
1431 : found it, so we are ok.
1432else
1433 rsrc=''
1434 for src in . .. ../.. ../../.. ../../../..; do
1435 if test -f ../$src/Configure && \
1436 $contains "^package=$package$" ../$src/Configure >/dev/null 2>&1
1437 then
1438 rsrc=../$src
1439 break
1440 fi
1441 done
1442fi
1443case "$rsrc" in
1444'')
1445 cat <<EOM >&4
1446
1447Sorry, I can't seem to locate the source dir for $package. Please start
1448Configure with an explicit path -- i.e. /some/path/Configure.
1449
1450EOM
1451 exit 1
1452 ;;
1453../.) rsrc='..';;
1454*)
1455 echo " "
1456 echo "Sources for $package found in \"$src\"." >&4
1457 ;;
1458esac
1459
1460: script used to extract .SH files with variable substitutions
1461cat >extract <<'EOS'
1462CONFIGDOTSH=true
1463echo "Doing variable substitutions on .SH files..."
1464if test -f $src/MANIFEST; then
1465 set x `awk '{print $1}' <$src/MANIFEST | grep '\.SH$'`
1466else
1467 echo "(Looking for .SH files under the source directory.)"
1468 set x `(cd $src; find . -name "*.SH" -print)`
1469fi
1470shift
1471case $# in
14720) set x `(cd $src; echo *.SH)`; shift;;
1473esac
1474if test ! -f $src/$1; then
1475 shift
1476fi
1477mkdir_p='
1478name=$1;
1479create="";
1480while test $name; do
1481 if test ! -d "$name"; then
1482 create="$name $create";
1483 name=`echo $name | sed -e "s|^[^/]*$||"`;
1484 name=`echo $name | sed -e "s|\(.*\)/.*|\1|"`;
1485 else
1486 name="";
1487 fi;
1488done;
1489for file in $create; do
1490 mkdir $file;
1491done
1492'
1493for file in $*; do
1494 case "$src" in
1495 ".")
1496 case "$file" in
1497 */*)
1498 dir=`expr X$file : 'X\(.*\)/'`
1499 file=`expr X$file : 'X.*/\(.*\)'`
1500 (cd $dir && . ./$file)
1501 ;;
1502 *)
1503 . ./$file
1504 ;;
1505 esac
1506 ;;
1507 *)
1508 case "$file" in
1509 */*)
1510 dir=`expr X$file : 'X\(.*\)/'`
1511 file=`expr X$file : 'X.*/\(.*\)'`
1512 (set x $dir; shift; eval $mkdir_p)
1513 sh <$src/$dir/$file
1514 ;;
1515 *)
1516 sh <$src/$file
1517 ;;
1518 esac
1519 ;;
1520 esac
1521done
1522if test -f $src/config_h.SH; then
1523 if test ! -f config.h; then
1524 : oops, they left it out of MANIFEST, probably, so do it anyway.
1525 . $src/config_h.SH
1526 fi
1527fi
1528EOS
1529
1530: extract files and exit if asked to do so
1531case "$extractsh" in
1532true)
1533 case "$realsilent" in
1534 true) ;;
1535 *) exec 1>&4;;
1536 esac
1537 case "$config_sh" in
1538 '') config_sh='config.sh';;
1539 esac
1540 echo " "
1541 echo "Fetching answers from $config_sh..."
1542 cd ..
1543 . $config_sh
1544 test "$override" && . ./optdef.sh
1545 echo " "
1546 . UU/extract
1547 rm -rf UU
1548 echo "Done."
1549 exit 0
1550 ;;
1551esac
1552
1553: Eunice requires " " instead of "", can you believe it
1554echo " "
1555: Here we go...
1556echo "Beginning of configuration questions for $package."
1557
1558trap 'echo " "; test -d ../UU && rm -rf X $rmlist; exit 1' 1 2 3 15
1559
1560: first determine how to suppress newline on echo command
1561echo " "
1562echo "Checking echo to see how to suppress newlines..."
1563(echo "hi there\c" ; echo " ") >.echotmp
1564if $contains c .echotmp >/dev/null 2>&1 ; then
1565 echo "...using -n."
1566 n='-n'
1567 c=''
1568else
1569 cat <<'EOM'
1570...using \c
1571EOM
1572 n=''
1573 c='\c'
1574fi
1575echo $n "The star should be here-->$c"
1576echo '*'
1577rm -f .echotmp
1578
1579: Now test for existence of everything in MANIFEST
1580echo " "
1581if test -f $rsrc/MANIFEST; then
1582 echo "First let's make sure your kit is complete. Checking..." >&4
1583 awk '$1 !~ /PACK[A-Z]+/ {print $1}' $rsrc/MANIFEST | split -50
1584 rm -f missing
1585 tmppwd=`pwd`
1586 for filelist in x??; do
1587 (cd $rsrc; ls `cat $tmppwd/$filelist` >/dev/null 2>>$tmppwd/missing)
1588 done
1589 if test -s missing; then
1590 cat missing >&4
1591 cat >&4 <<'EOM'
1592
1593THIS PACKAGE SEEMS TO BE INCOMPLETE.
1594
1595You have the option of continuing the configuration process, despite the
1596distinct possibility that your kit is damaged, by typing 'y'es. If you
1597do, don't blame me if something goes wrong. I advise you to type 'n'o
1598and contact the author (perlbug@perl.com).
1599
1600EOM
1601 echo $n "Continue? [n] $c" >&4
1602 read ans
1603 case "$ans" in
1604 y*)
1605 echo "Continuing..." >&4
1606 rm -f missing
1607 ;;
1608 *)
1609 echo "ABORTING..." >&4
1610 kill $$
1611 ;;
1612 esac
1613 else
1614 echo "Looks good..."
1615 fi
1616else
1617 echo "There is no MANIFEST file. I hope your kit is complete !"
1618fi
1619rm -f missing x??
1620
1621echo " "
1622: Find the appropriate value for a newline for tr
1623if test -n "$DJGPP"; then
1624 trnl='\012'
1625fi
1626if test X"$trnl" = X; then
1627 case "`echo foo|tr '\n' x 2>/dev/null`" in
1628 foox) trnl='\n' ;;
1629 esac
1630fi
1631if test X"$trnl" = X; then
1632 case "`echo foo|tr '\012' x 2>/dev/null`" in
1633 foox) trnl='\012' ;;
1634 esac
1635fi
1636if test X"$trnl" = X; then
1637 cat <<EOM >&2
1638
1639$me: Fatal Error: cannot figure out how to translate newlines with 'tr'.
1640
1641EOM
1642 exit 1
1643fi
1644
1645: compute the number of columns on the terminal for proper question formatting
1646case "$COLUMNS" in
1647'') COLUMNS='80';;
1648esac
1649
1650: set up the echo used in my read
1651myecho="case \"\$xxxm\" in
1652'') echo $n \"\$rp $c\" >&4;;
1653*) case \"\$rp\" in
1654 '') echo $n \"[\$xxxm] $c\";;
1655 *)
1656 if test \`echo \"\$rp [\$xxxm] \" | wc -c\` -ge $COLUMNS; then
1657 echo \"\$rp\" >&4
1658 echo $n \"[\$xxxm] $c\" >&4
1659 else
1660 echo $n \"\$rp [\$xxxm] $c\" >&4
1661 fi
1662 ;;
1663 esac;;
1664esac"
1665
1666: now set up to do reads with possible shell escape and default assignment
1667cat <<EOSC >myread
1668$startsh
1669xxxm=\$dflt
1670$myecho
1671ans='!'
1672case "\$fastread" in
1673yes) case "\$dflt" in
1674 '') ;;
1675 *) ans='';
1676 case "\$silent-\$rp" in
1677 true-) ;;
1678 *) echo " " >&4;;
1679 esac;;
1680 esac;;
1681*) case "\$silent" in
1682 true) case "\$rp" in
1683 '') ans='';;
1684 esac;;
1685 esac;;
1686esac
1687while expr "X\$ans" : "X!" >/dev/null; do
1688 read answ
1689 set x \$xxxm
1690 shift
1691 aok=''; eval "ans=\\"\$answ\\"" && aok=y
1692 case "\$answ" in
1693 "!")
1694 sh 1>&4
1695 echo " "
1696 $myecho
1697 ;;
1698 !*)
1699 set x \`expr "X\$ans" : "X!\(.*\)\$"\`
1700 shift
1701 sh 1>&4 -c "\$*"
1702 echo " "
1703 $myecho
1704 ;;
1705 "\$ans")
1706 case "\$ans" in
1707 \\&*)
1708 set x \`expr "X\$ans" : "X&\(.*\)\$"\`
1709 shift
1710 case "\$1" in
1711 -d)
1712 fastread=yes
1713 echo "(OK, I'll run with -d after this question.)" >&4
1714 ;;
1715 -*)
1716 echo "*** Sorry, \$1 not supported yet." >&4
1717 ;;
1718 esac
1719 $myecho
1720 ans=!
1721 ;;
1722 esac;;
1723 *)
1724 case "\$aok" in
1725 y)
1726 echo "*** Substitution done -- please confirm."
1727 xxxm="\$ans"
1728 ans=\`echo $n "\$ans$c" | tr '$trnl' ' '\`
1729 xxxm="\$ans"
1730 ans=!
1731 ;;
1732 *)
1733 echo "*** Error -- try again."
1734 ans=!
1735 ;;
1736 esac
1737 $myecho
1738 ;;
1739 esac
1740 case "\$ans\$xxxm\$nostick" in
1741 '')
1742 ans=!
1743 $myecho
1744 ;;
1745 esac
1746done
1747case "\$ans" in
1748'') ans="\$xxxm";;
1749esac
1750EOSC
1751
1752: create .config dir to save info across Configure sessions
1753test -d ../.config || mkdir ../.config
1754cat >../.config/README <<EOF
1755This directory created by Configure to save information that should
1756persist across sessions for $package.
1757
1758You may safely delete it if you wish.
1759EOF
1760
1761: general instructions
1762needman=true
1763firsttime=true
1764user=`(logname) 2>/dev/null`
1765case "$user" in
1766'') user=`whoami 2>&1`;;
1767esac
1768if $contains "^$user\$" ../.config/instruct >/dev/null 2>&1; then
1769 firsttime=false
1770 echo " "
1771 rp='Would you like to see the instructions?'
1772 dflt=n
1773 . ./myread
1774 case "$ans" in
1775 [yY]*) ;;
1776 *) needman=false;;
1777 esac
1778fi
1779if $needman; then
1780 cat <<EOH
1781
1782This installation shell script will examine your system and ask you questions
1783to determine how the perl5 package should be installed. If you get
1784stuck on a question, you may use a ! shell escape to start a subshell or
1785execute a command. Many of the questions will have default answers in square
1786brackets; typing carriage return will give you the default.
1787
1788On some of the questions which ask for file or directory names you are allowed
1789to use the ~name construct to specify the login directory belonging to "name",
1790even if you don't have a shell which knows about that. Questions where this is
1791allowed will be marked "(~name ok)".
1792
1793EOH
1794 rp=''
1795 dflt='Type carriage return to continue'
1796 . ./myread
1797 cat <<'EOH'
1798
1799The prompter used in this script allows you to use shell variables and
1800backticks in your answers. You may use $1, $2, etc... to refer to the words
1801in the default answer, as if the default line was a set of arguments given to a
1802script shell. This means you may also use $* to repeat the whole default line,
1803so you do not have to re-type everything to add something to the default.
1804
1805Everytime there is a substitution, you will have to confirm. If there is an
1806error (e.g. an unmatched backtick), the default answer will remain unchanged
1807and you will be prompted again.
1808
1809If you are in a hurry, you may run 'Configure -d'. This will bypass nearly all
1810the questions and use the computed defaults (or the previous answers if there
1811was already a config.sh file). Type 'Configure -h' for a list of options.
1812You may also start interactively and then answer '& -d' at any prompt to turn
1813on the non-interactive behaviour for the remainder of the execution.
1814
1815EOH
1816 . ./myread
1817 cat <<EOH
1818
1819Much effort has been expended to ensure that this shell script will run on any
1820Unix system. If despite that it blows up on yours, your best bet is to edit
1821Configure and run it again. If you can't run Configure for some reason,
1822you'll have to generate a config.sh file by hand. Whatever problems you
1823have, let me (perlbug@perl.com) know how I blew it.
1824
1825This installation script affects things in two ways:
1826
18271) it may do direct variable substitutions on some of the files included
1828 in this kit.
18292) it builds a config.h file for inclusion in C programs. You may edit
1830 any of these files as the need arises after running this script.
1831
1832If you make a mistake on a question, there is no easy way to back up to it
1833currently. The easiest thing to do is to edit config.sh and rerun all the SH
1834files. Configure will offer to let you do this before it runs the SH files.
1835
1836EOH
1837 dflt='Type carriage return to continue'
1838 . ./myread
1839 case "$firsttime" in
1840 true) echo $user >>../.config/instruct;;
1841 esac
1842fi
1843
1844: find out where common programs are
1845echo " "
1846echo "Locating common programs..." >&4
1847cat <<EOSC >loc
1848$startsh
1849case \$# in
18500) exit 1;;
1851esac
1852thing=\$1
1853shift
1854dflt=\$1
1855shift
1856for dir in \$*; do
1857 case "\$thing" in
1858 .)
1859 if test -d \$dir/\$thing; then
1860 echo \$dir
1861 exit 0
1862 fi
1863 ;;
1864 *)
1865 for thisthing in \$dir/\$thing; do
1866 : just loop through to pick last item
1867 done
1868 if test -f \$thisthing; then
1869 echo \$thisthing
1870 exit 0
1871 elif test -f \$dir/\$thing.exe; then
1872 if test -n "$DJGPP"; then
1873 echo \$dir/\$thing.exe
1874 else
1875 : on Eunice apparently
1876 echo \$dir/\$thing
1877 fi
1878 exit 0
1879 fi
1880 ;;
1881 esac
1882done
1883echo \$dflt
1884exit 1
1885EOSC
1886chmod +x loc
1887$eunicefix loc
1888loclist="
1889awk
1890cat
1891comm
1892cp
1893echo
1894expr
1895grep
1896ls
1897make
1898mkdir
1899rm
1900sed
1901sort
1902touch
1903tr
1904uniq
1905"
1906trylist="
1907Mcc
1908ar
1909byacc
1910cpp
1911csh
1912date
1913egrep
1914gzip
1915less
1916ln
1917more
1918nm
1919nroff
1920perl
1921pg
1922test
1923uname
1924zip
1925"
1926pth=`echo $PATH | sed -e "s/$p_/ /g"`
1927pth="$pth /lib /usr/lib"
1928for file in $loclist; do
1929 eval xxx=\$$file
1930 case "$xxx" in
1931 /*|?:[\\/]*)
1932 if test -f "$xxx"; then
1933 : ok
1934 else
1935 echo "WARNING: no $xxx -- ignoring your setting for $file." >&4
1936 xxx=`./loc $file $file $pth`
1937 fi
1938 ;;
1939 '') xxx=`./loc $file $file $pth`;;
1940 *) xxx=`./loc $xxx $xxx $pth`;;
1941 esac
1942 eval $file=$xxx
1943 eval _$file=$xxx
1944 case "$xxx" in
1945 /*)
1946 echo $file is in $xxx.
1947 ;;
1948 ?:[\\/]*)
1949 echo $file is in $xxx.
1950 ;;
1951 *)
1952 echo "I don't know where '$file' is, and my life depends on it." >&4
1953 echo "Go find a public domain implementation or fix your PATH setting!" >&4
1954 exit 1
1955 ;;
1956 esac
1957done
1958echo " "
1959echo "Don't worry if any of the following aren't found..."
1960say=offhand
1961for file in $trylist; do
1962 eval xxx=\$$file
1963 case "$xxx" in
1964 /*|?:[\\/]*)
1965 if test -f "$xxx"; then
1966 : ok
1967 else
1968 echo "WARNING: no $xxx -- ignoring your setting for $file." >&4
1969 xxx=`./loc $file $file $pth`
1970 fi
1971 ;;
1972 '') xxx=`./loc $file $file $pth`;;
1973 *) xxx=`./loc $xxx $xxx $pth`;;
1974 esac
1975 eval $file=$xxx
1976 eval _$file=$xxx
1977 case "$xxx" in
1978 /*)
1979 echo $file is in $xxx.
1980 ;;
1981 ?:[\\/]*)
1982 echo $file is in $xxx.
1983 ;;
1984 *)
1985 echo "I don't see $file out there, $say."
1986 say=either
1987 ;;
1988 esac
1989done
1990case "$egrep" in
1991egrep)
1992 echo "Substituting grep for egrep."
1993 egrep=$grep
1994 ;;
1995esac
1996case "$ln" in
1997ln)
1998 echo "Substituting cp for ln."
1999 ln=$cp
2000 ;;
2001esac
2002case "$test" in
2003test)
2004 echo "Hopefully test is built into your sh."
2005 ;;
2006*)
2007 if `sh -c "PATH= test true" >/dev/null 2>&1`; then
2008 echo "Using the test built into your sh."
2009 test=test
2010 _test=test
2011 fi
2012 ;;
2013esac
2014case "$echo" in
2015echo)
2016 echo "Hopefully echo is built into your sh."
2017 ;;
2018'') ;;
2019*)
2020 echo " "
2021echo "Checking compatibility between $echo and builtin echo (if any)..." >&4
2022 $echo $n "hi there$c" >foo1
2023 echo $n "hi there$c" >foo2
2024 if cmp foo1 foo2 >/dev/null 2>&1; then
2025 echo "They are compatible. In fact, they may be identical."
2026 else
2027 case "$n" in
2028 '-n') n='' c='\c';;
2029 *) n='-n' c='';;
2030 esac
2031 cat <<FOO
2032They are not compatible! You are probably running ksh on a non-USG system.
2033I'll have to use $echo instead of the builtin, since Bourne shell doesn't
2034have echo built in and we may have to run some Bourne shell scripts. That
2035means I'll have to use '$n$c' to suppress newlines now. Life is ridiculous.
2036
2037FOO
2038 $echo $n "The star should be here-->$c"
2039 $echo "*"
2040 fi
2041 $rm -f foo1 foo2
2042 ;;
2043esac
2044
2045: determine whether symbolic links are supported
2046echo " "
2047$touch blurfl
2048if $ln -s blurfl sym > /dev/null 2>&1 ; then
2049 echo "Symbolic links are supported." >&4
2050 lns="$ln -s"
2051else
2052 echo "Symbolic links are NOT supported." >&4
2053 lns="$ln"
2054fi
2055$rm -f blurfl sym
2056
2057: see whether [:lower:] and [:upper:] are supported character classes
2058echo " "
2059case "`echo AbyZ | $tr '[:lower:]' '[:upper:]' 2>/dev/null`" in
2060ABYZ)
2061 echo "Good, your tr supports [:lower:] and [:upper:] to convert case." >&4
2062 up='[:upper:]'
2063 low='[:lower:]'
2064 ;;
2065*) # There is a discontinuity in EBCDIC between 'I' and 'J'
2066 # (0xc9 and 0xd1), therefore that is a nice testing point.
2067 if test "X$up" = X -o "X$low" = X; then
2068 case "`echo IJ | $tr '[I-J]' '[i-j]' 2>/dev/null`" in
2069 ij) up='[A-Z]'
2070 low='[a-z]'
2071 ;;
2072 esac
2073 fi
2074 if test "X$up" = X -o "X$low" = X; then
2075 case "`echo IJ | $tr I-J i-j 2>/dev/null`" in
2076 ij) up='A-Z'
2077 low='a-z'
2078 ;;
2079 esac
2080 fi
2081 if test "X$up" = X -o "X$low" = X; then
2082 case "`echo IJ | od -x 2>/dev/null`" in
2083 *C9D1*|*c9d1*)
2084 echo "Hey, this might be EBCDIC." >&4
2085 if test "X$up" = X -o "X$low" = X; then
2086 case "`echo IJ | $tr '[A-IJ-RS-Z]' '[a-ij-rs-z]' 2>/dev/null`" in
2087 ij) up='[A-IJ-RS-Z]'
2088 low='[a-ij-rs-z]'
2089 ;;
2090 esac
2091 fi
2092 if test "X$up" = X -o "X$low" = X; then
2093 case "`echo IJ | $tr A-IJ-RS-Z a-ij-rs-z 2>/dev/null`" in
2094 ij) up='A-IJ-RS-Z'
2095 low='a-ij-rs-z'
2096 ;;
2097 esac
2098 fi
2099 ;;
2100 esac
2101 fi
2102esac
2103case "`echo IJ | $tr \"$up\" \"$low\" 2>/dev/null`" in
2104ij)
2105 echo "Using $up and $low to convert case." >&4
2106 ;;
2107*)
2108 echo "I don't know how to translate letters from upper to lower case." >&4
2109 echo "Your tr is not acting any way I know of." >&4
2110 exit 1
2111 ;;
2112esac
2113: set up the translation script tr, must be called with ./tr of course
2114cat >tr <<EOSC
2115$startsh
2116case "\$1\$2" in
2117'[A-Z][a-z]') exec $tr '$up' '$low';;
2118'[a-z][A-Z]') exec $tr '$low' '$up';;
2119esac
2120exec $tr "\$@"
2121EOSC
2122chmod +x tr
2123$eunicefix tr
2124
2125: Try to determine whether config.sh was made on this system
2126case "$config_sh" in
2127'')
2128myuname=`( ($uname -a) 2>/dev/null || hostname) 2>&1`
2129# tr '[A-Z]' '[a-z]' would not work in EBCDIC
2130# because the A-Z/a-z are not consecutive.
2131myuname=`echo $myuname | $sed -e 's/^[^=]*=//' -e 's/\///g' | \
2132 ./tr '[A-Z]' '[a-z]' | $tr $trnl ' '`
2133newmyuname="$myuname"
2134dflt=n
2135case "$knowitall" in
2136'')
2137 if test -f ../config.sh; then
2138 if $contains myuname= ../config.sh >/dev/null 2>&1; then
2139 eval "`grep myuname= ../config.sh`"
2140 fi
2141 if test "X$myuname" = "X$newmyuname"; then
2142 dflt=y
2143 fi
2144 fi
2145 ;;
2146*) dflt=y;;
2147esac
2148
2149: Get old answers from old config file if Configure was run on the
2150: same system, otherwise use the hints.
2151hint=default
2152cd ..
2153if test -f config.sh; then
2154 echo " "
2155 rp="I see a config.sh file. Shall I use it to set the defaults?"
2156 . UU/myread
2157 case "$ans" in
2158 n*|N*) echo "OK, I'll ignore it."; mv config.sh config.sh.old;;
2159 *) echo "Fetching default answers from your old config.sh file..." >&4
2160 tmp_n="$n"
2161 tmp_c="$c"
2162 tmp_sh="$sh"
2163 . ./config.sh
2164 cp config.sh UU
2165 n="$tmp_n"
2166 c="$tmp_c"
2167 : Older versions did not always set $sh. Catch re-use of such
2168 : an old config.sh.
2169 case "$sh" in
2170 '') sh="$tmp_sh" ;;
2171 esac
2172 hint=previous
2173 ;;
2174 esac
2175fi
2176if test ! -f config.sh; then
2177 $cat <<EOM
2178
2179First time through, eh? I have some defaults handy for some systems
2180that need some extra help getting the Configure answers right:
2181
2182EOM
2183 (cd $src/hints; ls -C *.sh) | $sed 's/\.sh/ /g' >&4
2184 dflt=''
2185 : Half the following guesses are probably wrong... If you have better
2186 : tests or hints, please send them to perlbug@perl.com
2187 : The metaconfig authors would also appreciate a copy...
2188 $test -f /irix && osname=irix
2189 $test -f /xenix && osname=sco_xenix
2190 $test -f /dynix && osname=dynix
2191 $test -f /dnix && osname=dnix
2192 $test -f /lynx.os && osname=lynxos
2193 $test -f /unicos && osname=unicos && osvers=`$uname -r`
2194 $test -f /unicosmk && osname=unicosmk && osvers=`$uname -r`
2195 $test -f /unicosmk.ar && osname=unicosmk && osvers=`$uname -r`
2196 $test -f /bin/mips && /bin/mips && osname=mips
2197 $test -d /NextApps && set X `hostinfo | grep 'NeXT Mach.*:' | \
2198 $sed -e 's/://' -e 's/\./_/'` && osname=next && osvers=$4
2199 $test -d /usr/apollo/bin && osname=apollo
2200 $test -f /etc/saf/_sactab && osname=svr4
2201 $test -d /usr/include/minix && osname=minix
2202 if $test -d /MachTen -o -d /MachTen_Folder; then
2203 osname=machten
2204 if $test -x /sbin/version; then
2205 osvers=`/sbin/version | $awk '{print $2}' |
2206 $sed -e 's/[A-Za-z]$//'`
2207 elif $test -x /usr/etc/version; then
2208 osvers=`/usr/etc/version | $awk '{print $2}' |
2209 $sed -e 's/[A-Za-z]$//'`
2210 else
2211 osvers="$2.$3"
2212 fi
2213 fi
2214
2215 $test -f /sys/posix.dll &&
2216 $test -f /usr/bin/what &&
2217 set X `/usr/bin/what /sys/posix.dll` &&
2218 $test "$3" = UWIN &&
2219 osname=uwin &&
2220 osvers="$5"
2221
2222 if $test -f $uname; then
2223 set X $myuname
2224 shift
2225
2226 case "$5" in
2227 fps*) osname=fps ;;
2228 mips*)
2229 case "$4" in
2230 umips) osname=umips ;;
2231 *) osname=mips ;;
2232 esac;;
2233 [23]100) osname=mips ;;
2234 next*) osname=next ;;
2235 i386*)
2236 tmp=`/bin/uname -X 2>/dev/null|awk '/3\.2v[45]/{ print $(NF) }'`
2237 if $test "$tmp" != "" -a "$3" = "3.2" -a -f '/etc/systemid'; then
2238 osname='sco'
2239 osvers=$tmp
2240 elif $test -f /etc/kconfig; then
2241 osname=isc
2242 if test "$lns" = "$ln -s"; then
2243 osvers=4
2244 elif $contains _SYSV3 /usr/include/stdio.h > /dev/null 2>&1 ; then
2245 osvers=3
2246 elif $contains _POSIX_SOURCE /usr/include/stdio.h > /dev/null 2>&1 ; then
2247 osvers=2
2248 fi
2249 fi
2250 tmp=''
2251 ;;
2252 pc*)
2253 if test -n "$DJGPP"; then
2254 osname=dos
2255 osvers=djgpp
2256 fi
2257 ;;
2258 esac
2259
2260 case "$1" in
2261 aix) osname=aix
2262 tmp=`( (oslevel) 2>/dev/null || echo "not found") 2>&1`
2263 case "$tmp" in
2264 'not found') osvers="$4"."$3" ;;
2265 '<3240'|'<>3240') osvers=3.2.0 ;;
2266 '=3240'|'>3240'|'<3250'|'<>3250') osvers=3.2.4 ;;
2267 '=3250'|'>3250') osvers=3.2.5 ;;
2268 *) osvers=$tmp;;
2269 esac
2270 ;;
2271 bsd386) osname=bsd386
2272 osvers=`$uname -r`
2273 ;;
2274 cygwin*) osname=cygwin
2275 osvers="$3"
2276 ;;
2277 *dc.osx) osname=dcosx
2278 osvers="$3"
2279 ;;
2280 dnix) osname=dnix
2281 osvers="$3"
2282 ;;
2283 domainos) osname=apollo
2284 osvers="$3"
2285 ;;
2286 dgux) osname=dgux
2287 osvers="$3"
2288 ;;
2289 dynixptx*) osname=dynixptx
2290 osvers=`echo "$4"|sed 's/^v//'`
2291 ;;
2292 freebsd) osname=freebsd
2293 osvers="$3" ;;
2294 genix) osname=genix ;;
2295 hp*) osname=hpux
2296 osvers=`echo "$3" | $sed 's,.*\.\([0-9]*\.[0-9]*\),\1,'`
2297 ;;
2298 irix*) osname=irix
2299 case "$3" in
2300 4*) osvers=4 ;;
2301 5*) osvers=5 ;;
2302 *) osvers="$3" ;;
2303 esac
2304 ;;
2305 linux) osname=linux
2306 case "$3" in
2307 *) osvers="$3" ;;
2308 esac
2309 ;;
2310 MiNT) osname=mint
2311 ;;
2312 netbsd*) osname=netbsd
2313 osvers="$3"
2314 ;;
2315 news-os) osvers="$3"
2316 case "$3" in
2317 4*) osname=newsos4 ;;
2318 *) osname=newsos ;;
2319 esac
2320 ;;
2321 next*) osname=next ;;
2322 POSIX-BC | posix-bc ) osname=posix-bc
2323 osvers="$3"
2324 ;;
2325 powerux | power_ux | powermax_os | powermaxos | \
2326 powerunix | power_unix) osname=powerux
2327 osvers="$3"
2328 ;;
2329 qnx) osname=qnx
2330 osvers="$4"
2331 ;;
2332 solaris) osname=solaris
2333 case "$3" in
2334 5*) osvers=`echo $3 | $sed 's/^5/2/g'` ;;
2335 *) osvers="$3" ;;
2336 esac
2337 ;;
2338 sunos) osname=sunos
2339 case "$3" in
2340 5*) osname=solaris
2341 osvers=`echo $3 | $sed 's/^5/2/g'` ;;
2342 *) osvers="$3" ;;
2343 esac
2344 ;;
2345 titanos) osname=titanos
2346 case "$3" in
2347 1*) osvers=1 ;;
2348 2*) osvers=2 ;;
2349 3*) osvers=3 ;;
2350 4*) osvers=4 ;;
2351 *) osvers="$3" ;;
2352 esac
2353 ;;
2354 ultrix) osname=ultrix
2355 osvers="$3"
2356 ;;
2357 osf1|mls+) case "$5" in
2358 alpha)
2359 osname=dec_osf
2360 osvers=`echo "$3" | sed 's/^[xvt]//'`
2361 ;;
2362 hp*) osname=hp_osf1 ;;
2363 mips) osname=mips_osf1 ;;
2364 esac
2365 ;;
2366 unixware) osname=svr5
2367 osvers="$4"
2368 ;;
2369 uts) osname=uts
2370 osvers="$3"
2371 ;;
2372 $2) case "$osname" in
2373 *isc*) ;;
2374 *freebsd*) ;;
2375 svr*)
2376 : svr4.x or possibly later
2377 case "svr$3" in
2378 ${osname}*)
2379 osname=svr$3
2380 osvers=$4
2381 ;;
2382 esac
2383 case "$osname" in
2384 svr4.0)
2385 : Check for ESIX
2386 if test -f /stand/boot ; then
2387 eval `grep '^INITPROG=[a-z/0-9]*$' /stand/boot`
2388 if test -n "$INITPROG" -a -f "$INITPROG"; then
2389 isesix=`strings -a $INITPROG|grep 'ESIX SYSTEM V/386 Release 4.0'`
2390 if test -n "$isesix"; then
2391 osname=esix4
2392 fi
2393 fi
2394 fi
2395 ;;
2396 esac
2397 ;;
2398 *) if test -f /etc/systemid; then
2399 osname=sco
2400 set `echo $3 | $sed 's/\./ /g'` $4
2401 if $test -f $src/hints/sco_$1_$2_$3.sh; then
2402 osvers=$1.$2.$3
2403 elif $test -f $src/hints/sco_$1_$2.sh; then
2404 osvers=$1.$2
2405 elif $test -f $src/hints/sco_$1.sh; then
2406 osvers=$1
2407 fi
2408 else
2409 case "$osname" in
2410 '') : Still unknown. Probably a generic Sys V.
2411 osname="sysv"
2412 osvers="$3"
2413 ;;
2414 esac
2415 fi
2416 ;;
2417 esac
2418 ;;
2419 *) case "$osname" in
2420 '') : Still unknown. Probably a generic BSD.
2421 osname="$1"
2422 osvers="$3"
2423 ;;
2424 esac
2425 ;;
2426 esac
2427 else
2428 if test -f /vmunix -a -f $src/hints/news_os.sh; then
2429 (what /vmunix | UU/tr '[A-Z]' '[a-z]') > UU/kernel.what 2>&1
2430 if $contains news-os UU/kernel.what >/dev/null 2>&1; then
2431 osname=news_os
2432 fi
2433 $rm -f UU/kernel.what
2434 elif test -d c:/.; then
2435 set X $myuname
2436 osname=os2
2437 osvers="$5"
2438 fi
2439 fi
2440
2441 : Now look for a hint file osname_osvers, unless one has been
2442 : specified already.
2443 case "$hintfile" in
2444 ''|' ')
2445 file=`echo "${osname}_${osvers}" | $sed -e 's@\.@_@g' -e 's@_$@@'`
2446 : Also try without trailing minor version numbers.
2447 xfile=`echo $file | $sed -e 's@_[^_]*$@@'`
2448 xxfile=`echo $xfile | $sed -e 's@_[^_]*$@@'`
2449 xxxfile=`echo $xxfile | $sed -e 's@_[^_]*$@@'`
2450 xxxxfile=`echo $xxxfile | $sed -e 's@_[^_]*$@@'`
2451 case "$file" in
2452 '') dflt=none ;;
2453 *) case "$osvers" in
2454 '') dflt=$file
2455 ;;
2456 *) if $test -f $src/hints/$file.sh ; then
2457 dflt=$file
2458 elif $test -f $src/hints/$xfile.sh ; then
2459 dflt=$xfile
2460 elif $test -f $src/hints/$xxfile.sh ; then
2461 dflt=$xxfile
2462 elif $test -f $src/hints/$xxxfile.sh ; then
2463 dflt=$xxxfile
2464 elif $test -f $src/hints/$xxxxfile.sh ; then
2465 dflt=$xxxxfile
2466 elif $test -f "$src/hints/${osname}.sh" ; then
2467 dflt="${osname}"
2468 else
2469 dflt=none
2470 fi
2471 ;;
2472 esac
2473 ;;
2474 esac
2475 if $test -f Policy.sh ; then
2476 case "$dflt" in
2477 *Policy*) ;;
2478 none) dflt="Policy" ;;
2479 *) dflt="Policy $dflt" ;;
2480 esac
2481 fi
2482 ;;
2483 *)
2484 dflt=`echo $hintfile | $sed 's/\.sh$//'`
2485 ;;
2486 esac
2487
2488 if $test -f Policy.sh ; then
2489 $cat <<EOM
2490
2491There's also a Policy hint file available, which should make the
2492site-specific (policy) questions easier to answer.
2493EOM
2494
2495 fi
2496
2497 $cat <<EOM
2498
2499You may give one or more space-separated answers, or "none" if appropriate.
2500A well-behaved OS will have no hints, so answering "none" or just "Policy"
2501is a good thing. DO NOT give a wrong version or a wrong OS.
2502
2503EOM
2504
2505 rp="Which of these apply, if any?"
2506 . UU/myread
2507 tans=$ans
2508 for file in $tans; do
2509 if $test X$file = XPolicy -a -f Policy.sh; then
2510 . Policy.sh
2511 $cat Policy.sh >> UU/config.sh
2512 elif $test -f $src/hints/$file.sh; then
2513 . $src/hints/$file.sh
2514 $cat $src/hints/$file.sh >> UU/config.sh
2515 elif $test X$tans = X -o X$tans = Xnone ; then
2516 : nothing
2517 else
2518 : Give one chance to correct a possible typo.
2519 echo "$file.sh does not exist"
2520 dflt=$file
2521 rp="hint to use instead?"
2522 . UU/myread
2523 for file in $ans; do
2524 if $test -f "$src/hints/$file.sh"; then
2525 . $src/hints/$file.sh
2526 $cat $src/hints/$file.sh >> UU/config.sh
2527 elif $test X$ans = X -o X$ans = Xnone ; then
2528 : nothing
2529 else
2530 echo "$file.sh does not exist -- ignored."
2531 fi
2532 done
2533 fi
2534 done
2535
2536 hint=recommended
2537 : Remember our hint file for later.
2538 if $test -f "$src/hints/$file.sh" ; then
2539 hintfile="$file"
2540 else
2541 hintfile=''
2542 fi
2543fi
2544cd UU
2545;;
2546*)
2547 echo " "
2548 echo "Fetching default answers from $config_sh..." >&4
2549 tmp_n="$n"
2550 tmp_c="$c"
2551 cd ..
2552 cp $config_sh config.sh 2>/dev/null
2553 chmod +w config.sh
2554 . ./config.sh
2555 cd UU
2556 cp ../config.sh .
2557 n="$tmp_n"
2558 c="$tmp_c"
2559 hint=previous
2560 ;;
2561esac
2562test "$override" && . ./optdef.sh
2563myuname="$newmyuname"
2564
2565: Restore computed paths
2566for file in $loclist $trylist; do
2567 eval $file="\$_$file"
2568done
2569
2570cat << EOM
2571
2572Configure uses the operating system name and version to set some defaults.
2573The default value is probably right if the name rings a bell. Otherwise,
2574since spelling matters for me, either accept the default or answer "none"
2575to leave it blank.
2576
2577EOM
2578case "$osname" in
2579 ''|' ')
2580 case "$hintfile" in
2581 ''|' '|none) dflt=none ;;
2582 *) dflt=`echo $hintfile | $sed -e 's/\.sh$//' -e 's/_.*$//'` ;;
2583 esac
2584 ;;
2585 *) dflt="$osname" ;;
2586esac
2587rp="Operating system name?"
2588. ./myread
2589case "$ans" in
2590none) osname='' ;;
2591*) osname=`echo "$ans" | $sed -e 's/[ ][ ]*/_/g' | ./tr '[A-Z]' '[a-z]'`;;
2592esac
2593echo " "
2594case "$osvers" in
2595 ''|' ')
2596 case "$hintfile" in
2597 ''|' '|none) dflt=none ;;
2598 *) dflt=`echo $hintfile | $sed -e 's/\.sh$//' -e 's/^[^_]*//'`
2599 dflt=`echo $dflt | $sed -e 's/^_//' -e 's/_/./g'`
2600 case "$dflt" in
2601 ''|' ') dflt=none ;;
2602 esac
2603 ;;
2604 esac
2605 ;;
2606 *) dflt="$osvers" ;;
2607esac
2608rp="Operating system version?"
2609. ./myread
2610case "$ans" in
2611none) osvers='' ;;
2612*) osvers="$ans" ;;
2613esac
2614
2615
2616. ./posthint.sh
2617
2618: who configured the system
2619cf_time=`LC_ALL=C; LANGUAGE=C; export LC_ALL; export LANGUAGE; $date 2>&1`
2620cf_by=`(logname) 2>/dev/null`
2621case "$cf_by" in
2622"")
2623 cf_by=`(whoami) 2>/dev/null`
2624 case "$cf_by" in
2625 "") cf_by=unknown ;;
2626 esac ;;
2627esac
2628
2629: set up the script used to warn in case of inconsistency
2630cat <<EOS >whoa
2631$startsh
2632EOS
2633cat <<'EOSC' >>whoa
2634dflt=y
2635echo " "
2636echo "*** WHOA THERE!!! ***" >&4
2637echo " The $hint value for \$$var on this machine was \"$was\"!" >&4
2638rp=" Keep the $hint value?"
2639. ./myread
2640case "$ans" in
2641y) td=$was; tu=$was;;
2642esac
2643EOSC
2644
2645: function used to set $1 to $val
2646setvar='var=$1; eval "was=\$$1"; td=$define; tu=$undef;
2647case "$val$was" in
2648$define$undef) . ./whoa; eval "$var=\$td";;
2649$undef$define) . ./whoa; eval "$var=\$tu";;
2650*) eval "$var=$val";;
2651esac'
2652
2653cat <<EOM
2654
2655Perl can be built to take advantage of threads on some systems.
2656To do so, Configure must be run with -Dusethreads.
2657
2658Note that threading is a highly experimental feature, and
2659some known race conditions still remain. If you choose to try
2660it, be very sure to not actually deploy it for production
2661purposes. README.threads has more details, and is required
2662reading if you enable threads.
2663EOM
2664case "$usethreads" in
2665$define|true|[yY]*) dflt='y';;
2666*) dflt='n';;
2667esac
2668rp='Build a threading Perl?'
2669. ./myread
2670case "$ans" in
2671y|Y) val="$define" ;;
2672*) val="$undef" ;;
2673esac
2674set usethreads
2675eval $setvar
2676
2677case "$usethreads" in
2678$define)
2679 $cat <<EOM
2680
2681As of 5.5.640, Perl has two different internal threading implementations,
2682the 5.005 version (5005threads) and an interpreter-based version
2683(ithreads) that has one interpreter per thread. Both are very
2684experimental. This arrangement exists to help developers work out
2685which one is better.
2686
2687If you're a casual user, you probably don't want interpreter-threads
2688at this time. There doesn't yet exist a way to create threads from
2689within Perl in this model, i.e., "use Thread;" will NOT work.
2690EOM
2691 : Default to ithreads unless overridden on command line or with
2692 : old config.sh
2693 dflt='y'
2694 case "$use5005threads" in
2695 $define|true|[yY]*) dflt='n';;
2696 esac
2697 case "$useithreads" in
2698 $undef|false|[nN]*) dflt='n';;
2699 esac
2700 rp='Use interpreter-based ithreads?'
2701 . ./myread
2702 case "$ans" in
2703 y|Y) val="$define" ;;
2704 *) val="$undef" ;;
2705 esac
2706 set useithreads
2707 eval $setvar
2708 : Now set use5005threads to the opposite value.
2709 case "$useithreads" in
2710 $define) val="$undef" ;;
2711 *) val="$define" ;;
2712 esac
2713 set use5005threads
2714 eval $setvar
2715 ;;
2716*)
2717 useithreads="$undef"
2718 use5005threads="$undef"
2719 ;;
2720esac
2721
2722case "$d_oldpthreads" in
2723'') : Configure tests would be welcome here. For now, assume undef.
2724 val="$undef" ;;
2725*) val="$d_oldpthreads" ;;
2726esac
2727set d_oldpthreads
2728eval $setvar
2729
2730
2731case "$usethreads" in
2732"$define"|true|[yY]*)
2733: Look for a hint-file generated 'call-back-unit'. If the
2734: user has specified that a threading perl is to be built,
2735: we may need to set or change some other defaults.
2736 if $test -f usethreads.cbu; then
2737 echo "Your platform has some specific hints for threaded builds, using them..."
2738 . ./usethreads.cbu
2739 else
2740 $cat <<EOM
2741(Your platform doesn't have any specific hints for threaded builds.
2742 Assuming POSIX threads, then.)
2743EOM
2744 fi
2745 ;;
2746esac
2747
2748cat <<EOM
2749
2750Perl can be built so that multiple Perl interpreters can coexist
2751within the same Perl executable.
2752EOM
2753
2754case "$useithreads" in
2755$define)
2756 cat <<EOM
2757This multiple interpreter support is required for interpreter-based threads.
2758EOM
2759 val="$define"
2760 ;;
2761*)
2762 echo 'Normally you do not need this and you should answer no.'
2763 case "$usemultiplicity" in
2764 $define|true|[yY]*) dflt='y';;
2765 *) dflt='n';;
2766 esac
2767 rp='Build Perl for multiplicity?'
2768 . ./myread
2769 case "$ans" in
2770 y|Y) val="$define" ;;
2771 *) val="$undef" ;;
2772 esac
2773 ;;
2774esac
2775set usemultiplicity
2776eval $setvar
2777
2778: determine where manual pages are on this system
2779echo " "
2780case "$sysman" in
2781'')
2782 syspath='/usr/man/man1 /usr/man/mann /usr/man/manl /usr/man/local/man1'
2783 syspath="$syspath /usr/man/u_man/man1 /usr/share/man/man1"
2784 syspath="$syspath /usr/catman/u_man/man1 /usr/man/l_man/man1"
2785 syspath="$syspath /usr/local/man/u_man/man1 /usr/local/man/l_man/man1"
2786 syspath="$syspath /usr/man/man.L /local/man/man1 /usr/local/man/man1"
2787 sysman=`./loc . /usr/man/man1 $syspath`
2788 ;;
2789esac
2790if $test -d "$sysman"; then
2791 echo "System manual is in $sysman." >&4
2792else
2793 echo "Could not find manual pages in source form." >&4
2794fi
2795
2796: see what memory models we can support
2797case "$models" in
2798'')
2799 $cat >pdp11.c <<'EOP'
2800int main() {
2801#ifdef pdp11
2802 exit(0);
2803#else
2804 exit(1);
2805#endif
2806}
2807EOP
2808 ( cc -o pdp11 pdp11.c ) >/dev/null 2>&1
2809 if $test -f pdp11 && ./pdp11 2>/dev/null; then
2810 dflt='unsplit split'
2811 else
2812 tans=`./loc . X /lib/small /lib/large /usr/lib/small /usr/lib/large /lib/medium /usr/lib/medium /lib/huge`
2813 case "$tans" in
2814 X) dflt='none';;
2815 *) if $test -d /lib/small || $test -d /usr/lib/small; then
2816 dflt='small'
2817 else
2818 dflt=''
2819 fi
2820 if $test -d /lib/medium || $test -d /usr/lib/medium; then
2821 dflt="$dflt medium"
2822 fi
2823 if $test -d /lib/large || $test -d /usr/lib/large; then
2824 dflt="$dflt large"
2825 fi
2826 if $test -d /lib/huge || $test -d /usr/lib/huge; then
2827 dflt="$dflt huge"
2828 fi
2829 esac
2830 fi;;
2831*) dflt="$models";;
2832esac
2833$cat <<EOM
2834
2835Some systems have different model sizes. On most systems they are called
2836small, medium, large, and huge. On the PDP11 they are called unsplit and
2837split. If your system doesn't support different memory models, say "none".
2838If you wish to force everything to one memory model, say "none" here and
2839put the appropriate flags later when it asks you for other cc and ld flags.
2840Venix systems may wish to put "none" and let the compiler figure things out.
2841(In the following question multiple model names should be space separated.)
2842
2843The default for most systems is "none".
2844
2845EOM
2846rp="Which memory models are supported?"
2847. ./myread
2848models="$ans"
2849
2850case "$models" in
2851none)
2852 small=''
2853 medium=''
2854 large=''
2855 huge=''
2856 unsplit=''
2857 split=''
2858 ;;
2859*split)
2860 case "$split" in
2861 '') if $contains '\-i' $sysman/ld.1 >/dev/null 2>&1 || \
2862 $contains '\-i' $sysman/cc.1 >/dev/null 2>&1; then
2863 dflt='-i'
2864 else
2865 dflt='none'
2866 fi;;
2867 *) dflt="$split";;
2868 esac
2869 rp="What flag indicates separate I and D space?"
2870 . ./myread
2871 tans="$ans"
2872 case "$tans" in
2873 none) tans='';;
2874 esac
2875 split="$tans"
2876 unsplit='';;
2877*large*|*small*|*medium*|*huge*)
2878 case "$models" in
2879 *large*)
2880 case "$large" in
2881 '') dflt='-Ml';;
2882 *) dflt="$large";;
2883 esac
2884 rp="What flag indicates large model?"
2885 . ./myread
2886 tans="$ans"
2887 case "$tans" in
2888 none) tans='';
2889 esac
2890 large="$tans";;
2891 *) large='';;
2892 esac
2893 case "$models" in
2894 *huge*) case "$huge" in
2895 '') dflt='-Mh';;
2896 *) dflt="$huge";;
2897 esac
2898 rp="What flag indicates huge model?"
2899 . ./myread
2900 tans="$ans"
2901 case "$tans" in
2902 none) tans='';
2903 esac
2904 huge="$tans";;
2905 *) huge="$large";;
2906 esac
2907 case "$models" in
2908 *medium*) case "$medium" in
2909 '') dflt='-Mm';;
2910 *) dflt="$medium";;
2911 esac
2912 rp="What flag indicates medium model?"
2913 . ./myread
2914 tans="$ans"
2915 case "$tans" in
2916 none) tans='';
2917 esac
2918 medium="$tans";;
2919 *) medium="$large";;
2920 esac
2921 case "$models" in
2922 *small*) case "$small" in
2923 '') dflt='none';;
2924 *) dflt="$small";;
2925 esac
2926 rp="What flag indicates small model?"
2927 . ./myread
2928 tans="$ans"
2929 case "$tans" in
2930 none) tans='';
2931 esac
2932 small="$tans";;
2933 *) small='';;
2934 esac
2935 ;;
2936*)
2937 echo "Unrecognized memory models--you may have to edit Makefile.SH" >&4
2938 ;;
2939esac
2940$rm -f pdp11.* pdp11
2941
2942: make some quick guesses about what we are up against
2943echo " "
2944$echo $n "Hmm... $c"
2945echo exit 1 >bsd
2946echo exit 1 >usg
2947echo exit 1 >v7
2948echo exit 1 >osf1
2949echo exit 1 >eunice
2950echo exit 1 >xenix
2951echo exit 1 >venix
2952echo exit 1 >os2
2953d_bsd="$undef"
2954$cat /usr/include/signal.h /usr/include/sys/signal.h >foo 2>/dev/null
2955if test -f /osf_boot || $contains 'OSF/1' /usr/include/ctype.h >/dev/null 2>&1
2956then
2957 echo "Looks kind of like an OSF/1 system, but we'll see..."
2958 echo exit 0 >osf1
2959elif test `echo abc | tr a-z A-Z` = Abc ; then
2960 xxx=`./loc addbib blurfl $pth`
2961 if $test -f $xxx; then
2962 echo "Looks kind of like a USG system with BSD features, but we'll see..."
2963 echo exit 0 >bsd
2964 echo exit 0 >usg
2965 else
2966 if $contains SIGTSTP foo >/dev/null 2>&1 ; then
2967 echo "Looks kind of like an extended USG system, but we'll see..."
2968 else
2969 echo "Looks kind of like a USG system, but we'll see..."
2970 fi
2971 echo exit 0 >usg
2972 fi
2973elif $contains SIGTSTP foo >/dev/null 2>&1 ; then
2974 echo "Looks kind of like a BSD system, but we'll see..."
2975 d_bsd="$define"
2976 echo exit 0 >bsd
2977else
2978 echo "Looks kind of like a Version 7 system, but we'll see..."
2979 echo exit 0 >v7
2980fi
2981case "$eunicefix" in
2982*unixtovms*)
2983 $cat <<'EOI'
2984There is, however, a strange, musty smell in the air that reminds me of
2985something...hmm...yes...I've got it...there's a VMS nearby, or I'm a Blit.
2986EOI
2987 echo exit 0 >eunice
2988 d_eunice="$define"
2989: it so happens the Eunice I know will not run shell scripts in Unix format
2990 ;;
2991*)
2992 echo " "
2993 echo "Congratulations. You aren't running Eunice."
2994 d_eunice="$undef"
2995 ;;
2996esac
2997: Detect OS2. The p_ variable is set above in the Head.U unit.
2998case "$p_" in
2999:) ;;
3000*)
3001 $cat <<'EOI'
3002I have the feeling something is not exactly right, however...don't tell me...
3003lemme think...does HAL ring a bell?...no, of course, you're only running OS/2!
3004EOI
3005 echo exit 0 >os2
3006 ;;
3007esac
3008if test -f /xenix; then
3009 echo "Actually, this looks more like a XENIX system..."
3010 echo exit 0 >xenix
3011 d_xenix="$define"
3012else
3013 echo " "
3014 echo "It's not Xenix..."
3015 d_xenix="$undef"
3016fi
3017chmod +x xenix
3018$eunicefix xenix
3019if test -f /venix; then
3020 echo "Actually, this looks more like a VENIX system..."
3021 echo exit 0 >venix
3022else
3023 echo " "
3024 if ./xenix; then
3025 : null
3026 else
3027 echo "Nor is it Venix..."
3028 fi
3029fi
3030chmod +x bsd usg v7 osf1 eunice xenix venix os2
3031$eunicefix bsd usg v7 osf1 eunice xenix venix os2
3032$rm -f foo
3033
3034: see if we need a special compiler
3035echo " "
3036if ./usg; then
3037 case "$cc" in
3038 '') case "$Mcc" in
3039 /*) dflt='Mcc';;
3040 *) case "$large" in
3041 -M*) dflt='cc';;
3042 *) if $contains '\-M' $sysman/cc.1 >/dev/null 2>&1 ; then
3043 if $contains '\-M' $sysman/cpp.1 >/dev/null 2>&1; then
3044 dflt='cc'
3045 else
3046 dflt='cc -M'
3047 fi
3048 else
3049 dflt='cc'
3050 fi;;
3051 esac;;
3052 esac;;
3053 *) dflt="$cc";;
3054 esac
3055 case "$dflt" in
3056 *M*) $cat <<'EOM'
3057On some older systems the default C compiler will not resolve multiple global
3058references that happen to have the same name. On some such systems the "Mcc"
3059command may be used to force these to be resolved. On other systems a "cc -M"
3060command is required. (Note that the -M flag on other systems indicates a
3061memory model to use!) If you have the Gnu C compiler, you might wish to use
3062that instead.
3063
3064EOM
3065 ;;
3066 esac
3067 rp="Use which C compiler?"
3068 . ./myread
3069 cc="$ans"
3070else
3071 case "$cc" in
3072 '') dflt=cc;;
3073 *) dflt="$cc";;
3074 esac
3075 rp="Use which C compiler?"
3076 . ./myread
3077 cc="$ans"
3078fi
3079: Look for a hint-file generated 'call-back-unit'. Now that the
3080: user has specified the compiler, we may need to set or change some
3081: other defaults.
3082if $test -f cc.cbu; then
3083 . ./cc.cbu
3084fi
3085echo " "
3086echo "Checking for GNU cc in disguise and/or its version number..." >&4
3087$cat >gccvers.c <<EOM
3088#include <stdio.h>
3089int main() {
3090#ifdef __GNUC__
3091#ifdef __VERSION__
3092 printf("%s\n", __VERSION__);
3093#else
3094 printf("%s\n", "1");
3095#endif
3096#endif
3097 exit(0);
3098}
3099EOM
3100if $cc -o gccvers gccvers.c; then
3101 gccversion=`./gccvers`
3102 case "$gccversion" in
3103 '') echo "You are not using GNU cc." ;;
3104 *) echo "You are using GNU cc $gccversion."
3105 ;;
3106 esac
3107else
3108 echo " "
3109 echo "*** WHOA THERE!!! ***" >&4
3110 echo " Your C compiler \"$cc\" doesn't seem to be working!" >&4
3111 case "$knowitall" in
3112 '')
3113 echo " You'd better start hunting for one and let me know about it." >&4
3114 exit 1
3115 ;;
3116 esac
3117fi
3118$rm -f gccvers*
3119case "$gccversion" in
31201*) cpp=`./loc gcc-cpp $cpp $pth` ;;
3121esac
3122
3123: decide how portable to be. Allow command line overrides.
3124case "$d_portable" in
3125"$undef") ;;
3126*) d_portable="$define" ;;
3127esac
3128
3129: set up shell script to do ~ expansion
3130cat >filexp <<EOSS
3131$startsh
3132: expand filename
3133case "\$1" in
3134 ~/*|~)
3135 echo \$1 | $sed "s|~|\${HOME-\$LOGDIR}|"
3136 ;;
3137 ~*)
3138 if $test -f /bin/csh; then
3139 /bin/csh -f -c "glob \$1"
3140 failed=\$?
3141 echo ""
3142 exit \$failed
3143 else
3144 name=\`$expr x\$1 : '..\([^/]*\)'\`
3145 dir=\`$sed -n -e "/^\${name}:/{s/^[^:]*:[^:]*:[^:]*:[^:]*:[^:]*:\([^:]*\).*"'\$'"/\1/" -e p -e q -e '}' </etc/passwd\`
3146 if $test ! -d "\$dir"; then
3147 me=\`basename \$0\`
3148 echo "\$me: can't locate home directory for: \$name" >&2
3149 exit 1
3150 fi
3151 case "\$1" in
3152 */*)
3153 echo \$dir/\`$expr x\$1 : '..[^/]*/\(.*\)'\`
3154 ;;
3155 *)
3156 echo \$dir
3157 ;;
3158 esac
3159 fi
3160 ;;
3161*)
3162 echo \$1
3163 ;;
3164esac
3165EOSS
3166chmod +x filexp
3167$eunicefix filexp
3168
3169: now set up to get a file name
3170cat <<EOS >getfile
3171$startsh
3172EOS
3173cat <<'EOSC' >>getfile
3174tilde=''
3175fullpath=''
3176already=''
3177skip=''
3178none_ok=''
3179exp_file=''
3180nopath_ok=''
3181orig_rp="$rp"
3182orig_dflt="$dflt"
3183case "$gfpth" in
3184'') gfpth='.' ;;
3185esac
3186
3187case "$fn" in
3188*\(*)
3189 expr $fn : '.*(\(.*\)).*' | tr ',' $trnl >getfile.ok
3190 fn=`echo $fn | sed 's/(.*)//'`
3191 ;;
3192esac
3193
3194case "$fn" in
3195*:*)
3196 loc_file=`expr $fn : '.*:\(.*\)'`
3197 fn=`expr $fn : '\(.*\):.*'`
3198 ;;
3199esac
3200
3201case "$fn" in
3202*~*) tilde=true;;
3203esac
3204case "$fn" in
3205*/*) fullpath=true;;
3206esac
3207case "$fn" in
3208*+*) skip=true;;
3209esac
3210case "$fn" in
3211*n*) none_ok=true;;
3212esac
3213case "$fn" in
3214*e*) exp_file=true;;
3215esac
3216case "$fn" in
3217*p*) nopath_ok=true;;
3218esac
3219
3220case "$fn" in
3221*f*) type='File';;
3222*d*) type='Directory';;
3223*l*) type='Locate';;
3224esac
3225
3226what="$type"
3227case "$what" in
3228Locate) what='File';;
3229esac
3230
3231case "$exp_file" in
3232'')
3233 case "$d_portable" in
3234 "$define") ;;
3235 *) exp_file=true;;
3236 esac
3237 ;;
3238esac
3239
3240cd ..
3241while test "$type"; do
3242 redo=''
3243 rp="$orig_rp"
3244 dflt="$orig_dflt"
3245 case "$tilde" in
3246 true) rp="$rp (~name ok)";;
3247 esac
3248 . UU/myread
3249 if test -f UU/getfile.ok && \
3250 $contains "^$ans\$" UU/getfile.ok >/dev/null 2>&1
3251 then
3252 value="$ans"
3253 ansexp="$ans"
3254 break
3255 fi
3256 case "$ans" in
3257 none)
3258 value=''
3259 ansexp=''
3260 case "$none_ok" in
3261 true) type='';;
3262 esac
3263 ;;
3264 *)
3265 case "$tilde" in
3266 '') value="$ans"
3267 ansexp="$ans";;
3268 *)
3269 value=`UU/filexp $ans`
3270 case $? in
3271 0)
3272 if test "$ans" != "$value"; then
3273 echo "(That expands to $value on this system.)"
3274 fi
3275 ;;
3276 *) value="$ans";;
3277 esac
3278 ansexp="$value"
3279 case "$exp_file" in
3280 '') value="$ans";;
3281 esac
3282 ;;
3283 esac
3284 case "$fullpath" in
3285 true)
3286 case "$ansexp" in
3287 /*) value="$ansexp" ;;
3288 *)
3289 redo=true
3290 case "$already" in
3291 true)
3292 echo "I shall only accept a full path name, as in /bin/ls." >&4
3293 echo "Use a ! shell escape if you wish to check pathnames." >&4
3294 ;;
3295 *)
3296 echo "Please give a full path name, starting with slash." >&4
3297 case "$tilde" in
3298 true)
3299 echo "Note that using ~name is ok provided it expands well." >&4
3300 already=true
3301 ;;
3302 esac
3303 esac
3304 ;;
3305 esac
3306 ;;
3307 esac
3308 case "$redo" in
3309 '')
3310 case "$type" in
3311 File)
3312 for fp in $gfpth; do
3313 if test "X$fp" = X.; then
3314 pf="$ansexp"
3315 else
3316 pf="$fp/$ansexp"
3317 fi
3318 if test -f "$pf"; then
3319 type=''
3320 elif test -r "$pf" || (test -h "$pf") >/dev/null 2>&1
3321 then
3322 echo "($value is not a plain file, but that's ok.)"
3323 type=''
3324 fi
3325 if test X"$type" = X; then
3326 value="$pf"
3327 break
3328 fi
3329 done
3330 ;;
3331 Directory)
3332 for fp in $gfpth; do
3333 if test "X$fp" = X.; then
3334 pf="$ansexp"
3335 else
3336 pf="$fp/$ansexp"
3337 fi
3338 if test -d "$pf"; then
3339 type=''
3340 value="$pf"
3341 break
3342 fi
3343 done
3344 ;;
3345 Locate)
3346 if test -d "$ansexp"; then
3347 echo "(Looking for $loc_file in directory $value.)"
3348 value="$value/$loc_file"
3349 ansexp="$ansexp/$loc_file"
3350 fi
3351 if test -f "$ansexp"; then
3352 type=''
3353 fi
3354 case "$nopath_ok" in
3355 true) case "$value" in
3356 */*) ;;
3357 *) echo "Assuming $value will be in people's path."
3358 type=''
3359 ;;
3360 esac
3361 ;;
3362 esac
3363 ;;
3364 esac
3365
3366 case "$skip" in
3367 true) type='';
3368 esac
3369
3370 case "$type" in
3371 '') ;;
3372 *)
3373 if test "$fastread" = yes; then
3374 dflt=y
3375 else
3376 dflt=n
3377 fi
3378 rp="$what $value doesn't exist. Use that name anyway?"
3379 . UU/myread
3380 dflt=''
3381 case "$ans" in
3382 y*) type='';;
3383 *) echo " ";;
3384 esac
3385 ;;
3386 esac
3387 ;;
3388 esac
3389 ;;
3390 esac
3391done
3392cd UU
3393ans="$value"
3394rp="$orig_rp"
3395dflt="$orig_dflt"
3396rm -f getfile.ok
3397test "X$gfpthkeep" != Xy && gfpth=""
3398EOSC
3399
3400: What should the include directory be ?
3401echo " "
3402$echo $n "Hmm... $c"
3403dflt='/usr/include'
3404incpath=''
3405mips_type=''
3406if $test -f /bin/mips && /bin/mips; then
3407 echo "Looks like a MIPS system..."
3408 $cat >usr.c <<'EOCP'
3409#ifdef SYSTYPE_BSD43
3410/bsd43
3411#endif
3412EOCP
3413 if $cc -E usr.c > usr.out && $contains / usr.out >/dev/null 2>&1; then
3414 dflt='/bsd43/usr/include'
3415 incpath='/bsd43'
3416 mips_type='BSD 4.3'
3417 else
3418 mips_type='System V'
3419 fi
3420 $rm -f usr.c usr.out
3421 echo "and you're compiling with the $mips_type compiler and libraries."
3422 xxx_prompt=y
3423 echo "exit 0" >mips
3424else
3425 echo "Doesn't look like a MIPS system."
3426 xxx_prompt=n
3427 echo "exit 1" >mips
3428fi
3429chmod +x mips
3430$eunicefix mips
3431case "$usrinc" in
3432'') ;;
3433*) dflt="$usrinc";;
3434esac
3435case "$xxx_prompt" in
3436y) fn=d/
3437 echo " "
3438 rp='Where are the include files you want to use?'
3439 . ./getfile
3440 usrinc="$ans"
3441 ;;
3442*) usrinc="$dflt"
3443 ;;
3444esac
3445
3446: see how we invoke the C preprocessor
3447echo " "
3448echo "Now, how can we feed standard input to your C preprocessor..." >&4
3449cat <<'EOT' >testcpp.c
3450#define ABC abc
3451#define XYZ xyz
3452ABC.XYZ
3453EOT
3454cd ..
3455if test ! -f cppstdin; then
3456 if test "X$osname" = "Xaix" -a "X$gccversion" = X; then
3457 # AIX cc -E doesn't show the absolute headerfile
3458 # locations but we'll cheat by using the -M flag.
3459 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
3460 else
3461 echo 'cat >.$$.c; '"$cc"' -E ${1+"$@"} .$$.c; rm .$$.c' >cppstdin
3462 fi
3463else
3464 echo "Keeping your $hint cppstdin wrapper."
3465fi
3466chmod 755 cppstdin
3467wrapper=`pwd`/cppstdin
3468ok='false'
3469cd UU
3470
3471if $test "X$cppstdin" != "X" && \
3472 $cppstdin $cppminus <testcpp.c >testcpp.out 2>&1 && \
3473 $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1
3474then
3475 echo "You used to use $cppstdin $cppminus so we'll use that again."
3476 case "$cpprun" in
3477 '') echo "But let's see if we can live without a wrapper..." ;;
3478 *)
3479 if $cpprun $cpplast <testcpp.c >testcpp.out 2>&1 && \
3480 $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1
3481 then
3482 echo "(And we'll use $cpprun $cpplast to preprocess directly.)"
3483 ok='true'
3484 else
3485 echo "(However, $cpprun $cpplast does not work, let's see...)"
3486 fi
3487 ;;
3488 esac
3489else
3490 case "$cppstdin" in
3491 '') ;;
3492 *)
3493 echo "Good old $cppstdin $cppminus does not seem to be of any help..."
3494 ;;
3495 esac
3496fi
3497
3498if $ok; then
3499 : nothing
3500elif echo 'Maybe "'"$cc"' -E" will work...'; \
3501 $cc -E <testcpp.c >testcpp.out 2>&1; \
3502 $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3503 echo "Yup, it does."
3504 x_cpp="$cc -E"
3505 x_minus='';
3506elif echo 'Nope...maybe "'"$cc"' -E -" will work...'; \
3507 $cc -E - <testcpp.c >testcpp.out 2>&1; \
3508 $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3509 echo "Yup, it does."
3510 x_cpp="$cc -E"
3511 x_minus='-';
3512elif echo 'Nope...maybe "'"$cc"' -P" will work...'; \
3513 $cc -P <testcpp.c >testcpp.out 2>&1; \
3514 $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3515 echo "Yipee, that works!"
3516 x_cpp="$cc -P"
3517 x_minus='';
3518elif echo 'Nope...maybe "'"$cc"' -P -" will work...'; \
3519 $cc -P - <testcpp.c >testcpp.out 2>&1; \
3520 $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3521 echo "At long last!"
3522 x_cpp="$cc -P"
3523 x_minus='-';
3524elif echo 'No such luck, maybe "'$cpp'" will work...'; \
3525 $cpp <testcpp.c >testcpp.out 2>&1; \
3526 $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3527 echo "It works!"
3528 x_cpp="$cpp"
3529 x_minus='';
3530elif echo 'Nixed again...maybe "'$cpp' -" will work...'; \
3531 $cpp - <testcpp.c >testcpp.out 2>&1; \
3532 $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3533 echo "Hooray, it works! I was beginning to wonder."
3534 x_cpp="$cpp"
3535 x_minus='-';
3536elif echo 'Uh-uh. Time to get fancy. Trying a wrapper...'; \
3537 $wrapper <testcpp.c >testcpp.out 2>&1; \
3538 $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3539 x_cpp="$wrapper"
3540 x_minus=''
3541 echo "Eureka!"
3542else
3543 dflt=''
3544 rp="No dice. I can't find a C preprocessor. Name one:"
3545 . ./myread
3546 x_cpp="$ans"
3547 x_minus=''
3548 $x_cpp <testcpp.c >testcpp.out 2>&1
3549 if $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3550 echo "OK, that will do." >&4
3551 else
3552echo "Sorry, I can't get that to work. Go find one and rerun Configure." >&4
3553 exit 1
3554 fi
3555fi
3556
3557case "$ok" in
3558false)
3559 cppstdin="$x_cpp"
3560 cppminus="$x_minus"
3561 cpprun="$x_cpp"
3562 cpplast="$x_minus"
3563 set X $x_cpp
3564 shift
3565 case "$1" in
3566 "$cpp")
3567 echo "Perhaps can we force $cc -E using a wrapper..."
3568 if $wrapper <testcpp.c >testcpp.out 2>&1; \
3569 $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1
3570 then
3571 echo "Yup, we can."
3572 cppstdin="$wrapper"
3573 cppminus='';
3574 else
3575 echo "Nope, we'll have to live without it..."
3576 fi
3577 ;;
3578 esac
3579 case "$cpprun" in
3580 "$wrapper")
3581 cpprun=''
3582 cpplast=''
3583 ;;
3584 esac
3585 ;;
3586esac
3587
3588case "$cppstdin" in
3589"$wrapper"|'cppstdin') ;;
3590*) $rm -f $wrapper;;
3591esac
3592$rm -f testcpp.c testcpp.out
3593
3594: Set private lib path
3595case "$plibpth" in
3596'') if ./mips; then
3597 plibpth="$incpath/usr/lib /usr/local/lib /usr/ccs/lib"
3598 fi;;
3599esac
3600case "$libpth" in
3601' ') dlist='';;
3602'') dlist="$loclibpth $plibpth $glibpth";;
3603*) dlist="$libpth";;
3604esac
3605
3606: Now check and see which directories actually exist, avoiding duplicates
3607libpth=''
3608for xxx in $dlist
3609do
3610 if $test -d $xxx; then
3611 case " $libpth " in
3612 *" $xxx "*) ;;
3613 *) libpth="$libpth $xxx";;
3614 esac
3615 fi
3616done
3617$cat <<'EOM'
3618
3619Some systems have incompatible or broken versions of libraries. Among
3620the directories listed in the question below, please remove any you
3621know not to be holding relevant libraries, and add any that are needed.
3622Say "none" for none.
3623
3624EOM
3625case "$libpth" in
3626'') dflt='none';;
3627*)
3628 set X $libpth
3629 shift
3630 dflt=${1+"$@"}
3631 ;;
3632esac
3633rp="Directories to use for library searches?"
3634. ./myread
3635case "$ans" in
3636none) libpth=' ';;
3637*) libpth="$ans";;
3638esac
3639
3640: compute shared library extension
3641case "$so" in
3642'')
3643 if xxx=`./loc libc.sl X $libpth`; $test -f "$xxx"; then
3644 dflt='sl'
3645 else
3646 dflt='so'
3647 fi
3648 ;;
3649*) dflt="$so";;
3650esac
3651$cat <<EOM
3652
3653On some systems, shared libraries may be available. Answer 'none' if
3654you want to suppress searching of shared libraries for the remainder
3655of this configuration.
3656
3657EOM
3658rp='What is the file extension used for shared libraries?'
3659. ./myread
3660so="$ans"
3661
3662: Define several unixisms.
3663: Hints files or command line option can be used to override them.
3664: The convoluted testing is in case hints files set either the old
3665: or the new name.
3666case "$_exe" in
3667'') case "$exe_ext" in
3668 '') ;;
3669 *) _exe="$exe_ext" ;;
3670 esac
3671 ;;
3672esac
3673case "$_a" in
3674'') case "$lib_ext" in
3675 '') _a='.a';;
3676 *) _a="$lib_ext" ;;
3677 esac
3678 ;;
3679esac
3680case "$_o" in
3681'') case "$obj_ext" in
3682 '') _o='.o';;
3683 *) _o="$obj_ext";;
3684 esac
3685 ;;
3686esac
3687case "$p_" in
3688'') case "$path_sep" in
3689 '') p_=':';;
3690 *) p_="$path_sep";;
3691 esac
3692 ;;
3693esac
3694exe_ext=$_exe
3695lib_ext=$_a
3696obj_ext=$_o
3697path_sep=$p_
3698
3699: Which makefile gets called first. This is used by make depend.
3700case "$firstmakefile" in
3701'') firstmakefile='makefile';;
3702esac
3703
3704cat <<EOM
3705
3706Perl can be built to use the SOCKS proxy protocol library. To do so,
3707Configure must be run with -Dusesocks.
3708
3709Normally you do not need this and you should answer no.
3710
3711EOM
3712case "$usesocks" in
3713$define|true|[yY]*) dflt='y';;
3714*) dflt='n';;
3715esac
3716rp='Build Perl for SOCKS?'
3717. ./myread
3718case "$ans" in
3719y|Y) val="$define" ;;
3720*) val="$undef" ;;
3721esac
3722set usesocks
3723eval $setvar
3724
3725: Looking for optional libraries
3726echo " "
3727echo "Checking for optional libraries..." >&4
3728case "$libs" in
3729' '|'') dflt='';;
3730*) dflt="$libs";;
3731esac
3732case "$libswanted" in
3733'') libswanted='c_s';;
3734esac
3735case "$usesocks" in
3736$define)
3737 libswanted="$libswanted socks5 socks5_sh"
3738 ;;
3739esac
3740for thislib in $libswanted; do
3741
3742 if xxx=`./loc lib$thislib.$so.[0-9]'*' X $libpth`;
3743 $test -f "$xxx" -a "X$ignore_versioned_solibs" = "X"; then
3744 echo "Found -l$thislib (shared)."
3745 case " $dflt " in
3746 *"-l$thislib "*);;
3747 *) dflt="$dflt -l$thislib";;
3748 esac
3749 elif xxx=`./loc lib$thislib.$so X $libpth` ; $test -f "$xxx"; then
3750 echo "Found -l$thislib (shared)."
3751 case " $dflt " in
3752 *"-l$thislib "*);;
3753 *) dflt="$dflt -l$thislib";;
3754 esac
3755 elif xxx=`./loc lib$thislib$_a X $libpth`; $test -f "$xxx"; then
3756 echo "Found -l$thislib."
3757 case " $dflt " in
3758 *"-l$thislib "*);;
3759 *) dflt="$dflt -l$thislib";;
3760 esac
3761 elif xxx=`./loc $thislib$_a X $libpth`; $test -f "$xxx"; then
3762 echo "Found -l$thislib."
3763 case " $dflt " in
3764 *"-l$thislib "*);;
3765 *) dflt="$dflt -l$thislib";;
3766 esac
3767 elif xxx=`./loc lib${thislib}_s$_a X $libpth`; $test -f "$xxx"; then
3768 echo "Found -l${thislib}_s."
3769 case " $dflt " in
3770 *"-l$thislib "*);;
3771 *) dflt="$dflt -l${thislib}_s";;
3772 esac
3773 elif xxx=`./loc Slib$thislib$_a X $xlibpth`; $test -f "$xxx"; then
3774 echo "Found -l$thislib."
3775 case " $dflt " in
3776 *"-l$thislib "*);;
3777 *) dflt="$dflt -l$thislib";;
3778 esac
3779 else
3780 echo "No -l$thislib."
3781 fi
3782done
3783set X $dflt
3784shift
3785dflt="$*"
3786case "$libs" in
3787'') dflt="$dflt";;
3788*) dflt="$libs";;
3789esac
3790case "$dflt" in
3791' '|'') dflt='none';;
3792esac
3793
3794$cat <<EOM
3795
3796In order to compile $package on your machine, a number of libraries
3797are usually needed. Include any other special libraries here as well.
3798Say "none" for none. The default list is almost always right.
3799EOM
3800
3801echo " "
3802rp="What libraries to use?"
3803. ./myread
3804case "$ans" in
3805none) libs=' ';;
3806*) libs="$ans";;
3807esac
3808
3809: determine optimization, if desired, or use for debug flag also
3810case "$optimize" in
3811' '|$undef) dflt='none';;
3812'') dflt='-O';;
3813*) dflt="$optimize";;
3814esac
3815$cat <<EOH
3816
3817By default, $package compiles with the -O flag to use the optimizer.
3818Alternately, you might want to use the symbolic debugger, which uses
3819the -g flag (on traditional Unix systems). Either flag can be
3820specified here. To use neither flag, specify the word "none".
3821
3822EOH
3823rp="What optimizer/debugger flag should be used?"
3824. ./myread
3825optimize="$ans"
3826case "$optimize" in
3827'none') optimize=" ";;
3828esac
3829
3830dflt=''
3831: We will not override a previous value, but we might want to
3832: augment a hint file
3833case "$hint" in
3834default|recommended)
3835 case "$gccversion" in
3836 1*) dflt='-fpcc-struct-return' ;;
3837 esac
3838 case "$optimize" in
3839 *-g*) dflt="$dflt -DDEBUGGING";;
3840 esac
3841 case "$gccversion" in
3842 2*) if test -d /etc/conf/kconfig.d &&
3843 $contains _POSIX_VERSION $usrinc/sys/unistd.h >/dev/null 2>&1
3844 then
3845 dflt="$dflt -posix"
3846 fi
3847 ;;
3848 esac
3849 case "$gccversion" in
3850 1*) ;;
3851 2.[0-8]*) ;;
3852 ?*) echo " "
3853 echo "Checking if your compiler accepts -fno-strict-aliasing" 2>&1
3854 echo 'int main(void) { return 0; }' > gcctest.c
3855 if $cc -O2 -fno-strict-aliasing -o gcctest gcctest.c; then
3856 echo "Yes, it does." 2>&1
3857 case "$ccflags" in
3858 *strict-aliasing*)
3859 echo "Leaving current flags $ccflags alone." 2>&1
3860 ;;
3861 *) dflt="$dflt -fno-strict-aliasing" ;;
3862 esac
3863 else
3864 echo "Nope, it doesn't, but that's ok." 2>&1
3865 fi
3866 ;;
3867 esac
3868 ;;
3869esac
3870
3871case "$mips_type" in
3872*BSD*|'') inclwanted="$locincpth $usrinc";;
3873*) inclwanted="$locincpth $inclwanted $usrinc/bsd";;
3874esac
3875for thisincl in $inclwanted; do
3876 if $test -d $thisincl; then
3877 if $test x$thisincl != x$usrinc; then
3878 case "$dflt" in
3879 *$thisincl*);;
3880 *) dflt="$dflt -I$thisincl";;
3881 esac
3882 fi
3883 fi
3884done
3885
3886inctest='if $contains $2 $usrinc/$1 >/dev/null 2>&1; then
3887 xxx=true;
3888elif $contains $2 $usrinc/sys/$1 >/dev/null 2>&1; then
3889 xxx=true;
3890else
3891 xxx=false;
3892fi;
3893if $xxx; then
3894 case "$dflt" in
3895 *$2*);;
3896 *) dflt="$dflt -D$2";;
3897 esac;
3898fi'
3899
3900set signal.h LANGUAGE_C; eval $inctest
3901
3902case "$usesocks" in
3903$define)
3904 ccflags="$ccflags -DSOCKS"
3905 ;;
3906esac
3907
3908case "$hint" in
3909default|recommended) dflt="$ccflags $dflt" ;;
3910*) dflt="$ccflags";;
3911esac
3912
3913case "$dflt" in
3914''|' ') dflt=none;;
3915esac
3916$cat <<EOH
3917
3918Your C compiler may want other flags. For this question you should include
3919-I/whatever and -DWHATEVER flags and any other flags used by the C compiler,
3920but you should NOT include libraries or ld flags like -lwhatever. If you
3921want $package to honor its debug switch, you should include -DDEBUGGING here.
3922Your C compiler might also need additional flags, such as -D_POSIX_SOURCE.
3923
3924To use no flags, specify the word "none".
3925
3926EOH
3927set X $dflt
3928shift
3929dflt=${1+"$@"}
3930rp="Any additional cc flags?"
3931. ./myread
3932case "$ans" in
3933none) ccflags='';;
3934*) ccflags="$ans";;
3935esac
3936
3937: the following weeds options from ccflags that are of no interest to cpp
3938cppflags="$ccflags"
3939case "$gccversion" in
39401*) cppflags="$cppflags -D__GNUC__"
3941esac
3942case "$mips_type" in
3943'');;
3944*BSD*) cppflags="$cppflags -DSYSTYPE_BSD43";;
3945esac
3946case "$cppflags" in
3947'');;
3948*)
3949 echo " "
3950 echo "Let me guess what the preprocessor flags are..." >&4
3951 set X $cppflags
3952 shift
3953 cppflags=''
3954 $cat >cpp.c <<'EOM'
3955#define BLURFL foo
3956
3957BLURFL xx LFRULB
3958EOM
3959 previous=''
3960 for flag in $*
3961 do
3962 case "$flag" in
3963 -*) ftry="$flag";;
3964 *) ftry="$previous $flag";;
3965 esac
3966 if $cppstdin -DLFRULB=bar $cppflags $ftry $cppminus <cpp.c \
3967 >cpp1.out 2>/dev/null && \
3968 $cpprun -DLFRULB=bar $cppflags $ftry $cpplast <cpp.c \
3969 >cpp2.out 2>/dev/null && \
3970 $contains 'foo.*xx.*bar' cpp1.out >/dev/null 2>&1 && \
3971 $contains 'foo.*xx.*bar' cpp2.out >/dev/null 2>&1
3972 then
3973 cppflags="$cppflags $ftry"
3974 previous=''
3975 else
3976 previous="$flag"
3977 fi
3978 done
3979 set X $cppflags
3980 shift
3981 cppflags=${1+"$@"}
3982 case "$cppflags" in
3983 *-*) echo "They appear to be: $cppflags";;
3984 esac
3985 $rm -f cpp.c cpp?.out
3986 ;;
3987esac
3988
3989: flags used in final linking phase
3990case "$ldflags" in
3991'') if ./venix; then
3992 dflt='-i -z'
3993 else
3994 dflt=''
3995 fi
3996 case "$ccflags" in
3997 *-posix*) dflt="$dflt -posix" ;;
3998 esac
3999 ;;
4000*) dflt="$ldflags";;
4001esac
4002
4003: Try to guess additional flags to pick up local libraries.
4004for thislibdir in $libpth; do
4005 case " $loclibpth " in
4006 *" $thislibdir "*)
4007 case "$dflt " in
4008 *"-L$thislibdir "*) ;;
4009 *) dflt="$dflt -L$thislibdir" ;;
4010 esac
4011 ;;
4012 esac
4013done
4014
4015case "$dflt" in
4016'') dflt='none' ;;
4017esac
4018
4019$cat <<EOH
4020
4021Your C linker may need flags. For this question you should
4022include -L/whatever and any other flags used by the C linker, but you
4023should NOT include libraries like -lwhatever.
4024
4025Make sure you include the appropriate -L/path flags if your C linker
4026does not normally search all of the directories you specified above,
4027namely
4028 $libpth
4029To use no flags, specify the word "none".
4030
4031EOH
4032
4033rp="Any additional ld flags (NOT including libraries)?"
4034. ./myread
4035case "$ans" in
4036none) ldflags='';;
4037*) ldflags="$ans";;
4038esac
4039rmlist="$rmlist pdp11"
4040
4041: coherency check
4042echo " "
4043echo "Checking your choice of C compiler and flags for coherency..." >&4
4044$cat > try.c <<'EOF'
4045#include <stdio.h>
4046int main() { printf("Ok\n"); exit(0); }
4047EOF
4048set X $cc $optimize $ccflags -o try $ldflags try.c $libs
4049shift
4050$cat >try.msg <<'EOM'
4051I've tried to compile and run the following simple program:
4052
4053EOM
4054$cat try.c >> try.msg
4055
4056$cat >> try.msg <<EOM
4057
4058I used the command:
4059
4060 $*
4061 ./try
4062
4063and I got the following output:
4064
4065EOM
4066dflt=y
4067if sh -c "$cc $optimize $ccflags -o try $ldflags try.c $libs" >>try.msg 2>&1; then
4068 if sh -c './try' >>try.msg 2>&1; then
4069 xxx=`./try`
4070 case "$xxx" in
4071 "Ok") dflt=n ;;
4072 *) echo 'The program compiled OK, but produced no output.' >> try.msg
4073 case " $libs " in
4074 *" -lsfio "*)
4075 cat >> try.msg <<'EOQS'
4076If $libs contains -lsfio, and sfio is mis-configured, then it
4077sometimes (apparently) runs and exits with a 0 status, but with no
4078output! It may have to do with sfio's use of _exit vs. exit.
4079
4080EOQS
4081 rp="You have a big problem. Shall I abort Configure"
4082 dflt=y
4083 ;;
4084 esac
4085 ;;
4086 esac
4087 else
4088 echo "The program compiled OK, but exited with status $?." >>try.msg
4089 rp="You have a problem. Shall I abort Configure"
4090 dflt=y
4091 fi
4092else
4093 echo "I can't compile the test program." >>try.msg
4094 rp="You have a BIG problem. Shall I abort Configure"
4095 dflt=y
4096fi
4097case "$dflt" in
4098y)
4099 $cat try.msg >&4
4100 case "$knowitall" in
4101 '')
4102 echo "(The supplied flags or libraries might be incorrect.)"
4103 ;;
4104 *) dflt=n;;
4105 esac
4106 echo " "
4107 . ./myread
4108 case "$ans" in
4109 n*|N*) ;;
4110 *) echo "Ok. Stopping Configure." >&4
4111 exit 1
4112 ;;
4113 esac
4114 ;;
4115n) echo "OK, that should do.";;
4116esac
4117$rm -f try try.* core
4118
4119: define an is-a-typedef? function
4120typedef='type=$1; var=$2; def=$3; shift; shift; shift; inclist=$@;
4121case "$inclist" in
4122"") inclist="sys/types.h";;
4123esac;
4124eval "varval=\$$var";
4125case "$varval" in
4126"")
4127 $rm -f temp.c;
4128 for inc in $inclist; do
4129 echo "#include <$inc>" >>temp.c;
4130 done;
4131 echo "#ifdef $type" >> temp.c;
4132 echo "printf(\"We have $type\");" >> temp.c;
4133 echo "#endif" >> temp.c;
4134 $cppstdin $cppflags $cppminus < temp.c >temp.E 2>/dev/null;
4135 if $contains $type temp.E >/dev/null 2>&1; then
4136 eval "$var=\$type";
4137 else
4138 eval "$var=\$def";
4139 fi;
4140 $rm -f temp.?;;
4141*) eval "$var=\$varval";;
4142esac'
4143
4144: define an is-a-typedef? function that prompts if the type is not available.
4145typedef_ask='type=$1; var=$2; def=$3; shift; shift; shift; inclist=$@;
4146case "$inclist" in
4147"") inclist="sys/types.h";;
4148esac;
4149eval "varval=\$$var";
4150case "$varval" in
4151"")
4152 $rm -f temp.c;
4153 for inc in $inclist; do
4154 echo "#include <$inc>" >>temp.c;
4155 done;
4156 echo "#ifdef $type" >> temp.c;
4157 echo "printf(\"We have $type\");" >> temp.c;
4158 echo "#endif" >> temp.c;
4159 $cppstdin $cppflags $cppminus < temp.c >temp.E 2>/dev/null;
4160 echo " " ;
4161 echo "$rp" | $sed -e "s/What is/Looking for/" -e "s/?/./";
4162 if $contains $type temp.E >/dev/null 2>&1; then
4163 echo "$type found." >&4;
4164 eval "$var=\$type";
4165 else
4166 echo "$type NOT found." >&4;
4167 dflt="$def";
4168 . ./myread ;
4169 eval "$var=\$ans";
4170 fi;
4171 $rm -f temp.?;;
4172*) eval "$var=\$varval";;
4173esac'
4174
4175: define a shorthand compile call
4176compile='
4177mc_file=$1;
4178shift;
4179$cc $optimize $ccflags $ldflags -o ${mc_file} $* ${mc_file}.c $libs > /dev/null 2>&1;'
4180: define a shorthand compile call for compilations that should be ok.
4181compile_ok='
4182mc_file=$1;
4183shift;
4184$cc $optimize $ccflags $ldflags -o ${mc_file} $* ${mc_file}.c $libs;'
4185
4186: check for lengths of integral types
4187echo " "
4188case "$intsize" in
4189'')
4190 echo "Checking to see how big your integers are..." >&4
4191 $cat >intsize.c <<'EOCP'
4192#include <stdio.h>
4193int main()
4194{
4195 printf("intsize=%d;\n", (int)sizeof(int));
4196 printf("longsize=%d;\n", (int)sizeof(long));
4197 printf("shortsize=%d;\n", (int)sizeof(short));
4198 exit(0);
4199}
4200EOCP
4201 set intsize
4202 if eval $compile_ok && ./intsize > /dev/null; then
4203 eval `./intsize`
4204 echo "Your integers are $intsize bytes long."
4205 echo "Your long integers are $longsize bytes long."
4206 echo "Your short integers are $shortsize bytes long."
4207 else
4208 $cat >&4 <<EOM
4209!
4210Help! I can't compile and run the intsize test program: please enlighten me!
4211(This is probably a misconfiguration in your system or libraries, and
4212you really ought to fix it. Still, I'll try anyway.)
4213!
4214EOM
4215 dflt=4
4216 rp="What is the size of an integer (in bytes)?"
4217 . ./myread
4218 intsize="$ans"
4219 dflt=$intsize
4220 rp="What is the size of a long integer (in bytes)?"
4221 . ./myread
4222 longsize="$ans"
4223 dflt=2
4224 rp="What is the size of a short integer (in bytes)?"
4225 . ./myread
4226 shortsize="$ans"
4227 fi
4228 ;;
4229esac
4230$rm -f intsize intsize.*
4231
4232: see what type lseek is declared as in the kernel
4233rp="What is the type used for lseek's offset on this system?"
4234set off_t lseektype long stdio.h sys/types.h
4235eval $typedef_ask
4236
4237echo " "
4238$echo $n "Checking to see how big your file offsets are...$c" >&4
4239$cat >try.c <<EOCP
4240#include <sys/types.h>
4241#include <stdio.h>
4242int main()
4243{
4244 printf("%d\n", (int)sizeof($lseektype));
4245 return(0);
4246}
4247EOCP
4248set try
4249if eval $compile_ok; then
4250 lseeksize=`./try`
4251 $echo " $lseeksize bytes." >&4
4252else
4253 dflt=$longsize
4254 echo " "
4255 echo "(I can't seem to compile the test program. Guessing...)"
4256 rp="What is the size of your file offsets (in bytes)?"
4257 . ./myread
4258 lseeksize="$ans"
4259fi
4260$rm -f try.c try
4261
4262: see what type file positions are declared as in the library
4263rp="What is the type for file position used by fsetpos()?"
4264set fpos_t fpostype long stdio.h sys/types.h
4265eval $typedef_ask
4266
4267echo " "
4268case "$fpostype" in
4269*_t) zzz="$fpostype" ;;
4270*) zzz="fpos_t" ;;
4271esac
4272$echo $n "Checking the size of $zzz...$c" >&4
4273cat > try.c <<EOCP
4274#include <sys/types.h>
4275#include <stdio.h>
4276int main() {
4277 printf("%d\n", (int)sizeof($fpostype));
4278 exit(0);
4279}
4280EOCP
4281set try
4282if eval $compile_ok; then
4283 yyy=`./try`
4284 case "$yyy" in
4285 '') fpossize=4
4286 echo " "
4287 echo "(I can't execute the test program--guessing $fpossize.)" >&4
4288 ;;
4289 *) fpossize=$yyy
4290 echo " $fpossize bytes."
4291 ;;
4292 esac
4293else
4294 dflt="$longsize"
4295 echo " "
4296 echo "(I can't compile the test program. Guessing...)" >&4
4297 rp="What is the size of your file positions (in bytes)?"
4298 . ./myread
4299 fpossize="$ans"
4300fi
4301
4302
4303
4304case "$lseeksize:$fpossize" in
43058:8) cat <<EOM
4306
4307You can have files larger than 2 gigabytes.
4308EOM
4309 val="$define" ;;
4310*) cat <<EOM
4311
4312Perl can be built to understand large files (files larger than 2 gigabytes)
4313on some systems. To do so, Configure must be run with -Duselargefiles.
4314
4315If this doesn't make any sense to you, just accept the default 'y'.
4316EOM
4317 case "$uselargefiles" in
4318 "$undef"|false|[nN]*) dflt='n' ;;
4319 *) dflt='y' ;;
4320 esac
4321 rp='Try to understand large files, if available?'
4322 . ./myread
4323 case "$ans" in
4324 y|Y) val="$define" ;;
4325 *) val="$undef" ;;
4326 esac
4327 ;;
4328esac
4329set uselargefiles
4330eval $setvar
4331case "$uselargefiles" in
4332"$define")
4333: Look for a hint-file generated 'call-back-unit'. If the
4334: user has specified that a large files perl is to be built,
4335: we may need to set or change some other defaults.
4336 if $test -f uselfs.cbu; then
4337 echo "Your platform has some specific hints for large file builds, using them..."
4338 . ./uselfs.cbu
4339 echo " "
4340 $echo $n "Rechecking to see how big your file offsets are...$c" >&4
4341 $cat >try.c <<EOCP
4342#include <sys/types.h>
4343#include <stdio.h>
4344int main()
4345{
4346 printf("%d\n", (int)sizeof($lseektype));
4347 return(0);
4348}
4349EOCP
4350 set try
4351 if eval $compile_ok; then
4352 lseeksize=`./try`
4353 $echo " $lseeksize bytes." >&4
4354 else
4355 dflt="$lseeksize"
4356 echo " "
4357 echo "(I can't seem to compile the test program. Guessing...)"
4358 rp="What is the size of your file offsets (in bytes)?"
4359 . ./myread
4360 lseeksize="$ans"
4361 fi
4362 case "$fpostype" in
4363 *_t) zzz="$fpostype" ;;
4364 *) zzz="fpos_t" ;;
4365 esac
4366 $echo $n "Rechecking the size of $zzz...$c" >&4
4367 $cat > try.c <<EOCP
4368#include <sys/types.h>
4369#include <stdio.h>
4370int main() {
4371 printf("%d\n", (int)sizeof($fpostype));
4372 exit(0);
4373}
4374EOCP
4375 set try
4376 if eval $compile_ok; then
4377 yyy=`./try`
4378 dflt="$lseeksize"
4379 case "$yyy" in
4380 '') echo " "
4381 echo "(I can't execute the test program--guessing $fpossize.)" >&4
4382 ;;
4383 *) fpossize=$yyy
4384 echo " $fpossize bytes."
4385 ;;
4386 esac
4387 else
4388 dflt="$fpossize"
4389 echo " "
4390 echo "(I can't compile the test program. Guessing...)" >&4
4391 rp="What is the size of your file positions (in bytes)?"
4392 . ./myread
4393 fpossize="$ans"
4394 fi
4395 $rm -f try.c try
4396 fi
4397 ;;
4398esac
4399
4400
4401case "$usemorebits" in
4402"$define"|true|[yY]*)
4403 use64bits="$define"
4404 uselongdouble="$define"
4405 usemorebits="$define"
4406 ;;
4407*) usemorebits="$undef"
4408 ;;
4409esac
4410
4411
4412case "$intsize:$longsize" in
44138:*|*:8) cat <<EOM
4414
4415You have natively 64-bit integers.
4416EOM
4417 val="$define" ;;
4418*) cat <<EOM
4419
4420Perl can be built to take advantage of 64-bit integer types
4421on some systems. To do so, Configure must be run with -Duse64bits.
4422
4423If this doesn't make any sense to you, just accept the default.
4424EOM
4425 case "$use64bits" in
4426 $define|true|[yY]*) dflt='y';;
4427 *) dflt='n';;
4428 esac
4429 rp='Try to use 64-bit integers, if available?'
4430 . ./myread
4431 case "$ans" in
4432 y|Y) val="$define" ;;
4433 *) val="$undef" ;;
4434 esac
4435 ;;
4436esac
4437set use64bits
4438eval $setvar
4439
4440case "$archname64" in
4441'') archname64='' ;; # not a typo
4442esac
4443
4444case "$use64bits" in
4445"$define"|true|[yY]*)
4446: Look for a hint-file generated 'call-back-unit'. If the
4447: user has specified that a 64-bit perl is to be built,
4448: we may need to set or change some other defaults.
4449 if $test -f use64bits.cbu; then
4450 echo "Your platform has some specific hints for 64-bit builds, using them..."
4451 . ./use64bits.cbu
4452 else
4453 $cat <<EOM
4454(Your platform doesn't have any specific hints for 64-bit builds.)
4455EOM
4456 case "$intsize:$longsize" in
44578:*|*:8) cat <<EOM
4458(This is probably okay, as your system is a natively 64-bit system.)
4459EOM
4460 ;;
4461 esac
4462 case "$gccversion" in
4463 '') ;;
4464 *) case "$ccflags" in
4465 *-DUSE_LONG_LONG*) ;;
4466 *) $cat <<EOM
4467But since you seem to be using gcc, I will now add -DUSE_LONG_LONG
4468to the compilation flags.
4469EOM
4470 ccflags="$ccflags -DUSE_LONG_LONG"
4471 ;;
4472 esac
4473 ;;
4474 esac
4475 fi
4476 ;;
4477esac
4478
4479: determine the architecture name
4480echo " "
4481if xxx=`./loc arch blurfl $pth`; $test -f "$xxx"; then
4482 tarch=`arch`"-$osname"
4483elif xxx=`./loc uname blurfl $pth`; $test -f "$xxx" ; then
4484 if uname -m > tmparch 2>&1 ; then
4485 tarch=`$sed -e 's/ *$//' -e 's/ /_/g' \
4486 -e 's/$/'"-$osname/" tmparch`
4487 else
4488 tarch="$osname"
4489 fi
4490 $rm -f tmparch
4491else
4492 tarch="$osname"
4493fi
4494case "$myarchname" in
4495''|"$tarch") ;;
4496*)
4497 echo "(Your architecture name used to be $myarchname.)"
4498 archname=''
4499 ;;
4500esac
4501myarchname="$tarch"
4502case "$archname" in
4503'') dflt="$tarch";;
4504*) dflt="$archname";;
4505esac
4506rp='What is your architecture name'
4507. ./myread
4508archname="$ans"
4509case "$usethreads" in
4510$define)
4511 echo "Threads selected." >&4
4512 case "$archname" in
4513 *-thread*) echo "...and architecture name already has -thread." >&4
4514 ;;
4515 *) archname="$archname-thread"
4516 echo "...setting architecture name to $archname." >&4
4517 ;;
4518 esac
4519 ;;
4520esac
4521case "$usemultiplicity" in
4522$define)
4523 echo "Multiplicity selected." >&4
4524 case "$archname" in
4525 *-multi*) echo "...and architecture name already has -multi." >&4
4526 ;;
4527 *) archname="$archname-multi"
4528 echo "...setting architecture name to $archname." >&4
4529 ;;
4530 esac
4531 ;;
4532esac
4533case "$use64bits" in
4534$define)
4535 case "$archname64" in
4536 '')
4537 ;;
4538 *)
4539 case "$archname" in
4540 *-$archname64*) echo "...and architecture name already has $archname64." >&4
4541 ;;
4542 *) archname="$archname-$archname64"
4543 echo "...setting architecture name to $archname." >&4
4544 ;;
4545 esac
4546 ;;
4547 esac
4548esac
4549
4550: determine root of directory hierarchy where package will be installed.
4551case "$prefix" in
4552'')
4553 dflt=`./loc . /usr/local /usr/local /local /opt /usr`
4554 ;;
4555*)
4556 dflt="$prefix"
4557 ;;
4558esac
4559$cat <<EOM
4560
4561By default, $package will be installed in $dflt/bin, manual pages
4562under $dflt/man, etc..., i.e. with $dflt as prefix for all
4563installation directories. Typically this is something like /usr/local.
4564If you wish to have binaries under /usr/bin but other parts of the
4565installation under /usr/local, that's ok: you will be prompted
4566separately for each of the installation directories, the prefix being
4567only used to set the defaults.
4568
4569EOM
4570fn=d~
4571rp='Installation prefix to use?'
4572. ./getfile
4573oldprefix=''
4574case "$prefix" in
4575'') ;;
4576*)
4577 case "$ans" in
4578 "$prefix") ;;
4579 *) oldprefix="$prefix";;
4580 esac
4581 ;;
4582esac
4583prefix="$ans"
4584prefixexp="$ansexp"
4585
4586: is AFS running?
4587echo " "
4588case "$afs" in
4589$define|true) afs=true ;;
4590$undef|false) afs=false ;;
4591*) if test -d /afs; then
4592 afs=true
4593 else
4594 afs=false
4595 fi
4596 ;;
4597esac
4598if $afs; then
4599 echo "AFS may be running... I'll be extra cautious then..." >&4
4600else
4601 echo "AFS does not seem to be running..." >&4
4602fi
4603
4604: determine installation prefix for where package is to be installed.
4605if $afs; then
4606$cat <<EOM
4607
4608Since you are running AFS, I need to distinguish the directory in which
4609files will reside from the directory in which they are installed (and from
4610which they are presumably copied to the former directory by occult means).
4611
4612EOM
4613 case "$installprefix" in
4614 '') dflt=`echo $prefix | sed 's#^/afs/#/afs/.#'`;;
4615 *) dflt="$installprefix";;
4616 esac
4617else
4618$cat <<EOM
4619
4620In some special cases, particularly when building $package for distribution,
4621it is convenient to distinguish between the directory in which files should
4622be installed from the directory ($prefix) in which they
4623will eventually reside. For most users, these two directories are the same.
4624
4625EOM
4626 case "$installprefix" in
4627 '') dflt=$prefix ;;
4628 *) dflt=$installprefix;;
4629 esac
4630fi
4631fn=d~
4632rp='What installation prefix should I use for installing files?'
4633. ./getfile
4634installprefix="$ans"
4635installprefixexp="$ansexp"
4636
4637: set the prefixit variable, to compute a suitable default value
4638prefixit='case "$3" in
4639""|none)
4640 case "$oldprefix" in
4641 "") eval "$1=\"\$$2\"";;
4642 *)
4643 case "$3" in
4644 "") eval "$1=";;
4645 none)
4646 eval "tp=\"\$$2\"";
4647 case "$tp" in
4648 ""|" ") eval "$1=\"\$$2\"";;
4649 *) eval "$1=";;
4650 esac;;
4651 esac;;
4652 esac;;
4653*)
4654 eval "tp=\"$oldprefix-\$$2-\""; eval "tp=\"$tp\"";
4655 case "$tp" in
4656 --|/*--|\~*--) eval "$1=\"$prefix/$3\"";;
4657 /*-$oldprefix/*|\~*-$oldprefix/*)
4658 eval "$1=\`echo \$$2 | sed \"s,^$oldprefix,$prefix,\"\`";;
4659 *) eval "$1=\"\$$2\"";;
4660 esac;;
4661esac'
4662
4663: set the base revision
4664baserev=5.0
4665
4666
4667: get the patchlevel
4668echo " "
4669echo "Getting the current patchlevel..." >&4
4670if $test -r $rsrc/patchlevel.h;then
4671 patchlevel=`awk '/define[ ]+PERL_VERSION/ {print $3}' $rsrc/patchlevel.h`
4672 subversion=`awk '/define[ ]+PERL_SUBVERSION/ {print $3}' $rsrc/patchlevel.h`
4673 api_revision=`awk '/define[ ]+PERL_API_REVISION/ {print $3}' $rsrc/patchlevel.h`
4674 api_version=`awk '/define[ ]+PERL_API_VERSION/ {print $3}' $rsrc/patchlevel.h`
4675 api_subversion=`awk '/define[ ]+PERL_API_SUBVERSION/ {print $3}' $rsrc/patchlevel.h`
4676else
4677 patchlevel=0
4678 subversion=0
4679 api_revision=0
4680 api_version=0
4681 api_subversion=0
4682fi
4683$echo $n "(You have $package" $c
4684case "$package" in
4685"*$baserev") ;;
4686*) $echo $n " $baserev" $c ;;
4687esac
4688$echo $n " patchlevel $patchlevel" $c
4689test 0 -eq "$subversion" || $echo $n " subversion $subversion" $c
4690echo ".)"
4691case "$osname" in
4692dos|vms)
4693 : XXX Should be a Configure test for double-dots in filenames.
4694 version=`echo $baserev $patchlevel $subversion | \
4695 $awk '{ printf "%d_%d_%d\n", $1, $2, $3 }'`
4696 api_versionstring=`echo $api_revision $api_version $api_subversion | \
4697 $awk '{ printf "%d_%d_%d\n", $1, $2, $3 }'`
4698 ;;
4699*)
4700 version=`echo $baserev $patchlevel $subversion | \
4701 $awk '{ printf "%d.%d.%d\n", $1, $2, $3 }'`
4702 api_versionstring=`echo $api_revision $api_version $api_subversion | \
4703 $awk '{ printf "%d.%d.%d\n", $1, $2, $3 }'`
4704 ;;
4705esac
4706: Special case the 5.005_xx maintenance series, which used 5.005
4707: without any subversion label as a subdirectory in $sitelib
4708if test "${api_revision}${api_version}${api_subversion}" = "550"; then
4709 api_versionstring='5.005'
4710fi
4711
4712: determine installation style
4713: For now, try to deduce it from prefix unless it is already set.
4714: Reproduce behavior of 5.005 and earlier, maybe drop that in 5.7.
4715case "$installstyle" in
4716'') case "$prefix" in
4717 *perl*) dflt='lib';;
4718 *) dflt='lib/perl5' ;;
4719 esac
4720 ;;
4721*) dflt='lib/perl5' ;;
4722esac
4723: Probably not worth prompting for this since we prompt for all
4724: the directories individually, and the prompt would be too long and
4725: confusing anyway.
4726installstyle=$dflt
4727
4728: determine where private library files go
4729: Usual default is /usr/local/lib/perl5/$version.
4730: Also allow things like /opt/perl/lib/$version, since
4731: /opt/perl/lib/perl5... would be redundant.
4732: The default "style" setting is made in installstyle.U
4733case "$installstyle" in
4734*lib/perl5*) set dflt privlib lib/$package/$version ;;
4735*) set dflt privlib lib/$version ;;
4736esac
4737eval $prefixit
4738$cat <<EOM
4739
4740There are some auxiliary files for $package that need to be put into a
4741private library directory that is accessible by everyone.
4742
4743EOM
4744fn=d~+
4745rp='Pathname where the private library files will reside?'
4746. ./getfile
4747privlib="$ans"
4748privlibexp="$ansexp"
4749: Change installation prefix, if necessary.
4750if $test X"$prefix" != X"$installprefix"; then
4751 installprivlib=`echo $privlibexp | sed "s#^$prefix#$installprefix#"`
4752else
4753 installprivlib="$privlibexp"
4754fi
4755
4756: set the prefixup variable, to restore leading tilda escape
4757prefixup='case "$prefixexp" in
4758"$prefix") ;;
4759*) eval "$1=\`echo \$$1 | sed \"s,^$prefixexp,$prefix,\"\`";;
4760esac'
4761
4762: determine where public architecture dependent libraries go
4763set archlib archlib
4764eval $prefixit
4765: privlib default is /usr/local/lib/$package/$version
4766: archlib default is /usr/local/lib/$package/$version/$archname
4767: privlib may have an optional trailing /share.
4768tdflt=`echo $privlib | $sed 's,/share$,,'`
4769tdflt=$tdflt/$archname
4770case "$archlib" in
4771'') dflt=$tdflt
4772 ;;
4773*) dflt="$archlib"
4774 ;;
4775esac
4776$cat <<EOM
4777
4778$spackage contains architecture-dependent library files. If you are
4779sharing libraries in a heterogeneous environment, you might store
4780these files in a separate location. Otherwise, you can just include
4781them with the rest of the public library files.
4782
4783EOM
4784fn=d+~
4785rp='Where do you want to put the public architecture-dependent libraries?'
4786. ./getfile
4787archlib="$ans"
4788archlibexp="$ansexp"
4789if $test X"$archlib" = X"$privlib"; then
4790 d_archlib="$undef"
4791else
4792 d_archlib="$define"
4793fi
4794: Change installation prefix, if necessary.
4795if $test X"$prefix" != X"$installprefix"; then
4796 installarchlib=`echo $archlibexp | sed "s#^$prefix#$installprefix#"`
4797else
4798 installarchlib="$archlibexp"
4799fi
4800
4801
4802: Binary compatibility with 5.005 is not possible for builds
4803: with advanced features
4804case "$usethreads$usemultiplicity" in
4805*define*)
4806 bincompat5005="$undef"
4807 d_bincompat5005="$undef"
4808 ;;
4809*) $cat <<EOM
4810
4811Perl 5.006 can be compiled for binary compatibility with 5.005.
4812If you decide to do so, you will be able to continue using most
4813of the extensions that were compiled for Perl 5.005.
4814
4815EOM
4816 case "$bincompat5005$d_bincompat5005" in
4817 *"$undef"*) dflt=n ;;
4818 *) dflt=y ;;
4819 esac
4820 rp='Binary compatibility with Perl 5.005?'
4821 . ./myread
4822 case "$ans" in
4823 y*) val="$define" ;;
4824 *) val="$undef" ;;
4825 esac
4826 set d_bincompat5005
4827 eval $setvar
4828 case "$d_bincompat5005" in
4829 "$define")
4830 bincompat5005="$define"
4831 ;;
4832 *) bincompat5005="$undef"
4833 d_bincompat5005="$undef"
4834 ;;
4835 esac
4836 ;;
4837esac
4838
4839
4840: see if setuid scripts can be secure
4841$cat <<EOM
4842
4843Some kernels have a bug that prevents setuid #! scripts from being
4844secure. Some sites have disabled setuid #! scripts because of this.
4845
4846First let's decide if your kernel supports secure setuid #! scripts.
4847(If setuid #! scripts would be secure but have been disabled anyway,
4848don't say that they are secure if asked.)
4849
4850EOM
4851
4852val="$undef"
4853if $test -d /dev/fd; then
4854 echo "#!$ls" >reflect
4855 chmod +x,u+s reflect
4856 ./reflect >flect 2>&1
4857 if $contains "/dev/fd" flect >/dev/null; then
4858 echo "Congratulations, your kernel has secure setuid scripts!" >&4
4859 val="$define"
4860 else
4861 $cat <<EOM
4862If you are not sure if they are secure, I can check but I'll need a
4863username and password different from the one you are using right now.
4864If you don't have such a username or don't want me to test, simply
4865enter 'none'.
4866
4867EOM
4868 rp='Other username to test security of setuid scripts with?'
4869 dflt='none'
4870 . ./myread
4871 case "$ans" in
4872 n|none)
4873 case "$d_suidsafe" in
4874 '') echo "I'll assume setuid scripts are *not* secure." >&4
4875 dflt=n;;
4876 "$undef")
4877 echo "Well, the $hint value is *not* secure." >&4
4878 dflt=n;;
4879 *) echo "Well, the $hint value *is* secure." >&4
4880 dflt=y;;
4881 esac
4882 ;;
4883 *)
4884 $rm -f reflect flect
4885 echo "#!$ls" >reflect
4886 chmod +x,u+s reflect
4887 echo >flect
4888 chmod a+w flect
4889 echo '"su" will (probably) prompt you for '"$ans's password."
4890 su $ans -c './reflect >flect'
4891 if $contains "/dev/fd" flect >/dev/null; then
4892 echo "Okay, it looks like setuid scripts are secure." >&4
4893 dflt=y
4894 else
4895 echo "I don't think setuid scripts are secure." >&4
4896 dflt=n
4897 fi
4898 ;;
4899 esac
4900 rp='Does your kernel have *secure* setuid scripts?'
4901 . ./myread
4902 case "$ans" in
4903 [yY]*) val="$define";;
4904 *) val="$undef";;
4905 esac
4906 fi
4907else
4908 echo "I don't think setuid scripts are secure (no /dev/fd directory)." >&4
4909 echo "(That's for file descriptors, not floppy disks.)"
4910 val="$undef"
4911fi
4912set d_suidsafe
4913eval $setvar
4914
4915$rm -f reflect flect
4916
4917: now see if they want to do setuid emulation
4918echo " "
4919val="$undef"
4920case "$d_suidsafe" in
4921"$define")
4922 val="$undef"
4923 echo "No need to emulate SUID scripts since they are secure here." >& 4
4924 ;;
4925*)
4926 $cat <<EOM
4927Some systems have disabled setuid scripts, especially systems where
4928setuid scripts cannot be secure. On systems where setuid scripts have
4929been disabled, the setuid/setgid bits on scripts are currently
4930useless. It is possible for $package to detect those bits and emulate
4931setuid/setgid in a secure fashion. This emulation will only work if
4932setuid scripts have been disabled in your kernel.
4933
4934EOM
4935 case "$d_dosuid" in
4936 "$define") dflt=y ;;
4937 *) dflt=n ;;
4938 esac
4939 rp="Do you want to do setuid/setgid emulation?"
4940 . ./myread
4941 case "$ans" in
4942 [yY]*) val="$define";;
4943 *) val="$undef";;
4944 esac
4945 ;;
4946esac
4947set d_dosuid
4948eval $setvar
4949
4950: determine filename position in cpp output
4951echo " "
4952echo "Computing filename position in cpp output for #include directives..." >&4
4953echo '#include <stdio.h>' > foo.c
4954$cat >fieldn <<EOF
4955$startsh
4956$cppstdin $cppflags $cppminus <foo.c 2>/dev/null | \
4957$grep '^[ ]*#.*stdio\.h' | \
4958while read cline; do
4959 pos=1
4960 set \$cline
4961 while $test \$# -gt 0; do
4962 if $test -r \`echo \$1 | $tr -d '"'\`; then
4963 echo "\$pos"
4964 exit 0
4965 fi
4966 shift
4967 pos=\`expr \$pos + 1\`
4968 done
4969done
4970EOF
4971chmod +x fieldn
4972fieldn=`./fieldn`
4973$rm -f foo.c fieldn
4974case $fieldn in
4975'') pos='???';;
49761) pos=first;;
49772) pos=second;;
49783) pos=third;;
4979*) pos="${fieldn}th";;
4980esac
4981echo "Your cpp writes the filename in the $pos field of the line."
4982
4983: locate header file
4984$cat >findhdr <<EOF
4985$startsh
4986wanted=\$1
4987name=''
4988for usrincdir in $usrinc
4989do
4990 if test -f \$usrincdir/\$wanted; then
4991 echo "\$usrincdir/\$wanted"
4992 exit 0
4993 fi
4994done
4995awkprg='{ print \$$fieldn }'
4996echo "#include <\$wanted>" > foo\$\$.c
4997$cppstdin $cppminus $cppflags < foo\$\$.c 2>/dev/null | \
4998$grep "^[ ]*#.*\$wanted" | \
4999while read cline; do
5000 name=\`echo \$cline | $awk "\$awkprg" | $tr -d '"'\`
5001 case "\$name" in
5002 *[/\\\\]\$wanted) echo "\$name"; exit 1;;
5003 *[\\\\/]\$wanted) echo "\$name"; exit 1;;
5004 *) exit 2;;
5005 esac;
5006done;
5007#
5008# status = 0: grep returned 0 lines, case statement not executed
5009# status = 1: headerfile found
5010# status = 2: while loop executed, no headerfile found
5011#
5012status=\$?
5013$rm -f foo\$\$.c;
5014if test \$status -eq 1; then
5015 exit 0;
5016fi
5017exit 1
5018EOF
5019chmod +x findhdr
5020
5021: define an alternate in-header-list? function
5022inhdr='echo " "; td=$define; tu=$undef; yyy=$@;
5023cont=true; xxf="echo \"<\$1> found.\" >&4";
5024case $# in 2) xxnf="echo \"<\$1> NOT found.\" >&4";;
5025*) xxnf="echo \"<\$1> NOT found, ...\" >&4";;
5026esac;
5027case $# in 4) instead=instead;; *) instead="at last";; esac;
5028while $test "$cont"; do
5029 xxx=`./findhdr $1`
5030 var=$2; eval "was=\$$2";
5031 if $test "$xxx" && $test -r "$xxx";
5032 then eval $xxf;
5033 eval "case \"\$$var\" in $undef) . ./whoa; esac"; eval "$var=\$td";
5034 cont="";
5035 else eval $xxnf;
5036 eval "case \"\$$var\" in $define) . ./whoa; esac"; eval "$var=\$tu"; fi;
5037 set $yyy; shift; shift; yyy=$@;
5038 case $# in 0) cont="";;
5039 2) xxf="echo \"but I found <\$1> $instead.\" >&4";
5040 xxnf="echo \"and I did not find <\$1> either.\" >&4";;
5041 *) xxf="echo \"but I found <\$1\> instead.\" >&4";
5042 xxnf="echo \"there is no <\$1>, ...\" >&4";;
5043 esac;
5044done;
5045while $test "$yyy";
5046do set $yyy; var=$2; eval "was=\$$2";
5047 eval "case \"\$$var\" in $define) . ./whoa; esac"; eval "$var=\$tu";
5048 set $yyy; shift; shift; yyy=$@;
5049done'
5050
5051: see if this is a malloc.h system
5052set malloc.h i_malloc
5053eval $inhdr
5054
5055: see if stdlib is available
5056set stdlib.h i_stdlib
5057eval $inhdr
5058
5059: determine which malloc to compile in
5060echo " "
5061case "$usemymalloc" in
5062''|[yY]*|true|$define) dflt='y' ;;
5063*) dflt='n' ;;
5064esac
5065rp="Do you wish to attempt to use the malloc that comes with $package?"
5066. ./myread
5067usemymalloc="$ans"
5068case "$ans" in
5069y*|true)
5070 usemymalloc='y'
5071 mallocsrc='malloc.c'
5072 mallocobj="malloc$_o"
5073 d_mymalloc="$define"
5074 case "$libs" in
5075 *-lmalloc*)
5076 : Remove malloc from list of libraries to use
5077 echo "Removing unneeded -lmalloc from library list" >&4
5078 set `echo X $libs | $sed -e 's/-lmalloc / /' -e 's/-lmalloc$//'`
5079 shift
5080 libs="$*"
5081 echo "libs = $libs" >&4
5082 ;;
5083 esac
5084 ;;
5085*)
5086 usemymalloc='n'
5087 mallocsrc=''
5088 mallocobj=''
5089 d_mymalloc="$undef"
5090 ;;
5091esac
5092
5093: compute the return types of malloc and free
5094echo " "
5095$cat >malloc.c <<END
5096#$i_malloc I_MALLOC
5097#$i_stdlib I_STDLIB
5098#include <stdio.h>
5099#include <sys/types.h>
5100#ifdef I_MALLOC
5101#include <malloc.h>
5102#endif
5103#ifdef I_STDLIB
5104#include <stdlib.h>
5105#endif
5106#ifdef TRY_MALLOC
5107void *malloc();
5108#endif
5109#ifdef TRY_FREE
5110void free();
5111#endif
5112END
5113case "$malloctype" in
5114'')
5115 if $cc $ccflags -c -DTRY_MALLOC malloc.c >/dev/null 2>&1; then
5116 malloctype='void *'
5117 else
5118 malloctype='char *'
5119 fi
5120 ;;
5121esac
5122echo "Your system wants malloc to return '$malloctype', it would seem." >&4
5123
5124case "$freetype" in
5125'')
5126 if $cc $ccflags -c -DTRY_FREE malloc.c >/dev/null 2>&1; then
5127 freetype='void'
5128 else
5129 freetype='int'
5130 fi
5131 ;;
5132esac
5133echo "Your system uses $freetype free(), it would seem." >&4
5134$rm -f malloc.[co]
5135$cat <<EOM
5136
5137The installation process will also create a directory for
5138vendor-supplied add-ons. Vendors who supply perl with their system
5139may find it convenient to place all vendor-supplied files in this
5140directory rather than in the main distribution directory. This will
5141ease upgrades between binary-compatible maintenance versions of perl.
5142
5143Of course you may also use these directories in whatever way you see
5144fit. For example, you might use them to access modules shared over a
5145company-wide network.
5146
5147The default answer should be fine for most people.
5148This causes further questions about vendor add-ons to be skipped
5149and no vendor-specific directories will be configured for perl.
5150
5151EOM
5152rp='Do you want to configure vendor-specific add-on directories?'
5153case "$usevendorprefix" in
5154define|true|[yY]*) dflt=y ;;
5155*) dflt=n ;;
5156esac
5157. ./myread
5158case "$ans" in
5159[yY]*) fn=d~+
5160 rp='Installation prefix to use for vendor-supplied add-ons?'
5161 case "$vendorprefix" in
5162 '') dflt='' ;;
5163 *) dflt=$vendorprefix ;;
5164 esac
5165 . ./getfile
5166 oldvendorprefix=''
5167 case "$vendorprefix" in
5168 '') ;;
5169 *) case "$ans" in
5170 "$prefix") ;;
5171 *) oldvendorprefix="$prefix";;
5172 esac
5173 ;;
5174 esac
5175 usevendorprefix="$define"
5176 vendorprefix="$ans"
5177 vendorprefixexp="$ansexp"
5178 ;;
5179*) usevendorprefix="$undef"
5180 vendorprefix=''
5181 vendorprefixexp=''
5182 ;;
5183esac
5184
5185case "$vendorprefix" in
5186'') d_vendorlib="$undef"
5187 vendorlib=''
5188 vendorlibexp=''
5189 ;;
5190*) d_vendorlib="$define"
5191 : determine where vendor-supplied modules go.
5192 : Usual default is /usr/local/lib/perl5/vendor_perl/$version
5193 prog=`echo $package | $sed 's/-*[0-9.]*$//'`
5194 case "$installstyle" in
5195 *lib/perl5*) dflt=$vendorprefix/lib/$package/vendor_$prog/$version ;;
5196 *) dflt=$vendorprefix/lib/vendor_$prog/$version ;;
5197 esac
5198 fn=d~+
5199 rp='Pathname for the vendor-supplied library files?'
5200 . ./getfile
5201 vendorlib="$ans"
5202 vendorlibexp="$ansexp"
5203 : Change installation prefix, if necessary.
5204 if $test X"$prefix" != X"$installprefix"; then
5205 installvendorlib=`echo $vendorlibexp | $sed "s#^$prefix#$installprefix#"`
5206 else
5207 installvendorlib="$vendorlibexp"
5208 fi
5209 ;;
5210esac
5211
5212: Cruising for prototypes
5213echo " "
5214echo "Checking out function prototypes..." >&4
5215$cat >prototype.c <<'EOCP'
5216int main(int argc, char *argv[]) {
5217 exit(0);}
5218EOCP
5219if $cc $ccflags -c prototype.c >prototype.out 2>&1 ; then
5220 echo "Your C compiler appears to support function prototypes."
5221 val="$define"
5222else
5223 echo "Your C compiler doesn't seem to understand function prototypes."
5224 val="$undef"
5225fi
5226set prototype
5227eval $setvar
5228$rm -f prototype*
5229
5230case "$prototype" in
5231"$define") ;;
5232*) ansi2knr='ansi2knr'
5233 echo " "
5234 cat <<EOM >&4
5235
5236$me: FATAL ERROR:
5237This version of $package can only be compiled by a compiler that
5238understands function prototypes. Unfortunately, your C compiler
5239 $cc $ccflags
5240doesn't seem to understand them. Sorry about that.
5241
5242If GNU cc is available for your system, perhaps you could try that instead.
5243
5244Eventually, we hope to support building Perl with pre-ANSI compilers.
5245If you would like to help in that effort, please contact <perlbug@perl.org>.
5246
5247Aborting Configure now.
5248EOM
5249 exit 2
5250 ;;
5251esac
5252
5253: determine where public executables go
5254echo " "
5255set dflt bin bin
5256eval $prefixit
5257fn=d~
5258rp='Pathname where the public executables will reside?'
5259. ./getfile
5260if $test "X$ansexp" != "X$binexp"; then
5261 installbin=''
5262fi
5263bin="$ans"
5264binexp="$ansexp"
5265: Change installation prefix, if necessary.
5266: XXX Bug? -- ignores Configure -Dinstallprefix setting.
5267if $test X"$prefix" != X"$installprefix"; then
5268 installbin=`echo $binexp | sed "s#^$prefix#$installprefix#"`
5269else
5270 installbin="$binexp"
5271fi
5272
5273$cat <<EOM
5274
5275After $package is installed, you may wish to install various
5276add-on modules and utilities. Typically, these add-ons will
5277be installed under $prefix with the rest
5278of this package. However, you may wish to install such add-ons
5279elsewhere under a different prefix.
5280
5281If you do not wish to put everything under a single prefix, that's
5282ok. You will be prompted for the individual locations; this siteprefix
5283is only used to suggest the defaults.
5284
5285The default should be fine for most people.
5286
5287EOM
5288fn=d~+
5289rp='Installation prefix to use for add-on modules and utilities?'
5290: XXX Here might be another good place for an installstyle setting.
5291case "$siteprefix" in
5292'') dflt=$prefix ;;
5293*) dflt=$siteprefix ;;
5294esac
5295. ./getfile
5296oldsiteprefix=''
5297case "$siteprefix" in
5298'') ;;
5299*)
5300 case "$ans" in
5301 "$prefix") ;;
5302 *) oldsiteprefix="$prefix";;
5303 esac
5304 ;;
5305esac
5306siteprefix="$ans"
5307siteprefixexp="$ansexp"
5308
5309: determine where site specific libraries go.
5310: Usual default is /usr/local/lib/perl5/site_perl/$version
5311: The default "style" setting is made in installstyle.U
5312: XXX No longer works with Prefixit stuff.
5313prog=`echo $package | $sed 's/-*[0-9.]*$//'`
5314case "$installstyle" in
5315*lib/perl5*) dflt=$siteprefix/lib/$package/site_$prog/$version ;;
5316*) dflt=$siteprefix/lib/site_$prog/$version ;;
5317esac
5318$cat <<EOM
5319
5320The installation process will create a directory for
5321site-specific extensions and modules. Most users find it convenient
5322to place all site-specific files in this directory rather than in the
5323main distribution directory.
5324
5325EOM
5326fn=d~+
5327rp='Pathname for the site-specific library files?'
5328. ./getfile
5329sitelib="$ans"
5330sitelibexp="$ansexp"
5331: Change installation prefix, if necessary.
5332if $test X"$prefix" != X"$installprefix"; then
5333 installsitelib=`echo $sitelibexp | sed "s#^$prefix#$installprefix#"`
5334else
5335 installsitelib="$sitelibexp"
5336fi
5337
5338: Determine list of previous versions to include in @INC
5339$cat > getverlist <<EOPL
5340#!$perl -w
5341use File::Basename;
5342\$api_versionstring = "$api_versionstring";
5343\$version = "$version";
5344\$sitelib = "$sitelib";
5345\$archname = "$archname";
5346EOPL
5347 $cat >> getverlist <<'EOPL'
5348# Can't have leading @ because metaconfig interprets it as a command!
5349;@inc_version_list=();
5350$stem=dirname($sitelib);
5351# Redo to do opendir/readdir?
5352if (-d $stem) {
5353 chdir($stem);
5354 ;@candidates = glob("5.*");
5355}
5356else {
5357 ;@candidates = ();
5358}
5359
5360# XXX ToDo: These comparisons must be reworked when two-digit
5361# subversions come along, so that 5.7.10 compares as greater than
5362# 5.7.3! By that time, hope that 5.6.x is sufficiently
5363# widespread that we can use the built-in version vectors rather
5364# than reinventing them here. For 5.6.0, however, we must
5365# assume this script will likely be run by 5.005_0x. --AD 1/2000.
5366foreach $d (@candidates) {
5367 if ($d lt $version) {
5368 if ($d ge $api_versionstring) {
5369 unshift(@inc_version_list, "$d/$archname", $d);
5370 }
5371 elsif ($d ge "5.005") {
5372 unshift(@inc_version_list, $d);
5373 }
5374 }
5375 else {
5376 # Skip newer version. I.e. don't look in
5377 # 5.7.0 if we're installing 5.6.1.
5378 }
5379}
5380
5381if (@inc_version_list) {
5382 print join(' ', @inc_version_list);
5383}
5384else {
5385 # Blank space to preserve value for next Configure run.
5386 print " ";
5387}
5388EOPL
5389chmod +x getverlist
5390case "$inc_version_list" in
5391'') if test -x $perl; then
5392 dflt=`$perl getverlist`
5393 else
5394 dflt='none'
5395 fi
5396 ;;
5397$undef) dflt='none' ;;
5398*) dflt="$inc_version_list" ;;
5399esac
5400$cat <<'EOM'
5401
5402In order to ease the process of upgrading, this version of perl
5403can be configured to use modules built and installed with earlier
5404versions of perl that were installed under $prefix. Specify here
5405the list of earlier versions that this version of perl should check.
5406If Configure detected no earlier versions of perl installed under
5407$prefix, then the list will be empty. Answer 'none' to tell perl
5408to not search earlier versions.
5409
5410The default should almost always be sensible, so if you're not sure,
5411just accept the default.
5412EOM
5413
5414rp='List of earlier versions to include in @INC?'
5415. ./myread
5416case "$ans" in
5417[Nn]one) inc_version_list=' ' ;;
5418*) inc_version_list="$ans" ;;
5419esac
5420case "$inc_version_list" in
5421''|' ')
5422 inc_version_list_init='""';;
5423*) inc_version_list_init=`echo $inc_version_list |
5424 $sed -e 's/^/"/' -e 's/ /","/g' -e 's/$/"/'`
5425 ;;
5426esac
5427$rm -f getverlist
5428
5429: determine whether to install perl also as /usr/bin/perl
5430
5431echo " "
5432if $test -d /usr/bin -a "X$installbin" != X/usr/bin; then
5433 $cat <<EOM
5434Many scripts expect to perl to be installed as /usr/bin/perl.
5435I can install the perl you are about to compile also as /usr/bin/perl
5436(in addition to $installbin/perl).
5437EOM
5438 case "$installusrbinperl" in
5439 "$undef"|[nN]*) dflt='n';;
5440 *) dflt='y';;
5441 esac
5442 rp="Do you want to install perl as /usr/bin/perl?"
5443 . ./myread
5444 case "$ans" in
5445 [yY]*) val="$define";;
5446 *) val="$undef" ;;
5447 esac
5448else
5449 val="$undef"
5450fi
5451set installusrbinperl
5452eval $setvar
5453
5454echo " "
5455echo "Checking for GNU C Library..." >&4
5456cat >gnulibc.c <<EOM
5457#include <stdio.h>
5458int main()
5459{
5460#ifdef __GLIBC__
5461 exit(0);
5462#else
5463 exit(1);
5464#endif
5465}
5466EOM
5467set gnulibc
5468if eval $compile_ok && ./gnulibc; then
5469 val="$define"
5470 echo "You are using the GNU C Library"
5471else
5472 val="$undef"
5473 echo "You are not using the GNU C Library"
5474fi
5475$rm -f gnulibc*
5476set d_gnulibc
5477eval $setvar
5478
5479: see if nm is to be used to determine whether a symbol is defined or not
5480case "$usenm" in
5481'')
5482 dflt=''
5483 case "$d_gnulibc" in
5484 "$define")
5485 echo " "
5486 echo "nm probably won't work on the GNU C Library." >&4
5487 dflt=n
5488 ;;
5489 esac
5490 case "$dflt" in
5491 '')
5492 if $test "$osname" = aix -a ! -f /lib/syscalls.exp; then
5493 echo " "
5494 echo "Whoops! This is an AIX system without /lib/syscalls.exp!" >&4
5495 echo "'nm' won't be sufficient on this sytem." >&4
5496 dflt=n
5497 fi
5498 ;;
5499 esac
5500 case "$dflt" in
5501 '') dflt=`$egrep 'inlibc|csym' $rsrc/Configure | wc -l 2>/dev/null`
5502 if $test $dflt -gt 20; then
5503 dflt=y
5504 else
5505 dflt=n
5506 fi
5507 ;;
5508 esac
5509 ;;
5510*)
5511 case "$usenm" in
5512 true|$define) dflt=y;;
5513 *) dflt=n;;
5514 esac
5515 ;;
5516esac
5517$cat <<EOM
5518
5519I can use $nm to extract the symbols from your C libraries. This
5520is a time consuming task which may generate huge output on the disk (up
5521to 3 megabytes) but that should make the symbols extraction faster. The
5522alternative is to skip the 'nm' extraction part and to compile a small
5523test program instead to determine whether each symbol is present. If
5524you have a fast C compiler and/or if your 'nm' output cannot be parsed,
5525this may be the best solution.
5526
5527You probably shouldn't let me use 'nm' if you are using the GNU C Library.
5528
5529EOM
5530rp="Shall I use $nm to extract C symbols from the libraries?"
5531. ./myread
5532case "$ans" in
5533[Nn]*) usenm=false;;
5534*) usenm=true;;
5535esac
5536
5537runnm=$usenm
5538case "$reuseval" in
5539true) runnm=false;;
5540esac
5541
5542: nm options which may be necessary
5543case "$nm_opt" in
5544'') if $test -f /mach_boot; then
5545 nm_opt='' # Mach
5546 elif $test -d /usr/ccs/lib; then
5547 nm_opt='-p' # Solaris (and SunOS?)
5548 elif $test -f /dgux; then
5549 nm_opt='-p' # DG-UX
5550 elif $test -f /lib64/rld; then
5551 nm_opt='-p' # 64-bit Irix
5552 else
5553 nm_opt=''
5554 fi;;
5555esac
5556
5557: nm options which may be necessary for shared libraries but illegal
5558: for archive libraries. Thank you, Linux.
5559case "$nm_so_opt" in
5560'') case "$myuname" in
5561 *linux*)
5562 if $nm --help | $grep 'dynamic' > /dev/null 2>&1; then
5563 nm_so_opt='--dynamic'
5564 fi
5565 ;;
5566 esac
5567 ;;
5568esac
5569
5570case "$runnm" in
5571true)
5572: get list of predefined functions in a handy place
5573echo " "
5574case "$libc" in
5575'') libc=unknown
5576 case "$libs" in
5577 *-lc_s*) libc=`./loc libc_s$_a $libc $libpth`
5578 esac
5579 ;;
5580esac
5581libnames='';
5582case "$libs" in
5583'') ;;
5584*) for thislib in $libs; do
5585 case "$thislib" in
5586 -lc|-lc_s)
5587 : Handle C library specially below.
5588 ;;
5589 -l*)
5590 thislib=`echo $thislib | $sed -e 's/^-l//'`
5591 if try=`./loc lib$thislib.$so.'*' X $libpth`; $test -f "$try"; then
5592 :
5593 elif try=`./loc lib$thislib.$so X $libpth`; $test -f "$try"; then
5594 :
5595 elif try=`./loc lib$thislib$_a X $libpth`; $test -f "$try"; then
5596 :
5597 elif try=`./loc $thislib$_a X $libpth`; $test -f "$try"; then
5598 :
5599 elif try=`./loc lib$thislib X $libpth`; $test -f "$try"; then
5600 :
5601 elif try=`./loc $thislib X $libpth`; $test -f "$try"; then
5602 :
5603 elif try=`./loc Slib$thislib$_a X $xlibpth`; $test -f "$try"; then
5604 :
5605 else
5606 try=''
5607 fi
5608 libnames="$libnames $try"
5609 ;;
5610 *) libnames="$libnames $thislib" ;;
5611 esac
5612 done
5613 ;;
5614esac
5615xxx=normal
5616case "$libc" in
5617unknown)
5618 set /lib/libc.$so
5619 for xxx in $libpth; do
5620 $test -r $1 || set $xxx/libc.$so
5621 : The messy sed command sorts on library version numbers.
5622 $test -r $1 || \
5623 set `echo blurfl; echo $xxx/libc.$so.[0-9]* | \
5624 tr ' ' $trnl | egrep -v '\.[A-Za-z]*$' | $sed -e '
5625 h
5626 s/[0-9][0-9]*/0000&/g
5627 s/0*\([0-9][0-9][0-9][0-9][0-9]\)/\1/g
5628 G
5629 s/\n/ /' | \
5630 sort | $sed -e 's/^.* //'`
5631 eval set \$$#
5632 done
5633 $test -r $1 || set /usr/ccs/lib/libc.$so
5634 $test -r $1 || set /lib/libsys_s$_a
5635 ;;
5636*)
5637 set blurfl
5638 ;;
5639esac
5640if $test -r "$1"; then
5641 echo "Your (shared) C library seems to be in $1."
5642 libc="$1"
5643elif $test -r /lib/libc && $test -r /lib/clib; then
5644 echo "Your C library seems to be in both /lib/clib and /lib/libc."
5645 xxx=apollo
5646 libc='/lib/clib /lib/libc'
5647 if $test -r /lib/syslib; then
5648 echo "(Your math library is in /lib/syslib.)"
5649 libc="$libc /lib/syslib"
5650 fi
5651elif $test -r "$libc" || (test -h "$libc") >/dev/null 2>&1; then
5652 echo "Your C library seems to be in $libc, as you said before."
5653elif $test -r $incpath/usr/lib/libc$_a; then
5654 libc=$incpath/usr/lib/libc$_a;
5655 echo "Your C library seems to be in $libc. That's fine."
5656elif $test -r /lib/libc$_a; then
5657 libc=/lib/libc$_a;
5658 echo "Your C library seems to be in $libc. You're normal."
5659else
5660 if tans=`./loc libc$_a blurfl/dyick $libpth`; $test -r "$tans"; then
5661 :
5662 elif tans=`./loc libc blurfl/dyick $libpth`; $test -r "$tans"; then
5663 libnames="$libnames "`./loc clib blurfl/dyick $libpth`
5664 elif tans=`./loc clib blurfl/dyick $libpth`; $test -r "$tans"; then
5665 :
5666 elif tans=`./loc Slibc$_a blurfl/dyick $xlibpth`; $test -r "$tans"; then
5667 :
5668 elif tans=`./loc Mlibc$_a blurfl/dyick $xlibpth`; $test -r "$tans"; then
5669 :
5670 else
5671 tans=`./loc Llibc$_a blurfl/dyick $xlibpth`
5672 fi
5673 if $test -r "$tans"; then
5674 echo "Your C library seems to be in $tans, of all places."
5675 libc=$tans
5676 else
5677 libc='blurfl'
5678 fi
5679fi
5680if $test $xxx = apollo -o -r "$libc" || (test -h "$libc") >/dev/null 2>&1; then
5681 dflt="$libc"
5682 cat <<EOM
5683
5684If the guess above is wrong (which it might be if you're using a strange
5685compiler, or your machine supports multiple models), you can override it here.
5686
5687EOM
5688else
5689 dflt=''
5690 echo $libpth | tr ' ' $trnl | sort | uniq > libpath
5691 cat >&4 <<EOM
5692I can't seem to find your C library. I've looked in the following places:
5693
5694EOM
5695 $sed 's/^/ /' libpath
5696 cat <<EOM
5697
5698None of these seems to contain your C library. I need to get its name...
5699
5700EOM
5701fi
5702fn=f
5703rp='Where is your C library?'
5704. ./getfile
5705libc="$ans"
5706
5707echo " "
5708echo $libc $libnames | tr ' ' $trnl | sort | uniq > libnames
5709set X `cat libnames`
5710shift
5711xxx=files
5712case $# in 1) xxx=file; esac
5713echo "Extracting names from the following $xxx for later perusal:" >&4
5714echo " "
5715$sed 's/^/ /' libnames >&4
5716echo " "
5717$echo $n "This may take a while...$c" >&4
5718
5719for file in $*; do
5720 case $file in
5721 *$so*) $nm $nm_so_opt $nm_opt $file 2>/dev/null;;
5722 *) $nm $nm_opt $file 2>/dev/null;;
5723 esac
5724done >libc.tmp
5725
5726$echo $n ".$c"
5727$grep fprintf libc.tmp > libc.ptf
5728xscan='eval "<libc.ptf $com >libc.list"; $echo $n ".$c" >&4'
5729xrun='eval "<libc.tmp $com >libc.list"; echo "done" >&4'
5730xxx='[ADTSIW]'
5731if com="$sed -n -e 's/__IO//' -e 's/^.* $xxx *_[_.]*//p' -e 's/^.* $xxx *//p'";\
5732 eval $xscan;\
5733 $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5734 eval $xrun
5735elif com="$sed -n -e 's/^__*//' -e 's/^\([a-zA-Z_0-9$]*\).*xtern.*/\1/p'";\
5736 eval $xscan;\
5737 $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5738 eval $xrun
5739elif com="$sed -n -e '/|UNDEF/d' -e '/FUNC..GL/s/^.*|__*//p'";\
5740 eval $xscan;\
5741 $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5742 eval $xrun
5743elif com="$sed -n -e 's/^.* D __*//p' -e 's/^.* D //p'";\
5744 eval $xscan;\
5745 $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5746 eval $xrun
5747elif com="$sed -n -e 's/^_//' -e 's/^\([a-zA-Z_0-9]*\).*xtern.*text.*/\1/p'";\
5748 eval $xscan;\
5749 $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5750 eval $xrun
5751elif com="$sed -n -e 's/^.*|FUNC |GLOB .*|//p'";\
5752 eval $xscan;\
5753 $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5754 eval $xrun
5755elif com="$grep '|' | $sed -n -e '/|COMMON/d' -e '/|DATA/d' \
5756 -e '/ file/d' -e 's/^\([^ ]*\).*/\1/p'";\
5757 eval $xscan;\
5758 $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5759 eval $xrun
5760elif com="$sed -n -e 's/^.*|FUNC |GLOB .*|//p' -e 's/^.*|FUNC |WEAK .*|//p'";\
5761 eval $xscan;\
5762 $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5763 eval $xrun
5764elif com="$sed -n -e 's/^__//' -e '/|Undef/d' -e '/|Proc/s/ .*//p'";\
5765 eval $xscan;\
5766 $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5767 eval $xrun
5768elif com="$sed -n -e 's/^.*|Proc .*|Text *| *//p'";\
5769 eval $xscan;\
5770 $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5771 eval $xrun
5772elif com="$sed -n -e '/Def. Text/s/.* \([^ ]*\)\$/\1/p'";\
5773 eval $xscan;\
5774 $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5775 eval $xrun
5776elif com="$sed -n -e 's/^[-0-9a-f ]*_\(.*\)=.*/\1/p'";\
5777 eval $xscan;\
5778 $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5779 eval $xrun
5780elif com="$sed -n -e 's/.*\.text n\ \ \ \.//p'";\
5781 eval $xscan;\
5782 $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5783 eval $xrun
5784elif com="sed -n -e 's/^__.*//' -e 's/[ ]*D[ ]*[0-9]*.*//p'";\
5785 eval $xscan;\
5786 $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5787 eval $xrun
5788else
5789 $nm -p $* 2>/dev/null >libc.tmp
5790 $grep fprintf libc.tmp > libc.ptf
5791 if com="$sed -n -e 's/^.* [ADTSIW] *_[_.]*//p' -e 's/^.* [ADTSIW] //p'";\
5792 eval $xscan; $contains '^fprintf$' libc.list >/dev/null 2>&1
5793 then
5794 nm_opt='-p'
5795 eval $xrun
5796 else
5797 echo " "
5798 echo "$nm didn't seem to work right. Trying $ar instead..." >&4
5799 com=''
5800 if $ar t $libc > libc.tmp && $contains '^fprintf$' libc.tmp >/dev/null 2>&1; then
5801 for thisname in $libnames $libc; do
5802 $ar t $thisname >>libc.tmp
5803 done
5804 $sed -e "s/\\$_o\$//" < libc.tmp > libc.list
5805 echo "Ok." >&4
5806 elif test "X$osname" = "Xos2" && $ar tv $libc > libc.tmp; then
5807 # Repeat libc to extract forwarders to DLL entries too
5808 for thisname in $libnames $libc; do
5809 $ar tv $thisname >>libc.tmp
5810 # Revision 50 of EMX has bug in $ar.
5811 # it will not extract forwarders to DLL entries
5812 # Use emximp which will extract exactly them.
5813 emximp -o tmp.imp $thisname \
5814 2>/dev/null && \
5815 $sed -e 's/^\([_a-zA-Z0-9]*\) .*$/\1/p' \
5816 < tmp.imp >>libc.tmp
5817 $rm tmp.imp
5818 done
5819 $sed -e "s/\\$_o\$//" -e 's/^ \+//' < libc.tmp > libc.list
5820 echo "Ok." >&4
5821 else
5822 echo "$ar didn't seem to work right." >&4
5823 echo "Maybe this is a Cray...trying bld instead..." >&4
5824 if bld t $libc | $sed -e 's/.*\///' -e "s/\\$_o:.*\$//" > libc.list
5825 then
5826 for thisname in $libnames; do
5827 bld t $libnames | \
5828 $sed -e 's/.*\///' -e "s/\\$_o:.*\$//" >>libc.list
5829 $ar t $thisname >>libc.tmp
5830 done
5831 echo "Ok." >&4
5832 else
5833 echo "That didn't work either. Giving up." >&4
5834 exit 1
5835 fi
5836 fi
5837 fi
5838fi
5839nm_extract="$com"
5840if $test -f /lib/syscalls.exp; then
5841 echo " "
5842 echo "Also extracting names from /lib/syscalls.exp for good ole AIX..." >&4
5843 $sed -n 's/^\([^ ]*\)[ ]*syscall[0-9]*$/\1/p' /lib/syscalls.exp >>libc.list
5844fi
5845;;
5846esac
5847$rm -f libnames libpath
5848
5849: see if dld is available
5850set dld.h i_dld
5851eval $inhdr
5852
5853: is a C symbol defined?
5854csym='tlook=$1;
5855case "$3" in
5856-v) tf=libc.tmp; tc=""; tdc="";;
5857-a) tf=libc.tmp; tc="[0]"; tdc="[]";;
5858*) tlook="^$1\$"; tf=libc.list; tc="()"; tdc="()";;
5859esac;
5860tx=yes;
5861case "$reuseval-$4" in
5862true-) ;;
5863true-*) tx=no; eval "tval=\$$4"; case "$tval" in "") tx=yes;; esac;;
5864esac;
5865case "$tx" in
5866yes)
5867 case "$runnm" in
5868 true)
5869 if $contains $tlook $tf >/dev/null 2>&1;
5870 then tval=true;
5871 else tval=false;
5872 fi;;
5873 *)
5874 echo "int main() { extern short $1$tdc; printf(\"%hd\", $1$tc); }" > t.c;
5875 if $cc $optimize $ccflags $ldflags -o t t.c $libs >/dev/null 2>&1;
5876 then tval=true;
5877 else tval=false;
5878 fi;
5879 $rm -f t t.c;;
5880 esac;;
5881*)
5882 case "$tval" in
5883 $define) tval=true;;
5884 *) tval=false;;
5885 esac;;
5886esac;
5887eval "$2=$tval"'
5888
5889: define an is-in-libc? function
5890inlibc='echo " "; td=$define; tu=$undef;
5891sym=$1; var=$2; eval "was=\$$2";
5892tx=yes;
5893case "$reuseval$was" in
5894true) ;;
5895true*) tx=no;;
5896esac;
5897case "$tx" in
5898yes)
5899 set $sym tres -f;
5900 eval $csym;
5901 case "$tres" in
5902 true)
5903 echo "$sym() found." >&4;
5904 case "$was" in $undef) . ./whoa; esac; eval "$var=\$td";;
5905 *)
5906 echo "$sym() NOT found." >&4;
5907 case "$was" in $define) . ./whoa; esac; eval "$var=\$tu";;
5908 esac;;
5909*)
5910 case "$was" in
5911 $define) echo "$sym() found." >&4;;
5912 *) echo "$sym() NOT found." >&4;;
5913 esac;;
5914esac'
5915
5916: see if dlopen exists
5917xxx_runnm="$runnm"
5918runnm=false
5919set dlopen d_dlopen
5920eval $inlibc
5921runnm="$xxx_runnm"
5922
5923: determine which dynamic loading, if any, to compile in
5924echo " "
5925dldir="ext/DynaLoader"
5926case "$usedl" in
5927$define|y|true)
5928 dflt='y'
5929 usedl="$define"
5930 ;;
5931$undef|n|false)
5932 dflt='n'
5933 usedl="$undef"
5934 ;;
5935*)
5936 dflt='n'
5937 case "$d_dlopen" in
5938 $define) dflt='y' ;;
5939 esac
5940 case "$i_dld" in
5941 $define) dflt='y' ;;
5942 esac
5943 : Does a dl_xxx.xs file exist for this operating system
5944 $test -f $rsrc/$dldir/dl_${osname}.xs && dflt='y'
5945 ;;
5946esac
5947rp="Do you wish to use dynamic loading?"
5948. ./myread
5949usedl="$ans"
5950case "$ans" in
5951y*) usedl="$define"
5952 case "$dlsrc" in
5953 '')
5954 if $test -f $rsrc/$dldir/dl_${osname}.xs ; then
5955 dflt="$dldir/dl_${osname}.xs"
5956 elif $test "$d_dlopen" = "$define" ; then
5957 dflt="$dldir/dl_dlopen.xs"
5958 elif $test "$i_dld" = "$define" ; then
5959 dflt="$dldir/dl_dld.xs"
5960 else
5961 dflt=''
5962 fi
5963 ;;
5964 *) dflt="$dldir/$dlsrc"
5965 ;;
5966 esac
5967 echo "The following dynamic loading files are available:"
5968 : Can not go over to $dldir because getfile has path hard-coded in.
5969 tdir=`pwd`; cd $rsrc; $ls -C $dldir/dl*.xs; cd $tdir
5970 rp="Source file to use for dynamic loading"
5971 fn="fne"
5972 gfpth="$src"
5973 . ./getfile
5974 usedl="$define"
5975 : emulate basename
5976 dlsrc=`echo $ans | $sed -e 's@.*/\([^/]*\)$@\1@'`
5977
5978 $cat << EOM
5979
5980Some systems may require passing special flags to $cc -c to
5981compile modules that will be used to create a shared library.
5982To use no flags, say "none".
5983
5984EOM
5985 case "$cccdlflags" in
5986 '') case "$gccversion" in
5987 '') case "$osname" in
5988 hpux) dflt='+z' ;;
5989 next) dflt='none' ;;
5990 irix*) dflt='-KPIC' ;;
5991 svr4*|esix*|solaris) dflt='-KPIC' ;;
5992 sunos) dflt='-pic' ;;
5993 *) dflt='none' ;;
5994 esac
5995 ;;
5996 *) case "$osname" in
5997 svr4*|esix*|solaris) dflt='-fPIC' ;;
5998 *) dflt='-fpic' ;;
5999 esac ;;
6000 esac ;;
6001 ' ') dflt='none' ;;
6002 *) dflt="$cccdlflags" ;;
6003 esac
6004 rp="Any special flags to pass to $cc -c to compile shared library modules?"
6005 . ./myread
6006 case "$ans" in
6007 none) cccdlflags=' ' ;;
6008 *) cccdlflags="$ans" ;;
6009 esac
6010
6011 cat << EOM
6012
6013Some systems use ld to create libraries that can be dynamically loaded,
6014while other systems (such as those using ELF) use $cc.
6015
6016EOM
6017 case "$ld" in
6018 '') $cat >try.c <<'EOM'
6019/* Test for whether ELF binaries are produced */
6020#include <fcntl.h>
6021#include <stdlib.h>
6022int main() {
6023 char b[4];
6024 int i = open("a.out",O_RDONLY);
6025 if(i == -1)
6026 exit(1); /* fail */
6027 if(read(i,b,4)==4 && b[0]==127 && b[1]=='E' && b[2]=='L' && b[3]=='F')
6028 exit(0); /* succeed (yes, it's ELF) */
6029 else
6030 exit(1); /* fail */
6031}
6032EOM
6033 if $cc $ccflags try.c >/dev/null 2>&1 && ./a.out; then
6034 cat <<EOM
6035You appear to have ELF support. I'll use $cc to build dynamic libraries.
6036EOM
6037 dflt="$cc"
6038 else
6039 echo "I'll use ld to build dynamic libraries."
6040 dflt='ld'
6041 fi
6042 rm -f try.c a.out
6043 ;;
6044 *) dflt="$ld"
6045 ;;
6046 esac
6047
6048 rp="What command should be used to create dynamic libraries?"
6049 . ./myread
6050 ld="$ans"
6051
6052 cat << EOM
6053
6054Some systems may require passing special flags to $ld to create a
6055library that can be dynamically loaded. If your ld flags include
6056-L/other/path options to locate libraries outside your loader's normal
6057search path, you may need to specify those -L options here as well. To
6058use no flags, say "none".
6059
6060EOM
6061 case "$lddlflags" in
6062 '') case "$osname" in
6063 beos) dflt='-nostart' ;;
6064 hpux) dflt='-b' ;;
6065 linux|irix*) dflt='-shared' ;;
6066 next) dflt='none' ;;
6067 solaris) dflt='-G' ;;
6068 sunos) dflt='-assert nodefinitions' ;;
6069 svr4*|esix*) dflt="-G $ldflags" ;;
6070 *) dflt='none' ;;
6071 esac
6072 ;;
6073 *) dflt="$lddlflags" ;;
6074 esac
6075
6076 : Try to guess additional flags to pick up local libraries.
6077 : Be careful not to append to a plain 'none'
6078 case "$dflt" in
6079 none) dflt='' ;;
6080 esac
6081 for thisflag in $ldflags; do
6082 case "$thisflag" in
6083 -L*)
6084 case " $dflt " in
6085 *" $thisflag "*) ;;
6086 *) dflt="$dflt $thisflag" ;;
6087 esac
6088 ;;
6089 esac
6090 done
6091
6092 case "$dflt" in
6093 ''|' ') dflt='none' ;;
6094 esac
6095
6096 rp="Any special flags to pass to $ld to create a dynamically loaded library?"
6097 . ./myread
6098 case "$ans" in
6099 none) lddlflags=' ' ;;
6100 *) lddlflags="$ans" ;;
6101 esac
6102
6103 cat <<EOM
6104
6105Some systems may require passing special flags to $cc to indicate that
6106the resulting executable will use dynamic linking. To use no flags,
6107say "none".
6108
6109EOM
6110 case "$ccdlflags" in
6111 '') case "$osname" in
6112 hpux) dflt='-Wl,-E' ;;
6113 linux) dflt='-rdynamic' ;;
6114 next) dflt='none' ;;
6115 sunos) dflt='none' ;;
6116 *) dflt='none' ;;
6117 esac ;;
6118 ' ') dflt='none' ;;
6119 *) dflt="$ccdlflags" ;;
6120 esac
6121 rp="Any special flags to pass to $cc to use dynamic linking?"
6122 . ./myread
6123 case "$ans" in
6124 none) ccdlflags=' ' ;;
6125 *) ccdlflags="$ans" ;;
6126 esac
6127 ;;
6128*) usedl="$undef"
6129 ld='ld'
6130 dlsrc='dl_none.xs'
6131 lddlflags=''
6132 ccdlflags=''
6133 ;;
6134esac
6135
6136also=''
6137case "$usedl" in
6138$undef)
6139 # No dynamic loading being used, so don't bother even to prompt.
6140 useshrplib='false'
6141 ;;
6142*) case "$useshrplib" in
6143 '') case "$osname" in
6144 svr4*|dgux|dynixptx|esix|powerux|beos|cygwin*)
6145 dflt=y
6146 also='Building a shared libperl is required for dynamic loading to work on your system.'
6147 ;;
6148 next*)
6149 case "$osvers" in
6150 4*) dflt=y
6151 also='Building a shared libperl is needed for MAB support.'
6152 ;;
6153 *) dflt=n
6154 ;;
6155 esac
6156 ;;
6157 *) dflt=n
6158 ;;
6159 esac
6160 ;;
6161 $define|true|[Yy]*)
6162 dflt=y
6163 ;;
6164 *) dflt=n
6165 ;;
6166 esac
6167 $cat << EOM
6168
6169The perl executable is normally obtained by linking perlmain.c with
6170libperl${_a}, any static extensions (usually just DynaLoader), and
6171any other libraries needed on this system (such as -lm, etc.). Since
6172your system supports dynamic loading, it is probably possible to build
6173a shared libperl.$so. If you will have more than one executable linked
6174to libperl.$so, this will significantly reduce the size of each
6175executable, but it may have a noticeable affect on performance. The
6176default is probably sensible for your system.
6177$also
6178
6179EOM
6180 rp="Build a shared libperl.$so (y/n)"
6181 . ./myread
6182 case "$ans" in
6183 true|$define|[Yy]*)
6184 useshrplib='true' ;;
6185 *) useshrplib='false' ;;
6186 esac
6187 ;;
6188esac
6189
6190case "$useshrplib" in
6191true)
6192 case "$libperl" in
6193 '')
6194 # Figure out a good name for libperl.so. Since it gets stored in
6195 # a version-specific architecture-dependent library, the version
6196 # number isn't really that important, except for making cc/ld happy.
6197 #
6198 # A name such as libperl.so.3.1
6199 majmin="libperl.$so.$patchlevel.$subversion"
6200 # A name such as libperl.so.301
6201 majonly=`echo $patchlevel $subversion |
6202 $awk '{printf "%d%02d", $1, $2}'`
6203 majonly=libperl.$so.$majonly
6204 # I'd prefer to keep the os-specific stuff here to a minimum, and
6205 # rely on figuring it out from the naming of libc.
6206 case "${osname}${osvers}" in
6207 next4*)
6208 dflt=libperl.5.$so
6209 # XXX How handle the --version stuff for MAB?
6210 ;;
6211 linux*) # ld won't link with a bare -lperl otherwise.
6212 dflt=libperl.$so
6213 ;;
6214 cygwin*) # include version
6215 dflt=`echo libperl$version | sed -e 's/\./_/g'`$lib_ext
6216 ;;
6217 *) # Try to guess based on whether libc has major.minor.
6218 case "$libc" in
6219 *libc.$so.[0-9]*.[0-9]*) dflt=$majmin ;;
6220 *libc.$so.[0-9]*) dflt=$majonly ;;
6221 *) dflt=libperl.$so ;;
6222 esac
6223 ;;
6224 esac
6225 ;;
6226 *) dflt=$libperl
6227 ;;
6228 esac
6229 cat << EOM
6230
6231I need to select a good name for the shared libperl. If your system uses
6232library names with major and minor numbers, then you might want something
6233like $majmin. Alternatively, if your system uses a single version
6234number for shared libraries, then you might want to use $majonly.
6235Or, your system might be quite happy with a simple libperl.$so.
6236
6237Since the shared libperl will get installed into a version-specific
6238architecture-dependent directory, the version number of the shared perl
6239library probably isn't important, so the default should be o.k.
6240
6241EOM
6242 rp='What name do you want to give to the shared libperl?'
6243 . ./myread
6244 libperl=$ans
6245 echo "Ok, I'll use $libperl"
6246 ;;
6247*)
6248 libperl="libperl${_a}"
6249 ;;
6250esac
6251
6252# Detect old use of shrpdir via undocumented Configure -Dshrpdir
6253case "$shrpdir" in
6254'') ;;
6255*) $cat >&4 <<EOM
6256WARNING: Use of the shrpdir variable for the installation location of
6257the shared $libperl is not supported. It was never documented and
6258will not work in this version. Let me (perlbug@perl.com)
6259know of any problems this may cause.
6260
6261EOM
6262 case "$shrpdir" in
6263 "$archlibexp/CORE")
6264 $cat >&4 <<EOM
6265But your current setting of $shrpdir is
6266the default anyway, so it's harmless.
6267EOM
6268 ;;
6269 *)
6270 $cat >&4 <<EOM
6271Further, your current attempted setting of $shrpdir
6272conflicts with the value of $archlibexp/CORE
6273that installperl will use.
6274EOM
6275 ;;
6276 esac
6277 ;;
6278esac
6279
6280# How will the perl executable find the installed shared $libperl?
6281# Add $xxx to ccdlflags.
6282# If we can't figure out a command-line option, use $shrpenv to
6283# set env LD_RUN_PATH. The main perl makefile uses this.
6284shrpdir=$archlibexp/CORE
6285xxx=''
6286tmp_shrpenv=''
6287if "$useshrplib"; then
6288 case "$osname" in
6289 aix)
6290 # We'll set it in Makefile.SH...
6291 ;;
6292 solaris|netbsd)
6293 xxx="-R $shrpdir"
6294 ;;
6295 freebsd)
6296 xxx="-Wl,-R$shrpdir"
6297 ;;
6298 linux|irix*|dec_osf)
6299 xxx="-Wl,-rpath,$shrpdir"
6300 ;;
6301 next)
6302 # next doesn't like the default...
6303 ;;
6304 beos)
6305 # beos doesn't like the default, either.
6306 ;;
6307 hpux*)
6308 # hpux doesn't like the default, either.
6309 tmp_shrpenv="env LDOPTS=\"+s +b${shrpdir}\""
6310 ;;
6311 *)
6312 tmp_shrpenv="env LD_RUN_PATH=$shrpdir"
6313 ;;
6314 esac
6315 case "$xxx" in
6316 '') ;;
6317 *)
6318 # Only add $xxx if it isn't already in ccdlflags.
6319 case " $ccdlflags " in
6320 *" $xxx "*) ;;
6321 *) ccdlflags="$ccdlflags $xxx"
6322 cat <<EOM >&4
6323
6324Adding $xxx to the flags
6325passed to $ld so that the perl executable will find the
6326installed shared $libperl.
6327
6328EOM
6329 ;;
6330 esac
6331 ;;
6332 esac
6333fi
6334# Fix ccdlflags in AIX for building external extensions.
6335# (For building Perl itself bare -bE:perl.exp is needed,
6336# Makefile.SH takes care of this.)
6337case "$osname" in
6338aix) ccdlflags="$ccdlflags -bE:$installarchlib/CORE/perl.exp" ;;
6339esac
6340# Respect a hint or command-line value.
6341case "$shrpenv" in
6342'') shrpenv="$tmp_shrpenv" ;;
6343esac
6344case "$ldlibpthname" in
6345'') ldlibpthname=LD_LIBRARY_PATH ;;
6346none) ldlibpthname='' ;;
6347esac
6348
6349: determine where manual pages go
6350set man1dir man1dir none
6351eval $prefixit
6352$cat <<EOM
6353
6354$spackage has manual pages available in source form.
6355EOM
6356case "$nroff" in
6357nroff)
6358 echo "However, you don't have nroff, so they're probably useless to you."
6359 case "$man1dir" in
6360 '') man1dir="none";;
6361 esac;;
6362esac
6363echo "If you don't want the manual sources installed, answer 'none'."
6364case "$man1dir" in
6365' ') dflt=none
6366 ;;
6367'')
6368 lookpath="$prefixexp/man/man1 $prefixexp/man/l_man/man1"
6369 lookpath="$lookpath $prefixexp/man/p_man/man1"
6370 lookpath="$lookpath $prefixexp/man/u_man/man1"
6371 lookpath="$lookpath $prefixexp/man/man.1"
6372 case "$sysman" in
6373 */?_man*) dflt=`./loc . $prefixexp/l_man/man1 $lookpath` ;;
6374 *) dflt=`./loc . $prefixexp/man/man1 $lookpath` ;;
6375 esac
6376 set dflt
6377 eval $prefixup
6378 ;;
6379*) dflt="$man1dir"
6380 ;;
6381esac
6382echo " "
6383fn=dn+~
6384rp="Where do the main $spackage manual pages (source) go?"
6385. ./getfile
6386if $test "X$man1direxp" != "X$ansexp"; then
6387 installman1dir=''
6388fi
6389man1dir="$ans"
6390man1direxp="$ansexp"
6391case "$man1dir" in
6392'') man1dir=' '
6393 installman1dir='';;
6394esac
6395
6396: Change installation prefix, if necessary.
6397if $test X"$prefix" != X"$installprefix"; then
6398 installman1dir=`echo $man1direxp | $sed "s#^$prefix#$installprefix#"`
6399else
6400 installman1dir="$man1direxp"
6401fi
6402
6403: What suffix to use on installed man pages
6404
6405case "$man1dir" in
6406' ')
6407 man1ext='0'
6408 ;;
6409*)
6410 rp="What suffix should be used for the main $spackage man pages?"
6411 case "$man1ext" in
6412 '') case "$man1dir" in
6413 *1) dflt=1 ;;
6414 *1p) dflt=1p ;;
6415 *1pm) dflt=1pm ;;
6416 *l) dflt=l;;
6417 *n) dflt=n;;
6418 *o) dflt=o;;
6419 *p) dflt=p;;
6420 *C) dflt=C;;
6421 *L) dflt=L;;
6422 *L1) dflt=L1;;
6423 *) dflt=1;;
6424 esac
6425 ;;
6426 *) dflt="$man1ext";;
6427 esac
6428 . ./myread
6429 man1ext="$ans"
6430 ;;
6431esac
6432
6433: see if we can have long filenames
6434echo " "
6435rmlist="$rmlist /tmp/cf$$"
6436$test -d /tmp/cf$$ || mkdir /tmp/cf$$
6437first=123456789abcdef
6438second=/tmp/cf$$/$first
6439$rm -f $first $second
6440if (echo hi >$first) 2>/dev/null; then
6441 if $test -f 123456789abcde; then
6442 echo 'You cannot have filenames longer than 14 characters. Sigh.' >&4
6443 val="$undef"
6444 else
6445 if (echo hi >$second) 2>/dev/null; then
6446 if $test -f /tmp/cf$$/123456789abcde; then
6447 $cat <<'EOM'
6448That's peculiar... You can have filenames longer than 14 characters, but only
6449on some of the filesystems. Maybe you are using NFS. Anyway, to avoid problems
6450I shall consider your system cannot support long filenames at all.
6451EOM
6452 val="$undef"
6453 else
6454 echo 'You can have filenames longer than 14 characters.' >&4
6455 val="$define"
6456 fi
6457 else
6458 $cat <<'EOM'
6459How confusing! Some of your filesystems are sane enough to allow filenames
6460longer than 14 characters but some others like /tmp can't even think about them.
6461So, for now on, I shall assume your kernel does not allow them at all.
6462EOM
6463 val="$undef"
6464 fi
6465 fi
6466else
6467 $cat <<'EOM'
6468You can't have filenames longer than 14 chars. You can't even think about them!
6469EOM
6470 val="$undef"
6471fi
6472set d_flexfnam
6473eval $setvar
6474$rm -rf /tmp/cf$$ 123456789abcde*
6475
6476: determine where library module manual pages go
6477set man3dir man3dir none
6478eval $prefixit
6479$cat <<EOM
6480
6481$spackage has manual pages for many of the library modules.
6482EOM
6483
6484case "$nroff" in
6485nroff)
6486 $cat <<'EOM'
6487However, you don't have nroff, so they're probably useless to you.
6488EOM
6489 case "$man3dir" in
6490 '') man3dir="none";;
6491 esac;;
6492esac
6493
6494case "$d_flexfnam" in
6495undef)
6496 $cat <<'EOM'
6497However, your system can't handle the long file names like File::Basename.3.
6498EOM
6499 case "$man3dir" in
6500 '') man3dir="none";;
6501 esac;;
6502esac
6503
6504echo "If you don't want the manual sources installed, answer 'none'."
6505prog=`echo $package | $sed 's/-*[0-9.]*$//'`
6506case "$man3dir" in
6507'') dflt=`echo $man1dir | $sed -e 's/man1/man3/g' -e 's/man\.1/man\.3/g'`
6508 if $test -d "$privlib/man/man3"; then
6509 cat <<EOM >&4
6510
6511WARNING: Previous versions of perl installed man3 pages into
6512$privlib/man/man3. This version will suggest a
6513new default of $dflt.
6514EOM
6515 tdflt=$dflt
6516 dflt='n'
6517 rp='Do you wish to preserve the old behavior?(y/n)'
6518 . ./myread
6519 case "$ans" in
6520 y*) dflt="$privlib/man/man3" ;;
6521 *) dflt=$tdflt ;;
6522 esac
6523 fi
6524 ;;
6525' ') dflt=none;;
6526*) dflt="$man3dir" ;;
6527esac
6528echo " "
6529fn=dn+~
6530rp="Where do the $package library man pages (source) go?"
6531. ./getfile
6532man3dir="$ans"
6533man3direxp="$ansexp"
6534case "$man1dir" in
6535'') man3dir=' '
6536 installman3dir='';;
6537esac
6538
6539: Change installation prefix, if necessary.
6540if $test X"$prefix" != X"$installprefix"; then
6541 installman3dir=`echo $man3direxp | $sed "s#^$prefix#$installprefix#"`
6542else
6543 installman3dir="$man3direxp"
6544fi
6545
6546: What suffix to use on installed man pages
6547case "$man3dir" in
6548' ')
6549 man3ext='0'
6550 ;;
6551*)
6552 rp="What suffix should be used for the $package library man pages?"
6553 case "$man3ext" in
6554 '') case "$man3dir" in
6555 *3) dflt=3 ;;
6556 *3p) dflt=3p ;;
6557 *3pm) dflt=3pm ;;
6558 *l) dflt=l;;
6559 *n) dflt=n;;
6560 *o) dflt=o;;
6561 *p) dflt=p;;
6562 *C) dflt=C;;
6563 *L) dflt=L;;
6564 *L3) dflt=L3;;
6565 *) dflt=3;;
6566 esac
6567 ;;
6568 *) dflt="$man3ext";;
6569 esac
6570 . ./myread
6571 man3ext="$ans"
6572 ;;
6573esac
6574
6575: see if we have to deal with yellow pages, now NIS.
6576if $test -d /usr/etc/yp || $test -d /etc/yp; then
6577 if $test -f /usr/etc/nibindd; then
6578 echo " "
6579 echo "I'm fairly confident you're on a NeXT."
6580 echo " "
6581 rp='Do you get the hosts file via NetInfo?'
6582 dflt=y
6583 case "$hostcat" in
6584 nidump*) ;;
6585 '') ;;
6586 *) dflt=n;;
6587 esac
6588 . ./myread
6589 case "$ans" in
6590 y*) hostcat='nidump hosts .';;
6591 *) case "$hostcat" in
6592 nidump*) hostcat='';;
6593 esac
6594 ;;
6595 esac
6596 fi
6597 case "$hostcat" in
6598 nidump*) ;;
6599 *)
6600 case "$hostcat" in
6601 *ypcat*) dflt=y;;
6602 '') if $contains '^\+' /etc/passwd >/dev/null 2>&1; then
6603 dflt=y
6604 else
6605 dflt=n
6606 fi;;
6607 *) dflt=n;;
6608 esac
6609 echo " "
6610 rp='Are you getting the hosts file via yellow pages?'
6611 . ./myread
6612 case "$ans" in
6613 y*) hostcat='ypcat hosts';;
6614 *) hostcat='cat /etc/hosts';;
6615 esac
6616 ;;
6617 esac
6618fi
6619case "$hostcat" in
6620'') test -f /etc/hosts && hostcat='cat /etc/hosts';;
6621esac
6622case "$groupcat" in
6623'') test -f /etc/group && groupcat='cat /etc/group';;
6624esac
6625case "$passcat" in
6626'') test -f /etc/passwd && passcat='cat /etc/passwd';;
6627esac
6628
6629: now get the host name
6630echo " "
6631echo "Figuring out host name..." >&4
6632case "$myhostname" in
6633'') cont=true
6634 echo 'Maybe "hostname" will work...'
6635 if tans=`sh -c hostname 2>&1` ; then
6636 myhostname=$tans
6637 phostname=hostname
6638 cont=''
6639 fi
6640 ;;
6641*) cont='';;
6642esac
6643if $test "$cont"; then
6644 if ./xenix; then
6645 echo 'Oh, dear. Maybe "/etc/systemid" is the key...'
6646 if tans=`cat /etc/systemid 2>&1` ; then
6647 myhostname=$tans
6648 phostname='cat /etc/systemid'
6649 echo "Whadyaknow. Xenix always was a bit strange..."
6650 cont=''
6651 fi
6652 elif $test -r /etc/systemid; then
6653 echo "(What is a non-Xenix system doing with /etc/systemid?)"
6654 fi
6655fi
6656if $test "$cont"; then
6657 echo 'No, maybe "uuname -l" will work...'
6658 if tans=`sh -c 'uuname -l' 2>&1` ; then
6659 myhostname=$tans
6660 phostname='uuname -l'
6661 else
6662 echo 'Strange. Maybe "uname -n" will work...'
6663 if tans=`sh -c 'uname -n' 2>&1` ; then
6664 myhostname=$tans
6665 phostname='uname -n'
6666 else
6667 echo 'Oh well, maybe I can mine it out of whoami.h...'
6668 if tans=`sh -c $contains' sysname $usrinc/whoami.h' 2>&1` ; then
6669 myhostname=`echo "$tans" | $sed 's/^.*"\(.*\)"/\1/'`
6670 phostname="sed -n -e '"'/sysname/s/^.*\"\\(.*\\)\"/\1/{'"' -e p -e q -e '}' <$usrinc/whoami.h"
6671 else
6672 case "$myhostname" in
6673 '') echo "Does this machine have an identity crisis or something?"
6674 phostname='';;
6675 *)
6676 echo "Well, you said $myhostname before..."
6677 phostname='echo $myhostname';;
6678 esac
6679 fi
6680 fi
6681 fi
6682fi
6683: you do not want to know about this
6684set $myhostname
6685myhostname=$1
6686
6687: verify guess
6688if $test "$myhostname" ; then
6689 dflt=y
6690 rp='Your host name appears to be "'$myhostname'".'" Right?"
6691 . ./myread
6692 case "$ans" in
6693 y*) ;;
6694 *) myhostname='';;
6695 esac
6696fi
6697
6698: bad guess or no guess
6699while $test "X$myhostname" = X ; do
6700 dflt=''
6701 rp="Please type the (one word) name of your host:"
6702 . ./myread
6703 myhostname="$ans"
6704done
6705
6706: translate upper to lower if necessary
6707case "$myhostname" in
6708*[A-Z]*)
6709 echo "(Normalizing case in your host name)"
6710 myhostname=`echo $myhostname | ./tr '[A-Z]' '[a-z]'`
6711 ;;
6712esac
6713
6714case "$myhostname" in
6715*.*)
6716 dflt=`expr "X$myhostname" : "X[^.]*\(\..*\)"`
6717 myhostname=`expr "X$myhostname" : "X\([^.]*\)\."`
6718 echo "(Trimming domain name from host name--host name is now $myhostname)"
6719 ;;
6720*) case "$mydomain" in
6721 '')
6722 {
6723 test "X$hostcat" = "Xypcat hosts" &&
6724 ypmatch "$myhostname" hosts 2>/dev/null |\
6725 $sed -e 's/[ ]*#.*//; s/$/ /' > hosts && \
6726 $test -s hosts
6727 } || {
6728 test "X$hostcat" != "X" &&
6729 $hostcat | $sed -n -e "s/[ ]*#.*//; s/\$/ /
6730 /[ ]$myhostname[ . ]/p" > hosts
6731 }
6732 tmp_re="[ . ]"
6733 $test x`$awk "/[0-9].*[ ]$myhostname$tmp_re/ { sum++ }
6734 END { print sum }" hosts` = x1 || tmp_re="[ ]"
6735 dflt=.`$awk "/[0-9].*[ ]$myhostname$tmp_re/ {for(i=2; i<=NF;i++) print \\\$i}" \
6736 hosts | $sort | $uniq | \
6737 $sed -n -e "s/$myhostname\.\([-a-zA-Z0-9_.]\)/\1/p"`
6738 case `$echo X$dflt` in
6739 X*\ *) echo "(Several hosts in /etc/hosts matched hostname)"
6740 dflt=.
6741 ;;
6742 X.) echo "(You do not have fully-qualified names in /etc/hosts)"
6743 ;;
6744 esac
6745 case "$dflt" in
6746 .)
6747 tans=`./loc resolv.conf X /etc /usr/etc`
6748 if $test -f "$tans"; then
6749 echo "(Attempting domain name extraction from $tans)"
6750 dflt=.`$sed -n -e 's/ / /g' \
6751 -e 's/^search *\([^ ]*\).*/\1/p' $tans \
6752 | ./tr '[A-Z]' '[a-z]' 2>/dev/null`
6753 case "$dflt" in
6754 .) dflt=.`$sed -n -e 's/ / /g' \
6755 -e 's/^domain *\([^ ]*\).*/\1/p' $tans \
6756 | ./tr '[A-Z]' '[a-z]' 2>/dev/null`
6757 ;;
6758 esac
6759 fi
6760 ;;
6761 esac
6762 case "$dflt" in
6763 .) echo "(No help from resolv.conf either -- attempting clever guess)"
6764 dflt=.`sh -c domainname 2>/dev/null`
6765 case "$dflt" in
6766 '') dflt='.';;
6767 .nis.*|.yp.*|.main.*) dflt=`echo $dflt | $sed -e 's/^\.[^.]*//'`;;
6768 esac
6769 ;;
6770 esac
6771 case "$dflt" in
6772 .) echo "(Lost all hope -- silly guess then)"
6773 dflt='.uucp'
6774 ;;
6775 esac
6776 $rm -f hosts
6777 ;;
6778 *) dflt="$mydomain";;
6779 esac;;
6780esac
6781echo " "
6782rp="What is your domain name?"
6783. ./myread
6784tans="$ans"
6785case "$ans" in
6786'') ;;
6787.*) ;;
6788*) tans=".$tans";;
6789esac
6790mydomain="$tans"
6791
6792: translate upper to lower if necessary
6793case "$mydomain" in
6794*[A-Z]*)
6795 echo "(Normalizing case in your domain name)"
6796 mydomain=`echo $mydomain | ./tr '[A-Z]' '[a-z]'`
6797 ;;
6798esac
6799
6800: a little sanity check here
6801case "$phostname" in
6802'') ;;
6803*)
6804 case `$phostname | ./tr '[A-Z]' '[a-z]'` in
6805 $myhostname$mydomain|$myhostname) ;;
6806 *)
6807 case "$phostname" in
6808 sed*)
6809 echo "(That doesn't agree with your whoami.h file, by the way.)"
6810 ;;
6811 *)
6812 echo "(That doesn't agree with your $phostname command, by the way.)"
6813 ;;
6814 esac
6815 ;;
6816 esac
6817 ;;
6818esac
6819
6820$cat <<EOM
6821
6822I need to get your e-mail address in Internet format if possible, i.e.
6823something like user@host.domain. Please answer accurately since I have
6824no easy means to double check it. The default value provided below
6825is most probably close to reality but may not be valid from outside
6826your organization...
6827
6828EOM
6829cont=x
6830while test "$cont"; do
6831 case "$cf_email" in
6832 '') dflt="$cf_by@$myhostname$mydomain";;
6833 *) dflt="$cf_email";;
6834 esac
6835 rp='What is your e-mail address?'
6836 . ./myread
6837 cf_email="$ans"
6838 case "$cf_email" in
6839 *@*.*) cont='' ;;
6840 *)
6841 rp='Address does not look like an Internet one. Use it anyway?'
6842 case "$fastread" in
6843 yes) dflt=y ;;
6844 *) dflt=n ;;
6845 esac
6846 . ./myread
6847 case "$ans" in
6848 y*) cont='' ;;
6849 *) echo " " ;;
6850 esac
6851 ;;
6852 esac
6853done
6854
6855$cat <<EOM
6856
6857If you or somebody else will be maintaining perl at your site, please
6858fill in the correct e-mail address here so that they may be contacted
6859if necessary. Currently, the "perlbug" program included with perl
6860will send mail to this address in addition to perlbug@perl.com. You may
6861enter "none" for no administrator.
6862
6863EOM
6864case "$perladmin" in
6865'') dflt="$cf_email";;
6866*) dflt="$perladmin";;
6867esac
6868rp='Perl administrator e-mail address'
6869. ./myread
6870perladmin="$ans"
6871
6872: figure out how to guarantee perl startup
6873case "$startperl" in
6874'')
6875 case "$sharpbang" in
6876 *!)
6877 $cat <<EOH
6878
6879I can use the #! construct to start perl on your system. This will
6880make startup of perl scripts faster, but may cause problems if you
6881want to share those scripts and perl is not in a standard place
6882($binexp/perl) on all your platforms. The alternative is to force
6883a shell by starting the script with a single ':' character.
6884
6885EOH
6886 dflt="$binexp/perl"
6887 rp='What shall I put after the #! to start up perl ("none" to not use #!)?'
6888 . ./myread
6889 case "$ans" in
6890 none) startperl=": # use perl";;
6891 *) startperl="#!$ans"
6892 if $test 30 -lt `echo "$ans" | wc -c`; then
6893 $cat >&4 <<EOM
6894
6895WARNING: Some systems limit the #! command to 32 characters.
6896If you experience difficulty running Perl scripts with #!, try
6897installing Perl in a directory with a shorter pathname.
6898
6899EOM
6900 fi ;;
6901 esac
6902 ;;
6903 *) startperl=": # use perl"
6904 ;;
6905 esac
6906 ;;
6907esac
6908echo "I'll use $startperl to start perl scripts."
6909
6910: figure best path for perl in scripts
6911case "$perlpath" in
6912'')
6913 perlpath="$binexp/perl"
6914 case "$startperl" in
6915 *!*) ;;
6916 *)
6917 $cat <<EOH
6918
6919I will use the "eval 'exec'" idiom to start Perl on your system.
6920I can use the full path of your Perl binary for this purpose, but
6921doing so may cause problems if you want to share those scripts and
6922Perl is not always in a standard place ($binexp/perl).
6923
6924EOH
6925 dflt="$binexp/perl"
6926 rp="What path shall I use in \"eval 'exec'\"?"
6927 . ./myread
6928 perlpath="$ans"
6929 ;;
6930 esac
6931 ;;
6932esac
6933case "$startperl" in
6934*!*) ;;
6935*) echo "I'll use $perlpath in \"eval 'exec'\"" ;;
6936esac
6937
6938: determine where public executable scripts go
6939set scriptdir scriptdir
6940eval $prefixit
6941case "$scriptdir" in
6942'')
6943 dflt="$bin"
6944 : guess some guesses
6945 $test -d /usr/share/scripts && dflt=/usr/share/scripts
6946 $test -d /usr/share/bin && dflt=/usr/share/bin
6947 $test -d /usr/local/script && dflt=/usr/local/script
6948 $test -d /usr/local/scripts && dflt=/usr/local/scripts
6949 $test -d $prefixexp/script && dflt=$prefixexp/script
6950 set dflt
6951 eval $prefixup
6952 ;;
6953*) dflt="$scriptdir"
6954 ;;
6955esac
6956$cat <<EOM
6957
6958Some installations have a separate directory just for executable scripts so
6959that they can mount it across multiple architectures but keep the scripts in
6960one spot. You might, for example, have a subdirectory of /usr/share for this.
6961Or you might just lump your scripts in with all your other executables.
6962
6963EOM
6964fn=d~
6965rp='Where do you keep publicly executable scripts?'
6966. ./getfile
6967if $test "X$ansexp" != "X$scriptdirexp"; then
6968 installscript=''
6969fi
6970scriptdir="$ans"
6971scriptdirexp="$ansexp"
6972: Change installation prefix, if necessary.
6973if $test X"$prefix" != X"$installprefix"; then
6974 installscript=`echo $scriptdirexp | sed "s#^$prefix#$installprefix#"`
6975else
6976 installscript="$scriptdirexp"
6977fi
6978
6979: determine where site specific architecture-dependent libraries go.
6980: sitelib default is /usr/local/lib/perl5/site_perl/$version
6981: sitearch default is /usr/local/lib/perl5/site_perl/$version/$archname
6982: sitelib may have an optional trailing /share.
6983tdflt=`echo $sitelib | $sed 's,/share$,,'`
6984tdflt="$tdflt/$archname"
6985set sitearch sitearch none
6986eval $prefixit
6987case "$sitearch" in
6988'') dflt="$tdflt" ;;
6989*) dflt="$sitearch" ;;
6990esac
6991$cat <<EOM
6992
6993The installation process will also create a directory for
6994architecture-dependent site-specific extensions and modules.
6995
6996EOM
6997fn=nd~+
6998rp='Pathname for the site-specific architecture-dependent library files?'
6999. ./getfile
7000sitearch="$ans"
7001sitearchexp="$ansexp"
7002: Change installation prefix, if necessary.
7003if $test X"$prefix" != X"$installprefix"; then
7004 installsitearch=`echo $sitearchexp | sed "s#^$prefix#$installprefix#"`
7005else
7006 installsitearch="$sitearchexp"
7007fi
7008
7009: determine where add-on public executables go
7010case "$sitebin" in
7011'') dflt=$siteprefix/bin ;;
7012*) dflt=$sitebin ;;
7013esac
7014fn=d~
7015rp='Pathname where the add-on public executables should be installed?'
7016. ./getfile
7017sitebin="$ans"
7018sitebinexp="$ansexp"
7019: Change installation prefix, if necessary.
7020if $test X"$prefix" != X"$installprefix"; then
7021 installsitebin=`echo $sitebinexp | sed "s#^$prefix#$installprefix#"`
7022else
7023 installsitebin="$sitebinexp"
7024fi
7025
7026cat <<EOM
7027
7028Perl can be built to take advantage of long doubles which
7029(if available) may give more accuracy and range for floating point numbers.
7030
7031If this doesn't make any sense to you, just accept the default 'n'.
7032EOM
7033
7034case "$ccflags" in
7035*-DUSE_LONG_DOUBLE*|*-DUSE_MORE_BITS*) uselongdouble="$define" ;;
7036esac
7037
7038case "$uselongdouble" in
7039$define|true|[yY]*) dflt='y';;
7040*) dflt='n';;
7041esac
7042rp='Try to use long doubles if available?'
7043. ./myread
7044case "$ans" in
7045y|Y) val="$define" ;;
7046*) val="$undef" ;;
7047esac
7048set uselongdouble
7049eval $setvar
7050
7051case "$uselongdouble" in
7052true|[yY]*) uselongdouble="$define" ;;
7053esac
7054
7055case "$uselongdouble" in
7056$define)
7057: Look for a hint-file generated 'call-back-unit'. If the
7058: user has specified that long doubles should be used,
7059: we may need to set or change some other defaults.
7060 if $test -f uselongdouble.cbu; then
7061 echo "Your platform has some specific hints for long doubles, using them..."
7062 . ./uselongdouble.cbu
7063 else
7064 $cat <<EOM
7065(Your platform doesn't have any specific hints for long doubles.)
7066EOM
7067 fi
7068 ;;
7069esac
7070
7071cat <<EOM
7072
7073Perl can be built to take advantage of long longs which
7074(if available) may give more range for integer numbers.
7075
7076If this doesn't make any sense to you, just accept the default 'n'.
7077EOM
7078
7079case "$ccflags" in
7080*-DUSE_LONG_LONG*) uselonglong="$define" ;;
7081esac
7082
7083case "$uselonglong" in
7084$define|true|[yY]*) dflt='y';;
7085*) dflt='n';;
7086esac
7087rp='Try to use long longs if available?'
7088. ./myread
7089case "$ans" in
7090y|Y) val="$define" ;;
7091*) val="$undef" ;;
7092esac
7093set uselonglong
7094eval $setvar
7095
7096case "$uselonglong" in
7097true|[yY]*) uselonglong="$define" ;;
7098esac
7099
7100case "$uselonglong" in
7101$define)
7102: Look for a hint-file generated 'call-back-unit'. If the
7103: user has specified that long longs should be used,
7104: we may need to set or change some other defaults.
7105 if $test -f uselonglong.cbu; then
7106 echo "Your platform has some specific hints for long longs, using them..."
7107 . ./uselonglong.cbu
7108 else
7109 $cat <<EOM
7110(Your platform doesn't have any specific hints for long longs.)
7111EOM
7112 fi
7113 ;;
7114esac
7115
7116cat <<EOM
7117
7118Previous version of $package used the standard IO mechanisms as defined
7119in <stdio.h>. Versions 5.003_02 and later of perl allow alternate IO
7120mechanisms via a "PerlIO" abstraction, but the stdio mechanism is still
7121the default. This abstraction layer can use AT&T's sfio (if you already
7122have sfio installed) or regular stdio. Using PerlIO with sfio may cause
7123problems with some extension modules. Using PerlIO with stdio is safe,
7124but it is slower than plain stdio and therefore is not the default.
7125
7126If this doesn't make any sense to you, just accept the default 'n'.
7127EOM
7128case "$useperlio" in
7129$define|true|[yY]*) dflt='y';;
7130*) dflt='n';;
7131esac
7132rp='Use the experimental PerlIO abstraction layer?'
7133. ./myread
7134case "$ans" in
7135y|Y)
7136 val="$define"
7137 ;;
7138*)
7139 echo "Ok, doing things the stdio way"
7140 val="$undef"
7141 ;;
7142esac
7143set useperlio
7144eval $setvar
7145
7146case "$vendorprefix" in
7147'') d_vendorbin="$undef"
7148 vendorbin=''
7149 vendorbinexp=''
7150 ;;
7151*) d_vendorbin="$define"
7152 : determine where vendor-supplied executables go.
7153 dflt=$vendorprefix/bin
7154 fn=d~+
7155 rp='Pathname for the vendor-supplied executables directory?'
7156 . ./getfile
7157 vendorbin="$ans"
7158 vendorbinexp="$ansexp"
7159 : Change installation prefix, if necessary.
7160 if $test X"$prefix" != X"$installprefix"; then
7161 installvendorbin=`echo $vendorbinexp | $sed "s#^$prefix#$installprefix#"`
7162 else
7163 installvendorbin="$vendorbinexp"
7164 fi
7165 ;;
7166esac
7167
7168: check for length of double
7169echo " "
7170case "$doublesize" in
7171'')
7172 $echo $n "Checking to see how big your double precision numbers are...$c" >&4
7173 $cat >try.c <<'EOCP'
7174#include <stdio.h>
7175int main()
7176{
7177 printf("%d\n", (int)sizeof(double));
7178 exit(0);
7179}
7180EOCP
7181 set try
7182 if eval $compile_ok; then
7183 doublesize=`./try`
7184 $echo " $doublesize bytes." >&4
7185 else
7186 dflt='8'
7187 echo "(I can't seem to compile the test program. Guessing...)"
7188 rp="What is the size of a double precision number (in bytes)?"
7189 . ./myread
7190 doublesize="$ans"
7191 fi
7192 ;;
7193esac
7194$rm -f try.c try
7195
7196: check for long doubles
7197echo " "
7198$echo $n "Checking to see if your system supports long double..." $c >&4
7199echo 'int main() { long double x = 7.0; }' > try.c
7200set try
7201if eval $compile; then
7202 val="$define"
7203 echo " Yes, it does." >&4
7204else
7205 val="$undef"
7206 echo " No, it doesn't." >&4
7207fi
7208$rm try.*
7209set d_longdbl
7210eval $setvar
7211
7212: check for length of long double
7213case "${d_longdbl}${longdblsize}" in
7214$define)
7215 echo " "
7216 $echo $n "Checking to see how big your long doubles are..." $c >&4
7217 $cat >try.c <<'EOCP'
7218#include <stdio.h>
7219int main()
7220{
7221 printf("%d\n", sizeof(long double));
7222}
7223EOCP
7224 set try
7225 set try
7226 if eval $compile; then
7227 longdblsize=`./try$exe_ext`
7228 $echo " $longdblsize bytes." >&4
7229 else
7230 dflt='8'
7231 echo " "
7232 echo "(I can't seem to compile the test program. Guessing...)" >&4
7233 rp="What is the size of a long double (in bytes)?"
7234 . ./myread
7235 longdblsize="$ans"
7236 fi
7237 if $test "X$doublesize" = "X$longdblsize"; then
7238 echo "(That isn't any different from an ordinary double.)"
7239 fi
7240 ;;
7241esac
7242$rm -f try.* try
7243
7244: Check how to convert floats to strings.
7245if test "X$d_Gconvert" = X; then
7246 echo " "
7247 echo "Checking for an efficient way to convert floats to strings."
7248 $cat >try.c <<EOP
7249#ifdef TRY_gconvert
7250#define Gconvert(x,n,t,b) gconvert((x),(n),(t),(b))
7251char *myname = "gconvert";
7252#endif
7253#ifdef TRY_gcvt
7254#define Gconvert(x,n,t,b) gcvt((x),(n),(b))
7255char *myname = "gcvt";
7256#endif
7257#ifdef TRY_qgcvt
7258#define Gconvert(x,n,t,b) qgcvt((x),(n),(b))
7259char *myname = "qgcvt";
7260#define DOUBLETYPE long double
7261#endif
7262#ifdef TRY_sprintf
7263#define Gconvert(x,n,t,b) sprintf((b),"%.*g",(n),(x))
7264char *myname = "sprintf";
7265#endif
7266
7267#ifndef DOUBLETYPE
7268#define DOUBLETYPE double
7269#endif
7270
7271#include <stdio.h>
7272
7273#ifdef I_STDLIB
7274#include <stdlib.h>
7275#endif
7276
7277int
7278checkit(expect, got)
7279char *expect;
7280char *got;
7281{
7282 if (strcmp(expect, got)) {
7283 printf("%s oddity: Expected %s, got %s\n",
7284 myname, expect, got);
7285 exit(1);
7286 }
7287}
7288
7289int main()
7290{
7291 char buf[64];
7292 buf[63] = '\0';
7293
7294 /* This must be 1st test on (which?) platform */
7295 /* Alan Burlison <AlanBurlsin@unn.unisys.com> */
7296 Gconvert((DOUBLETYPE)0.1, 8, 0, buf);
7297 checkit("0.1", buf);
7298
7299 Gconvert((DOUBLETYPE)1.0, 8, 0, buf);
7300 checkit("1", buf);
7301
7302 Gconvert((DOUBLETYPE)0.0, 8, 0, buf);
7303 checkit("0", buf);
7304
7305 Gconvert((DOUBLETYPE)-1.0, 8, 0, buf);
7306 checkit("-1", buf);
7307
7308 /* Some Linux gcvt's give 1.e+5 here. */
7309 Gconvert((DOUBLETYPE)100000.0, 8, 0, buf);
7310 checkit("100000", buf);
7311
7312 /* Some Linux gcvt's give -1.e+5 here. */
7313 Gconvert((DOUBLETYPE)-100000.0, 8, 0, buf);
7314 checkit("-100000", buf);
7315
7316 exit(0);
7317}
7318EOP
7319 case "$d_Gconvert" in
7320 gconvert*) xxx_list='gconvert gcvt sprintf' ;;
7321 gcvt*) xxx_list='gcvt gconvert sprintf' ;;
7322 sprintf*) xxx_list='sprintf gconvert gcvt' ;;
7323 *) xxx_list='gconvert gcvt sprintf' ;;
7324 esac
7325
7326 case "$d_longdbl$uselongdouble" in
7327 definedefine) xxx_list="`echo $xxx_list|sed 's/gcvt/qgcvt gcvt/'`" ;;
7328 esac
7329
7330 for xxx_convert in $xxx_list; do
7331 echo "Trying $xxx_convert..."
7332 $rm -f try try$_o
7333 set try -DTRY_$xxx_convert
7334 if eval $compile; then
7335 echo "$xxx_convert() found." >&4
7336 if ./try; then
7337 echo "I'll use $xxx_convert to convert floats into a string." >&4
7338 break;
7339 else
7340 echo "...But $xxx_convert didn't work as I expected."
7341 fi
7342 else
7343 echo "$xxx_convert NOT found." >&4
7344 fi
7345 done
7346
7347 case "$xxx_convert" in
7348 gconvert) d_Gconvert='gconvert((x),(n),(t),(b))' ;;
7349 gcvt) d_Gconvert='gcvt((x),(n),(b))' ;;
7350 qgcvt) d_Gconvert='qgcvt((x),(n),(b))' ;;
7351 *) d_Gconvert='sprintf((b),"%.*g",(n),(x))' ;;
7352 esac
7353fi
7354
7355echo " "
7356
7357if $test X"$d_longdbl" = X"$define"; then
7358
7359echo "Checking how to print long doubles..." >&4
7360
7361if $test X"$sPRIfldbl" = X -a X"$doublesize" = X"$longdblsize"; then
7362 $cat >try.c <<'EOCP'
7363#include <sys/types.h>
7364#include <stdio.h>
7365int main() {
7366 double d = 123.456;
7367 printf("%.3f\n", d);
7368}
7369EOCP
7370 set try
7371 if eval $compile; then
7372 yyy=`./try$exe_ext`
7373 case "$yyy" in
7374 123.456)
7375 sPRIfldbl='"f"'; sPRIgldbl='"g"'; sPRIeldbl='"e"';
7376 sPRIFldbl='"F"'; sPRIGldbl='"G"'; sPRIEldbl='"E"';
7377 echo "We will use %f."
7378 ;;
7379 esac
7380 fi
7381fi
7382
7383if $test X"$sPRIfldbl" = X; then
7384 $cat >try.c <<'EOCP'
7385#include <sys/types.h>
7386#include <stdio.h>
7387int main() {
7388 long double d = 123.456;
7389 printf("%.3llf\n", d);
7390}
7391EOCP
7392 set try
7393 if eval $compile; then
7394 yyy=`./try$exe_ext`
7395 case "$yyy" in
7396 123.456)
7397 sPRIfldbl='"llf"'; sPRIgldbl='"llg"'; sPRIeldbl='"lle"';
7398 sPRIFldbl='"llF"'; sPRIGldbl='"llG"'; sPRIEldbl='"llE"';
7399 echo "We will use %llf."
7400 ;;
7401 esac
7402 fi
7403fi
7404
7405if $test X"$sPRIfldbl" = X; then
7406 $cat >try.c <<'EOCP'
7407#include <sys/types.h>
7408#include <stdio.h>
7409int main() {
7410 long double d = 123.456;
7411 printf("%.3Lf\n", d);
7412}
7413EOCP
7414 set try
7415 if eval $compile; then
7416 yyy=`./try$exe_ext`
7417 case "$yyy" in
7418 123.456)
7419 sPRIfldbl='"Lf"'; sPRIgldbl='"Lg"'; sPRIeldbl='"Le"';
7420 sPRIFldbl='"LF"'; sPRIGldbl='"LG"'; sPRIEldbl='"LE"';
7421 echo "We will use %Lf."
7422 ;;
7423 esac
7424 fi
7425fi
7426
7427if $test X"$sPRIfldbl" = X; then
7428 $cat >try.c <<'EOCP'
7429#include <sys/types.h>
7430#include <stdio.h>
7431int main() {
7432 long double d = 123.456;
7433 printf("%.3lf\n", d);
7434}
7435EOCP
7436 set try
7437 if eval $compile; then
7438 yyy=`./try$exe_ext`
7439 case "$yyy" in
7440 123.456)
7441 sPRIfldbl='"lf"'; sPRIgldbl='"lg"'; sPRIeldbl='"le"';
7442 sPRIFldbl='"lF"'; sPRIGldbl='"lG"'; sPRIEldbl='"lE"';
7443 echo "We will use %lf."
7444 ;;
7445 esac
7446 fi
7447fi
7448
7449if $test X"$sPRIfldbl" = X; then
7450 echo "Cannot figure out how to print long doubles." >&4
7451fi
7452
7453$rm -f try try.*
7454
7455fi # d_longdbl
7456
7457case "$sPRIfldbl" in
7458'') d_PRIfldbl="$undef"; d_PRIgldbl="$undef"; d_PRIeldbl="$undef";
7459 d_PRIFldbl="$undef"; d_PRIGldbl="$undef"; d_PRIEldbl="$undef";
7460 ;;
7461*) d_PRIfldbl="$define"; d_PRIgldbl="$define"; d_PRIeldbl="$define";
7462 d_PRIFldbl="$define"; d_PRIGldbl="$define"; d_PRIEldbl="$define";
7463 ;;
7464esac
7465
7466: Initialize h_fcntl
7467h_fcntl=false
7468
7469: Initialize h_sysfile
7470h_sysfile=false
7471
7472: access call always available on UNIX
7473set access d_access
7474eval $inlibc
7475
7476: locate the flags for 'access()'
7477case "$d_access" in
7478"$define")
7479 echo " "
7480 $cat >access.c <<'EOCP'
7481#include <sys/types.h>
7482#ifdef I_FCNTL
7483#include <fcntl.h>
7484#endif
7485#ifdef I_SYS_FILE
7486#include <sys/file.h>
7487#endif
7488#ifdef I_UNISTD
7489#include <unistd.h>
7490#endif
7491int main() {
7492 exit(R_OK);
7493}
7494EOCP
7495 : check sys/file.h first, no particular reason here
7496 if $test `./findhdr sys/file.h` && \
7497 $cc $cppflags -DI_SYS_FILE -o access access.c >/dev/null 2>&1 ; then
7498 h_sysfile=true;
7499 echo "<sys/file.h> defines the *_OK access constants." >&4
7500 elif $test `./findhdr fcntl.h` && \
7501 $cc $cppflags -DI_FCNTL -o access access.c >/dev/null 2>&1 ; then
7502 h_fcntl=true;
7503 echo "<fcntl.h> defines the *_OK access constants." >&4
7504 elif $test `./findhdr unistd.h` && \
7505 $cc $cppflags -DI_UNISTD -o access access.c >/dev/null 2>&1 ; then
7506 echo "<unistd.h> defines the *_OK access constants." >&4
7507 else
7508 echo "I can't find the four *_OK access constants--I'll use mine." >&4
7509 fi
7510 ;;
7511esac
7512$rm -f access*
7513
7514: see if accessx exists
7515set accessx d_accessx
7516eval $inlibc
7517
7518: see if alarm exists
7519set alarm d_alarm
7520eval $inlibc
7521
7522: see if atolf exists
7523set atolf d_atolf
7524eval $inlibc
7525
7526: see if atoll exists
7527set atoll d_atoll
7528eval $inlibc
7529
7530: Look for GNU-cc style attribute checking
7531echo " "
7532echo "Checking whether your compiler can handle __attribute__ ..." >&4
7533$cat >attrib.c <<'EOCP'
7534#include <stdio.h>
7535void croak (char* pat,...) __attribute__((format(printf,1,2),noreturn));
7536EOCP
7537if $cc $ccflags -c attrib.c >attrib.out 2>&1 ; then
7538 if $contains 'warning' attrib.out >/dev/null 2>&1; then
7539 echo "Your C compiler doesn't fully support __attribute__."
7540 val="$undef"
7541 else
7542 echo "Your C compiler supports __attribute__."
7543 val="$define"
7544 fi
7545else
7546 echo "Your C compiler doesn't seem to understand __attribute__ at all."
7547 val="$undef"
7548fi
7549set d_attribut
7550eval $setvar
7551$rm -f attrib*
7552
7553: see if bcmp exists
7554set bcmp d_bcmp
7555eval $inlibc
7556
7557: see if bcopy exists
7558set bcopy d_bcopy
7559eval $inlibc
7560
7561: see if this is a unistd.h system
7562set unistd.h i_unistd
7563eval $inhdr
7564
7565: see if getpgrp exists
7566set getpgrp d_getpgrp
7567eval $inlibc
7568
7569case "$d_getpgrp" in
7570"$define")
7571 echo " "
7572 echo "Checking to see which flavor of getpgrp is in use..."
7573 $cat >set.c <<EOP
7574#$i_unistd I_UNISTD
7575#include <sys/types.h>
7576#ifdef I_UNISTD
7577# include <unistd.h>
7578#endif
7579int main()
7580{
7581 if (getuid() == 0) {
7582 printf("(I see you are running Configure as super-user...)\n");
7583 setuid(1);
7584 }
7585#ifdef TRY_BSD_PGRP
7586 if (getpgrp(1) == 0)
7587 exit(0);
7588#else
7589 if (getpgrp() > 0)
7590 exit(0);
7591#endif
7592 exit(1);
7593}
7594EOP
7595 if $cc -DTRY_BSD_PGRP $ccflags $ldflags -o set set.c $libs >/dev/null 2>&1 && ./set; then
7596 echo "You have to use getpgrp(pid) instead of getpgrp()." >&4
7597 val="$define"
7598 elif $cc $ccflags $ldflags -o set set.c $libs >/dev/null 2>&1 && ./set; then
7599 echo "You have to use getpgrp() instead of getpgrp(pid)." >&4
7600 val="$undef"
7601 else
7602 echo "I can't seem to compile and run the test program."
7603 if ./usg; then
7604 xxx="a USG one, i.e. you use getpgrp()."
7605 else
7606 # SVR4 systems can appear rather BSD-ish.
7607 case "$i_unistd" in
7608 $undef)
7609 xxx="a BSD one, i.e. you use getpgrp(pid)."
7610 val="$define"
7611 ;;
7612 $define)
7613 xxx="probably a USG one, i.e. you use getpgrp()."
7614 val="$undef"
7615 ;;
7616 esac
7617 fi
7618 echo "Assuming your getpgrp is $xxx" >&4
7619 fi
7620 ;;
7621*) val="$undef";;
7622esac
7623set d_bsdgetpgrp
7624eval $setvar
7625$rm -f set set.c
7626
7627: see if setpgrp exists
7628set setpgrp d_setpgrp
7629eval $inlibc
7630
7631case "$d_setpgrp" in
7632"$define")
7633 echo " "
7634 echo "Checking to see which flavor of setpgrp is in use..."
7635 $cat >set.c <<EOP
7636#$i_unistd I_UNISTD
7637#include <sys/types.h>
7638#ifdef I_UNISTD
7639# include <unistd.h>
7640#endif
7641int main()
7642{
7643 if (getuid() == 0) {
7644 printf("(I see you are running Configure as super-user...)\n");
7645 setuid(1);
7646 }
7647#ifdef TRY_BSD_PGRP
7648 if (-1 == setpgrp(1, 1))
7649 exit(0);
7650#else
7651 if (setpgrp() != -1)
7652 exit(0);
7653#endif
7654 exit(1);
7655}
7656EOP
7657 if $cc -DTRY_BSD_PGRP $ccflags $ldflags -o set set.c $libs >/dev/null 2>&1 && ./set; then
7658 echo 'You have to use setpgrp(pid,pgrp) instead of setpgrp().' >&4
7659 val="$define"
7660 elif $cc $ccflags $ldflags -o set set.c $libs >/dev/null 2>&1 && ./set; then
7661 echo 'You have to use setpgrp() instead of setpgrp(pid,pgrp).' >&4
7662 val="$undef"
7663 else
7664 echo "(I can't seem to compile and run the test program.)"
7665 if ./usg; then
7666 xxx="a USG one, i.e. you use setpgrp()."
7667 else
7668 # SVR4 systems can appear rather BSD-ish.
7669 case "$i_unistd" in
7670 $undef)
7671 xxx="a BSD one, i.e. you use setpgrp(pid,pgrp)."
7672 val="$define"
7673 ;;
7674 $define)
7675 xxx="probably a USG one, i.e. you use setpgrp()."
7676 val="$undef"
7677 ;;
7678 esac
7679 fi
7680 echo "Assuming your setpgrp is $xxx" >&4
7681 fi
7682 ;;
7683*) val="$undef";;
7684esac
7685set d_bsdsetpgrp
7686eval $setvar
7687$rm -f set set.c
7688: see if bzero exists
7689set bzero d_bzero
7690eval $inlibc
7691
7692: see if signal is declared as pointer to function returning int or void
7693echo " "
7694xxx=`./findhdr signal.h`
7695$test "$xxx" && $cppstdin $cppminus $cppflags < $xxx >$$.tmp 2>/dev/null
7696if $contains 'int.*\*[ ]*signal' $$.tmp >/dev/null 2>&1 ; then
7697 echo "You have int (*signal())() instead of void." >&4
7698 val="$undef"
7699elif $contains 'void.*\*[ ]*signal' $$.tmp >/dev/null 2>&1 ; then
7700 echo "You have void (*signal())()." >&4
7701 val="$define"
7702elif $contains 'extern[ ]*[(\*]*signal' $$.tmp >/dev/null 2>&1 ; then
7703 echo "You have int (*signal())() instead of void." >&4
7704 val="$undef"
7705elif $contains 'void.*\*.*sig' $$.tmp >/dev/null 2>&1 ; then
7706 echo "You have void (*signal())()." >&4
7707 val="$define"
7708else
7709 case "$d_voidsig" in
7710 '')
7711 echo "I can't determine whether signal handler returns void or int..." >&4
7712 dflt=void
7713 rp="What type does your signal handler return?"
7714 . ./myread
7715 case "$ans" in
7716 v*) val="$define";;
7717 *) val="$undef";;
7718 esac;;
7719 "$define")
7720 echo "As you already told me, signal handler returns void." >&4
7721 val="$define"
7722 ;;
7723 *) echo "As you already told me, signal handler returns int." >&4
7724 val="$undef"
7725 ;;
7726 esac
7727fi
7728set d_voidsig
7729eval $setvar
7730case "$d_voidsig" in
7731"$define") signal_t="void";;
7732*) signal_t="int";;
7733esac
7734$rm -f $$.tmp
7735
7736: check for ability to cast large floats to 32-bit ints.
7737echo " "
7738echo 'Checking whether your C compiler can cast large floats to int32.' >&4
7739if $test "$intsize" -ge 4; then
7740 xxx=int
7741else
7742 xxx=long
7743fi
7744$cat >try.c <<EOCP
7745#include <stdio.h>
7746#include <sys/types.h>
7747#include <signal.h>
7748$signal_t blech(s) int s; { exit(3); }
7749int main()
7750{
7751 $xxx i32;
7752 double f, g;
7753 int result = 0;
7754 char str[16];
7755 signal(SIGFPE, blech);
7756
7757 /* Don't let compiler optimize the test away. Store the number
7758 in a writable string for gcc to pass to sscanf under HP/UX.
7759 */
7760 sprintf(str, "2147483647");
7761 sscanf(str, "%lf", &f); /* f = (double) 0x7fffffff; */
7762 g = 10 * f;
7763 i32 = ($xxx) g;
7764
7765 /* x86 processors will probably give 0x8000 0000, which is a
7766 sign change. We don't want that. We want to mimic SPARC
7767 behavior here, which is to preserve the sign and give
7768 back 0x7fff ffff.
7769 */
7770 if (i32 != ($xxx) f)
7771 result |= 1;
7772 exit(result);
7773}
7774EOCP
7775set try
7776if eval $compile_ok; then
7777 ./try
7778 yyy=$?
7779else
7780 echo "(I can't seem to compile the test program--assuming it can't)"
7781 yyy=1
7782fi
7783case "$yyy" in
77840) val="$define"
7785 echo "Yup, it can."
7786 ;;
7787*) val="$undef"
7788 echo "Nope, it can't."
7789 ;;
7790esac
7791set d_casti32
7792eval $setvar
7793$rm -f try try.*
7794
7795: check for ability to cast negative floats to unsigned
7796echo " "
7797echo 'Checking whether your C compiler can cast negative float to unsigned.' >&4
7798$cat >try.c <<EOCP
7799#include <stdio.h>
7800#include <sys/types.h>
7801#include <signal.h>
7802$signal_t blech(s) int s; { exit(7); }
7803$signal_t blech_in_list(s) int s; { exit(4); }
7804unsigned long dummy_long(p) unsigned long p; { return p; }
7805unsigned int dummy_int(p) unsigned int p; { return p; }
7806unsigned short dummy_short(p) unsigned short p; { return p; }
7807int main()
7808{
7809 double f;
7810 unsigned long along;
7811 unsigned int aint;
7812 unsigned short ashort;
7813 int result = 0;
7814 char str[16];
7815
7816 /* Frustrate gcc-2.7.2's optimizer which failed this test with
7817 a direct f = -123. assignment. gcc-2.8.0 reportedly
7818 optimized the whole file away
7819 */
7820 /* Store the number in a writable string for gcc to pass to
7821 sscanf under HP/UX.
7822 */
7823 sprintf(str, "-123");
7824 sscanf(str, "%lf", &f); /* f = -123.; */
7825
7826 signal(SIGFPE, blech);
7827 along = (unsigned long)f;
7828 aint = (unsigned int)f;
7829 ashort = (unsigned short)f;
7830 if (along != (unsigned long)-123)
7831 result |= 1;
7832 if (aint != (unsigned int)-123)
7833 result |= 1;
7834 if (ashort != (unsigned short)-123)
7835 result |= 1;
7836 sprintf(str, "1073741824.");
7837 sscanf(str, "%lf", &f); /* f = (double)0x40000000; */
7838 f = f + f;
7839 along = 0;
7840 along = (unsigned long)f;
7841 if (along != 0x80000000)
7842 result |= 2;
7843 f -= 1.;
7844 along = 0;
7845 along = (unsigned long)f;
7846 if (along != 0x7fffffff)
7847 result |= 1;
7848 f += 2.;
7849 along = 0;
7850 along = (unsigned long)f;
7851 if (along != 0x80000001)
7852 result |= 2;
7853 if (result)
7854 exit(result);
7855 signal(SIGFPE, blech_in_list);
7856 sprintf(str, "123.");
7857 sscanf(str, "%lf", &f); /* f = 123.; */
7858 along = dummy_long((unsigned long)f);
7859 aint = dummy_int((unsigned int)f);
7860 ashort = dummy_short((unsigned short)f);
7861 if (along != (unsigned long)123)
7862 result |= 4;
7863 if (aint != (unsigned int)123)
7864 result |= 4;
7865 if (ashort != (unsigned short)123)
7866 result |= 4;
7867 exit(result);
7868
7869}
7870EOCP
7871set try
7872if eval $compile_ok; then
7873 ./try
7874 castflags=$?
7875else
7876 echo "(I can't seem to compile the test program--assuming it can't)"
7877 castflags=7
7878fi
7879case "$castflags" in
78800) val="$define"
7881 echo "Yup, it can."
7882 ;;
7883*) val="$undef"
7884 echo "Nope, it can't."
7885 ;;
7886esac
7887set d_castneg
7888eval $setvar
7889$rm -f try.*
7890
7891: see if vprintf exists
7892echo " "
7893if set vprintf val -f d_vprintf; eval $csym; $val; then
7894 echo 'vprintf() found.' >&4
7895 val="$define"
7896 $cat >vprintf.c <<'EOF'
7897#include <varargs.h>
7898
7899int main() { xxx("foo"); }
7900
7901xxx(va_alist)
7902va_dcl
7903{
7904 va_list args;
7905 char buf[10];
7906
7907 va_start(args);
7908 exit((unsigned long)vsprintf(buf,"%s",args) > 10L);
7909}
7910EOF
7911 set vprintf
7912 if eval $compile && ./vprintf; then
7913 echo "Your vsprintf() returns (int)." >&4
7914 val2="$undef"
7915 else
7916 echo "Your vsprintf() returns (char*)." >&4
7917 val2="$define"
7918 fi
7919else
7920 echo 'vprintf() NOT found.' >&4
7921 val="$undef"
7922 val2="$undef"
7923fi
7924set d_vprintf
7925eval $setvar
7926val=$val2
7927set d_charvspr
7928eval $setvar
7929
7930: see if chown exists
7931set chown d_chown
7932eval $inlibc
7933
7934: see if chroot exists
7935set chroot d_chroot
7936eval $inlibc
7937
7938: see if chsize exists
7939set chsize d_chsize
7940eval $inlibc
7941
7942: check for const keyword
7943echo " "
7944echo 'Checking to see if your C compiler knows about "const"...' >&4
7945$cat >const.c <<'EOCP'
7946typedef struct spug { int drokk; } spug;
7947int main()
7948{
7949 const char *foo;
7950 const spug y;
7951}
7952EOCP
7953if $cc -c $ccflags const.c >/dev/null 2>&1 ; then
7954 val="$define"
7955 echo "Yup, it does."
7956else
7957 val="$undef"
7958 echo "Nope, it doesn't."
7959fi
7960set d_const
7961eval $setvar
7962
7963: see if crypt exists
7964echo " "
7965if set crypt val -f d_crypt; eval $csym; $val; then
7966 echo 'crypt() found.' >&4
7967 val="$define"
7968 cryptlib=''
7969else
7970 cryptlib=`./loc Slibcrypt$_a "" $xlibpth`
7971 if $test -z "$cryptlib"; then
7972 cryptlib=`./loc Mlibcrypt$_a "" $xlibpth`
7973 else
7974 cryptlib=-lcrypt
7975 fi
7976 if $test -z "$cryptlib"; then
7977 cryptlib=`./loc Llibcrypt$_a "" $xlibpth`
7978 else
7979 cryptlib=-lcrypt
7980 fi
7981 if $test -z "$cryptlib"; then
7982 cryptlib=`./loc libcrypt$_a "" $libpth`
7983 else
7984 cryptlib=-lcrypt
7985 fi
7986 if $test -z "$cryptlib"; then
7987 echo 'crypt() NOT found.' >&4
7988 val="$undef"
7989 else
7990 val="$define"
7991 fi
7992fi
7993set d_crypt
7994eval $setvar
7995
7996: get csh whereabouts
7997case "$csh" in
7998'csh') val="$undef" ;;
7999*) val="$define" ;;
8000esac
8001set d_csh
8002eval $setvar
8003: Respect a hint or command line value for full_csh.
8004case "$full_csh" in
8005'') full_csh=$csh ;;
8006esac
8007
8008: see if cuserid exists
8009set cuserid d_cuserid
8010eval $inlibc
8011
8012: see if this is a limits.h system
8013set limits.h i_limits
8014eval $inhdr
8015
8016: see if this is a float.h system
8017set float.h i_float
8018eval $inhdr
8019
8020: See if number of significant digits in a double precision number is known
8021echo " "
8022$cat >dbl_dig.c <<EOM
8023#$i_limits I_LIMITS
8024#$i_float I_FLOAT
8025#ifdef I_LIMITS
8026#include <limits.h>
8027#endif
8028#ifdef I_FLOAT
8029#include <float.h>
8030#endif
8031#ifdef DBL_DIG
8032printf("Contains DBL_DIG");
8033#endif
8034EOM
8035$cppstdin $cppflags $cppminus < dbl_dig.c >dbl_dig.E 2>/dev/null
8036if $contains 'DBL_DIG' dbl_dig.E >/dev/null 2>&1; then
8037 echo "DBL_DIG found." >&4
8038 val="$define"
8039else
8040 echo "DBL_DIG NOT found." >&4
8041 val="$undef"
8042fi
8043$rm -f dbl_dig.?
8044set d_dbl_dig
8045eval $setvar
8046
8047: see if difftime exists
8048set difftime d_difftime
8049eval $inlibc
8050
8051: see if this is a dirent system
8052echo " "
8053if xinc=`./findhdr dirent.h`; $test "$xinc"; then
8054 val="$define"
8055 echo "<dirent.h> found." >&4
8056else
8057 val="$undef"
8058 if xinc=`./findhdr sys/dir.h`; $test "$xinc"; then
8059 echo "<sys/dir.h> found." >&4
8060 echo " "
8061 else
8062 xinc=`./findhdr sys/ndir.h`
8063 fi
8064 echo "<dirent.h> NOT found." >&4
8065fi
8066set i_dirent
8067eval $setvar
8068
8069: Look for type of directory structure.
8070echo " "
8071$cppstdin $cppflags $cppminus < "$xinc" > try.c
8072
8073case "$direntrytype" in
8074''|' ')
8075 case "$i_dirent" in
8076 $define) guess1='struct dirent' ;;
8077 *) guess1='struct direct' ;;
8078 esac
8079 ;;
8080*) guess1="$direntrytype"
8081 ;;
8082esac
8083
8084case "$guess1" in
8085'struct dirent') guess2='struct direct' ;;
8086*) guess2='struct dirent' ;;
8087esac
8088
8089if $contains "$guess1" try.c >/dev/null 2>&1; then
8090 direntrytype="$guess1"
8091 echo "Your directory entries are $direntrytype." >&4
8092elif $contains "$guess2" try.c >/dev/null 2>&1; then
8093 direntrytype="$guess2"
8094 echo "Your directory entries seem to be $direntrytype." >&4
8095else
8096 echo "I don't recognize your system's directory entries." >&4
8097 rp="What type is used for directory entries on this system?"
8098 dflt="$guess1"
8099 . ./myread
8100 direntrytype="$ans"
8101fi
8102$rm -f try.c
8103
8104
8105: see if the directory entry stores field length
8106echo " "
8107$cppstdin $cppflags $cppminus < "$xinc" > try.c
8108if $contains 'd_namlen' try.c >/dev/null 2>&1; then
8109 echo "Good, your directory entry keeps length information in d_namlen." >&4
8110 val="$define"
8111else
8112 echo "Your directory entry does not know about the d_namlen field." >&4
8113 val="$undef"
8114fi
8115set d_dirnamlen
8116eval $setvar
8117$rm -f try.c
8118
8119: see if dlerror exists
8120xxx_runnm="$runnm"
8121runnm=false
8122set dlerror d_dlerror
8123eval $inlibc
8124runnm="$xxx_runnm"
8125
8126: see if dlfcn is available
8127set dlfcn.h i_dlfcn
8128eval $inhdr
8129
8130case "$usedl" in
8131$define|y|true)
8132 $cat << EOM
8133
8134On a few systems, the dynamically loaded modules that perl generates and uses
8135will need a different extension than shared libs. The default will probably
8136be appropriate.
8137
8138EOM
8139 case "$dlext" in
8140 '') dflt="$so" ;;
8141 *) dflt="$dlext" ;;
8142 esac
8143 rp='What is the extension of dynamically loaded modules'
8144 . ./myread
8145 dlext="$ans"
8146 ;;
8147*)
8148 dlext="none"
8149 ;;
8150esac
8151
8152: Check if dlsym need a leading underscore
8153echo " "
8154val="$undef"
8155
8156case "$dlsrc" in
8157dl_dlopen.xs)
8158 echo "Checking whether your dlsym() needs a leading underscore ..." >&4
8159 $cat >dyna.c <<'EOM'
8160fred () { }
8161EOM
8162
8163$cat >fred.c<<EOM
8164
8165#include <stdio.h>
8166#$i_dlfcn I_DLFCN
8167#ifdef I_DLFCN
8168#include <dlfcn.h> /* the dynamic linker include file for Sunos/Solaris */
8169#else
8170#include <sys/types.h>
8171#include <nlist.h>
8172#include <link.h>
8173#endif
8174
8175extern int fred() ;
8176
8177int main()
8178{
8179 void * handle ;
8180 void * symbol ;
8181#ifndef RTLD_LAZY
8182 int mode = 1 ;
8183#else
8184 int mode = RTLD_LAZY ;
8185#endif
8186 handle = dlopen("./dyna.$dlext", mode) ;
8187 if (handle == NULL) {
8188 printf ("1\n") ;
8189 fflush (stdout) ;
8190 exit(0);
8191 }
8192 symbol = dlsym(handle, "fred") ;
8193 if (symbol == NULL) {
8194 /* try putting a leading underscore */
8195 symbol = dlsym(handle, "_fred") ;
8196 if (symbol == NULL) {
8197 printf ("2\n") ;
8198 fflush (stdout) ;
8199 exit(0);
8200 }
8201 printf ("3\n") ;
8202 }
8203 else
8204 printf ("4\n") ;
8205 fflush (stdout) ;
8206 exit(0);
8207}
8208EOM
8209 : Call the object file tmp-dyna.o in case dlext=o.
8210 if $cc $ccflags $cccdlflags -c dyna.c > /dev/null 2>&1 &&
8211 mv dyna${_o} tmp-dyna${_o} > /dev/null 2>&1 &&
8212 $ld $lddlflags -o dyna.$dlext tmp-dyna${_o} > /dev/null 2>&1 &&
8213 $cc $ccflags -o fred $ldflags $cccdlflags $ccdlflags fred.c $libs > /dev/null 2>&1; then
8214 xxx=`./fred`
8215 case $xxx in
8216 1) echo "Test program failed using dlopen." >&4
8217 echo "Perhaps you should not use dynamic loading." >&4;;
8218 2) echo "Test program failed using dlsym." >&4
8219 echo "Perhaps you should not use dynamic loading." >&4;;
8220 3) echo "dlsym needs a leading underscore" >&4
8221 val="$define" ;;
8222 4) echo "dlsym doesn't need a leading underscore." >&4;;
8223 esac
8224 else
8225 echo "I can't compile and run the test program." >&4
8226 echo "I'm guessing that dlsym doesn't need a leading underscore." >&4
8227 fi
8228 ;;
8229esac
8230
8231$rm -f fred fred.? dyna.$dlext dyna.? tmp-dyna.?
8232
8233set d_dlsymun
8234eval $setvar
8235
8236hasproto='varname=$1; func=$2; shift; shift;
8237while $test $# -ge 2; do
8238 case "$1" in
8239 $define) echo "#include <$2>";;
8240 esac ;
8241 shift 2;
8242done > try.c;
8243$cppstdin $cppflags $cppminus < try.c > tryout.c 2>/dev/null;
8244if $contains "$func.*(" tryout.c >/dev/null 2>&1; then
8245 echo "$func() prototype found.";
8246 val="$define";
8247else
8248 echo "$func() prototype NOT found.";
8249 val="$undef";
8250fi;
8251set $varname;
8252eval $setvar;
8253$rm -f try.c tryout.c'
8254
8255: see if prototype for drand48 is available
8256echo " "
8257set d_drand48proto drand48 $i_stdlib stdlib.h $i_unistd unistd.h
8258eval $hasproto
8259
8260: see if dup2 exists
8261set dup2 d_dup2
8262eval $inlibc
8263
8264: see if eaccess exists
8265set eaccess d_eaccess
8266eval $inlibc
8267
8268: see if endgrent exists
8269set endgrent d_endgrent
8270eval $inlibc
8271
8272: see if endhostent exists
8273set endhostent d_endhent
8274eval $inlibc
8275
8276: see if endnetent exists
8277set endnetent d_endnent
8278eval $inlibc
8279
8280: see if endprotoent exists
8281set endprotoent d_endpent
8282eval $inlibc
8283
8284: see if endpwent exists
8285set endpwent d_endpwent
8286eval $inlibc
8287
8288: see if endservent exists
8289set endservent d_endsent
8290eval $inlibc
8291
8292: see if endspent exists
8293set endspent d_endspent
8294eval $inlibc
8295
8296: Locate the flags for 'open()'
8297echo " "
8298$cat >open3.c <<'EOCP'
8299#include <sys/types.h>
8300#ifdef I_FCNTL
8301#include <fcntl.h>
8302#endif
8303#ifdef I_SYS_FILE
8304#include <sys/file.h>
8305#endif
8306int main() {
8307 if(O_RDONLY);
8308#ifdef O_TRUNC
8309 exit(0);
8310#else
8311 exit(1);
8312#endif
8313}
8314EOCP
8315: check sys/file.h first to get FREAD on Sun
8316if $test `./findhdr sys/file.h` && \
8317 set open3 -DI_SYS_FILE && eval $compile; then
8318 h_sysfile=true;
8319 echo "<sys/file.h> defines the O_* constants..." >&4
8320 if ./open3; then
8321 echo "and you have the 3 argument form of open()." >&4
8322 val="$define"
8323 else
8324 echo "but not the 3 argument form of open(). Oh, well." >&4
8325 val="$undef"
8326 fi
8327elif $test `./findhdr fcntl.h` && \
8328 set open3 -DI_FCNTL && eval $compile; then
8329 h_fcntl=true;
8330 echo "<fcntl.h> defines the O_* constants..." >&4
8331 if ./open3; then
8332 echo "and you have the 3 argument form of open()." >&4
8333 val="$define"
8334 else
8335 echo "but not the 3 argument form of open(). Oh, well." >&4
8336 val="$undef"
8337 fi
8338else
8339 val="$undef"
8340 echo "I can't find the O_* constant definitions! You got problems." >&4
8341fi
8342set d_open3
8343eval $setvar
8344$rm -f open3*
8345
8346: see which of string.h or strings.h is needed
8347echo " "
8348strings=`./findhdr string.h`
8349if $test "$strings" && $test -r "$strings"; then
8350 echo "Using <string.h> instead of <strings.h>." >&4
8351 val="$define"
8352else
8353 val="$undef"
8354 strings=`./findhdr strings.h`
8355 if $test "$strings" && $test -r "$strings"; then
8356 echo "Using <strings.h> instead of <string.h>." >&4
8357 else
8358 echo "No string header found -- You'll surely have problems." >&4
8359 fi
8360fi
8361set i_string
8362eval $setvar
8363case "$i_string" in
8364"$undef") strings=`./findhdr strings.h`;;
8365*) strings=`./findhdr string.h`;;
8366esac
8367
8368: check for non-blocking I/O stuff
8369case "$h_sysfile" in
8370true) echo "#include <sys/file.h>" > head.c;;
8371*)
8372 case "$h_fcntl" in
8373 true) echo "#include <fcntl.h>" > head.c;;
8374 *) echo "#include <sys/fcntl.h>" > head.c;;
8375 esac
8376 ;;
8377esac
8378echo " "
8379echo "Figuring out the flag used by open() for non-blocking I/O..." >&4
8380case "$o_nonblock" in
8381'')
8382 $cat head.c > try.c
8383 $cat >>try.c <<'EOCP'
8384#include <stdio.h>
8385int main() {
8386#ifdef O_NONBLOCK
8387 printf("O_NONBLOCK\n");
8388 exit(0);
8389#endif
8390#ifdef O_NDELAY
8391 printf("O_NDELAY\n");
8392 exit(0);
8393#endif
8394#ifdef FNDELAY
8395 printf("FNDELAY\n");
8396 exit(0);
8397#endif
8398 exit(0);
8399}
8400EOCP
8401 set try
8402 if eval $compile_ok; then
8403 o_nonblock=`./try`
8404 case "$o_nonblock" in
8405 '') echo "I can't figure it out, assuming O_NONBLOCK will do.";;
8406 *) echo "Seems like we can use $o_nonblock.";;
8407 esac
8408 else
8409 echo "(I can't compile the test program; pray O_NONBLOCK is right!)"
8410 fi
8411 ;;
8412*) echo "Using $hint value $o_nonblock.";;
8413esac
8414$rm -f try try.* .out core
8415
8416echo " "
8417echo "Let's see what value errno gets from read() on a $o_nonblock file..." >&4
8418case "$eagain" in
8419'')
8420 $cat head.c > try.c
8421 $cat >>try.c <<EOCP
8422#include <errno.h>
8423#include <sys/types.h>
8424#include <signal.h>
8425#include <stdio.h>
8426#define MY_O_NONBLOCK $o_nonblock
8427#ifndef errno /* XXX need better Configure test */
8428extern int errno;
8429#endif
8430#$i_unistd I_UNISTD
8431#ifdef I_UNISTD
8432#include <unistd.h>
8433#endif
8434#ifdef $i_string
8435#include <string.h>
8436#else
8437#include <strings.h>
8438#endif
8439$signal_t blech(x) int x; { exit(3); }
8440EOCP
8441 $cat >> try.c <<'EOCP'
8442int main()
8443{
8444 int pd[2];
8445 int pu[2];
8446 char buf[1];
8447 char string[100];
8448
8449 pipe(pd); /* Down: child -> parent */
8450 pipe(pu); /* Up: parent -> child */
8451 if (0 != fork()) {
8452 int ret;
8453 close(pd[1]); /* Parent reads from pd[0] */
8454 close(pu[0]); /* Parent writes (blocking) to pu[1] */
8455 if (-1 == fcntl(pd[0], F_SETFL, MY_O_NONBLOCK))
8456 exit(1);
8457 signal(SIGALRM, blech);
8458 alarm(5);
8459 if ((ret = read(pd[0], buf, 1)) > 0) /* Nothing to read! */
8460 exit(2);
8461 sprintf(string, "%d\n", ret);
8462 write(2, string, strlen(string));
8463 alarm(0);
8464#ifdef EAGAIN
8465 if (errno == EAGAIN) {
8466 printf("EAGAIN\n");
8467 goto ok;
8468 }
8469#endif
8470#ifdef EWOULDBLOCK
8471 if (errno == EWOULDBLOCK)
8472 printf("EWOULDBLOCK\n");
8473#endif
8474 ok:
8475 write(pu[1], buf, 1); /* Unblocks child, tell it to close our pipe */
8476 sleep(2); /* Give it time to close our pipe */
8477 alarm(5);
8478 ret = read(pd[0], buf, 1); /* Should read EOF */
8479 alarm(0);
8480 sprintf(string, "%d\n", ret);
8481 write(3, string, strlen(string));
8482 exit(0);
8483 }
8484
8485 close(pd[0]); /* We write to pd[1] */
8486 close(pu[1]); /* We read from pu[0] */
8487 read(pu[0], buf, 1); /* Wait for parent to signal us we may continue */
8488 close(pd[1]); /* Pipe pd is now fully closed! */
8489 exit(0); /* Bye bye, thank you for playing! */
8490}
8491EOCP
8492 set try
8493 if eval $compile_ok; then
8494 echo "$startsh" >mtry
8495 echo "./try >try.out 2>try.ret 3>try.err || exit 4" >>mtry
8496 chmod +x mtry
8497 ./mtry >/dev/null 2>&1
8498 case $? in
8499 0) eagain=`$cat try.out`;;
8500 1) echo "Could not perform non-blocking setting!";;
8501 2) echo "I did a successful read() for something that was not there!";;
8502 3) echo "Hmm... non-blocking I/O does not seem to be working!";;
8503 *) echo "Something terribly wrong happened during testing.";;
8504 esac
8505 rd_nodata=`$cat try.ret`
8506 echo "A read() system call with no data present returns $rd_nodata."
8507 case "$rd_nodata" in
8508 0|-1) ;;
8509 *)
8510 echo "(That's peculiar, fixing that to be -1.)"
8511 rd_nodata=-1
8512 ;;
8513 esac
8514 case "$eagain" in
8515 '')
8516 echo "Forcing errno EAGAIN on read() with no data available."
8517 eagain=EAGAIN
8518 ;;
8519 *)
8520 echo "Your read() sets errno to $eagain when no data is available."
8521 ;;
8522 esac
8523 status=`$cat try.err`
8524 case "$status" in
8525 0) echo "And it correctly returns 0 to signal EOF.";;
8526 -1) echo "But it also returns -1 to signal EOF, so be careful!";;
8527 *) echo "However, your read() returns '$status' on EOF??";;
8528 esac
8529 val="$define"
8530 if test "$status" = "$rd_nodata"; then
8531 echo "WARNING: you can't distinguish between EOF and no data!"
8532 val="$undef"
8533 fi
8534 else
8535 echo "I can't compile the test program--assuming errno EAGAIN will do."
8536 eagain=EAGAIN
8537 fi
8538 set d_eofnblk
8539 eval $setvar
8540 ;;
8541*)
8542 echo "Using $hint value $eagain."
8543 echo "Your read() returns $rd_nodata when no data is present."
8544 case "$d_eofnblk" in
8545 "$define") echo "And you can see EOF because read() returns 0.";;
8546 "$undef") echo "But you can't see EOF status from read() returned value.";;
8547 *)
8548 echo "(Assuming you can't see EOF status from read anyway.)"
8549 d_eofnblk=$undef
8550 ;;
8551 esac
8552 ;;
8553esac
8554$rm -f try try.* .out core head.c mtry
8555
8556: see if fchmod exists
8557set fchmod d_fchmod
8558eval $inlibc
8559
8560: see if fchown exists
8561set fchown d_fchown
8562eval $inlibc
8563
8564: see if this is an fcntl system
8565set fcntl d_fcntl
8566eval $inlibc
8567
8568hasfield='varname=$1; struct=$2; field=$3; shift; shift; shift;
8569while $test $# -ge 2; do
8570 case "$1" in
8571 $define) echo "#include <$2>";;
8572 esac ;
8573 shift 2;
8574done > try.c;
8575echo "int main () { struct $struct foo; char* bar; bar = (char*)foo.$field; }" >> try.c;
8576set try;
8577if eval $compile; then
8578 val="$define";
8579else
8580 val="$undef";
8581fi;
8582set $varname;
8583eval $setvar;
8584$rm -f try.c try.o'
8585
8586socketlib=''
8587sockethdr=''
8588: see whether socket exists
8589echo " "
8590$echo $n "Hmm... $c" >&4
8591if set socket val -f d_socket; eval $csym; $val; then
8592 echo "Looks like you have Berkeley networking support." >&4
8593 d_socket="$define"
8594 if set setsockopt val -f; eval $csym; $val; then
8595 d_oldsock="$undef"
8596 else
8597 echo "...but it uses the old BSD 4.1c interface, rather than 4.2." >&4
8598 d_oldsock="$define"
8599 fi
8600else
8601 if $contains socklib libc.list >/dev/null 2>&1; then
8602 echo "Looks like you have Berkeley networking support." >&4
8603 d_socket="$define"
8604 : we will have to assume that it supports the 4.2 BSD interface
8605 d_oldsock="$undef"
8606 else
8607 echo "You don't have Berkeley networking in libc$_a..." >&4
8608 if test "X$d_socket" = "X$define"; then
8609 echo "...but you seem to believe that you have sockets." >&4
8610 else
8611 for net in net socket
8612 do
8613 if test -f /usr/lib/lib$net$_a; then
8614 ( ($nm $nm_opt /usr/lib/lib$net$_a | eval $nm_extract) || \
8615 $ar t /usr/lib/lib$net$_a) 2>/dev/null >> libc.list
8616 if $contains socket libc.list >/dev/null 2>&1; then
8617 d_socket="$define"
8618 socketlib="-l$net"
8619 case "$net" in
8620 net)
8621 echo "...but the Wollongong group seems to have hacked it in." >&4
8622 sockethdr="-I/usr/netinclude"
8623 ;;
8624 esac
8625 echo "Found Berkeley sockets interface in lib$net." >& 4
8626 if $contains setsockopt libc.list >/dev/null 2>&1; then
8627 d_oldsock="$undef"
8628 else
8629 echo "...using the old BSD 4.1c interface, rather than 4.2." >&4
8630 d_oldsock="$define"
8631 fi
8632 break
8633 fi
8634 fi
8635 done
8636 if test "X$d_socket" != "X$define"; then
8637 echo "or anywhere else I see." >&4
8638 d_socket="$undef"
8639 d_oldsock="$undef"
8640 fi
8641 fi
8642 fi
8643fi
8644
8645: see if socketpair exists
8646set socketpair d_sockpair
8647eval $inlibc
8648
8649
8650echo " "
8651echo "Checking the availability of certain socket constants..." >& 4
8652for ENUM in MSG_CTRUNC MSG_DONTROUTE MSG_OOB MSG_PEEK MSG_PROXY SCM_RIGHTS; do
8653 enum=`$echo $ENUM|./tr '[A-Z]' '[a-z]'`
8654 $cat >try.c <<EOF
8655#include <sys/types.h>
8656#include <sys/socket.h>
8657int main() {
8658 int i = $ENUM;
8659}
8660EOF
8661 val="$undef"
8662 set try; if eval $compile; then
8663 val="$define"
8664 fi
8665 set d_${enum}; eval $setvar
8666 $rm -f try.c try
8667done
8668
8669: see if sys/select.h has to be included
8670set sys/select.h i_sysselct
8671eval $inhdr
8672
8673: see if we should include time.h, sys/time.h, or both
8674echo " "
8675if test "X$timeincl" = X; then
8676 echo "Testing to see if we should include <time.h>, <sys/time.h> or both." >&4
8677 $echo $n "I'm now running the test program...$c"
8678 $cat >try.c <<'EOCP'
8679#include <sys/types.h>
8680#ifdef I_TIME
8681#include <time.h>
8682#endif
8683#ifdef I_SYSTIME
8684#ifdef SYSTIMEKERNEL
8685#define KERNEL
8686#endif
8687#include <sys/time.h>
8688#endif
8689#ifdef I_SYSSELECT
8690#include <sys/select.h>
8691#endif
8692int main()
8693{
8694 struct tm foo;
8695#ifdef S_TIMEVAL
8696 struct timeval bar;
8697#endif
8698#ifdef S_TIMEZONE
8699 struct timezone tzp;
8700#endif
8701 if (foo.tm_sec == foo.tm_sec)
8702 exit(0);
8703#ifdef S_TIMEVAL
8704 if (bar.tv_sec == bar.tv_sec)
8705 exit(0);
8706#endif
8707 exit(1);
8708}
8709EOCP
8710 flags=''
8711 for s_timezone in '-DS_TIMEZONE' ''; do
8712 sysselect=''
8713 for s_timeval in '-DS_TIMEVAL' ''; do
8714 for i_systimek in '' '-DSYSTIMEKERNEL'; do
8715 for i_time in '' '-DI_TIME'; do
8716 for i_systime in '-DI_SYSTIME' ''; do
8717 case "$flags" in
8718 '') $echo $n ".$c"
8719 set try $i_time $i_systime $i_systimek $sysselect $s_timeval $s_timezone
8720 if eval $compile; then
8721 set X $i_time $i_systime $i_systimek $sysselect $s_timeval
8722 shift
8723 flags="$*"
8724 echo " "
8725 $echo $n "Succeeded with $flags$c"
8726 fi
8727 ;;
8728 esac
8729 done
8730 done
8731 done
8732 done
8733 done
8734 timeincl=''
8735 echo " "
8736 case "$flags" in
8737 *SYSTIMEKERNEL*) i_systimek="$define"
8738 timeincl=`./findhdr sys/time.h`
8739 echo "We'll include <sys/time.h> with KERNEL defined." >&4;;
8740 *) i_systimek="$undef";;
8741 esac
8742 case "$flags" in
8743 *I_TIME*) i_time="$define"
8744 timeincl=`./findhdr time.h`" $timeincl"
8745 echo "We'll include <time.h>." >&4;;
8746 *) i_time="$undef";;
8747 esac
8748 case "$flags" in
8749 *I_SYSTIME*) i_systime="$define"
8750 timeincl=`./findhdr sys/time.h`" $timeincl"
8751 echo "We'll include <sys/time.h>." >&4;;
8752 *) i_systime="$undef";;
8753 esac
8754 $rm -f try.c try
8755fi
8756
8757: check for fd_set items
8758$cat <<EOM
8759
8760Checking to see how well your C compiler handles fd_set and friends ...
8761EOM
8762$cat >fd_set.c <<EOCP
8763#$i_systime I_SYS_TIME
8764#$i_sysselct I_SYS_SELECT
8765#$d_socket HAS_SOCKET
8766#include <sys/types.h>
8767#ifdef HAS_SOCKET
8768#include <sys/socket.h> /* Might include <sys/bsdtypes.h> */
8769#endif
8770#ifdef I_SYS_TIME
8771#include <sys/time.h>
8772#endif
8773#ifdef I_SYS_SELECT
8774#include <sys/select.h>
8775#endif
8776int main() {
8777 fd_set fds;
8778
8779#ifdef TRYBITS
8780 if(fds.fds_bits);
8781#endif
8782
8783#if defined(FD_SET) && defined(FD_CLR) && defined(FD_ISSET) && defined(FD_ZERO)
8784 exit(0);
8785#else
8786 exit(1);
8787#endif
8788}
8789EOCP
8790set fd_set -DTRYBITS
8791if eval $compile; then
8792 d_fds_bits="$define"
8793 d_fd_set="$define"
8794 echo "Well, your system knows about the normal fd_set typedef..." >&4
8795 if ./fd_set; then
8796 echo "and you have the normal fd_set macros (just as I'd expect)." >&4
8797 d_fd_macros="$define"
8798 else
8799 $cat >&4 <<'EOM'
8800but not the normal fd_set macros! Gaaack! I'll have to cover for you.
8801EOM
8802 d_fd_macros="$undef"
8803 fi
8804else
8805 $cat <<'EOM'
8806Hmm, your compiler has some difficulty with fd_set. Checking further...
8807EOM
8808 set fd_set
8809 if eval $compile; then
8810 d_fds_bits="$undef"
8811 d_fd_set="$define"
8812 echo "Well, your system has some sort of fd_set available..." >&4
8813 if ./fd_set; then
8814 echo "and you have the normal fd_set macros." >&4
8815 d_fd_macros="$define"
8816 else
8817 $cat <<'EOM'
8818but not the normal fd_set macros! Gross! More work for me...
8819EOM
8820 d_fd_macros="$undef"
8821 fi
8822 else
8823 echo "Well, you got zip. That's OK, I can roll my own fd_set stuff." >&4
8824 d_fd_set="$undef"
8825 d_fds_bits="$undef"
8826 d_fd_macros="$undef"
8827 fi
8828fi
8829$rm -f fd_set*
8830
8831: see if fgetpos exists
8832set fgetpos d_fgetpos
8833eval $inlibc
8834
8835: see if flock exists
8836set flock d_flock
8837eval $inlibc
8838
8839: see if fork exists
8840set fork d_fork
8841eval $inlibc
8842
8843: see if pathconf exists
8844set pathconf d_pathconf
8845eval $inlibc
8846
8847: see if fpathconf exists
8848set fpathconf d_fpathconf
8849eval $inlibc
8850
8851
8852: check for off64_t
8853echo " "
8854echo "Checking to see if your system supports off64_t..." >&4
8855$cat >try.c <<EOCP
8856#include <sys/types.h>
8857#include <unistd.h>
8858int main() { off64_t x = 7; }'
8859EOCP
8860set try
8861if eval $compile; then
8862 val="$define"
8863 echo "Yes, it does."
8864else
8865 val="$undef"
8866 echo "No, it doesn't."
8867 case "$lseeksize" in
8868 8) echo "(Your off_t is 64 bits, so you could use that.)" ;;
8869 esac
8870fi
8871$rm -f try.* try
8872set d_off64_t
8873eval $setvar
8874
8875: check for fpos64_t
8876echo " "
8877echo "Checking to see if your system supports fpos64_t..." >&4
8878$cat >try.c <<EOCP
8879#include <sys/stdio.h>
8880int main() { fpos64_t x x = 7; }'
8881EOCP
8882set try
8883if eval $compile; then
8884 val="$define"
8885 echo "Yes, it does."
8886else
8887 val="$undef"
8888 echo "No, it doesn't."
8889 case "$fpossize" in
8890 8) echo "(Your fpos_t is 64 bits, so you could use that.)" ;;
8891 esac
8892fi
8893$rm -f try.* try
8894set d_fpos64_t
8895eval $setvar
8896
8897hasstruct='varname=$1; struct=$2; shift; shift;
8898while $test $# -ge 2; do
8899 case "$1" in
8900 $define) echo "#include <$2>";;
8901 esac ;
8902 shift 2;
8903done > try.c;
8904echo "int main () { struct $struct foo; }" >> try.c;
8905set try;
8906if eval $compile; then
8907 val="$define";
8908else
8909 val="$undef";
8910fi;
8911set $varname;
8912eval $setvar;
8913$rm -f try.c try.o'
8914
8915: see if this is a sys/param system
8916set sys/param.h i_sysparam
8917eval $inhdr
8918
8919: see if this is a sys/mount.h system
8920set sys/mount.h i_sysmount
8921eval $inhdr
8922
8923: see if sys/types.h has to be included
8924set sys/types.h i_systypes
8925eval $inhdr
8926
8927
8928echo " "
8929echo "Checking to see if your system supports struct fs_data..." >&4
8930set d_fs_data_s fs_data $i_systypes sys/types.h $i_sysparam sys/param.h $i_sysmount sys/mount.h
8931eval $hasstruct
8932case "$d_fs_data_s" in
8933"$define") echo "Yes, it does." ;;
8934*) echo "No, it doesn't." ;;
8935esac
8936
8937: see if fseeko exists
8938set fseeko d_fseeko
8939eval $inlibc
8940case "$longsize" in
89418) echo "(Your long is 64 bits, so in a pinch you could use fseek.)" ;;
8942esac
8943
8944: see if fsetpos exists
8945set fsetpos d_fsetpos
8946eval $inlibc
8947
8948
8949: see if fstatfs exists
8950set fstatfs d_fstatfs
8951eval $inlibc
8952
8953
8954: see if statvfs exists
8955set statvfs d_statvfs
8956eval $inlibc
8957
8958: see if fstatvfs exists
8959set fstatvfs d_fstatvfs
8960eval $inlibc
8961
8962
8963: see if ftello exists
8964set ftello d_ftello
8965eval $inlibc
8966case "$longsize" in
89678) echo "(Your long is 64 bits, so in a pinch you could use ftell.)" ;;
8968esac
8969
8970: see if getgrent exists
8971set getgrent d_getgrent
8972eval $inlibc
8973
8974: see if gethostbyaddr exists
8975set gethostbyaddr d_gethbyaddr
8976eval $inlibc
8977
8978: see if gethostbyname exists
8979set gethostbyname d_gethbyname
8980eval $inlibc
8981
8982: see if gethostent exists
8983set gethostent d_gethent
8984eval $inlibc
8985
8986: see how we will look up host name
8987echo " "
8988call=''
8989if set gethostname val -f d_gethname; eval $csym; $val; then
8990 echo 'gethostname() found.' >&4
8991 d_gethname="$define"
8992 call=gethostname
8993fi
8994if set uname val -f d_uname; eval $csym; $val; then
8995 if ./xenix; then
8996 $cat <<'EOM'
8997uname() was found, but you're running xenix, and older versions of xenix
8998have a broken uname(). If you don't really know whether your xenix is old
8999enough to have a broken system call, use the default answer.
9000
9001EOM
9002 dflt=y
9003 case "$d_uname" in
9004 "$define") dflt=n;;
9005 esac
9006 rp='Is your uname() broken?'
9007 . ./myread
9008 case "$ans" in
9009 n*) d_uname="$define"; call=uname;;
9010 esac
9011 else
9012 echo 'uname() found.' >&4
9013 d_uname="$define"
9014 case "$call" in
9015 '') call=uname ;;
9016 esac
9017 fi
9018fi
9019case "$d_gethname" in
9020'') d_gethname="$undef";;
9021esac
9022case "$d_uname" in
9023'') d_uname="$undef";;
9024esac
9025case "$d_uname$d_gethname" in
9026*define*)
9027 dflt=n
9028 cat <<EOM
9029
9030Every now and then someone has a $call() that lies about the hostname
9031but can't be fixed for political or economic reasons. If you wish, I can
9032pretend $call() isn't there and maybe compute hostname at run-time
9033thanks to the '$phostname' command.
9034
9035EOM
9036 rp="Shall I ignore $call() from now on?"
9037 . ./myread
9038 case "$ans" in
9039 y*) d_uname="$undef" d_gethname="$undef"; $echo $n "Okay...$c";;
9040 esac;;
9041esac
9042case "$phostname" in
9043'') aphostname='';;
9044*) case "$aphostname" in
9045 /*) ;;
9046 *) set X $phostname
9047 shift
9048 file=$1
9049 shift
9050 file=`./loc $file $file $pth`
9051 aphostname=`echo $file $*`
9052 ;;
9053 esac
9054 ;;
9055esac
9056case "$d_uname$d_gethname" in
9057*define*) ;;
9058*)
9059 case "$phostname" in
9060 '')
9061 echo "There will be no way for $package to get your hostname." >&4;;
9062 *)
9063 echo "I'll use 'popen("'"'$aphostname'", "r")'"' to get your hostname." >&4
9064 ;;
9065 esac;;
9066esac
9067case "$d_phostname" in
9068'') d_phostname="$undef";;
9069esac
9070
9071: see if this is a netdb.h system
9072set netdb.h i_netdb
9073eval $inhdr
9074
9075: see if prototypes for various gethostxxx netdb.h functions are available
9076echo " "
9077set d_gethostprotos gethostent $i_netdb netdb.h
9078eval $hasproto
9079
9080: see if getlogin exists
9081set getlogin d_getlogin
9082eval $inlibc
9083
9084: see if getmnt exists
9085set getmnt d_getmnt
9086eval $inlibc
9087
9088: see if getmntent exists
9089set getmntent d_getmntent
9090eval $inlibc
9091
9092: see if getnetbyaddr exists
9093set getnetbyaddr d_getnbyaddr
9094eval $inlibc
9095
9096: see if getnetbyname exists
9097set getnetbyname d_getnbyname
9098eval $inlibc
9099
9100: see if getnetent exists
9101set getnetent d_getnent
9102eval $inlibc
9103
9104: see if prototypes for various getnetxxx netdb.h functions are available
9105echo " "
9106set d_getnetprotos getnetent $i_netdb netdb.h
9107eval $hasproto
9108
9109
9110: see if getprotobyname exists
9111set getprotobyname d_getpbyname
9112eval $inlibc
9113
9114: see if getprotobynumber exists
9115set getprotobynumber d_getpbynumber
9116eval $inlibc
9117
9118: see if getprotoent exists
9119set getprotoent d_getpent
9120eval $inlibc
9121
9122: see if getpgid exists
9123set getpgid d_getpgid
9124eval $inlibc
9125
9126: see if getpgrp2 exists
9127set getpgrp2 d_getpgrp2
9128eval $inlibc
9129
9130: see if getppid exists
9131set getppid d_getppid
9132eval $inlibc
9133
9134: see if getpriority exists
9135set getpriority d_getprior
9136eval $inlibc
9137
9138: see if prototypes for various getprotoxxx netdb.h functions are available
9139echo " "
9140set d_getprotoprotos getprotoent $i_netdb netdb.h
9141eval $hasproto
9142
9143: see if getpwent exists
9144set getpwent d_getpwent
9145eval $inlibc
9146
9147
9148: see if getservbyname exists
9149set getservbyname d_getsbyname
9150eval $inlibc
9151
9152: see if getservbyport exists
9153set getservbyport d_getsbyport
9154eval $inlibc
9155
9156: see if getservent exists
9157set getservent d_getsent
9158eval $inlibc
9159
9160: see if prototypes for various getservxxx netdb.h functions are available
9161echo " "
9162set d_getservprotos getservent $i_netdb netdb.h
9163eval $hasproto
9164
9165: see if getspent exists
9166set getspent d_getspent
9167eval $inlibc
9168
9169: see if getspnam exists
9170set getspnam d_getspnam
9171eval $inlibc
9172
9173: see if gettimeofday or ftime exists
9174set gettimeofday d_gettimeod
9175eval $inlibc
9176case "$d_gettimeod" in
9177"$undef")
9178 set ftime d_ftime
9179 eval $inlibc
9180 ;;
9181*)
9182 val="$undef"; set d_ftime; eval $setvar
9183 ;;
9184esac
9185case "$d_gettimeod$d_ftime" in
9186"$undef$undef")
9187 echo " "
9188 echo 'No ftime() nor gettimeofday() -- timing may be less accurate.' >&4
9189 ;;
9190esac
9191
9192: see if this is an grp system
9193set grp.h i_grp
9194eval $inhdr
9195
9196case "$i_grp" in
9197$define)
9198 xxx=`./findhdr grp.h`
9199 $cppstdin $cppflags $cppminus < $xxx >$$.h
9200
9201 if $contains 'gr_passwd' $$.h >/dev/null 2>&1; then
9202 val="$define"
9203 else
9204 val="$undef"
9205 fi
9206 set d_grpasswd
9207 eval $setvar
9208
9209 $rm -f $$.h
9210 ;;
9211*)
9212 val="$undef";
9213 set d_grpasswd; eval $setvar
9214 ;;
9215esac
9216
9217: see if hasmntopt exists
9218set hasmntopt d_hasmntopt
9219eval $inlibc
9220
9221: see if this is a netinet/in.h or sys/in.h system
9222set netinet/in.h i_niin sys/in.h i_sysin
9223eval $inhdr
9224
9225: see if arpa/inet.h has to be included
9226set arpa/inet.h i_arpainet
9227eval $inhdr
9228
9229: see if htonl --and friends-- exists
9230val=''
9231set htonl val
9232eval $inlibc
9233
9234: Maybe they are macros.
9235case "$val" in
9236$undef)
9237 $cat >htonl.c <<EOM
9238#include <stdio.h>
9239#include <sys/types.h>
9240#$i_niin I_NETINET_IN
9241#$i_sysin I_SYS_IN
9242#$i_arpainet I_ARPA_INET
9243#ifdef I_NETINET_IN
9244#include <netinet/in.h>
9245#endif
9246#ifdef I_SYS_IN
9247#include <sys/in.h>
9248#endif
9249#ifdef I_ARPA_INET
9250#include <arpa/inet.h>
9251#endif
9252#ifdef htonl
9253printf("Defined as a macro.");
9254#endif
9255EOM
9256 $cppstdin $cppflags $cppminus < htonl.c >htonl.E 2>/dev/null
9257 if $contains 'Defined as a macro' htonl.E >/dev/null 2>&1; then
9258 val="$define"
9259 echo "But it seems to be defined as a macro." >&4
9260 fi
9261 $rm -f htonl.?
9262 ;;
9263esac
9264set d_htonl
9265eval $setvar
9266
9267: index or strchr
9268echo " "
9269if set index val -f; eval $csym; $val; then
9270 if set strchr val -f d_strchr; eval $csym; $val; then
9271 if $contains strchr "$strings" >/dev/null 2>&1 ; then
9272 val="$define"
9273 vali="$undef"
9274 echo "strchr() found." >&4
9275 else
9276 val="$undef"
9277 vali="$define"
9278 echo "index() found." >&4
9279 fi
9280 else
9281 val="$undef"
9282 vali="$define"
9283 echo "index() found." >&4
9284 fi
9285else
9286 if set strchr val -f d_strchr; eval $csym; $val; then
9287 val="$define"
9288 vali="$undef"
9289 echo "strchr() found." >&4
9290 else
9291 echo "No index() or strchr() found!" >&4
9292 val="$undef"
9293 vali="$undef"
9294 fi
9295fi
9296set d_strchr; eval $setvar
9297val="$vali"
9298set d_index; eval $setvar
9299
9300: check whether inet_aton exists
9301set inet_aton d_inetaton
9302eval $inlibc
9303
9304: Look for isascii
9305echo " "
9306$cat >isascii.c <<'EOCP'
9307#include <stdio.h>
9308#include <ctype.h>
9309int main() {
9310 int c = 'A';
9311 if (isascii(c))
9312 exit(0);
9313 else
9314 exit(1);
9315}
9316EOCP
9317set isascii
9318if eval $compile; then
9319 echo "isascii() found." >&4
9320 val="$define"
9321else
9322 echo "isascii() NOT found." >&4
9323 val="$undef"
9324fi
9325set d_isascii
9326eval $setvar
9327$rm -f isascii*
9328
9329: see if killpg exists
9330set killpg d_killpg
9331eval $inlibc
9332
9333: see if lchown exists
9334echo " "
9335$cat > try.c <<'EOCP'
9336/* System header to define __stub macros and hopefully few prototypes,
9337 which can conflict with char lchown(); below. */
9338#include <assert.h>
9339/* Override any gcc2 internal prototype to avoid an error. */
9340/* We use char because int might match the return type of a gcc2
9341 builtin and then its argument prototype would still apply. */
9342char lchown();
9343int main() {
9344 /* The GNU C library defines this for functions which it implements
9345 to always fail with ENOSYS. Some functions are actually named
9346 something starting with __ and the normal name is an alias. */
9347#if defined (__stub_lchown) || defined (__stub___lchown)
9348choke me
9349#else
9350lchown();
9351#endif
9352; return 0; }
9353EOCP
9354set try
9355if eval $compile; then
9356 $echo "lchown() found." >&4
9357 val="$define"
9358else
9359 $echo "lchown() NOT found." >&4
9360 val="$undef"
9361fi
9362set d_lchown
9363eval $setvar
9364
9365: See if number of significant digits in a double precision number is known
9366echo " "
9367$cat >ldbl_dig.c <<EOM
9368#$i_limits I_LIMITS
9369#$i_float I_FLOAT
9370#ifdef I_LIMITS
9371#include <limits.h>
9372#endif
9373#ifdef I_FLOAT
9374#include <float.h>
9375#endif
9376#ifdef LDBL_DIG
9377printf("Contains LDBL_DIG");
9378#endif
9379EOM
9380$cppstdin $cppflags $cppminus < ldbl_dig.c >ldbl_dig.E 2>/dev/null
9381if $contains 'LDBL_DIG' ldbl_dig.E >/dev/null 2>&1; then
9382 echo "LDBL_DIG found." >&4
9383 val="$define"
9384else
9385 echo "LDBL_DIG NOT found." >&4
9386 val="$undef"
9387fi
9388$rm -f ldbl_dig.?
9389set d_ldbl_dig
9390eval $setvar
9391
9392: see if link exists
9393set link d_link
9394eval $inlibc
9395
9396: see if localeconv exists
9397set localeconv d_locconv
9398eval $inlibc
9399
9400: see if lockf exists
9401set lockf d_lockf
9402eval $inlibc
9403
9404: check for long long
9405echo " "
9406$echo $n "Checking to see if your system supports long long..." $c >&4
9407echo 'int main() { long long x = 7; return 0; }' > try.c
9408set try
9409if eval $compile; then
9410 val="$define"
9411 echo " Yes, it does." >&4
9412else
9413 val="$undef"
9414 echo " No, it doesn't." >&4
9415fi
9416$rm try.*
9417set d_longlong
9418eval $setvar
9419
9420: check for length of long long
9421case "${d_longlong}${longlongsize}" in
9422$define)
9423 echo " "
9424 $echo $n "Checking to see how big your long longs are..." $c >&4
9425 $cat >try.c <<'EOCP'
9426#include <stdio.h>
9427int main()
9428{
9429 printf("%d\n", (int)sizeof(long long));
9430 return(0);
9431}
9432EOCP
9433 set try
9434 if eval $compile_ok; then
9435 longlongsize=`./try$exe_ext`
9436 $echo " $longlongsize bytes." >&4
9437 else
9438 dflt='8'
9439 echo " "
9440 echo "(I can't seem to compile the test program. Guessing...)"
9441 rp="What is the size of a long long (in bytes)?"
9442 . ./myread
9443 longlongsize="$ans"
9444 fi
9445 if $test "X$longsize" = "X$longlongsize"; then
9446 echo "(That isn't any different from an ordinary long.)"
9447 fi
9448 ;;
9449esac
9450$rm -f try.* try
9451
9452: see if lstat exists
9453set lstat d_lstat
9454eval $inlibc
9455
9456: see if mblen exists
9457set mblen d_mblen
9458eval $inlibc
9459
9460: see if mbstowcs exists
9461set mbstowcs d_mbstowcs
9462eval $inlibc
9463
9464: see if mbtowc exists
9465set mbtowc d_mbtowc
9466eval $inlibc
9467
9468: see if memchr exists
9469set memchr d_memchr
9470eval $inlibc
9471
9472: see if memcmp exists
9473set memcmp d_memcmp
9474eval $inlibc
9475
9476: see if memcpy exists
9477set memcpy d_memcpy
9478eval $inlibc
9479
9480: see if memmove exists
9481set memmove d_memmove
9482eval $inlibc
9483
9484: see if memset exists
9485set memset d_memset
9486eval $inlibc
9487
9488: see if mkdir exists
9489set mkdir d_mkdir
9490eval $inlibc
9491
9492: see if mkfifo exists
9493set mkfifo d_mkfifo
9494eval $inlibc
9495
9496: see if mktime exists
9497set mktime d_mktime
9498eval $inlibc
9499
9500: see if msgctl exists
9501set msgctl d_msgctl
9502eval $inlibc
9503
9504: see if msgget exists
9505set msgget d_msgget
9506eval $inlibc
9507
9508: see if msgsnd exists
9509set msgsnd d_msgsnd
9510eval $inlibc
9511
9512: see if msgrcv exists
9513set msgrcv d_msgrcv
9514eval $inlibc
9515
9516: see how much of the 'msg*(2)' library is present.
9517h_msg=true
9518echo " "
9519case "$d_msgctl$d_msgget$d_msgsnd$d_msgrcv" in
9520*"$undef"*) h_msg=false;;
9521esac
9522case "$osname" in
9523freebsd)
9524 case "`ipcs 2>&1`" in
9525 "SVID messages"*"not configured"*)
9526 echo "Your $osname does not have the msg*(2) configured." >&4
9527 h_msg=false
9528 val="$undef"
9529 set msgctl d_msgctl
9530 eval $setvar
9531 set msgget d_msgget
9532 eval $setvar
9533 set msgsnd d_msgsnd
9534 eval $setvar
9535 set msgrcv d_msgrcv
9536 eval $setvar
9537 ;;
9538 esac
9539 ;;
9540esac
9541: we could also check for sys/ipc.h ...
9542if $h_msg && $test `./findhdr sys/msg.h`; then
9543 echo "You have the full msg*(2) library." >&4
9544 val="$define"
9545else
9546 echo "You don't have the full msg*(2) library." >&4
9547 val="$undef"
9548fi
9549set d_msg
9550eval $setvar
9551
9552: see if nice exists
9553set nice d_nice
9554eval $inlibc
9555
9556: see if inttypes.h is available
9557: we want a real compile instead of Inhdr because some systems
9558: have an inttypes.h which includes non-existent headers
9559echo " "
9560$cat >try.c <<EOCP
9561#include <inttypes.h>
9562int main() {
9563 static int32_t foo32 = 0x12345678;
9564}
9565EOCP
9566set try
9567if eval $compile; then
9568 echo "<inttypes.h> found." >&4
9569 val="$define"
9570else
9571 echo "<inttypes.h> NOT found." >&4
9572 val="$undef"
9573fi
9574$rm -f try.c try
9575set i_inttypes
9576eval $setvar
9577
9578: check for int64_t
9579echo " "
9580$echo $n "Checking to see if your system supports int64_t...$c" >&4
9581$cat >try.c <<EOCP
9582#include <sys/types.h>
9583#$i_inttypes I_INTTYPES
9584#ifdef I_INTTYPES
9585#include <inttypes.h>
9586#endif
9587int main() { int64_t x = 7; }
9588EOCP
9589set try
9590if eval $compile; then
9591 val="$define"
9592 echo " Yes, it does." >&4
9593else
9594 val="$undef"
9595 echo " No, it doesn't." >&4
9596fi
9597$rm -f try try.*
9598set d_int64t
9599eval $setvar
9600
9601
9602echo " "
9603echo "Checking which 64-bit integer type we could use..." >&4
9604
9605case "$intsize" in
96068) val=int
9607 set quadtype
9608 eval $setvar
9609 val='"unsigned int"'
9610 set uquadtype
9611 eval $setvar
9612 quadkind=1
9613 ;;
9614*) case "$longsize" in
9615 8) val=long
9616 set quadtype
9617 eval $setvar
9618 val='"unsigned long"'
9619 set uquadtype
9620 eval $setvar
9621 quadkind=2
9622 ;;
9623 *) case "$uselonglong:$d_longlong:$longlongsize" in
9624 define:define:8)
9625 val='"long long"'
9626 set quadtype
9627 eval $setvar
9628 val='"unsigned long long"'
9629 set uquadtype
9630 eval $setvar
9631 quadkind=3
9632 ;;
9633 *) case "$d_int64t" in
9634 define)
9635 val=int64_t
9636 set quadtype
9637 eval $setvar
9638 val=uint64_t
9639 set uquadtype
9640 eval $setvar
9641 quadkind=4
9642 ;;
9643 esac
9644 ;;
9645 esac
9646 ;;
9647 esac
9648 ;;
9649esac
9650
9651case "$quadtype" in
9652'') case "$uselonglong:$d_longlong:$longlongsize" in
9653 undef:define:8)
9654 echo "(You would have 'long long', but you are not using it.)" >&4 ;;
9655 *) echo "Alas, no 64-bit integer types in sight." >&4 ;;
9656 esac
9657 d_quad="$undef"
9658 ;;
9659*) if test X"$use64bits" = Xdefine -o X"$longsize" = X8; then
9660 verb="will"
9661 else
9662 verb="could"
9663 fi
9664 echo "We $verb use '$quadtype' for 64-bit integers." >&4
9665 d_quad="$define"
9666 ;;
9667esac
9668
9669: check for length of character
9670echo " "
9671case "$charsize" in
9672'')
9673 echo "Checking to see how big your characters are (hey, you never know)..." >&4
9674 $cat >try.c <<'EOCP'
9675#include <stdio.h>
9676int main()
9677{
9678 printf("%d\n", (int)sizeof(char));
9679 exit(0);
9680}
9681EOCP
9682 set try
9683 if eval $compile_ok; then
9684 dflt=`./try`
9685 else
9686 dflt='1'
9687 echo "(I can't seem to compile the test program. Guessing...)"
9688 fi
9689 ;;
9690*)
9691 dflt="$charsize"
9692 ;;
9693esac
9694rp="What is the size of a character (in bytes)?"
9695. ./myread
9696charsize="$ans"
9697$rm -f try.c try
9698
9699
9700echo " "
9701$echo "Choosing the C types to be used for Perl's internal types..." >&4
9702
9703case "$use64bits:$d_quad:$quadtype" in
9704define:define:?*)
9705 ivtype="$quadtype"
9706 uvtype="$uquadtype"
9707 ivsize=8
9708 uvsize=8
9709 ;;
9710*) ivtype="long"
9711 uvtype="unsigned long"
9712 ivsize=$longsize
9713 uvsize=$longsize
9714 ;;
9715esac
9716
9717case "$uselongdouble:$d_longdbl" in
9718define:define)
9719 nvtype="long double"
9720 nvsize=$longdblsize
9721 ;;
9722*) nvtype=double
9723 nvsize=$doublesize
9724 ;;
9725esac
9726
9727$echo "(IV will be "$ivtype", $ivsize bytes)"
9728$echo "(UV will be "$uvtype", $uvsize bytes)"
9729$echo "(NV will be "$nvtype", $nvsize bytes)"
9730
9731$cat >try.c <<EOCP
9732#$i_inttypes I_INTTYPES
9733#ifdef I_INTTYPES
9734#include <inttypes.h>
9735#endif
9736#include <stdio.h>
9737int main() {
9738#ifdef INT8
9739 int8_t i = INT8_MAX;
9740 uint8_t u = UINT8_MAX;
9741 printf("int8_t\n");
9742#endif
9743#ifdef INT16
9744 int16_t i = INT16_MAX;
9745 uint16_t i = UINT16_MAX;
9746 printf("int16_t\n");
9747#endif
9748#ifdef INT32
9749 int32_t i = INT32_MAX;
9750 uint32_t u = UINT32_MAX;
9751 printf("int32_t\n");
9752#endif
9753}
9754EOCP
9755
9756case "$i8type" in
9757'') case "$charsize" in
9758 1) i8type=char
9759 u8type="unsigned char"
9760 i8size=$charsize
9761 u8size=$charsize
9762 ;;
9763 esac
9764 ;;
9765esac
9766case "$i8type" in
9767'') set try -DINT8
9768 if eval $compile; then
9769 case "`./try$exe_ext`" in
9770 int8_t) i8type=int8_t
9771 u8type=uint8_t
9772 i8size=1
9773 u8size=1
9774 ;;
9775 esac
9776 fi
9777 ;;
9778esac
9779case "$i8type" in
9780'') if $test $charsize -ge 1; then
9781 i8type=char
9782 u8type="unsigned char"
9783 i8size=$charsize
9784 u8size=$charsize
9785 fi
9786 ;;
9787esac
9788
9789case "$i16type" in
9790'') case "$shortsize" in
9791 2) i16type=short
9792 u16type="unsigned short"
9793 i16size=$shortsize
9794 u16size=$shortsize
9795 ;;
9796 esac
9797 ;;
9798esac
9799case "$i16type" in
9800'') set try -DINT16
9801 if eval $compile; then
9802 case "`./try$exe_ext`" in
9803 int16_t)
9804 i16type=int16_t
9805 u16type=uint16_t
9806 i16size=2
9807 u16size=2
9808 ;;
9809 esac
9810 fi
9811 ;;
9812esac
9813case "$i16type" in
9814'') if $test $shortsize -ge 2; then
9815 i16type=short
9816 u16type="unsigned short"
9817 i16size=$shortsize
9818 u16size=$shortsize
9819 fi
9820 ;;
9821esac
9822
9823case "$i32type" in
9824'') case "$longsize" in
9825 4) i32type=long
9826 u32type="unsigned long"
9827 i32size=$longsize
9828 u32size=$longsize
9829 ;;
9830 *) case "$intsize" in
9831 4) i32type=int
9832 u32type="unsigned int"
9833 i32size=$intsize
9834 u32size=$intsize
9835 ;;
9836 esac
9837 ;;
9838 esac
9839 ;;
9840esac
9841case "$i32type" in
9842'') set try -DINT32
9843 if eval $compile; then
9844 case "`./try$exe_ext`" in
9845 int32_t)
9846 i32type=int32_t
9847 u32type=uint32_t
9848 i32size=4
9849 u32size=4
9850 ;;
9851 esac
9852 fi
9853 ;;
9854esac
9855case "$i32type" in
9856'') if $test $intsize -ge 4; then
9857 i32type=int
9858 u32type="unsigned int"
9859 i32size=$intsize
9860 u32size=$intsize
9861 fi
9862 ;;
9863esac
9864
9865case "$i64type" in
9866'') case "$d_quad:$quadtype" in
9867 define:?*)
9868 i64type="$quadtype"
9869 u64type="$uquadtype"
9870 i64size=8
9871 u64size=8
9872 ;;
9873 esac
9874 ;;
9875esac
9876
9877$echo "Checking whether your NVs can preserve your UVs..." >&4
9878$cat <<EOP >try.c
9879#include <stdio.h>
9880int main() {
9881 $uvtype k = ($uvtype)~0, l;
9882 $nvtype d;
9883 l = k;
9884 d = ($nvtype)l;
9885 l = ($uvtype)d;
9886 if (l == k)
9887 printf("preserve\n");
9888 exit(0);
9889}
9890EOP
9891set try
9892if eval $compile; then
9893 case "`./try$exe_ext`" in
9894 preserve) d_nv_preserves_uv="$define" ;;
9895 esac
9896fi
9897case "$d_nv_preserves_uv" in
9898$define) $echo "Yes, they can." 2>&1 ;;
9899*) $echo "No, they can't." 2>&1
9900 d_nv_preserves_uv="$undef"
9901 ;;
9902esac
9903
9904$rm -f try.* try
9905
9906: see if POSIX threads are available
9907set pthread.h i_pthread
9908eval $inhdr
9909
9910
9911
9912
9913: how to create joinable pthreads
9914if test "X$usethreads" = "X$define" -a "X$i_pthread" = "X$define"; then
9915 echo " "
9916 echo "Checking what constant to use for creating joinable pthreads..." >&4
9917 $cat >try.c <<'EOCP'
9918#include <pthread.h>
9919int main() {
9920 int detachstate = JOINABLE;
9921}
9922EOCP
9923 set try -DJOINABLE=PTHREAD_CREATE_JOINABLE
9924 if eval $compile; then
9925 echo "You seem to use PTHREAD_CREATE_JOINABLE." >&4
9926 val="$undef" # Yes, undef.
9927 set d_old_pthread_create_joinable
9928 eval $setvar
9929 val=""
9930 set old_pthread_create_joinable
9931 eval $setvar
9932 else
9933 set try -DJOINABLE=PTHREAD_CREATE_UNDETACHED
9934 if eval $compile; then
9935 echo "You seem to use PTHREAD_CREATE_UNDETACHED." >&4
9936 val="$define"
9937 set d_old_pthread_create_joinable
9938 eval $setvar
9939 val=PTHREAD_CREATE_UNDETACHED
9940 set old_pthread_create_joinable
9941 eval $setvar
9942 else
9943 set try -DJOINABLE=__UNDETACHED
9944 if eval $compile; then
9945 echo "You seem to use __UNDETACHED." >&4
9946 val="$define"
9947 set d_old_pthread_create_joinable
9948 eval $setvar
9949 val=__UNDETACHED
9950 set old_pthread_create_joinable
9951 eval $setvar
9952 else
9953 echo "Egads, nothing obvious found. Guessing that you use 0." >&4
9954 val="$define"
9955 set d_old_pthread_create_joinable
9956 eval $setvar
9957 val=0
9958 set old_pthread_create_joinable
9959 eval $setvar
9960 fi
9961 fi
9962 fi
9963 $rm -f try try.*
9964else
9965 d_old_pthread_create_joinable="$undef"
9966 old_pthread_create_joinable=""
9967fi
9968
9969: see if pause exists
9970set pause d_pause
9971eval $inlibc
9972
9973: see if pipe exists
9974set pipe d_pipe
9975eval $inlibc
9976
9977: see if poll exists
9978set poll d_poll
9979eval $inlibc
9980
9981
9982: see whether the various POSIXish _yields exist
9983$cat >try.c <<EOP
9984#include <pthread.h>
9985#include <stdio.h>
9986int main() {
9987#ifdef SCHED_YIELD
9988 sched_yield();
9989#else
9990#ifdef PTHREAD_YIELD
9991 pthread_yield();
9992#else
9993#ifdef PTHREAD_YIELD_NULL
9994 pthread_yield(NULL);
9995#endif
9996#endif
9997#endif
9998}
9999EOP
10000: see if sched_yield exists
10001set try -DSCHED_YIELD
10002if eval $compile; then
10003 val="$define"
10004 sched_yield='sched_yield()'
10005else
10006 val="$undef"
10007fi
10008case "$usethreads" in
10009$define)
10010 case "$val" in
10011 $define) echo 'sched_yield() found.' >&4 ;;
10012 *) echo 'sched_yield() NOT found.' >&4 ;;
10013 esac
10014esac
10015set d_sched_yield
10016eval $setvar
10017
10018: see if pthread_yield exists
10019set try -DPTHREAD_YIELD
10020if eval $compile; then
10021 val="$define"
10022 case "$sched_yield" in
10023 '') sched_yield='pthread_yield()' ;;
10024 esac
10025else
10026 set try -DPTHREAD_YIELD_NULL
10027 if eval $compile; then
10028 val="$define"
10029 case "$sched_yield" in
10030 '') sched_yield='pthread_yield(NULL)' ;;
10031 esac
10032 else
10033 val="$undef"
10034 fi
10035fi
10036case "$usethreads" in
10037$define)
10038 case "$val" in
10039 $define) echo 'pthread_yield() found.' >&4 ;;
10040 *) echo 'pthread_yield() NOT found.' >&4 ;;
10041 esac
10042 ;;
10043esac
10044set d_pthread_yield
10045eval $setvar
10046
10047case "$sched_yield" in
10048'') sched_yield=undef ;;
10049esac
10050
10051$rm -f try try.*
10052
10053: see if this is a pwd.h system
10054set pwd.h i_pwd
10055eval $inhdr
10056
10057case "$i_pwd" in
10058$define)
10059 xxx=`./findhdr pwd.h`
10060 $cppstdin $cppflags $cppminus < $xxx >$$.h
10061
10062 if $contains 'pw_quota' $$.h >/dev/null 2>&1; then
10063 val="$define"
10064 else
10065 val="$undef"
10066 fi
10067 set d_pwquota
10068 eval $setvar
10069
10070 if $contains 'pw_age' $$.h >/dev/null 2>&1; then
10071 val="$define"
10072 else
10073 val="$undef"
10074 fi
10075 set d_pwage
10076 eval $setvar
10077
10078 if $contains 'pw_change' $$.h >/dev/null 2>&1; then
10079 val="$define"
10080 else
10081 val="$undef"
10082 fi
10083 set d_pwchange
10084 eval $setvar
10085
10086 if $contains 'pw_class' $$.h >/dev/null 2>&1; then
10087 val="$define"
10088 else
10089 val="$undef"
10090 fi
10091 set d_pwclass
10092 eval $setvar
10093
10094 if $contains 'pw_expire' $$.h >/dev/null 2>&1; then
10095 val="$define"
10096 else
10097 val="$undef"
10098 fi
10099 set d_pwexpire
10100 eval $setvar
10101
10102 if $contains 'pw_comment' $$.h >/dev/null 2>&1; then
10103 val="$define"
10104 else
10105 val="$undef"
10106 fi
10107 set d_pwcomment
10108 eval $setvar
10109
10110 if $contains 'pw_gecos' $$.h >/dev/null 2>&1; then
10111 val="$define"
10112 else
10113 val="$undef"
10114 fi
10115 set d_pwgecos
10116 eval $setvar
10117
10118 if $contains 'pw_passwd' $$.h >/dev/null 2>&1; then
10119 val="$define"
10120 else
10121 val="$undef"
10122 fi
10123 set d_pwpasswd
10124 eval $setvar
10125
10126 $rm -f $$.h
10127 ;;
10128*)
10129 val="$undef";
10130 set d_pwquota; eval $setvar
10131 set d_pwage; eval $setvar
10132 set d_pwchange; eval $setvar
10133 set d_pwclass; eval $setvar
10134 set d_pwexpire; eval $setvar
10135 set d_pwcomment; eval $setvar
10136 set d_pwgecos; eval $setvar
10137 set d_pwpasswd; eval $setvar
10138 ;;
10139esac
10140
10141: see if readdir and friends exist
10142set readdir d_readdir
10143eval $inlibc
10144set seekdir d_seekdir
10145eval $inlibc
10146set telldir d_telldir
10147eval $inlibc
10148set rewinddir d_rewinddir
10149eval $inlibc
10150
10151: see if readlink exists
10152set readlink d_readlink
10153eval $inlibc
10154
10155: see if rename exists
10156set rename d_rename
10157eval $inlibc
10158
10159: see if rmdir exists
10160set rmdir d_rmdir
10161eval $inlibc
10162
10163: see if memory.h is available.
10164val=''
10165set memory.h val
10166eval $inhdr
10167
10168: See if it conflicts with string.h
10169case "$val" in
10170$define)
10171 case "$strings" in
10172 '') ;;
10173 *)
10174 $cppstdin $cppflags $cppminus < $strings > mem.h
10175 if $contains 'memcpy' mem.h >/dev/null 2>&1; then
10176 echo " "
10177 echo "We won't be including <memory.h>."
10178 val="$undef"
10179 fi
10180 $rm -f mem.h
10181 ;;
10182 esac
10183esac
10184set i_memory
10185eval $setvar
10186
10187: can bcopy handle overlapping blocks?
10188val="$undef"
10189case "$d_bcopy" in
10190"$define")
10191 echo " "
10192 echo "Checking to see if your bcopy() can do overlapping copies..." >&4
10193 $cat >try.c <<EOCP
10194#$i_memory I_MEMORY
10195#$i_stdlib I_STDLIB
10196#$i_string I_STRING
10197#$i_unistd I_UNISTD
10198EOCP
10199 $cat >>try.c <<'EOCP'
10200#include <stdio.h>
10201#ifdef I_MEMORY
10202# include <memory.h>
10203#endif
10204#ifdef I_STDLIB
10205# include <stdlib.h>
10206#endif
10207#ifdef I_STRING
10208# include <string.h>
10209#else
10210# include <strings.h>
10211#endif
10212#ifdef I_UNISTD
10213# include <unistd.h> /* Needed for NetBSD */
10214#endif
10215int main()
10216{
10217char buf[128], abc[128];
10218char *b;
10219int len;
10220int off;
10221int align;
10222
10223bcopy("abcdefghijklmnopqrstuvwxyz0123456789", abc, 36);
10224
10225for (align = 7; align >= 0; align--) {
10226 for (len = 36; len; len--) {
10227 b = buf+align;
10228 bcopy(abc, b, len);
10229 for (off = 1; off <= len; off++) {
10230 bcopy(b, b+off, len);
10231 bcopy(b+off, b, len);
10232 if (bcmp(b, abc, len))
10233 exit(1);
10234 }
10235 }
10236}
10237exit(0);
10238}
10239EOCP
10240 set try
10241 if eval $compile_ok; then
10242 if ./try 2>/dev/null; then
10243 echo "Yes, it can."
10244 val="$define"
10245 else
10246 echo "It can't, sorry."
10247 case "$d_memmove" in
10248 "$define") echo "But that's Ok since you have memmove()." ;;
10249 esac
10250 fi
10251 else
10252 echo "(I can't compile the test program, so we'll assume not...)"
10253 case "$d_memmove" in
10254 "$define") echo "But that's Ok since you have memmove()." ;;
10255 esac
10256 fi
10257 ;;
10258esac
10259$rm -f try.* try core
10260set d_safebcpy
10261eval $setvar
10262
10263: can memcpy handle overlapping blocks?
10264val="$undef"
10265case "$d_memcpy" in
10266"$define")
10267 echo " "
10268 echo "Checking to see if your memcpy() can do overlapping copies..." >&4
10269 $cat >try.c <<EOCP
10270#$i_memory I_MEMORY
10271#$i_stdlib I_STDLIB
10272#$i_string I_STRING
10273#$i_unistd I_UNISTD
10274EOCP
10275 $cat >>try.c <<'EOCP'
10276#include <stdio.h>
10277#ifdef I_MEMORY
10278# include <memory.h>
10279#endif
10280#ifdef I_STDLIB
10281# include <stdlib.h>
10282#endif
10283#ifdef I_STRING
10284# include <string.h>
10285#else
10286# include <strings.h>
10287#endif
10288#ifdef I_UNISTD
10289# include <unistd.h> /* Needed for NetBSD */
10290#endif
10291int main()
10292{
10293char buf[128], abc[128];
10294char *b;
10295int len;
10296int off;
10297int align;
10298
10299/* Copy "abcde..." string to char abc[] so that gcc doesn't
10300 try to store the string in read-only memory. */
10301memcpy(abc, "abcdefghijklmnopqrstuvwxyz0123456789", 36);
10302
10303for (align = 7; align >= 0; align--) {
10304 for (len = 36; len; len--) {
10305 b = buf+align;
10306 memcpy(b, abc, len);
10307 for (off = 1; off <= len; off++) {
10308 memcpy(b+off, b, len);
10309 memcpy(b, b+off, len);
10310 if (memcmp(b, abc, len))
10311 exit(1);
10312 }
10313 }
10314}
10315exit(0);
10316}
10317EOCP
10318 set try
10319 if eval $compile_ok; then
10320 if ./try 2>/dev/null; then
10321 echo "Yes, it can."
10322 val="$define"
10323 else
10324 echo "It can't, sorry."
10325 case "$d_memmove" in
10326 "$define") echo "But that's Ok since you have memmove()." ;;
10327 esac
10328 fi
10329 else
10330 echo "(I can't compile the test program, so we'll assume not...)"
10331 case "$d_memmove" in
10332 "$define") echo "But that's Ok since you have memmove()." ;;
10333 esac
10334 fi
10335 ;;
10336esac
10337$rm -f try.* try core
10338set d_safemcpy
10339eval $setvar
10340
10341: can memcmp be trusted to compare relative magnitude?
10342val="$undef"
10343case "$d_memcmp" in
10344"$define")
10345 echo " "
10346 echo "Checking if your memcmp() can compare relative magnitude..." >&4
10347 $cat >try.c <<EOCP
10348#$i_memory I_MEMORY
10349#$i_stdlib I_STDLIB
10350#$i_string I_STRING
10351#$i_unistd I_UNISTD
10352EOCP
10353 $cat >>try.c <<'EOCP'
10354#include <stdio.h>
10355#ifdef I_MEMORY
10356# include <memory.h>
10357#endif
10358#ifdef I_STDLIB
10359# include <stdlib.h>
10360#endif
10361#ifdef I_STRING
10362# include <string.h>
10363#else
10364# include <strings.h>
10365#endif
10366#ifdef I_UNISTD
10367# include <unistd.h> /* Needed for NetBSD */
10368#endif
10369int main()
10370{
10371char a = -1;
10372char b = 0;
10373if ((a < b) && memcmp(&a, &b, 1) < 0)
10374 exit(1);
10375exit(0);
10376}
10377EOCP
10378 set try
10379 if eval $compile_ok; then
10380 if ./try 2>/dev/null; then
10381 echo "Yes, it can."
10382 val="$define"
10383 else
10384 echo "No, it can't (it uses signed chars)."
10385 fi
10386 else
10387 echo "(I can't compile the test program, so we'll assume not...)"
10388 fi
10389 ;;
10390esac
10391$rm -f try.* try core
10392set d_sanemcmp
10393eval $setvar
10394
10395: see if select exists
10396set select d_select
10397eval $inlibc
10398
10399: see if semctl exists
10400set semctl d_semctl
10401eval $inlibc
10402
10403: see if semget exists
10404set semget d_semget
10405eval $inlibc
10406
10407: see if semop exists
10408set semop d_semop
10409eval $inlibc
10410
10411: see how much of the 'sem*(2)' library is present.
10412h_sem=true
10413echo " "
10414case "$d_semctl$d_semget$d_semop" in
10415*"$undef"*) h_sem=false;;
10416esac
10417case "$osname" in
10418freebsd)
10419 case "`ipcs 2>&1`" in
10420 "SVID messages"*"not configured"*)
10421 echo "Your $osname does not have the sem*(2) configured." >&4
10422 h_sem=false
10423 val="$undef"
10424 set semctl d_semctl
10425 eval $setvar
10426 set semget d_semget
10427 eval $setvar
10428 set semop d_semop
10429 eval $setvar
10430 ;;
10431 esac
10432 ;;
10433esac
10434: we could also check for sys/ipc.h ...
10435if $h_sem && $test `./findhdr sys/sem.h`; then
10436 echo "You have the full sem*(2) library." >&4
10437 val="$define"
10438else
10439 echo "You don't have the full sem*(2) library." >&4
10440 val="$undef"
10441fi
10442set d_sem
10443eval $setvar
10444
10445: see whether sys/sem.h defines union semun
10446echo " "
10447$cat > try.c <<'END'
10448#include <sys/types.h>
10449#include <sys/ipc.h>
10450#include <sys/sem.h>
10451int main () { union semun semun; semun.buf = 0; }
10452END
10453set try
10454if eval $compile; then
10455 echo "You have union semun in <sys/sem.h>." >&4
10456 val="$define"
10457else
10458 echo "You do not have union semun in <sys/sem.h>." >&4
10459 val="$undef"
10460fi
10461$rm -f try try.c try.h
10462set d_union_semun
10463eval $setvar
10464
10465: see how to do semctl IPC_STAT
10466case "$d_sem" in
10467$define)
10468 : see whether semctl IPC_STAT can use union semun
10469 echo " "
10470 $cat > try.h <<END
10471#ifndef S_IRUSR
10472# ifdef S_IREAD
10473# define S_IRUSR S_IREAD
10474# define S_IWUSR S_IWRITE
10475# define S_IXUSR S_IEXEC
10476# else
10477# define S_IRUSR 0400
10478# define S_IWUSR 0200
10479# define S_IXUSR 0100
10480# endif
10481# define S_IRGRP (S_IRUSR>>3)
10482# define S_IWGRP (S_IWUSR>>3)
10483# define S_IXGRP (S_IXUSR>>3)
10484# define S_IROTH (S_IRUSR>>6)
10485# define S_IWOTH (S_IWUSR>>6)
10486# define S_IXOTH (S_IXUSR>>6)
10487#endif
10488#ifndef S_IRWXU
10489# define S_IRWXU (S_IRUSR|S_IWUSR|S_IXUSR)
10490# define S_IRWXG (S_IRGRP|S_IWGRP|S_IXGRP)
10491# define S_IRWXO (S_IROTH|S_IWOTH|S_IXOTH)
10492#endif
10493END
10494
10495 $cat > try.c <<END
10496#include <sys/types.h>
10497#include <sys/ipc.h>
10498#include <sys/sem.h>
10499#include <sys/stat.h>
10500#include <stdio.h>
10501#include <errno.h>
10502#include "try.h"
10503#ifndef errno
10504extern int errno;
10505#endif
10506#$d_union_semun HAS_UNION_SEMUN
10507int main() {
10508 union semun
10509#ifndef HAS_UNION_SEMUN
10510 {
10511 int val;
10512 struct semid_ds *buf;
10513 unsigned short *array;
10514 }
10515#endif
10516 arg;
10517 int sem, st;
10518
10519#if defined(IPC_PRIVATE) && defined(S_IRWXU) && defined(S_IRWXG) && defined(S_IRWXO) && defined(IPC_CREAT)
10520 sem = semget(IPC_PRIVATE, 1, S_IRWXU|S_IRWXG|S_IRWXO|IPC_CREAT);
10521 if (sem > -1) {
10522 struct semid_ds argbuf;
10523 arg.buf = &argbuf;
10524# ifdef IPC_STAT
10525 st = semctl(sem, 0, IPC_STAT, arg);
10526 if (st == 0)
10527 printf("semun\n");
10528 else
10529# endif /* IPC_STAT */
10530 printf("semctl IPC_STAT failed: errno = %d\n", errno);
10531# ifdef IPC_RMID
10532 if (semctl(sem, 0, IPC_RMID, arg) != 0)
10533# endif /* IPC_RMID */
10534 printf("semctl IPC_RMID failed: errno = %d\n", errno);
10535 } else
10536#endif /* IPC_PRIVATE && ... */
10537 printf("semget failed: errno = %d\n", errno);
10538 return 0;
10539}
10540END
10541 val="$undef"
10542 set try
10543 if eval $compile; then
10544 xxx=`./try`
10545 case "$xxx" in
10546 semun) val="$define" ;;
10547 esac
10548 fi
10549 $rm -f try try.c
10550 set d_semctl_semun
10551 eval $setvar
10552 case "$d_semctl_semun" in
10553 $define)
10554 echo "You can use union semun for semctl IPC_STAT." >&4
10555 also='also'
10556 ;;
10557 *) echo "You cannot use union semun for semctl IPC_STAT." >&4
10558 also=''
10559 ;;
10560 esac
10561
10562 : see whether semctl IPC_STAT can use struct semid_ds pointer
10563 $cat > try.c <<'END'
10564#include <sys/types.h>
10565#include <sys/ipc.h>
10566#include <sys/sem.h>
10567#include <sys/stat.h>
10568#include "try.h"
10569#include <stdio.h>
10570#include <errno.h>
10571#ifndef errno
10572extern int errno;
10573#endif
10574int main() {
10575 struct semid_ds arg;
10576 int sem, st;
10577
10578#if defined(IPC_PRIVATE) && defined(S_IRWXU) && defined(S_IRWXG) && defined(S_IRWXO) && defined(IPC_CREAT)
10579 sem = semget(IPC_PRIVATE, 1, S_IRWXU|S_IRWXG|S_IRWXO|IPC_CREAT);
10580 if (sem > -1) {
10581# ifdef IPC_STAT
10582 st = semctl(sem, 0, IPC_STAT, &arg);
10583 if (st == 0)
10584 printf("semid_ds\n");
10585 else
10586# endif /* IPC_STAT */
10587 printf("semctl IPC_STAT failed: errno = %d\n", errno);
10588# ifdef IPC_RMID
10589 if (semctl(sem, 0, IPC_RMID, &arg) != 0)
10590# endif /* IPC_RMID */
10591 printf("semctl IPC_RMID failed: errno = %d\n", errno);
10592 } else
10593#endif /* IPC_PRIVATE && ... */
10594 printf("semget failed: errno = %d\n", errno);
10595
10596 return 0;
10597}
10598END
10599 val="$undef"
10600 set try
10601 if eval $compile; then
10602 xxx=`./try`
10603 case "$xxx" in
10604 semid_ds) val="$define" ;;
10605 esac
10606 fi
10607 $rm -f try try.c
10608 set d_semctl_semid_ds
10609 eval $setvar
10610 case "$d_semctl_semid_ds" in
10611 $define)
10612 echo "You can $also use struct semid_ds* for semctl IPC_STAT." >&4
10613 ;;
10614 *) echo "You cannot use struct semid_ds* for semctl IPC_STAT." >&4
10615 ;;
10616 esac
10617 $rm -f try.h
10618 ;;
10619*) val="$undef"
10620
10621 # We do not have the full sem*(2) library, so assume we can not
10622 # use either.
10623
10624 set d_semctl_semun
10625 eval $setvar
10626
10627 set d_semctl_semid_ds
10628 eval $setvar
10629 ;;
10630esac
10631
10632: see if setegid exists
10633set setegid d_setegid
10634eval $inlibc
10635
10636: see if seteuid exists
10637set seteuid d_seteuid
10638eval $inlibc
10639
10640: see if setgrent exists
10641set setgrent d_setgrent
10642eval $inlibc
10643
10644: see if sethostent exists
10645set sethostent d_sethent
10646eval $inlibc
10647
10648: see if setlinebuf exists
10649set setlinebuf d_setlinebuf
10650eval $inlibc
10651
10652: see if setlocale exists
10653set setlocale d_setlocale
10654eval $inlibc
10655
10656: see if setnetent exists
10657set setnetent d_setnent
10658eval $inlibc
10659
10660: see if setprotoent exists
10661set setprotoent d_setpent
10662eval $inlibc
10663
10664: see if setpgid exists
10665set setpgid d_setpgid
10666eval $inlibc
10667
10668: see if setpgrp2 exists
10669set setpgrp2 d_setpgrp2
10670eval $inlibc
10671
10672: see if setpriority exists
10673set setpriority d_setprior
10674eval $inlibc
10675
10676: see if setpwent exists
10677set setpwent d_setpwent
10678eval $inlibc
10679
10680: see if setregid exists
10681set setregid d_setregid
10682eval $inlibc
10683set setresgid d_setresgid
10684eval $inlibc
10685
10686: see if setreuid exists
10687set setreuid d_setreuid
10688eval $inlibc
10689set setresuid d_setresuid
10690eval $inlibc
10691
10692: see if setrgid exists
10693set setrgid d_setrgid
10694eval $inlibc
10695
10696: see if setruid exists
10697set setruid d_setruid
10698eval $inlibc
10699
10700: see if setservent exists
10701set setservent d_setsent
10702eval $inlibc
10703
10704: see if setsid exists
10705set setsid d_setsid
10706eval $inlibc
10707
10708: see if setspent exists
10709set setspent d_setspent
10710eval $inlibc
10711
10712: see if setvbuf exists
10713set setvbuf d_setvbuf
10714eval $inlibc
10715
10716: see if sfio.h is available
10717set sfio.h i_sfio
10718eval $inhdr
10719
10720
10721: see if sfio library is available
10722case "$i_sfio" in
10723$define)
10724 val=''
10725 set sfreserve val
10726 eval $inlibc
10727 ;;
10728*)
10729 val="$undef"
10730 ;;
10731esac
10732: Ok, but do we want to use it.
10733case "$val" in
10734$define)
10735 case "$usesfio" in
10736 true|$define|[yY]*) dflt='y';;
10737 *) dflt='n';;
10738 esac
10739 echo "$package can use the sfio library, but it is experimental."
10740 rp="You seem to have sfio available, do you want to try using it?"
10741 . ./myread
10742 case "$ans" in
10743 y|Y) ;;
10744 *) echo "Ok, avoiding sfio this time. I'll use stdio instead."
10745 val="$undef"
10746 : Remove sfio from list of libraries to use
10747 set `echo X $libs | $sed -e 's/-lsfio / /' -e 's/-lsfio$//'`
10748 shift
10749 libs="$*"
10750 echo "libs = $libs" >&4
10751 ;;
10752 esac
10753 ;;
10754*) case "$usesfio" in
10755 true|$define|[yY]*)
10756 echo "Sorry, cannot find sfio on this machine" >&4
10757 echo "Ignoring your setting of usesfio=$usesfio" >&4
10758 ;;
10759 esac
10760 ;;
10761esac
10762set d_sfio
10763eval $setvar
10764case "$d_sfio" in
10765$define) usesfio='true';;
10766*) usesfio='false';;
10767esac
10768
10769: see if shmctl exists
10770set shmctl d_shmctl
10771eval $inlibc
10772
10773: see if shmget exists
10774set shmget d_shmget
10775eval $inlibc
10776
10777: see if shmat exists
10778set shmat d_shmat
10779eval $inlibc
10780: see what shmat returns
10781case "$d_shmat" in
10782"$define")
10783 $cat >shmat.c <<'END'
10784#include <sys/shm.h>
10785void *shmat();
10786END
10787 if $cc $ccflags -c shmat.c >/dev/null 2>&1; then
10788 shmattype='void *'
10789 else
10790 shmattype='char *'
10791 fi
10792 echo "and it returns ($shmattype)." >&4
10793 : see if a prototype for shmat is available
10794 xxx=`./findhdr sys/shm.h`
10795 $cppstdin $cppflags $cppminus < $xxx > shmat.c 2>/dev/null
10796 if $contains 'shmat.*(' shmat.c >/dev/null 2>&1; then
10797 val="$define"
10798 else
10799 val="$undef"
10800 fi
10801 $rm -f shmat.[co]
10802 ;;
10803*)
10804 val="$undef"
10805 ;;
10806esac
10807set d_shmatprototype
10808eval $setvar
10809
10810: see if shmdt exists
10811set shmdt d_shmdt
10812eval $inlibc
10813
10814: see how much of the 'shm*(2)' library is present.
10815h_shm=true
10816echo " "
10817case "$d_shmctl$d_shmget$d_shmat$d_shmdt" in
10818*"$undef"*) h_shm=false;;
10819esac
10820case "$osname" in
10821freebsd)
10822 case "`ipcs 2>&1`" in
10823 "SVID shared memory"*"not configured"*)
10824 echo "Your $osname does not have the shm*(2) configured." >&4
10825 h_shm=false
10826 val="$undef"
10827 set shmctl d_shmctl
10828 evat $setvar
10829 set shmget d_shmget
10830 evat $setvar
10831 set shmat d_shmat
10832 evat $setvar
10833 set shmdt d_shmdt
10834 evat $setvar
10835 ;;
10836 esac
10837 ;;
10838esac
10839: we could also check for sys/ipc.h ...
10840if $h_shm && $test `./findhdr sys/shm.h`; then
10841 echo "You have the full shm*(2) library." >&4
10842 val="$define"
10843else
10844 echo "You don't have the full shm*(2) library." >&4
10845 val="$undef"
10846fi
10847set d_shm
10848eval $setvar
10849
10850echo " "
10851: see if we have sigaction
10852if set sigaction val -f d_sigaction; eval $csym; $val; then
10853 echo 'sigaction() found.' >&4
10854 $cat > try.c <<'EOP'
10855#include <stdio.h>
10856#include <sys/types.h>
10857#include <signal.h>
10858int main()
10859{
10860 struct sigaction act, oact;
10861 act.sa_flags = 0;
10862 oact.sa_handler = 0;
10863 /* so that act and oact are used */
10864 exit(act.sa_flags == 0 && oact.sa_handler == 0);
10865}
10866EOP
10867 set try
10868 if eval $compile_ok; then
10869 val="$define"
10870 else
10871 echo "But you don't seem to have a useable struct sigaction." >&4
10872 val="$undef"
10873 fi
10874else
10875 echo 'sigaction NOT found.' >&4
10876 val="$undef"
10877fi
10878set d_sigaction; eval $setvar
10879$rm -f try try$_o try.c
10880
10881: see if sigsetjmp exists
10882echo " "
10883case "$d_sigsetjmp" in
10884'')
10885 $cat >try.c <<'EOP'
10886#include <setjmp.h>
10887sigjmp_buf env;
10888int set = 1;
10889int main()
10890{
10891 if (sigsetjmp(env,1))
10892 exit(set);
10893 set = 0;
10894 siglongjmp(env, 1);
10895 exit(1);
10896}
10897EOP
10898 set try
10899 if eval $compile; then
10900 if ./try >/dev/null 2>&1; then
10901 echo "POSIX sigsetjmp found." >&4
10902 val="$define"
10903 else
10904 $cat >&4 <<EOM
10905Uh-Oh! You have POSIX sigsetjmp and siglongjmp, but they do not work properly!!
10906I'll ignore them.
10907EOM
10908 val="$undef"
10909 fi
10910 else
10911 echo "sigsetjmp not found." >&4
10912 val="$undef"
10913 fi
10914 ;;
10915*) val="$d_sigsetjmp"
10916 case "$d_sigsetjmp" in
10917 $define) echo "POSIX sigsetjmp found." >&4;;
10918 $undef) echo "sigsetjmp not found." >&4;;
10919 esac
10920 ;;
10921esac
10922set d_sigsetjmp
10923eval $setvar
10924$rm -f try.c try
10925
10926: see if sqrtl exists
10927set sqrtl d_sqrtl
10928eval $inlibc
10929
10930: see if sys/stat.h is available
10931set sys/stat.h i_sysstat
10932eval $inhdr
10933
10934
10935: see if stat knows about block sizes
10936echo " "
10937echo "Checking to see if your struct stat has st_blocks field..." >&4
10938set d_statblks stat st_blocks $i_sysstat sys/stat.h
10939eval $hasfield
10940
10941
10942: see if this is a sys/vfs.h system
10943set sys/vfs.h i_sysvfs
10944eval $inhdr
10945
10946
10947: see if this is a sys/statfs.h system
10948set sys/statfs.h i_sysstatfs
10949eval $inhdr
10950
10951
10952echo " "
10953echo "Checking to see if your system supports struct statfs..." >&4
10954set 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
10955eval $hasstruct
10956case "$d_statfs_s" in
10957"$define") echo "Yes, it does." ;;
10958*) echo "No, it doesn't." ;;
10959esac
10960
10961
10962
10963: see if struct statfs knows about f_flags
10964case "$d_statfs_s" in
10965define)
10966 echo " "
10967 echo "Checking to see if your struct statfs has f_flags field..." >&4
10968 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
10969 eval $hasfield
10970 ;;
10971*) val="$undef"
10972 set d_statfs_f_flags
10973 eval $setvar
10974 ;;
10975esac
10976case "$d_statfs_f_flags" in
10977"$define") echo "Yes, it does." ;;
10978*) echo "No, it doesn't." ;;
10979esac
10980
10981: see if _ptr and _cnt from stdio act std
10982echo " "
10983if $contains '_IO_fpos_t' `./findhdr stdio.h` `./findhdr libio.h` >/dev/null 2>&1 ; then
10984 echo "(Looks like you have stdio.h from Linux.)"
10985 case "$stdio_ptr" in
10986 '') stdio_ptr='((fp)->_IO_read_ptr)'
10987 ptr_lval=$define
10988 ;;
10989 *) ptr_lval=$d_stdio_ptr_lval;;
10990 esac
10991 case "$stdio_cnt" in
10992 '') stdio_cnt='((fp)->_IO_read_end - (fp)->_IO_read_ptr)'
10993 cnt_lval=$undef
10994 ;;
10995 *) cnt_lval=$d_stdio_cnt_lval;;
10996 esac
10997 case "$stdio_base" in
10998 '') stdio_base='((fp)->_IO_read_base)';;
10999 esac
11000 case "$stdio_bufsiz" in
11001 '') stdio_bufsiz='((fp)->_IO_read_end - (fp)->_IO_read_base)';;
11002 esac
11003else
11004 case "$stdio_ptr" in
11005 '') stdio_ptr='((fp)->_ptr)'
11006 ptr_lval=$define
11007 ;;
11008 *) ptr_lval=$d_stdio_ptr_lval;;
11009 esac
11010 case "$stdio_cnt" in
11011 '') stdio_cnt='((fp)->_cnt)'
11012 cnt_lval=$define
11013 ;;
11014 *) cnt_lval=$d_stdio_cnt_lval;;
11015 esac
11016 case "$stdio_base" in
11017 '') stdio_base='((fp)->_base)';;
11018 esac
11019 case "$stdio_bufsiz" in
11020 '') stdio_bufsiz='((fp)->_cnt + (fp)->_ptr - (fp)->_base)';;
11021 esac
11022fi
11023: test whether _ptr and _cnt really work
11024echo "Checking how std your stdio is..." >&4
11025$cat >try.c <<EOP
11026#include <stdio.h>
11027#define FILE_ptr(fp) $stdio_ptr
11028#define FILE_cnt(fp) $stdio_cnt
11029int main() {
11030 FILE *fp = fopen("try.c", "r");
11031 char c = getc(fp);
11032 if (
11033 18 <= FILE_cnt(fp) &&
11034 strncmp(FILE_ptr(fp), "include <stdio.h>\n", 18) == 0
11035 )
11036 exit(0);
11037 exit(1);
11038}
11039EOP
11040val="$undef"
11041set try
11042if eval $compile; then
11043 if ./try; then
11044 echo "Your stdio acts pretty std."
11045 val="$define"
11046 else
11047 echo "Your stdio isn't very std."
11048 fi
11049else
11050 echo "Your stdio doesn't appear very std."
11051fi
11052$rm -f try.c try
11053set d_stdstdio
11054eval $setvar
11055
11056: Can _ptr be used as an lvalue?
11057case "$d_stdstdio$ptr_lval" in
11058$define$define) val=$define ;;
11059*) val=$undef ;;
11060esac
11061set d_stdio_ptr_lval
11062eval $setvar
11063
11064: Can _cnt be used as an lvalue?
11065case "$d_stdstdio$cnt_lval" in
11066$define$define) val=$define ;;
11067*) val=$undef ;;
11068esac
11069set d_stdio_cnt_lval
11070eval $setvar
11071
11072: see if _base is also standard
11073val="$undef"
11074case "$d_stdstdio" in
11075$define)
11076 $cat >try.c <<EOP
11077#include <stdio.h>
11078#define FILE_base(fp) $stdio_base
11079#define FILE_bufsiz(fp) $stdio_bufsiz
11080int main() {
11081 FILE *fp = fopen("try.c", "r");
11082 char c = getc(fp);
11083 if (
11084 19 <= FILE_bufsiz(fp) &&
11085 strncmp(FILE_base(fp), "#include <stdio.h>\n", 19) == 0
11086 )
11087 exit(0);
11088 exit(1);
11089}
11090EOP
11091 set try
11092 if eval $compile; then
11093 if ./try; then
11094 echo "And its _base field acts std."
11095 val="$define"
11096 else
11097 echo "But its _base field isn't std."
11098 fi
11099 else
11100 echo "However, it seems to be lacking the _base field."
11101 fi
11102 $rm -f try.c try
11103 ;;
11104esac
11105set d_stdiobase
11106eval $setvar
11107
11108$cat >&4 <<EOM
11109Checking how to access stdio streams by file descriptor number...
11110EOM
11111case "$stdio_stream_array" in
11112'') $cat >try.c <<EOCP
11113#include <stdio.h>
11114int main() {
11115 if (&STDIO_STREAM_ARRAY[fileno(stdin)] == stdin)
11116 printf("yes\n");
11117}
11118EOCP
11119 for s in _iob __iob __sF
11120 do
11121 set try -DSTDIO_STREAM_ARRAY=$s
11122 if eval $compile; then
11123 case "`./try$exe_ext`" in
11124 yes) stdio_stream_array=$s; break ;;
11125 esac
11126 fi
11127 done
11128 $rm -f try.* try$exe_ext
11129esac
11130case "$stdio_stream_array" in
11131'') $cat >&4 <<EOM
11132I can't figure out how to access stdio streams by file descriptor number.
11133EOM
11134 d_stdio_stream_array="$undef"
11135 ;;
11136*) $cat >&4 <<EOM
11137You can access stdio streams by file descriptor number by the $stdio_stream_array array.
11138EOM
11139 d_stdio_stream_array="$define"
11140 ;;
11141esac
11142
11143: see if strcoll exists
11144set strcoll d_strcoll
11145eval $inlibc
11146
11147: check for structure copying
11148echo " "
11149echo "Checking to see if your C compiler can copy structs..." >&4
11150$cat >try.c <<'EOCP'
11151int main()
11152{
11153 struct blurfl {
11154 int dyick;
11155 } foo, bar;
11156
11157 foo = bar;
11158}
11159EOCP
11160if $cc -c try.c >/dev/null 2>&1 ; then
11161 val="$define"
11162 echo "Yup, it can."
11163else
11164 val="$undef"
11165 echo "Nope, it can't."
11166fi
11167set d_strctcpy
11168eval $setvar
11169$rm -f try.*
11170
11171: see if strerror and/or sys_errlist[] exist
11172echo " "
11173if test "X$d_strerror" = X -o "X$d_syserrlst" = X; then
11174 if set strerror val -f d_strerror; eval $csym; $val; then
11175 echo 'strerror() found.' >&4
11176 d_strerror="$define"
11177 d_strerrm='strerror(e)'
11178 if set sys_errlist val -a d_syserrlst; eval $csym; $val; then
11179 echo "(You also have sys_errlist[], so we could roll our own strerror.)"
11180 d_syserrlst="$define"
11181 else
11182 echo "(Since you don't have sys_errlist[], sterror() is welcome.)"
11183 d_syserrlst="$undef"
11184 fi
11185 elif xxx=`./findhdr string.h`; test "$xxx" || xxx=`./findhdr strings.h`; \
11186 $contains '#[ ]*define.*strerror' "$xxx" >/dev/null 2>&1; then
11187 echo 'strerror() found in string header.' >&4
11188 d_strerror="$define"
11189 d_strerrm='strerror(e)'
11190 if set sys_errlist val -a d_syserrlst; eval $csym; $val; then
11191 echo "(Most probably, strerror() uses sys_errlist[] for descriptions.)"
11192 d_syserrlst="$define"
11193 else
11194 echo "(You don't appear to have any sys_errlist[], how can this be?)"
11195 d_syserrlst="$undef"
11196 fi
11197 elif set sys_errlist val -a d_syserrlst; eval $csym; $val; then
11198 echo "strerror() not found, but you have sys_errlist[] so we'll use that." >&4
11199 d_strerror="$undef"
11200 d_syserrlst="$define"
11201 d_strerrm='((e)<0||(e)>=sys_nerr?"unknown":sys_errlist[e])'
11202 else
11203 echo 'strerror() and sys_errlist[] NOT found.' >&4
11204 d_strerror="$undef"
11205 d_syserrlst="$undef"
11206 d_strerrm='"unknown"'
11207 fi
11208fi
11209
11210: see if strtod exists
11211set strtod d_strtod
11212eval $inlibc
11213
11214: see if strtol exists
11215set strtol d_strtol
11216eval $inlibc
11217
11218: see if strtold exists
11219set strtold d_strtold
11220eval $inlibc
11221
11222: see if strtoll exists
11223set strtoll d_strtoll
11224eval $inlibc
11225
11226: see if strtoul exists
11227set strtoul d_strtoul
11228eval $inlibc
11229
11230: see if strtoull exists
11231set strtoull d_strtoull
11232eval $inlibc
11233
11234: see if strtouq exists
11235set strtouq d_strtouq
11236eval $inlibc
11237
11238: see if strxfrm exists
11239set strxfrm d_strxfrm
11240eval $inlibc
11241
11242: see if symlink exists
11243set symlink d_symlink
11244eval $inlibc
11245
11246: see if syscall exists
11247set syscall d_syscall
11248eval $inlibc
11249
11250: see if sysconf exists
11251set sysconf d_sysconf
11252eval $inlibc
11253
11254: see if system exists
11255set system d_system
11256eval $inlibc
11257
11258: see if tcgetpgrp exists
11259set tcgetpgrp d_tcgetpgrp
11260eval $inlibc
11261
11262: see if tcsetpgrp exists
11263set tcsetpgrp d_tcsetpgrp
11264eval $inlibc
11265
11266: see if prototype for telldir is available
11267echo " "
11268set d_telldirproto telldir $i_systypes sys/types.h $i_dirent dirent.h
11269eval $hasproto
11270
11271: see if this is a sys/times.h system
11272set sys/times.h i_systimes
11273eval $inhdr
11274
11275: see if times exists
11276echo " "
11277if set times val -f d_times; eval $csym; $val; then
11278 echo 'times() found.' >&4
11279 d_times="$define"
11280 inc=''
11281 case "$i_systimes" in
11282 "$define") inc='sys/times.h';;
11283 esac
11284 rp="What is the type returned by times() on this system?"
11285 set clock_t clocktype long stdio.h sys/types.h $inc
11286 eval $typedef_ask
11287else
11288 echo 'times() NOT found, hope that will do.' >&4
11289 d_times="$undef"
11290 clocktype='int'
11291fi
11292
11293: see if truncate exists
11294set truncate d_truncate
11295eval $inlibc
11296
11297: see if tzname[] exists
11298echo " "
11299if set tzname val -a d_tzname; eval $csym; $val; then
11300 val="$define"
11301 echo 'tzname[] found.' >&4
11302else
11303 val="$undef"
11304 echo 'tzname[] NOT found.' >&4
11305fi
11306set d_tzname
11307eval $setvar
11308
11309: see if umask exists
11310set umask d_umask
11311eval $inlibc
11312
11313: see if ustat exists
11314set ustat d_ustat
11315eval $inlibc
11316
11317: backward compatibility for d_hvfork
11318if test X$d_hvfork != X; then
11319 d_vfork="$d_hvfork"
11320 d_hvfork=''
11321fi
11322: see if there is a vfork
11323val=''
11324set vfork val
11325eval $inlibc
11326
11327: Ok, but do we want to use it. vfork is reportedly unreliable in
11328: perl on Solaris 2.x, and probably elsewhere.
11329case "$val" in
11330$define)
11331 echo " "
11332 case "$usevfork" in
11333 false) dflt='n';;
11334 *) dflt='y';;
11335 esac
11336 cat <<'EOM'
11337
11338Perl can only use a vfork() that doesn't suffer from strict
11339restrictions on calling functions or modifying global data in
11340the child. For example, glibc-2.1 contains such a vfork()
11341that is unsuitable. If your system provides a proper fork()
11342call, chances are that you do NOT want perl to use vfork().
11343
11344EOM
11345 rp="Do you still want to use vfork()?"
11346 . ./myread
11347 case "$ans" in
11348 y|Y) ;;
11349 *)
11350 echo "Ok, we won't use vfork()."
11351 val="$undef"
11352 ;;
11353 esac
11354 ;;
11355esac
11356set d_vfork
11357eval $setvar
11358case "$d_vfork" in
11359$define) usevfork='true';;
11360*) usevfork='false';;
11361esac
11362
11363: see if this is an sysdir system
11364set sys/dir.h i_sysdir
11365eval $inhdr
11366
11367: see if this is an sysndir system
11368set sys/ndir.h i_sysndir
11369eval $inhdr
11370
11371: see if closedir exists
11372set closedir d_closedir
11373eval $inlibc
11374
11375case "$d_closedir" in
11376"$define")
11377 echo " "
11378 echo "Checking whether closedir() returns a status..." >&4
11379 cat > closedir.c <<EOM
11380#$i_dirent I_DIRENT /**/
11381#$i_sysdir I_SYS_DIR /**/
11382#$i_sysndir I_SYS_NDIR /**/
11383#$i_systypes I_SYS_TYPES /**/
11384
11385#if defined(I_SYS_TYPES)
11386#include <sys/types.h>
11387#endif
11388#if defined(I_DIRENT)
11389#include <dirent.h>
11390#if defined(NeXT) && defined(I_SYS_DIR) /* NeXT needs dirent + sys/dir.h */
11391#include <sys/dir.h>
11392#endif
11393#else
11394#ifdef I_SYS_NDIR
11395#include <sys/ndir.h>
11396#else
11397#ifdef I_SYS_DIR
11398#ifdef hp9000s500
11399#include <ndir.h> /* may be wrong in the future */
11400#else
11401#include <sys/dir.h>
11402#endif
11403#endif
11404#endif
11405#endif
11406int main() { return closedir(opendir(".")); }
11407EOM
11408 set closedir
11409 if eval $compile_ok; then
11410 if ./closedir > /dev/null 2>&1 ; then
11411 echo "Yes, it does."
11412 val="$undef"
11413 else
11414 echo "No, it doesn't."
11415 val="$define"
11416 fi
11417 else
11418 echo "(I can't seem to compile the test program--assuming it doesn't)"
11419 val="$define"
11420 fi
11421 ;;
11422*)
11423 val="$undef";
11424 ;;
11425esac
11426set d_void_closedir
11427eval $setvar
11428$rm -f closedir*
11429: check for volatile keyword
11430echo " "
11431echo 'Checking to see if your C compiler knows about "volatile"...' >&4
11432$cat >try.c <<'EOCP'
11433int main()
11434{
11435 typedef struct _goo_struct goo_struct;
11436 goo_struct * volatile goo = ((goo_struct *)0);
11437 struct _goo_struct {
11438 long long_int;
11439 int reg_int;
11440 char char_var;
11441 };
11442 typedef unsigned short foo_t;
11443 char *volatile foo;
11444 volatile int bar;
11445 volatile foo_t blech;
11446 foo = foo;
11447}
11448EOCP
11449if $cc -c $ccflags try.c >/dev/null 2>&1 ; then
11450 val="$define"
11451 echo "Yup, it does."
11452else
11453 val="$undef"
11454 echo "Nope, it doesn't."
11455fi
11456set d_volatile
11457eval $setvar
11458$rm -f try.*
11459
11460: see if there is a wait4
11461set wait4 d_wait4
11462eval $inlibc
11463
11464: see if waitpid exists
11465set waitpid d_waitpid
11466eval $inlibc
11467
11468: see if wcstombs exists
11469set wcstombs d_wcstombs
11470eval $inlibc
11471
11472: see if wctomb exists
11473set wctomb d_wctomb
11474eval $inlibc
11475
11476: preserve RCS keywords in files with variable substitution, grrr
11477Date='$Date'
11478Id='$Id'
11479Log='$Log'
11480RCSfile='$RCSfile'
11481Revision='$Revision'
11482
11483case "$crosscompile" in
11484''|[nN]*) crosscompile="$undef" ;;
11485esac
11486
11487case "$osname" in
11488next|rhapsody) multiarch="$define" ;;
11489esac
11490case "$multiarch" in
11491''|[nN]*) multiarch="$undef" ;;
11492esac
11493
11494: check for alignment requirements
11495echo " "
11496case "$crosscompile$multiarch" in
11497*$define*)
11498 $cat <<EOM
11499You seem to be either cross-compiling or doing a multiarchitecture build,
11500skipping the memory alignment check.
11501
11502EOM
11503 case "$alignbytes" in
11504 '') alignbytes=8 ;;
11505 esac
11506 ;;
11507*)
11508 case "$alignbytes" in
11509 '') echo "Checking alignment constraints..." >&4
11510 $cat >try.c <<'EOCP'
11511#include <stdio.h>
11512struct foobar {
11513 char foo;
11514 double bar;
11515} try_algn;
11516int main()
11517{
11518 printf("%d\n", (int)((char *)&try_algn.bar - (char *)&try_algn.foo));
11519 return(0);
11520}
11521EOCP
11522 set try
11523 if eval $compile_ok; then
11524 dflt=`./try`
11525 else
11526 dflt='8'
11527 echo "(I can't seem to compile the test program...)"
11528 fi
11529 ;;
11530 *) dflt="$alignbytes"
11531 ;;
11532 esac
11533 rp="Doubles must be aligned on a how-many-byte boundary?"
11534 . ./myread
11535 alignbytes="$ans"
11536 $rm -f try.c try
11537 ;;
11538esac
11539
11540
11541: check for ordering of bytes in a long
11542echo " "
11543case "$crosscompile$multiarch" in
11544*$define*)
11545 $cat <<EOM
11546You seem to be either cross-compiling or doing a multiarchitecture build,
11547skipping the byteorder check.
11548
11549EOM
11550 byteorder='0xffff'
11551 ;;
11552*)
11553 case "$byteorder" in
11554 '')
11555 $cat <<'EOM'
11556In the following, larger digits indicate more significance. A big-endian
11557machine like a Pyramid or a Motorola 680?0 chip will come out to 4321. A
11558little-endian machine like a Vax or an Intel 80?86 chip would be 1234. Other
11559machines may have weird orders like 3412. A Cray will report 87654321,
11560an Alpha will report 12345678. If the test program works the default is
11561probably right.
11562I'm now running the test program...
11563EOM
11564 $cat >try.c <<'EOCP'
11565#include <stdio.h>
11566int main()
11567{
11568 int i;
11569 union {
11570 unsigned long l;
11571 char c[sizeof(long)];
11572 } u;
11573
11574 if (sizeof(long) > 4)
11575 u.l = (0x08070605L << 32) | 0x04030201L;
11576 else
11577 u.l = 0x04030201L;
11578 for (i = 0; i < sizeof(long); i++)
11579 printf("%c", u.c[i]+'0');
11580 printf("\n");
11581 exit(0);
11582}
11583EOCP
11584 xxx_prompt=y
11585 set try
11586 if eval $compile && ./try > /dev/null; then
11587 dflt=`./try`
11588 case "$dflt" in
11589 [1-4][1-4][1-4][1-4]|12345678|87654321)
11590 echo "(The test program ran ok.)"
11591 echo "byteorder=$dflt"
11592 xxx_prompt=n
11593 ;;
11594 ????|????????) echo "(The test program ran ok.)" ;;
11595 *) echo "(The test program didn't run right for some reason.)" ;;
11596 esac
11597 else
11598 dflt='4321'
11599 cat <<'EOM'
11600(I can't seem to compile the test program. Guessing big-endian...)
11601EOM
11602 fi
11603 case "$xxx_prompt" in
11604 y)
11605 rp="What is the order of bytes in a long?"
11606 . ./myread
11607 byteorder="$ans"
11608 ;;
11609 *) byteorder=$dflt
11610 ;;
11611 esac
11612 ;;
11613 esac
11614 $rm -f try.c try
11615 ;;
11616esac
11617
11618
11619: how do we catenate cpp tokens here?
11620echo " "
11621echo "Checking to see how your cpp does stuff like catenate tokens..." >&4
11622$cat >cpp_stuff.c <<'EOCP'
11623#define RCAT(a,b)a/**/b
11624#define ACAT(a,b)a ## b
11625RCAT(Rei,ser)
11626ACAT(Cir,cus)
11627EOCP
11628$cppstdin $cppflags $cppminus <cpp_stuff.c >cpp_stuff.out 2>&1
11629if $contains 'Circus' cpp_stuff.out >/dev/null 2>&1; then
11630 echo "Oh! Smells like ANSI's been here." >&4
11631 echo "We can catify or stringify, separately or together!"
11632 cpp_stuff=42
11633elif $contains 'Reiser' cpp_stuff.out >/dev/null 2>&1; then
11634 echo "Ah, yes! The good old days!" >&4
11635 echo "However, in the good old days we don't know how to stringify and"
11636 echo "catify at the same time."
11637 cpp_stuff=1
11638else
11639 $cat >&4 <<EOM
11640Hmm, I don't seem to be able to catenate tokens with your cpp. You're going
11641to have to edit the values of CAT[2-5] in config.h...
11642EOM
11643 cpp_stuff="/* Help! How do we handle cpp_stuff? */*/"
11644fi
11645$rm -f cpp_stuff.*
11646
11647: see if this is a db.h system
11648set db.h i_db
11649eval $inhdr
11650
11651case "$i_db" in
11652$define)
11653 : Check db version.
11654 echo " "
11655 echo "Checking Berkeley DB version ..." >&4
11656 $cat >try.c <<EOCP
11657#$d_const HASCONST
11658#ifndef HASCONST
11659#define const
11660#endif
11661#include <sys/types.h>
11662#include <stdio.h>
11663#include <db.h>
11664int main()
11665{
11666#ifdef DB_VERSION_MAJOR /* DB version >= 2 */
11667 int Major, Minor, Patch ;
11668 unsigned long Version ;
11669 (void)db_version(&Major, &Minor, &Patch) ;
11670 printf("You have Berkeley DB Version 2 or greater\n");
11671
11672 printf("db.h is from Berkeley DB Version %d.%d.%d\n",
11673 DB_VERSION_MAJOR, DB_VERSION_MINOR, DB_VERSION_PATCH);
11674 printf("libdb is from Berkeley DB Version %d.%d.%d\n",
11675 Major, Minor, Patch) ;
11676
11677 /* check that db.h & libdb are compatible */
11678 if (DB_VERSION_MAJOR != Major || DB_VERSION_MINOR != Minor || DB_VERSION_PATCH != Patch) {
11679 printf("db.h and libdb are incompatible\n") ;
11680 exit(3);
11681 }
11682
11683 printf("db.h and libdb are compatible\n") ;
11684
11685 Version = DB_VERSION_MAJOR * 1000000 + DB_VERSION_MINOR * 1000
11686 + DB_VERSION_PATCH ;
11687
11688 /* needs to be >= 2.3.4 */
11689 if (Version < 2003004) {
11690 /* if (DB_VERSION_MAJOR == 2 && DB_VERSION_MINOR == 0 && DB_VERSION_PATCH < 5) { */
11691 printf("but Perl needs Berkeley DB 2.3.4 or greater\n") ;
11692 exit(2);
11693 }
11694
11695 exit(0);
11696#else
11697#if defined(_DB_H_) && defined(BTREEMAGIC) && defined(HASHMAGIC)
11698 printf("You have Berkeley DB Version 1\n");
11699 exit(0); /* DB version < 2: the coast is clear. */
11700#else
11701 exit(1); /* <db.h> not Berkeley DB? */
11702#endif
11703#endif
11704}
11705EOCP
11706 set try
11707 if eval $compile_ok && ./try; then
11708 echo 'Looks OK.' >&4
11709 else
11710 echo "I can't use Berkeley DB with your <db.h>. I'll disable Berkeley DB." >&4
11711 i_db=$undef
11712 case " $libs " in
11713 *"-ldb "*)
11714 : Remove db from list of libraries to use
11715 echo "Removing unusable -ldb from library list" >&4
11716 set `echo X $libs | $sed -e 's/-ldb / /' -e 's/-ldb$//'`
11717 shift
11718 libs="$*"
11719 echo "libs = $libs" >&4
11720 ;;
11721 esac
11722 fi
11723 $rm -f try.*
11724 ;;
11725esac
11726
11727case "$i_db" in
11728define)
11729 : Check the return type needed for hash
11730 echo " "
11731 echo "Checking return type needed for hash for Berkeley DB ..." >&4
11732 $cat >try.c <<EOCP
11733#$d_const HASCONST
11734#ifndef HASCONST
11735#define const
11736#endif
11737#include <sys/types.h>
11738#include <db.h>
11739
11740#ifndef DB_VERSION_MAJOR
11741u_int32_t hash_cb (ptr, size)
11742const void *ptr;
11743size_t size;
11744{
11745}
11746HASHINFO info;
11747int main()
11748{
11749 info.hash = hash_cb;
11750}
11751#endif
11752EOCP
11753 if $cc $ccflags -c try.c >try.out 2>&1 ; then
11754 if $contains warning try.out >>/dev/null 2>&1 ; then
11755 db_hashtype='int'
11756 else
11757 db_hashtype='u_int32_t'
11758 fi
11759 else
11760 : XXX Maybe we should just give up here.
11761 db_hashtype=u_int32_t
11762 $cat try.out >&4
11763 echo "Help: I can't seem to compile the db test program." >&4
11764 echo "Something's wrong, but I'll assume you use $db_hashtype." >&4
11765 fi
11766 $rm -f try.*
11767 echo "Your version of Berkeley DB uses $db_hashtype for hash."
11768 ;;
11769*) db_hashtype=u_int32_t
11770 ;;
11771esac
11772case "$i_db" in
11773define)
11774 : Check the return type needed for prefix
11775 echo " "
11776 echo "Checking return type needed for prefix for Berkeley DB ..." >&4
11777 cat >try.c <<EOCP
11778#$d_const HASCONST
11779#ifndef HASCONST
11780#define const
11781#endif
11782#include <sys/types.h>
11783#include <db.h>
11784
11785#ifndef DB_VERSION_MAJOR
11786size_t prefix_cb (key1, key2)
11787const DBT *key1;
11788const DBT *key2;
11789{
11790}
11791BTREEINFO info;
11792int main()
11793{
11794 info.prefix = prefix_cb;
11795}
11796#endif
11797EOCP
11798 if $cc $ccflags -c try.c >try.out 2>&1 ; then
11799 if $contains warning try.out >>/dev/null 2>&1 ; then
11800 db_prefixtype='int'
11801 else
11802 db_prefixtype='size_t'
11803 fi
11804 else
11805 db_prefixtype='size_t'
11806 : XXX Maybe we should just give up here.
11807 $cat try.out >&4
11808 echo "Help: I can't seem to compile the db test program." >&4
11809 echo "Something's wrong, but I'll assume you use $db_prefixtype." >&4
11810 fi
11811 $rm -f try.*
11812 echo "Your version of Berkeley DB uses $db_prefixtype for prefix."
11813 ;;
11814*) db_prefixtype='size_t'
11815 ;;
11816esac
11817
11818: check for void type
11819echo " "
11820echo "Checking to see how well your C compiler groks the void type..." >&4
11821case "$voidflags" in
11822'')
11823 $cat >try.c <<'EOCP'
11824#if TRY & 1
11825void sub() {
11826#else
11827sub() {
11828#endif
11829 extern void moo(); /* function returning void */
11830 void (*goo)(); /* ptr to func returning void */
11831#if TRY & 8
11832 void *hue; /* generic ptr */
11833#endif
11834#if TRY & 2
11835 void (*foo[10])();
11836#endif
11837
11838#if TRY & 4
11839 if(goo == moo) {
11840 exit(0);
11841 }
11842#endif
11843 exit(0);
11844}
11845int main() { sub(); }
11846EOCP
11847 if $cc $ccflags -c -DTRY=$defvoidused try.c >.out 2>&1 ; then
11848 voidflags=$defvoidused
11849 echo "Good. It appears to support void to the level $package wants.">&4
11850 if $contains warning .out >/dev/null 2>&1; then
11851 echo "However, you might get some warnings that look like this:"
11852 $cat .out
11853 fi
11854 else
11855echo "Hmm, your compiler has some difficulty with void. Checking further..." >&4
11856 if $cc $ccflags -c -DTRY=1 try.c >/dev/null 2>&1; then
11857 echo "It supports 1..."
11858 if $cc $ccflags -c -DTRY=3 try.c >/dev/null 2>&1; then
11859 echo "It also supports 2..."
11860 if $cc $ccflags -c -DTRY=7 try.c >/dev/null 2>&1; then
11861 voidflags=7
11862 echo "And it supports 4 but not 8 definitely."
11863 else
11864 echo "It doesn't support 4..."
11865 if $cc $ccflags -c -DTRY=11 try.c >/dev/null 2>&1; then
11866 voidflags=11
11867 echo "But it supports 8."
11868 else
11869 voidflags=3
11870 echo "Neither does it support 8."
11871 fi
11872 fi
11873 else
11874 echo "It does not support 2..."
11875 if $cc $ccflags -c -DTRY=13 try.c >/dev/null 2>&1; then
11876 voidflags=13
11877 echo "But it supports 4 and 8."
11878 else
11879 if $cc $ccflags -c -DTRY=5 try.c >/dev/null 2>&1; then
11880 voidflags=5
11881 echo "And it supports 4 but has not heard about 8."
11882 else
11883 echo "However it supports 8 but not 4."
11884 fi
11885 fi
11886 fi
11887 else
11888 echo "There is no support at all for void."
11889 voidflags=0
11890 fi
11891 fi
11892esac
11893case "$voidflags" in
11894"$defvoidused") ;;
11895*) $cat >&4 <<'EOM'
11896 Support flag bits are:
11897 1: basic void declarations.
11898 2: arrays of pointers to functions returning void.
11899 4: operations between pointers to and addresses of void functions.
11900 8: generic void pointers.
11901EOM
11902 dflt="$voidflags";
11903 rp="Your void support flags add up to what?"
11904 . ./myread
11905 voidflags="$ans"
11906 ;;
11907esac
11908$rm -f try.* .out
11909
11910
11911: How can we generate normalized random numbers ?
11912echo " "
11913echo "Looking for a random number function..." >&4
11914case "$randfunc" in
11915'')
11916 if set drand48 val -f; eval $csym; $val; then
11917 dflt="drand48"
11918 echo "Good, found drand48()." >&4
11919 elif set random val -f; eval $csym; $val; then
11920 dflt="random"
11921 echo "OK, found random()." >&4
11922 else
11923 dflt="rand"
11924 echo "Yick, looks like I have to use rand()." >&4
11925 fi
11926 echo " "
11927 ;;
11928*)
11929 dflt="$randfunc"
11930 ;;
11931esac
11932cont=true
11933
11934case "$ccflags" in
11935*-Dmy_rand=*|*-Dmy_srand=*)
11936 echo "Removing obsolete -Dmy_rand, -Dmy_srand, and -Drandbits from ccflags." >&4
11937 ccflags="`echo $ccflags | sed -e 's/-Dmy_rand=random/ /'`"
11938 ccflags="`echo $ccflags | sed -e 's/-Dmy_srand=srandom/ /'`"
11939 ccflags="`echo $ccflags | sed -e 's/-Drandbits=[0-9][0-9]*/ /'`"
11940 ;;
11941esac
11942
11943while $test "$cont"; do
11944 rp="Use which function to generate random numbers?"
11945 . ./myread
11946 if $test "$ans" = "$dflt"; then
11947 : null
11948 else
11949 randbits=''
11950 fi
11951 randfunc="$ans"
11952 if set $ans val -f; eval $csym; $val; then
11953 cont=''
11954 else
11955 dflt=y
11956 rp="I cannot find function $ans. Use that name anyway?"
11957 . ./myread
11958 dflt=rand
11959 case "$ans" in
11960 [yY]*) cont='';;
11961 esac
11962 fi
11963 case "$cont" in
11964 '')
11965 case "$randfunc" in
11966 drand48)
11967 drand01="drand48()"
11968 seedfunc="srand48"
11969 randbits=48
11970 randseedtype=long
11971 ;;
11972 rand|random)
11973 case "$randbits" in
11974 '')
11975echo "Checking to see how many bits your $randfunc() function produces..." >&4
11976 $cat >try.c <<EOCP
11977#$i_unistd I_UNISTD
11978#$i_stdlib I_STDLIB
11979#include <stdio.h>
11980#ifdef I_UNISTD
11981# include <unistd.h>
11982#endif
11983#ifdef I_STDLIB
11984# include <stdlib.h>
11985#endif
11986int main()
11987{
11988 register int i;
11989 register unsigned long tmp;
11990 register unsigned long max = 0L;
11991
11992 for (i = 1000; i; i--) {
11993 tmp = (unsigned long) $randfunc();
11994 if (tmp > max) max = tmp;
11995 }
11996 for (i = 0; max; i++)
11997 max /= 2;
11998 printf("%d\n",i);
11999}
12000EOCP
12001 set try
12002 if eval $compile_ok; then
12003 dflt=`try`
12004 else
12005 dflt='?'
12006 echo "(I can't seem to compile the test program...)"
12007 fi
12008 ;;
12009 *)
12010 dflt="$randbits"
12011 ;;
12012 esac
12013 rp="How many bits does your $randfunc() function produce?"
12014 . ./myread
12015 randbits="$ans"
12016 $rm -f try.c try
12017 drand01="($randfunc() / (double) ((unsigned long)1 << $randbits))"
12018 seedfunc="s$randfunc"
12019 randseedtype=unsigned
12020 ;;
12021 *)
12022 dflt="31"
12023 rp="How many bits does your $randfunc() function produce?"
12024 . ./myread
12025 randbits="$ans"
12026 seedfunc="s$randfunc"
12027 drand01="($randfunc() / (double) ((unsigned long)1 << $randbits))"
12028 if set $seedfunc val -f; eval $csym; $val; then
12029 echo "(Using $seedfunc() to seed random generator)"
12030 else
12031 echo "(Warning: no $seedfunc() to seed random generator)"
12032 seedfunc=rand
12033 fi
12034 randseedtype=unsigned
12035 ;;
12036 esac
12037 ;;
12038 esac
12039done
12040
12041echo " "
12042echo "Determining whether or not we are on an EBCDIC system..." >&4
12043$cat >tebcdic.c <<'EOM'
12044int main()
12045{
12046 if ('M'==0xd4) return 0;
12047 return 1;
12048}
12049EOM
12050
12051val=$undef
12052set tebcdic
12053if eval $compile_ok; then
12054 if ./tebcdic; then
12055 echo "You have EBCDIC." >&4
12056 val="$define"
12057 else
12058 echo "Nope, no EBCDIC, probably ASCII or some ISO Latin." >&4
12059 fi
12060else
12061 echo "I'm unable to compile the test program." >&4
12062 echo "I'll assume ASCII or some ISO Latin." >&4
12063fi
12064$rm -f tebcdic.c tebcdic
12065set ebcdic
12066eval $setvar
12067
12068echo " "
12069$cat >&4 <<EOM
12070Checking how to flush all pending stdio output...
12071EOM
12072# I only know how to find the first 32 possibly open files on SunOS.
12073# See also hints/sunos_4_1.sh and util.c --AD
12074case "$osname" in
12075sunos) $echo '#define PERL_FFLUSH_ALL_FOPEN_MAX 32' > try.c ;;
12076esac
12077$cat >>try.c <<EOCP
12078#include <stdio.h>
12079#$i_unistd I_UNISTD
12080#ifdef I_UNISTD
12081# include <unistd.h>
12082#endif
12083#$d_sysconf HAS_SYSCONF
12084#$d_stdio_stream_array HAS_STDIO_STREAM_ARRAY
12085#ifdef HAS_STDIO_STREAM_ARRAY
12086# define STDIO_STREAM_ARRAY $stdio_stream_array
12087#endif
12088int main() {
12089 FILE* p = fopen("try.out", "w");
12090#ifdef TRY_FPUTC
12091 fputc('x', p);
12092#else
12093# ifdef TRY_FPRINTF
12094 fprintf(p, "x");
12095# endif
12096#endif
12097#ifdef TRY_FFLUSH_NULL
12098 fflush(NULL);
12099#endif
12100#ifdef TRY_FFLUSH_ALL
12101 {
12102 long open_max = -1;
12103# ifdef PERL_FFLUSH_ALL_FOPEN_MAX
12104 open_max = PERL_FFLUSH_ALL_FOPEN_MAX;
12105# else
12106# if defined(HAS_SYSCONF) && defined(_SC_OPEN_MAX)
12107 open_max = sysconf(_SC_OPEN_MAX);
12108# else
12109# ifdef FOPEN_MAX
12110 open_max = FOPEN_MAX;
12111# else
12112# ifdef OPEN_MAX
12113 open_max = OPEN_MAX;
12114# else
12115# ifdef _NFILE
12116 open_max = _NFILE;
12117# endif
12118# endif
12119# endif
12120# endif
12121# endif
12122# ifdef HAS_STDIO_STREAM_ARRAY
12123 if (open_max > 0) {
12124 long i;
12125 for (i = 0; i < open_max; i++)
12126 if (STDIO_STREAM_ARRAY[i]._file >= 0 &&
12127 STDIO_STREAM_ARRAY[i]._file < open_max &&
12128 STDIO_STREAM_ARRAY[i]._flag)
12129 fflush(&STDIO_STREAM_ARRAY[i]);
12130 }
12131 }
12132# endif
12133#endif
12134 _exit(42);
12135}
12136EOCP
12137: first we have to find out how _not_ to flush
12138if $test "X$fflushNULL" = X -o "X$fflushall" = X; then
12139 output=''
12140 set try -DTRY_FPUTC
12141 if eval $compile; then
12142 $rm -f try.out
12143 ./try$exe_ext 2>/dev/null
12144 if $test ! -s try.out -a "X$?" = X42; then
12145 output=-DTRY_FPUTC
12146 fi
12147 fi
12148 case "$output" in
12149 '')
12150 set try -DTRY_FPRINTF
12151 $rm -f try.out
12152 if eval $compile; then
12153 $rm -f try.out
12154 ./try$exe_ext 2>/dev/null
12155 if $test ! -s try.out -a "X$?" = X42; then
12156 output=-DTRY_FPRINTF
12157 fi
12158 fi
12159 ;;
12160 esac
12161fi
12162: check for fflush NULL behaviour
12163case "$fflushNULL" in
12164'') set try -DTRY_FFLUSH_NULL $output
12165 if eval $compile; then
12166 $rm -f try.out
12167 ./try$exe_ext 2>/dev/null
12168 code="$?"
12169 if $test -s try.out -a "X$code" = X42; then
12170 fflushNULL="`$cat try.out`"
12171 else
12172 if $test "X$code" != X42; then
12173 $cat >&4 <<EOM
12174(If this test failed, don't worry, we'll try another method shortly.)
12175EOM
12176 fi
12177 fi
12178 fi
12179 $rm -f core try.core core.try.*
12180 case "$fflushNULL" in
12181 x) $cat >&4 <<EOM
12182Your fflush(NULL) works okay.
12183EOM
12184 fflushNULL="$define"
12185 ;;
12186 '') $cat >&4 <<EOM
12187Your fflush(NULL) isn't working (contrary to ANSI C).
12188EOM
12189 fflushNULL="$undef"
12190 ;;
12191 *) $cat >&4 <<EOM
12192Cannot figure out whether your fflush(NULL) works or not.
12193I'm assuming it doesn't (contrary to ANSI C).
12194EOM
12195 fflushNULL="$undef"
12196 ;;
12197 esac
12198 ;;
12199$define|true|[yY]*)
12200 fflushNULL="$define"
12201 ;;
12202*)
12203 fflushNULL="$undef"
12204 ;;
12205esac
12206: check explicit looping only if NULL did not work
12207case "$fflushNULL" in
12208"$undef")
12209 : check for fflush all behaviour
12210 case "$fflushall" in
12211 '') set try -DTRY_FFLUSH_ALL $output
12212 if eval $compile; then
12213 $cat >&4 <<EOM
12214(Now testing the other method--but note that also this may fail.)
12215EOM
12216 $rm -f try.out
12217 ./try$exe_ext 2>/dev/null
12218 if $test -s try.out -a "X$?" = X42; then
12219 fflushall="`$cat try.out`"
12220 fi
12221 fi
12222 $rm -f core try.core core.try.*
12223 case "$fflushall" in
12224 x) $cat >&4 <<EOM
12225Whew. Flushing explicitly all the stdio streams works.
12226EOM
12227 fflushall="$define"
12228 ;;
12229 '') $cat >&4 <<EOM
12230Sigh. Flushing explicitly all the stdio streams doesn't work.
12231EOM
12232 fflushall="$undef"
12233 ;;
12234 *) $cat >&4 <<EOM
12235Cannot figure out whether flushing stdio streams explicitly works or not.
12236I'm assuming it doesn't.
12237EOM
12238 fflushall="$undef"
12239 ;;
12240 esac
12241 ;;
12242 "$define"|true|[yY]*)
12243 fflushall="$define"
12244 ;;
12245 *)
12246 fflushall="$undef"
12247 ;;
12248 esac
12249 ;;
12250*) fflushall="$undef"
12251 ;;
12252esac
12253case "$fflushNULL$fflushall" in
12254undefundef)
12255 $cat <<EOM
12256I cannot figure out how to flush pending stdio output.
12257EOM
12258 ;;
12259esac
12260$rm -f try.* try$exe_ext
12261
12262: Store the full pathname to the ar program for use in the C program
12263: Respect a hint or command line value for full_ar.
12264case "$full_ar" in
12265'') full_ar=$ar ;;
12266esac
12267
12268: Store the full pathname to the sed program for use in the C program
12269full_sed=$sed
12270
12271: see what type gids are declared as in the kernel
12272echo " "
12273echo "Looking for the type for group ids returned by getgid()."
12274set gid_t gidtype xxx stdio.h sys/types.h
12275eval $typedef
12276case "$gidtype" in
12277xxx)
12278 xxx=`./findhdr sys/user.h`
12279 set `grep 'groups\[NGROUPS\];' "$xxx" 2>/dev/null` unsigned short
12280 case $1 in
12281 unsigned) dflt="$1 $2" ;;
12282 *) dflt="$1" ;;
12283 esac
12284 ;;
12285*) dflt="$gidtype";;
12286esac
12287case "$gidtype" in
12288gid_t) echo "gid_t found." ;;
12289*) rp="What is the type for group ids returned by getgid()?"
12290 . ./myread
12291 gidtype="$ans"
12292 ;;
12293esac
12294
12295echo " "
12296case "$gidtype" in
12297*_t) zzz="$gidtype" ;;
12298*) zzz="gid" ;;
12299esac
12300echo "Checking the size of $zzz..." >&4
12301cat > try.c <<EOCP
12302#include <sys/types.h>
12303#include <stdio.h>
12304int main() {
12305 printf("%d\n", (int)sizeof($gidtype));
12306 exit(0);
12307}
12308EOCP
12309set try
12310if eval $compile_ok; then
12311 yyy=`./try`
12312 case "$yyy" in
12313 '') gidsize=4
12314 echo "(I can't execute the test program--guessing $gidsize.)" >&4
12315 ;;
12316 *) gidsize=$yyy
12317 echo "Your $zzz size is $gidsize bytes."
12318 ;;
12319 esac
12320else
12321 gidsize=4
12322 echo "(I can't compile the test program--guessing $gidsize.)" >&4
12323fi
12324
12325
12326echo " "
12327case "$gidtype" in
12328*_t) zzz="$gidtype" ;;
12329*) zzz="gid" ;;
12330esac
12331echo "Checking the sign of $zzz..." >&4
12332cat > try.c <<EOCP
12333#include <sys/types.h>
12334#include <stdio.h>
12335int main() {
12336 $gidtype foo = -1;
12337 if (foo < 0)
12338 printf("-1\n");
12339 else
12340 printf("1\n");
12341}
12342EOCP
12343set try
12344if eval $compile; then
12345 yyy=`./try`
12346 case "$yyy" in
12347 '') gidsign=1
12348 echo "(I can't execute the test program--guessing unsigned.)" >&4
12349 ;;
12350 *) gidsign=$yyy
12351 case "$gidsign" in
12352 1) echo "Your $zzz is unsigned." ;;
12353 -1) echo "Your $zzz is signed." ;;
12354 esac
12355 ;;
12356 esac
12357else
12358 gidsign=1
12359 echo "(I can't compile the test program--guessing unsigned.)" >&4
12360fi
12361
12362
12363echo " "
12364
12365if $test X"$quadtype" != X; then
12366
12367echo "Checking how to print 64-bit integers..." >&4
12368
12369if $test X"$sPRId64" = X -a X"$quadtype" = Xint; then
12370 $cat >try.c <<'EOCP'
12371#include <sys/types.h>
12372#include <stdio.h>
12373int main() {
12374 int q = 12345678901;
12375 printf("%ld\n", q);
12376}
12377EOCP
12378 set try
12379 if eval $compile; then
12380 yyy=`./try$exe_ext`
12381 case "$yyy" in
12382 12345678901)
12383 sPRId64='"d"'; sPRIi64='"i"'; sPRIu64='"u"';
12384 sPRIo64='"o"'; sPRIx64='"x"'; sPRIX64='"X"';
12385 echo "We will use %d."
12386 ;;
12387 esac
12388 fi
12389fi
12390
12391if $test X"$sPRId64" = X -a X"$quadtype" = Xlong; then
12392 $cat >try.c <<'EOCP'
12393#include <sys/types.h>
12394#include <stdio.h>
12395int main() {
12396 long q = 12345678901;
12397 printf("%ld\n", q);
12398}
12399EOCP
12400 set try
12401 if eval $compile; then
12402 yyy=`./try$exe_ext`
12403 case "$yyy" in
12404 12345678901)
12405 sPRId64='"ld"'; sPRIi64='"li"'; sPRIu64='"lu"';
12406 sPRIo64='"lo"'; sPRIx64='"lx"'; sPRIX64='"lX"';
12407 echo "We will use %ld."
12408 ;;
12409 esac
12410 fi
12411fi
12412
12413if $test X"$sPRId64" = X -a X"$i_inttypes" = X"$define" -a X"$quadtype" = Xint64_t; then
12414 $cat >try.c <<'EOCP'
12415#include <sys/types.h>
12416#include <inttypes.h>
12417#include <stdio.h>
12418int main() {
12419 int64_t q = 12345678901;
12420 printf("%" PRId64 "\n", q);
12421}
12422EOCP
12423 set try
12424 if eval $compile; then
12425 yyy=`./try$exe_ext`
12426 case "$yyy" in
12427 12345678901)
12428 sPRId64=PRId64; sPRIi64=PRIi64; sPRIu64=PRIu64;
12429 sPRIo64=PRIo64; sPRIx64=PRIx64; sPRIX64=PRIX64;
12430 echo "We will use the C9X style."
12431 ;;
12432 esac
12433 fi
12434fi
12435
12436if $test X"$sPRId64" = X -a X"$quadtype" = X"long long"; then
12437 $cat >try.c <<'EOCP'
12438#include <sys/types.h>
12439#include <stdio.h>
12440int main() {
12441 long long q = 12345678901LL; /* AIX cc requires the LL prefix. */
12442 printf("%lld\n", q);
12443}
12444EOCP
12445 set try
12446 if eval $compile; then
12447 yyy=`./try$exe_ext`
12448 case "$yyy" in
12449 12345678901)
12450 sPRId64='"lld"'; sPRIi64='"lli"'; sPRIu64='"llu"';
12451 sPRIo64='"llo"'; sPRIx64='"llx"'; sPRIX64='"llX"';
12452 echo "We will use the %lld style."
12453 ;;
12454 esac
12455 fi
12456fi
12457
12458if $test X"$sPRId64" = X -a X"$quadtype" != X; then
12459 $cat >try.c <<EOCP
12460#include <sys/types.h>
12461#include <stdio.h>
12462int main() {
12463 $quadtype q = 12345678901;
12464 printf("%Ld\n", q);
12465}
12466EOCP
12467 set try
12468 if eval $compile; then
12469 yyy=`./try$exe_ext`
12470 case "$yyy" in
12471 12345678901)
12472 sPRId64='"Ld"'; sPRIi64='"Li"'; sPRIu64='"Lu"';
12473 sPRIo64='"Lo"'; sPRIx64='"Lx"'; sPRIX64='"LX"';
12474 echo "We will use %Ld."
12475 ;;
12476 esac
12477 fi
12478fi
12479
12480if $test X"$sPRId64" = X -a X"$quadtype" != X; then
12481 $cat >try.c <<EOCP
12482#include <sys/types.h>
12483#include <stdio.h>
12484int main() {
12485 $quadtype q = 12345678901;
12486 printf("%qd\n", q);
12487}
12488EOCP
12489 set try
12490 if eval $compile; then
12491 yyy=`./try$exe_ext`
12492 case "$yyy" in
12493 12345678901)
12494 sPRId64='"qd"'; sPRIi64='"qi"'; sPRIu64='"qu"';
12495 sPRIo64='"qo"'; sPRIx64='"qx"'; sPRIX64='"qX"';
12496 echo "We will use %qd."
12497 ;;
12498 esac
12499 fi
12500fi
12501
12502if $test X"$sPRId64" = X; then
12503 echo "Cannot figure out how to print 64-bit integers." >&4
12504fi
12505
12506$rm -f try try.*
12507
12508fi
12509
12510case "$sPRId64" in
12511'') d_PRId64="$undef"; d_PRIi64="$undef"; d_PRIu64="$undef";
12512 d_PRIo64="$undef"; d_PRIx64="$undef"; d_PRIX64="$undef";
12513 ;;
12514*) d_PRId64="$define"; d_PRIi64="$define"; d_PRIu64="$define";
12515 d_PRIo64="$define"; d_PRIx64="$define"; d_PRIX64="$define";
12516 ;;
12517esac
12518
12519
12520echo " "
12521$echo "Checking the format strings to be used for Perl's internal types..." >&4
12522
12523if $test X"$ivsize" = X8; then
12524 ivdformat="$sPRId64"
12525 uvuformat="$sPRIu64"
12526 uvoformat="$sPRIo64"
12527 uvxformat="$sPRIx64"
12528else
12529 if $test X"$ivsize" = X"$longsize"; then
12530 ivdformat='"ld"'
12531 uvuformat='"lu"'
12532 uvoformat='"lo"'
12533 uvxformat='"lx"'
12534 else
12535 if $test X"$ivsize" = X"$intsize"; then
12536 ivdformat='"d"'
12537 uvuformat='"u"'
12538 uvoformat='"o"'
12539 uvxformat='"x"'
12540 else
12541 : far out
12542 if $test X"$ivsize" = X"$shortsize"; then
12543 ivdformat='"hd"'
12544 uvuformat='"hu"'
12545 uvoformat='"ho"'
12546 uvxformat='"hx"'
12547 fi
12548 fi
12549 fi
12550fi
12551
12552case "$ivdformat" in
12553'') echo "$0: Fatal: failed to find format strings, cannot continue." >& 4
12554 exit 1
12555 ;;
12556esac
12557
12558
12559echo " "
12560$echo "Checking the format string to be used for gids..." >&4
12561
12562case "$gidsign" in
12563-1) if $test X"$gidsize" = X"$ivsize"; then
12564 gidformat="$ivdformat"
12565 else
12566 if $test X"$gidsize" = X"$longsize"; then
12567 gidformat='"ld"'
12568 else
12569 if $test X"$gidsize" = X"$intsize"; then
12570 gidformat='"d"'
12571 else
12572 if $test X"$gidsize" = X"$shortsize"; then
12573 gidformat='"hd"'
12574 fi
12575 fi
12576 fi
12577 fi
12578 ;;
12579*) if $test X"$gidsize" = X"$uvsize"; then
12580 gidformat="$uvuformat"
12581 else
12582 if $test X"$gidsize" = X"$longsize"; then
12583 gidformat='"lu"'
12584 else
12585 if $test X"$gidsize" = X"$intsize"; then
12586 gidformat='"u"'
12587 else
12588 if $test X"$gidsize" = X"$shortsize"; then
12589 gidformat='"hu"'
12590 fi
12591 fi
12592 fi
12593 fi
12594 ;;
12595esac
12596
12597: see if getgroups exists
12598set getgroups d_getgrps
12599eval $inlibc
12600
12601: see if setgroups exists
12602set setgroups d_setgrps
12603eval $inlibc
12604
12605
12606: Find type of 2nd arg to 'getgroups()' and 'setgroups()'
12607echo " "
12608case "$d_getgrps$d_setgrps" in
12609*define*)
12610 case "$groupstype" in
12611 '') dflt="$gidtype" ;;
12612 *) dflt="$groupstype" ;;
12613 esac
12614 $cat <<EOM
12615What type of pointer is the second argument to getgroups() and setgroups()?
12616Usually this is the same as group ids, $gidtype, but not always.
12617
12618EOM
12619 rp='What type pointer is the second argument to getgroups() and setgroups()?'
12620 . ./myread
12621 groupstype="$ans"
12622 ;;
12623*) groupstype="$gidtype";;
12624esac
12625
12626echo " "
12627echo "Checking if your $make program sets \$(MAKE)..." >&4
12628case "$make_set_make" in
12629'')
12630 $sed 's/^X //' > testmake.mak << 'EOF'
12631Xall:
12632X @echo 'maketemp="$(MAKE)"'
12633EOF
12634 case "`$make -f testmake.mak 2>/dev/null`" in
12635 *maketemp=*) make_set_make='#' ;;
12636 *) make_set_make="MAKE=$make" ;;
12637 esac
12638 $rm -f testmake.mak
12639 ;;
12640esac
12641case "$make_set_make" in
12642'#') echo "Yup, it does.";;
12643*) echo "Nope, it doesn't.";;
12644esac
12645
12646: see what type is used for mode_t
12647rp="What is the type used for file modes for system calls (e.g. fchmod())?"
12648set mode_t modetype int stdio.h sys/types.h
12649eval $typedef_ask
12650
12651: define a fucntion to check prototypes
12652$cat > protochk <<EOSH
12653$startsh
12654cc="$cc"
12655optimize="$optimize"
12656ccflags="$ccflags"
12657prototype="$prototype"
12658define="$define"
12659rm=$rm
12660EOSH
12661
12662$cat >> protochk <<'EOSH'
12663
12664$rm -f try.c
12665foo="$1"
12666shift
12667while test $# -ge 2; do
12668 case "$1" in
12669 $define) echo "#include <$2>" >> try.c ;;
12670 literal) echo "$2" >> try.c ;;
12671 esac
12672 shift 2
12673done
12674test "$prototype" = "$define" && echo '#define CAN_PROTOTYPE' >> try.c
12675cat >> try.c <<'EOCP'
12676#ifdef CAN_PROTOTYPE
12677#define _(args) args
12678#else
12679#define _(args) ()
12680#endif
12681EOCP
12682echo "$foo" >> try.c
12683echo 'int no_real_function_has_this_name _((void)) { return 0; }' >> try.c
12684$cc $optimize $ccflags -c try.c > /dev/null 2>&1
12685status=$?
12686$rm -f try.[co]
12687exit $status
12688EOSH
12689chmod +x protochk
12690$eunicefix protochk
12691
12692: see what type is used for size_t
12693rp="What is the type used for the length parameter for string functions?"
12694set size_t sizetype 'unsigned int' stdio.h sys/types.h
12695eval $typedef_ask
12696
12697: check for type of arguments to gethostbyaddr.
12698if test "X$netdb_host_type" = X -o "X$netdb_hlen_type" = X; then
12699 case "$d_gethbyaddr" in
12700 $define)
12701 $cat <<EOM
12702
12703Checking to see what type of arguments are accepted by gethostbyaddr().
12704EOM
12705 hdrs="$define sys/types.h
12706 $d_socket sys/socket.h
12707 $i_niin netinet/in.h
12708 $i_netdb netdb.h
12709 $i_unistd unistd.h"
12710 : The first arg can 'char *' or 'void *'
12711 : The second arg is some of integral type
12712 for xxx in in_addr_t 'const void *' 'const char *' 'void *' 'char *'; do
12713 for yyy in size_t long int; do
12714 case "$netdb_host_type" in
12715 '') try="extern struct hostent *gethostbyaddr($xxx, $yyy, int);"
12716 if ./protochk "$try" $hdrs; then
12717 echo "Your system accepts $xxx for the first arg."
12718 echo "...and $yyy for the second arg."
12719 netdb_host_type="$xxx"
12720 netdb_hlen_type="$yyy"
12721 fi
12722 ;;
12723 esac
12724 done
12725 done
12726 : In case none of those worked, prompt the user.
12727 case "$netdb_host_type" in
12728 '') rp='What is the type for the 1st argument to gethostbyaddr?'
12729 dflt='char *'
12730 . ./myread
12731 netdb_host_type=$ans
12732 rp='What is the type for the 2nd argument to gethostbyaddr?'
12733 dflt="$sizetype"
12734 . ./myread
12735 netdb_hlen_type=$ans
12736 ;;
12737 esac
12738 ;;
12739 *) : no gethostbyaddr, so pick harmless defaults
12740 netdb_host_type='char *'
12741 netdb_hlen_type="$sizetype"
12742 ;;
12743 esac
12744 # Remove the "const" if needed. -- but then we'll have a
12745 # prototype clash!
12746 # netdb_host_type=`echo "$netdb_host_type" | sed 's/^const //'`
12747fi
12748
12749: check for type of argument to gethostbyname.
12750if test "X$netdb_name_type" = X ; then
12751 case "$d_gethbyname" in
12752 $define)
12753 $cat <<EOM
12754
12755Checking to see what type of argument is accepted by gethostbyname().
12756EOM
12757 hdrs="$define sys/types.h
12758 $d_socket sys/socket.h
12759 $i_niin netinet/in.h
12760 $i_netdb netdb.h
12761 $i_unistd unistd.h"
12762 for xxx in "const char *" "char *"; do
12763 case "$netdb_name_type" in
12764 '') try="extern struct hostent *gethostbyname($xxx);"
12765 if ./protochk "$try" $hdrs; then
12766 echo "Your system accepts $xxx."
12767 netdb_name_type="$xxx"
12768 fi
12769 ;;
12770 esac
12771 done
12772 : In case none of those worked, prompt the user.
12773 case "$netdb_name_type" in
12774 '') rp='What is the type for the 1st argument to gethostbyname?'
12775 dflt='char *'
12776 . ./myread
12777 netdb_name_type=$ans
12778 ;;
12779 esac
12780 ;;
12781 *) : no gethostbyname, so pick harmless default
12782 netdb_name_type='char *'
12783 ;;
12784 esac
12785fi
12786
12787: check for type of 1st argument to getnetbyaddr.
12788if test "X$netdb_net_type" = X ; then
12789 case "$d_getnbyaddr" in
12790 $define)
12791 $cat <<EOM
12792
12793Checking to see what type of 1st argument is accepted by getnetbyaddr().
12794EOM
12795 hdrs="$define sys/types.h
12796 $d_socket sys/socket.h
12797 $i_niin netinet/in.h
12798 $i_netdb netdb.h
12799 $i_unistd unistd.h"
12800 for xxx in in_addr_t "unsigned long" long "unsigned int" int; do
12801 case "$netdb_net_type" in
12802 '') try="extern struct netent *getnetbyaddr($xxx, int);"
12803 if ./protochk "$try" $hdrs; then
12804 echo "Your system accepts $xxx."
12805 netdb_net_type="$xxx"
12806 fi
12807 ;;
12808 esac
12809 done
12810 : In case none of those worked, prompt the user.
12811 case "$netdb_net_type" in
12812 '') rp='What is the type for the 1st argument to getnetbyaddr?'
12813 dflt='long'
12814 . ./myread
12815 netdb_net_type=$ans
12816 ;;
12817 esac
12818 ;;
12819 *) : no getnetbyaddr, so pick harmless default
12820 netdb_net_type='long'
12821 ;;
12822 esac
12823fi
12824: locate the preferred pager for this system
12825case "$pager" in
12826'')
12827 dflt=''
12828 case "$pg" in
12829 /*) dflt=$pg;;
12830 esac
12831 case "$more" in
12832 /*) dflt=$more;;
12833 esac
12834 case "$less" in
12835 /*) dflt=$less;;
12836 esac
12837 case "$dflt" in
12838 '') dflt=/usr/ucb/more;;
12839 esac
12840 ;;
12841*) dflt="$pager";;
12842esac
12843echo " "
12844fn=f/
12845rp='What pager is used on your system?'
12846. ./getfile
12847pager="$ans"
12848
12849: see what type pids are declared as in the kernel
12850rp="What is the type of process ids on this system?"
12851set pid_t pidtype int stdio.h sys/types.h
12852eval $typedef_ask
12853
12854: check for length of pointer
12855echo " "
12856case "$ptrsize" in
12857'')
12858 $echo $n "Checking to see how big your pointers are...$c" >&4
12859 if test "$voidflags" -gt 7; then
12860 echo '#define VOID_PTR char *' > try.c
12861 else
12862 echo '#define VOID_PTR void *' > try.c
12863 fi
12864 $cat >>try.c <<'EOCP'
12865#include <stdio.h>
12866int main()
12867{
12868 printf("%d\n", (int)sizeof(VOID_PTR));
12869 exit(0);
12870}
12871EOCP
12872 set try
12873 if eval $compile_ok; then
12874 ptrsize=`./try`
12875 $echo " $ptrsize bytes." >&4
12876 else
12877 dflt='4'
12878 echo "(I can't seem to compile the test program. Guessing...)" >&4
12879 rp="What is the size of a pointer (in bytes)?"
12880 . ./myread
12881 ptrsize="$ans"
12882 fi
12883 ;;
12884esac
12885$rm -f try.c try
12886
12887: see if ar generates random libraries by itself
12888echo " "
12889echo "Checking how to generate random libraries on your machine..." >&4
12890echo 'int bar1() { return bar2(); }' > bar1.c
12891echo 'int bar2() { return 2; }' > bar2.c
12892$cat > foo.c <<'EOP'
12893int main() { printf("%d\n", bar1()); exit(0); }
12894EOP
12895$cc $ccflags -c bar1.c >/dev/null 2>&1
12896$cc $ccflags -c bar2.c >/dev/null 2>&1
12897$cc $ccflags -c foo.c >/dev/null 2>&1
12898$ar rc bar$_a bar2$_o bar1$_o >/dev/null 2>&1
12899if $cc $ccflags $ldflags -o foobar foo$_o bar$_a $libs > /dev/null 2>&1 &&
12900 ./foobar >/dev/null 2>&1; then
12901 echo "$ar appears to generate random libraries itself."
12902 orderlib=false
12903 ranlib=":"
12904elif $ar ts bar$_a >/dev/null 2>&1 &&
12905 $cc $ccflags $ldflags -o foobar foo$_o bar$_a $libs > /dev/null 2>&1 &&
12906 ./foobar >/dev/null 2>&1; then
12907 echo "a table of contents needs to be added with '$ar ts'."
12908 orderlib=false
12909 ranlib="$ar ts"
12910else
12911 case "$ranlib" in
12912 :) ranlib='';;
12913 '')
12914 ranlib=`./loc ranlib X /usr/bin /bin /usr/local/bin`
12915 $test -f $ranlib || ranlib=''
12916 ;;
12917 esac
12918 if $test -n "$ranlib"; then
12919 echo "your system has '$ranlib'; we'll use that."
12920 orderlib=false
12921 else
12922 echo "your system doesn't seem to support random libraries"
12923 echo "so we'll use lorder and tsort to order the libraries."
12924 orderlib=true
12925 ranlib=":"
12926 fi
12927fi
12928$rm -f foo* bar*
12929
12930: check for type of arguments to select.
12931case "$selecttype" in
12932'') case "$d_select" in
12933 $define)
12934 echo " "
12935 $cat <<EOM
12936Checking to see what type of arguments are accepted by select().
12937EOM
12938 hdrs="$define sys/types.h
12939 $i_systime sys/time.h
12940 $i_sysselct sys/select.h
12941 $d_socket sys/socket.h"
12942 : The first arg can be int, unsigned, or size_t
12943 : The last arg may or may not be 'const'
12944 val=''
12945 : void pointer has been seen but using that
12946 : breaks the selectminbits test
12947 for xxx in 'fd_set *' 'int *'; do
12948 for nfd in 'int' 'size_t' 'unsigned long' 'unsigned' ; do
12949 for tmo in 'struct timeval *' 'const struct timeval *'; do
12950 case "$val" in
12951 '') try="extern select _(($nfd, $xxx, $xxx, $xxx, $tmo));"
12952 if ./protochk "$try" $hdrs; then
12953 echo "Your system accepts $xxx."
12954 val="$xxx"
12955 fi
12956 ;;
12957 esac
12958 done
12959 done
12960 done
12961 case "$val" in
12962 '') rp='What is the type for the 2nd, 3rd, and 4th arguments to select?'
12963 case "$d_fd_set" in
12964 $define) dflt="fd_set *" ;;
12965 *) dflt="int *" ;;
12966 esac
12967 . ./myread
12968 val=$ans
12969 ;;
12970 esac
12971 selecttype="$val"
12972 ;;
12973 *) : no select, so pick a harmless default
12974 selecttype='int *'
12975 ;;
12976 esac
12977 ;;
12978esac
12979
12980: check for the select 'width'
12981case "$selectminbits" in
12982'') case "$d_select" in
12983 $define)
12984 $cat <<EOM
12985
12986Checking to see on how many bits at a time your select() operates...
12987EOM
12988 $cat >try.c <<EOCP
12989#include <sys/types.h>
12990#$i_time I_TIME
12991#$i_systime I_SYS_TIME
12992#$i_systimek I_SYS_TIME_KERNEL
12993#ifdef I_TIME
12994# include <time.h>
12995#endif
12996#ifdef I_SYS_TIME
12997# ifdef I_SYS_TIME_KERNEL
12998# define KERNEL
12999# endif
13000# include <sys/time.h>
13001# ifdef I_SYS_TIME_KERNEL
13002# undef KERNEL
13003# endif
13004#endif
13005#$i_sysselct I_SYS_SELECT
13006#ifdef I_SYS_SELECT
13007#include <sys/select.h>
13008#endif
13009#$d_socket HAS_SOCKET
13010#ifdef HAS_SOCKET
13011# include <sys/socket.h> /* Might include <sys/bsdtypes.h> */
13012#endif
13013#include <stdio.h>
13014$selecttype b;
13015#define S sizeof(*(b))
13016#define MINBITS 64
13017#define NBYTES (S * 8 > MINBITS ? S : MINBITS/8)
13018#define NBITS (NBYTES * 8)
13019int main() {
13020 char s[NBYTES];
13021 struct timeval t;
13022 int i;
13023 FILE* fp;
13024 int fd;
13025
13026 fclose(stdin);
13027 fp = fopen("try.c", "r");
13028 if (fp == 0)
13029 exit(1);
13030 fd = fileno(fp);
13031 if (fd < 0)
13032 exit(2);
13033 b = ($selecttype)s;
13034 for (i = 0; i < NBITS; i++)
13035 FD_SET(i, b);
13036 t.tv_sec = 0;
13037 t.tv_usec = 0;
13038 select(fd + 1, b, 0, 0, &t);
13039 for (i = NBITS - 1; i > fd && FD_ISSET(i, b); i--);
13040 printf("%d\n", i + 1);
13041 return 0;
13042}
13043EOCP
13044 set try
13045 if eval $compile_ok; then
13046 selectminbits=`./try`
13047 case "$selectminbits" in
13048 '') cat >&4 <<EOM
13049Cannot figure out on how many bits at a time your select() operates.
13050I'll play safe and guess it is 32 bits.
13051EOM
13052 selectminbits=32
13053 bits="32 bits"
13054 ;;
13055 1) bits="1 bit" ;;
13056 *) bits="$selectminbits bits" ;;
13057 esac
13058 echo "Your select() operates on $bits at a time." >&4
13059 else
13060 rp='What is the minimum number of bits your select() operates on?'
13061 case "$byteorder" in
13062 1234|12345678) dflt=32 ;;
13063 *) dflt=1 ;;
13064 esac
13065 . ./myread
13066 val=$ans
13067 selectminbits="$val"
13068 fi
13069 $rm -f try.* try
13070 ;;
13071 *) : no select, so pick a harmless default
13072 selectminbits='32'
13073 ;;
13074 esac
13075 ;;
13076esac
13077
13078: Trace out the files included by signal.h, then look for SIGxxx names.
13079: Remove SIGARRAYSIZE used by HPUX.
13080: Remove SIGSTKSIZE used by Linux.
13081: Remove SIGSTKSZ used by Posix.
13082: Remove SIGTYP void lines used by OS2.
13083: Some cpps, like os390, dont give the file name anywhere
13084if [ "X$fieldn" = X ]; then
13085 : Just make some guesses. We check them later.
13086 xxx='/usr/include/signal.h /usr/include/sys/signal.h'
13087else
13088 xxx=`echo '#include <signal.h>' |
13089 $cppstdin $cppminus $cppflags 2>/dev/null |
13090 $grep '^[ ]*#.*include' |
13091 $awk "{print \\$$fieldn}" | $sed 's!"!!g' | $sort | $uniq`
13092fi
13093: Check this list of files to be sure we have parsed the cpp output ok.
13094: This will also avoid potentially non-existent files, such
13095: as ../foo/bar.h
13096xxxfiles=''
13097for xx in $xxx /dev/null ; do
13098 $test -f "$xx" && xxxfiles="$xxxfiles $xx"
13099done
13100: If we have found no files, at least try signal.h
13101case "$xxxfiles" in
13102'') xxxfiles=`./findhdr signal.h` ;;
13103esac
13104xxx=`awk '
13105$1 ~ /^#define$/ && $2 ~ /^SIG[A-Z0-9]*$/ && $2 !~ /SIGARRAYSIZE/ && $2 !~ /SIGSTKSIZE/ && $2 !~ /SIGSTKSZ/ && $3 !~ /void/ {
13106 print substr($2, 4, 20)
13107}
13108$1 == "#" && $2 ~ /^define$/ && $3 ~ /^SIG[A-Z0-9]*$/ && $3 !~ /SIGARRAYSIZE/ && $4 !~ /void/ {
13109 print substr($3, 4, 20)
13110}' $xxxfiles`
13111: Append some common names just in case the awk scan failed.
13112xxx="$xxx ABRT ALRM BUS CANCEL CHLD CLD CONT DIL EMT FPE"
13113xxx="$xxx FREEZE HUP ILL INT IO IOT KILL LOST LWP PHONE"
13114xxx="$xxx PIPE POLL PROF PWR QUIT RTMAX RTMIN SEGV STKFLT STOP"
13115xxx="$xxx SYS TERM THAW TRAP TSTP TTIN TTOU URG USR1 USR2"
13116xxx="$xxx USR3 USR4 VTALRM WAITING WINCH WIND WINDOW XCPU XFSZ"
13117
13118: generate a few handy files for later
13119$cat > signal.c <<'EOCP'
13120#include <sys/types.h>
13121#include <signal.h>
13122#include <stdio.h>
13123int main() {
13124
13125/* Strange style to avoid deeply-nested #if/#else/#endif */
13126#ifndef NSIG
13127# ifdef _NSIG
13128# define NSIG (_NSIG)
13129# endif
13130#endif
13131
13132#ifndef NSIG
13133# ifdef SIGMAX
13134# define NSIG (SIGMAX+1)
13135# endif
13136#endif
13137
13138#ifndef NSIG
13139# ifdef SIG_MAX
13140# define NSIG (SIG_MAX+1)
13141# endif
13142#endif
13143
13144#ifndef NSIG
13145# ifdef MAXSIG
13146# define NSIG (MAXSIG+1)
13147# endif
13148#endif
13149
13150#ifndef NSIG
13151# ifdef MAX_SIG
13152# define NSIG (MAX_SIG+1)
13153# endif
13154#endif
13155
13156#ifndef NSIG
13157# ifdef SIGARRAYSIZE
13158# define NSIG (SIGARRAYSIZE+1) /* Not sure of the +1 */
13159# endif
13160#endif
13161
13162#ifndef NSIG
13163# ifdef _sys_nsig
13164# define NSIG (_sys_nsig) /* Solaris 2.5 */
13165# endif
13166#endif
13167
13168/* Default to some arbitrary number that's big enough to get most
13169 of the common signals.
13170*/
13171#ifndef NSIG
13172# define NSIG 50
13173#endif
13174
13175printf("NSIG %d\n", NSIG);
13176
13177#ifndef JUST_NSIG
13178
13179EOCP
13180
13181echo $xxx | $tr ' ' $trnl | $sort | $uniq | $awk '
13182{
13183 printf "#ifdef SIG"; printf $1; printf "\n"
13184 printf "printf(\""; printf $1; printf " %%d\\n\",SIG";
13185 printf $1; printf ");\n"
13186 printf "#endif\n"
13187}
13188END {
13189 printf "#endif /* JUST_NSIG */\n";
13190 printf "exit(0);\n}\n";
13191}
13192' >>signal.c
13193$cat >signal.awk <<'EOP'
13194BEGIN { ndups = 0 }
13195$1 ~ /^NSIG$/ { nsig = $2 }
13196($1 !~ /^NSIG$/) && (NF == 2) {
13197 if ($2 > maxsig) { maxsig = $2 }
13198 if (sig_name[$2]) {
13199 dup_name[ndups] = $1
13200 dup_num[ndups] = $2
13201 ndups++
13202 }
13203 else {
13204 sig_name[$2] = $1
13205 sig_num[$2] = $2
13206 }
13207}
13208END {
13209 if (nsig == 0) {
13210 nsig = maxsig + 1
13211 }
13212 printf("NSIG %d\n", nsig);
13213 for (n = 1; n < nsig; n++) {
13214 if (sig_name[n]) {
13215 printf("%s %d\n", sig_name[n], sig_num[n])
13216 }
13217 else {
13218 printf("NUM%d %d\n", n, n)
13219 }
13220 }
13221 for (n = 0; n < ndups; n++) {
13222 printf("%s %d\n", dup_name[n], dup_num[n])
13223 }
13224}
13225EOP
13226$cat >signal_cmd <<EOS
13227$startsh
13228if $test -s signal.lst; then
13229 echo "Using your existing signal.lst file"
13230 exit 0
13231fi
13232xxx="$xxx"
13233EOS
13234$cat >>signal_cmd <<'EOS'
13235
13236set signal
13237if eval $compile_ok; then
13238 ./signal$_exe | $sort -n +1 | $uniq | $awk -f signal.awk >signal.lst
13239else
13240 echo "(I can't seem be able to compile the whole test program)" >&4
13241 echo "(I'll try it in little pieces.)" >&4
13242 set signal -DJUST_NSIG
13243 if eval $compile_ok; then
13244 ./signal$_exe > signal.nsg
13245 $cat signal.nsg
13246 else
13247 echo "I can't seem to figure out how many signals you have." >&4
13248 echo "Guessing 50." >&4
13249 echo 'NSIG 50' > signal.nsg
13250 fi
13251 : Now look at all the signal names, one at a time.
13252 for xx in `echo $xxx | $tr ' ' $trnl | $sort | $uniq`; do
13253 $cat > signal.c <<EOCP
13254#include <sys/types.h>
13255#include <signal.h>
13256#include <stdio.h>
13257int main() {
13258printf("$xx %d\n", SIG${xx});
13259return 0;
13260}
13261EOCP
13262 set signal
13263 if eval $compile; then
13264 echo "SIG${xx} found."
13265 ./signal$_exe >> signal.ls1
13266 else
13267 echo "SIG${xx} NOT found."
13268 fi
13269 done
13270 if $test -s signal.ls1; then
13271 $cat signal.nsg signal.ls1 |
13272 $sort -n +1 | $uniq | $awk -f signal.awk >signal.lst
13273 fi
13274
13275fi
13276if $test -s signal.lst; then
13277 :
13278else
13279 echo "(AAK! I can't compile the test programs -- Guessing)" >&4
13280 echo 'kill -l' >signal
13281 set X `csh -f <signal`
13282 $rm -f signal
13283 shift
13284 case $# in
13285 0) set HUP INT QUIT ILL TRAP ABRT EMT FPE KILL BUS SEGV SYS PIPE ALRM TERM;;
13286 esac
13287 echo $@ | $tr ' ' $trnl | \
13288 $awk '{ printf "%s %d\n", $1, ++s; }
13289 END { printf "NSIG %d\n", ++s }' >signal.lst
13290fi
13291$rm -f signal.c signal$_exe signal$_o signal.nsg signal.ls1
13292EOS
13293chmod a+x signal_cmd
13294$eunicefix signal_cmd
13295
13296: generate list of signal names
13297echo " "
13298case "$sig_name_init" in
13299'') doinit=yes ;;
13300*) case "$sig_num_init" in
13301 ''|*,*) doinit=yes ;;
13302 esac ;;
13303esac
13304case "$doinit" in
13305yes)
13306 echo "Generating a list of signal names and numbers..." >&4
13307 . ./signal_cmd
13308 sig_count=`$awk '/^NSIG/ { printf "%d", $2 }' signal.lst`
13309 sig_name=`$awk 'BEGIN { printf "ZERO " }
13310 !/^NSIG/ { printf "%s ", $1 }' signal.lst`
13311 sig_num=`$awk 'BEGIN { printf "0 " }
13312 !/^NSIG/ { printf "%d ", $2 }' signal.lst`
13313 sig_name_init=`$awk 'BEGIN { printf "\"ZERO\", " }
13314 !/^NSIG/ { printf "\"%s\", ", $1 }
13315 END { printf "0\n" }' signal.lst`
13316 sig_num_init=`$awk 'BEGIN { printf "0, " }
13317 !/^NSIG/ { printf "%d, ", $2}
13318 END { printf "0\n"}' signal.lst`
13319 ;;
13320esac
13321echo "The following $sig_count signals are available:"
13322echo " "
13323echo $sig_name | $awk \
13324'BEGIN { linelen = 0 }
13325{
13326 for (i = 1; i <= NF; i++) {
13327 name = "SIG" $i " "
13328 linelen = linelen + length(name)
13329 if (linelen > 70) {
13330 printf "\n"
13331 linelen = length(name)
13332 }
13333 printf "%s", name
13334 }
13335 printf "\n"
13336}'
13337$rm -f signal signal.c signal.awk signal.lst signal_cmd
13338
13339: see what type is used for signed size_t
13340set ssize_t ssizetype int stdio.h sys/types.h
13341eval $typedef
13342dflt="$ssizetype"
13343$cat > ssize.c <<EOM
13344#include <stdio.h>
13345#include <sys/types.h>
13346#define Size_t $sizetype
13347#define SSize_t $dflt
13348int main()
13349{
13350 if (sizeof(Size_t) == sizeof(SSize_t))
13351 printf("$dflt\n");
13352 else if (sizeof(Size_t) == sizeof(int))
13353 printf("int\n");
13354 else
13355 printf("long\n");
13356 exit(0);
13357}
13358EOM
13359echo " "
13360set ssize
13361if eval $compile_ok && ./ssize > /dev/null; then
13362 ssizetype=`./ssize`
13363 echo "I'll be using $ssizetype for functions returning a byte count." >&4
13364else
13365 $cat >&4 <<EOM
13366Help! I can't compile and run the ssize_t test program: please enlighten me!
13367(This is probably a misconfiguration in your system or libraries, and
13368you really ought to fix it. Still, I'll try anyway.)
13369
13370I need a type that is the same size as $sizetype, but is guaranteed to
13371be signed. Common values are ssize_t, int and long.
13372
13373EOM
13374 rp="What signed type is the same size as $sizetype?"
13375 . ./myread
13376 ssizetype="$ans"
13377fi
13378$rm -f ssize ssize.*
13379
13380: see what type of char stdio uses.
13381echo " "
13382if $contains 'unsigned.*char.*_ptr;' `./findhdr stdio.h` >/dev/null 2>&1 ; then
13383 echo "Your stdio uses unsigned chars." >&4
13384 stdchar="unsigned char"
13385else
13386 echo "Your stdio uses signed chars." >&4
13387 stdchar="char"
13388fi
13389
13390: see if time exists
13391echo " "
13392if test "X$d_time" = X -o X"$timetype" = X; then
13393 if set time val -f d_time; eval $csym; $val; then
13394 echo 'time() found.' >&4
13395 val="$define"
13396 rp="What is the type returned by time() on this system?"
13397 set time_t timetype long stdio.h sys/types.h
13398 eval $typedef_ask
13399 else
13400 echo 'time() not found, hope that will do.' >&4
13401 val="$undef"
13402 timetype='int';
13403 fi
13404 set d_time
13405 eval $setvar
13406fi
13407
13408: see what type uids are declared as in the kernel
13409echo " "
13410echo "Looking for the type for user ids returned by getuid()."
13411set uid_t uidtype xxx stdio.h sys/types.h
13412eval $typedef
13413case "$uidtype" in
13414xxx)
13415 xxx=`./findhdr sys/user.h`
13416 set `grep '_ruid;' "$xxx" 2>/dev/null` unsigned short
13417 case $1 in
13418 unsigned) dflt="$1 $2" ;;
13419 *) dflt="$1" ;;
13420 esac
13421 ;;
13422*) dflt="$uidtype";;
13423esac
13424case "$uidtype" in
13425uid_t) echo "uid_t found." ;;
13426*) rp="What is the type for user ids returned by getuid()?"
13427 . ./myread
13428 uidtype="$ans"
13429 ;;
13430esac
13431
13432echo " "
13433case "$uidtype" in
13434*_t) zzz="$uidtype" ;;
13435*) zzz="uid" ;;
13436esac
13437echo "Checking the size of $zzz..." >&4
13438cat > try.c <<EOCP
13439#include <sys/types.h>
13440#include <stdio.h>
13441int main() {
13442 printf("%d\n", (int)sizeof($uidtype));
13443 exit(0);
13444}
13445EOCP
13446set try
13447if eval $compile_ok; then
13448 yyy=`./try`
13449 case "$yyy" in
13450 '') uidsize=4
13451 echo "(I can't execute the test program--guessing $uidsize.)" >&4
13452 ;;
13453 *) uidsize=$yyy
13454 echo "Your $zzz size is $uidsize bytes."
13455 ;;
13456 esac
13457else
13458 uidsize=4
13459 echo "(I can't compile the test program--guessing $uidsize.)" >&4
13460fi
13461
13462echo " "
13463case "$uidtype" in
13464*_t) zzz="$uidtype" ;;
13465*) zzz="uid" ;;
13466esac
13467echo "Checking the sign of $zzz..." >&4
13468cat > try.c <<EOCP
13469#include <sys/types.h>
13470#include <stdio.h>
13471int main() {
13472 $uidtype foo = -1;
13473 if (foo < 0)
13474 printf("-1\n");
13475 else
13476 printf("1\n");
13477}
13478EOCP
13479set try
13480if eval $compile; then
13481 yyy=`./try`
13482 case "$yyy" in
13483 '') uidsign=1
13484 echo "(I can't execute the test program--guessing unsigned.)" >&4
13485 ;;
13486 *) uidsign=$yyy
13487 case "$uidsign" in
13488 1) echo "Your $zzz is unsigned." ;;
13489 -1) echo "Your $zzz is signed." ;;
13490 esac
13491 ;;
13492 esac
13493else
13494 uidsign=1
13495 echo "(I can't compile the test program--guessing unsigned.)" >&4
13496fi
13497
13498
13499
13500echo " "
13501$echo "Checking the format string to be used for uids..." >&4
13502
13503case "$uidsign" in
13504-1) if $test X"$uidsize" = X"$ivsize"; then
13505 uidformat="$ivdformat"
13506 else
13507 if $test X"$uidsize" = X"$longsize"; then
13508 uidformat='"ld"'
13509 else
13510 if $test X"$uidsize" = X"$intsize"; then
13511 uidformat='"d"'
13512 else
13513 if $test X"$uidsize" = X"$shortsize"; then
13514 uidformat='"hd"'
13515 fi
13516 fi
13517 fi
13518 fi
13519 ;;
13520*) if $test X"$uidsize" = X"$uvsize"; then
13521 uidformat="$uvuformat"
13522 else
13523 if $test X"$uidsize" = X"$longsize"; then
13524 uidformat='"lu"'
13525 else
13526 if $test X"$uidsize" = X"$intsize"; then
13527 uidformat='"u"'
13528 else
13529 if $test X"$uidsize" = X"$shortsize"; then
13530 uidformat='"hu"'
13531 fi
13532 fi
13533 fi
13534 fi
13535 ;;
13536esac
13537
13538: see if dbm.h is available
13539: see if dbmclose exists
13540set dbmclose d_dbmclose
13541eval $inlibc
13542
13543case "$d_dbmclose" in
13544$define)
13545 set dbm.h i_dbm
13546 eval $inhdr
13547 case "$i_dbm" in
13548 $define)
13549 val="$undef"
13550 set i_rpcsvcdbm
13551 eval $setvar
13552 ;;
13553 *) set rpcsvc/dbm.h i_rpcsvcdbm
13554 eval $inhdr
13555 ;;
13556 esac
13557 ;;
13558*) echo "We won't be including <dbm.h>"
13559 val="$undef"
13560 set i_dbm
13561 eval $setvar
13562 val="$undef"
13563 set i_rpcsvcdbm
13564 eval $setvar
13565 ;;
13566esac
13567
13568: see if this is a sys/file.h system
13569val=''
13570set sys/file.h val
13571eval $inhdr
13572
13573: do we need to include sys/file.h ?
13574case "$val" in
13575"$define")
13576 echo " "
13577 if $h_sysfile; then
13578 val="$define"
13579 echo "We'll be including <sys/file.h>." >&4
13580 else
13581 val="$undef"
13582 echo "We won't be including <sys/file.h>." >&4
13583 fi
13584 ;;
13585*)
13586 h_sysfile=false
13587 ;;
13588esac
13589set i_sysfile
13590eval $setvar
13591
13592: see if fcntl.h is there
13593val=''
13594set fcntl.h val
13595eval $inhdr
13596
13597: see if we can include fcntl.h
13598case "$val" in
13599"$define")
13600 echo " "
13601 if $h_fcntl; then
13602 val="$define"
13603 echo "We'll be including <fcntl.h>." >&4
13604 else
13605 val="$undef"
13606 if $h_sysfile; then
13607 echo "We don't need to include <fcntl.h> if we include <sys/file.h>." >&4
13608 else
13609 echo "We won't be including <fcntl.h>." >&4
13610 fi
13611 fi
13612 ;;
13613*)
13614 h_fcntl=false
13615 val="$undef"
13616 ;;
13617esac
13618set i_fcntl
13619eval $setvar
13620
13621: see if locale.h is available
13622set locale.h i_locale
13623eval $inhdr
13624
13625: see if mach cthreads are available
13626if test "X$usethreads" = "X$define"; then
13627 set mach/cthreads.h i_machcthr
13628 eval $inhdr
13629else
13630 i_machcthr="$undef"
13631fi
13632
13633
13634
13635: see if this is a math.h system
13636set math.h i_math
13637eval $inhdr
13638
13639: see if this is a mntent.h system
13640set mntent.h i_mntent
13641eval $inhdr
13642
13643: see if ndbm.h is available
13644set ndbm.h t_ndbm
13645eval $inhdr
13646case "$t_ndbm" in
13647$define)
13648 : see if dbm_open exists
13649 set dbm_open d_dbm_open
13650 eval $inlibc
13651 case "$d_dbm_open" in
13652 $undef)
13653 t_ndbm="$undef"
13654 echo "We won't be including <ndbm.h>"
13655 ;;
13656 esac
13657 ;;
13658esac
13659val="$t_ndbm"
13660set i_ndbm
13661eval $setvar
13662
13663: see if net/errno.h is available
13664val=''
13665set net/errno.h val
13666eval $inhdr
13667
13668: Unfortunately, it causes problems on some systems. Arrgh.
13669case "$val" in
13670$define)
13671 cat > try.c <<'EOM'
13672#include <stdio.h>
13673#include <errno.h>
13674#include <net/errno.h>
13675int func()
13676{
13677 return ENOTSOCK;
13678}
13679EOM
13680 if $cc $ccflags -c try.c >/dev/null 2>&1; then
13681 echo "We'll be including <net/errno.h>." >&4
13682 else
13683 echo "We won't be including <net/errno.h>." >&4
13684 val="$undef"
13685 fi
13686 $rm -f try.* try
13687 ;;
13688esac
13689set i_neterrno
13690eval $setvar
13691
13692: see if netinet/tcp.h is available
13693set netinet/tcp.h i_netinettcp
13694eval $inhdr
13695
13696: see if this is a poll.h system
13697set poll.h i_poll
13698eval $inhdr
13699
13700: get C preprocessor symbols handy
13701echo " "
13702$echo "Guessing which symbols your C compiler and preprocessor define..." >&4
13703echo $al $osname | $tr ' ' $trnl >Cppsym.know
13704./tr '[a-z]' '[A-Z]' < Cppsym.know > Cppsym.a
13705./tr '[A-Z]' '[a-z]' < Cppsym.know > Cppsym.b
13706cat Cppsym.a Cppsym.b >> Cppsym.know
13707$sed 's/^/_/' < Cppsym.know > Cppsym.a
13708$sed 's/^/__/' < Cppsym.know > Cppsym.b
13709$sed 's/\(.*\)/__\1__/' < Cppsym.know > Cppsym.c
13710$cat Cppsym.know Cppsym.a Cppsym.b Cppsym.c | sort | uniq > Cppsym.d
13711mv Cppsym.d Cppsym.know
13712rm Cppsym.?
13713$cat <<EOSS >Cppsym
13714$startsh
13715case "\$1" in
13716-l) list=true
13717 shift
13718 ;;
13719esac
13720unknown=''
13721case "\$list\$#" in
137221|2)
13723 for sym do
13724 if $contains "^\$1$" Cppsym.true >/dev/null 2>&1; then
13725 exit 0
13726 elif $contains "^\$1$" Cppsym.know >/dev/null 2>&1; then
13727 :
13728 else
13729 unknown="\$unknown \$sym"
13730 fi
13731 done
13732 set X \$unknown
13733 shift
13734 ;;
13735esac
13736case \$# in
137370) exit 1;;
13738esac
13739echo \$* | $tr ' ' '$trnl' | $sed -e 's/\(.*\)/\\
13740#ifdef \1\\
13741exit 0; _ _ _ _\1\\ \1\\
13742#endif\\
13743/' >Cppsym\$\$
13744echo "exit 1; _ _ _" >>Cppsym\$\$
13745$cppstdin $cppminus <Cppsym\$\$ | $grep '^exit [01]; _ _' >Cppsym2\$\$
13746case "\$list" in
13747true) $awk 'NF > 5 {print substr(\$6,2,100)}' <Cppsym2\$\$ ;;
13748*)
13749 sh Cppsym2\$\$
13750 status=\$?
13751 ;;
13752esac
13753$rm -f Cppsym\$\$ Cppsym2\$\$
13754exit \$status
13755EOSS
13756chmod +x Cppsym
13757$eunicefix Cppsym
13758./Cppsym -l $al | $sort | $grep -v '^$' >Cppsym.true
13759
13760: now check the C compiler for additional symbols
13761postprocess_cc_v=''
13762case "$osname" in
13763aix) postprocess_cc_v="|$tr , ' '" ;;
13764esac
13765$cat >ccsym <<EOS
13766$startsh
13767$cat >tmp.c <<EOF
13768extern int foo;
13769EOF
13770for i in \`$cc -v -c tmp.c 2>&1 $postprocess_cc_v\`
13771do
13772 case "\$i" in
13773 -D*) echo "\$i" | $sed 's/^-D//';;
13774 -A*) $test "$gccversion" && echo "\$i" | $sed 's/^-A\(.*\)(\(.*\))/\1=\2/';;
13775 esac
13776done
13777$rm -f try.c
13778EOS
13779postprocess_cc_v=''
13780chmod +x ccsym
13781$eunicefix ccsym
13782./ccsym > ccsym1.raw
13783if $test -s ccsym1.raw; then
13784 $sort ccsym1.raw | $uniq >ccsym.raw
13785else
13786 mv ccsym1.raw ccsym.raw
13787fi
13788
13789$awk '/\=/ { print $0; next }
13790 { print $0"=1" }' ccsym.raw >ccsym.list
13791$awk '{ print $0"=1" }' Cppsym.true >ccsym.true
13792$comm -13 ccsym.true ccsym.list >ccsym.own
13793$comm -12 ccsym.true ccsym.list >ccsym.com
13794$comm -23 ccsym.true ccsym.list >ccsym.cpp
13795also=''
13796if $test -z ccsym.raw; then
13797 echo "Your C compiler doesn't seem to define any symbols!" >&4
13798 echo " "
13799 echo "However, your C preprocessor defines the following symbols:"
13800 $cat Cppsym.true
13801 ccsymbols=''
13802 cppsymbols=`$cat Cppsym.true`
13803 cppsymbols=`echo $cppsymbols`
13804 cppccsymbols="$cppsymbols"
13805else
13806 if $test -s ccsym.com; then
13807 echo "Your C compiler and pre-processor define these symbols:"
13808 $sed -e 's/\(.*\)=.*/\1/' ccsym.com
13809 also='also '
13810 symbols='ones'
13811 cppccsymbols=`$cat ccsym.com`
13812 cppccsymbols=`echo $cppccsymbols`
13813 $test "$silent" || sleep 1
13814 fi
13815 if $test -s ccsym.cpp; then
13816 $test "$also" && echo " "
13817 echo "Your C pre-processor ${also}defines the following symbols:"
13818 $sed -e 's/\(.*\)=.*/\1/' ccsym.cpp
13819 also='further '
13820 cppsymbols=`$cat ccsym.cpp`
13821 cppsymbols=`echo $cppsymbols`
13822 $test "$silent" || sleep 1
13823 fi
13824 if $test -s ccsym.own; then
13825 $test "$also" && echo " "
13826 echo "Your C compiler ${also}defines the following cpp symbols:"
13827 $sed -e 's/\(.*\)=1/\1/' ccsym.own
13828 $sed -e 's/\(.*\)=.*/\1/' ccsym.own | $uniq >>Cppsym.true
13829 ccsymbols=`$cat ccsym.own`
13830 ccsymbols=`echo $ccsymbols`
13831 $test "$silent" || sleep 1
13832 fi
13833fi
13834$rm -f ccsym*
13835
13836: see if this is a termio system
13837val="$undef"
13838val2="$undef"
13839val3="$undef"
13840if $test `./findhdr termios.h`; then
13841 set tcsetattr i_termios
13842 eval $inlibc
13843 val3="$i_termios"
13844fi
13845echo " "
13846case "$val3" in
13847"$define") echo "You have POSIX termios.h... good!" >&4;;
13848*) if ./Cppsym pyr; then
13849 case "`/bin/universe`" in
13850 ucb) if $test `./findhdr sgtty.h`; then
13851 val2="$define"
13852 echo "<sgtty.h> found." >&4
13853 else
13854 echo "System is pyramid with BSD universe."
13855 echo "<sgtty.h> not found--you could have problems." >&4
13856 fi;;
13857 *) if $test `./findhdr termio.h`; then
13858 val="$define"
13859 echo "<termio.h> found." >&4
13860 else
13861 echo "System is pyramid with USG universe."
13862 echo "<termio.h> not found--you could have problems." >&4
13863 fi;;
13864 esac
13865 elif ./usg; then
13866 if $test `./findhdr termio.h`; then
13867 echo "<termio.h> found." >&4
13868 val="$define"
13869 elif $test `./findhdr sgtty.h`; then
13870 echo "<sgtty.h> found." >&4
13871 val2="$define"
13872 else
13873echo "Neither <termio.h> nor <sgtty.h> found--you could have problems." >&4
13874 fi
13875 else
13876 if $test `./findhdr sgtty.h`; then
13877 echo "<sgtty.h> found." >&4
13878 val2="$define"
13879 elif $test `./findhdr termio.h`; then
13880 echo "<termio.h> found." >&4
13881 val="$define"
13882 else
13883echo "Neither <sgtty.h> nor <termio.h> found--you could have problems." >&4
13884 fi
13885 fi;;
13886esac
13887set i_termio; eval $setvar
13888val=$val2; set i_sgtty; eval $setvar
13889val=$val3; set i_termios; eval $setvar
13890
13891: see if this is a shadow.h system
13892set shadow.h i_shadow
13893eval $inhdr
13894
13895: see if this is a socks.h system
13896set socks.h i_socks
13897eval $inhdr
13898
13899: see if stdarg is available
13900echo " "
13901if $test `./findhdr stdarg.h`; then
13902 echo "<stdarg.h> found." >&4
13903 valstd="$define"
13904else
13905 echo "<stdarg.h> NOT found." >&4
13906 valstd="$undef"
13907fi
13908
13909: see if varags is available
13910echo " "
13911if $test `./findhdr varargs.h`; then
13912 echo "<varargs.h> found." >&4
13913else
13914 echo "<varargs.h> NOT found, but that's ok (I hope)." >&4
13915fi
13916
13917: set up the varargs testing programs
13918$cat > varargs.c <<EOP
13919#ifdef I_STDARG
13920#include <stdarg.h>
13921#endif
13922#ifdef I_VARARGS
13923#include <varargs.h>
13924#endif
13925
13926#ifdef I_STDARG
13927int f(char *p, ...)
13928#else
13929int f(va_alist)
13930va_dcl
13931#endif
13932{
13933 va_list ap;
13934#ifndef I_STDARG
13935 char *p;
13936#endif
13937#ifdef I_STDARG
13938 va_start(ap,p);
13939#else
13940 va_start(ap);
13941 p = va_arg(ap, char *);
13942#endif
13943 va_end(ap);
13944}
13945EOP
13946$cat > varargs <<EOP
13947$startsh
13948if $cc -c $ccflags -D\$1 varargs.c >/dev/null 2>&1; then
13949 echo "true"
13950else
13951 echo "false"
13952fi
13953$rm -f varargs$_o
13954EOP
13955chmod +x varargs
13956
13957: now check which varargs header should be included
13958echo " "
13959i_varhdr=''
13960case "$valstd" in
13961"$define")
13962 if `./varargs I_STDARG`; then
13963 val='stdarg.h'
13964 elif `./varargs I_VARARGS`; then
13965 val='varargs.h'
13966 fi
13967 ;;
13968*)
13969 if `./varargs I_VARARGS`; then
13970 val='varargs.h'
13971 fi
13972 ;;
13973esac
13974case "$val" in
13975'')
13976echo "I could not find the definition for va_dcl... You have problems..." >&4
13977 val="$undef"; set i_stdarg; eval $setvar
13978 val="$undef"; set i_varargs; eval $setvar
13979 ;;
13980*)
13981 set i_varhdr
13982 eval $setvar
13983 case "$i_varhdr" in
13984 stdarg.h)
13985 val="$define"; set i_stdarg; eval $setvar
13986 val="$undef"; set i_varargs; eval $setvar
13987 ;;
13988 varargs.h)
13989 val="$undef"; set i_stdarg; eval $setvar
13990 val="$define"; set i_varargs; eval $setvar
13991 ;;
13992 esac
13993 echo "We'll include <$i_varhdr> to get va_dcl definition." >&4;;
13994esac
13995$rm -f varargs*
13996
13997: see if stddef is available
13998set stddef.h i_stddef
13999eval $inhdr
14000
14001: see if sys/access.h is available
14002set sys/access.h i_sysaccess
14003eval $inhdr
14004
14005: see if ioctl defs are in sgtty, termio, sys/filio or sys/ioctl
14006set sys/filio.h i_sysfilio
14007eval $inhdr
14008echo " "
14009if $test `./findhdr sys/ioctl.h`; then
14010 val="$define"
14011 echo '<sys/ioctl.h> found.' >&4
14012else
14013 val="$undef"
14014 if $test $i_sysfilio = "$define"; then
14015 echo '<sys/ioctl.h> NOT found.' >&4
14016 else
14017 $test $i_sgtty = "$define" && xxx="sgtty.h"
14018 $test $i_termio = "$define" && xxx="termio.h"
14019 $test $i_termios = "$define" && xxx="termios.h"
14020echo "No <sys/ioctl.h> found, assuming ioctl args are defined in <$xxx>." >&4
14021 fi
14022fi
14023set i_sysioctl
14024eval $setvar
14025
14026: see if sys/resource.h has to be included
14027set sys/resource.h i_sysresrc
14028eval $inhdr
14029
14030: see if sys/security.h is available
14031set sys/security.h i_syssecrt
14032eval $inhdr
14033
14034: see if this is a sys/statvfs.h system
14035set sys/statvfs.h i_sysstatvfs
14036eval $inhdr
14037
14038: see if this is a sys/uio.h system
14039set sys/uio.h i_sysuio
14040eval $inhdr
14041
14042: see if this is a sys/un.h system
14043set sys/un.h i_sysun
14044eval $inhdr
14045
14046: see if this is a syswait system
14047set sys/wait.h i_syswait
14048eval $inhdr
14049
14050: see if this is a ustat.h system
14051set ustat.h i_ustat
14052eval $inhdr
14053
14054: see if this is an utime system
14055set utime.h i_utime
14056eval $inhdr
14057
14058: see if this is a values.h system
14059set values.h i_values
14060eval $inhdr
14061
14062: see if this is a vfork system
14063case "$d_vfork" in
14064"$define")
14065 set vfork.h i_vfork
14066 eval $inhdr
14067 ;;
14068*)
14069 i_vfork="$undef"
14070 ;;
14071esac
14072
14073: see if gdbm.h is available
14074set gdbm.h t_gdbm
14075eval $inhdr
14076case "$t_gdbm" in
14077$define)
14078 : see if gdbm_open exists
14079 set gdbm_open d_gdbm_open
14080 eval $inlibc
14081 case "$d_gdbm_open" in
14082 $undef)
14083 t_gdbm="$undef"
14084 echo "We won't be including <gdbm.h>"
14085 ;;
14086 esac
14087 ;;
14088esac
14089val="$t_gdbm"
14090set i_gdbm
14091eval $setvar
14092
14093echo " "
14094echo "Looking for extensions..." >&4
14095: If we are using the old config.sh, known_extensions may contain
14096: old or inaccurate or duplicate values.
14097known_extensions=''
14098nonxs_extensions=''
14099: We do not use find because it might not be available.
14100: We do not just use MANIFEST because the user may have dropped
14101: some additional extensions into the source tree and expect them
14102: to be built.
14103
14104: Function to recursively find available extensions, ignoring DynaLoader
14105: NOTE: recursion limit of 10 to prevent runaway in case of symlink madness
14106find_extensions='
14107 for xxx in *; do
14108 case "$xxx" in
14109 DynaLoader|dynaload) ;;
14110 *)
14111 if $test -f $xxx/$xxx.xs; then
14112 known_extensions="$known_extensions $1$xxx";
14113 elif $test -f $xxx/Makefile.PL; then
14114 nonxs_extensions="$nonxs_extensions $1$xxx";
14115 else
14116 if $test -d $xxx -a $# -lt 10; then
14117 set $1$xxx/ $*;
14118 cd $xxx;
14119 eval $find_extensions;
14120 cd ..;
14121 shift;
14122 fi;
14123 fi
14124 ;;
14125 esac;
14126 done'
14127tdir=`pwd`
14128cd $rsrc/ext
14129set X
14130shift
14131eval $find_extensions
14132set X $nonxs_extensions
14133shift
14134nonxs_extensions="$*"
14135set X $known_extensions
14136shift
14137known_extensions="$*"
14138cd $tdir
14139
14140: Now see which are supported on this system.
14141avail_ext=''
14142for xxx in $known_extensions ; do
14143 case "$xxx" in
14144 DB_File|db_file)
14145 case "$i_db" in
14146 $define) avail_ext="$avail_ext $xxx" ;;
14147 esac
14148 ;;
14149 GDBM_File|gdbm_fil)
14150 case "$i_gdbm" in
14151 $define) avail_ext="$avail_ext $xxx" ;;
14152 esac
14153 ;;
14154 NDBM_File|ndbm_fil)
14155 case "$i_ndbm" in
14156 $define) avail_ext="$avail_ext $xxx" ;;
14157 esac
14158 ;;
14159 ODBM_File|odbm_fil)
14160 case "${i_dbm}${i_rpcsvcdbm}" in
14161 *"${define}"*) avail_ext="$avail_ext $xxx" ;;
14162 esac
14163 ;;
14164 POSIX|posix)
14165 case "$useposix" in
14166 true|define|y) avail_ext="$avail_ext $xxx" ;;
14167 esac
14168 ;;
14169 Opcode|opcode)
14170 case "$useopcode" in
14171 true|define|y) avail_ext="$avail_ext $xxx" ;;
14172 esac
14173 ;;
14174 Socket|socket)
14175 case "$d_socket" in
14176 true|$define|y) avail_ext="$avail_ext $xxx" ;;
14177 esac
14178 ;;
14179 Thread|thread)
14180 case "$usethreads" in
14181 true|$define|y) avail_ext="$avail_ext $xxx" ;;
14182 esac
14183 ;;
14184 IPC/SysV|ipc/sysv)
14185 : XXX Do we need a useipcsysv variable here
14186 case "${d_msg}${d_sem}${d_shm}" in
14187 *"${define}"*) avail_ext="$avail_ext $xxx" ;;
14188 esac
14189 ;;
14190 *) avail_ext="$avail_ext $xxx"
14191 ;;
14192 esac
14193done
14194
14195set X $avail_ext
14196shift
14197avail_ext="$*"
14198
14199: Now see which nonxs extensions are supported on this system.
14200: For now assume all are.
14201nonxs_ext=''
14202for xxx in $nonxs_extensions ; do
14203 case "$xxx" in
14204 *) nonxs_ext="$nonxs_ext $xxx"
14205 ;;
14206 esac
14207done
14208
14209set X $nonxs_ext
14210shift
14211nonxs_ext="$*"
14212
14213case $usedl in
14214$define)
14215 $cat <<EOM
14216A number of extensions are supplied with $package. You may choose to
14217compile these extensions for dynamic loading (the default), compile
14218them into the $package executable (static loading), or not include
14219them at all. Answer "none" to include no extensions.
14220Note that DynaLoader is always built and need not be mentioned here.
14221
14222EOM
14223 case "$dynamic_ext" in
14224 '') dflt="$avail_ext" ;;
14225 *) dflt="$dynamic_ext"
14226 # Perhaps we are reusing an old out-of-date config.sh.
14227 case "$hint" in
14228 previous)
14229 if test X"$dynamic_ext" != X"$avail_ext"; then
14230 $cat <<EOM
14231NOTICE: Your previous config.sh list may be incorrect.
14232The extensions now available to you are
14233 ${avail_ext}
14234but the default list from your previous config.sh is
14235 ${dynamic_ext}
14236
14237EOM
14238 fi
14239 ;;
14240 esac
14241 ;;
14242 esac
14243 case "$dflt" in
14244 '') dflt=none;;
14245 esac
14246 rp="What extensions do you wish to load dynamically?"
14247 . ./myread
14248 case "$ans" in
14249 none) dynamic_ext=' ' ;;
14250 *) dynamic_ext="$ans" ;;
14251 esac
14252
14253 case "$static_ext" in
14254 '')
14255 : Exclude those already listed in dynamic linking
14256 dflt=''
14257 for xxx in $avail_ext; do
14258 case " $dynamic_ext " in
14259 *" $xxx "*) ;;
14260 *) dflt="$dflt $xxx" ;;
14261 esac
14262 done
14263 set X $dflt
14264 shift
14265 dflt="$*"
14266 ;;
14267 *) dflt="$static_ext"
14268 ;;
14269 esac
14270
14271 case "$dflt" in
14272 '') dflt=none;;
14273 esac
14274 rp="What extensions do you wish to load statically?"
14275 . ./myread
14276 case "$ans" in
14277 none) static_ext=' ' ;;
14278 *) static_ext="$ans" ;;
14279 esac
14280 ;;
14281*)
14282 $cat <<EOM
14283A number of extensions are supplied with $package. Answer "none"
14284to include no extensions.
14285Note that DynaLoader is always built and need not be mentioned here.
14286
14287EOM
14288 case "$static_ext" in
14289 '') dflt="$avail_ext" ;;
14290 *) dflt="$static_ext"
14291 # Perhaps we are reusing an old out-of-date config.sh.
14292 case "$hint" in
14293 previous)
14294 if test X"$static_ext" != X"$avail_ext"; then
14295 $cat <<EOM
14296NOTICE: Your previous config.sh list may be incorrect.
14297The extensions now available to you are
14298 ${avail_ext}
14299but the default list from your previous config.sh is
14300 ${static_ext}
14301
14302EOM
14303 fi
14304 ;;
14305 esac
14306 ;;
14307 esac
14308 : Exclude those that are not xs extensions
14309 case "$dflt" in
14310 '') dflt=none;;
14311 esac
14312 rp="What extensions do you wish to include?"
14313 . ./myread
14314 case "$ans" in
14315 none) static_ext=' ' ;;
14316 *) static_ext="$ans" ;;
14317 esac
14318 ;;
14319esac
14320
14321set X $dynamic_ext $static_ext $nonxs_ext
14322shift
14323extensions="$*"
14324
14325: Remove build directory name from cppstdin so it can be used from
14326: either the present location or the final installed location.
14327echo " "
14328: Get out of the UU directory to get correct path name.
14329cd ..
14330case "$cppstdin" in
14331`pwd`/cppstdin)
14332 echo "Stripping down cppstdin path name"
14333 cppstdin=cppstdin
14334 ;;
14335esac
14336cd UU
14337
14338: end of configuration questions
14339echo " "
14340echo "End of configuration questions."
14341echo " "
14342
14343: back to where it started
14344if test -d ../UU; then
14345 cd ..
14346fi
14347
14348: configuration may be patched via a 'config.over' file
14349if $test -f config.over; then
14350 echo " "
14351 dflt=y
14352 rp='I see a config.over file. Do you wish to load it?'
14353 . UU/myread
14354 case "$ans" in
14355 n*) echo "OK, I'll ignore it.";;
14356 *) . ./config.over
14357 echo "Configuration override changes have been loaded."
14358 ;;
14359 esac
14360fi
14361
14362: in case they want portability, strip down executable paths
14363case "$d_portable" in
14364"$define")
14365 echo " "
14366 echo "Stripping down executable paths..." >&4
14367 for file in $loclist $trylist; do
14368 eval temp=\$$file
14369 eval $file=`basename $temp`
14370 done
14371 ;;
14372esac
14373
14374: create config.sh file
14375echo " "
14376echo "Creating config.sh..." >&4
14377$spitshell <<EOT >config.sh
14378$startsh
14379#
14380# This file was produced by running the Configure script. It holds all the
14381# definitions figured out by Configure. Should you modify one of these values,
14382# do not forget to propagate your changes by running "Configure -der". You may
14383# instead choose to run each of the .SH files by yourself, or "Configure -S".
14384#
14385
14386# Package name : $package
14387# Source directory : $src
14388# Configuration time: $cf_time
14389# Configured by : $cf_by
14390# Target system : $myuname
14391
14392Author='$Author'
14393Date='$Date'
14394Header='$Header'
14395Id='$Id'
14396Locker='$Locker'
14397Log='$Log'
14398Mcc='$Mcc'
14399RCSfile='$RCSfile'
14400Revision='$Revision'
14401Source='$Source'
14402State='$State'
14403_a='$_a'
14404_exe='$_exe'
14405_o='$_o'
14406afs='$afs'
14407alignbytes='$alignbytes'
14408ansi2knr='$ansi2knr'
14409aphostname='$aphostname'
14410api_revision='$api_revision'
14411api_subversion='$api_subversion'
14412api_version='$api_version'
14413api_versionstring='$api_versionstring'
14414ar='$ar'
14415archlib='$archlib'
14416archlibexp='$archlibexp'
14417archname64='$archname64'
14418archname='$archname'
14419archobjs='$archobjs'
14420awk='$awk'
14421baserev='$baserev'
14422bash='$bash'
14423bin='$bin'
14424bincompat5005='$bincompat5005'
14425binexp='$binexp'
14426bison='$bison'
14427byacc='$byacc'
14428byteorder='$byteorder'
14429c='$c'
14430castflags='$castflags'
14431cat='$cat'
14432cc='$cc'
14433cccdlflags='$cccdlflags'
14434ccdlflags='$ccdlflags'
14435ccflags='$ccflags'
14436ccsymbols='$ccsymbols'
14437cf_by='$cf_by'
14438cf_email='$cf_email'
14439cf_time='$cf_time'
14440charsize='$charsize'
14441chgrp='$chgrp'
14442chmod='$chmod'
14443chown='$chown'
14444clocktype='$clocktype'
14445comm='$comm'
14446compress='$compress'
14447contains='$contains'
14448cp='$cp'
14449cpio='$cpio'
14450cpp='$cpp'
14451cpp_stuff='$cpp_stuff'
14452cppccsymbols='$cppccsymbols'
14453cppflags='$cppflags'
14454cpplast='$cpplast'
14455cppminus='$cppminus'
14456cpprun='$cpprun'
14457cppstdin='$cppstdin'
14458cppsymbols='$cppsymbols'
14459crosscompile='$crosscompile'
14460cryptlib='$cryptlib'
14461csh='$csh'
14462d_Gconvert='$d_Gconvert'
14463d_PRIEldbl='$d_PRIEldbl'
14464d_PRIFldbl='$d_PRIFldbl'
14465d_PRIGldbl='$d_PRIGldbl'
14466d_PRIX64='$d_PRIX64'
14467d_PRId64='$d_PRId64'
14468d_PRIeldbl='$d_PRIeldbl'
14469d_PRIfldbl='$d_PRIfldbl'
14470d_PRIgldbl='$d_PRIgldbl'
14471d_PRIi64='$d_PRIi64'
14472d_PRIo64='$d_PRIo64'
14473d_PRIu64='$d_PRIu64'
14474d_PRIx64='$d_PRIx64'
14475d_access='$d_access'
14476d_accessx='$d_accessx'
14477d_alarm='$d_alarm'
14478d_archlib='$d_archlib'
14479d_atolf='$d_atolf'
14480d_atoll='$d_atoll'
14481d_attribut='$d_attribut'
14482d_bcmp='$d_bcmp'
14483d_bcopy='$d_bcopy'
14484d_bincompat5005='$d_bincompat5005'
14485d_bsd='$d_bsd'
14486d_bsdgetpgrp='$d_bsdgetpgrp'
14487d_bsdsetpgrp='$d_bsdsetpgrp'
14488d_bzero='$d_bzero'
14489d_casti32='$d_casti32'
14490d_castneg='$d_castneg'
14491d_charvspr='$d_charvspr'
14492d_chown='$d_chown'
14493d_chroot='$d_chroot'
14494d_chsize='$d_chsize'
14495d_closedir='$d_closedir'
14496d_const='$d_const'
14497d_crypt='$d_crypt'
14498d_csh='$d_csh'
14499d_cuserid='$d_cuserid'
14500d_dbl_dig='$d_dbl_dig'
14501d_difftime='$d_difftime'
14502d_dirnamlen='$d_dirnamlen'
14503d_dlerror='$d_dlerror'
14504d_dlopen='$d_dlopen'
14505d_dlsymun='$d_dlsymun'
14506d_dosuid='$d_dosuid'
14507d_drand48proto='$d_drand48proto'
14508d_dup2='$d_dup2'
14509d_eaccess='$d_eaccess'
14510d_endgrent='$d_endgrent'
14511d_endhent='$d_endhent'
14512d_endnent='$d_endnent'
14513d_endpent='$d_endpent'
14514d_endpwent='$d_endpwent'
14515d_endsent='$d_endsent'
14516d_endspent='$d_endspent'
14517d_eofnblk='$d_eofnblk'
14518d_eunice='$d_eunice'
14519d_fchmod='$d_fchmod'
14520d_fchown='$d_fchown'
14521d_fcntl='$d_fcntl'
14522d_fd_macros='$d_fd_macros'
14523d_fd_set='$d_fd_set'
14524d_fds_bits='$d_fds_bits'
14525d_fgetpos='$d_fgetpos'
14526d_flexfnam='$d_flexfnam'
14527d_flock='$d_flock'
14528d_fork='$d_fork'
14529d_fpathconf='$d_fpathconf'
14530d_fpos64_t='$d_fpos64_t'
14531d_fs_data_s='$d_fs_data_s'
14532d_fseeko='$d_fseeko'
14533d_fsetpos='$d_fsetpos'
14534d_fstatfs='$d_fstatfs'
14535d_fstatvfs='$d_fstatvfs'
14536d_ftello='$d_ftello'
14537d_ftime='$d_ftime'
14538d_getgrent='$d_getgrent'
14539d_getgrps='$d_getgrps'
14540d_gethbyaddr='$d_gethbyaddr'
14541d_gethbyname='$d_gethbyname'
14542d_gethent='$d_gethent'
14543d_gethname='$d_gethname'
14544d_gethostprotos='$d_gethostprotos'
14545d_getlogin='$d_getlogin'
14546d_getmnt='$d_getmnt'
14547d_getmntent='$d_getmntent'
14548d_getnbyaddr='$d_getnbyaddr'
14549d_getnbyname='$d_getnbyname'
14550d_getnent='$d_getnent'
14551d_getnetprotos='$d_getnetprotos'
14552d_getpbyname='$d_getpbyname'
14553d_getpbynumber='$d_getpbynumber'
14554d_getpent='$d_getpent'
14555d_getpgid='$d_getpgid'
14556d_getpgrp2='$d_getpgrp2'
14557d_getpgrp='$d_getpgrp'
14558d_getppid='$d_getppid'
14559d_getprior='$d_getprior'
14560d_getprotoprotos='$d_getprotoprotos'
14561d_getpwent='$d_getpwent'
14562d_getsbyname='$d_getsbyname'
14563d_getsbyport='$d_getsbyport'
14564d_getsent='$d_getsent'
14565d_getservprotos='$d_getservprotos'
14566d_getspent='$d_getspent'
14567d_getspnam='$d_getspnam'
14568d_gettimeod='$d_gettimeod'
14569d_gnulibc='$d_gnulibc'
14570d_grpasswd='$d_grpasswd'
14571d_hasmntopt='$d_hasmntopt'
14572d_htonl='$d_htonl'
14573d_index='$d_index'
14574d_inetaton='$d_inetaton'
14575d_int64t='$d_int64t'
14576d_isascii='$d_isascii'
14577d_killpg='$d_killpg'
14578d_lchown='$d_lchown'
14579d_ldbl_dig='$d_ldbl_dig'
14580d_link='$d_link'
14581d_locconv='$d_locconv'
14582d_lockf='$d_lockf'
14583d_longdbl='$d_longdbl'
14584d_longlong='$d_longlong'
14585d_lstat='$d_lstat'
14586d_mblen='$d_mblen'
14587d_mbstowcs='$d_mbstowcs'
14588d_mbtowc='$d_mbtowc'
14589d_memchr='$d_memchr'
14590d_memcmp='$d_memcmp'
14591d_memcpy='$d_memcpy'
14592d_memmove='$d_memmove'
14593d_memset='$d_memset'
14594d_mkdir='$d_mkdir'
14595d_mkfifo='$d_mkfifo'
14596d_mktime='$d_mktime'
14597d_msg='$d_msg'
14598d_msg_ctrunc='$d_msg_ctrunc'
14599d_msg_dontroute='$d_msg_dontroute'
14600d_msg_oob='$d_msg_oob'
14601d_msg_peek='$d_msg_peek'
14602d_msg_proxy='$d_msg_proxy'
14603d_msgctl='$d_msgctl'
14604d_msgget='$d_msgget'
14605d_msgrcv='$d_msgrcv'
14606d_msgsnd='$d_msgsnd'
14607d_mymalloc='$d_mymalloc'
14608d_nice='$d_nice'
14609d_nv_preserves_uv='$d_nv_preserves_uv'
14610d_off64_t='$d_off64_t'
14611d_old_pthread_create_joinable='$d_old_pthread_create_joinable'
14612d_oldpthreads='$d_oldpthreads'
14613d_oldsock='$d_oldsock'
14614d_open3='$d_open3'
14615d_pathconf='$d_pathconf'
14616d_pause='$d_pause'
14617d_phostname='$d_phostname'
14618d_pipe='$d_pipe'
14619d_poll='$d_poll'
14620d_portable='$d_portable'
14621d_pthread_yield='$d_pthread_yield'
14622d_pwage='$d_pwage'
14623d_pwchange='$d_pwchange'
14624d_pwclass='$d_pwclass'
14625d_pwcomment='$d_pwcomment'
14626d_pwexpire='$d_pwexpire'
14627d_pwgecos='$d_pwgecos'
14628d_pwpasswd='$d_pwpasswd'
14629d_pwquota='$d_pwquota'
14630d_quad='$d_quad'
14631d_readdir='$d_readdir'
14632d_readlink='$d_readlink'
14633d_rename='$d_rename'
14634d_rewinddir='$d_rewinddir'
14635d_rmdir='$d_rmdir'
14636d_safebcpy='$d_safebcpy'
14637d_safemcpy='$d_safemcpy'
14638d_sanemcmp='$d_sanemcmp'
14639d_sched_yield='$d_sched_yield'
14640d_scm_rights='$d_scm_rights'
14641d_seekdir='$d_seekdir'
14642d_select='$d_select'
14643d_sem='$d_sem'
14644d_semctl='$d_semctl'
14645d_semctl_semid_ds='$d_semctl_semid_ds'
14646d_semctl_semun='$d_semctl_semun'
14647d_semget='$d_semget'
14648d_semop='$d_semop'
14649d_setegid='$d_setegid'
14650d_seteuid='$d_seteuid'
14651d_setgrent='$d_setgrent'
14652d_setgrps='$d_setgrps'
14653d_sethent='$d_sethent'
14654d_setlinebuf='$d_setlinebuf'
14655d_setlocale='$d_setlocale'
14656d_setnent='$d_setnent'
14657d_setpent='$d_setpent'
14658d_setpgid='$d_setpgid'
14659d_setpgrp2='$d_setpgrp2'
14660d_setpgrp='$d_setpgrp'
14661d_setprior='$d_setprior'
14662d_setpwent='$d_setpwent'
14663d_setregid='$d_setregid'
14664d_setresgid='$d_setresgid'
14665d_setresuid='$d_setresuid'
14666d_setreuid='$d_setreuid'
14667d_setrgid='$d_setrgid'
14668d_setruid='$d_setruid'
14669d_setsent='$d_setsent'
14670d_setsid='$d_setsid'
14671d_setspent='$d_setspent'
14672d_setvbuf='$d_setvbuf'
14673d_sfio='$d_sfio'
14674d_shm='$d_shm'
14675d_shmat='$d_shmat'
14676d_shmatprototype='$d_shmatprototype'
14677d_shmctl='$d_shmctl'
14678d_shmdt='$d_shmdt'
14679d_shmget='$d_shmget'
14680d_sigaction='$d_sigaction'
14681d_sigsetjmp='$d_sigsetjmp'
14682d_socket='$d_socket'
14683d_sockpair='$d_sockpair'
14684d_sqrtl='$d_sqrtl'
14685d_statblks='$d_statblks'
14686d_statfs_f_flags='$d_statfs_f_flags'
14687d_statfs_s='$d_statfs_s'
14688d_statvfs='$d_statvfs'
14689d_stdio_cnt_lval='$d_stdio_cnt_lval'
14690d_stdio_ptr_lval='$d_stdio_ptr_lval'
14691d_stdio_stream_array='$d_stdio_stream_array'
14692d_stdiobase='$d_stdiobase'
14693d_stdstdio='$d_stdstdio'
14694d_strchr='$d_strchr'
14695d_strcoll='$d_strcoll'
14696d_strctcpy='$d_strctcpy'
14697d_strerrm='$d_strerrm'
14698d_strerror='$d_strerror'
14699d_strtod='$d_strtod'
14700d_strtol='$d_strtol'
14701d_strtold='$d_strtold'
14702d_strtoll='$d_strtoll'
14703d_strtoul='$d_strtoul'
14704d_strtoull='$d_strtoull'
14705d_strtouq='$d_strtouq'
14706d_strxfrm='$d_strxfrm'
14707d_suidsafe='$d_suidsafe'
14708d_symlink='$d_symlink'
14709d_syscall='$d_syscall'
14710d_sysconf='$d_sysconf'
14711d_sysernlst='$d_sysernlst'
14712d_syserrlst='$d_syserrlst'
14713d_system='$d_system'
14714d_tcgetpgrp='$d_tcgetpgrp'
14715d_tcsetpgrp='$d_tcsetpgrp'
14716d_telldir='$d_telldir'
14717d_telldirproto='$d_telldirproto'
14718d_time='$d_time'
14719d_times='$d_times'
14720d_truncate='$d_truncate'
14721d_tzname='$d_tzname'
14722d_umask='$d_umask'
14723d_uname='$d_uname'
14724d_union_semun='$d_union_semun'
14725d_ustat='$d_ustat'
14726d_vendorbin='$d_vendorbin'
14727d_vendorlib='$d_vendorlib'
14728d_vfork='$d_vfork'
14729d_void_closedir='$d_void_closedir'
14730d_voidsig='$d_voidsig'
14731d_voidtty='$d_voidtty'
14732d_volatile='$d_volatile'
14733d_vprintf='$d_vprintf'
14734d_wait4='$d_wait4'
14735d_waitpid='$d_waitpid'
14736d_wcstombs='$d_wcstombs'
14737d_wctomb='$d_wctomb'
14738d_xenix='$d_xenix'
14739date='$date'
14740db_hashtype='$db_hashtype'
14741db_prefixtype='$db_prefixtype'
14742defvoidused='$defvoidused'
14743direntrytype='$direntrytype'
14744dlext='$dlext'
14745dlsrc='$dlsrc'
14746doublesize='$doublesize'
14747drand01='$drand01'
14748dynamic_ext='$dynamic_ext'
14749eagain='$eagain'
14750ebcdic='$ebcdic'
14751echo='$echo'
14752egrep='$egrep'
14753emacs='$emacs'
14754eunicefix='$eunicefix'
14755exe_ext='$exe_ext'
14756expr='$expr'
14757extensions='$extensions'
14758fflushNULL='$fflushNULL'
14759fflushall='$fflushall'
14760find='$find'
14761firstmakefile='$firstmakefile'
14762flex='$flex'
14763fpossize='$fpossize'
14764fpostype='$fpostype'
14765freetype='$freetype'
14766full_ar='$full_ar'
14767full_csh='$full_csh'
14768full_sed='$full_sed'
14769gccversion='$gccversion'
14770gidformat='$gidformat'
14771gidsign='$gidsign'
14772gidsize='$gidsize'
14773gidtype='$gidtype'
14774glibpth='$glibpth'
14775grep='$grep'
14776groupcat='$groupcat'
14777groupstype='$groupstype'
14778gzip='$gzip'
14779h_fcntl='$h_fcntl'
14780h_sysfile='$h_sysfile'
14781hint='$hint'
14782hostcat='$hostcat'
14783huge='$huge'
14784i16size='$i16size'
14785i16type='$i16type'
14786i32size='$i32size'
14787i32type='$i32type'
14788i64size='$i64size'
14789i64type='$i64type'
14790i8size='$i8size'
14791i8type='$i8type'
14792i_arpainet='$i_arpainet'
14793i_bsdioctl='$i_bsdioctl'
14794i_db='$i_db'
14795i_dbm='$i_dbm'
14796i_dirent='$i_dirent'
14797i_dld='$i_dld'
14798i_dlfcn='$i_dlfcn'
14799i_fcntl='$i_fcntl'
14800i_float='$i_float'
14801i_gdbm='$i_gdbm'
14802i_grp='$i_grp'
14803i_inttypes='$i_inttypes'
14804i_limits='$i_limits'
14805i_locale='$i_locale'
14806i_machcthr='$i_machcthr'
14807i_malloc='$i_malloc'
14808i_math='$i_math'
14809i_memory='$i_memory'
14810i_mntent='$i_mntent'
14811i_ndbm='$i_ndbm'
14812i_netdb='$i_netdb'
14813i_neterrno='$i_neterrno'
14814i_netinettcp='$i_netinettcp'
14815i_niin='$i_niin'
14816i_poll='$i_poll'
14817i_pthread='$i_pthread'
14818i_pwd='$i_pwd'
14819i_rpcsvcdbm='$i_rpcsvcdbm'
14820i_sfio='$i_sfio'
14821i_sgtty='$i_sgtty'
14822i_shadow='$i_shadow'
14823i_socks='$i_socks'
14824i_stdarg='$i_stdarg'
14825i_stddef='$i_stddef'
14826i_stdlib='$i_stdlib'
14827i_string='$i_string'
14828i_sysaccess='$i_sysaccess'
14829i_sysdir='$i_sysdir'
14830i_sysfile='$i_sysfile'
14831i_sysfilio='$i_sysfilio'
14832i_sysin='$i_sysin'
14833i_sysioctl='$i_sysioctl'
14834i_sysmount='$i_sysmount'
14835i_sysndir='$i_sysndir'
14836i_sysparam='$i_sysparam'
14837i_sysresrc='$i_sysresrc'
14838i_syssecrt='$i_syssecrt'
14839i_sysselct='$i_sysselct'
14840i_syssockio='$i_syssockio'
14841i_sysstat='$i_sysstat'
14842i_sysstatfs='$i_sysstatfs'
14843i_sysstatvfs='$i_sysstatvfs'
14844i_systime='$i_systime'
14845i_systimek='$i_systimek'
14846i_systimes='$i_systimes'
14847i_systypes='$i_systypes'
14848i_sysuio='$i_sysuio'
14849i_sysun='$i_sysun'
14850i_sysvfs='$i_sysvfs'
14851i_syswait='$i_syswait'
14852i_termio='$i_termio'
14853i_termios='$i_termios'
14854i_time='$i_time'
14855i_unistd='$i_unistd'
14856i_ustat='$i_ustat'
14857i_utime='$i_utime'
14858i_values='$i_values'
14859i_varargs='$i_varargs'
14860i_varhdr='$i_varhdr'
14861i_vfork='$i_vfork'
14862ignore_versioned_solibs='$ignore_versioned_solibs'
14863inc_version_list='$inc_version_list'
14864inc_version_list_init='$inc_version_list_init'
14865incpath='$incpath'
14866inews='$inews'
14867installarchlib='$installarchlib'
14868installbin='$installbin'
14869installman1dir='$installman1dir'
14870installman3dir='$installman3dir'
14871installprefix='$installprefix'
14872installprefixexp='$installprefixexp'
14873installprivlib='$installprivlib'
14874installscript='$installscript'
14875installsitearch='$installsitearch'
14876installsitebin='$installsitebin'
14877installsitelib='$installsitelib'
14878installstyle='$installstyle'
14879installusrbinperl='$installusrbinperl'
14880installvendorbin='$installvendorbin'
14881installvendorlib='$installvendorlib'
14882intsize='$intsize'
14883ivdformat='$ivdformat'
14884ivsize='$ivsize'
14885ivtype='$ivtype'
14886known_extensions='$known_extensions'
14887ksh='$ksh'
14888large='$large'
14889ld='$ld'
14890lddlflags='$lddlflags'
14891ldflags='$ldflags'
14892ldlibpthname='$ldlibpthname'
14893less='$less'
14894lib_ext='$lib_ext'
14895libc='$libc'
14896libperl='$libperl'
14897libpth='$libpth'
14898libs='$libs'
14899libswanted='$libswanted'
14900line='$line'
14901lint='$lint'
14902lkflags='$lkflags'
14903ln='$ln'
14904lns='$lns'
14905locincpth='$locincpth'
14906loclibpth='$loclibpth'
14907longdblsize='$longdblsize'
14908longlongsize='$longlongsize'
14909longsize='$longsize'
14910lp='$lp'
14911lpr='$lpr'
14912ls='$ls'
14913lseeksize='$lseeksize'
14914lseektype='$lseektype'
14915mail='$mail'
14916mailx='$mailx'
14917make='$make'
14918make_set_make='$make_set_make'
14919mallocobj='$mallocobj'
14920mallocsrc='$mallocsrc'
14921malloctype='$malloctype'
14922man1dir='$man1dir'
14923man1direxp='$man1direxp'
14924man1ext='$man1ext'
14925man3dir='$man3dir'
14926man3direxp='$man3direxp'
14927man3ext='$man3ext'
14928medium='$medium'
14929mips_type='$mips_type'
14930mkdir='$mkdir'
14931models='$models'
14932modetype='$modetype'
14933more='$more'
14934multiarch='$multiarch'
14935mv='$mv'
14936myarchname='$myarchname'
14937mydomain='$mydomain'
14938myhostname='$myhostname'
14939myuname='$myuname'
14940n='$n'
14941netdb_hlen_type='$netdb_hlen_type'
14942netdb_host_type='$netdb_host_type'
14943netdb_name_type='$netdb_name_type'
14944netdb_net_type='$netdb_net_type'
14945nm='$nm'
14946nm_opt='$nm_opt'
14947nm_so_opt='$nm_so_opt'
14948nonxs_ext='$nonxs_ext'
14949nroff='$nroff'
14950nvsize='$nvsize'
14951nvtype='$nvtype'
14952o_nonblock='$o_nonblock'
14953obj_ext='$obj_ext'
14954old_pthread_create_joinable='$old_pthread_create_joinable'
14955optimize='$optimize'
14956orderlib='$orderlib'
14957osname='$osname'
14958osvers='$osvers'
14959package='$package'
14960pager='$pager'
14961passcat='$passcat'
14962patchlevel='$patchlevel'
14963path_sep='$path_sep'
14964perl='$perl'
14965perladmin='$perladmin'
14966perlpath='$perlpath'
14967pg='$pg'
14968phostname='$phostname'
14969pidtype='$pidtype'
14970plibpth='$plibpth'
14971pmake='$pmake'
14972pr='$pr'
14973prefix='$prefix'
14974prefixexp='$prefixexp'
14975privlib='$privlib'
14976privlibexp='$privlibexp'
14977prototype='$prototype'
14978ptrsize='$ptrsize'
14979quadkind='$quadkind'
14980quadtype='$quadtype'
14981randbits='$randbits'
14982randfunc='$randfunc'
14983randseedtype='$randseedtype'
14984ranlib='$ranlib'
14985rd_nodata='$rd_nodata'
14986rm='$rm'
14987rmail='$rmail'
14988runnm='$runnm'
14989sPRIEldbl='$sPRIEldbl'
14990sPRIFldbl='$sPRIFldbl'
14991sPRIGldbl='$sPRIGldbl'
14992sPRIX64='$sPRIX64'
14993sPRId64='$sPRId64'
14994sPRIeldbl='$sPRIeldbl'
14995sPRIfldbl='$sPRIfldbl'
14996sPRIgldbl='$sPRIgldbl'
14997sPRIi64='$sPRIi64'
14998sPRIo64='$sPRIo64'
14999sPRIu64='$sPRIu64'
15000sPRIx64='$sPRIx64'
15001sched_yield='$sched_yield'
15002scriptdir='$scriptdir'
15003scriptdirexp='$scriptdirexp'
15004sed='$sed'
15005seedfunc='$seedfunc'
15006selectminbits='$selectminbits'
15007selecttype='$selecttype'
15008sendmail='$sendmail'
15009sh='$sh'
15010shar='$shar'
15011sharpbang='$sharpbang'
15012shmattype='$shmattype'
15013shortsize='$shortsize'
15014shrpenv='$shrpenv'
15015shsharp='$shsharp'
15016sig_count='$sig_count'
15017sig_name='$sig_name'
15018sig_name_init='$sig_name_init'
15019sig_num='$sig_num'
15020sig_num_init='$sig_num_init'
15021signal_t='$signal_t'
15022sitearch='$sitearch'
15023sitearchexp='$sitearchexp'
15024sitebin='$sitebin'
15025sitebinexp='$sitebinexp'
15026sitelib='$sitelib'
15027sitelibexp='$sitelibexp'
15028siteprefix='$siteprefix'
15029siteprefixexp='$siteprefixexp'
15030sizetype='$sizetype'
15031sleep='$sleep'
15032smail='$smail'
15033small='$small'
15034so='$so'
15035sockethdr='$sockethdr'
15036socketlib='$socketlib'
15037sort='$sort'
15038spackage='$spackage'
15039spitshell='$spitshell'
15040split='$split'
15041src='$src'
15042ssizetype='$ssizetype'
15043startperl='$startperl'
15044startsh='$startsh'
15045static_ext='$static_ext'
15046stdchar='$stdchar'
15047stdio_base='$stdio_base'
15048stdio_bufsiz='$stdio_bufsiz'
15049stdio_cnt='$stdio_cnt'
15050stdio_filbuf='$stdio_filbuf'
15051stdio_ptr='$stdio_ptr'
15052stdio_stream_array='$stdio_stream_array'
15053strings='$strings'
15054submit='$submit'
15055subversion='$subversion'
15056sysman='$sysman'
15057tail='$tail'
15058tar='$tar'
15059tbl='$tbl'
15060tee='$tee'
15061test='$test'
15062timeincl='$timeincl'
15063timetype='$timetype'
15064touch='$touch'
15065tr='$tr'
15066trnl='$trnl'
15067troff='$troff'
15068u16size='$u16size'
15069u16type='$u16type'
15070u32size='$u32size'
15071u32type='$u32type'
15072u64size='$u64size'
15073u64type='$u64type'
15074u8size='$u8size'
15075u8type='$u8type'
15076uidformat='$uidformat'
15077uidsign='$uidsign'
15078uidsize='$uidsize'
15079uidtype='$uidtype'
15080uname='$uname'
15081uniq='$uniq'
15082uquadtype='$uquadtype'
15083use5005threads='$use5005threads'
15084use64bits='$use64bits'
15085usedl='$usedl'
15086useithreads='$useithreads'
15087uselargefiles='$uselargefiles'
15088uselongdouble='$uselongdouble'
15089uselonglong='$uselonglong'
15090usemorebits='$usemorebits'
15091usemultiplicity='$usemultiplicity'
15092usemymalloc='$usemymalloc'
15093usenm='$usenm'
15094useopcode='$useopcode'
15095useperlio='$useperlio'
15096useposix='$useposix'
15097usesfio='$usesfio'
15098useshrplib='$useshrplib'
15099usesocks='$usesocks'
15100usethreads='$usethreads'
15101usevendorprefix='$usevendorprefix'
15102usevfork='$usevfork'
15103usrinc='$usrinc'
15104uuname='$uuname'
15105uvoformat='$uvoformat'
15106uvsize='$uvsize'
15107uvtype='$uvtype'
15108uvuformat='$uvuformat'
15109uvxformat='$uvxformat'
15110vendorbin='$vendorbin'
15111vendorbinexp='$vendorbinexp'
15112vendorlib='$vendorlib'
15113vendorlibexp='$vendorlibexp'
15114vendorprefix='$vendorprefix'
15115vendorprefixexp='$vendorprefixexp'
15116version='$version'
15117vi='$vi'
15118voidflags='$voidflags'
15119xlibpth='$xlibpth'
15120zcat='$zcat'
15121zip='$zip'
15122EOT
15123
15124: Add in command line options if available
15125$test -f UU/cmdline.opt && $cat UU/cmdline.opt >> config.sh
15126
15127: add special variables
15128$test -f $src/patchlevel.h && \
15129awk '/^#define[ ]+PERL_/ {printf "%s=%s\n",$2,$3}' $src/patchlevel.h >>config.sh
15130echo "CONFIGDOTSH=true" >>config.sh
15131
15132: propagate old symbols
15133if $test -f UU/config.sh; then
15134 <UU/config.sh sort | uniq >UU/oldconfig.sh
15135 sed -n 's/^\([a-zA-Z_0-9]*\)=.*/\1/p' config.sh config.sh UU/oldconfig.sh |\
15136 sort | uniq -u >UU/oldsyms
15137 set X `cat UU/oldsyms`
15138 shift
15139 case $# in
15140 0) ;;
15141 *)
15142 cat <<EOM
15143Hmm...You had some extra variables I don't know about...I'll try to keep 'em...
15144EOM
15145 echo "# Variables propagated from previous config.sh file." >>config.sh
15146 for sym in `cat UU/oldsyms`; do
15147 echo " Propagating $hint variable "'$'"$sym..."
15148 eval 'tmp="$'"${sym}"'"'
15149 echo "$tmp" | \
15150 sed -e "s/'/'\"'\"'/g" -e "s/^/$sym='/" -e "s/$/'/" >>config.sh
15151 done
15152 ;;
15153 esac
15154fi
15155
15156: Finish up by extracting the .SH files
15157case "$alldone" in
15158exit)
15159 $rm -rf UU
15160 echo "Done."
15161 exit 0
15162 ;;
15163cont)
15164 ;;
15165'')
15166 dflt=''
15167 nostick=true
15168 $cat <<EOM
15169
15170If you'd like to make any changes to the config.sh file before I begin
15171to configure things, do it as a shell escape now (e.g. !vi config.sh).
15172
15173EOM
15174 rp="Press return or use a shell escape to edit config.sh:"
15175 . UU/myread
15176 nostick=''
15177 case "$ans" in
15178 '') ;;
15179 *) : in case they cannot read
15180 sh 1>&4 -c "$ans";;
15181 esac
15182 ;;
15183esac
15184
15185: if this fails, just run all the .SH files by hand
15186. ./config.sh
15187
15188echo " "
15189exec 1>&4
15190. ./UU/extract
15191
15192if $contains '^depend:' [Mm]akefile >/dev/null 2>&1; then
15193 dflt=y
15194 case "$silent" in
15195 true) ;;
15196 *)
15197 $cat <<EOM
15198
15199Now you need to generate make dependencies by running "$make depend".
15200You might prefer to run it in background: "$make depend > makedepend.out &"
15201It can take a while, so you might not want to run it right now.
15202
15203EOM
15204 ;;
15205 esac
15206 rp="Run $make depend now?"
15207 . UU/myread
15208 case "$ans" in
15209 y*)
15210 $make depend && echo "Now you must run a $make."
15211 ;;
15212 *)
15213 echo "You must run '$make depend' then '$make'."
15214 ;;
15215 esac
15216elif test -f [Mm]akefile; then
15217 echo " "
15218 echo "Now you must run a $make."
15219else
15220 echo "Done."
15221fi
15222
15223if $test -f Policy.sh; then
15224 $cat <<EOM
15225
15226If you compile $package on a different machine or from a different object
15227directory, copy the Policy.sh file from this object directory to the
15228new one before you run Configure -- this will help you with most of
15229the policy defaults.
15230
15231EOM
15232fi
15233if $test -f config.msg; then
15234 echo "Hmm. I also noted the following information while running:"
15235 echo " "
15236 $cat config.msg >&4
15237 $rm -f config.msg
15238fi
15239$rm -f kit*isdone ark*isdone
15240$rm -rf UU
15241
15242: End of Configure
15243