#!/bin/sh
#
# Copyright (C) 1999 Free Software Foundation, Inc.
#
# Author: Adam Fedor <fedor@gnu.org>
# Date: May 1999
# 
# 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,
# 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.

# This is a shell script which attempts to find the GNUstep executable
# of the same name based on the current host and library_combo.

#--------------------------------------------------------------------------
# Main body
#--------------------------------------------------------------------------
if [ -z "$EXEEXT" ]; then
  EXEEXT=
fi
if [ -z "$LIBRARY_COMBO" ]; then
  LIBRARY_COMBO=gnu-gnu-gnu
fi

# Process arguments
app=$0
show_available_platforms=0
show_relative_path=0
show_full_path=0
while true
do 
  case $1 in

    --script-help)
	echo usage: `basename $0` [--library-combo=...]
	echo "       [--available-platforms][--full-executable-path]"
	echo "       [--relative-executable-path] [arguments...]"
	echo
	echo "   --library-combo=... specifies a GNUstep backend to use."
	echo "   It overrides the default LIBRARY_COMBO environment variable."
	echo
	echo "   --available-platforms displays a list of valid exec hosts"
	echo "   --full-executable-path displays full path to executable"
	echo "   --relative-executable-path displays subdirectory path"
	echo "   arguments... are the arguments to the application."
	exit 0
	;;
    --library-combo=*)
	LIBRARY_COMBO=`echo $1 | sed 's/--library-combo=//'`
	shift
	;;
    --available-platforms)
        show_available_platforms=1
        exit 0
	;;
    --full-executable-path)
	show_full_path=1
        break
	;;
    --relative-executable-path)
	show_relative_path=1
        break
	;;
    *)
        break;;
    esac
done

if [ "$LIBRARY_COMBO" = nx ]; then
  LIBRARY_COMBO=nx-nx-nx
elif [ "$LIBRARY_COMBO" = gnu ]; then
  LIBRARY_COMBO=gnu-gnu-gnu
elif [ "$LIBRARY_COMBO" = fd ]; then
  LIBRARY_COMBO=gnu-fd-gnu
fi
export LIBRARY_COMBO

# Find path to ourself
app=`echo $app | sed 's%/*$%%'`
dir=`dirname $app`

case $app in
  /*)	# An absolute path.
	full_appname=$dir;;
  */*)	# A relative path
	full_appname=`(cd $dir; pwd)`;;
  *)	# A path that needs to be searched
	if [ -n $GNUSTEP_PATHPREFIX_LIST ]; then
	    SPATH=$GNUSTEP_PATHPREFIX_LIST
	else
	    SPATH=$PATH
	fi
	SPATH=.:$SPATH
	IFS=:
	for path_dir in $SPATH; do
	  if [ -d $path_dir/$dir ]; then
	    full_appname=`(cd $path_dir/$dir; pwd)`
	    break;
	  fi
	  if [ -d $path_dir/Applications/$dir ]; then
	    full_appname=`(cd $path_dir/Applications/$dir; pwd)`
	    break;
	  fi
	done;;
esac

if [ -z "$full_appname" ]; then
  echo "Can't find absolute path for $app! Please specify full path when"
  echo "invoking executable"
  exit 1
fi

#
# get base app name
#
app=`echo $app | sed 's/\.[a-z]*$//'`
app=`basename $app`
appname=
if [ -f "$full_appname/Resources/Info-gnustep.plist" ]; then
# -n disable auto-print (for portability reasons)
#   /^ *NSExecutable *=/ matches every line beginning with 
#        zero or more spaces, followed by 'NSExecutable', followed by zero or
#        more spaces, followed by '='
#   to this line we apply the following commands:
#   s/"//g; which deletes all " in the line.
#   s/^ *NSExecutable *= *\([^ ;]*\) *;.*/\1/p;
#     which replaces 'NSExecutable = Gorm; ' with 'Gorm', then, because
#     of the 'p' at the end, prints out the result 
#   q; which quits sed since we know there must be only a single line 
#      to replace.
  appname=`sed -n -e '/^ *NSExecutable *=/ \
           {s/"//g; s/^ *NSExecutable *= *\([^ ;]*\) *;.*/\1/p; q;}' \
                "$full_appname/Resources/Info-gnustep.plist"`
