?RCS: $Id: Loc.U,v 3.0.1.3 1994/01/24 14:01:44 ram Exp $ ?RCS: ?RCS: Copyright (c) 1991-1993, Raphael Manfredi ?RCS: ?RCS: You may redistribute only under the terms of the Artistic Licence, ?RCS: as specified in the README file that comes with the distribution. ?RCS: You may reuse parts of this distribution only within the terms of ?RCS: that same Artistic Licence; a copy of which may be found at the root ?RCS: of the source tree for dist 3.0. ?RCS: $Log: Loc.U,v $ ?RCS: Revision 3.0.1.3 1994/01/24 14:01:44 ram ?RCS: patch16: added metalint hint on changed PATH variable ?RCS: ?RCS: Revision 3.0.1.2 1993/12/15 08:16:52 ram ?RCS: patch15: now set _test variable when test is built-in ?RCS: patch15: fixed rare cases where echo is not needed ?RCS: ?RCS: Revision 3.0.1.1 1993/09/13 15:47:13 ram ?RCS: patch10: test program not always in /bin/test (WAD) ?RCS: ?RCS: Revision 3.0 1993/08/18 12:05:05 ram ?RCS: Baseline for dist 3.0 netwide release. ?RCS: ?X: ?X: This unit produces a shell script "loc" which can be used to find out ?X: where in a list of directories something is. It then uses loc to ?X: determine the location of commonly used programs. It leaves loc sitting ?X: around for other Configure units to use, but arranges for its demise ?X: at the end of Configure. ?X: ?X: To add a new program to find, add it both to the ?MAKE: line and to either ?X: the loclist or trylist variable. ?X: ?X: I put startsh at the end of the dependency list, in order to avoid the ?X: loading of the spitshell unit before the instructions. ?X: ?MAKE:Loc Mcc awk bash bison byacc cat chgrp chmod chown compress cp cpio \ cpp csh date echo egrep emacs expr find flex gcc grep inews ksh \ less line lint ln lp lpr ls mail mailx make mkdir more mv nroff \ perl pg pmake pr rm rmail sed sendmail sh shar sleep smail sort \ submit tail tar tbl test touch tr troff uname uniq uuname vi \ zcat: eunicefix n c Instruct Myread startsh ?MAKE: -pick weed $@ %< ?LINT:describe Loc Mcc awk bash bison byacc cat chgrp chmod chown compress \ cp cpio cpp csh date echo egrep emacs expr find flex gcc grep \ inews ksh less line lint ln lp lpr ls mail mailx make mkdir more \ mv nroff perl pg pmake pr rm rmail sed sendmail sh shar sleep \ smail sort submit tail tar tbl test touch tr troff uname uniq \ uuname vi zcat ?V::pth loclist trylist ?T:thing xxx dir file say _test ?LINT:change PATH : find out where common programs are echo " " echo "Locating common programs..." >&4 cat <loc $startsh case \$# in 0) exit 1;; esac thing=\$1 shift dflt=\$1 shift for dir in \$*; do case "\$thing" in .) if test -d \$dir/\$thing; then echo \$dir exit 0 fi ;; *) if test -f \$dir/\$thing; then echo \$dir/\$thing exit 0 elif test -f \$dir/\$thing.exe; then : on Eunice apparently echo \$dir/\$thing exit 0 fi ;; esac done echo \$dflt exit 1 EOSC chmod +x loc $eunicefix loc loclist=" ?awk:awk ?cat:cat ?chgrp:chgrp ?chmod:chmod ?chown:chown ?cp:cp ?echo:echo ?expr:expr ?grep:grep ?ln:ln ?ls:ls ?make:make ?mkdir:mkdir ?mv:mv ?rm:rm ?sed:sed ?sleep:sleep ?sort:sort ?tail:tail ?touch:touch ?tr:tr ?uniq:uniq " trylist=" ?Mcc:Mcc ?bash:bash ?bison:bison ?byacc:byacc ?compress:compress ?cpio:cpio ?cpp:cpp ?csh:csh ?date:date ?egrep:egrep ?emacs:emacs ?find:find ?flex:flex ?gcc:gcc ?inews:inews ?ksh:ksh ?less:less ?line:line ?lint:lint ?lp:lp ?lpr:lpr ?mail:mail ?mailx:mailx ?more:more ?nroff:nroff ?perl:perl ?pg:pg ?pmake:pmake ?pr:pr ?rmail:rmail ?sendmail:sendmail ?sh:sh ?shar:shar ?smail:smail ?submit:submit ?tar:tar ?tbl:tbl ?test:test ?troff:troff ?uname:uname ?uuname:uuname ?vi:vi ?zcat:zcat " ?LINT:set Loc Mcc awk bash bison byacc cat chgrp chmod chown compress cp \ cpio cpp csh date echo egrep emacs expr find flex gcc grep inews \ ksh less line lint ln lp lpr ls mail mailx make mkdir more mv \ nroff perl pg pmake pr rm rmail sed sendmail sh shar sleep \ smail sort submit tail tar tbl test touch tr troff uname uniq \ uuname vi zcat pth=`echo $PATH | sed -e 's/:/ /g'` pth="$pth /lib /usr/lib" for file in $loclist; do xxx=`./loc $file $file $pth` eval $file=$xxx eval _$file=$xxx case "$xxx" in /*) echo $file is in $xxx. ;; *) echo "I don't know where $file is. I hope it's in everyone's PATH." ;; esac done echo " " echo "Don't worry if any of the following aren't found..." say=offhand for file in $trylist; do xxx=`./loc $file $file $pth` eval $file=$xxx eval _$file=$xxx case "$xxx" in /*) echo $file is in $xxx. ;; *) echo "I don't see $file out there, $say." say=either ;; esac done case "$egrep" in egrep) echo "Substituting grep for egrep." egrep=$grep ;; esac case "$test" in test) 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." ?X: ?X: We need to set both test and _test, since Oldconfig.U will use the _test ?X: value to systematically restore computed paths, which may be wrong if ?X: we choose to load an old config.sh generated on another platform. ?X: test=test _test=test fi ;; esac ?LINT:change n c case "$echo" in echo) echo "Hopefully echo is built into your sh." ;; ?X: For those rare cases where we don't need $echo... '') ;; *) echo " " echo "Checking compatibility between $echo and builtin echo (if any)..." >&4 $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." else case "$n" in '-n') n='' c='\c';; *) n='-n' c='';; esac cat <$c" $echo "*" fi $rm -f foo1 foo2 ;; esac