home *** CD-ROM | disk | FTP | other *** search
/ Chip 2002 January / 01_02.iso / linux / mozilla-installer_linux / xpi / browser.xpi / bin / run-mozilla.sh < prev    next >
Linux/UNIX/POSIX Shell Script  |  2001-11-20  |  10KB  |  425 lines

  1. #!/bin/sh
  2. #
  3. # The contents of this file are subject to the Netscape Public
  4. # License Version 1.1 (the "License"); you may not use this file
  5. # except in compliance with the License. You may obtain a copy of
  6. # the License at http://www.mozilla.org/NPL/
  7. #
  8. # Software distributed under the License is distributed on an "AS
  9. # IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
  10. # implied. See the License for the specific language governing
  11. # rights and limitations under the License.
  12. #
  13. # The Original Code is mozilla.org code.
  14. #
  15. # The Initial Developer of the Original Code is Netscape
  16. # Communications Corporation.  Portions created by Netscape are
  17. # Copyright (C) 1998 Netscape Communications Corporation. All
  18. # Rights Reserved.
  19. #
  20. # Contributor(s): 
  21. #
  22. #
  23. ## 
  24. ## Usage:
  25. ##
  26. ## $ run-mozilla.sh [options] [program] [program arguments]
  27. ##
  28. ## This script is meant to run a mozilla program from the mozilla
  29. ## source tree.  This is mostly useful to folks hacking on mozilla.
  30. ##
  31. ## The script will setup all the environment voodoo needed to make
  32. ## mozilla work.
  33. ##
  34. ## In the absence of a program being specified on the command line, the
  35. ## script determines which program to run in this order of existence.
  36. ##
  37. ##   1. The program named foo-bin where foo is the name of this script,
  38. ##      (e.g. rename this script as TestEmbed and it will look for
  39. ##      TestEmbed-bin).
  40. ##   2. The "viewer" executable.
  41. ##   3. The "mozilla-bin" executable
  42. #
  43. ## Standard shell script disclaimer blurb thing:
  44. ##
  45. ## This script is a hack.  It's brute force.  It's horrible.  
  46. ## It doesn't use Artificial Intelligence.  It doesn't use Virtual Reality.
  47. ## It's not perl.  It's not python.  It probably won't work unchanged on
  48. ## the "other" thousands of unices.  But it worksforme.  --ramiro
  49. ##
  50. ## If you have an improvement, patch, idea, whatever, on how to make this
  51. ## script better, post it here:
  52. ##
  53. ## news://news.mozilla.org/netscape.public.mozilla.patches
  54. ## news://news.mozilla.org/netscape.public.mozilla.unix
  55. ## 
  56. #
  57. ##
  58. ## Potential improvements:
  59. ##
  60. ## + Run from anywhere in the tree.
  61. ## + Run ldd on the program and report missing dlls
  62. ## + Deal with NSPR in the tree
  63. ## + All the other unices
  64. ##
  65. #
  66. cmdname=`basename $0`
  67. MOZ_DIST_BIN=`dirname $0`
  68. MOZ_DEFAULT_NAME="./${cmdname}-bin"
  69. MOZ_APPRUNNER_NAME="./mozilla-bin"
  70. MOZ_VIEWER_NAME="./viewer"
  71. MOZ_PROGRAM=""
  72.  
  73. exitcode=0
  74. #
  75. ##
  76. ## Functions
  77. ##
  78. ##########################################################################
  79. moz_usage()
  80. {
  81. echo "Usage:  ${cmdname} [options] [program]"
  82. echo ""
  83. echo "  options:"
  84. echo ""
  85. echo "    -g                   Run in debugger."
  86. echo "    --debug"
  87. echo ""
  88. echo "    -d debugger          Debugger to use."
  89. echo "    --debugger debugger"
  90. echo ""
  91. echo "  Examples:"
  92. echo ""
  93. echo "  Run the viewer"
  94. echo ""
  95. echo "    ${cmdname} viewer"
  96. echo ""
  97. echo "  Run the mozilla-bin binary"
  98. echo ""
  99. echo "    ${cmdname} mozilla-bin"
  100. echo ""
  101. echo "  Debug the viewer in a debugger"
  102. echo ""
  103. echo "    ${cmdname} -g viewer"
  104. echo ""
  105. echo "  Debug the mozilla-bin binary in gdb"
  106. echo ""
  107. echo "    ${cmdname} -g mozilla-bin -d gdb"
  108. echo ""
  109.     return 0
  110. }
  111. ##########################################################################
  112. moz_bail()
  113. {
  114.     message=$1
  115.     echo
  116.     echo "$cmdname: $message"
  117.     echo
  118.     exit 1
  119. }
  120. ##########################################################################
  121. moz_test_binary()
  122. {
  123.     binary=$1
  124.     if [ -f "$binary" ]
  125.     then
  126.         if [ -x "$binary" ]
  127.         then
  128.             return 1
  129.         fi
  130.     fi
  131.     return 0
  132. }
  133. ##########################################################################
  134. moz_get_debugger()
  135. {
  136.     debuggers="ddd gdb dbx bdb"
  137.     debugger="notfound"
  138.     done="no"
  139.     for d in $debuggers
  140.     do
  141.         moz_test_binary /bin/type
  142.         if [ $? -eq 1 ]
  143.         then
  144.             dpath=`type ${d} | awk '{print $3;}'`    
  145.         else     
  146.             dpath=`which ${d}`    
  147.         fi
  148.         if [ -x "$dpath" ]
  149.         then
  150.             debugger=$dpath
  151.             break
  152.         fi
  153.     done
  154.     echo $debugger
  155.     return 0
  156. }
  157. ##########################################################################
  158. moz_run_program()
  159. {
  160.     prog=$MOZ_PROGRAM
  161.     ##
  162.     ## Make sure the program is executable
  163.     ##
  164.     if [ ! -x "$prog" ]
  165.     then
  166.         moz_bail "Cannot execute $prog."
  167.     fi
  168.     ##
  169.     ## Use md5sum to crc a core file.  If md5sum is not found on the system,
  170.     ## then dont debug core files.
  171.     ##
  172.     moz_test_binary /bin/type
  173.     if [ $? -eq 1 ]
  174.     then
  175.         crc_prog=`type md5sum | awk '{print $3;}'`
  176.     else
  177.         crc_prog=`which md5sum`
  178.     fi
  179.     if [ -x "$crc_prog" ]
  180.     then
  181.         DEBUG_CORE_FILES=1
  182.     fi
  183.     if [ "$DEBUG_CORE_FILES" ]
  184.     then
  185.         crc_old=
  186.         if [ -f core ]
  187.         then
  188.             crc_old=`$crc_prog core | awk '{print $1;}' `
  189.         fi
  190.     fi
  191.     ##
  192.     ## Run the program
  193.     ##
  194.     $prog ${1+"$@"}
  195.     exitcode=$?
  196.     if [ "$DEBUG_CORE_FILES" ]
  197.     then
  198.         if [ -f core ]
  199.         then
  200.             crc_new=`$crc_prog core | awk '{print $1;}' `
  201.         fi
  202.     fi
  203.     if [ "$crc_old" != "$crc_new" ]
  204.     then
  205.         printf "\n\nOh no!  %s just dumped a core file.\n\n" $prog
  206.         printf "Do you want to debug this ? "
  207.         printf "You need a lot of memory for this, so watch out ? [y/n] "
  208.         read ans
  209.         if [ "$ans" = "y" ]
  210.         then
  211.             debugger=`moz_get_debugger`
  212.             if [ -x "$debugger" ]
  213.             then
  214.                 echo "$debugger $prog core"
  215.  
  216.                 # See http://www.mozilla.org/unix/debugging-faq.html
  217.                 # For why LD_BIND_NOW is needed
  218.                 LD_BIND_NOW=1; export LD_BIND_NOW
  219.  
  220.                 $debugger $prog core
  221.             else
  222.                 echo "Could not find a debugger on your system."
  223.             fi
  224.         fi
  225.     fi
  226. }
  227. ##########################################################################
  228. moz_debug_program()
  229. {
  230.     prog=$MOZ_PROGRAM
  231.     ##
  232.     ## Make sure the program is executable
  233.     ##
  234.     if [ ! -x "$prog" ]
  235.     then
  236.         moz_bail "Cannot execute $prog."
  237.     fi
  238.     if [ -n "$moz_debugger" ]
  239.     then
  240.         moz_test_binary /bin/type
  241.         if [ $? -eq 1 ]
  242.         then    
  243.             debugger=`type $moz_debugger | awk '{print $3;}'` 
  244.         else
  245.             debugger=`which $moz_debugger` 
  246.         fi    
  247.     else
  248.         debugger=`moz_get_debugger`
  249.     fi
  250.     if [ -x "$debugger" ] 
  251.     then
  252.         echo "set args ${1+"$@"}" > /tmp/mozargs$$ 
  253. # If you are not using ddd, gdb and know of a way to convey the arguments 
  254. # over to the prog then add that here- Gagan Saksena 03/15/00
  255.         case `basename $debugger` in
  256.             gdb) echo "$debugger $prog -x /tmp/mozargs$$"
  257.                 $debugger $prog -x /tmp/mozargs$$
  258.         exitcode=$?
  259.                 ;;
  260.             ddd) echo "$debugger --debugger \"gdb -x /tmp/mozargs$$\" $prog"
  261.                 $debugger --debugger "gdb -x /tmp/mozargs$$" $prog
  262.         exitcode=$?
  263.                 ;;
  264.             *) echo "$debugger $prog ${1+"$@"}"
  265.                 $debugger $prog ${1+"$@"}
  266.         exitcode=$?
  267.                 ;;
  268.         esac
  269.         /bin/rm /tmp/mozargs$$
  270.     else
  271.         echo "Could not find a debugger on your system." 
  272.     fi
  273. }
  274. ##########################################################################
  275. ##
  276. ## Command line arg defaults
  277. ##
  278. moz_debug=0
  279. moz_debugger=""
  280. #
  281. ##
  282. ## Parse the command line
  283. ##
  284. while [ $# -gt 0 ]
  285. do
  286.   case $1 in
  287.     -g | --debug)
  288.       moz_debug=1
  289.       shift
  290.       ;;
  291.     -d | --debugger)
  292.       moz_debugger=$2;
  293.       if [ "${moz_debugger}" != "" ]; then
  294.     shift 2
  295.       else
  296.         echo "-d requires an argument"
  297.         exit 1
  298.       fi
  299.       ;;
  300.     *)
  301.       break;
  302.       ;;
  303.   esac
  304. done
  305. #
  306. ##
  307. ## Program name given in $1
  308. ##
  309. if [ $# -gt 0 ]
  310. then
  311.     MOZ_PROGRAM=$1
  312.     shift
  313. fi
  314. ##
  315. ## Program not given, try to guess a default
  316. ##
  317. if [ -z "$MOZ_PROGRAM" ]
  318. then
  319.     ##
  320.     ## Try this script's name with '-bin' appended
  321.     ##
  322.     if [ -x "$MOZ_DEFAULT_NAME" ]
  323.     then
  324.         MOZ_PROGRAM=$MOZ_DEFAULT_NAME
  325.     ## Try viewer (this should be deprecated)
  326.     ## 
  327.     elif [ -x "$MOZ_VIEWER_NAME" ]
  328.     then
  329.         MOZ_PROGRAM=$MOZ_VIEWER_NAME
  330.     ##
  331.     ## Try mozilla-bin
  332.     ## 
  333.     elif [ -x "$MOZ_APPRUNNER_NAME" ]
  334.     then
  335.         MOZ_PROGRAM=$MOZ_APPRUNNER_NAME
  336.     fi
  337. fi
  338. #
  339. #
  340. ##
  341. ## Make sure the program is executable
  342. ##
  343. if [ ! -x "$MOZ_PROGRAM" ]
  344. then
  345.     moz_bail "Cannot execute $MOZ_PROGRAM."
  346. fi
  347. #
  348. ##
  349. ## Set MOZILLA_FIVE_HOME
  350. ##
  351. MOZILLA_FIVE_HOME=$MOZ_DIST_BIN
  352. #
  353. ##
  354. ## Set LD_LIBRARY_PATH
  355. LD_LIBRARY_PATH=${MOZ_DIST_BIN}:${MOZ_DIST_BIN}/plugins${LD_LIBRARY_PATH+":$LD_LIBRARY_PATH"}
  356. if [ -n "$LD_LIBRARYN32_PATH" ]
  357. then
  358.     LD_LIBRARYN32_PATH=${MOZ_DIST_BIN}:${MOZ_DIST_BIN}/plugins${LD_LIBRARYN32_PATH+":$LD_LIBRARYN32_PATH"}
  359. fi
  360. if [ -n "$LD_LIBRARYN64_PATH" ]
  361. then
  362.     LD_LIBRARYN64_PATH=${MOZ_DIST_BIN}:${MOZ_DIST_BIN}/plugins${LD_LIBRARYN64_PATH+":$LD_LIBRARYN64_PATH"}
  363. fi
  364. if [ -n "$LD_LIBRARY_PATH_64" ]; then
  365.     LD_LIBRARY_PATH_64=${MOZ_DIST_BIN}:${MOZ_DIST_BIN}/plugins${LD_LIBRARY_PATH_64+":$LD_LIBRARY_PATH_64"}
  366. fi
  367. #
  368. #
  369. ## Set SHLIB_PATH for HPUX
  370. SHLIB_PATH=${MOZ_DIST_BIN}${SHLIB_PATH+":$SHLIB_PATH"}
  371. #
  372. ## Set LIBPATH for AIX
  373. LIBPATH=${MOZ_DIST_BIN}${LIBPATH+":$LIBPATH"}
  374. #
  375. ## Set LIBPATH for BeOS
  376. LIBRARY_PATH=${MOZ_DIST_BIN}:${MOZ_DIST_BIN}/components${LIBRARY_PATH+":$LIBRARY_PATH"}
  377. #
  378. ## Set ADDON_PATH for BeOS
  379. ADDON_PATH=${MOZ_DIST_BIN}${ADDON_PATH+":$ADDON_PATH"}
  380. #
  381. ## Solaris Xserver(Xsun) tuning - use shared memory transport if available
  382. if [ "$XSUNTRANSPORT" = "" ]
  383. then 
  384.         XSUNTRANSPORT="shmem" 
  385.         XSUNSMESIZE="64"
  386.         export XSUNTRANSPORT XSUNSMESIZE
  387. fi
  388.  
  389. if [ "$moz_debug" -eq 1 ]
  390. then
  391.   echo "MOZILLA_FIVE_HOME=$MOZILLA_FIVE_HOME"
  392.   echo "  LD_LIBRARY_PATH=$LD_LIBRARY_PATH"
  393.   if [ -n "$LD_LIBRARYN32_PATH" ]
  394.   then
  395.       echo "LD_LIBRARYN32_PATH=$LD_LIBRARYN32_PATH"
  396.   fi
  397.   if [ -n "$LD_LIBRARYN64_PATH" ]
  398.   then
  399.       echo "LD_LIBRARYN64_PATH=$LD_LIBRARYN64_PATH"
  400.   fi
  401.   if [ -n "$LD_LIBRARY_PATH_64" ]; then
  402.       echo "LD_LIBRARY_PATH_64=$LD_LIBRARY_PATH_64"
  403.   fi
  404.   echo "     LIBRARY_PATH=$LIBRARY_PATH"
  405.   echo "       SHLIB_PATH=$SHLIB_PATH"
  406.   echo "          LIBPATH=$LIBPATH"
  407.   echo "       ADDON_PATH=$ADDON_PATH"
  408.   echo "      MOZ_PROGRAM=$MOZ_PROGRAM"
  409.   echo "      MOZ_TOOLKIT=$MOZ_TOOLKIT"
  410.   echo "        moz_debug=$moz_debug"
  411.   echo "     moz_debugger=$moz_debugger"
  412. fi
  413. #
  414. export MOZILLA_FIVE_HOME LD_LIBRARY_PATH
  415. export SHLIB_PATH LIBPATH LIBRARY_PATH ADDON_PATH
  416.  
  417. if [ $moz_debug -eq 1 ]
  418. then
  419.     moz_debug_program ${1+"$@"}
  420. else
  421.     moz_run_program ${1+"$@"}
  422. fi
  423.  
  424. exit $exitcode
  425.