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