X-Git-Url: http://git.lttng.org/?a=blobdiff_plain;f=runlttv;h=ebb968f48a20f388211a5f9327de75fe7f59127e;hb=64242d134638369e81510c880ae66a88beba9c1b;hp=ceb6349b8c78e4d68d3091c1c16f8a7a76d6d451;hpb=78efd3990573bff80d1aa50d14f5687072f56bf5;p=lttv.git diff --git a/runlttv b/runlttv index ceb6349b..ebb968f4 100755 --- a/runlttv +++ b/runlttv @@ -5,66 +5,98 @@ # This script runs LTTV in place in the compile directory without need for # installing it with make install. # -# Run with the TF environment variable set to a trace directory to open it. -# ex: TF=/my/trace ./runlttv -# -# The .runlttvrc file can be used to control its behavior. -# - by setting the TRACEFILE variable, a trace can be automatically loaded -# ex: TRACEFILE="-t /tmp/traces/dijkstra-20071212" -# - by setting the ARGS variable, a different set of plugins can be loaded -# for an example see the ARGS= line below -# # In order for icons to display correctly, it might be necessary to create a # symlink: # $ ln -s ./lttv/modules/gui/lttvwindow/pixmaps # while in the same directory as this script. -RCFILE=".runlttvrc" +PROGNAME=$0 +BUILDPATH=$(dirname $0) +RCFILE="$(dirname $0)/.runlttvrc" +TEXTLIBS="-L ${BUILDPATH}/lttv/modules/text/.libs -m textDump" +EVALLIBS="-L ${BUILDPATH}/lttv/modules/text/.libs -m sync_chain_batch" +GRAPHLIBS="-L ${BUILDPATH}/lttv/modules/gui/lttvwindow/lttvwindow/.libs -m lttvwindow "\ +"-L ${BUILDPATH}/lttv/modules/gui/detailedevents/.libs -m guievents "\ +"-L ${BUILDPATH}/lttv/modules/gui/histogram/.libs -m guihistogram" +#"-L ${BUILDPATH}/lttv/modules/gui/controlflow/.libs -m guicontrolflow "\ +#"-L ${BUILDPATH}/lttv/modules/gui/tracecontrol/.libs -m guitracecontrol "\ +#"-L ${BUILDPATH}/lttv/modules/gui/statistics/.libs -m guistatistics "\ +#"-L ${BUILDPATH}/lttv/modules/gui/resourceview/.libs -m resourceview "\ +#"-L ${BUILDPATH}/lttv/modules/gui/filter/.libs -m guifilter "\ +#"-L ${BUILDPATH}/lttv/modules/gui/interrupts/.libs -m interrupts " -if [ "$MODE" = "text" ]; then - ARGS="-L lttv/modules/text/.libs -m textDump" -else - ARGS="-L lttv/modules/gui/lttvwindow/lttvwindow/.libs -m lttvwindow "\ -"-L lttv/modules/gui/controlflow/.libs -m guicontrolflow "\ -"-L lttv/modules/gui/detailedevents/.libs -m guievents "\ -"-L lttv/modules/gui/tracecontrol/.libs -m guitracecontrol "\ -"-L lttv/modules/gui/statistics/.libs -m guistatistics "\ -"-L lttv/modules/gui/resourceview/.libs -m resourceview "\ -"-L lttv/modules/gui/filter/.libs -m guifilter "\ -"-L lttv/modules/gui/interrupts/.libs -m interrupts "\ -"-L lttv/modules/gui/histogram/.libs -m guihistogram" -fi +DEFAULTMODE="gui" -if [ -e "lttv/lttv/.libs/lttv.real" ]; then - LTTV_EXEC="lttv/lttv/.libs/lttv.real" -elif [ -e "lttv/lttv/lttv.real" ]; then - LTTV_EXEC="lttv/lttv/lttv.real" +usage () { + echo "Usage: $0 [OPTION]... [TRACE]..." >/dev/stderr + echo "" >/dev/stderr + echo "Options:" >/dev/stderr + printf "\t-m MODE Output mode (modes: text, eval, gui)\n" >/dev/stderr + printf "\t-H HELPER Invoke LTTV through a helper program\n" >/dev/stderr + printf "\t (helpers: gdb, valgrind, massif, strace)\n" >/dev/stderr + printf "\t-b OPTIONS LTTV options to specify before the module list\n" >/dev/stderr + printf "\t-a OPTIONS LTTV options to specify after the module list\n" >/dev/stderr + echo "" >/dev/stderr +} + +if [ -e "${BUILDPATH}/lttv/lttv/.libs/lttv.real" ]; then + LTTV_EXEC="${BUILDPATH}/lttv/lttv/.libs/lttv.real" +elif [ -e "${BUILDPATH}/lttv/lttv/lttv.real" ]; then + LTTV_EXEC="${BUILDPATH}/lttv/lttv/lttv.real" else echo "error: LTTV should be compiled before running this script." >/dev/stderr exit 1 fi -if [ -n "$TF" ]; then - TRACEFILE="-t $TF" -fi +while getopts "H:m:b:a:h" options; do + case $options in + H) HELPER=$OPTARG;; + m) MODE=$OPTARG;; + b) BOPTIONS="$BOPTIONS $OPTARG";; + a) AOPTIONS="$AOPTIONS $OPTARG";; + h) usage; + exit 0;; + \?) usage; + exit 1;; + esac +done +shift $(($OPTIND - 1)) + +for trace in $@ +do + TRACEFILES="$TRACEFILES -t $trace " +done if [ -e "$RCFILE" ]; then - source "$RCFILE"; + . "$RCFILE"; +fi + +if [ -z "$MODE" ]; then + MODE=$DEFAULTMODE +fi + +if [ "$MODE" = "text" ]; then + LIBS="$TEXTLIBS" +elif [ "$MODE" = "eval" ]; then + LIBS="$EVALLIBS" +elif [ "$MODE" = "gui" ]; then + LIBS="$GRAPHLIBS" +else + echo "$PROGNAME: unknown mode -- $MODE" >/dev/stderr + exit 1 fi -HELPER=$1 +LTTV_ARGS="$BOPTIONS $LIBS $TRACEFILES $AOPTIONS" if [ "$HELPER" = "gdb" ]; then - shift - LD_LIBRARY_PATH=ltt/.libs gdb --args $LTTV_EXEC $ARGS $TRACEFILE $@ + LD_LIBRARY_PATH=${BUILDPATH}/ltt/.libs gdb --args $LTTV_EXEC $LTTV_ARGS elif [ "$HELPER" = "valgrind" ]; then - shift - LD_LIBRARY_PATH=ltt/.libs valgrind --track-origins=yes --show-reachable=yes --leak-check=full --error-limit=no $LTTV_EXEC $ARGS $TRACEFILE $@ + LD_LIBRARY_PATH=${BUILDPATH}/ltt/.libs G_SLICE=always-malloc G_DEBUG=gc-friendly valgrind --show-reachable=yes --leak-check=full --tool=memcheck --suppressions=debug/gtk.suppression --track-origins=yes --error-limit=no $LTTV_EXEC $LTTV_ARGS +elif [ "$HELPER" = "callgrind" ]; then + LD_LIBRARY_PATH=${BUILDPATH}/ltt/.libs G_SLICE=always-malloc G_DEBUG=gc-friendly valgrind --tool=callgrind $LTTV_EXEC $LTTV_ARGS elif [ "$HELPER" = "massif" ]; then - shift - LD_LIBRARY_PATH=ltt/.libs valgrind --tool=massif $LTTV_EXEC $ARGS $TRACEFILE $@ + LD_LIBRARY_PATH=${BUILDPATH}/ltt/.libs valgrind --tool=massif $LTTV_EXEC $LTTV_ARGS elif [ "$HELPER" = "strace" ]; then - shift - LD_LIBRARY_PATH=ltt/.libs strace $LTTV_EXEC $ARGS $TRACEFILE $@ + LD_LIBRARY_PATH=${BUILDPATH}/ltt/.libs strace $LTTV_EXEC $LTTV_ARGS else - LD_LIBRARY_PATH=ltt/.libs $LTTV_EXEC $ARGS $TRACEFILE $@ + LD_LIBRARY_PATH=${BUILDPATH}/ltt/.libs $LTTV_EXEC $LTTV_ARGS fi