File:  [ELWIX - Embedded LightWeight unIX -] / embedaddon / expat / conftools / PrintPath
Revision 1.1.1.1 (vendor branch): download - view: text, annotated - select for diffs - revision graph
Tue Feb 21 23:00:54 2012 UTC (12 years, 4 months ago) by misho
Branches: expat, MAIN
CVS tags: v2_1_0, v2_0_1p0, v2_0_1, HEAD
expat

    1: #!/bin/sh
    2: # Look for program[s] somewhere in $PATH.
    3: #
    4: # Options:
    5: #  -s
    6: #    Do not print out full pathname. (silent)
    7: #  -pPATHNAME
    8: #    Look in PATHNAME instead of $PATH
    9: #
   10: # Usage:
   11: #  PrintPath [-s] [-pPATHNAME] program [program ...]
   12: #
   13: # Initially written by Jim Jagielski for the Apache configuration mechanism
   14: #  (with kudos to Kernighan/Pike)
   15: #
   16: # This script falls under the Apache License.
   17: # See http://www.apache.org/licenses/LICENSE
   18: 
   19: ##
   20: # Some "constants"
   21: ##
   22: pathname=$PATH
   23: echo="yes"
   24: 
   25: ##
   26: # Find out what OS we are running for later on
   27: ##
   28: os=`(uname) 2>/dev/null`
   29: 
   30: ##
   31: # Parse command line
   32: ##
   33: for args in $*
   34: do
   35:     case $args in
   36: 	-s  ) echo="no" ;;
   37: 	-p* ) pathname="`echo $args | sed 's/^..//'`" ;;
   38: 	*   ) programs="$programs $args" ;;
   39:     esac
   40: done
   41: 
   42: ##
   43: # Now we make the adjustments required for OS/2 and everyone
   44: # else :)
   45: #
   46: # First of all, all OS/2 programs have the '.exe' extension.
   47: # Next, we adjust PATH (or what was given to us as PATH) to
   48: # be whitespace separated directories.
   49: # Finally, we try to determine the best flag to use for
   50: # test/[] to look for an executable file. OS/2 just has '-r'
   51: # but with other OSs, we do some funny stuff to check to see
   52: # if test/[] knows about -x, which is the preferred flag.
   53: ##
   54: 
   55: if [ "x$os" = "xOS/2" ]
   56: then
   57:     ext=".exe"
   58:     pathname=`echo -E $pathname |
   59:      sed 's/^;/.;/
   60: 	  s/;;/;.;/g
   61: 	  s/;$/;./
   62: 	  s/;/ /g
   63: 	  s/\\\\/\\//g' `
   64:     test_exec_flag="-r"
   65: else
   66:     ext=""	# No default extensions
   67:     pathname=`echo $pathname |
   68:      sed 's/^:/.:/
   69: 	  s/::/:.:/g
   70: 	  s/:$/:./
   71: 	  s/:/ /g' `
   72:     # Here is how we test to see if test/[] can handle -x
   73:     testfile="pp.t.$$"
   74: 
   75:     cat > $testfile <<ENDTEST
   76: #!/bin/sh
   77: if [ -x / ] || [ -x /bin ] || [ -x /bin/ls ]; then
   78:     exit 0
   79: fi
   80: exit 1
   81: ENDTEST
   82: 
   83:     if `/bin/sh $testfile 2>/dev/null`; then
   84: 	test_exec_flag="-x"
   85:     else
   86: 	test_exec_flag="-r"
   87:     fi
   88:     rm -f $testfile
   89: fi
   90: 
   91: for program in $programs
   92: do
   93:     for path in $pathname
   94:     do
   95: 	if [ $test_exec_flag $path/${program}${ext} ] && \
   96: 	   [ ! -d $path/${program}${ext} ]; then
   97: 	    if [ "x$echo" = "xyes" ]; then
   98: 		echo $path/${program}${ext}
   99: 	    fi
  100: 	    exit 0
  101: 	fi
  102: 
  103: # Next try without extension (if one was used above)
  104: 	if [ "x$ext" != "x" ]; then
  105:             if [ $test_exec_flag $path/${program} ] && \
  106:                [ ! -d $path/${program} ]; then
  107:                 if [ "x$echo" = "xyes" ]; then
  108:                     echo $path/${program}
  109:                 fi
  110:                 exit 0
  111:             fi
  112:         fi
  113:     done
  114: done
  115: exit 1
  116: 

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>