fi
if [ -z "$appname" ]; then
  appname=$app
fi

appname="$appname$EXEEXT"

if [ $show_available_platforms = 1 ]; then
  cd $full_appname
  #available_platforms
  exit 0
fi

#
# Determine the host information
#
if [ -z "$GNUSTEP_HOST" ]; then
  GNUSTEP_HOST=`(cd /tmp; $GNUSTEP_SYSTEM_ROOT/Makefiles/config.guess)`
  GNUSTEP_HOST=`(cd /tmp; $GNUSTEP_SYSTEM_ROOT/Makefiles/config.sub $GNUSTEP_HOST)`
  export GNUSTEP_HOST
fi
if [ -z "$GNUSTEP_HOST_CPU" ]; then
  GNUSTEP_HOST_CPU=`$GNUSTEP_SYSTEM_ROOT/Makefiles/cpu.sh $GNUSTEP_HOST`
  GNUSTEP_HOST_CPU=`$GNUSTEP_SYSTEM_ROOT/Makefiles/clean_cpu.sh $GNUSTEP_HOST_CPU`
  export GNUSTEP_HOST_CPU
fi
if [ -z "$GNUSTEP_HOST_VENDOR" ]; then
  GNUSTEP_HOST_VENDOR=`$GNUSTEP_SYSTEM_ROOT/Makefiles/vendor.sh $GNUSTEP_HOST`
  GNUSTEP_HOST_VENDOR=`$GNUSTEP_SYSTEM_ROOT/Makefiles/clean_vendor.sh $GNUSTEP_HOST_VENDOR`
  export GNUSTEP_HOST_VENDOR
fi
if [ -z "$GNUSTEP_HOST_OS" ]; then
  GNUSTEP_HOST_OS=`$GNUSTEP_SYSTEM_ROOT/Makefiles/os.sh $GNUSTEP_HOST`
  GNUSTEP_HOST_OS=`$GNUSTEP_SYSTEM_ROOT/Makefiles/clean_os.sh $GNUSTEP_HOST_OS`
  export GNUSTEP_HOST_OS
fi

#
# Make sure the executable is there
#
if [ -x $full_appname/$GNUSTEP_HOST_CPU/$GNUSTEP_HOST_OS/$LIBRARY_COMBO/$appname ]; then
  relative_path=$GNUSTEP_HOST_CPU/$GNUSTEP_HOST_OS/$LIBRARY_COMBO/$appname
elif [ -x $full_appname/$GNUSTEP_HOST_CPU/$GNUSTEP_HOST_OS/$appname ]; then
  relative_path=$GNUSTEP_HOST_CPU/$GNUSTEP_HOST_OS/$appname
elif [ -x $full_appname/$GNUSTEP_HOST_CPU/$appname ]; then
  relative_path=$GNUSTEP_HOST_CPU/$appname
elif [ $appname != $app -a -x $full_appname/$appname ]; then
  relative_path=$appname
else
  echo "$full_appname application does not have a binary for this kind of machine/operating system ($GNUSTEP_HOST_CPU/$GNUSTEP_HOST_OS)."
  exit 1
fi

if [ $show_relative_path = 1 ]; then
  echo $relative_path
  exit 0
fi
if [ $show_full_path = 1 ]; then
  echo $full_appname/$relative_path
  exit 0
fi

if [ "$LIBRARY_COMBO" = nx-nx-nx -a $GNUSTEP_HOST_OS = nextstep4 ]; then
  if [ -f "$full_appname/library_paths.openapp" ]; then
    additional_library_paths="`cat $full_appname/library_paths.openapp`"
  fi
else
  if [ -f "$full_appname/$GNUSTEP_HOST_CPU/$GNUSTEP_HOST_OS/$LIBRARY_COMBO/library_paths.openapp" ]; then
    additional_library_paths="`cat $full_appname/$GNUSTEP_HOST_CPU/$GNUSTEP_HOST_OS/$LIBRARY_COMBO/library_paths.openapp`"
  fi
fi

# Load up LD_LIBRARY_PATH
. $GNUSTEP_SYSTEM_ROOT/Makefiles/ld_lib_path.sh

exec $full_appname/$relative_path "$@"

