| #!/bin/sh |
| # |
| # This Source Code Form is subject to the terms of the Mozilla Public |
| # License, v. 2.0. If a copy of the MPL was not distributed with this |
| # file, You can obtain one at http://mozilla.org/MPL/2.0/. |
| cmdname=`basename "$0"` |
| MOZ_DIST_BIN=`dirname "$0"` |
| MOZ_DEFAULT_NAME="./${cmdname}-bin" |
| MOZ_APPRUNNER_NAME="./mozilla-bin" |
| MOZ_PROGRAM="" |
| |
| exitcode=1 |
| # |
| ## |
| ## Functions |
| ## |
| ########################################################################## |
| moz_usage() |
| { |
| echo "Usage: ${cmdname} [options] [program]" |
| echo "" |
| echo " options:" |
| echo "" |
| echo " -g Run in debugger." |
| echo " --debug" |
| echo "" |
| echo " -d debugger Debugger to use." |
| echo " --debugger debugger" |
| echo "" |
| echo " -a debugger_args Arguments passed to [debugger]." |
| echo " --debugger-args debugger_args" |
| echo "" |
| echo " Examples:" |
| echo "" |
| echo " Run the mozilla-bin binary" |
| echo "" |
| echo " ${cmdname} mozilla-bin" |
| echo "" |
| echo " Debug the mozilla-bin binary in gdb" |
| echo "" |
| echo " ${cmdname} -g mozilla-bin -d gdb" |
| echo "" |
| echo " Run mozilla-bin under valgrind with arguments" |
| echo "" |
| echo " ${cmdname} -g -d valgrind -a '--tool=memcheck --leak-check=full' mozilla-bin" |
| echo "" |
| return 0 |
| } |
| ########################################################################## |
| moz_bail() |
| { |
| message=$1 |
| echo |
| echo "$cmdname: $message" |
| echo |
| exit 1 |
| } |
| ########################################################################## |
| moz_test_binary() |
| { |
| binary=$1 |
| if [ -f "$binary" ] |
| then |
| if [ -x "$binary" ] |
| then |
| return 1 |
| fi |
| fi |
| return 0 |
| } |
| ########################################################################## |
| moz_get_debugger() |
| { |
| debuggers="ddd gdb dbx bdb native-gdb" |
| debugger="notfound" |
| done="no" |
| for d in $debuggers |
| do |
| moz_test_binary /bin/which |
| if [ $? -eq 1 ] |
| then |
| dpath=`which ${d}` |
| else |
| dpath=`LC_MESSAGES=C type ${d} | awk '{print $3;}' | sed -e 's/\.$//'` |
| fi |
| if [ -x "$dpath" ] |
| then |
| debugger=$dpath |
| break |
| fi |
| done |
| echo $debugger |
| return 0 |
| } |
| ########################################################################## |
| moz_run_program() |
| { |
| prog=$MOZ_PROGRAM |
| ## |
| ## Make sure the program is executable |
| ## |
| if [ ! -x "$prog" ] |
| then |
| moz_bail "Cannot execute $prog." |
| fi |
| ## |
| ## Run the program |
| ## |
| exec "$prog" ${1+"$@"} |
| exitcode=$? |
| } |
| ########################################################################## |
| moz_debug_program() |
| { |
| prog=$MOZ_PROGRAM |
| ## |
| ## Make sure the program is executable |
| ## |
| if [ ! -x "$prog" ] |
| then |
| moz_bail "Cannot execute $prog." |
| fi |
| if [ -n "$moz_debugger" ] |
| then |
| moz_test_binary /bin/which |
| if [ $? -eq 1 ] |
| then |
| debugger=`which $moz_debugger` |
| else |
| debugger=`LC_MESSAGES=C type $moz_debugger | awk '{print $3;}' | sed -e 's/\.$//'` |
| fi |
| else |
| debugger=`moz_get_debugger` |
| fi |
| if [ -x "$debugger" ] |
| then |
| # If you are not using ddd, gdb and know of a way to convey the arguments |
| # over to the prog then add that here- Gagan Saksena 03/15/00 |
| case `basename $debugger` in |
| native-gdb) echo "$debugger $moz_debugger_args --args $prog" ${1+"$@"} |
| exec "$debugger" $moz_debugger_args --args "$prog" ${1+"$@"} |
| exitcode=$? |
| ;; |
| gdb) echo "$debugger $moz_debugger_args --args $prog" ${1+"$@"} |
| exec "$debugger" $moz_debugger_args --args "$prog" ${1+"$@"} |
| exitcode=$? |
| ;; |
| ddd) echo "$debugger $moz_debugger_args --gdb -- --args $prog" ${1+"$@"} |
| exec "$debugger" $moz_debugger_args --gdb -- --args "$prog" ${1+"$@"} |
| exitcode=$? |
| ;; |
| *) echo "$debugger $moz_debugger_args $prog ${1+"$@"}" |
| exec $debugger $moz_debugger_args "$prog" ${1+"$@"} |
| exitcode=$? |
| ;; |
| esac |
| else |
| moz_bail "Could not find a debugger on your system." |
| fi |
| } |
| ########################################################################## |
| ## |
| ## Command line arg defaults |
| ## |
| moz_debug=0 |
| moz_debugger="" |
| moz_debugger_args="" |
| # |
| ## |
| ## Parse the command line |
| ## |
| while [ $# -gt 0 ] |
| do |
| case $1 in |
| -g | --debug) |
| moz_debug=1 |
| shift |
| ;; |
| -d | --debugger) |
| moz_debugger=$2; |
| if [ "${moz_debugger}" != "" ]; then |
| shift 2 |
| else |
| echo "-d requires an argument" |
| exit 1 |
| fi |
| ;; |
| -a | --debugger-args) |
| moz_debugger_args=$2; |
| if [ "${moz_debugger_args}" != "" ]; then |
| shift 2 |
| else |
| echo "-a requires an argument" |
| exit 1 |
| fi |
| ;; |
| *) |
| break; |
| ;; |
| esac |
| done |
| # |
| ## |
| ## Program name given in $1 |
| ## |
| if [ $# -gt 0 ] |
| then |
| MOZ_PROGRAM=$1 |
| shift |
| fi |
| ## |
| ## Program not given, try to guess a default |
| ## |
| if [ -z "$MOZ_PROGRAM" ] |
| then |
| ## |
| ## Try this script's name with '-bin' appended |
| ## |
| if [ -x "$MOZ_DEFAULT_NAME" ] |
| then |
| MOZ_PROGRAM=$MOZ_DEFAULT_NAME |
| ## |
| ## Try mozilla-bin |
| ## |
| elif [ -x "$MOZ_APPRUNNER_NAME" ] |
| then |
| MOZ_PROGRAM=$MOZ_APPRUNNER_NAME |
| fi |
| fi |
| # |
| # |
| ## |
| ## Make sure the program is executable |
| ## |
| if [ ! -x "$MOZ_PROGRAM" ] |
| then |
| moz_bail "Cannot execute $MOZ_PROGRAM." |
| fi |
| # |
| ## |
| ## Set MOZILLA_FIVE_HOME |
| ## |
| MOZILLA_FIVE_HOME=$MOZ_DIST_BIN |
| |
| if [ -z "$MRE_HOME" ]; then |
| MRE_HOME=$MOZILLA_FIVE_HOME |
| fi |
| ## |
| ## Set LD_LIBRARY_PATH |
| ## |
| ## On Solaris we use $ORIGIN (set in RUNPATH) instead of LD_LIBRARY_PATH |
| ## to locate shared libraries. |
| ## |
| ## When a shared library is a symbolic link, $ORIGIN will be replaced with |
| ## the real path (i.e., what the symbolic link points to) by the runtime |
| ## linker. For example, if dist/bin/libxul.so is a symbolic link to |
| ## toolkit/library/libxul.so, $ORIGIN will be "toolkit/library" instead of "dist/bin". |
| ## So the runtime linker will use "toolkit/library" NOT "dist/bin" to locate the |
| ## other shared libraries that libxul.so depends on. This only happens |
| ## when a user (developer) tries to start firefox, thunderbird, or seamonkey |
| ## under dist/bin. To solve the problem, we should rely on LD_LIBRARY_PATH |
| ## to locate shared libraries. |
| ## |
| ## Note: |
| ## We test $MOZ_DIST_BIN/*.so. If any of them is a symbolic link, |
| ## we need to set LD_LIBRARY_PATH. |
| ########################################################################## |
| moz_should_set_ld_library_path() |
| { |
| [ `uname -s` != "SunOS" ] && return 0 |
| for sharedlib in $MOZ_DIST_BIN/*.so |
| do |
| [ -h $sharedlib ] && return 0 |
| done |
| return 1 |
| } |
| if moz_should_set_ld_library_path |
| then |
| LD_LIBRARY_PATH=${MOZ_DIST_BIN}:${MOZ_DIST_BIN}/plugins:${MRE_HOME}${LD_LIBRARY_PATH:+":$LD_LIBRARY_PATH"} |
| fi |
| |
| if [ -n "$LD_LIBRARYN32_PATH" ] |
| then |
| LD_LIBRARYN32_PATH=${MOZ_DIST_BIN}:${MOZ_DIST_BIN}/plugins:${MRE_HOME}${LD_LIBRARYN32_PATH:+":$LD_LIBRARYN32_PATH"} |
| fi |
| if [ -n "$LD_LIBRARYN64_PATH" ] |
| then |
| LD_LIBRARYN64_PATH=${MOZ_DIST_BIN}:${MOZ_DIST_BIN}/plugins:${MRE_HOME}${LD_LIBRARYN64_PATH:+":$LD_LIBRARYN64_PATH"} |
| fi |
| if [ -n "$LD_LIBRARY_PATH_64" ]; then |
| LD_LIBRARY_PATH_64=${MOZ_DIST_BIN}:${MOZ_DIST_BIN}/plugins:${MRE_HOME}${LD_LIBRARY_PATH_64:+":$LD_LIBRARY_PATH_64"} |
| fi |
| # |
| # |
| ## Set SHLIB_PATH for HPUX |
| SHLIB_PATH=${MOZ_DIST_BIN}:${MRE_HOME}${SHLIB_PATH:+":$SHLIB_PATH"} |
| # |
| ## Set LIBPATH for AIX |
| LIBPATH=${MOZ_DIST_BIN}:${MRE_HOME}${LIBPATH:+":$LIBPATH"} |
| # |
| ## Set DYLD_LIBRARY_PATH for Mac OS X (Darwin) |
| DYLD_LIBRARY_PATH=${MOZ_DIST_BIN}:${MRE_HOME}${DYLD_LIBRARY_PATH:+":$DYLD_LIBRARY_PATH"} |
| # |
| ## Solaris Xserver(Xsun) tuning - use shared memory transport if available |
| if [ "$XSUNTRANSPORT" = "" ] |
| then |
| XSUNTRANSPORT="shmem" |
| XSUNSMESIZE="512" |
| export XSUNTRANSPORT XSUNSMESIZE |
| fi |
| |
| # Disable Gnome crash dialog |
| GNOME_DISABLE_CRASH_DIALOG=1 |
| export GNOME_DISABLE_CRASH_DIALOG |
| |
| if [ "$moz_debug" -eq 1 ] |
| then |
| echo "MOZILLA_FIVE_HOME=$MOZILLA_FIVE_HOME" |
| echo " LD_LIBRARY_PATH=$LD_LIBRARY_PATH" |
| if [ -n "$LD_LIBRARYN32_PATH" ] |
| then |
| echo "LD_LIBRARYN32_PATH=$LD_LIBRARYN32_PATH" |
| fi |
| if [ -n "$LD_LIBRARYN64_PATH" ] |
| then |
| echo "LD_LIBRARYN64_PATH=$LD_LIBRARYN64_PATH" |
| fi |
| if [ -n "$LD_LIBRARY_PATH_64" ]; then |
| echo "LD_LIBRARY_PATH_64=$LD_LIBRARY_PATH_64" |
| fi |
| if [ -n "$DISPLAY" ]; then |
| echo "DISPLAY=$DISPLAY" |
| fi |
| if [ -n "$FONTCONFIG_PATH" ]; then |
| echo "FONTCONFIG_PATH=$FONTCONFIG_PATH" |
| fi |
| if [ -n "$MOZILLA_POSTSCRIPT_PRINTER_LIST" ]; then |
| echo "MOZILLA_POSTSCRIPT_PRINTER_LIST=$MOZILLA_POSTSCRIPT_PRINTER_LIST" |
| fi |
| echo "DYLD_LIBRARY_PATH=$DYLD_LIBRARY_PATH" |
| echo " LIBRARY_PATH=$LIBRARY_PATH" |
| echo " SHLIB_PATH=$SHLIB_PATH" |
| echo " LIBPATH=$LIBPATH" |
| echo " ADDON_PATH=$ADDON_PATH" |
| echo " MOZ_PROGRAM=$MOZ_PROGRAM" |
| echo " MOZ_TOOLKIT=$MOZ_TOOLKIT" |
| echo " moz_debug=$moz_debug" |
| echo " moz_debugger=$moz_debugger" |
| echo "moz_debugger_args=$moz_debugger_args" |
| fi |
| # |
| export MOZILLA_FIVE_HOME LD_LIBRARY_PATH |
| export SHLIB_PATH LIBPATH LIBRARY_PATH ADDON_PATH DYLD_LIBRARY_PATH |
| |
| if [ $moz_debug -eq 1 ] |
| then |
| moz_debug_program ${1+"$@"} |
| else |
| moz_run_program ${1+"$@"} |
| fi |
| |
| exit $exitcode |