#!/bin/csh -f # # Configuration script for top. # # Use with version 3.0 and higher. # set PRIME = "/usr/games/primes" set vars = (module LoadMax topn NominalTopn delay owner group mode random \ TableSize bindir mandir manext mansty \ Cmdshell Cmdcc Cmdawk Cmdinstall cdefs) set fastrack = 0 set yesno = (no yes) onintr byebye # make sure that getans is there and ready if (! -e getans) then echo 'This package is not complete. The shell file "getans" is missing.' exit 10 endif chmod +x getans if ($#argv > 0) then # fast track configuration set fastrack = 1 else cat <<'EOF' Configuration for top, version 3.5 One moment.... 'EOF' endif # collect file names and module names ls machine/m_*.c >$$.f ls machine/m_*.man >$$.m sed -e 's@^machine/m_@@' -e 's/.c$//' $$.f >$$.n # build Make.desc sed -e 's@\.c@.desc\\@' $$.f | sed -e '$s/\\//' >$$.a sed -e "/^DESCS/r $$.a" Make.desc.X >Make.desc # build desc files and SYNOPSIS as needed make -f Make.desc >/dev/null if ($status != 0) then echo "Unable to build the synopsis." echo 'Make sure the command "make" is on your path and try' echo 'running Configure again.' exit 1 endif if (-e .defaults) then echo "" echo "Reading configuration from last time..." source .defaults set nodefaults = 0 if ($fastrack == 1) then set module = $1 endif else if ($fastrack == 1) then echo "No previous configuration was found." set fastrack = 0 set module = $1 else set module = "" endif set LoadMax = 5.0 set topn = 15 set NominalTopn = 18 set delay = 5 set TableSize = 0 set bindir = /usr/local/bin set mandir = /usr/man/manl set manext = l set mansty = man set nodefaults = 1 set Cmdshell = /bin/sh set Cmdawk = awk set Cmdinstall = ./install set Cmdcc = cc set cdefs = -O endif echo "" if ($fastrack == 1) then grep -s $module $$.n >/dev/null if ($status != 0) then echo "$module is not recognized. To see a list of available modules" echo 'run "Configure" with no arguments.' rm -f $$.[fmna] exit 1 endif set random1 = `expr $random + 1` cat </dev/null if ($status != 0) then echo "That is not a recognized module name." goto getmod endif # display a full description sed -e '1,/DESCRIPTION:/d' -e '/^$/,$d' machine/m_${module}.desc # verify it echo "" ./getans "Is this what you want to use?" yesno 1 .$$ if (`cat .$$` == 0) then goto getmod endif endif cat <<'EOF' First we need to find out a little bit about the executables needed to compile top. 'EOF' ./getans "What is the full path name for the Bourne shell" file "$Cmdshell" .$$ set Cmdshell = `cat .$$` cat <<'EOF' Please supply the name of the appropriate command. It need not be a full path name, but the named command does need to exist somewhere on the current path. 'EOF' ./getans "AWK Interpreter" path "$Cmdawk" .$$ set Cmdawk = `cat .$$` ./getans "C Compiler" path "$Cmdcc" .$$ set Cmdcc = `cat .$$` cat <<'EOF' The installer command needs to understand Berkeley-esque arguments: "-o" for owner, "-g" for group, and "-m" for mode. A shell script called "install" is distributed with top and is suitable for use by top. You can specify a different program here if you like, or use the shell script (the default). 'EOF' ./getans "Installer" path "$Cmdinstall" .$$ set Cmdinstall = `cat .$$` cat < 1) then set rand = 1 endif else ypwhich >&/dev/null if ($status == 0 || -e /etc/passwd.dir || -e /etc/pwd.db) then set rand = 1 endif endif if ($rand == 1) then echo "It looks like you have a passwd file that can be accessed at random." set pr = 'Do you want top to take advantage of this' else echo "It looks like you have conventional passwd file access. Top can take" echo "advantage of a random access passwd mechanism if such exists. Do" echo "you want top to assume that accesses to the file /etc/passwd are done" set pr = 'with random access rather than sequential' endif if ($nodefaults == 1) then set random = $rand endif ./getans "${pr}?" yesno $random .$$ set random = `cat .$$` echo "" echo "Compiling prime.c" $Cmdcc $cdefs -o prime prime.c -lm if ($status != 0) then echo "Oh well." rm -f prime endif echo "" ypcat passwd.byname >&/tmp/$$.a if ($status == 0) then set cnt = `wc -l &/tmp/$$.a if ($status == 0) then set cnt = `wc -l /tmp/$$.b grep '^....r..r..' /tmp/$$.b >&/dev/null if ($status == 1) then grep '^....r..-..' /tmp/$$.b >&/dev/null if ($status == 0) then set t_group = `awk ' { print $4 }' /tmp/$$.b` set t_mode = 2755 echo "It looks like only group $t_group can read the memory devices." else set t_mode = 4755 echo "It looks like only root can read the memory devices." endif else set t_mode = 755 echo "It looks like anybody can read the memory devices." endif else echo "It looks like there are no memory device special files." set t_mode = 755 endif if ($nodefaults) then set owner = $t_owner set group = $t_group set mode = $t_mode endif echo "Tell me how to set the following when top is installed:" ./getans "Owner" user "$owner" .$$ set owner = `cat .$$` ./getans "Group owner" group "$group" .$$ set group = `cat .$$` ./getans "Mode" integer "$mode" .$$ set mode = `cat .$$` rm -f /tmp/$$.b echo "" ./getans "Install the executable in this directory" file "$bindir" .$$ set bindir = `cat .$$` echo "" ./getans "Install the manual page in this directory" file "$mandir" .$$ set mandir = `cat .$$` echo "" ./getans "Install the manual page with this extension" string "$manext" .$$ set manext = `cat .$$` echo "" ./getans "Install the manual page as 'man' or 'catman'" string "$mansty" .$$ set mansty = `cat .$$` echo "" echo "We are done with the questions." # Some Unix environments are so poor that their csh doesn't even support # the "eval" builtin. Check for this before relying on its use to save # the current configuration. /bin/csh -fc "eval echo foo" >&/dev/null if ($status == 1) then echo "Can't save configuration (nonfatal)" else echo "Saving configuration..." # save settings to use as defaults the next time rm -f .defaults touch .defaults foreach v ($vars) set tmp = `eval echo \$$v` echo set $v = "'$tmp'" >>.defaults end endif fast: # clean up rm -f $$.[fmna] # set the link for machine.c rm -f machine.c machine.o ln -s machine/m_${module}.c machine.c # get definitions out of the module file set libs = `grep LIBS: machine/m_${module}.desc | sed -e 's/^.[^:]*: *//'` set cflgs = `grep CFLAGS: machine/m_${module}.desc | sed -e 's/^.[^:]*: *//'` set tcap = `grep TERMCAP: machine/m_${module}.desc | sed -e 's/^.[^:]*: *//'` set math = `grep MATH: machine/m_${module}.desc | sed -e 's/^.[^:]*: *//'` # get osrev defition, if we can set uname="" if (-e /usr/bin/uname) then set uname=/usr/bin/uname else if (-e /bin/uname) then set uname=/bin/uname endif if ("$uname" != "") then # different versions of tr can't agree on the way to specify ranges, so # we will have to give the range explicitly.....sigh. set osrev="-DOSREV=`$uname -r | tr -cd ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789`" else set osrev="" endif # default for tcap (termcap) if ("$tcap" == "") then set tcap="-ltermcap" else if ("$tcap" == "none") then set tcap="" endif # allow for the module to override or remove -lm if ("$math" == "") then set math="-lm" else if ("$math" == "none") then set math="" endif if ( { grep -s SIGKILL /usr/include/signal.h } ) then set signal="/usr/include/signal.h" else set signal="/usr/include/sys/signal.h" endif echo "Building Makefile..." sed -e "s|%topn%|$topn|" \ -e "s|%delay%|$delay|" \ -e "s|%owner%|$owner|" \ -e "s|%group%|$group|" \ -e "s|%mode%|$mode|" \ -e "s|%bindir%|$bindir|" \ -e "s|%mandir%|$mandir|" \ -e "s|%manext%|$manext|" \ -e "s|%mansty%|$mansty|" \ -e "s|%tablesize%|$TableSize|" \ -e "s|%libs%|$libs|" \ -e "s|%cflgs%|$cflgs|" \ -e "s|%termcap%|$tcap|" \ -e "s|%math%|$math|" \ -e "s|%cdefs%|$cdefs|" \ -e "s|%signal%|$signal|" \ -e "s|%cc%|$Cmdcc|" \ -e "s|%awk%|$Cmdawk|" \ -e "s|%install%|$Cmdinstall|" \ -e "s|%shell%|$Cmdshell|" \ -e "s|%osrev%|$osrev|" \ Makefile.X >Makefile echo "Building top.local.h..." sed -e "s|%LoadMax%|$LoadMax|" \ -e "s|%TableSize%|$TableSize|" \ -e "s|%NominalTopn%|$NominalTopn|" \ -e "s|%topn%|$topn|" \ -e "s|%delay%|$delay|" \ -e "s|%random%|$random|" \ top.local.H >top.local.h echo "Building top.1..." sed -e "s|%topn%|$topn|" \ -e "s|%delay%|$delay|" \ top.X >top.1 if (-e machine/m_${module}.man ) then cat machine/m_${module}.man >>top.1 endif # clean up rm -f .$$ echo 'Doing a "make clean".' make clean echo 'To create the executable, type "make".' echo 'To install the executable, type "make install".' exit 0 byebye: rm -f .$$ $$.[fmna] /tmp/$$.[ab] exit 1