#!/bin/sh
#
# Helper script for Stracing binaries.
# This file is part of maemo-debug-scripts.
#
# Copyright (C) 2006,2007 by Nokia Corporation
#
# Contact: Eero Tamminen <eero.tamminen@nokia.com>
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License 
# version 2 as published by the Free Software Foundation. 
#
# This program is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
# General Public License for more details.
# 
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
# 02110-1301 USA
#
#
# There are several ways to use this script
# - Rename the original binary to <name>.real and
#   put/link this script in place of the original binary
# - If the binary is using "maemo-launcher", this can
#   be linked instead of the "maemo-invoker" and it will
#   automatically call "maemo-summoner"
# - Call the binary with this script, e.g. like this
#   DISPLAY=:1 run-standalone.sh run-with-strace <binary> <arguments>
# 
# This saves the logs into $HOME.
# You can post-process the strace output e.g. with strace-account.pl.

if [ -z $(which strace) ]; then
	echo "ERROR: strace missing!"
	exit 1
fi
wrapper=/usr/bin/maemo-summoner

if [ -x "$0.real" ]; then
	logapp="$0"
	app="$0.real"
elif [ -x "$1.launch" ] || [ -x "$0.launch" ] || [ "${1##*.}" = "launch" ]; then
	# use launcher wrapper automatically if given binary that needs it
	if [ \! -x "$wrapper" ]; then
		echo "ERROR: '$wrapper' for running .launch binaries is missing!"
		exit 1
	fi
	echo "$0: $*"
	if [ -x "$1.launch" ]; then
		logapp="$1"
		app="$wrapper $1.launch"
		shift
        elif [ -x "$0.launch" ]; then
		logapp="$0"
		app="$wrapper $0.launch"
	else
		logapp="$1"
		app="$wrapper $1"
		shift
	fi
	echo "$0: $*"
elif [ -x "$1" ]; then
	logapp="$1"
	app="$1"
	shift
else
	echo "ERROR: no application given!"
	exit 1
fi
app_opts="$*"

echo "strace -f $app $app_opts 2> $HOME/strace-${logapp##*/}-$$.log &"
strace -f $app $app_opts 2> $HOME/strace-${logapp##*/}-$$.log &

# See how many file descriptors each process takes
#while true; do
#  lsof -d 0-255|cut -c -10|sort|uniq -c|sort -n;
#  echo "---------------------";
#  sleep 2;
#done
