#!/bin/sh
#
# debugapp.  Generated from debugapp.in by configure.
#
# Copyright (C) 1997 Free Software Foundation, Inc.
#
# Author: Ovidiu Predescu <ovidiu@net-community.com>
# Date: October 1997
# 
# 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.

# Execute gdb for 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: `basename "$0"` [--library-combo=...] application [arguments...]
  echo `basename "$0"` --help for help
  exit 1
fi

if [ -z "$EXEEXT" ]; then
  EXEEXT=
fi
if [ -z "$LIBRARY_COMBO" ]; then
  LIBRARY_COMBO=gnu-gnu-gnu
fi
if [ -z "$GDB" ]; then
  GDB=gdb
fi

case "$1" in
  --help)
    echo usage: `basename "$0"` [--library-combo=...] application [arguments...]
    echo
    echo [--library-combo=...] specifies a GNUstep backend to use.
    echo It overrides the default LIBRARY_COMBO environment variable.
    echo --library-combo=gnu for GNUstep 
    echo --library-combo=nx for NeXT OPENSTEP
    echo --library-combo=apple for Apple OSX
    echo
    echo application is the complete or relative name of the application
    echo program with the .app extension, like Edit.app.
    echo
    echo [arguments...] are the arguments to the application.
    exit 0
    ;;
  --library-combo=*)
    LIBRARY_COMBO=`echo "$1" | sed 's/--library-combo=//'`
    if [ -z "$2" ]; then
      echo usage: `basename "$0"` [--library-combo=...] application [arguments...]
      echo `basename "$0"` --help for help
      exit 1
    fi
    app="$2"; shift; shift
    ;;
  *)
    app="$1"; shift;;
esac

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
elif [ "$LIBRARY_COMBO" = apple ]; then
  LIBRARY_COMBO=apple-apple-apple
fi

# Remove leading slashes at the end of the application name
app="`echo \"$app\" | sed 's%/*$%%'`"

case "$app" in
  /*)	# An absolute path.
	full_appname="$app";;
  */*)	# A relative path
	full_appname="`(cd \"$app\"; pwd)`";;
  *)	# A path that should be searched into the GNUstep paths
	if [ -n "$GNUSTEP_PATHLIST" ]; then
	    SPATH="$GNUSTEP_PATHLIST"
	else
	    SPATH="$PATH"
	fi
	SPATH=".:$SPATH"
	IFS=:
	for dir in $SPATH; do
	  if [ -d "$dir/Applications/$app" ]; then
	    full_appname="`(cd \"$dir/Applications/$app\"; pwd)`"
	    break;
	  fi
	  if [ -d "$dir/$app" ]; then
	    full_appname="`(cd \"$dir/$app\"; pwd)`"
	    break;
	  fi
	done;;
esac

# Search for a core file in the current directory.
corearg=
corefiles="core*"
for corefile in $corefiles; do
  if [ -f "$corefile" ]; then
    echo -e "Core image ($corefile) has been found in working directory. Use it (y/n)? ";
    # Need an argument here for Solaris
    read REPLY;
    if [ $REPLY = y ]; then
      echo -e "Using it.";
      corearg="--core=$corefile";
      break;
    else
      echo -e "Ignoring it.";
    fi
  fi
done
unset corefile
unset corefiles

if [ -z "$full_appname" ]; then
  echo "Can't find the required application: $app!"
  exit 1
fi

if [ -z "$GNUSTEP_FLATTENED" ]; then
	#
	# Determine the host information
	#
	if [ -z "$GNUSTEP_HOST" ]; then
	    GNUSTEP_HOST=`$GNUSTEP_SYSTEM_ROOT/Library/Makefiles/config.guess`
	    GNUSTEP_HOST=`$GNUSTEP_SYSTEM_ROOT/Library/Makefiles/config.sub $GNUSTEP_HOST`
	    export GNUSTEP_HOST
	fi
	if [ -z "$GNUSTEP_HOST_CPU" ]; then
	    GNUSTEP_HOST_CPU=`$GNUSTEP_SYSTEM_ROOT/Library/Makefiles/cpu.sh $GNUSTEP_HOST`
	    GNUSTEP_HOST_CPU=`$GNUSTEP_SYSTEM_ROOT/Library/Makefiles/clean_cpu.sh $GNUSTEP_HOST_CPU`
	    export GNUSTEP_HOST_CPU
	fi
	if [ -z "$GNUSTEP_HOST_VENDOR" ]; then
	    GNUSTEP_HOST_VENDOR=`$GNUSTEP_SYSTEM_ROOT/Library/Makefiles/vendor.sh $GNUSTEP_HOST`
	    GNUSTEP_HOST_VENDOR=`$GNUSTEP_SYSTEM_ROOT/Library/Makefiles/clean_vendor.sh $GNUSTEP_HOST_VENDOR`
	    export GNUSTEP_HOST_VENDOR
	fi
	if [ -z "$GNUSTEP_HOST_OS" ]; then
	    GNUSTEP_HOST_OS=`$GNUSTEP_SYSTEM_ROOT/Library/Makefiles/os.sh $GNUSTEP_HOST`
	    GNUSTEP_HOST_OS=`$GNUSTEP_SYSTEM_ROOT/Library/Makefiles/clean_os.sh $GNUSTEP_HOST_OS`
	   export GNUSTEP_HOST_OS
	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
	fi
else
  if [ -f "$full_appname/library_paths.openapp" ]; then
    additional_library_paths="`cat \"$full_appname/library_paths.openapp\"`"
  fi
fi

appname="`echo \"$app\" | sed 's/\.[a-z]*$//'`"
appname="`basename \"$appname\"`"
appname="$appname$EXEEXT"
. "$GNUSTEP_SYSTEM_ROOT/Library/Makefiles/ld_lib_path.sh"


if [ "$LIBRARY_COMBO" = nx-nx-nx -a "$GNUSTEP_HOST_OS" = nextstep4 ]; then
  if [ ! -f "$full_appname/$appname" ]; then
    echo "$full_appname application does not have a binary for this kind of machine and operating system."
    exit 1
  fi

  # Support for GDBbundle under OPENSTEP
  "$GDB" -connect TextEdit $gdbargs "$full_appname/$appname" "$corearg"

else
  # Determine if the application has a binary for this operating system
  if [ -z "$GNUSTEP_FLATTENED" -a ! -d "$full_appname/$GNUSTEP_HOST_CPU/$GNUSTEP_HOST_OS" ]; then
    echo "$full_appname application does not have a binary for this kind of machine and operating system."
    exit 1
  fi

  if [ -z "$GNUSTEP_FLATTENED" -a ! -d "$full_appname/$GNUSTEP_HOST_CPU/$GNUSTEP_HOST_OS/$LIBRARY_COMBO" ]; then
    echo "$full_appname application does not have a binary for this combination of libraries: $LIBRARY_COMBO."
    exit 1
  fi

if [ -z "$GNUSTEP_FLATTENED" ]; then
  file_appname="$full_appname/$GNUSTEP_HOST_CPU/$GNUSTEP_HOST_OS/$LIBRARY_COMBO/$appname"
else
  file_appname="$full_appname/$appname"
fi

#Support for GDBbundle under OPENSTEP
  if [ $GNUSTEP_HOST_OS = nextstep4 ]; then
    "$GDB" -connect TextEdit "$file_appname" "$corearg"
  else
    if [ -z "$corearg" ]; then

       # Arguments passed to debugapp are passed over to the
       # application, in the same way as it happens for openapp.
       "$GDB" --args "$file_appname" "$@"
     else
       "$GDB" "$file_appname" "$corearg"
     fi
  fi

fi