#!/bin/sh # # The contents of this file are subject to the Netscape Public # License Version 1.1 (the "License"); you may not use this file # except in compliance with the License. You may obtain a copy of # the License at http://www.mozilla.org/NPL/ # # Software distributed under the License is distributed on an "AS # IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or # implied. See the License for the specific language governing # rights and limitations under the License. # # The Original Code is mozilla.org code. # # The Initial Developer of the Original Code is Netscape # Communications Corporation. Portions created by Netscape are # Copyright (C) 1998 Netscape Communications Corporation. All # Rights Reserved. # # Contributor(s): # ## ## For silly people running firefox through sudo ## if [ "${SUDO_USER}" ] && [ "${SUDO_USER}" != "${USER}" ]; then SUDO_HOME=`getent passwd ${SUDO_USER} | cut -f6 -d:` if [ "${SUDO_HOME}" = "${HOME}" ]; then echo "You should really not run firefox through sudo WITHOUT the -H option." >&2 echo "Anyway, I'll do as if you did use the -H option." >&2 HOME=`getent passwd ${USER} | cut -f6 -d:` if [ -z "${HOME}" ]; then echo "Could not find the correct home directory. Please use the -H option of sudo." >&2. fi fi fi ## ## Variables ## MOZ_DIST_BIN="/usr/lib/mozilla-firefox" MOZ_PROGRAM="/usr/lib/mozilla-firefox/firefox-bin" ## ## Load system and user properties ## RUNTIME_FIREFOX_DSP="${FIREFOX_DSP}" if [ -f /etc/mozilla-firefox/mozilla-firefoxrc ]; then . /etc/mozilla-firefox/mozilla-firefoxrc fi if [ -f "${HOME}/.mozilla/firefox/rc" ]; then . "${HOME}/.mozilla/firefox/rc" elif [ -f "${HOME}/.mozilla-firefoxrc" ]; then . "${HOME}/.mozilla-firefoxrc" echo "Warning: a .mozilla-firefoxrc file has been found in your home directory" >&2 echo "While it is still supported, it is recommended to move it to" >&2 echo "\${HOME}/.mozilla/firefox/rc" >&2 fi if [ "${RUNTIME_FIREFOX_DSP}" ]; then FIREFOX_DSP="${RUNTIME_FIREFOX_DSP}" fi if [ -z "${FIREFOX_DSP}" ]; then FIREFOX_DSP="auto" fi ## ## find /dev/dsp handler ## if [ "${FIREFOX_DSP}" = "auto" ]; then FIREFOX_DSP= if pgrep -u `id -u` esd >/dev/null 2>&1; then FIREFOX_DSP=esddsp elif pgrep -u `id -u` arts >/dev/null 2>&1; then FIREFOX_DSP=artsdsp fi elif [ "${FIREFOX_DSP}" = "none" ]; then FIREFOX_DSP= fi ## ## Set MOZILLA_FIVE_HOME ## MOZILLA_FIVE_HOME="/usr/lib/mozilla-firefox" export MOZILLA_FIVE_HOME ## ## Set LD_LIBRARY_PATH ## EXTENT_LD_LIB_PATH=/usr/lib/mozilla-firefox:/usr/lib/mozilla-firefox/plugins:/usr/lib/mozilla/plugins:/usr/lib if [ "${LD_LIBRARY_PATH}" ]; then LD_LIBRARY_PATH=${EXTENT_LD_LIB_PATH}:${LD_LIBRARY_PATH} else LD_LIBRARY_PATH=${EXTENT_LD_LIB_PATH} fi export LD_LIBRARY_PATH # Set XPSERVERLIST if not set yet for XPrint support, or complain. #if [ -z "${XPSERVERLIST}" ]; then # if [ -x /etc/init.d/xprint ]; then # XPSERVERLIST=`/etc/init.d/xprint get_xpserverlist` # export XPSERVERLIST # else # echo -e "Warning: \${XPSERVERLIST} not set and /etc/init.d/xprint not found;\nprinting will not work.\nPlease install the xprt-xprintorg package" >&2 # fi #fi #Set our package version, for use during start. if [ -f "${MOZILLA_FIVE_HOME}/pkg-ver" ]; then PKG_VER=`cat ${MOZILLA_FIVE_HOME}/pkg-ver`; fi verbose () { if [ "${VERBOSE}" ]; then echo $@ fi } echo_vars () { if [ "${VERBOSE}" ]; then for var in "$@"; do echo "$var=`eval echo \\${$var}`" done fi } # exec wrapper for verbosity exec_verbose () { verbose Running: $@ exec $@ } # exec wrapper for verbosity run_verbose () { verbose Running: $@ $@ } ## ## Set MOZ_ENABLE_PANGO ## MOZ_ENABLE_PANGO=1 export MOZ_ENABLE_PANGO # Figure out if we need to ser LD_ASSUME_KERNEL for older versions of the JVM. set_jvm_vars () { if [ ! -L /usr/lib/mozilla/plugins/libjavaplugin_oji.so ]; then return; fi JVM_LINK=`readlink /usr/lib/mozilla/plugins/libjavaplugin_oji.so` # is it relative? if so append the full path echo "${JVM_LINK}" | grep -e "^/" 2>&1 > /dev/null if [ "$?" -ne 0 ]; then JVM_LINK="/usr/lib/mozilla/plugins/${JVM_LINK}" fi JVM_BASE=`basename "${JVM_LINK}"` JVM_DIR=`dirname "${JVM_LINK}"` JVM_COMMAND="${JVM_DIR}/java" if [ ! -r "${JVM_COMMAND}" ]; then JVM_DIR="${JVM_DIR}/../../../bin/" JVM_COMMAND="${JVM_DIR}/java" # does the command exist? if [ ! -r "${JVM_COMMAND}" ]; then return fi fi # export this temporarily - it seems to work with old and new # versions of the JVM. export LD_ASSUME_KERNEL=2.2.5 # get the version JVM_VERSION=`${JVM_COMMAND} -version 2>&1 | grep version | cut -f 3 -d " " | sed -e 's/\"//g'` unset LD_ASSUME_KERNEL case "${JVM_VERSION}" in (1.3.0*) # bad JVM export LD_ASSUME_KERNEL=2.2.5 ;; esac echo_vars JVM_DIR JVM_VERSION } clean_profile() { # Clean up the XUL.mfasl unconditionally on launch, since we have the # corner case of when firefox is running when upgraded. Need a # better solution or upstream fix. # Clean up the compatibility.ini as well, since we have a corner case of when # some components register protocols. Need a better solution or upstream fix. if [ -f "${HOME}/.mozilla/firefox/profiles.ini" ]; then sed -e '/Path=/! d' -e 's,Path=/,/,' -e "s,Path=,${HOME}/.mozilla/firefox/," "${HOME}/.mozilla/firefox/profiles.ini" \ | while read dir do if [ -f "${dir}/ver" ]; then LOCAL_VER=`cat "${dir}/ver"` else LOCAL_VER=0 fi if `dpkg --compare-versions "$PKG_VER" gt "$LOCAL_VER"`; then rm -f "${dir}/XUL.mfasl" fi echo $PKG_VER > "${dir}/ver" if [ "${dir}/compreg.dat" -ot "/usr/lib/mozilla-firefox/components.ini" ]; then rm -f "${dir}/compatibility.ini" fi done fi } # OK, here's where all the real work gets done # parse command line APPLICATION_ID=firefox REMOTE=0 TRY_USE_EXIST=0 VERBOSE= DEBUG=0 DEBUGGER= first=1 opt= for arg in "$@"; do if [ ${first} -eq 1 ]; then set dummy first=0 fi case "${arg}" in -a | --display | -contentLocale | -UILocale | -remote | --debugger | -height | -width | -chrome | -P) prev=${arg} continue ;; esac if [ "${prev}" ]; then case "${prev}" in -a) APPLICATION_ID="${arg}" ;; --display) CMDLINE_DISPLAY="${arg}" set "$@" --display "${arg}" ;; -remote) REMOTE=1 set "$@" -remote "${arg}" ;; --debugger) DEBUGGER="${arg}" DEBUG=1 ;; *) set "$@" "${prev}" "${arg}" ;; esac prev= elif [ "${arg}" ]; then case "$arg" in --verbose | -V) VERBOSE=1 ;; --display=*) CMDLINE_DISPLAY=`echo ${arg} | sed 's/^--display=//'` set "$@" "${arg}" ;; -g | -debug) DEBUG=1 ;; -*) set "$@" "${arg}" ;; *) if [ -z "${opt}" ]; then opt="${arg}" # check to make sure that the url contains at least a :/ in it. echo ${opt} | grep -e ':/' 2>/dev/null > /dev/null RETURN_VAL=$? if [ "${RETURN_VAL}" -eq 1 ]; then # if it doesn't begin with a '/' and it exists when the pwd is # prepended to it then append the full path echo ${opt} | grep -e '^/' 2>/dev/null > /dev/null if [ "$?" -ne "0" ] && [ -e "`pwd`/${opt}" ]; then opt="`pwd`/${opt}" fi # Replace all spaces by %20 and prepend file:// if it is a valid file if [ -e "${opt}" ]; then opt="file://`echo ${opt} | sed 's/ /%20/g'`" fi fi set "$@" "${opt}" else set "$@" "${arg}" fi ;; esac fi done if [ $# -ne 0 ]; then shift fi OPTIONS="$@" if [ ${DEBUG} -eq 1 ]; then if [ "${DEBUGGER}" = "" ]; then DEBUGGER=gdb fi TMPFILE=`mktemp -t firefox_argsXXXXXX` echo set args -a ${APPLICATION_ID} "$@" > ${TMPFILE} case "${DEBUGGER}" in gdb) run_verbose gdb "${MOZ_PROGRAM}" -x ${TMPFILE} ;; ddd) run_verbose ddd --debugger "gdb -x ${TMPFILE}" "${MOZ_PROGRAM}" ;; *) run_verbose ${DEBUGGER} "${MOZ_PROGRAM}" "$@" ;; esac rm ${TMPFILE} exit fi if [ $# -eq 1 ] && [ "$1" = "${opt}" ]; then TRY_USE_EXIST=1 fi MOZ_PROGRAM="${MOZ_PROGRAM} -a ${APPLICATION_ID}" echo_vars FIREFOX_DSP APPLICATION_ID CMDLINE_DISPLAY DISPLAY REMOTE \ TRY_USE_EXIST OPTIONS DEBUG DEBUGGER # set our JVM vars # we don't want to do this (Ubuntu: #5636) #set_jvm_vars PING_STATUS=1 # No need to check if DISPLAY is not set, it will fail. But let's continue, # so that firefox gives the display error message itself. if [ "${DISPLAY}" ] || [ "${CMDLINE_DISPLAY}" ]; then if [ -z "${CMDLINE_DISPLAY}" ]; then CMDLINE_DISPLAY="${DISPLAY}" fi # check to see if there's an already running instance or not verbose "Running: ${MOZ_PROGRAM} -remote 'ping()'" DISPLAY="${CMDLINE_DISPLAY}" ${MOZ_PROGRAM} -remote 'ping()' \ > /dev/null 2>&1 PING_STATUS=$? fi echo_vars PING_STATUS # Clean user profile if we are not trying to use the running instance and only # if the check was successful (status 2) if [ "${REMOTE}" -eq 0 ] && [ "${TRY_USE_EXIST}" -eq 0 ] && [ "${PING_STATUS}" -eq 2 ]; then verbose "Cleaning user profile" clean_profile fi # If there is no command line argument at all then try to open a new # window in an already running instance. if [ "${PING_STATUS}" -eq 0 ] && [ $# -eq 0 ]; then exec_verbose ${MOZ_PROGRAM} -remote "xfeDoCommand(openBrowser)" fi # If we are trying to use existing instance, and it exists, and we're not having # a -remote command line argument, then open in window or tab accordingly. if [ "${REMOTE}" -eq 0 ] && [ "${TRY_USE_EXIST}" -eq 1 ] && [ "${PING_STATUS}" -eq 0 ]; then # just pass it off if it looks like a url exec_verbose ${MOZ_PROGRAM} -remote "openURL(${opt})" fi if type "${FIREFOX_DSP}" > /dev/null 2>&1; then # echo "Using $FIREFOX_DSP." MOZ_PROGRAM="${FIREFOX_DSP} ${MOZ_PROGRAM}" fi exec_verbose ${MOZ_PROGRAM} "$@"