#!/bin/sh
#
# Helper script for using mallinfo on binaries in Scratchbox,
# includes stuff from run-standalone.sh.  This file is part of
# sp-memusage.
#
# 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 "launcher-wrapper"
# - Call the binary with this script, e.g. like this
#   export MALLINFO="yes" DISPLAY=:1
#   run-standalone.sh run-with-mallinfo <binary> <arguments>
# 
# This sets all the required environment variables etc.
# before calling mallinfo. (see README for more documentation about
# other valid values of MALLINFO)

wrapper=/usr/bin/maemo-summoner

if [ -x "$0.real" ]; then
	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
		app="$wrapper $1.launch"
		shift
        elif [ -x "$0.launch" ]; then
		app="$wrapper $0.launch"
	else
		app="$wrapper $1"
		shift
	fi
	echo "$0: $*"
elif [ -x "$1" ]; then
	app="$1"
	shift
else
	echo "ERROR: no application given!"
	exit 1
fi
app_opts="$*"

# funny things happen if library set to /etc/ld.so.preload is missing...
mallinfo=/usr/lib/mallinfo.so
if [ \! -f $mallinfo ]; then
	echo "ERROR: $mallinfo missing!"
	exit 1
fi

# LD_PRELOAD doesn't work in Scratchbox
if [ -f /targets/links/scratchbox.config ]; then
	echo "Using /etc/ld.so/preload for loading mallinfo to $app"
	echo $mallinfo > /etc/ld.so.preload
	$app $app_opts &
	rm /etc/ld.so.preload
else
	echo "Using LD_PRELOAD for loading mallinfo to $app"
	export LD_PRELOAD=$LD_PRELOAD:$mallinfo
	$app $app_opts &
fi

echo "To enable tracing you have to set MALLINFO variable:"
echo "   export MALLINFO="yes"        -- use 5 seconds timeout and SIGALRM"
echo "   export MALLINFO="signal=10"  -- use SIGUSR1 to generate the report"
echo "   export MALLINFO="period=10"  -- periodic report for 10 seconds"


