#!/bin/sh # # @configure_input@ # # Copyright (C) 1997 Free Software Foundation, Inc. # # Author: Ovidiu Predescu # Date: October 1997 # Author: Nicola Pero # Date: 2002 # # This file is part of the GNUstep Makefile Package. # # This library is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public License # as published by the Free Software Foundation; either version 2 # of the License, or (at your option) any later version. # # You should have received a copy of the GNU General Public # License along with this library; see the file COPYING.LIB. # If not, write to the Free Software Foundation, # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. # Try to execute the application passed as argument. The application is # searched through the GNUstep directories if a complete or relative path name # is not specified. The arguments passed after the application name are passed # unmodified to the application. if [ -z "$1" ]; then echo usage: openapp [--find] application [arguments...] echo openapp --help for more help exit 1 fi if [ -z "$GNUSTEP_FLATTENED" ]; then GNUSTEP_FLATTENED=@GNUSTEP_FLATTENED@ fi only_find= # TODO: implement a --library-combo parameter case "$1" in --help) echo usage: openapp [--find] application [arguments...] echo echo application is the complete or relative name of the application echo program with or without the .app extension, like Ink.app. echo echo [arguments...] are the arguments to the application. echo echo If --find is used as first argument, openapp prints out echo the full path of the application executable which would be echo executed, without actually executing it as it would normally do. echo exit 0 ;; --find) only_find=yes; if [ -z "$2" ]; then echo Missing application name. Please try openapp --help for more help. exit 1 fi app="$2"; shift; shift;; *) app="$1"; shift;; esac # Remove leading slashes at the end of the application name app="`echo \"$app\" | sed 's%/*$%%'`" # Now build the list of directory names we look for. If the user has # given us a full application directory name (for example, Gorm.app) # then we only search for the given directory name; if instead the # user has given us the application name without the suffix (for # example, 'Gorm') we want to search for Gorm.app, then for # Gorm.debug, then for Gorm.profile (in that order). # If the appname is known, save it to avoid running a grep later to get it. case "$app" in *.app) app_list="$app"; appname="";; *.debug) app_list="$app"; appname="";; *.profile) app_list="$app"; appname="";; *) app_list="$app.app:$app.debug:$app.profile"; appname="$app"; esac old_IFS="$IFS" IFS=: case "$app" in /*) # An absolute path. for appdir in $app_list; do #echo "$appdir" if [ -d "$appdir" ]; then full_appname="$appdir" break fi done;; */*) # A relative path for appdir in $app_list; do #echo "$appdir" if [ -d "$appdir" ]; then full_appname="`(cd \"$appdir\"; pwd)`" break fi done;; *) # A path that should be searched into the GNUstep paths if [ -n "$GNUSTEP_PATHLIST" ]; then SPATH="$GNUSTEP_PATHLIST" else SPATH="$PATH" fi SPATH=".:$SPATH" for dir in $SPATH; do for appdir in $app_list; do # First, search in $dir/Applications/any_path_here/$appdir #echo "$dir/Applications/"'*'"/$appdir" for d in $dir/Applications/*/$appdir ; do # If nothing is found, * expands to '*'. Check that it's # not the case, and that we have a real match. if [ "$d" != "$dir/Applications/"'*'"/$appdir" ]; then #echo " $d" if [ -d "$d" ]; then full_appname="`(cd \"$d\"; pwd)`" break 3 fi fi done # Now, in $dir/Applications/$appdir #echo "$dir/Applications/$appdir" if [ -d "$dir/Applications/$appdir" ]; then full_appname="`(cd \"$dir/Applications/$appdir\"; pwd)`" break 2 fi # Finally, in $dir/$appdir #echo "$dir/$appdir" if [ -d "$dir/$appdir" ]; then full_appname="`(cd \"$dir/$appdir\"; pwd)`" break 2 fi done done;; esac IFS="$old_IFS" unset app_list unset appdir if [ -z "$full_appname" ]; then echo "Can't find the required application: $app!" exit 1 fi #echo "found: $full_appname" # get base app name if [ -z "$appname" ]; then appname="`echo \"$app\" | sed 's/\.[a-z]*$//'`" fi appname="`basename \"$appname\"`" if [ -n "$GNUSTEP_FLATTENED" ]; then if [ -z "$EXEEXT" ]; then EXEEXT=@EXEEXT@ fi if [ -n "$EXEEXT" ]; then appname="$appname$EXEEXT" fi fi case "$LIBRARY_COMBO" in apple-*) app_executable="$full_appname/Contents/MacOS/$appname";; *) app_executable="$full_appname/$appname";; esac if [ ! -f "$app_executable" ]; then echo "Could not find $app_executable executable/script" exit 1 fi if [ -n "$only_find" ]; then echo "$app_executable" exit 0 fi exec "$app_executable" "$@"