# 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.)
# $Header: Head.U,v 1.0 87/05/22 12:28:10 lwall Exp $
# 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.)
: the user has a better chance than we
do of setting a reasonable PATH
: but add some directories we need that are probably not there
PATH
=.
:${PATH}:/etc
:/usr
/lib
:/lib
export PATH ||
(echo "OOPS, this isn't sh. Desperation time. I will feed myself to sh."; sh
$0; kill $$
)
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';;
echo "Beginning of configuration questions for $package kit."
: Eunice requires
" " instead of
"", can you believe it
libpth
='/usr/lib /usr/local/lib /lib /usr/ccs/lib'
smallmach
='pdp11 i8086 z8000 i80286 iAPX286'
rmlist
='kit[1-9]isdone kit[1-9][0-9]isdone'
trap 'echo " "; rm -f $rmlist; 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
="mc68000 sun gcos unix ibm gimpel interdata tss os mert pyr"
attrlist
="$attrlist vax pdp11 i8086 z8000 u3b2 u3b5 u3b20 u3b200"
attrlist
="$attrlist ns32000 ns16000 iAPX286 mc300 mc500 mc700 sparc"
attrlist
="$attrlist nsc32000 sinix xenix venix posix ansi M_XENIX"
attrlist
="$attrlist mc68k m68k __STDC__"
pth
=`echo $PATH | tr : ' '`
: some greps
do not
return status
, grrr.
echo "grimblepritz" >grimble
if grep blurfldyick grimble
>/dev
/null
2>&1 ; then
elif grep grimblepritz grimble
>/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
: 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]"
: get old answers
, if there is a config
file out there
if test -f ..
/config.sh
; then
rp
="I see a config.sh file. Did Configure make it on THIS system? [$dflt]"
n
*) echo "OK, I'll ignore it.";;
*) echo "Fetching default answers from your old config.sh file..."
: 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
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."
rp
="Is your "'"'"test"'"'" built into sh? [$dflt] (OK to guess)"
echo "Hopefully echo is built into your sh."
echo "Checking compatibility between /bin/echo and builtin echo (if any)..."
$echo $n "hi there$c" >foo1
echo $n "hi there$c" >foo2
if cmp foo1 foo2
>/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-->"
: get list of predefined functions
in a handy place
if test -f /lib
/libc.a
; then
echo "Your C library is in /lib/libc.a. You're normal."
if test -f /lib
/clib
-a -f /lib
/libc
; then
echo "Your standard C library is in /lib/libc. Must be Domain/OS."
elif test -f /lib
/libsys_s.a
; then
echo "Your C library is in /lib/libsys_s.a. Must be a NeXT."
ans
=`loc libc.a blurfl/dyick $libpth`
ans
=`loc clib blurfl/dyick $libpth`
ans
=`loc libc blurfl/dyick $libpth`
echo "Your C library is in $ans, of all places."
echo "Your C library is in $libc, like you said before."
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?'
$echo $n "Extracting names from $libc for later perusal...$c"
nm
$libc 2>/dev
/null |
sed -n -e 's/^.* T _//p' -e 's/^.* T //p' > libc.list
if $contains '^printf$' libc.list
>/dev
/null
2>&1; then
nm
$libc 2>/dev
/null |
sed -n -e 's/^.* D _//p' -e 's/^.* D //p' > 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 |
sed -e 's/\.o$//' > libc.list
; then
echo "That didn't work either. Giving up."
rmlist
="$rmlist libc.list"
: make some quick guesses about what we are up against
if $contains SIGTSTP
/usr
/include
/signal.h
>/dev
/null
2>&1 ; then
echo "Looks kind of like a BSD system, but we'll see..."
elif $contains '^fcntl$' libc.list
>/dev
/null
2>&1 ; then
echo "Looks kind of like a USG system, but we'll see..."
echo "Looks kind of like a version 7 system, but we'll see..."
if $contains '^vmssystem$' libc.list
>/dev
/null
2>&1 ; then
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.
: it so happens the Eunice I know will not run shell scripts
in Unix format
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 eunice venix
$eunicefix bsd usg v7 eunice venix
rmlist
="$rmlist bsd usg v7 eunice venix xenix"
: 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..."
echo "#!/bin/echo hi" > try
if $contains hi today
>/dev
/null
2>&1; then
echo "#! /bin/echo hi" > try
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."
#: see if sprintf is declared as int or pointer to char
#main() { char buf[10]; exit((unsigned long)sprintf(buf,"%s","foo") > 10L); }
#if cc .ucbsprf.c -o .ucbsprf >/dev/null 2>&1 && .ucbsprf; then
# echo "Your sprintf() returns (int)."
# echo "Your sprintf() returns (char*)."
#/bin/rm -f .ucbsprf.c .ucbsprf
: 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. V8 can't even think about them!"
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!"
: see
if signal is declared as pointer to
function returning int or void
if $contains 'void.*signal' /usr
/include
/signal.h
>/dev
/null
2>&1 ||
$contains 'void.*signal' /usr
/include
/sys
/signal.h
>/dev
/null
2>&1 ; then
echo "You have void (*signal())() instead of int."
echo "You have int (*signal())() instead of void."
: check
for directory library
if test -f /usr
/include
/dirent.h
; then
echo "You have dirent.h."
d_dirheader
="#define DIRENT"
elif test -f /usr
/include
/ndir.h
; then
d_dirheader
="#define USG"
elif test -f /usr
/include
/sys
/ndir.h
; then
echo "You have sys/ndir.h."
d_dirheader
="#define SYSNDIR
elif test -f /usr
/include
/sys
/dir.h
; then
echo "You have sys/dir.h; I hope that's the BSD version."
d_dirheader
="#define SYSDIR"
echo "I can't find a directory library header file.
That means you won't have numbered backups available."
d_dirheader
="#define NODIR"
if test -f /usr
/include
/unistd.h
; then
echo "You have unistd.h."
echo "I don't see unistd.h, but that's OK."
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.
: Argh
-- AIX
3.2 does not have cc
-S!
if cc
-c -DTRY=7 try.c
>.out
2>&1 ; then
echo "It appears to support void fully."
if $contains warning .out
>/dev
/null
2>&1; then
echo "However, you might get some warnings that look like this:"
echo "Hmm, you compiler has some difficulty with void. Checking further..."
if cc
-c -DTRY=1 try.c
>/dev
/null
2>&1 ; then
if cc
-c -DTRY=3 try.c
>/dev
/null
2>&1 ; then
echo "And it supports 2 but not 4."
echo "It doesn't support 2..."
if cc
-c -DTRY=3 try.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]"
: see how we invoke the C preprocessor
echo "Now, how can we feed standard input to your C preprocessor..."
echo 'Maybe "'$cpp'" will work...'
$cpp <testcpp.c
>testcpp.out
2>&1
if $contains 'abc.*xyz' testcpp.out
>/dev
/null
2>&1 ; then
echo 'Nope, maybe "'$cpp' -" will work...'
$cpp - <testcpp.c
>testcpp.out
2>&1
if $contains 'abc.*xyz' testcpp.out
>/dev
/null
2>&1 ; then
echo 'No such luck...maybe "cc -E" will work...'
cc
-E <testcpp.c
>testcpp.out
2>&1
if $contains 'abc.*xyz' testcpp.out
>/dev
/null
2>&1 ; then
echo 'Nixed again...maybe "cc -E -" will work...'
cc
-E - <testcpp.c
>testcpp.out
2>&1
if $contains 'abc.*xyz' testcpp.out
>/dev
/null
2>&1 ; then
echo "Hooray, it works! I was beginning to wonder."
echo 'Nope...maybe "cc -P" will work...'
cc
-P <testcpp.c
>testcpp.out
2>&1
if $contains 'abc.*xyz' testcpp.out
>/dev
/null
2>&1 ; then
echo 'Nope...maybe "cc -P -" will work...'
cc
-P - <testcpp.c
>testcpp.out
2>&1
if $contains 'abc.*xyz' testcpp.out
>/dev
/null
2>&1 ; then
echo 'Hmm...perhaps you already told me...'
*) $cppstdin $cppminus <testcpp.c
>testcpp.out
2>&1;;
if $contains 'abc.*xyz' testcpp.out
>/dev
/null
2>&1 ; then
echo "Hooray, you did! I was beginning to wonder."
echo 'Uh-uh. Time to get fancy...'
echo 'Trying (cat >/tmp/$$.c; cc -E /tmp/$$.c; rm /tmp/$$.c)'
cppstdin
='(cat >/tmp/$$.c; cc -E /tmp/$$.c; rm /tmp/$$.c)'
$cppstdin <testcpp.c
>testcpp.out
2>&1
if $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."
rm -f testcpp.c testcpp.out
: get C preprocessor symbols handy
: AIX
3.2 rejects
tr '[ - ]' because the range endpoints are the same.
echo $attrlist |
$tr ' ' '\012' >Cppsym.know
if $contains "^\$1$" Cppsym.true >/dev/null 2>&1; then
elif $contains "^\$1$" Cppsym.know >/dev/null 2>&1; then
unknown="\$unknown \$sym"
echo \$* | $tr ' ' '\012' | $sed -e 's/\(.*\)/\\
echo exit 1 >>/tmp/Cppsym\$\$
$cppstdin $cppminus </tmp/Cppsym\$\$ >/tmp/Cppsym2\$\$
true) awk 'NF > 5 {print substr(\$6,2,100)}' </tmp/Cppsym2\$\$ ;;
$rm -f /tmp/Cppsym\$\$ /tmp/Cppsym2\$\$
echo "Your C preprocessor defines the following symbols:"
Cppsym
-l $attrlist >Cppsym.true
rmlist
="$rmlist Cppsym Cppsym.know Cppsym.true"
: see how many register declarations we want to use
elif Cppsym sun mc68000 mc68k m68k
; then
elif Cppsym ns32000 ns16000
; then
elif Cppsym
$smallmach; then
: if you have any other numbers
for me
, send them
in
Different C compilers on different machines pay attention to different
numbers of register declarations. About how many register declarations in
$echo $n "each routine does your C compiler pay attention to? (OK to guess) [$dflt] $c"
rp
="# register declarations used? [$dflt]"
awk "BEGIN { for (i=1; i<=16; i++) printf \"reg%d=''\n\", i}" </dev
/null
>.foo
awk "BEGIN { for (i=1; i<=$registers; i++) printf \"reg%d=register\n\", i}" \
: preserve RCS keywords
in files with variable substitution
, grrr
: 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 : '..[^/]*/\(.*\)'\`
: determine where public executables go
dflt
=`loc . /bin /usr/local/bin /usr/lbin /usr/local /usr/bin`
rp
="Where do you want to put the public executables? [$dflt]"
rp
="Directory $bin doesn't exist. Use that name anyway? [$dflt]"
: determine where manual pages go
dflt
=`loc . /usr/man/man1 /usr/local/man/man1 /usr/man/mann /usr/man/local/man1 /usr/man/u_man/man1`
rp
="Where do the manual pages (source) go? [$dflt]"
rp
="Directory $mansrc doesn't exist. Use that name anyway? [$dflt]"
: see what memory models we can support
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/ld
.1 >/dev
/null
2>&1 || \
$contains '-i' $mansrc/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"
rp
="Any additional cc flags? [$dflt]"
if test -f /usr
/include
/dirent.h
; then
rp
="Any additional ld flags? [$dflt]"
: 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!) What command will force resolution on
$echo $n "this system? [$dflt] $c"
rp
="Command to resolve multiple refs? [$dflt]"
echo "Not a USG system--assuming cc can resolve multiple definitions."
echo "End of configuration questions."
echo "Creating config.sh..."
$spitshell <<EOT >config.sh
# This file was produced by running the Configure script.
d_dirheader='$d_dirheader'
defvoidused='$defvoidused'
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
echo "Doing variable substitutions on .SH files..."
set x
`awk '{print $1}' <MANIFEST | $grep '\.SH'`
dir
=`$expr X$file : 'X\(.*\)/'`
file=`$expr X$file : 'X.*/\(.*\)'`
if test -f config.h.SH
; then
if test ! -f config.h
; then
: oops
, they left it out of MANIFEST
, probably
, so
do it anyway.
if $contains '^depend:' Makefile
>/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]"
echo "Now you must run a make."
*) echo "You must run 'make depend' then 'make'."
elif test -f Makefile
; then
echo "Now you must run a make."
: the following is currently useless
: since this removes it all anyway