home *** CD-ROM | disk | FTP | other *** search
Text File | 1989-01-05 | 49.0 KB | 2,247 lines |
- #! /bin/sh
-
- # Make a new directory for the perl sources, cd to it, and run kits 1
- # thru 15 through sh. When all 15 kits have been run, read README.
-
- echo "This is perl 2.0 kit 6 (of 15). If kit 6 is complete, the line"
- echo '"'"End of kit 6 (of 15)"'" will echo at the end.'
- echo ""
- export PATH || (echo "You didn't use sh, you clunch." ; kill $$)
- mkdir t 2>/dev/null
- echo Extracting Configure
- sed >Configure <<'!STUFFY!FUNK!' -e 's/X//'
- X#! /bin/sh
- X#
- X# If these # comments don't work, trim them. Don't worry about any other
- X# shell scripts, Configure will trim # comments from them for you.
- X#
- X# (If you are trying to port this package to a machine without sh, I would
- X# suggest you cut out the prototypical config.h from the end of Configure
- X# and edit it to reflect your system. Some packages may include samples
- X# of config.h for certain machines, so you might look for one of those.)
- X#
- X# $Header: Configure,v 2.0 88/06/05 00:07:37 root Exp $
- X#
- X# Yes, you may rip this off to use in other distribution packages.
- X# (Note: this Configure script was generated automatically. Rather than
- X# working with this copy of Configure, you may wish to get metaconfig.)
- X
- X: sanity checks
- XPATH='.:/bin:/usr/bin:/usr/local/bin:/usr/ucb:/usr/local:/usr/lbin:/etc:/usr/new:/usr/new/bin:/usr/nbin'
- Xexport PATH || (echo "OOPS, this isn't sh. Desperation time. I will feed myself to sh."; sh $0; kill $$)
- X
- Xif test ! -t 0; then
- X echo "Say 'sh Configure', not 'sh <Configure'"
- X exit 1
- Xfi
- X
- X(alias) >/dev/null 2>&1 && \
- X echo "(I see you are using the Korn shell. Some ksh's blow up on Configure," && \
- X echo "especially on exotic machines. If yours does, try the Bourne shell instead.)"
- X
- Xif test ! -d ../UU; then
- X if test ! -d UU; then
- X mkdir UU
- X fi
- X cd UU
- Xfi
- X
- Xcase "$1" in
- X-d) shift; fastread='yes';;
- Xesac
- X
- Xd_eunice=''
- Xeunicefix=''
- Xdefine=''
- Xloclist=''
- Xexpr=''
- Xsed=''
- Xecho=''
- Xcat=''
- Xrm=''
- Xmv=''
- Xcp=''
- Xtail=''
- Xtr=''
- Xmkdir=''
- Xsort=''
- Xuniq=''
- Xgrep=''
- Xtrylist=''
- Xtest=''
- Xinews=''
- Xegrep=''
- Xmore=''
- Xpg=''
- XMcc=''
- Xvi=''
- Xmailx=''
- Xmail=''
- Xcpp=''
- XLog=''
- XHeader=''
- Xbin=''
- Xcc=''
- Xcontains=''
- Xcppstdin=''
- Xcppminus=''
- Xd_bcopy=''
- Xd_charsprf=''
- Xd_crypt=''
- Xd_fchmod=''
- Xd_fchown=''
- Xd_getgrps=''
- Xd_index=''
- Xd_killpg=''
- Xd_memcpy=''
- Xd_rename=''
- Xd_setegid=''
- Xd_seteuid=''
- Xd_setrgid=''
- Xd_setruid=''
- Xd_statblks=''
- Xd_stdstdio=''
- Xd_strcspn=''
- Xd_strctcpy=''
- Xd_symlink=''
- Xd_tminsys=''
- Xd_vfork=''
- Xd_voidsig=''
- Xgidtype=''
- Xlibc=''
- Xlibnm=''
- Xmallocsrc=''
- Xmallocobj=''
- Xusemymalloc=''
- Xmansrc=''
- Xmanext=''
- Xmodels=''
- Xsplit=''
- Xsmall=''
- Xmedium=''
- Xlarge=''
- Xhuge=''
- Xccflags=''
- Xldflags=''
- Xn=''
- Xc=''
- Xpackage=''
- Xspitshell=''
- Xshsharp=''
- Xsharpbang=''
- Xstartsh=''
- Xstdchar=''
- Xuidtype=''
- Xvoidflags=''
- Xdefvoidused=''
- Xprivlib=''
- XCONFIG=''
- X
- X: set package name
- Xpackage=perl
- X
- Xecho " "
- Xecho "Beginning of configuration questions for $package kit."
- X: Eunice requires " " instead of "", can you believe it
- Xecho " "
- X
- Xdefine='define'
- Xundef='/*undef'
- Xlibpth='/usr/lib /usr/local/lib /lib'
- Xsmallmach='pdp11 i8086 z8000 i80286 iAPX286'
- Xrmlist='kit[1-9]isdone kit[1-9][0-9]isdone'
- Xtrap 'echo " "; rm -f $rmlist; exit 1' 1 2 3
- X
- X: We must find out about Eunice early
- Xeunicefix=':'
- Xif test -f /etc/unixtovms; then
- X eunicefix=/etc/unixtovms
- Xfi
- Xif test -f /etc/unixtovms.exe; then
- X eunicefix=/etc/unixtovms.exe
- Xfi
- X
- Xattrlist="mc68000 sun gcos unix ibm gimpel interdata tss os mert pyr"
- Xattrlist="$attrlist vax pdp11 i8086 z8000 u3b2 u3b5 u3b20 u3b200"
- Xattrlist="$attrlist ns32000 ns16000 iAPX286 mc300 mc500 mc700 sparc"
- Xattrlist="$attrlist nsc32000 sinix xenix venix posix ansi M_XENIX"
- Xattrlist="$attrlist $mc68k __STDC__"
- Xpth="/usr/ucb /bin /usr/bin /usr/local /usr/local/bin /usr/lbin /etc /usr/lib /lib"
- Xd_newshome="../../NeWS"
- Xdefvoidused=7
- X
- X: some greps do not return status, grrr.
- Xecho "grimblepritz" >grimble
- Xif grep blurfldyick grimble >/dev/null 2>&1 ; then
- X contains=contains
- Xelif grep grimblepritz grimble >/dev/null 2>&1 ; then
- X contains=grep
- Xelse
- X contains=contains
- Xfi
- Xrm -f grimble
- X: the following should work in any shell
- Xcase "$contains" in
- Xcontains*)
- X echo " "
- X echo "AGH! Grep doesn't return a status. Attempting remedial action."
- X cat >contains <<'EOSS'
- Xgrep "$1" "$2" >.greptmp && cat .greptmp && test -s .greptmp
- XEOSS
- Xchmod +x contains
- Xesac
- X
- X: first determine how to suppress newline on echo command
- Xecho "Checking echo to see how to suppress newlines..."
- X(echo "hi there\c" ; echo " ") >.echotmp
- Xif $contains c .echotmp >/dev/null 2>&1 ; then
- X echo "...using -n."
- X n='-n'
- X c=''
- Xelse
- X cat <<'EOM'
- X...using \c
- XEOM
- X n=''
- X c='\c'
- Xfi
- Xecho $n "Type carriage return to continue. Your cursor should be here-->$c"
- Xread ans
- Xrm -f .echotmp
- X
- X: now set up to do reads with possible shell escape and default assignment
- Xcat <<EOSC >myread
- Xcase "\$fastread" in
- Xyes) ans=''; echo " " ;;
- X*) ans='!';;
- Xesac
- Xwhile expr "X\$ans" : "X!" >/dev/null; do
- X read ans
- X case "\$ans" in
- X !)
- X sh
- X echo " "
- X echo $n "\$rp $c"
- X ;;
- X !*)
- X set \`expr "X\$ans" : "X!\(.*\)\$"\`
- X sh -c "\$*"
- X echo " "
- X echo $n "\$rp $c"
- X ;;
- X esac
- Xdone
- Xrp='Your answer:'
- Xcase "\$ans" in
- X'') ans="\$dflt";;
- Xesac
- XEOSC
- X
- X: general instructions
- Xcat <<EOH
- X
- XThis installation shell script will examine your system and ask you questions
- Xto determine how the $package package should be installed. If you get stuck
- Xon a question, you may use a ! shell escape to start a subshell or execute
- Xa command. Many of the questions will have default answers in square
- Xbrackets--typing carriage return will give you the default.
- X
- XOn some of the questions which ask for file or directory names you are
- Xallowed to use the ~name construct to specify the login directory belonging
- Xto "name", even if you don't have a shell which knows about that. Questions
- Xwhere this is allowed will be marked "(~name ok)".
- X
- XEOH
- Xrp="[Type carriage return to continue]"
- Xecho $n "$rp $c"
- X. myread
- Xcat <<EOH
- X
- XMuch effort has been expended to ensure that this shell script will run
- Xon any Unix system. If despite that it blows up on you, your best bet is
- Xto edit Configure and run it again. Also, let me (lwall@jpl-devvax.jpl.nasa.gov)
- Xknow how I blew it. If you can't run Configure for some reason, you'll have
- Xto generate a config.sh file by hand.
- X
- XThis installation script affects things in two ways: 1) it may do direct
- Xvariable substitutions on some of the files included in this kit, and
- X2) it builds a config.h file for inclusion in C programs. You may edit
- Xany of these files as the need arises after running this script.
- X
- XIf you make a mistake on a question, there is no easy way to back up to it
- Xcurrently. The easiest thing to do is to edit config.sh and rerun all the
- XSH files. Configure will offer to let you do this before it runs the SH files.
- X
- XEOH
- Xrp="[Type carriage return to continue]"
- Xecho $n "$rp $c"
- X. myread
- X
- X: get old answers, if there is a config file out there
- Xif test -f ../config.sh; then
- X echo " "
- X dflt=y
- X rp="I see a config.sh file. Did Configure make it on THIS system? [$dflt]"
- X echo $n "$rp $c"
- X . myread
- X case "$ans" in
- X n*) echo "OK, I'll ignore it.";;
- X *) echo "Fetching default answers from your old config.sh file..."
- X tmp="$n"
- X ans="$c"
- X . ../config.sh
- X n="$tmp"
- X c="$ans"
- X ;;
- X esac
- Xfi
- X
- X: find out where common programs are
- Xecho " "
- Xecho "Locating common programs..."
- Xcat <<EOSC >loc
- X$startsh
- Xcase \$# in
- X0) exit 1;;
- Xesac
- Xthing=\$1
- Xshift
- Xdflt=\$1
- Xshift
- Xfor dir in \$*; do
- X case "\$thing" in
- X .)
- X if test -d \$dir/\$thing; then
- X echo \$dir
- X exit 0
- X fi
- X ;;
- X *)
- X if test -f \$dir/\$thing; then
- X echo \$dir/\$thing
- X exit 0
- X elif test -f \$dir/\$thing.exe; then
- X : on Eunice apparently
- X echo \$dir/\$thing
- X exit 0
- X fi
- X ;;
- X esac
- Xdone
- Xecho \$dflt
- Xexit 1
- XEOSC
- Xchmod +x loc
- X$eunicefix loc
- Xloclist="
- Xexpr
- Xsed
- Xecho
- Xcat
- Xrm
- Xmv
- Xcp
- Xtr
- Xmkdir
- Xsort
- Xuniq
- Xgrep
- X"
- Xtrylist="
- Xtest
- Xegrep
- XMcc
- Xcpp
- X"
- Xfor file in $loclist; do
- X xxx=`loc $file $file $pth`
- X eval $file=$xxx
- X eval _$file=$xxx
- X case "$xxx" in
- X /*)
- X echo $file is in $xxx.
- X ;;
- X *)
- X echo "I don't know where $file is. I hope it's in everyone's PATH."
- X ;;
- X esac
- Xdone
- Xecho " "
- Xecho "Don't worry if any of the following aren't found..."
- Xans=offhand
- Xfor file in $trylist; do
- X xxx=`loc $file $file $pth`
- X eval $file=$xxx
- X eval _$file=$xxx
- X case "$xxx" in
- X /*)
- X echo $file is in $xxx.
- X ;;
- X *)
- X echo "I don't see $file out there, $ans."
- X ans=either
- X ;;
- X esac
- Xdone
- Xcase "$egrep" in
- Xegrep)
- X echo "Substituting grep for egrep."
- X egrep=$grep
- X ;;
- Xesac
- Xcase "$test" in
- Xtest)
- X echo "Hopefully test is built into your sh."
- X ;;
- X/bin/test)
- X echo " "
- X dflt=n
- X rp="Is your "'"'"test"'"'" built into sh? [$dflt] (OK to guess)"
- X echo $n "$rp $c"
- X . myread
- X case "$ans" in
- X y*) test=test ;;
- X esac
- X ;;
- X*)
- X test=test
- X ;;
- Xesac
- Xcase "$echo" in
- Xecho)
- X echo "Hopefully echo is built into your sh."
- X ;;
- X/bin/echo)
- X echo " "
- X echo "Checking compatibility between /bin/echo and builtin echo (if any)..."
- X $echo $n "hi there$c" >foo1
- X echo $n "hi there$c" >foo2
- X if cmp foo1 foo2 >/dev/null 2>&1; then
- X echo "They are compatible. In fact, they may be identical."
- X else
- X case "$n" in
- X '-n') n='' c='\c' ans='\c' ;;
- X *) n='-n' c='' ans='-n' ;;
- X esac
- X cat <<FOO
- XThey are not compatible! You are probably running ksh on a non-USG system.
- XI'll have to use /bin/echo instead of the builtin, since Bourne shell doesn't
- Xhave echo built in and we may have to run some Bourne shell scripts. That
- Xmeans I'll have to use $ans to suppress newlines now. Life is ridiculous.
- X
- XFOO
- X rp="Your cursor should be here-->"
- X $echo $n "$rp$c"
- X . myread
- X fi
- X $rm -f foo1 foo2
- X ;;
- X*)
- X : cross your fingers
- X echo=echo
- X ;;
- Xesac
- Xrmlist="$rmlist loc"
- X
- X: get list of predefined functions in a handy place
- Xecho " "
- Xif test -f /lib/libc.a; then
- X echo "Your C library is in /lib/libc.a. You're normal."
- X libc=/lib/libc.a
- Xelse
- X ans=`loc libc.a blurfl/dyick $libpth`
- X if test ! -f $ans; then
- X ans=`loc clib blurfl/dyick $libpth`
- X fi
- X if test ! -f $ans; then
- X ans=`loc libc blurfl/dyick $libpth`
- X fi
- X if test -f $ans; then
- X echo "Your C library is in $ans, of all places."
- X libc=$ans
- X else
- X if test -f "$libc"; then
- X echo "Your C library is in $libc, like you said before."
- X else
- X cat <<EOM
- X
- XI can't seem to find your C library. I've looked in the following places:
- X
- X $libpth
- X
- XNone of these seems to contain your C library. What is the full name
- XEOM
- X dflt=None
- X $echo $n "of your C library? $c"
- X rp='C library full name?'
- X . myread
- X libc="$ans"
- X fi
- X fi
- Xfi
- Xecho " "
- X$echo $n "Extracting names from $libc for later perusal...$c"
- Xnm $libc 2>/dev/null | sed -n -e 's/^.* T _//p' -e 's/^.* T //p' > libc.list
- Xif $contains '^printf$' libc.list >/dev/null 2>&1; then
- X echo "done"
- Xelse
- X nm $libc 2>/dev/null | sed -n -e 's/^.* D _//p' -e 's/^.* D //p' > libc.list
- X if $contains '^printf$' libc.list >/dev/null 2>&1; then
- X echo "done"
- X else
- X echo " "
- X echo "nm didn't seem to work right."
- X echo "Trying ar instead..."
- X if ar t $libc | sed -e 's/\.o$//' > libc.list; then
- X echo "Ok."
- X else
- X echo "That didn't work either. Giving up."
- X exit 1
- X fi
- X fi
- Xfi
- Xrmlist="$rmlist libc.list"
- X
- X: make some quick guesses about what we are up against
- Xecho " "
- X$echo $n "Hmm... $c"
- Xif $contains SIGTSTP /usr/include/signal.h >/dev/null 2>&1 ; then
- X echo "Looks kind of like a BSD system, but we'll see..."
- X echo exit 0 >bsd
- X echo exit 1 >usg
- X echo exit 1 >v7
- Xelif $contains '^fcntl$' libc.list >/dev/null 2>&1 ; then
- X echo "Looks kind of like a USG system, but we'll see..."
- X echo exit 1 >bsd
- X echo exit 0 >usg
- X echo exit 1 >v7
- Xelse
- X echo "Looks kind of like a version 7 system, but we'll see..."
- X echo exit 1 >bsd
- X echo exit 1 >usg
- X echo exit 0 >v7
- Xfi
- Xif $contains '^vmssystem$' libc.list >/dev/null 2>&1 ; then
- X cat <<'EOI'
- XThere is, however, a strange, musty smell in the air that reminds me of
- Xsomething...hmm...yes...I've got it...there's a VMS nearby, or I'm a Blit.
- XEOI
- X echo "exit 0" >eunice
- X eunicefix=unixtovms
- X d_eunice="$define"
- X: it so happens the Eunice I know will not run shell scripts in Unix format
- Xelse
- X echo " "
- X echo "Congratulations. You aren't running Eunice."
- X eunicefix=':'
- X d_eunice="$undef"
- X echo "exit 1" >eunice
- Xfi
- Xif test -f /xenix; then
- X echo "Actually, this looks more like a XENIX system..."
- X echo "exit 0" >xenix
- Xelse
- X echo " "
- X echo "It's not Xenix..."
- X echo "exit 1" >xenix
- Xfi
- Xchmod +x xenix
- X$eunicefix xenix
- Xif test -f /venix; then
- X echo "Actually, this looks more like a VENIX system..."
- X echo "exit 0" >venix
- Xelse
- X echo " "
- X if xenix; then
- X : null
- X else
- X echo "Nor is it Venix..."
- X fi
- X echo "exit 1" >venix
- Xfi
- Xchmod +x bsd usg v7 eunice venix
- X$eunicefix bsd usg v7 eunice venix
- Xrmlist="$rmlist bsd usg v7 eunice venix xenix"
- X
- X: see if sh knows # comments
- Xecho " "
- Xecho "Checking your sh to see if it knows about # comments..."
- Xif sh -c '#' >/dev/null 2>&1 ; then
- X echo "Your sh handles # comments correctly."
- X shsharp=true
- X spitshell=cat
- X echo " "
- X echo "Okay, let's see if #! works on this system..."
- X echo "#!/bin/echo hi" > try
- X $eunicefix try
- X chmod +x try
- X try > today
- X if $contains hi today >/dev/null 2>&1; then
- X echo "It does."
- X sharpbang='#!'
- X else
- X echo "#! /bin/echo hi" > try
- X $eunicefix try
- X chmod +x try
- X try > today
- X if test -s today; then
- X echo "It does."
- X sharpbang='#! '
- X else
- X echo "It doesn't."
- X sharpbang=': use '
- X fi
- X fi
- Xelse
- X echo "Your sh doesn't grok # comments--I will strip them later on."
- X shsharp=false
- X echo "exec grep -v '^#'" >spitshell
- X chmod +x spitshell
- X $eunicefix spitshell
- X spitshell=`pwd`/spitshell
- X echo "I presume that if # doesn't work, #! won't work either!"
- X sharpbang=': use '
- Xfi
- X
- X: figure out how to guarantee sh startup
- Xecho " "
- Xecho "Checking out how to guarantee sh startup..."
- Xstartsh=$sharpbang'/bin/sh'
- Xecho "Let's see if '$startsh' works..."
- Xcat >try <<EOSS
- X$startsh
- Xset abc
- Xtest "$?abc" != 1
- XEOSS
- X
- Xchmod +x try
- X$eunicefix try
- Xif try; then
- X echo "Yup, it does."
- Xelse
- X echo "Nope. You may have to fix up the shell scripts to make sure sh runs them."
- Xfi
- Xrm -f try today
- X
- X: see how we invoke the C preprocessor
- Xecho " "
- Xecho "Now, how can we feed standard input to your C preprocessor..."
- Xcat <<'EOT' >testcpp.c
- X#define ABC abc
- X#define XYZ xyz
- XABC.XYZ
- XEOT
- Xecho 'Maybe "'$cpp'" will work...'
- X$cpp <testcpp.c >testcpp.out 2>&1
- Xif $contains 'abc.xyz' testcpp.out >/dev/null 2>&1 ; then
- X echo "Yup, it does."
- X cppstdin="$cpp"
- X cppminus='';
- Xelse
- X echo 'Nope, maybe "'$cpp' -" will work...'
- X $cpp - <testcpp.c >testcpp.out 2>&1
- X if $contains 'abc.xyz' testcpp.out >/dev/null 2>&1 ; then
- X echo "Yup, it does."
- X cppstdin="$cpp"
- X cppminus='-';
- X else
- X echo 'No such luck...maybe "cc -E" will work...'
- X cc -E <testcpp.c >testcpp.out 2>&1
- X if $contains 'abc.xyz' testcpp.out >/dev/null 2>&1 ; then
- X echo "It works!"
- X cppstdin='cc -E'
- X cppminus='';
- X else
- X echo 'Nixed again...maybe "cc -E -" will work...'
- X cc -E - <testcpp.c >testcpp.out 2>&1
- X if $contains 'abc.xyz' testcpp.out >/dev/null 2>&1 ; then
- X echo "Hooray, it works! I was beginning to wonder."
- X cppstdin='cc -E'
- X cppminus='-';
- X else
- X echo 'Nope...maybe "cc -P" will work...'
- X cc -P <testcpp.c >testcpp.out 2>&1
- X if $contains 'abc.xyz' testcpp.out >/dev/null 2>&1 ; then
- X echo "Yup, that does."
- X cppstdin='cc -P'
- X cppminus='';
- X else
- X echo 'Nope...maybe "cc -P -" will work...'
- X cc -P - <testcpp.c >testcpp.out 2>&1
- X if $contains 'abc.xyz' testcpp.out >/dev/null 2>&1 ; then
- X echo "Yup, that does."
- X cppstdin='cc -P'
- X cppminus='-';
- X else
- X echo 'Hmm...perhaps you already told me...'
- X case "$cppstdin" in
- X '') ;;
- X *) $cppstdin $cppminus <testcpp.c >testcpp.out 2>&1;;
- X esac
- X if $contains 'abc.xyz' testcpp.out >/dev/null 2>&1 ; then
- X echo "Hooray, you did! I was beginning to wonder."
- X else
- X echo 'Uh-uh. Time to get fancy...'
- X echo 'Trying (cat >/tmp/$$.c; cc -E /tmp/$$.c; rm /tmp/$$.c)'
- X cppstdin='(cat >/tmp/$$.c; cc -E /tmp/$$.c; rm /tmp/$$.c)'
- X cppminus='';
- X $cppstdin <testcpp.c >testcpp.out 2>&1
- X if $contains 'abc.xyz' testcpp.out >/dev/null 2>&1 ; then
- X echo "Eureka!."
- X else
- X dflt=blurfl
- X $echo $n "No dice. I can't find a C preprocessor. Name one: $c"
- X rp='Name a C preprocessor:'
- X . myread
- X cppstdin="$ans"
- X $cppstdin <testcpp.c >testcpp.out 2>&1
- X if $contains 'abc.xyz' testcpp.out >/dev/null 2>&1 ; then
- X echo "OK, that will do."
- X else
- X echo "Sorry, I can't get that to work. Go find one."
- X exit 1
- X fi
- X fi
- X fi
- X fi
- X fi
- X fi
- X fi
- X fi
- Xfi
- Xrm -f testcpp.c testcpp.out
- X
- X: see if bcopy exists
- Xecho " "
- Xif $contains '^bcopy$' libc.list >/dev/null 2>&1; then
- X echo 'bcopy() found.'
- X d_bcopy="$define"
- Xelse
- X echo 'bcopy() not found.'
- X d_bcopy="$undef"
- Xfi
- X
- X: see if sprintf is declared as int or pointer to char
- Xecho " "
- Xcat >.ucbsprf.c <<'EOF'
- Xmain() { char buf[10]; exit((unsigned long)sprintf(buf,"%s","foo") > 10L); }
- XEOF
- Xif cc .ucbsprf.c -o .ucbsprf >/dev/null 2>&1 && .ucbsprf; then
- X echo "Your sprintf() returns (int)."
- X d_charsprf="$undef"
- Xelse
- X echo "Your sprintf() returns (char*)."
- X d_charsprf="$define"
- Xfi
- X/bin/rm -f .ucbsprf.c .ucbsprf
- X
- X: see if crypt exists
- Xecho " "
- Xif $contains '^crypt$' libc.list >/dev/null 2>&1; then
- X echo 'crypt() found.'
- X d_crypt="$define"
- Xelse
- X echo 'crypt() not found.'
- X d_crypt="$undef"
- Xfi
- X
- X: see if fchmod exists
- Xecho " "
- Xif $contains '^fchmod$' libc.list >/dev/null 2>&1; then
- X echo 'fchmod() found.'
- X d_fchmod="$define"
- Xelse
- X echo 'fchmod() not found.'
- X d_fchmod="$undef"
- Xfi
- X
- X: see if fchown exists
- Xecho " "
- Xif $contains '^fchown$' libc.list >/dev/null 2>&1; then
- X echo 'fchown() found.'
- X d_fchown="$define"
- Xelse
- X echo 'fchown() not found.'
- X d_fchown="$undef"
- Xfi
- X
- X: see if getgroups exists
- Xecho " "
- Xif $contains '^getgroups$' libc.list >/dev/null 2>&1; then
- X echo 'getgroups() found.'
- X d_getgrps="$define"
- Xelse
- X echo 'getgroups() not found.'
- X d_getgrps="$undef"
- Xfi
- X
- X: index or strcpy
- Xecho " "
- Xcase "$d_index" in
- Xn) dflt=n;;
- X*) dflt=y;;
- Xesac
- Xif $contains '^index$' libc.list >/dev/null 2>&1 ; then
- X if $contains '^strchr$' libc.list >/dev/null 2>&1 ; then
- X echo "Your system has both index() and strchr(). Shall I use"
- X rp="index() rather than strchr()? [$dflt]"
- X $echo $n "$rp $c"
- X . myread
- X case "$ans" in
- X n*) d_index="$define" ;;
- X *) d_index="$undef" ;;
- X esac
- X else
- X d_index="$undef"
- X echo "index() found."
- X fi
- Xelse
- X if $contains '^strchr$' libc.list >/dev/null 2>&1 ; then
- X d_index="$define"
- X echo "strchr() found."
- X else
- X echo "No index() or strchr() found!"
- X d_index="$undef"
- X fi
- Xfi
- X
- X: see if killpg exists
- Xecho " "
- Xif $contains '^killpg$' libc.list >/dev/null 2>&1; then
- X echo 'killpg() found.'
- X d_killpg="$define"
- Xelse
- X echo 'killpg() not found.'
- X d_killpg="$undef"
- Xfi
- X
- X: see if memcpy exists
- Xecho " "
- Xif $contains '^memcpy$' libc.list >/dev/null 2>&1; then
- X echo 'memcpy() found.'
- X d_memcpy="$define"
- Xelse
- X echo 'memcpy() not found.'
- X d_memcpy="$undef"
- Xfi
- X
- X: see if rename exists
- Xecho " "
- Xif $contains '^rename$' libc.list >/dev/null 2>&1; then
- X echo 'rename() found.'
- X d_rename="$define"
- Xelse
- X echo 'rename() not found.'
- X d_rename="$undef"
- Xfi
- X
- X: see if setegid exists
- Xecho " "
- Xif $contains '^setegid$' libc.list >/dev/null 2>&1; then
- X echo 'setegid() found.'
- X d_setegid="$define"
- Xelse
- X echo 'setegid() not found.'
- X d_setegid="$undef"
- Xfi
- X
- X: see if seteuid exists
- Xecho " "
- Xif $contains '^seteuid$' libc.list >/dev/null 2>&1; then
- X echo 'seteuid() found.'
- X d_seteuid="$define"
- Xelse
- X echo 'seteuid() not found.'
- X d_seteuid="$undef"
- Xfi
- X
- X: see if setrgid exists
- Xecho " "
- Xif $contains '^setrgid$' libc.list >/dev/null 2>&1; then
- X echo 'setrgid() found.'
- X d_setrgid="$define"
- Xelse
- X echo 'setrgid() not found.'
- X d_setrgid="$undef"
- Xfi
- X
- X: see if setruid exists
- Xecho " "
- Xif $contains '^setruid$' libc.list >/dev/null 2>&1; then
- X echo 'setruid() found.'
- X d_setruid="$define"
- Xelse
- X echo 'setruid() not found.'
- X d_setruid="$undef"
- Xfi
- X
- X: see if stat knows about block sizes
- Xecho " "
- Xif $contains 'st_blocks;' /usr/include/sys/stat.h >/dev/null 2>&1 ; then
- X if $contains 'st_blksize;' /usr/include/sys/stat.h >/dev/null 2>&1 ; then
- X echo "Your stat knows about block sizes."
- X d_statblks="$define"
- X else
- X echo "Your stat doesn't know about block sizes."
- X d_statblks="$undef"
- X fi
- Xelse
- X echo "Your stat doesn't know about block sizes."
- X d_statblks="$undef"
- Xfi
- X
- X: see if stdio is really std
- Xecho " "
- Xif $contains 'char.*_ptr;' /usr/include/stdio.h >/dev/null 2>&1 ; then
- X if $contains '_cnt;' /usr/include/stdio.h >/dev/null 2>&1 ; then
- X echo "Your stdio is pretty std."
- X d_stdstdio="$define"
- X else
- X echo "Your stdio isn't very std."
- X d_stdstdio="$undef"
- X fi
- Xelse
- X echo "Your stdio isn't very std."
- X d_stdstdio="$undef"
- Xfi
- X
- X: see if strcspn exists
- Xecho " "
- Xif $contains '^strcspn$' libc.list >/dev/null 2>&1; then
- X echo 'strcspn() found.'
- X d_strcspn="$define"
- Xelse
- X echo 'strcspn() not found.'
- X d_strcspn="$undef"
- Xfi
- X
- X: check for structure copying
- Xecho " "
- Xecho "Checking to see if your C compiler can copy structs..."
- X$cat >try.c <<'EOCP'
- Xmain()
- X{
- X struct blurfl {
- X int dyick;
- X } foo, bar;
- X
- X foo = bar;
- X}
- XEOCP
- Xif cc -c try.c >/dev/null 2>&1 ; then
- X d_strctcpy="$define"
- X echo "Yup, it can."
- Xelse
- X d_strctcpy="$undef"
- X echo "Nope, it can't."
- Xfi
- X$rm -f try.*
- X
- X: see if symlink exists
- Xecho " "
- Xif $contains '^symlink$' libc.list >/dev/null 2>&1; then
- X echo 'symlink() found.'
- X d_symlink="$define"
- Xelse
- X echo 'symlink() not found.'
- X d_symlink="$undef"
- Xfi
- X
- X: see if struct tm is defined in sys/time.h
- Xecho " "
- Xif $contains 'struct tm' /usr/include/time.h >/dev/null 2>&1 ; then
- X echo "You have struct tm defined in <time.h> rather than <sys/time.h>."
- X d_tminsys="$undef"
- Xelse
- X echo "You have struct tm defined in <sys/time.h> rather than <time.h>."
- X d_tminsys="$define"
- Xfi
- X
- X: see if there is a vfork
- Xecho " "
- Xif $contains '^vfork$' libc.list >/dev/null 2>&1 ; then
- X echo "vfork() found."
- X d_vfork="$undef"
- Xelse
- X echo "No vfork() found--will use fork() instead."
- X d_vfork="$define"
- Xfi
- X
- X: see if signal is declared as pointer to function returning int or void
- Xecho " "
- Xif $contains 'void.*signal' /usr/include/signal.h >/dev/null 2>&1 ; then
- X echo "You have void (*signal())() instead of int."
- X d_voidsig="$define"
- Xelse
- X echo "You have int (*signal())() instead of void."
- X d_voidsig="$undef"
- Xfi
- X
- X: check for void type
- Xecho " "
- X$cat <<EOM
- XChecking to see how well your C compiler groks the void type...
- X
- X Support flag bits are:
- X 1: basic void declarations.
- X 2: arrays of pointers to functions returning void.
- X 4: operations between pointers to and addresses of void functions.
- X
- XEOM
- Xcase "$voidflags" in
- X'')
- X $cat >try.c <<'EOCP'
- X#if TRY & 1
- Xvoid main() {
- X#else
- Xmain() {
- X#endif
- X extern void *moo();
- X void *(*goo)();
- X#if TRY & 2
- X void (*foo[10])();
- X#endif
- X
- X#if TRY & 4
- X if(*goo == moo) {
- X exit(0);
- X }
- X#endif
- X exit(0);
- X}
- XEOCP
- X if cc -S -DTRY=7 try.c >.out 2>&1 ; then
- X voidflags=7
- X echo "It appears to support void fully."
- X if $contains warning .out >/dev/null 2>&1; then
- X echo "However, you might get some warnings that look like this:"
- X $cat .out
- X fi
- X else
- X echo "Hmm, you compiler has some difficulty with void. Checking further..."
- X if cc -S -DTRY=1 try.c >/dev/null 2>&1 ; then
- X echo "It supports 1..."
- X if cc -S -DTRY=3 try.c >/dev/null 2>&1 ; then
- X voidflags=3
- X echo "And it supports 2 but not 4."
- X else
- X echo "It doesn't support 2..."
- X if cc -S -DTRY=3 try.c >/dev/null 2>&1 ; then
- X voidflags=5
- X echo "But it supports 4."
- X else
- X voidflags=1
- X echo "And it doesn't support 4."
- X fi
- X fi
- X else
- X echo "There is no support at all for void."
- X voidflags=0
- X fi
- X fi
- Xesac
- Xdflt="$voidflags";
- Xrp="Your void support flags add up to what? [$dflt]"
- X$echo $n "$rp $c"
- X. myread
- Xvoidflags="$ans"
- X$rm -f try.* .out
- X
- X: see what type gids are declared as in the kernel
- Xcase "$gidtype" in
- X'')
- X if $contains 'gid_t;' /usr/include/sys/types.h >/dev/null 2>&1 ; then
- X dflt='gid_t';
- X else
- X set `grep 'groups\[NGROUPS\];' /usr/include/sys/user.h 2>/dev/null` unsigned short
- X case $1 in
- X unsigned) dflt="$1 $2" ;;
- X *) dflt="$1" ;;
- X esac
- X fi
- X ;;
- X*) dflt="$gidtype"
- X ;;
- Xesac
- Xcont=true
- Xecho " "
- Xrp="What type are group ids on this system declared as? [$dflt]"
- X$echo $n "$rp $c"
- X. myread
- Xgidtype="$ans"
- X
- X: set up shell script to do ~ expansion
- Xcat >filexp <<EOSS
- X$startsh
- X: expand filename
- Xcase "\$1" in
- X ~/*|~)
- X echo \$1 | $sed "s|~|\${HOME-\$LOGDIR}|"
- X ;;
- X ~*)
- X if $test -f /bin/csh; then
- X /bin/csh -f -c "glob \$1"
- X echo ""
- X else
- X name=\`$expr x\$1 : '..\([^/]*\)'\`
- X dir=\`$sed -n -e "/^\${name}:/{s/^[^:]*:[^:]*:[^:]*:[^:]*:[^:]*:\([^:]*\).*"'\$'"/\1/" -e p -e q -e '}' </etc/passwd\`
- X if $test ! -d "\$dir"; then
- X me=\`basename \$0\`
- X echo "\$me: can't locate home directory for: \$name" >&2
- X exit 1
- X fi
- X case "\$1" in
- X */*)
- X echo \$dir/\`$expr x\$1 : '..[^/]*/\(.*\)'\`
- X ;;
- X *)
- X echo \$dir
- X ;;
- X esac
- X fi
- X ;;
- X*)
- X echo \$1
- X ;;
- Xesac
- XEOSS
- Xchmod +x filexp
- X$eunicefix filexp
- X
- X: determine where private executables go
- Xcase "$privlib" in
- X'')
- X dflt=/usr/lib/perl
- X test -d /usr/local/lib && dflt=/usr/local/lib/perl
- X ;;
- X*) dflt="$privlib"
- X ;;
- Xesac
- X$cat <<EOM
- X
- XThe perl package has some perl subroutine libraries that should be put in
- Xa directory that is accessible by everyone. Where do you want to put these
- XEOM
- X$echo $n "libraries? [$dflt] $c"
- Xrp="Put perl libraries where? [$dflt]"
- X. myread
- Xprivlib=`filexp $ans`
- X
- X: see what type of char stdio uses.
- Xecho " "
- Xif $contains 'unsigned.*char.*_ptr;' /usr/include/stdio.h >/dev/null 2>&1 ; then
- X echo "Your stdio uses unsigned chars."
- X stdchar="unsigned char"
- Xelse
- X echo "Your stdio uses signed chars."
- X stdchar="char"
- Xfi
- X
- X: see what type uids are declared as in the kernel
- Xcase "$uidtype" in
- X'')
- X if $contains 'uid_t;' /usr/include/sys/types.h >/dev/null 2>&1 ; then
- X dflt='uid_t';
- X else
- X set `grep '_ruid;' /usr/include/sys/user.h 2>/dev/null` unsigned short
- X case $1 in
- X unsigned) dflt="$1 $2" ;;
- X *) dflt="$1" ;;
- X esac
- X fi
- X ;;
- X*) dflt="$uidtype"
- X ;;
- Xesac
- Xcont=true
- Xecho " "
- Xrp="What type are user ids on this system declared as? [$dflt]"
- X$echo $n "$rp $c"
- X. myread
- Xuidtype="$ans"
- X
- X: preserve RCS keywords in files with variable substitution, grrr
- XLog='$Log'
- XHeader='$Header'
- X
- X: determine where public executables go
- Xcase "$bin" in
- X'')
- X dflt=`loc . /bin /usr/local/bin /usr/lbin /usr/local /usr/bin`
- X ;;
- X*) dflt="$bin"
- X ;;
- Xesac
- Xcont=true
- Xwhile $test "$cont" ; do
- X echo " "
- X rp="Where do you want to put the public executables? [$dflt]"
- X $echo $n "$rp $c"
- X . myread
- X bin="$ans"
- X bin=`filexp $bin`
- X if test -d $bin; then
- X cont=''
- X else
- X dflt=n
- X rp="Directory $bin doesn't exist. Use that name anyway? [$dflt]"
- X $echo $n "$rp $c"
- X . myread
- X dflt=''
- X case "$ans" in
- X y*) cont='';;
- X esac
- X fi
- Xdone
- X
- X: determine where manual pages go
- Xcase "$mansrc" in
- X'')
- X dflt=`loc . /usr/man/man1 /usr/man/mann /usr/man/local/man1 /usr/man/u_man/man1 /usr/man/man1`
- X ;;
- X*) dflt="$mansrc"
- X ;;
- Xesac
- Xcont=true
- Xwhile $test "$cont" ; do
- X echo " "
- X rp="Where do the manual pages (source) go? [$dflt]"
- X $echo $n "$rp $c"
- X . myread
- X mansrc=`filexp "$ans"`
- X if test -d $mansrc; then
- X cont=''
- X else
- X dflt=n
- X rp="Directory $mansrc doesn't exist. Use that name anyway? [$dflt]"
- X $echo $n "$rp $c"
- X . myread
- X dflt=''
- X case "$ans" in
- X y*) cont='';;
- X esac
- X fi
- Xdone
- Xcase "$mansrc" in
- X*l)
- X manext=l
- X ;;
- X*n)
- X manext=n
- X ;;
- X*C)
- X manext=C
- X ;;
- X*)
- X manext=1
- X ;;
- Xesac
- X
- X: get C preprocessor symbols handy
- Xecho " "
- Xecho $attrlist | $tr '[ - ]' '[\012-\012]' >Cppsym.know
- X$cat <<EOSS >Cppsym
- X$startsh
- Xcase "\$1" in
- X-l) list=true
- X shift
- X ;;
- Xesac
- Xunknown=''
- Xcase "\$list\$#" in
- X1|2)
- X for sym do
- X if $contains "^\$1$" Cppsym.true >/dev/null 2>&1; then
- X exit 0
- X elif $contains "^\$1$" Cppsym.know >/dev/null 2>&1; then
- X :
- X else
- X unknown="\$unknown \$sym"
- X fi
- X done
- X set X \$unknown
- X shift
- X ;;
- Xesac
- Xcase \$# in
- X0) exit 1;;
- Xesac
- Xecho \$* | $tr '[ - ]' '[\012-\012]' | $sed -e 's/\(.*\)/\\
- X#ifdef \1\\
- Xexit 0; _ _ _ _\1\\ \1\\
- X#endif\\
- X/' >/tmp/Cppsym\$\$
- Xecho exit 1 >>/tmp/Cppsym\$\$
- X$cppstdin $cppminus </tmp/Cppsym\$\$ >/tmp/Cppsym2\$\$
- Xcase "\$list" in
- Xtrue) awk 'NF > 5 {print substr(\$6,2,100)}' </tmp/Cppsym2\$\$ ;;
- X*)
- X sh /tmp/Cppsym2\$\$
- X status=\$?
- X ;;
- Xesac
- X$rm -f /tmp/Cppsym\$\$ /tmp/Cppsym2\$\$
- Xexit \$status
- XEOSS
- Xchmod +x Cppsym
- X$eunicefix Cppsym
- Xecho "Your C preprocessor defines the following symbols:"
- XCppsym -l $attrlist >Cppsym.true
- Xcat Cppsym.true
- Xrmlist="$rmlist Cppsym Cppsym.know Cppsym.true"
- X
- X: see what memory models we can support
- Xcase "$models" in
- X'')
- X if Cppsym pdp11; then
- X dflt='unsplit split'
- X else
- X ans=`loc . X /lib/small /lib/large /usr/lib/small /usr/lib/large /lib/medium /usr/lib/medium /lib/huge`
- X case "$ans" in
- X X) dflt='none';;
- X *) if $test -d /lib/small || $test -d /usr/lib/small; then
- X dflt='small'
- X else
- X dflt=''
- X fi
- X if $test -d /lib/medium || $test -d /usr/lib/medium; then
- X dflt="$dflt medium"
- X fi
- X if $test -d /lib/large || $test -d /usr/lib/large; then
- X dflt="$dflt large"
- X fi
- X if $test -d /lib/huge || $test -d /usr/lib/huge; then
- X dflt="$dflt huge"
- X fi
- X esac
- X fi
- X ;;
- X*) dflt="$models" ;;
- Xesac
- X$cat <<EOM
- X
- XSome systems have different model sizes. On most systems they are called
- Xsmall, medium, large, and huge. On the PDP11 they are called unsplit and
- Xsplit. If your system doesn't support different memory models, say "none".
- XIf you wish to force everything to one memory model, say "none" here and
- Xput the appropriate flags later when it asks you for other cc and ld flags.
- XVenix systems may wish to put "none" and let the compiler figure things out.
- X(In the following question multiple model names should be space separated.)
- X
- XEOM
- Xrp="Which models are supported? [$dflt]"
- X$echo $n "$rp $c"
- X. myread
- Xmodels="$ans"
- X
- Xcase "$models" in
- Xnone)
- X small=''
- X medium=''
- X large=''
- X huge=''
- X unsplit=''
- X split=''
- X ;;
- X*split)
- X case "$split" in
- X '')
- X if $contains '-i' $mansrc/ld.1 >/dev/null 2>&1 || \
- X $contains '-i' $mansrc/cc.1 >/dev/null 2>&1; then
- X dflt='-i'
- X else
- X dflt='none'
- X fi
- X ;;
- X *) dflt="$split";;
- X esac
- X rp="What flag indicates separate I and D space? [$dflt]"
- X $echo $n "$rp $c"
- X . myread
- X case "$ans" in
- X none) ans='';;
- X esac
- X split="$ans"
- X unsplit=''
- X ;;
- X*large*|*small*|*medium*|*huge*)
- X case "$model" in
- X *large*)
- X case "$large" in
- X '') dflt='-Ml';;
- X *) dflt="$large";;
- X esac
- X rp="What flag indicates large model? [$dflt]"
- X $echo $n "$rp $c"
- X . myread
- X case "$ans" in
- X none) ans='';
- X esac
- X large="$ans"
- X ;;
- X *) large='';;
- X esac
- X case "$model" in
- X *huge*)
- X case "$huge" in
- X '') dflt='-Mh';;
- X *) dflt="$huge";;
- X esac
- X rp="What flag indicates huge model? [$dflt]"
- X $echo $n "$rp $c"
- X . myread
- X case "$ans" in
- X none) ans='';
- X esac
- X huge="$ans"
- X ;;
- X *) huge="$large";;
- X esac
- X case "$model" in
- X *medium*)
- X case "$medium" in
- X '') dflt='-Mm';;
- X *) dflt="$medium";;
- X esac
- X rp="What flag indicates medium model? [$dflt]"
- X $echo $n "$rp $c"
- X . myread
- X case "$ans" in
- X none) ans='';
- X esac
- X medium="$ans"
- X ;;
- X *) medium="$large";;
- X esac
- X case "$model" in
- X *small*)
- X case "$small" in
- X '') dflt='none';;
- X *) dflt="$small";;
- X esac
- X rp="What flag indicates small model? [$dflt]"
- X $echo $n "$rp $c"
- X . myread
- X case "$ans" in
- X none) ans='';
- X esac
- X small="$ans"
- X ;;
- X *) small='';;
- X esac
- X ;;
- X*)
- X echo "Unrecognized memory models--you may have to edit Makefile.SH"
- X ;;
- Xesac
- X
- Xcase "$ccflags" in
- X'') dflt='none';;
- X*) dflt="$ccflags";;
- Xesac
- Xecho " "
- Xrp="Any additional cc flags? [$dflt]"
- X$echo $n "$rp $c"
- X. myread
- Xcase "$ans" in
- Xnone) ans='';
- Xesac
- Xccflags="$ans"
- X
- Xcase "$ldflags" in
- X'') if venix; then
- X dflt='-i -z'
- X else
- X dflt='none'
- X fi
- X ;;
- X*) dflt="$ldflags";;
- Xesac
- Xecho " "
- Xrp="Any additional ld flags? [$dflt]"
- X$echo $n "$rp $c"
- X. myread
- Xcase "$ans" in
- Xnone) ans='';
- Xesac
- Xldflags="$ans"
- X
- X: see if we need a special compiler
- Xecho " "
- Xif usg; then
- X case "$cc" in
- X '')
- X case "$Mcc" in
- X /*) dflt='Mcc'
- X ;;
- X *)
- X case "$large" in
- X -M*)
- X dflt='cc'
- X ;;
- X *)
- X if $contains '\-M' $mansrc/cc.1 >/dev/null 2>&1 ; then
- X dflt='cc -M'
- X else
- X dflt='cc'
- X fi
- X ;;
- X esac
- X ;;
- X esac
- X ;;
- X *) dflt="$cc";;
- X esac
- X $cat <<'EOM'
- X
- XOn some systems the default C compiler will not resolve multiple global
- Xreferences that happen to have the same name. On some such systems the
- X"Mcc" command may be used to force these to be resolved. On other systems
- Xa "cc -M" command is required. (Note that the -M flag on other systems
- Xindicates a memory model to use!) What command will force resolution on
- XEOM
- X $echo $n "this system? [$dflt] $c"
- X rp="Command to resolve multiple refs? [$dflt]"
- X . myread
- X cc="$ans"
- Xelse
- X echo "Not a USG system--assuming cc can resolve multiple definitions."
- X cc=cc
- Xfi
- X
- X: see if we should include -lnm
- Xecho " "
- Xif $test -r /usr/lib/libnm.a || $test -r /usr/local/lib/libnm.a ; then
- X echo "New math library found."
- X libnm='-lnm'
- Xelse
- X ans=`loc libnm.a x $libpth`
- X case "$ans" in
- X x)
- X echo "No nm library found--the normal math library will have to do."
- X libnm=''
- X ;;
- X *)
- X echo "New math library found in $ans."
- X libnm="$ans"
- X ;;
- X esac
- Xfi
- X
- X: determine which malloc to compile in
- Xecho " "
- Xcase "$usemymalloc" in
- X'')
- X if bsd || v7; then
- X dflt='y'
- X else
- X dflt='n'
- X fi
- X ;;
- X*) dflt="$usemymalloc"
- X ;;
- Xesac
- Xrp="Do you wish to attempt to use the malloc that comes with $package? [$dflt]"
- X$echo $n "$rp $c"
- X. myread
- Xcase "$ans" in
- X'') ans=$dflt;;
- Xesac
- Xusemymalloc="$ans"
- Xcase "$ans" in
- Xy*) mallocsrc='malloc.c'; mallocobj='malloc.o';;
- X*) mallocsrc=''; mallocobj='';;
- Xesac
- X
- Xecho " "
- Xecho "End of configuration questions."
- Xecho " "
- X
- X: create config.sh file
- Xecho " "
- Xif test -d ../UU; then
- X cd ..
- Xfi
- Xecho "Creating config.sh..."
- X$spitshell <<EOT >config.sh
- X$startsh
- X# config.sh
- X# This file was produced by running the Configure script.
- X
- Xd_eunice='$d_eunice'
- Xeunicefix='$eunicefix'
- Xdefine='$define'
- Xloclist='$loclist'
- Xexpr='$expr'
- Xsed='$sed'
- Xecho='$echo'
- Xcat='$cat'
- Xrm='$rm'
- Xmv='$mv'
- Xcp='$cp'
- Xtail='$tail'
- Xtr='$tr'
- Xmkdir='$mkdir'
- Xsort='$sort'
- Xuniq='$uniq'
- Xgrep='$grep'
- Xtrylist='$trylist'
- Xtest='$test'
- Xinews='$inews'
- Xegrep='$egrep'
- Xmore='$more'
- Xpg='$pg'
- XMcc='$Mcc'
- Xvi='$vi'
- Xmailx='$mailx'
- Xmail='$mail'
- Xcpp='$cpp'
- XLog='$Log'
- XHeader='$Header'
- Xbin='$bin'
- Xcc='$cc'
- Xcontains='$contains'
- Xcppstdin='$cppstdin'
- Xcppminus='$cppminus'
- Xd_bcopy='$d_bcopy'
- Xd_charsprf='$d_charsprf'
- Xd_crypt='$d_crypt'
- Xd_fchmod='$d_fchmod'
- Xd_fchown='$d_fchown'
- Xd_getgrps='$d_getgrps'
- Xd_index='$d_index'
- Xd_killpg='$d_killpg'
- Xd_memcpy='$d_memcpy'
- Xd_rename='$d_rename'
- Xd_setegid='$d_setegid'
- Xd_seteuid='$d_seteuid'
- Xd_setrgid='$d_setrgid'
- Xd_setruid='$d_setruid'
- Xd_statblks='$d_statblks'
- Xd_stdstdio='$d_stdstdio'
- Xd_strcspn='$d_strcspn'
- Xd_strctcpy='$d_strctcpy'
- Xd_symlink='$d_symlink'
- Xd_tminsys='$d_tminsys'
- Xd_vfork='$d_vfork'
- Xd_voidsig='$d_voidsig'
- Xgidtype='$gidtype'
- Xlibc='$libc'
- Xlibnm='$libnm'
- Xmallocsrc='$mallocsrc'
- Xmallocobj='$mallocobj'
- Xusemymalloc='$usemymalloc'
- Xmansrc='$mansrc'
- Xmanext='$manext'
- Xmodels='$models'
- Xsplit='$split'
- Xsmall='$small'
- Xmedium='$medium'
- Xlarge='$large'
- Xhuge='$huge'
- Xccflags='$ccflags'
- Xldflags='$ldflags'
- Xn='$n'
- Xc='$c'
- Xpackage='$package'
- Xspitshell='$spitshell'
- Xshsharp='$shsharp'
- Xsharpbang='$sharpbang'
- Xstartsh='$startsh'
- Xstdchar='$stdchar'
- Xuidtype='$uidtype'
- Xvoidflags='$voidflags'
- Xdefvoidused='$defvoidused'
- Xprivlib='$privlib'
- XCONFIG=true
- XEOT
- X
- XCONFIG=true
- X
- Xecho " "
- Xdflt=''
- Xfastread=''
- Xecho "If you didn't make any mistakes, then just type a carriage return here."
- Xrp="If you need to edit config.sh, do it as a shell escape here:"
- X$echo $n "$rp $c"
- X. UU/myread
- Xcase "$ans" in
- X'') ;;
- X*) : in case they cannot read
- X eval $ans;;
- Xesac
- X. ./config.sh
- X
- Xecho " "
- Xecho "Doing variable substitutions on .SH files..."
- Xset x `awk '{print $1}' <MANIFEST | $grep '\.SH'`
- Xshift
- Xcase $# in
- X0) set x *.SH; shift;;
- Xesac
- Xif test ! -f $1; then
- X shift
- Xfi
- Xfor file in $*; do
- X case "$file" in
- X */*)
- X dir=`$expr X$file : 'X\(.*\)/'`
- X file=`$expr X$file : 'X.*/\(.*\)'`
- X (cd $dir && . $file)
- X ;;
- X *)
- X . $file
- X ;;
- X esac
- Xdone
- Xif test -f config.h.SH; then
- X if test ! -f config.h; then
- X : oops, they left it out of MANIFEST, probably, so do it anyway.
- X . config.h.SH
- X fi
- Xfi
- X
- Xif $contains '^depend:' Makefile >/dev/null 2>&1; then
- X dflt=n
- X $cat <<EOM
- X
- XNow you need to generate make dependencies by running "make depend".
- XYou might prefer to run it in background: "make depend > makedepend.out &"
- XIt can take a while, so you might not want to run it right now.
- X
- XEOM
- X rp="Run make depend now? [$dflt]"
- X $echo $n "$rp $c"
- X . UU/myread
- X case "$ans" in
- X y*) make depend
- X echo "Now you must run a make."
- X ;;
- X *) echo "You must run 'make depend' then 'make'."
- X ;;
- X esac
- Xelif test -f Makefile; then
- X echo " "
- X echo "Now you must run a make."
- Xelse
- X echo "Done."
- Xfi
- X
- X$rm -f kit*isdone
- Xcd UU && $rm -f $rmlist
- X: end of Configure
- !STUFFY!FUNK!
- echo Extracting stab.c
- sed >stab.c <<'!STUFFY!FUNK!' -e 's/X//'
- X/* $Header: stab.c,v 2.0 88/06/05 00:11:01 root Exp $
- X *
- X * $Log: stab.c,v $
- X * Revision 2.0 88/06/05 00:11:01 root
- X * Baseline version 2.0.
- X *
- X */
- X
- X#include "EXTERN.h"
- X#include "perl.h"
- X
- X#include <signal.h>
- X
- Xstatic char *sig_name[] = {
- X "",
- X "HUP",
- X "INT",
- X "QUIT",
- X "ILL",
- X "TRAP",
- X "IOT",
- X "EMT",
- X "FPE",
- X "KILL",
- X "BUS",
- X "SEGV",
- X "SYS",
- X "PIPE",
- X "ALRM",
- X "TERM",
- X "???"
- X#ifdef SIGTSTP
- X ,"STOP",
- X "TSTP",
- X "CONT",
- X "CHLD",
- X "TTIN",
- X "TTOU",
- X "TINT",
- X "XCPU",
- X "XFSZ"
- X#ifdef SIGPROF
- X ,"VTALARM",
- X "PROF"
- X#ifdef SIGWINCH
- X ,"WINCH"
- X#ifdef SIGLOST
- X ,"LOST"
- X#ifdef SIGUSR1
- X ,"USR1"
- X#endif
- X#ifdef SIGUSR2
- X ,"USR2"
- X#endif /* SIGUSR2 */
- X#endif /* SIGLOST */
- X#endif /* SIGWINCH */
- X#endif /* SIGPROF */
- X#endif /* SIGTSTP */
- X ,0
- X };
- X
- Xextern int errno;
- Xextern int sys_nerr;
- Xextern char *sys_errlist[];
- X
- XSTR *
- Xstab_str(stab)
- XSTAB *stab;
- X{
- X register int paren;
- X register char *s;
- X register int i;
- X
- X switch (*stab->stab_name) {
- X case '0': case '1': case '2': case '3': case '4':
- X case '5': case '6': case '7': case '8': case '9': case '&':
- X if (curspat) {
- X paren = atoi(stab->stab_name);
- X getparen:
- X if (curspat->spat_regexp &&
- X paren <= curspat->spat_regexp->nparens &&
- X (s = curspat->spat_regexp->startp[paren]) ) {
- X i = curspat->spat_regexp->endp[paren] - s;
- X if (i >= 0)
- X str_nset(stab->stab_val,s,i);
- X else
- X str_nset(stab->stab_val,"",0);
- X }
- X else
- X str_nset(stab->stab_val,"",0);
- X }
- X break;
- X case '+':
- X if (curspat) {
- X paren = curspat->spat_regexp->lastparen;
- X goto getparen;
- X }
- X break;
- X case '.':
- X if (last_in_stab) {
- X str_numset(stab->stab_val,(double)last_in_stab->stab_io->lines);
- X }
- X break;
- X case '?':
- X str_numset(stab->stab_val,(double)statusvalue);
- X break;
- X case '^':
- X s = curoutstab->stab_io->top_name;
- X str_set(stab->stab_val,s);
- X break;
- X case '~':
- X s = curoutstab->stab_io->fmt_name;
- X str_set(stab->stab_val,s);
- X break;
- X case '=':
- X str_numset(stab->stab_val,(double)curoutstab->stab_io->page_len);
- X break;
- X case '-':
- X str_numset(stab->stab_val,(double)curoutstab->stab_io->lines_left);
- X break;
- X case '%':
- X str_numset(stab->stab_val,(double)curoutstab->stab_io->page);
- X break;
- X case '/':
- X *tokenbuf = record_separator;
- X tokenbuf[1] = '\0';
- X str_set(stab->stab_val,tokenbuf);
- X break;
- X case '[':
- X str_numset(stab->stab_val,(double)arybase);
- X break;
- X case '|':
- X str_numset(stab->stab_val,
- X (double)((curoutstab->stab_io->flags & IOF_FLUSH) != 0) );
- X break;
- X case ',':
- X str_set(stab->stab_val,ofs);
- X break;
- X case '\\':
- X str_set(stab->stab_val,ors);
- X break;
- X case '#':
- X str_set(stab->stab_val,ofmt);
- X break;
- X case '!':
- X str_numset(stab->stab_val, (double)errno);
- X str_set(stab->stab_val,
- X errno < 0 || errno > sys_nerr ? "(unknown)" : sys_errlist[errno]);
- X stab->stab_val->str_nok = 1; /* what a wonderful hack! */
- X break;
- X case '<':
- X str_numset(stab->stab_val,(double)uid);
- X break;
- X case '>':
- X str_numset(stab->stab_val,(double)euid);
- X break;
- X case '(':
- X s = tokenbuf;
- X sprintf(s,"%d",(int)getgid());
- X goto add_groups;
- X case ')':
- X s = tokenbuf;
- X sprintf(s,"%d",(int)getegid());
- X add_groups:
- X while (*s) s++;
- X#ifdef GETGROUPS
- X#ifndef NGROUPS
- X#define NGROUPS 32
- X#endif
- X {
- X GIDTYPE gary[NGROUPS];
- X
- X i = getgroups(NGROUPS,gary);
- X while (--i >= 0) {
- X sprintf(s," %ld", (long)gary[i]);
- X while (*s) s++;
- X }
- X }
- X#endif
- X str_set(stab->stab_val,tokenbuf);
- X break;
- X }
- X return stab->stab_val;
- X}
- X
- Xstabset(stab,str)
- Xregister STAB *stab;
- XSTR *str;
- X{
- X char *s;
- X int i;
- X int sighandler();
- X
- X if (stab->stab_flags & SF_VMAGIC) {
- X switch (stab->stab_name[0]) {
- X case '^':
- X safefree(curoutstab->stab_io->top_name);
- X curoutstab->stab_io->top_name = s = savestr(str_get(str));
- X curoutstab->stab_io->top_stab = stabent(s,TRUE);
- X break;
- X case '~':
- X safefree(curoutstab->stab_io->fmt_name);
- X curoutstab->stab_io->fmt_name = s = savestr(str_get(str));
- X curoutstab->stab_io->fmt_stab = stabent(s,TRUE);
- X break;
- X case '=':
- X curoutstab->stab_io->page_len = (long)str_gnum(str);
- X break;
- X case '-':
- X curoutstab->stab_io->lines_left = (long)str_gnum(str);
- X break;
- X case '%':
- X curoutstab->stab_io->page = (long)str_gnum(str);
- X break;
- X case '|':
- X curoutstab->stab_io->flags &= ~IOF_FLUSH;
- X if (str_gnum(str) != 0.0) {
- X curoutstab->stab_io->flags |= IOF_FLUSH;
- X }
- X break;
- X case '*':
- X multiline = (int)str_gnum(str) != 0;
- X break;
- X case '/':
- X record_separator = *str_get(str);
- X break;
- X case '\\':
- X if (ors)
- X safefree(ors);
- X ors = savestr(str_get(str));
- X break;
- X case ',':
- X if (ofs)
- X safefree(ofs);
- X ofs = savestr(str_get(str));
- X break;
- X case '#':
- X if (ofmt)
- X safefree(ofmt);
- X ofmt = savestr(str_get(str));
- X break;
- X case '[':
- X arybase = (int)str_gnum(str);
- X break;
- X case '?':
- X statusvalue = (unsigned short)str_gnum(str);
- X break;
- X case '!':
- X errno = (int)str_gnum(str); /* will anyone ever use this? */
- X break;
- X case '<':
- X#ifdef SETRUID
- X uid = (int)str_gnum(str);
- X if (setruid(uid) < 0)
- X uid = (int)getuid();
- X#else
- X fatal("setruid() not implemented");
- X#endif
- X break;
- X case '>':
- X#ifdef SETEUID
- X euid = (int)str_gnum(str);
- X if (seteuid(euid) < 0)
- X euid = (int)geteuid();
- X#else
- X fatal("seteuid() not implemented");
- X#endif
- X break;
- X case '(':
- X#ifdef SETRGID
- X setrgid((int)str_gnum(str));
- X#else
- X fatal("setrgid() not implemented");
- X#endif
- X break;
- X case ')':
- X#ifdef SETEGID
- X setegid((int)str_gnum(str));
- X#else
- X fatal("setegid() not implemented");
- X#endif
- X break;
- X case '.':
- X case '+':
- X case '&':
- X case '0':
- X case '1':
- X case '2':
- X case '3':
- X case '4':
- X case '5':
- X case '6':
- X case '7':
- X case '8':
- X case '9':
- X break; /* "read-only" registers */
- X }
- X }
- X else if (stab == envstab && envname) {
- X setenv(envname,str_get(str));
- X /* And you'll never guess what the dog had */
- X safefree(envname); /* in its mouth... */
- X envname = Nullch;
- X }
- X else if (stab == sigstab && signame) {
- X s = str_get(str);
- X i = whichsig(signame); /* ...no, a brick */
- X if (strEQ(s,"IGNORE"))
- X signal(i,SIG_IGN);
- X else if (strEQ(s,"DEFAULT") || !*s)
- X signal(i,SIG_DFL);
- X else
- X signal(i,sighandler);
- X safefree(signame);
- X signame = Nullch;
- X }
- X else if (stab->stab_array) {
- X afill(stab->stab_array, (int)str_gnum(str) - arybase);
- X }
- X}
- X
- Xwhichsig(sig)
- Xchar *sig;
- X{
- X register char **sigv;
- X
- X for (sigv = sig_name+1; *sigv; sigv++)
- X if (strEQ(sig,*sigv))
- X return sigv - sig_name;
- X return 0;
- X}
- X
- Xsighandler(sig)
- Xint sig;
- X{
- X STAB *stab;
- X ARRAY *savearray;
- X STR *str;
- X char *oldfile = filename;
- X int oldsave = savestack->ary_fill;
- X SUBR *sub;
- X
- X stab = stabent(str_get(hfetch(sigstab->stab_hash,sig_name[sig])),TRUE);
- X sub = stab->stab_sub;
- X if (!sub) {
- X if (dowarn)
- X warn("SIG%s handler \"%s\" not defined.\n",
- X sig_name[sig], stab->stab_name );
- X return;
- X }
- X savearray = defstab->stab_array;
- X defstab->stab_array = anew(defstab);
- X str = str_new(0);
- X str_set(str,sig_name[sig]);
- X apush(defstab->stab_array,str);
- X sub->depth++;
- X if (sub->depth >= 2) { /* save temporaries on recursion? */
- X if (sub->depth == 100 && dowarn)
- X warn("Deep recursion on subroutine \"%s\"",stab->stab_name);
- X savelist(sub->tosave->ary_array,sub->tosave->ary_fill);
- X }
- X filename = sub->filename;
- X
- X str = cmd_exec(sub->cmd); /* so do it already */
- X
- X sub->depth--; /* assuming no longjumps out of here */
- X afree(defstab->stab_array); /* put back old $_[] */
- X defstab->stab_array = savearray;
- X filename = oldfile;
- X if (savestack->ary_fill > oldsave)
- X restorelist(oldsave);
- X}
- X
- Xchar *
- Xreg_get(name)
- Xchar *name;
- X{
- X return STAB_GET(stabent(name,TRUE));
- X}
- X
- X#ifdef NOTUSED
- Xreg_set(name,value)
- Xchar *name;
- Xchar *value;
- X{
- X str_set(STAB_STR(stabent(name,TRUE)),value);
- X}
- X#endif
- X
- XSTAB *
- Xaadd(stab)
- Xregister STAB *stab;
- X{
- X if (!stab->stab_array)
- X stab->stab_array = anew(stab);
- X return stab;
- X}
- X
- XSTAB *
- Xhadd(stab)
- Xregister STAB *stab;
- X{
- X if (!stab->stab_hash)
- X stab->stab_hash = hnew();
- X return stab;
- X}
- X
- XSTAB *
- Xstabent(name,add)
- Xregister char *name;
- Xint add;
- X{
- X register STAB *stab;
- X
- X for (stab = stab_index[*name]; stab; stab = stab->stab_next) {
- X if (strEQ(name,stab->stab_name)) {
- X stab->stab_flags |= SF_MULTI; /* is okay, probably */
- X return stab;
- X }
- X }
- X
- X /* no entry--should we add one? */
- X
- X if (add) {
- X stab = (STAB *) safemalloc(sizeof(STAB));
- X bzero((char*)stab, sizeof(STAB));
- X stab->stab_name = savestr(name);
- X stab->stab_val = str_new(0);
- X stab->stab_next = stab_index[*name];
- X stab_index[*name] = stab;
- X return stab;
- X }
- X return Nullstab;
- X}
- X
- XSTIO *
- Xstio_new()
- X{
- X STIO *stio = (STIO *) safemalloc(sizeof(STIO));
- X
- X bzero((char*)stio, sizeof(STIO));
- X stio->page_len = 60;
- X return stio;
- X}
- X
- Xstab_check(min,max)
- Xint min;
- Xregister int max;
- X{
- X register int i;
- X register STAB *stab;
- X
- X for (i = min; i <= max; i++) {
- X for (stab = stab_index[i]; stab; stab = stab->stab_next) {
- X if (stab->stab_flags & SF_MULTI)
- X continue;
- X if (i == 'A' && strEQ(stab->stab_name, "ARGV"))
- X continue;
- X if (i == 'E' && strEQ(stab->stab_name, "ENV"))
- X continue;
- X if (i == 'S' && strEQ(stab->stab_name, "SIG"))
- X continue;
- X if (i == 'I' && strEQ(stab->stab_name, "INC"))
- X continue;
- X warn("Possible typo: %s,", stab->stab_name);
- X }
- X }
- X}
- !STUFFY!FUNK!
- echo Extracting EXTERN.h
- sed >EXTERN.h <<'!STUFFY!FUNK!' -e 's/X//'
- X/* $Header: EXTERN.h,v 2.0 88/06/05 00:07:46 root Exp $
- X *
- X * $Log: EXTERN.h,v $
- X * Revision 2.0 88/06/05 00:07:46 root
- X * Baseline version 2.0.
- X *
- X */
- X
- X#undef EXT
- X#define EXT extern
- X
- X#undef INIT
- X#define INIT(x)
- X
- X#undef DOINIT
- !STUFFY!FUNK!
- echo ""
- echo "End of kit 6 (of 15)"
- cat /dev/null >kit6isdone
- run=''
- config=''
- for iskit in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15; do
- if test -f kit${iskit}isdone; then
- run="$run $iskit"
- else
- todo="$todo $iskit"
- fi
- done
- case $todo in
- '')
- echo "You have run all your kits. Please read README and then type Configure."
- chmod 755 Configure
- ;;
- *) echo "You have run$run."
- echo "You still need to run$todo."
- ;;
- esac
- : Someone might mail this, so...
- exit
-
-