#!/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} "$@"