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