/tools/Linux/xbmc.sh.in
http://github.com/xbmc/xbmc · Autoconf · 145 lines · 113 code · 9 blank · 23 comment · 18 complexity · a8506b3c5cd65facdc1a92f63dd00e9b MD5 · raw file
- #!/bin/sh
- # Copyright (C) 2008-2013 Team XBMC
- # http://xbmc.org
- #
- # This Program 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, or (at your option)
- # any later version.
- #
- # 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 XBMC; see the file COPYING. If not, write to
- # the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
- # http://www.gnu.org/copyleft/gpl.html
- SAVED_ARGS="$@"
- prefix="@prefix@"
- exec_prefix="@exec_prefix@"
- datarootdir="@datarootdir@"
- LIBDIR="@libdir@"
- # Check for some options used by this script
- while [ "$#" -gt "0" ]
- do
- case "$1" in
- --setlibdir)
- LIBDIR="$2"
- shift; shift
- ;;
- *)
- shift
- ;;
- esac
- done
- single_stacktrace()
- {
- # core filename is either "core.$PID" or "core"
- find "$1" -maxdepth $2 -name 'core*' | while read core; do
- LC_ALL=C gdb --core="$core" --batch 2> /dev/null | grep -q "^Core was generated by \`$LIBDIR/xbmc/xbmc.bin" || continue
- echo "=====> Core file: "$core" ($(stat -c%y "$core"))" >> $FILE
- echo " =========================================" >> $FILE
- gdb "$LIBDIR/xbmc/xbmc.bin" --core="$core" --batch -ex "thread apply all bt" 2> /dev/null >> $FILE
- rm -f "$core"
- done
- }
- print_crash_report()
- {
- FILE="$HOME/xbmc_crashlog-`date +%Y%m%d_%H%M%S`.log"
- echo "############## XBMC CRASH LOG ###############" >> $FILE
- echo >> $FILE
- echo "################ SYSTEM INFO ################" >> $FILE
- echo -n " Date: " >> $FILE
- date >> $FILE
- echo " XBMC Options: $*" >> $FILE
- echo -n " Arch: " >> $FILE
- uname -m >> $FILE
- echo -n " Kernel: " >> $FILE
- uname -rvs >> $FILE
- echo -n " Release: " >> $FILE
- if [ -f /etc/os-release ]; then
- . /etc/os-release
- echo $NAME $VERSION >> $FILE
- elif which lsb_release > /dev/null; then
- echo >> $FILE
- lsb_release -a 2> /dev/null | sed -e 's/^/ /' >> $FILE
- else
- echo "lsb_release not available" >> $FILE
- fi
- echo "############## END SYSTEM INFO ##############" >> $FILE
- echo >> $FILE
- echo "############### STACK TRACE #################" >> $FILE
- if which gdb >/dev/null 2>&1; then
- if which systemd-coredumpctl &> /dev/null; then
- systemd-coredumpctl dump -o core xbmc.bin &> /dev/null
- fi
- single_stacktrace "$PWD" 1
- # Find in plugins directories
- if [ $XBMC_HOME ]; then
- BASEDIR=$XBMC_HOME
- else
- BASEDIR="$LIBDIR/xbmc/"
- fi
- single_stacktrace "$BASEDIR" 5
- # find in user xbmc dir
- single_stacktrace $HOME/.xbmc/ 5
- else
- echo "gdb not installed, can't get stack trace." >> $FILE
- fi
- echo "############# END STACK TRACE ###############" >> $FILE
- echo >> $FILE
- echo "################# LOG FILE ##################" >> $FILE
- echo >> $FILE
- if [ -f ~/.xbmc/temp/xbmc.log ]
- then
- cat ~/.xbmc/temp/xbmc.log >> $FILE
- echo >> $FILE
- else
- echo "Logfile not found in the usual place." >> $FILE
- echo "Please attach it seperately." >> $FILE
- echo "Use pastebin.com or similar for forums or IRC." >> $FILE
- fi
- echo >> $FILE
- echo "############### END LOG FILE ################" >> $FILE
- echo >> $FILE
- echo "############ END XBMC CRASH LOG #############" >> $FILE
- echo "Crash report available at $FILE"
- }
- python @datadir@/xbmc/FEH.py $SAVED_ARGS
- RET=$?
- if [ $RET -ne 0 ]; then
- exit $RET
- fi
- if which gdb >/dev/null 2>&1; then
- # Output warning in case ulimit is unsupported by shell
- eval ulimit -c unlimited
- if [ ! $? = "0" ]; then
- echo "xbmc: ulimit is unsupported by this shell" 1>&2
- fi
- fi
- LOOP=1
- while [ $(( $LOOP )) = "1" ]
- do
- LOOP=0
- "$LIBDIR/xbmc/xbmc.bin" $SAVED_ARGS
- RET=$?
- if [ $(( $RET == 65 )) = "1" ]
- then # User requested to restart app
- LOOP=1
- elif [ $(( ($RET >= 131 && $RET <= 136) || $RET == 139 )) = "1" ]
- then # Crashed with core dump
- print_crash_report
- fi
- done
- exit $RET