# If these # comments don't work, trim them. Don't worry about any other
# shell scripts, Configure will trim # comments from them for you.
# (If you are trying to port this package to a machine without sh, I would
# suggest you cut out the prototypical config.h from the end of Configure
# and edit it to reflect your system. Some packages may include samples
# of config.h for certain machines, so you might look for one of those.)
# $RCSfile: Configure,v $$Revision: 4.0.1.9 $$Date: 92/06/23 12:28:33 $
# Yes, you may rip this off to use in other distribution packages.
# (Note: this Configure script was generated automatically. Rather than
# working with this copy of Configure, you may wish to get metaconfig.)
Your csh still thinks true is false. Write to your vendor today and tell
them that next year Configure ought to "rm /bin/csh" unless they fix their
[End of diatribe. We now return you to your regularly scheduled
OOPS! You naughty creature! You didn't run Configure with sh!
I will attempt to remedy the situation by running sh for you...
true ||
cat /tmp
/c1$$
/tmp
/c2$$
export PATH ||
cat /tmp
/c2$$
export PATH ||
exec sh
$0
rm -f /tmp
/c1$$
/tmp
/c2$$
PATH
=".:$PATH:/bin:/usr/bin:/usr/local/bin:/usr/ucb:/usr/local:/usr/lbin:/etc:/usr/new:/usr/new/bin:/usr/nbin"
echo "Say 'sh Configure', not 'sh <Configure'"
(alias) >/dev
/null
2>&1 && \
echo "(I see you are using the Korn shell. Some ksh's blow up on Configure," && \
echo "especially on exotic machines. If yours does, try the Bourne shell instead.)"
-d) shift; fastread
='yes';;
: get the name of the package
echo "Beginning of configuration questions for $package kit."
: Eunice requires
" " instead of
"", can you believe it
: change the next line
if compiling
for Xenix
/286 on Xenix
/386
xlibpth
='/usr/lib/386 /lib/386'
: the hints files may add
more components to libpth
test -d /usr
/cs
/lib
&& libpth
="$libpth /usr/cs/lib"
test -d /usr
/ccs
/lib
&& libpth
="$libpth /usr/ccs/lib"
test -d /usr
/lib
&& libpth
="$libpth /usr/lib"
test -d /usr
/ucblib
&& libpth
="$libpth /usr/ucblib"
test -d /usr
/local
/lib
&& libpth
="$libpth /usr/local/lib"
test -d /usr
/lib
/large
&& libpth
="$libpth /usr/lib/large"
test -d /lib
&& libpth
="$libpth /lib"
libpth
="$libpth $xlibpth"
test -d /lib
/large
&& libpth
="$libpth /lib/large"
test -d /usr
/lib
/small
&& libpth
="$libpth /usr/lib/small"
test -d /lib
/small
&& libpth
="$libpth /lib/small"
test -d /usr
/lib
/cmplrs
/cc
&& libpth
="$libpth /usr/lib/cmplrs/cc"
smallmach
='pdp11 i8086 z8000 i80286 iAPX286'
trap 'echo " "; exit 1' 1 2 3
: We must
find out about Eunice early
if test -f /etc
/unixtovms
; then
if test -f /etc
/unixtovms.exe
; then
eunicefix
=/etc
/unixtovms.exe
attrlist
="DGUX M_I186 M_I286 M_I386 M_I8086 M_XENIX UTS __DGUX__"
attrlist
="$attrlist __STDC__ __m88k__ ansi bsd4_2 gcos gimpel"
attrlist
="$attrlist hp9000s300 hp9000s500 hp9000s800 hpux"
attrlist
="$attrlist i186 i386 i8086 iAPX286 ibm interdata"
attrlist
="$attrlist m68k m88k mc300 mc500 mc68000 mc68k mc700 mert"
attrlist
="$attrlist ns16000 ns32000 nsc32000 os pdp11 posix pyr sinix"
attrlist
="$attrlist sparc sun tower tower32 tower32_600 tower32_800 tss"
attrlist
="$attrlist u3b2 u3b20 u3b200 u3b5 ultrix unix vax venix xenix"
attrlist
="$attrlist z8000"
eoPATH
="/usr/ucb /bin /usr/bin /usr/local /usr/local/bin /usr/lbin /usr/plx /usr/5bin /vol/local/bin /etc /usr/lib /lib /usr/local/lib /sys5.3/bin /sys5.3/usr/bin /bsd4.3/bin /bsd4.3/usr/bin /bsd4.3/usr/ucb /bsd43/usr/bin /usr/ccs/lib /opt/SUNWste/bin /usr/opt/SUNWste/bin"
libswanted
="c_s net_s net socket nsl_s nsl nm ndir dir ndbm dbm PW malloc sun m bsd BSD x posix ucb"
inclwanted
='/usr/include /usr/netinclude /usr/include/sun /usr/include/bsd /usr/include/lan /usr/ucbinclude'
: Now
test for existence of everything
in MANIFEST
echo "First let's make sure your kit is complete. Checking..."
awk '$1 !~ /PACKINGLIST/ {print $1}' ..
/MANIFEST |
split -100
(cd ..
; ls `cat UU/$filelist` >/dev
/null
2>>UU
/missing
)
echo "WARNING: the following files are missing:"
echo "INTERRUPT NOW, OR HIT RETURN TO PROCEED AT YOUR OWN RISK"
: some greps
do not
return status
, grrr.
echo "grimblepritz" >contains.txt
if grep blurfldyick contains.txt
>/dev
/null
2>&1 ; then
elif grep grimblepritz contains.txt
>/dev
/null
2>&1 ; then
: the following should work
in any shell
echo "AGH! Grep doesn't return a status. Attempting remedial action."
grep "$1" "$2" >.greptmp && cat .greptmp && test -s .greptmp
: see
if sh knows
# comments
echo "Checking your sh to see if it knows about # comments..."
if sh
-c '#' >/dev
/null
2>&1 ; then
echo "Your sh handles # comments correctly."
echo "Okay, let's see if #! works on this system..."
if test -f /bsd43
/bin
/echo; then
echo "#!/bsd43/bin/echo hi" > spit.sh
echo "#!/bin/echo hi" > spit.sh
if $contains hi today
>/dev
/null
2>&1; then
echo "#! /bin/echo hi" > spit.sh
echo "Your sh doesn't grok # comments--I will strip them later on."
echo "exec grep -v '^#'" >spitshell
spitshell
=`pwd`/spitshell
echo "I presume that if # doesn't work, #! won't work either!"
: figure out how to guarantee sh startup
echo "Checking out how to guarantee sh startup..."
startsh
=$sharpbang'/bin/sh'
echo "Let's see if '$startsh' works..."
echo "Nope. You may have to fix up the shell scripts to make sure sh runs them."
: first determine how to suppress newline on
echo command
echo "Checking echo to see how to suppress newlines..."
(echo "hi there\c" ; echo " ") >echotmp
if $contains c echotmp
>/dev
/null
2>&1 ; then
echo $n "Type carriage return to continue. Your cursor should be here-->$c"
: now
set up to
do reads with possible shell escape and default assignment
while expr "X\$ans" : "X!" >/dev/null; do
set \`expr "X\$ans" : "X!\(.*\)\$"\`
This installation shell script will examine your system and ask you questions
to determine how the $package package should be installed. If you get stuck
on a question, you may use a ! shell escape to start a subshell or execute
a command. Many of the questions will have default answers in square
brackets--typing carriage return will give you the default.
On some of the questions which ask for file or directory names you are
allowed to use the ~name construct to specify the login directory belonging
to "name", even if you don't have a shell which knows about that. Questions
where this is allowed will be marked "(~name ok)".
rp
="[Type carriage return to continue]"
Much effort has been expended to ensure that this shell script will run on any
Unix system. If despite that it blows up on you, your best bet is to edit
Configure and run it again. Also, let me (lwall@netlabs.com)
know how I blew it. If you can't run Configure for some reason, you'll have
to generate a config.sh file by hand.
This installation script affects things in two ways: 1) it may do direct
variable substitutions on some of the files included in this kit, and
2) it builds a config.h file for inclusion in C programs. You may edit
any of these files as the need arises after running this script.
If you make a mistake on a question, there is no easy way to back up to it
currently. The easiest thing to do is to edit config.sh and rerun all the
SH files. Configure will offer to let you do this before it runs the SH files.
rp
="[Type carriage return to continue]"
: find out where common programs are
echo "Locating common programs..."
if test -d \$dir/\$thing; then
if test -f \$dir/\$thing; then
elif test -f \$dir/\$thing.exe; then
pth
=`echo :$boPATH:$PATH:$eoPATH: | sed -e 's/:/ /g'`
xxx
=`./loc $file $file $pth`
echo "I don't know where $file is. I hope it's in everyone's PATH."
echo "Don't worry if any of the following aren't found..."
xxx
=`./loc $file $file $pth`
echo "I don't see $file out there, $ans."
echo "Substituting grep for egrep."
echo "Hopefully test is built into your sh."
if sh
-c "PATH= test true" >/dev
/null
2>&1; then
echo "Using the test built into your sh."
echo "Hopefully echo is built into your sh."
echo "Checking compatibility between /bin/echo and builtin echo (if any)..."
$echo $n "hi there$c" >Loc1.txt
echo $n "hi there$c" >Loc2.txt
if cmp Loc1.txt Loc2.txt
>/dev
/null
2>&1; then
echo "They are compatible. In fact, they may be identical."
'-n') n
='' c
='\c' ans
='\c' ;;
*) n
='-n' c
='' ans
='-n' ;;
They are not compatible! You are probably running ksh on a non-USG system.
I'll have to use /bin/echo instead of the builtin, since Bourne shell doesn't
have echo built in and we may have to run some Bourne shell scripts. That
means I'll have to use $ans to suppress newlines now. Life is ridiculous.
rp
="Your cursor should be here-->"
: set up shell
script to
do ~ expansion
echo \$1 | $sed "s|~|\${HOME-\$LOGDIR}|"
if $test -f /bin/csh; then
/bin/csh -f -c "glob \$1"
name=\`$expr x\$1 : '..\([^/]*\)'\`
dir=\`$sed -n -e "/^\${name}:/{s/^[^:]*:[^:]*:[^:]*:[^:]*:[^:]*:\([^:]*\).*"'\$'"/\1/" -e p -e q -e '}' </etc/passwd\`
if $test ! -d "\$dir"; then
echo "\$me: can't locate home directory for: \$name" >&2
echo \$dir/\`$expr x\$1 : '..[^/]*/\(.*\)'\`
: get old answers
, if there is a config
file out there
if test -f ..
/config.sh
; then
eval "`grep lastuname ../config.sh`"
if test "X$tmp" = "X$lastuname"; then
rp
="I see a config.sh file. Did Configure make it on THIS system? [$dflt]"
n
*) echo "OK, I'll ignore it."; mv ..
/config.sh ..
/config.sh.old
;;
*) echo "Fetching default answers from your old config.sh file..."
lastuname
=`(uname -a) 2>&1`
if test -d ..
/hints
&& test ! -f ..
/config.sh
; then
echo "First time through, eh? I have some defaults handy for the following systems:"
(cd ..
/hints
; ls -C *.sh |
sed 's/\.sh/ /g')
: Half the following guesses are probably wrong...
test -f /irix
&& dflt
="$dflt sgi"
test -f /xenix
&& dflt
="$dflt sco_xenix"
test -f /dynix
&& dflt
="$dflt dynix"
test -f /dnix
&& dflt
="$dflt dnix"
test -f /bin
/mips
&& /bin
/mips
&& dflt
="$dflt mips"
test -d /NextApps
&& test -f /usr
/adm
/software_version
&& dflt
="$dflt next"
if test -f /bin
/uname ||
test -f /usr
/bin
/uname
; then
set `uname -a | tr '[A-Z]' '[a-z]'`
test -f "../hints/$5.sh" && dflt
="$dflt $5"
mips
*) dflt
="$dflt mips";;
[23]100) dflt
="$dflt mips";;
next
*) dflt
="$dflt next" ;;
6000) dflt
="$dflt mc6000";;
test -f "../hints/$1.sh" && dflt
="$dflt $1"
aix
) dflt
="$dflt aix_rs" ;;
3.4) dflt
="$dflt sunos_3_4" ;;
3.5) dflt
="$dflt sunos_3_5" ;;
4.0.1) dflt
="$dflt sunos_4_0_1" ;;
4.0.2) dflt
="$dflt sunos_4_0_2" ;;
extra_hints
="hp"`echo $5 | sed -e s#/#_#g -e s/..$/00/`
if test -f ..
/hints
/$extra_hints.sh
; then
dflt
="$dflt $extra_hints"
irix
) dflt
="$dflt sgi" ;;
1*) dflt
="$dflt ultrix_1" ;;
3*) dflt
="$dflt ultrix_3" ;;
4*) dflt
="$dflt ultrix_4" ;;
$2) if test -f /etc
/systemid
; then
set `echo $3 | sed 's/\./ /'` $4
if test -f ..
/hints
/sco_
$1_$2_$3.sh
; then
dflt
="$dflt sco_$1_$2_$3"
elif test -f ..
/hints
/sco_
$1_$2.sh
; then
elif test -f ..
/hints
/sco_
$1.sh
; then
set X
`echo $dflt | tr ' ' '\012' | sort | uniq`
echo '(You may give one or more space-separated answers, or "none" if appropriate.'
echo 'If your OS version has no hints, do not give a wrong version--say "none".)'
rp
="Which of these apply, if any? [$dflt]"
if test -f ..
/hints
/$file.sh
; then
cat ..
/hints
/$file.sh
>>..
/config.sh
echo "*** WHOA THERE!!! ***"
echo " The $hint value for \$$2 on this machine was \"$was\"!"
rp=" Keep the $hint value? [y]"
setvar
='td=$define; tu=$undef; set X $1; eval "was=\$$2";
defineundef) . whoa; eval "$2=\$td";;
undefdefine) . whoa; eval "$2=\$tu";;
: determine where manual pages go
$package has manual pages available in source form.
echo "However, you don't have nroff, so they're probably useless to you."
echo "If you don't want the manual sources installed, answer 'none'."
dflt
=`./loc . none /usr/man/local/man1 /usr/man/man.L /usr/man/manl /usr/man/mann /usr/man/u_man/man1 /usr/man/man1 /usr/local/man/man1`
rp
="Where do the manual pages (source) go (~name ok)? [$dflt]"
if $test -d "$mansrc"; then
if $test "$fastread" = yes; then
rp
="Directory $mansrc doesn't exist. Use that name anyway? [$dflt]"
: Sigh. Well
, at least the box is fast...
'') dflt
='/usr/include';;
if $test -f /bin
/mips
&& /bin
/mips
; then
echo "Looks like a MIPS system..."
$cat >usrinclude.c
<<'EOCP'
if cc
-E usrinclude.c
> usrinclude.out
&& $contains / usrinclude.out
>/dev
/null
2>&1 ; then
echo "and you're compiling with the BSD43 compiler and libraries."
dflt
='/bsd43/usr/include'
echo "and you're compiling with the SysV compiler and libraries."
echo "Doesn't look like a MIPS system."
rp
="Where are the include files you want to use? [$dflt]"
if $test "$fastread" = yes; then
rp
="Directory $ans doesn't exist. Use that name anyway? [$dflt]"
: make some quick guesses about what we are up against
cat $usrinclude/signal.h
$usrinclude/sys
/signal.h
>guess.txt
2>/dev
/null
if test "$usrinclude" = "/bsd43/usr/include" ; then
echo "Looks kind of like a SysV MIPS running BSD, but we'll see..."
elif test -f /osf_boot ||
$contains "OSF/1" /usr
/include
/ctype.h
; then
echo "Looks like an OSF/1 system, but we'll see..."
elif test `echo abc | tr a-z A-Z` = Abc
; then
echo "Looks kind of like a USG system, but we'll see..."
elif $contains SIGTSTP guess.txt
>/dev
/null
2>&1 ; then
echo "Looks kind of like a BSD system, but we'll see..."
echo "Looks kind of like a version 7 system, but we'll see..."
There is, however, a strange, musty smell in the air that reminds me of
something...hmm...yes...I've got it...there's a VMS nearby, or I'm a Blit.
echo "Congratulations. You aren't running Eunice."
echo "Actually, this looks more like a XENIX system..."
echo "Actually, this looks more like a VENIX system..."
echo "Nor is it Venix..."
chmod +x bsd usg v7 osf1 eunice venix
$eunicefix bsd usg v7 eunice venix
: see what memory models we can support
: We may not use Cppsym or we get a circular dependency through cc.
: But this should work regardless of
which cc we eventually use.
cc
-o pdp11 pdp11.c
>/dev
/null
2>&1
if pdp11
2>/dev
/null
; then
ans
=`./loc . X /lib/small /lib/large /usr/lib/small /usr/lib/large /lib/medium /usr/lib/medium /lib/huge`
*) if $test -d /lib
/small ||
$test -d /usr
/lib
/small
; then
if $test -d /lib
/medium ||
$test -d /usr
/lib
/medium
; then
if $test -d /lib
/large ||
$test -d /usr
/lib
/large
; then
if $test -d /lib
/huge ||
$test -d /usr
/lib
/huge
; then
Some systems have different model sizes. On most systems they are called
small, medium, large, and huge. On the PDP11 they are called unsplit and
split. If your system doesn't support different memory models, say "none".
If you wish to force everything to one memory model, say "none" here and
put the appropriate flags later when it asks you for other cc and ld flags.
Venix systems may wish to put "none" and let the compiler figure things out.
(In the following question multiple model names should be space separated.)
rp
="Which models are supported? [$dflt]"
if $contains '\-i' $mansrc/man
1/ld
.1 >/dev
/null
2>&1 || \
$contains '\-i' $mansrc/man
1/cc
.1 >/dev
/null
2>&1; then
rp
="What flag indicates separate I and D space? [$dflt]"
*large
*|
*small
*|
*medium
*|
*huge
*)
rp
="What flag indicates large model? [$dflt]"
rp
="What flag indicates huge model? [$dflt]"
rp
="What flag indicates medium model? [$dflt]"
rp
="What flag indicates small model? [$dflt]"
echo "Unrecognized memory models--you may have to edit Makefile.SH"
: see
if we need a special compiler
if $contains '\-M' $mansrc/cc
.1 >/dev
/null
2>&1 ; then
On some systems the default C compiler will not resolve multiple global
references that happen to have the same name. On some such systems the
"Mcc" command may be used to force these to be resolved. On other systems
a "cc -M" command is required. (Note that the -M flag on other systems
indicates a memory model to use!) If you have the Gnu C compiler, you
might wish to use that instead. What command will force resolution on
$echo $n "this system? [$dflt] $c"
rp
="Command to resolve multiple refs? [$dflt]"
rp
="Use which C compiler? [$dflt]"
*gcc
*) cpp
=`./loc gcc-cpp $cpp $pth`
*-fpcc-struct-return*) dflt
=n
;;
rp
="Are your system (especially dbm) libraries compiled with gcc? [$dflt]"
n
*) nativegcc
="$undef"; gccflags
='-fpcc-struct-return';;
*) nativegcc
="$define"; gccflags
='';;
*) gccflags
="$gccflags -traditional -Dvolatile=__volatile__" ;;
: determine optimize
, if desired
, or use
for debug flag also
Some C compilers have problems with their optimizers, by default, $package
compiles with the -O flag to use the optimizer. Alternately, you might
want to use the symbolic debugger, which uses the -g flag (on traditional
Unix systems). Either flag can be specified here. To use neither flag,
rp
="What optimizer/debugger flag should be used? [$dflt]"
*gcc
*) dflt
="$gccflags";;
*-fpcc-struct-return*) dflt
="$ccflags";;
*gcc
*) dflt
="$ccflags $gccflags";;
for thisincl
in $inclwanted; do
if test -d $thisincl; then
if test "x$thisincl" != "x$usrinclude"; then
*) dflt
="$dflt -I$thisincl";;
*) dflt
="$dflt -DDEBUGGING";;
if $contains 'LANGUAGE_C' $usrinclude/signal.h
>/dev
/null
2>&1; then
*) dflt
="$dflt -DLANGUAGE_C";;
dflt
="$dflt -D__LANGUAGE_C__"
dflt
="$dflt -DLANGUAGE_C"
if $contains '_NO_PROTO' $usrinclude/signal.h
>/dev
/null
2>&1; then
*) osf1 || dflt
="$dflt -D_NO_PROTO";;
Your C compiler may want other flags. For this question you should
include -I/whatever and -DWHATEVER flags and any other flags used by
the C compiler, but you should NOT include libraries or ld flags like
-lwhatever. For instance, this would be a good place to specify
-DDEBUGGING. To use no flags, specify the word "none".
rp
="Any additional cc flags? [$dflt]"
: the following weeds options from ccflags that are of no interest to cpp
*gcc
*) cppflags
="$cppflags -D__GNUC__";;
-D*|
-U*|
-I*|
-traditional|
-ansi|
-nostdinc) cppflags
="$cppflags $flag";;
*-*) echo "(C preprocessor flags: $cppflags)";;
rp
="Any additional ld flags (NOT including libraries)? [$dflt]"
echo "Checking for optional libraries..."
for thislib
in $libswanted; do
*) thatlib
="${thislib}_s";;
xxx
=`./loc lib$thislib.a X /usr/ccs/lib /usr/lib /usr/ucblib /usr/local/lib /lib`
*-l$thislib\
*|
*-l$thatlib\
*);;
*) dflt
="$dflt -l$thislib ";;
xxx
=`./loc lib$thislib.a X $libpth`
xxx
=`./loc Slib$thislib.a X $xlibpth`
*-l$thislib\
*|
*-l$thatlib\
*);;
*) dflt
="$dflt -l$thislib ";;
xxx
=`./loc lib$thislib.so X /usr/ccs/lib /usr/lib /usr/ucblib /usr/local/lib /lib`
echo "Found -l$thislib as a shared object only."
*-l$thislib\
*|
*-l$thatlib\
*);;
*) dflt
="$dflt -l$thislib ";;
Some versions of Unix support shared libraries, which make
executables smaller but make load time slightly longer.
On some systems, mostly newer Unix System V's, the shared library
is included by putting the option "-lc_s" as the last thing on the
cc command line when linking. Other systems use shared libraries
by default. There may be other libraries needed to compile $package
on your machine as well. If your system needs the "-lc_s" option,
include it here. Include any other special libraries here as well.
rp
="Any additional libraries? [$dflt]"
: check
for size of random number generator
echo "Checking alignment constraints..."
printf("%d\n", (char*)&try.bar - (char*)&try.foo);
if $cc $ccflags try.c
-o try
>/dev
/null
2>&1 ; then
echo "(I can't seem to compile the test program...)"
rp
="Doubles must be aligned on a how-many-byte boundary? [$dflt]"
: determine where public executables go
The following questions distinguish the directory in which executables
reside from the directory in which they are installed (and from which they
are presumably copied to the former directory by occult means). This
distinction is often necessary under afs. On most other systems, however,
the two directories are the same.
dflt
=`./loc . /usr/local/bin /usr/local/bin /usr/lbin /usr/local /usr/bin /bin`
rp
="In which directory will public executables reside (~name ok)? [$dflt]"
$echo "In which directory will public executables reside (~name ok)?"
rp
="Directory $bin doesn't exist. Use that name anyway? [$dflt]"
?????????????????????????
)
NOTE: you have a fairly long path name there. Some systems have trouble
executing a script if the #! line ends up longer than 32 characters. If
you have this trouble you may have to reinstall somewhere else, or make
a symbolic link from someplace with a shorter name.
dflt
=`echo $bin | sed 's#^/afs/#/afs/.#'`
test -d $dflt || dflt
="$bin"
rp
="In which directory will public executables be installed (~name ok)? [$dflt]"
$echo "In which directory will public executables be installed (~name ok)?"
installbin
=`./filexp $installbin`
if test -d $installbin; then
rp
="Directory $installbin doesn't exist. Use that name anyway? [$dflt]"
: check
for ordering of bytes
in a long
In the following, larger digits indicate more significance. A big-endian
machine like a Pyramid or a Motorola 680?0 chip will come out to 4321. A
little-endian machine like a Vax or an Intel 80?86 chip would be 1234. Other
machines may have weird orders like 3412. A Cray will report 87654321. If
the test program works the default is probably right.
I'm now running the test program...
$cat >byteorder.c
<<'EOCP'
u.l = (0x08070605L << 32) | 0x04030201L;
for (i=0; i < sizeof(long); i++)
if $cc byteorder.c
-o byteorder
>/dev
/null
2>&1 ; then
????|????????
) echo "(The test program ran ok.)";;
*) echo "(The test program didn't run right for some reason.)";;
echo "(I can't seem to compile the test program. Guessing big-endian...)"
rp
="What is the order of bytes in a long? [$dflt]"
: check
for ability to cast negative floats to unsigned
echo 'Checking to see if your C compiler can cast weird floats to unsigned'
along = (unsigned long)f;
ashort = (unsigned short)f;
if (along != (unsigned long)-123)
if (aint != (unsigned int)-123)
if (ashort != (unsigned short)-123)
along = (unsigned long)f;
along = (unsigned long)f;
along = (unsigned long)f;
if $cc -o try
$ccflags try.c
>/dev
/null
2>&1; then
: see how we invoke the C preprocessor
echo "Now, how can we feed standard input to your C preprocessor..."
echo 'cat >.$$.c; '"$cc"' -E ${1+"$@"} .$$.c; rm .$$.c' >cppstdin
/*cppstdin
) cppstdin
=cppstdin
;;
if test "X$cppstdin" != "X" && \
$cppstdin $cppminus <testcpp.c
>testcpp.out
2>&1 && \
$contains 'abc.*xyz' testcpp.out
>/dev
/null
2>&1 ; then
echo "You used to use $cppstdin $cppminus so we'll use that again."
elif test "$cc" = gcc
&& \
(echo "Using gcc, eh? We'll try to force gcc -E using a wrapper..."; \
$wrapper <testcpp.c
>testcpp.out
2>&1; \
$contains 'abc.*xyz' testcpp.out
>/dev
/null
2>&1) ; then
elif echo 'Maybe "'"$cc"' -E" will work...'; \
$cc -E <testcpp.c
>testcpp.out
2>&1; \
$contains 'abc.*xyz' testcpp.out
>/dev
/null
2>&1 ; then
elif echo 'Nope...maybe "'"$cc"' -E -" will work...'; \
$cc -E - <testcpp.c
>testcpp.out
2>&1; \
$contains 'abc.*xyz' testcpp.out
>/dev
/null
2>&1 ; then
elif echo 'No such luck, maybe "'$cpp'" will work...'; \
$cpp <testcpp.c
>testcpp.out
2>&1; \
$contains 'abc.*xyz' testcpp.out
>/dev
/null
2>&1 ; then
elif echo 'Nixed again...maybe "'$cpp' -" will work...'; \
$cpp - <testcpp.c
>testcpp.out
2>&1; \
$contains 'abc.*xyz' testcpp.out
>/dev
/null
2>&1 ; then
echo "Hooray, it works! I was beginning to wonder."
elif echo 'Uh-uh. Time to get fancy. Trying a wrapper...'; \
$wrapper <testcpp.c
>testcpp.out
2>&1; \
$contains 'abc.*xyz' testcpp.out
>/dev
/null
2>&1 ; then
elif echo 'Nope...maybe "'"$cc"' -P" will work...'; \
$cc -P <testcpp.c
>testcpp.out
2>&1; \
$contains 'abc.*xyz' testcpp.out
>/dev
/null
2>&1 ; then
echo "Yipee, that works!"
elif echo 'Nope...maybe "'"$cc"' -P -" will work...'; \
$cc -P - <testcpp.c
>testcpp.out
2>&1; \
$contains 'abc.*xyz' testcpp.out
>/dev
/null
2>&1 ; then
$echo $n "No dice. I can't find a C preprocessor. Name one: $c"
rp
='Name a C preprocessor:'
$cppstdin <testcpp.c
>testcpp.out
2>&1
if $contains 'abc.*xyz' testcpp.out
>/dev
/null
2>&1 ; then
echo "Sorry, I can't get that to work. Go find one and rerun Configure."
: get list of predefined functions
in a handy place
'') if test -f /mach_boot
; then
elif test -d /usr
/ccs
/lib
; then
: on mips
, we DO NOT want
/lib
, and we want inclPath
/usr
/lib
libpth
='$inclPath/usr/lib /usr/local/lib'
libpth
='/usr/ccs/lib /lib /usr/lib /usr/ucblib /usr/local/lib'
*-lc_s*) libc
=`./loc libc_s.a $libc $libpth`
*) for thislib
in $libs; do
-l*) thislib
=`expr X$thislib : 'X-l\(.*\)'`
try
=`./loc lib$thislib.a blurfl/dyick $libpth`
try
=`./loc lib$thislib blurfl/dyick $libpth`
try
=`./loc $thislib blurfl/dyick $libpth`
try
=`./loc Slib$thislib.a blurfl/dyick $xlibpth`
libnames
="$libnames $try"
*) libnames
="$libnames $thislib" ;;
test -f $1 ||
set /usr
/lib
/libc.so
test -f $1 ||
set /usr
/shlib
/libc.so
test -f $1 ||
set /usr
/lib
/libc.so.
[0-9]*
test -f $1 ||
set /lib
/libsys_s.a
echo "Your (shared) C library seems to be in $1."
elif test -f "$libc"; then
echo "Your C library seems to be in $libc."
elif test -f /lib
/libc.a
; then
echo "Your C library seems to be in /lib/libc.a. You're normal."
if ans
=`./loc libc.a blurfl/dyick $libpth`; test -f "$ans"; then
elif ans
=`./loc libc blurfl/dyick $libpth`; test -f "$ans"; then
libnames
="$libnames "`./loc clib blurfl/dyick $libpth`
elif ans
=`./loc clib blurfl/dyick $libpth`; test -f "$ans"; then
elif ans
=`./loc Slibc.a blurfl/dyick $xlibpth`; test -f "$ans"; then
elif ans
=`./loc Mlibc.a blurfl/dyick $xlibpth`; test -f "$ans"; then
elif ans
=`./loc Llibc.a blurfl/dyick $xlibpth`; test -f "$ans"; then
echo "Your C library seems to be in $ans, of all places."
I can't seem to find your C library. I've looked in the following places:
None of these seems to contain your C library. What is the full name
$echo $n "of your C library? $c"
rp
='C library full name?'
if test $libc = "/lib/libc"; then
If the guess above is wrong (which it might be if you're using a strange
compiler, or your machine supports multiple models), you can override it here.
rp
="Your C library is where? [$dflt]"
echo $libc $libnames |
tr ' ' '\012' |
sort |
uniq >libnames
$echo "Extracting names from the following files for later perusal:"
echo $n "This may take a while...$c"
nm
$nm_opts $
* 2>/dev
/null
>libc.tmp
$sed -n -e 's/^.* [ATDS] *[_.]*//p' -e 's/^.* [ATDS] //p' <libc.tmp
>libc.list
if $contains '^printf$' libc.list
>/dev
/null
2>&1; then
elif $sed -n -e 's/^__*//' -e 's/^\([a-zA-Z_0-9$]*\).*xtern.*/\1/p' \
$contains '^printf$' libc.list
>/dev
/null
2>&1; then
elif $sed -n -e '/|UNDEF/d' -e '/FUNC..GL/s/^.*|__*//p' <libc.tmp
>libc.list
; \
$contains '^printf$' libc.list
>/dev
/null
2>&1; then
elif $sed -n -e 's/^.* D __*//p' -e 's/^.* D //p' <libc.tmp
>libc.list
; \
$contains '^printf$' libc.list
>/dev
/null
2>&1; then
elif $sed -n -e 's/^_//' -e 's/^\([a-zA-Z_0-9]*\).*xtern.*text.*/\1/p' \
$contains '^printf$' libc.list
>/dev
/null
2>&1; then
elif $grep '|' <libc.tmp |
$sed -n -e '/|COMMON/d' -e '/|DATA/d' -e '/ file/d' \
-e 's/^\([^ ]*\).*/\1/p' >libc.list
$contains '^printf$' libc.list
>/dev
/null
2>&1; then
elif $sed -n -e 's/^.*|FUNC |GLOB .*|//p' -e 's/^.*|FUNC |WEAK .*|//p' \
$contains '^printf$' libc.list
>/dev
/null
2>&1; then
elif $sed -n -e 's/^[ ]*[0-9][0-9a-f]*[ ]*Def. Text[ ]*//p' \
< libc.tmp |
$sed -e 's/\[.*\]//' > libc.list
; \
$contains '^printf$' libc.list
>/dev
/null
2>&1; then
nm
-p $
* 2>/dev
/null
>libc.tmp
$sed -n -e 's/^.* [AT] *_[_.]*//p' -e 's/^.* [AT] //p' <libc.tmp
>libc.list
if $contains '^printf$' libc.list
>/dev
/null
2>&1; then
echo "nm didn't seem to work right."
echo "Trying ar instead..."
if ar t
$libc > libc.tmp
; then
for thisname
in $libnames; do
ar t
$thisname >>libc.tmp
$sed -e 's/\.o$//' < libc.tmp
> libc.list
echo "ar didn't seem to work right."
echo "Maybe this is a Cray...trying bld instead..."
if bld t
$libc |
$sed -e 's/.*\///' -e 's/\.o:.*$//' > libc.list
; then
for thisname
in $libnames; do
$sed -e 's/.*\///' -e 's/\.o:.*$//' >>libc.list
ar t
$thisname >>libc.tmp
echo "That didn't work either. Giving up."
if test -f /lib
/syscalls.exp
; then
echo "Also extracting names from /lib/syscalls.exp for good ole AIX..."
sed -n 's/^\([^ ]*\)[ ]*syscall$/\1/p' /lib
/syscalls.exp
>>libc.list
inlibc
='echo " "; td=$define; tu=$undef;
if $contains "^$1\$" libc.list >/dev/null 2>&1;
eval "case \"\$$2\" in undef) . whoa; esac"; eval "$2=\$td";
else echo "$1() NOT found";
eval "case \"\$$2\" in define) . whoa; esac"; eval "$2=\$tu"; fi'
echo "Checking to see if your bcopy() can do overlapping copies..."
$cat >safebcpy.c
<<'EOCP'
for (align = 7; align >= 0; align--) {
for (len = 36; len; len--) {
bcopy("abcdefghijklmnopqrstuvwxyz0123456789", b, len);
for (off = 1; off <= len; off++) {
if (bcmp(b, "abcdefghijklmnopqrstuvwxyz0123456789", len))
if $cc safebcpy.c
-o safebcpy
$ccflags $libs >/dev
/null
2>&1 ; then
echo "(I can't compile the test program, so we'll assume not...)"
: see
if sprintf is declared as int or pointer to char
exit((unsigned long)sprintf(buf,"%s","foo") > 10L);
if $cc $ccflags ucbsprf.c
-o ucbsprf
>/dev
/null
2>&1 && .
/ucbsprf
; then
echo "Your sprintf() returns (int)."
echo "Your sprintf() returns (char*)."
if $contains '^vprintf$' libc.list
>/dev
/null
2>&1; then
exit((unsigned long)vsprintf(buf,"%s",args) > 10L);
if $cc $ccflags vprintf.c
-o vprintf
>/dev
/null
2>&1 && .
/vprintf
; then
echo "Your vsprintf() returns (int)."
echo "Your vsprintf() returns (char*)."
echo 'vprintf() NOT found.'
if $contains '^crypt$' libc.list
>/dev
/null
2>&1; then
cryptlib
=`./loc Slibcrypt.a "" $xlibpth`
if $test -z "$cryptlib"; then
cryptlib
=`./loc Mlibcrypt.a "" $xlibpth`
if $test -z "$cryptlib"; then
cryptlib
=`./loc Llibcrypt.a "" $xlibpth`
if $test -z "$cryptlib"; then
cryptlib
=`./loc libcrypt.a "" $libpth`
if $test -z "$cryptlib"; then
echo 'crypt() NOT found.'
: see
if there are directory access routines out there
xxx
=`./loc ndir.h x $usrinclude /usr/local/include $inclwanted`
xxx
=`./loc sys/ndir.h x $usrinclude /usr/local/include $inclwanted`
if $test -r $usrinclude/dirent.h
; then
if $contains 'd_namlen' $usrinclude/dirent.h
>/dev
/null
2>&1; then
echo "You seem to use <$xxx>,"
if $test "$d_readdir" = "$define"; then
echo "and I can get readdir() from your C library."
elif $test -r /usr
/lib
/libndir.a ||
$test -r /usr
/local
/lib
/libndir.a
; then
echo "and I'll get the routines using -lndir ."
ans
=`./loc libndir.a x $libpth`
echo "but I can't find the ndir library!"
echo "and I found the directory library in $ans."
if $contains 'd_namlen' $xxx >/dev
/null
2>&1; then
: The next line used to require this to be a bsd system.
if $contains '^readdir$' libc.list
>/dev
/null
2>&1 ; then
echo "No ndir library found, but you have readdir() so we'll use that."
if $contains 'd_namlen' $usrinclude/sys
/dir.h
>/dev
/null
2>&1; then
echo "No ndir library found--using ./$d_ndir.c."
: This will lose since
$d_ndir.h is
in another directory.
: I doubt we can rely on it being
in ..
/$d_ndir.h .
: At least it will fail
in a conservative manner.
if $contains 'd_namlen' $d_ndir.h
>/dev
/null
2>&1; then
val
=$D_dirnamlen; set d_dirnamlen
; eval $setvar
val
=$I_dirent; set i_dirent
; eval $setvar
val
=$I_sys_dir; set i_sys_dir
; eval $setvar
val
=$I_my_dir; set i_my_dir
; eval $setvar
val
=$I_ndir; set i_ndir
; eval $setvar
val
=$I_sys_ndir; set i_sys_ndir
; eval $setvar
: now see
if they want to
do setuid emulation
Some sites have disabled setuid #! scripts because of a bug in the kernel
that prevents them from being secure. If you are on such a system, the
setuid/setgid bits on scripts are currently useless. It is possible for
$package to detect those bits and emulate setuid/setgid in a secure fashion
until a better solution is devised for the kernel problem.
rp
="Do you want to do setuid/setgid emulation? [$dflt]"
: see
if this is an fcntl system
: see
if we can have long filenames
if (echo hi
>123456789abcdef
) 2>/dev
/null
; then
if test -f 123456789abcde
; then
echo 'You cannot have filenames longer than 14 characters. Sigh.'
echo 'You can have filenames longer than 14 characters.'
echo "You can't have filenames longer than 14 chars. You can't even think about them!"
: see
if getgroups exists
: see
if gethostent exists
: see
if getpriority exists
set getpriority d_getprior
*) if $test -f /unix
; then
if $contains '^index$' libc.list
>/dev
/null
2>&1 ; then
if $contains '^strchr$' libc.list
>/dev
/null
2>&1 ; then
echo "Your system has both index() and strchr(). Shall I use"
rp
="index() rather than strchr()? [$dflt]"
if $contains '^strchr$' libc.list
>/dev
/null
2>&1 ; then
echo "No index() or strchr() found!"
echo "Checking to see if your memcpy() can do overlapping copies..."
$cat >safemcpy.c
<<'EOCP'
for (align = 7; align >= 0; align--) {
for (len = 36; len; len--) {
memcpy(b,"abcdefghijklmnopqrstuvwxyz0123456789", len);
for (off = 1; off <= len; off++) {
if (memcmp(b, "abcdefghijklmnopqrstuvwxyz0123456789", len))
if $cc safemcpy.c
-o safemcpy
$ccflags $libs >/dev
/null
2>&1 ; then
echo "(I can't compile the test program, so we'll assume not...)"
: see how much of the
'msg*(2)' library is present.
case "$d_msgctl$d_msgget$d_msgsnd$d_msgrcv" in
: we could also check
for sys
/ipc.h ...
if $h_msg && $test -r $usrinclude/sys
/msg.h
; then
echo "You have the full msg*(2) library."
echo "You don't have the full msg*(2) library."
: determine
which malloc to compile
in
rp
="Do you wish to attempt to use the malloc that comes with $package? [$dflt]"
y
*) mallocsrc
='malloc.c'; mallocobj
='malloc.o'
libs
=`echo $libs | sed 's/-lmalloc//'`
cat >usemymalloc.c
<<'END'
if $cc $ccflags -c usemymalloc.c
>/dev
/null
2>&1; then
echo "Your system wants malloc to return $mallocptrtype*, it would seem."
: see
if ndbm is available
xxx
=`./loc ndbm.h x $usrinclude /usr/local/include $inclwanted`
: see
if we have the old dbm
xxx
=`./loc dbm.h x $usrinclude /usr/local/include $inclwanted`
: see whether socket exists
if $contains socket libc.list
>/dev
/null
2>&1; then
echo "Looks like you have Berkeley networking support."
: now check
for advanced features
if $contains setsockopt libc.list
>/dev
/null
2>&1; then
echo "...but it uses the old 4.1c interface, rather than 4.2"
: hpux
, for one
, puts all the socket stuff
in socklib.o
if $contains socklib libc.list
>/dev
/null
2>&1; then
echo "Looks like you have Berkeley networking support."
: we will have to assume that it supports the
4.2 BSD interface
echo "Hmmm...you don't have Berkeley networking in libc.a..."
: look for an optional networking library
if test -f /usr
/lib
/libnet.a
; then
(ar t
/usr
/lib
/libnet.a ||
nm
-g /usr
/lib
/libnet.a
) 2>/dev
/null
>> libc.list
if $contains socket libc.list
>/dev
/null
2>&1; then
echo "but the Wollongong group seems to have hacked it in."
socketlib
="-lnet -lnsl_s"
: now check
for advanced features
if $contains setsockopt libc.list
>/dev
/null
2>&1; then
echo "...using the old 4.1c interface, rather than 4.2"
echo "or even in libnet.a, which is peculiar."
echo "or anywhere else I see."
if $contains socketpair libc.list
>/dev
/null
2>&1; then
: Locate the flags
for 'open()'
: check sys
/file.h first to get FREAD on Sun
if $test -r $usrinclude/sys
/file.h
&& \
$cc $cppflags "-DI_SYS_FILE" open3.c
-o open3
>/dev
/null
2>&1 ; then
echo "sys/file.h defines the O_* constants..."
echo "and you have the 3 argument form of open()."
echo "but not the 3 argument form of open(). Oh, well."
elif $test -r $usrinclude/fcntl.h
&& \
$cc "-DI_FCNTL" open3.c
-o open3
>/dev
/null
2>&1 ; then
echo "fcntl.h defines the O_* constants..."
echo "and you have the 3 argument form of open()."
echo "but not the 3 argument form of open(). Oh, well."
echo "I can't find the O_* constant definitions! You got problems."
: see
if how
pwd stuff is defined
if $test -r $usrinclude/pwd.h
; then
$cppstdin $cppflags $cppminus <$usrinclude/pwd.h | \
sed -n '/struct[ ][ ]*passwd/,/^};/p' >pwd.txt
if $contains 'pw_quota' pwd.txt
>/dev
/null
2>&1; then
if $contains 'pw_age' pwd.txt
>/dev
/null
2>&1; then
if $contains 'pw_change' pwd.txt
>/dev
/null
2>&1; then
if $contains 'pw_class' pwd.txt
>/dev
/null
2>&1; then
if $contains 'pw_expire' pwd.txt
>/dev
/null
2>&1; then
if $contains 'pw_comment' pwd.txt
>/dev
/null
2>&1; then
: see how much of the
'sem*(2)' library is present.
case "$d_semctl$d_semget$d_semop" in
: we could also check
for sys
/ipc.h ...
if $h_sem && $test -r $usrinclude/sys
/sem.h
; then
echo "You have the full sem*(2) library."
echo "You don't have the full sem*(2) library."
: see
if setpriority exists
set setpriority d_setprior
set setresgid d_setresgid
set setresuid d_setresuid
$cppstdin $cppflags $cppminus < $usrinclude/sys
/shm.h
>voidshmat.txt
2>/dev
/null
if $contains "void.*shmat" voidshmat.txt
>/dev
/null
2>&1; then
echo "and shmat returns (void*)"
echo "and shmat returns (char*)"
: see how much of the
'shm*(2)' library is present.
case "$d_shmctl$d_shmget$d_shmat$d_shmdt" in
: we could also check
for sys
/ipc.h ...
if $h_shm && $test -r $usrinclude/sys
/shm.h
; then
echo "You have the full shm*(2) library."
echo "You don't have the full shm*(2) library."
: see
if stat knows about block sizes
if $contains 'st_blocks;' $usrinclude/sys
/stat.h
>/dev
/null
2>&1 ; then
if $contains 'st_blksize;' $usrinclude/sys
/stat.h
>/dev
/null
2>&1 ; then
echo "Your stat knows about block sizes."
echo "Your stat doesn't know about block sizes."
echo "Your stat doesn't know about block sizes."
: see
if stdio is really std
if $contains 'char.*_ptr.*;' $usrinclude/stdio.h
>/dev
/null
2>&1 ; then
if $contains '_cnt;' $usrinclude/stdio.h
>/dev
/null
2>&1 ; then
echo "Your stdio is pretty std."
echo "Your stdio isn't very std."
echo "Your stdio isn't very std."
: check
for structure copying
echo "Checking to see if your C compiler can copy structs..."
$cat >strctcpy.c
<<'EOCP'
if $cc -c strctcpy.c
>/dev
/null
2>&1 ; then
: set if package uses struct tm
: set if package uses struct timeval
: set if package uses localtime
function
: see
which of
time.h
, sys
/time.h
, and sys
/select should be included.
Testing to see which of <time.h>, <sys/time.h>, and <sys/select.h>
should be included, because this application wants:
idefs
="-DS_ITIMERVAL $idefs"
idefs
="-DS_TIMEVAL $idefs"
echo " ctime(3) declarations"
echo " (something I don't know about)"
echo "I'm now running the test program..."
if (foo.tm_sec == foo.tm_sec)
if (bar.tv_sec == bar.tv_sec)
if (baz.it_interval == baz.it_interval)
if (bar.tv_sec == bar.tv_sec)
/* this might not do anything for us... */
tmp = localtime((time_t *)0);
for i_sys_select
in '' '-DI_SYS_SELECT'; do
for d_systimekernel
in '' '-DSYSTIMEKERNEL'; do
for i_time
in '' '-DI_TIME'; do
for i_systime
in '-DI_SYS_TIME' ''; do
'') echo Trying
$i_time $i_systime $d_systimekernel $i_sys_select
$i_time $i_systime $d_systimekernel $i_sys_select \
i_time.c
-o i_time
>/dev
/null
2>&1 ; then
set X
$i_time $i_systime $d_systimekernel $i_sys_select
echo Succeeded with
$flags
*SYSTIMEKERNEL
*) val
="$define";;
*I_TIME
*) val
="$define";;
*I_SYS_SELECT
*) val
="$define";;
*I_SYS_TIME
*) val
="$define";;
case "$flags$i_sys_time$i_time" in
undefundef
) i_sys_time
="$define"; i_time
="$define";
echo "ICK, NOTHING WORKED!!! You may have to diddle the includes.";;
: see
if signal is declared as pointer to
function returning int or void
$cppstdin $cppflags $cppminus < $usrinclude/signal.h
>d_voidsig.txt
if $contains 'int[^A-Za-z]*signal' d_voidsig.txt
>/dev
/null
2>&1 ; then
echo "You have int (*signal())() instead of void."
echo "You have void (*signal())() instead of int."
define
) d_tosignal
=void
;;
: see
if there is a vfork
: check
for volatile keyword
echo 'Checking to see if your C compiler knows about "volatile"...'
typedef unsigned short foo_t;
if $cc -c $ccflags try.c
>/dev
/null
2>&1 ; then
: see
if there is a wait4
: see
if there is a waitpid
: see what
type gids are declared as
in the kernel
if $contains 'gid_t;' $usrinclude/sys
/types.h
>/dev
/null
2>&1 ; then
set `grep '_rgid;' $usrinclude/sys/user.h 2>/dev/null` unsigned short
unsigned
) dflt
="$1 $2" ;;
rp
="What type are groups ids returned by getgid(), etc.? [$dflt]"
: see what
type gids are returned by getgroups
if $contains 'getgroups.*short' /usr
/lib
/lint
/llib-lc
>/dev
/null
2>&1; then
elif $contains 'getgroups.*int' /usr
/lib
/lint
/llib-lc
>/dev
/null
2>&1; then
elif $contains 'getgroups.*short' /usr
/include
/libc.h
>/dev
/null
2>&1; then
elif $contains 'getgroups.*int' /usr
/include
/libc.h
>/dev
/null
2>&1; then
elif $contains 'getgroups.*short' /usr
/lib
/lint
/llib-lbsd
>/dev
/null
2>&1; then
elif $contains 'getgroups.*int' /usr
/lib
/lint
/llib-lbsd
>/dev
/null
2>&1; then
elif $contains 'int.*gidset' /usr
/man
/man
2/getgroups
.2 >/dev
/null
2>&1; then
elif $contains 'gid_t;' $usrinclude/sys
/types.h
>/dev
/null
2>&1 ; then
set `grep 'groups\[NGROUPS\];' $usrinclude/sys/user.h 2>/dev/null` unsigned short
unsigned
) dflt
="$1 $2" ;;
echo "(The following only matters if you have getgroups().)"
rp
="What type are the group ids returned by getgroups()? [$dflt]"
: check
for length of integer
echo "Checking to see how big your integers are..."
printf("%d\n", sizeof(int));
if $cc intsize.c
-o intsize
>/dev
/null
2>&1 ; then
echo "(I can't seem to compile the test program. Guessing...)"
rp
="What is the size of an integer (in bytes)? [$dflt]"
: determine where private executables go
test -d /usr
/local
/lib
&& dflt
=/usr
/local
/lib
/$package
The $package package has some auxiliary files that should be reside in a library
that is accessible by everyone. Where should these "private" but accessible
$echo $n "files reside? (~name ok) [$dflt] $c"
rp
="Private files will reside where? [$dflt]"
privlib
=`./filexp "$ans"`
case "$installprivlib" in
dflt
=`echo $privlib | sed 's#^/afs/#/afs/.#'`
test -d $dflt || dflt
="$privlib"
*) dflt
="$installprivlib"
On some systems (such as afs) you have to install the library files in a
different directory to get them to go to the right place. Where should the
$echo $n "library files be installed? (~name ok) [$dflt] $c"
rp
="Install private files where? [$dflt]"
installprivlib
=`./filexp "$ans"`
: check
for size of random number generator
echo "Checking to see how many bits your rand function produces..."
$cat >randbits.c
<<'EOCP'
register unsigned long tmp;
register unsigned long max = 0L;
tmp = (unsigned long)rand();
if (tmp > max) max = tmp;
if $cc randbits.c
-o randbits
>/dev
/null
2>&1 ; then
echo "(I can't seem to compile the test program...)"
rp
="How many bits does your rand() function produce? [$dflt]"
: determine where publicly executable scripts go
test -d /usr
/share
/scripts
&& dflt
=/usr
/share
/scripts
test -d /usr
/share
/bin
&& dflt
=/usr
/share
/bin
Some installations have a separate directory just for executable scripts so
that they can mount it across multiple architectures but keep the scripts in
one spot. You might, for example, have a subdirectory of /usr/share for this.
Or you might just lump your scripts in with all your other executables.
rp
="Where will publicly executable scripts reside (~name ok)? [$dflt]"
scriptdir
=`./filexp "$scriptdir"`
if test -d $scriptdir; then
rp
="Directory $scriptdir doesn't exist. Use that name anyway? [$dflt]"
dflt
=`echo $scriptdir | sed 's#^/afs/#/afs/.#'`
test -d $dflt || dflt
="$scriptdir"
Some installations must install scripts in a different directory than where
they will eventually reside. On most systems they're the same directory.
rp
="Where do you install publicly executable scripts (~name ok)? [$dflt]"
installscr
=`./filexp "$installscr"`
if test -d $installscr; then
rp
="Directory $installscr doesn't exist. Use that name anyway? [$dflt]"
: generate list of signal names
echo "Generating a list of signal names..."
set X
`cat $usrinclude/signal.h $usrinclude/sys/signal.h 2>&1 | awk '
$1 ~ /^#define$/ && $2 ~ /^SIG[A-Z0-9]*$/ && $3 ~ /^[1-9][0-9]*$/ {
sig[$3] = substr($2,4,20)
if (max < $3 && $3 < 60) {
0) echo 'kill -l' >/tmp
/foo$$
set X
`$csh -f </tmp/foo$$`
0)set HUP INT QUIT ILL TRAP IOT EMT FPE KILL BUS SEGV SYS PIPE ALRM TERM
echo "Signals are: $sig_name"
: see what
type of char stdio uses.
if $contains 'unsigned.*char.*\*.*_ptr.*;' $usrinclude/stdio.h
>/dev
/null
2>&1 ; then
echo "Your stdio uses unsigned chars."
echo "Your stdio uses signed chars."
: see what
type uids are declared as
in the kernel
if $contains 'uid_t;' $usrinclude/sys
/types.h
>/dev
/null
2>&1 ; then
set `grep '_ruid;' $usrinclude/sys/user.h 2>/dev/null` unsigned short
unsigned
) dflt
="$1 $2" ;;
rp
="What type are user ids returned by getuid(), etc.? [$dflt]"
Checking to see how well your C compiler groks the void type...
1: basic void declarations.
2: arrays of pointers to functions returning void.
4: operations between pointers to and addresses of void functions.
extern void moo(); /* function returning void */
void (*goo)(); /* ptr to func returning void */
if $cc -c -DTRY=$voidwant void.c
>void.out
2>&1 ; then
echo "It appears to support void to the level $package wants ($voidwant)."
if $contains warning void.out
>/dev
/null
2>&1; then
echo "However, you might get some warnings that look like this:"
echo "Hmm, your compiler has some difficulty with void. Checking further..."
if $cc -c -DTRY=1 void.c
>/dev
/null
2>&1 ; then
if $cc -c -DTRY=3 void.c
>/dev
/null
2>&1 ; then
echo "And it supports 2 but not 4."
echo "It doesn't support 2..."
if $cc -c -DTRY=5 void.c
>/dev
/null
2>&1 ; then
echo "But it supports 4."
echo "And it doesn't support 4."
echo "There is no support at all for void."
rp
="Your void support flags add up to what? [$dflt]"
: preserve RCS keywords
in files with variable substitution
, grrr
: determine compiler compiler
rp
="Which compiler compiler (yacc or bison -y) will you use? [$dflt]"
: see
if we can include fcntl.h
echo "We'll be including <fcntl.h>."
echo "We don't need to <fcntl.h> if we include <sys/file.h>."
echo "We won't be including <fcntl.h>."
: see
if gdbm is available
xxx
=`./loc gdbm.h x $usrinclude /usr/local/include $inclwanted`
: see
if this is an grp system
if $test -r $usrinclude/grp.h
; then
: see
if this is a netinet
/in.h or sys
/in.h system
xxx
=`./loc netinet/in.h x $usrinclude /usr/local/include $inclwanted`
echo "netinet/in.h found."
echo "No netinet/in.h found, ..."
xxx
=`./loc sys/in.h x $usrinclude /usr/local/include $inclwanted`
echo "but I found sys/in.h instead."
echo "and I didn't find sys/in.h either."
: Do we need to
#include <sys/file.h> ?
echo "We'll be including <sys/file.h>."
echo "We won't be including <sys/file.h>."
: see
if ioctl defs are
in sgtty
/termio or sys
/ioctl
if $test -r $usrinclude/sys
/ioctl.h
; then
echo "sys/ioctl.h found."
echo "sys/ioctl.h NOT found, assuming ioctl args are defined in sgtty.h."
: see
if we should include utime.h
if $test -r $usrinclude/utime.h
; then
echo "No utime.h found, but that's ok."
: see
if this is a varargs system
if $test -r $usrinclude/varargs.h
; then
echo "No varargs.h found, but that's ok (I hope)."
: see
if this is a vfork system
if $test -r $usrinclude/vfork.h
; then
: end of configuration questions
echo "End of configuration questions."
echo "Creating config.sh..."
test -f config.sh
&& cp config.sh UU
/oldconfig.sh
$spitshell <<EOT >config.sh
# This file was produced by running the Configure script.
d_setresgid='$d_setresgid'
d_setresuid='$d_setresuid'
d_voidshmat='$d_voidshmat'
d_pwcomment='$d_pwcomment'
i_sys_select='$i_sys_select'
d_systimekernel='$d_systimekernel'
d_dirnamlen='$d_dirnamlen'
mallocptrtype='$mallocptrtype'
installprivlib='$installprivlib'
test -f patchlevel.h
&& awk '{printf "%s=%s\n",$2,$3}' patchlevel.h
>>config.sh
echo "CONFIG=true" >>config.sh
if test -f UU
/oldconfig.sh
; then
sed -n 's/^\([a-zA-Z_0-9]*\)=.*/\1/p' config.sh config.sh UU
/oldconfig.sh |\
sort |
uniq -u >UU
/oldsyms
*) echo "Hmm...You had some extra variables I don't know about...I'll try to keep 'em..."
for sym
in `cat UU/oldsyms`; do
echo " Propagating $hint variable "'$'"$sym..."
sed -e "s/'/'\"'\"'/g" -e "s/^/$sym='/" -e "s/$/'/" >>config.sh
echo "If you didn't make any mistakes, then just type a carriage return here."
rp
="If you need to edit config.sh, do it as a shell escape here:"
*) : in case they cannot
read
if $contains '^depend:' [Mm
]akefile
>/dev
/null
2>&1; then
Now you need to generate make dependencies by running "make depend".
You might prefer to run it in background: "make depend > makedepend.out &"
It can take a while, so you might not want to run it right now.
rp
="Run make depend now? [$dflt]"
y
*) make depend
&& echo "Now you must run a make."
*) echo "You must run 'make depend' then 'make'."
elif test -f [Mm
]akefile
; then
echo "Now you must run a make."