diff options
Diffstat (limited to 'mcon/U/Loc.U')
-rw-r--r-- | mcon/U/Loc.U | 381 |
1 files changed, 381 insertions, 0 deletions
diff --git a/mcon/U/Loc.U b/mcon/U/Loc.U new file mode 100644 index 0000000..bf8c056 --- /dev/null +++ b/mcon/U/Loc.U @@ -0,0 +1,381 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, 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 4.0. +?RCS: +?RCS: $Log: Loc.U,v $ +?RCS: Revision 3.0.1.10 1997/02/28 15:04:16 ram +?RCS: patch61: allow users to specify paths on the command line +?RCS: patch61: will now substitute cp for ln if not supported +?RCS: +?RCS: Revision 3.0.1.9 1995/09/25 09:11:24 ram +?RCS: patch59: commented the purpose of the #un-def directive +?RCS: patch59: abort Configure run when mandatory command is missing +?RCS: +?RCS: Revision 3.0.1.8 1995/07/25 13:40:40 ram +?RCS: patch56: now knows about OS/2 platforms +?RCS: +?RCS: Revision 3.0.1.7 1995/01/11 15:13:37 ram +?RCS: patch45: protected "sh -c" within backquotes for Linux and SGI +?RCS: patch45: added path lookup for the 'comm' program +?RCS: +?RCS: Revision 3.0.1.6 1994/10/29 15:56:14 ram +?RCS: patch36: added ?F: line for metalint file checking +?RCS: patch36: be careful and guard against wildcard searching (ADO) +?RCS: +?RCS: Revision 3.0.1.5 1994/06/20 06:54:55 ram +?RCS: patch30: now locates find +?RCS: +?RCS: Revision 3.0.1.4 1994/05/13 15:18:15 ram +?RCS: patch27: added byacc to the trylist (ADO) +?RCS: patch27: lint lines reformatted (ADO) +?RCS: +?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 ar bash bison byacc cat chgrp chmod chown \ + comm compress cp cpio cpp csh date echo egrep emacs expr find flex \ + gmake gzip grep inews ksh less line lint ln lp lpr ls mail mailx \ + make mkdir more mv nm nroff perl pg pmake pr rm rmail sed sendmail \ + shar sleep smail sort submit tail tar tbl tee test touch tr troff \ + uname uniq uuname vi zcat zip: eunicefix n c startsh Instruct Warn +?MAKE: -pick weed $@ %< +?LINT: describe Mcc awk ar bash bison byacc cat chgrp chmod chown \ + comm compress cp cpio cpp csh date echo egrep emacs expr find flex \ + gmake gzip grep inews ksh less line lint ln lp lpr ls mail mailx \ + make mkdir more mv nm nroff perl pg pmake pr rm rmail sed sendmail \ + shar sleep smail sort submit tail tar tbl tee test touch tr troff \ + uname uniq uuname vi zcat zip +?V::pth loclist trylist +?F:./loc +?T:thisthing thing xxx dir file say DJGPP +?T:_test _grep _cp _gmake _egrep _ln _make dflt +?LINT: change PATH +: find out where common programs are +echo " " +echo "Locating common programs..." >&4 +cat <<EOSC >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 + ;; + *) +?X: Be careful in case thing includes wildcards that might expand to multiple +?X: files. Choose the last one. This happens when searching for shared +?X: libraries with version numbers. How to choose which one we want is +?X: probably an insoluble problem, in general. +?X: Some folks leave things like libc.so.orig around w/o read +?X: permission. A -r test would handle that, but since ./loc is +?X: also used to find executables (which are installed w/o read +?X: permission on SCO ODT 3.0, we can't include the -r test. + for thisthing in \$dir/\$thing; do + : just loop through to pick last item + done + if test -f \$thisthing; then + echo \$thisthing + exit 0 + elif test -f \$thisthing$_exe; then + echo \$thisthing + exit 0 + elif test -f \$dir/\$thing.exe; then + if test -n "$DJGPP"; then + echo \$dir/\$thing.exe + else + : on Eunice apparently + echo \$dir/\$thing + fi + 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 +?comm:comm +?cp:cp +?echo:echo +?expr:expr +?find:find +?grep:grep +?ls:ls +?mkdir:mkdir +?mv:mv +?rm:rm +?sed:sed +?sleep:sleep +?sort:sort +?tail:tail +?touch:touch +?tr:tr +?uniq:uniq +" +trylist=" +?Mcc:Mcc +?ar:ar +?bash:bash +?bison:bison +?byacc:byacc +?compress:compress +?cpio:cpio +?cpp:cpp +?csh:csh +?date:date +?egrep:egrep +?emacs:emacs +?flex:flex +?gmake:gmake +?gzip:gzip +?inews:inews +?ksh:ksh +?less:less +?line:line +?lint:lint +?ln:ln +?lp:lp +?lpr:lpr +?mail:mail +?mailx:mailx +?make:make +?more:more +?nm:nm +?nroff:nroff +?perl:perl +?pg:pg +?pmake:pmake +?pr:pr +?rmail:rmail +?sendmail:sendmail +?shar:shar +?smail:smail +?submit:submit +?tar:tar +?tbl:tbl +?tee:tee +?test:test +?troff:troff +?uname:uname +?uuname:uuname +?vi:vi +?zcat:zcat +?zip:zip +" +?LINT: set awk ar bash bison byacc cat chgrp chmod chown \ + comm compress cp cpio cpp csh date echo emacs expr find flex \ + gmake gzip grep inews ksh less line lint lp lpr ls mail mailx \ + mkdir more mv nm nroff perl pg pmake pr rm rmail sed sendmail \ + shar sleep smail sort submit tail tar tbl tee touch tr troff \ + uname uniq uuname vi zcat zip +pth=`echo $PATH | sed -e "s/$p_/ /g"` +pth="$pth /lib /usr/lib" +for file in $loclist; do +?X: +?X: Allow them to -Dmake=pmake on the command line for instance... +?X: If the file is not fully qualified, as in -Dmake=pmake, then we +?X: look the for the specified command (pmake here). If they say +?X: -Dmake=/sbin/make for instance, then we make sure the file +?X: exists, or we die... +?X: + eval xxx=\$$file + case "$xxx" in + /*|?:[\\/]*) + if test -f "$xxx"; then + : ok + else + ./warn "no $xxx -- ignoring your setting for $file." + xxx=`./loc $file $file $pth` + fi + ;; + '') xxx=`./loc $file $file $pth`;; + *) xxx=`./loc $xxx $xxx $pth`;; + esac + eval $file=$xxx$_exe + eval _$file=$xxx + case "$xxx" in + /*) + echo $file is in $xxx. + ;; +?X: Under OS/2, we have PC-like paths + ?:[\\/]*) + echo $file is in $xxx. + ;; + *) + echo "I don't know where '$file' is, and my life depends on it." >&4 + echo "Go find a public domain implementation or fix your PATH setting!" >&4 + exit 1 + ;; + esac +done +echo " " +echo "Don't worry if any of the following aren't found..." +say=offhand +for file in $trylist; do +?X: Allow them to -Dmake=pmake on the command line for instance (see above) + eval xxx=\$$file + case "$xxx" in + /*|?:[\\/]*) + if test -f "$xxx"; then + : ok + else + ./warn "no $xxx -- ignoring your setting for $file." + xxx=`./loc $file $file $pth` + fi + ;; + '') xxx=`./loc $file $file $pth`;; + *) xxx=`./loc $xxx $xxx $pth`;; + esac + eval $file=$xxx$_exe + eval _$file=$xxx + case "$xxx" in + /*) + echo $file is in $xxx. + ;; +?X: Under OS/2, we have PC-like paths + ?:[\\/]*) + 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 + _egrep=$_grep + ;; +esac +@if ln +case "$ln" in +ln) + echo "Substituting cp for ln." + ln=$cp + _ln=$_cp + ;; +esac +@end +@if make || gmake +case "$make" in +make) + case "$gmake" in + gmake) + echo "I can't find make or gmake, and my life depends on it." >&4 + echo "Go find a public domain implementation or fix your PATH setting!" >&4 + exit 1 + ;; + esac + ;; +esac +case "$gmake" in +gmake) ;; +*) # We can't have osname yet. + if test -f "/system/gnu_library/bin/ar.pm"; then # Stratus VOS + # Assume that gmake, if found, is definitely GNU make + # and prefer it over the system make. + echo "Substituting gmake for make." + make=$gmake + _make=$_gmake + fi + ;; +esac +@end +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 <<FOO +They are not compatible! You are probably running ksh on a non-USG system. +I'll have to use $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 '$n$c' to suppress newlines now. Life is ridiculous. + +FOO + $echo $n "The star should be here-->$c" + $echo "*" + fi + $rm -f foo1 foo2 + ;; +esac + |