PrintPath revision 240b85022b73af58a6d971cd3d05d54037d8f682
3d0434b7f8ce3bfce252ebbe3cabe626ba750d83gregames#!/bin/sh
3d0434b7f8ce3bfce252ebbe3cabe626ba750d83gregames#
3d0434b7f8ce3bfce252ebbe3cabe626ba750d83gregames# Copyright 2000-2004 Apache Software Foundation
3d0434b7f8ce3bfce252ebbe3cabe626ba750d83gregames#
3d0434b7f8ce3bfce252ebbe3cabe626ba750d83gregames# Licensed under the Apache License, Version 2.0 (the "License");
3d0434b7f8ce3bfce252ebbe3cabe626ba750d83gregames# you may not use this file except in compliance with the License.
3d0434b7f8ce3bfce252ebbe3cabe626ba750d83gregames# You may obtain a copy of the License at
3d0434b7f8ce3bfce252ebbe3cabe626ba750d83gregames#
3d0434b7f8ce3bfce252ebbe3cabe626ba750d83gregames# http://www.apache.org/licenses/LICENSE-2.0
3d0434b7f8ce3bfce252ebbe3cabe626ba750d83gregames#
3d0434b7f8ce3bfce252ebbe3cabe626ba750d83gregames# Unless required by applicable law or agreed to in writing, software
3d0434b7f8ce3bfce252ebbe3cabe626ba750d83gregames# distributed under the License is distributed on an "AS IS" BASIS,
3d0434b7f8ce3bfce252ebbe3cabe626ba750d83gregames# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
3d0434b7f8ce3bfce252ebbe3cabe626ba750d83gregames# See the License for the specific language governing permissions and
3d0434b7f8ce3bfce252ebbe3cabe626ba750d83gregames# limitations under the License.
3d0434b7f8ce3bfce252ebbe3cabe626ba750d83gregames#
3d0434b7f8ce3bfce252ebbe3cabe626ba750d83gregames#
3d0434b7f8ce3bfce252ebbe3cabe626ba750d83gregames# Look for program[s] somewhere in $PATH.
3d0434b7f8ce3bfce252ebbe3cabe626ba750d83gregames#
3d0434b7f8ce3bfce252ebbe3cabe626ba750d83gregames# Options:
3d0434b7f8ce3bfce252ebbe3cabe626ba750d83gregames# -s
3d0434b7f8ce3bfce252ebbe3cabe626ba750d83gregames# Do not print out full pathname. (silent)
3d0434b7f8ce3bfce252ebbe3cabe626ba750d83gregames# -pPATHNAME
3d0434b7f8ce3bfce252ebbe3cabe626ba750d83gregames# Look in PATHNAME instead of $PATH
3d0434b7f8ce3bfce252ebbe3cabe626ba750d83gregames#
3d0434b7f8ce3bfce252ebbe3cabe626ba750d83gregames# Usage:
3d0434b7f8ce3bfce252ebbe3cabe626ba750d83gregames# PrintPath [-s] [-pPATHNAME] program [program ...]
3d0434b7f8ce3bfce252ebbe3cabe626ba750d83gregames#
3d0434b7f8ce3bfce252ebbe3cabe626ba750d83gregames# Initially written by Jim Jagielski for the Apache configuration mechanism
3d0434b7f8ce3bfce252ebbe3cabe626ba750d83gregames# (with kudos to Kernighan/Pike)
3d0434b7f8ce3bfce252ebbe3cabe626ba750d83gregames
3d0434b7f8ce3bfce252ebbe3cabe626ba750d83gregames##
3d0434b7f8ce3bfce252ebbe3cabe626ba750d83gregames# Some "constants"
3d0434b7f8ce3bfce252ebbe3cabe626ba750d83gregames##
3d0434b7f8ce3bfce252ebbe3cabe626ba750d83gregamespathname=$PATH
3d0434b7f8ce3bfce252ebbe3cabe626ba750d83gregamesecho="yes"
3d0434b7f8ce3bfce252ebbe3cabe626ba750d83gregames
3d0434b7f8ce3bfce252ebbe3cabe626ba750d83gregames##
3d0434b7f8ce3bfce252ebbe3cabe626ba750d83gregames# Find out what OS we are running for later on
3d0434b7f8ce3bfce252ebbe3cabe626ba750d83gregames##
3d0434b7f8ce3bfce252ebbe3cabe626ba750d83gregamesos=`(uname) 2>/dev/null`
3d0434b7f8ce3bfce252ebbe3cabe626ba750d83gregames
3d0434b7f8ce3bfce252ebbe3cabe626ba750d83gregames##
3d0434b7f8ce3bfce252ebbe3cabe626ba750d83gregames# Parse command line
3d0434b7f8ce3bfce252ebbe3cabe626ba750d83gregames##
3d0434b7f8ce3bfce252ebbe3cabe626ba750d83gregamesfor args in $*
3d0434b7f8ce3bfce252ebbe3cabe626ba750d83gregamesdo
3d0434b7f8ce3bfce252ebbe3cabe626ba750d83gregames case $args in
3d0434b7f8ce3bfce252ebbe3cabe626ba750d83gregames -s ) echo="no" ;;
3d0434b7f8ce3bfce252ebbe3cabe626ba750d83gregames -p* ) pathname="`echo $args | sed 's/^..//'`" ;;
3d0434b7f8ce3bfce252ebbe3cabe626ba750d83gregames * ) programs="$programs $args" ;;
3d0434b7f8ce3bfce252ebbe3cabe626ba750d83gregames esac
3d0434b7f8ce3bfce252ebbe3cabe626ba750d83gregamesdone
3d0434b7f8ce3bfce252ebbe3cabe626ba750d83gregames
3d0434b7f8ce3bfce252ebbe3cabe626ba750d83gregames##
3d0434b7f8ce3bfce252ebbe3cabe626ba750d83gregames# Now we make the adjustments required for OS/2 and everyone
3d0434b7f8ce3bfce252ebbe3cabe626ba750d83gregames# else :)
3d0434b7f8ce3bfce252ebbe3cabe626ba750d83gregames#
3d0434b7f8ce3bfce252ebbe3cabe626ba750d83gregames# First of all, all OS/2 programs have the '.exe' extension.
3d0434b7f8ce3bfce252ebbe3cabe626ba750d83gregames# Next, we adjust PATH (or what was given to us as PATH) to
3d0434b7f8ce3bfce252ebbe3cabe626ba750d83gregames# be whitespace separated directories.
3d0434b7f8ce3bfce252ebbe3cabe626ba750d83gregames# Finally, we try to determine the best flag to use for
3d0434b7f8ce3bfce252ebbe3cabe626ba750d83gregames# test/[] to look for an executable file. OS/2 just has '-r'
3d0434b7f8ce3bfce252ebbe3cabe626ba750d83gregames# but with other OSs, we do some funny stuff to check to see
3d0434b7f8ce3bfce252ebbe3cabe626ba750d83gregames# if test/[] knows about -x, which is the prefered flag.
3d0434b7f8ce3bfce252ebbe3cabe626ba750d83gregames##
3d0434b7f8ce3bfce252ebbe3cabe626ba750d83gregames
3d0434b7f8ce3bfce252ebbe3cabe626ba750d83gregamesif [ "x$os" = "xOS/2" ]
3d0434b7f8ce3bfce252ebbe3cabe626ba750d83gregamesthen
3d0434b7f8ce3bfce252ebbe3cabe626ba750d83gregames ext=".exe"
3d0434b7f8ce3bfce252ebbe3cabe626ba750d83gregames pathname=`echo -E $pathname |
3d0434b7f8ce3bfce252ebbe3cabe626ba750d83gregames sed 's/^;/.;/
3d0434b7f8ce3bfce252ebbe3cabe626ba750d83gregames s/;;/;.;/g
3d0434b7f8ce3bfce252ebbe3cabe626ba750d83gregames s/;$/;./
3d0434b7f8ce3bfce252ebbe3cabe626ba750d83gregames s/;/ /g
3d0434b7f8ce3bfce252ebbe3cabe626ba750d83gregames s/\\\\/\\//g' `
3d0434b7f8ce3bfce252ebbe3cabe626ba750d83gregames test_exec_flag="-r"
3d0434b7f8ce3bfce252ebbe3cabe626ba750d83gregameselse
3d0434b7f8ce3bfce252ebbe3cabe626ba750d83gregames ext="" # No default extensions
3d0434b7f8ce3bfce252ebbe3cabe626ba750d83gregames pathname=`echo $pathname |
3d0434b7f8ce3bfce252ebbe3cabe626ba750d83gregames sed 's/^:/.:/
3d0434b7f8ce3bfce252ebbe3cabe626ba750d83gregames s/::/:.:/g
3d0434b7f8ce3bfce252ebbe3cabe626ba750d83gregames s/:$/:./
3d0434b7f8ce3bfce252ebbe3cabe626ba750d83gregames s/:/ /g' `
3d0434b7f8ce3bfce252ebbe3cabe626ba750d83gregames # Here is how we test to see if test/[] can handle -x
3d0434b7f8ce3bfce252ebbe3cabe626ba750d83gregames testfile="pp.t.$$"
3d0434b7f8ce3bfce252ebbe3cabe626ba750d83gregames
3d0434b7f8ce3bfce252ebbe3cabe626ba750d83gregames cat > $testfile <<ENDTEST
3d0434b7f8ce3bfce252ebbe3cabe626ba750d83gregames#!/bin/sh
3d0434b7f8ce3bfce252ebbe3cabe626ba750d83gregamesif [ -x / ] || [ -x /bin ] || [ -x /bin/ls ]; then
3d0434b7f8ce3bfce252ebbe3cabe626ba750d83gregames exit 0
3d0434b7f8ce3bfce252ebbe3cabe626ba750d83gregamesfi
3d0434b7f8ce3bfce252ebbe3cabe626ba750d83gregamesexit 1
3d0434b7f8ce3bfce252ebbe3cabe626ba750d83gregamesENDTEST
3d0434b7f8ce3bfce252ebbe3cabe626ba750d83gregames
3d0434b7f8ce3bfce252ebbe3cabe626ba750d83gregames if `/bin/sh $testfile 2>/dev/null`; then
3d0434b7f8ce3bfce252ebbe3cabe626ba750d83gregames test_exec_flag="-x"
3d0434b7f8ce3bfce252ebbe3cabe626ba750d83gregames else
3d0434b7f8ce3bfce252ebbe3cabe626ba750d83gregames test_exec_flag="-r"
3d0434b7f8ce3bfce252ebbe3cabe626ba750d83gregames fi
3d0434b7f8ce3bfce252ebbe3cabe626ba750d83gregames rm -f $testfile
3d0434b7f8ce3bfce252ebbe3cabe626ba750d83gregamesfi
3d0434b7f8ce3bfce252ebbe3cabe626ba750d83gregames
3d0434b7f8ce3bfce252ebbe3cabe626ba750d83gregamesfor program in $programs
3d0434b7f8ce3bfce252ebbe3cabe626ba750d83gregamesdo
3d0434b7f8ce3bfce252ebbe3cabe626ba750d83gregames for path in $pathname
3d0434b7f8ce3bfce252ebbe3cabe626ba750d83gregames do
3d0434b7f8ce3bfce252ebbe3cabe626ba750d83gregames if [ $test_exec_flag $path/${program}${ext} ] && \
3d0434b7f8ce3bfce252ebbe3cabe626ba750d83gregames [ ! -d $path/${program}${ext} ]; then
3d0434b7f8ce3bfce252ebbe3cabe626ba750d83gregames if [ "x$echo" = "xyes" ]; then
3d0434b7f8ce3bfce252ebbe3cabe626ba750d83gregames echo $path/${program}${ext}
3d0434b7f8ce3bfce252ebbe3cabe626ba750d83gregames fi
3d0434b7f8ce3bfce252ebbe3cabe626ba750d83gregames exit 0
3d0434b7f8ce3bfce252ebbe3cabe626ba750d83gregames fi
3d0434b7f8ce3bfce252ebbe3cabe626ba750d83gregames
3d0434b7f8ce3bfce252ebbe3cabe626ba750d83gregames# Next try without extension (if one was used above)
3d0434b7f8ce3bfce252ebbe3cabe626ba750d83gregames if [ "x$ext" != "x" ]; then
3d0434b7f8ce3bfce252ebbe3cabe626ba750d83gregames if [ $test_exec_flag $path/${program} ] && \
3d0434b7f8ce3bfce252ebbe3cabe626ba750d83gregames [ ! -d $path/${program} ]; then
3d0434b7f8ce3bfce252ebbe3cabe626ba750d83gregames if [ "x$echo" = "xyes" ]; then
3d0434b7f8ce3bfce252ebbe3cabe626ba750d83gregames echo $path/${program}
3d0434b7f8ce3bfce252ebbe3cabe626ba750d83gregames fi
3d0434b7f8ce3bfce252ebbe3cabe626ba750d83gregames exit 0
3d0434b7f8ce3bfce252ebbe3cabe626ba750d83gregames fi
3d0434b7f8ce3bfce252ebbe3cabe626ba750d83gregames fi
3d0434b7f8ce3bfce252ebbe3cabe626ba750d83gregames done
3d0434b7f8ce3bfce252ebbe3cabe626ba750d83gregamesdone
3d0434b7f8ce3bfce252ebbe3cabe626ba750d83gregamesexit 1
3d0434b7f8ce3bfce252ebbe3cabe626ba750d83gregames
3d0434b7f8ce3bfce252ebbe3cabe626ba750d83gregames