diff --git a/xnest.sh b/xnest.sh index 8a28e5d12..a49aa3414 100755 --- a/xnest.sh +++ b/xnest.sh @@ -1,54 +1,143 @@ #!/usr/bin/env bash -#export REDRAW_DEBUG=1 # To cause redraw- to happen slovly and obviously. -#export ECORE_ERROR_ABORT=1 # To cause ecore to abort on errors. -#export EVAS_NOCLEAN=1 # To cause evas to not unload modules. -disp_num=":1" # Which display do you want the xnest to be on? +debugger_default="b" +xnest_geo_default="800x600+0+0" -main=$DISPLAY -tmp=`mktemp` || exit 1 -echo -e "run\nbt\nq\ny" > $tmp -case "$1" in - "") action="gdb -x $tmp --args" ; main=$disp_num ;; - "-b") action="gdb -x $tmp --args" ; main=$disp_num ;; - "-c") action="cgdb" ; main=$disp_num ;; - "-d") action="ddd -display $main --args" ;; - "-e") action="" ; e_args="-display $disp_num" ;; - "-g") action="gdb --args" ; main=$disp_num ;; - "-l") action="valgrind --tool=memcheck --leak-check=yes --show-reachable=yes --log-file=valgrind_log" ; main=$disp_num ;; - "-m") action="valgrind --tool=memcheck --log-file=valgrind_log" ; main=$disp_num ;; - "-p") action="memprof --display=$main" ; main=$disp_num ;; - "-r") action="memprof_raster --display=$main" ; main=$disp_num ;; - "-s") action="strace -F -o strace_log" ;; - "-v") action="valkyrie -display $main" ; main=$disp_num ;; - *) echo -e "Usage : xnest.sh [debugger] ([enlightenment options])" - echo -e "\tdefault option is -b" - echo -e "\t-b use text debugger with auto backtrace\tgdb" - echo -e "\t-c use curses debugger\t\t\t\tcgdb" - echo -e "\t-d use the GUI debugger\t\t\t\tddd" - echo -e "\t-e enlightenment with no debugging" - echo -e "\t-g use text debugger\t\t\t\tgdb" - echo -e "\t-l leak check\t\t\t\t\tvalgrind" - echo -e "\t-m memory check\t\t\t\t\tvalgrind" - echo -e "\t-p memory profiling\t\t\t\tmemprof" - echo -e "\t-r raster's memory profiling\t\t\tmemprof_raster" - echo -e "\t-s show syscalls\t\t\t\tstrace" - echo -e "\t-v GUI memory check\t\t\t\tvalkyrie" - echo -e "" - echo -e "When you have finished with the text debugger, use the q command to quit." - echo -e "The valgrind options will leave a log file with a name beginning with valgrind_log" - exit - ;; +echo +for arg in $@; do + option=`echo "'$arg'" | cut -d'=' -f1 | tr -d "'"` + value=`echo "'$arg'" | cut -d'=' -f2- | tr -d "'"` + if [ "$value" == "$option" ]; then + value="" + fi + + case $option in + "--dbg-display") + if [ -z "$value" ]; then + echo "Missing value for $option= !" + exit 1 + fi + xnest_display=$value + ;; + "--dbg-xnest-geo") + if [ -z "$value" ]; then + echo "Missing value for $option= !" + exit 1 + fi + xnest_geo=$value + ;; + "--dbg-mode") + if [ -z "$value" ]; then + echo "Missing value for $option= !" + exit 1 + fi + debugger=$value + ;; + "--dbg-ecore-errors") export ECORE_ERROR_ABORT=1 ;; + "--dbg-ecore-noclean") export ECORE_NOCLEAN=1 ;; + "--dbg-redraw") export REDRAW_DEBUG=1 ;; + "--help") + echo "Usage: $0 [DEBUG-OPTION] ..." + echo " --dbg-display= = set the used display number" + echo " --dpg-xnest-geo= = set xnest geometry" + echo " --dbg-mode= = b: text debugger with auto backtrace (gdb)" + echo " c: curses debugger (cgdb)" + echo " d: GUI debugger (ddd)" + echo " e: no debugging" + echo " g: text debugger (gdb)" + echo " l: leak check (valgrind)" + echo " m: memory check (valgrind)" + echo " p: memory profiling (memprof)" + echo " r: raster's memory profiling (memprof_raster)" + echo " s: show syscalls (strace)" + echo " v: GUI memory check (valkyrie)" + echo " --dbg-ecore-errors = to cause ecore to abort on errors" + echo " --dbg-ecore-noclean = to cause ecore to not unload modules" + echo " --dbg-redraw = to cause redraw to happen slovly and obviously" + echo " --help = wysiwyg" + echo + echo "Usage: $0 [ENLIGHTENMENT-OPTION] ..." + enlightenment --help + exit 0 + ;; + *) enlightenment_args="$enlightenment_args $arg" ;; + esac +done + + +if [ -z "$xnest_display" ]; then + if [ -z "$DISPLAY" ]; then + echo "Couldn't read your \$DISPLAY env variable, are you running X?" + exit 1 + fi + + dcnt=`echo "$DISPLAY" | tr -d ':' | cut -d '.' -f1` + xnest_display=$(($dcnt+1)) +fi +if [ -z "$xnest_geo" ]; then + xnest_geo=$xnest_geo_default +fi +if [ -z "$debugger" ]; then + debugger=$debugger_default +fi +case $debugger in + "b") + tmpfile=`mktemp` + if [ -z "$tmpfile" ]; then + echo "Can't create tmp file!" + exit 1 + fi + echo -e "run\nbt\nq\ny" > $tmpfile + debugcmd="gdb -x $tmpfile --args" + ;; + "c") debugcmd="cgdb" ;; + "d") debugcmd="ddd -display $DISPLAY --args" ;; + "e") debugcmd="" ;; + "g") debugcmd="gdb --args" ;; + "l") debugcmd="valgrind --tool=memcheck --leak-check=yes --show-reachable=yes --log-file=valgrind_log" ;; + "m") debugcmd="valgrind --tool=memcheck --log-file=valgrind_log" ;; + "p") debugcmd="memprof --display=$DISPLAY" ;; + "r") debugcmd="memprof_raster --display=$DISPLAY" ;; + "s") debugcmd="strace -F -o strace_log" ;; + "v") debugcmd="valkyrie -display $DISPLAY" ;; esac -e_args="`echo -- $@ | cut -d' ' -f2-` $e_args" -Xnest $disp_num -ac & -sleep 2 # Someone reported that it starts E before X has started properly. +echo "- DISPLAY: $xnest_display" +echo "- XNEST GEOMETRY: $xnest_geo" +echo -n "- DEBUGMODE: " +if [ "$debugcmd" ]; then + echo "$debugcmd" +else + echo "NONE" +fi +if [ "$enlightenment_args" ]; then + echo "- ENLIGHTENMENT ARGUMENTS: $enlightenment_args" +fi +if [ "$ECORE_ERROR_ABORT" ]; then + echo "- ECORE ERROR ABORT" +fi +if [ "$ECORE_NOCLEAN" ]; then + echo "- ECORE NOCLEAN" +fi +if [ "$REDRAW_DEBUG" ]; then + echo "- REDRAW DEBUG" +fi +echo "======================================================" +echo +sleep 1 -export DISPLAY=$main; export E_START="enlightenment_start"; $action enlightenment $e_args -rm -f $tmp +Xnest :$xnest_display -ac -geometry $xnest_geo & +sleep 2 # Someone reported that it starts E before X has started properly. + +export DISPLAY=":$xnest_display" +export E_START="enlightenment_start" +$debugcmd enlightenment $enlightenment_args + +if [ "$tmpfile" ]; then + rm "$tmpfile" +fi killall -TERM Xnest