#!/bin/sh

# Use this if you don't want to install Opera to any special location,
# but execute it from the extracted package or current location.

# Required for Session Management
case $0 in /*) OPERA_SCRIPT_PATH=$0;; *) OPERA_SCRIPT_PATH=`/bin/pwd`/$0;; esac
export OPERA_SCRIPT_PATH

# Location of the Opera binaries
OPERA_BINARYDIR=./bin/
export OPERA_BINARYDIR

die () {
    echo "$@" >&2
    exit 1
}
# Parse commandline parameters
toset=
_PERSONALDIR_FROM_CMDLINE_='NO'
_QTSTYLE_FROM_CMDLINE_='NO'
for arg
do
  if test "$toset"
  then
      eval $toset='$arg'
      export $toset
      toset=
  else
      case $arg in
          --binarydir*|-binarydir*) toset=OPERA_BINARYDIR ;;
          --personaldir*|-personaldir*|--pd*|-pd*)
              _PERSONALDIR_FROM_CMDLINE_='YES'
              toset=OPERA_PERSONALDIR
              ;;
          --style|-style)
              _QTSTYLE_FROM_CMDLINE_='YES'
              ;;
      esac
  fi
done
test -z "$toset" || die "Missing parameter for $arg"

if test "${_PERSONALDIR_FROM_CMDLINE_}" = 'NO'; then
OPERA_PERSONALDIR="${PWD}/usersettings"
export OPERA_PERSONALDIR
fi

test "${_QTSTYLE_FROM_CMDLINE_}" = 'NO' && test -f "$HOME/.qt/qtrc" && _OPERA_QTSTYLE=`sed -n 's/^style=//p' $HOME/.qt/qtrc` && test "$_OPERA_QTSTYLE" && set -- "$@" -style "$_OPERA_QTSTYLE"

# Add ending path divider "/" if missing, so execution won't fail
if test `echo ${OPERA_BINARYDIR} | sed -e 's/.*[^\/]$/NO/'` = 'NO'; then
OPERA_BINARYDIR="${OPERA_BINARYDIR}/"
fi
if test ! -f "${OPERA_BINARYDIR}opera"; then
    echo "The Opera binary is not located at \"${OPERA_BINARYDIR}opera\"."
    echo "Please modify the wrapper script at \"${0}\"."
    exit 1
elif test ! -x "${OPERA_BINARYDIR}opera"; then
    echo "You do not have execute rights on \"${OPERA_BINARYDIR}opera\", please ask the sysadmin to chmod +x it."
    exit 1
fi

# Opera enviroment
if test "${OPERA_DIR}" = '' ; then
    OPERA_DIR="${PWD}"
fi
export OPERA_DIR

OPERA_LD_PRELOAD="${LD_PRELOAD}"
export OPERA_LD_PRELOAD

# Java tramples this - using %D ensures the default stays in (X11R6 and later):
if [ -z "$XFILESEARCHPATH" ]
then
    XFILESEARCHPATH='%D'
    export XFILESEARCHPATH
fi

# Native Java enviroment
if test -f "${OPERA_PERSONALDIR}/javapath.txt"
then
    INIJAVA=`cat ${OPERA_PERSONALDIR}/javapath.txt`
    if test -f "${INIJAVA}/libjava.so"; then OPERA_JAVA_DIR="${INIJAVA}"; fi
fi

if test ! "${OPERA_JAVA_DIR}"
then
    if test -f "${HOME}/.opera/javapath.txt"
    then
        INIJAVA=`cat ${HOME}/.opera/javapath.txt`
        if test -f "${INIJAVA}/libjava.so"; then OPERA_JAVA_DIR="${INIJAVA}"; fi
    fi
fi

if test ! "${OPERA_JAVA_DIR}"
then
    if test -f "${JAVA_HOME}/lib/i386/libjava.so"; then OPERA_JAVA_DIR="${JAVA_HOME}/lib/i386" ; fi
fi

if test -z "${OPERA_JAVA_DIR}"
then
    if test -f "${JAVA_HOME}/jre/lib/i386/libjava.so"; then OPERA_JAVA_DIR="${JAVA_HOME}/jre/lib/i386" ; fi
fi

if test ! "${OPERA_JAVA_DIR}"
then

    PREFIXES="/usr /usr/java /usr/lib /usr/local /opt"

    for SUNJAVA in \
	java-1.5.0-sun-1.5.0.06 \
	java-1.5.0-sun-1.5.0.06/jre \
	java-1.5.0-sun-1.5.0.05 \
	java-1.5.0-sun-1.5.0.05/jre \
	java-1.5.0-sun-1.5.0.04 \
	java-1.5.0-sun-1.5.0.04/jre \
	jre1.5.0_06 \
	jdk1.5.0_06/jre \
	jre1.5.0_05 \
	jdk1.5.0_05/jre \
	jre1.5.0_04 \
	jdk1.5.0_04/jre \
	jre1.5.0_03 \
	jdk1.5.0_03/jre \
	jre1.5.0_02 \
	jdk1.5.0_02/jre \
	jre1.5.0_01 \
	jdk1.5.0_01/jre \
	jdk1.5.0/jre \
	j2re1.4.2_06 \
	j2sdk1.4.2_06/jre \
	j2re1.4.2_04 \
	j2sdk1.4.2_04/jre \
	j2re1.4.2_03 \
	j2sdk1.4.2_03/jre \
	j2re1.4.2_02 \
	j2sdk1.4.2_02/jre \
	j2re1.4.2_01 \
	j2sdk1.4.2_01/jre \
	jdk1.4.2/jre \
	j2re1.4.2 \
	j2sdk1.4.2/jre \
	j2re1.4.1_01 \
	j2re1.4.1 \
	SUNJava2-1.4.1 \
	BlackdownJava2-1.4.1/jre \
	jdk1.4.1/jre \
	j2re1.4.0_01 \
	j2sdk1.4.0_01/jre \
	j2re1.4.0 \
	jre1.4.0 \
	jdk1.4.0/jre \
	j2se/1.4/jre \
	j2se/jre \
	jre1.3.1_15 \
	jre1.3.1_04 \
	jre1.3.1_02 \
	jre1.3.1_01 \
	jdk1.3.1/jre \
	j2re1.3.1 \
	jre1.3.1 \
	j2re1.3 \
	j2se/1.3/jre \
	SunJava2-1.3/jre \
	java2re \
	jdk1.2.2/jre \
	jdk1.2/jre \
	jre \
	java
    do
	for PREFIX in ${PREFIXES}
	do
	    if test -f "${PREFIX}/${SUNJAVA}/lib/i386/libjava.so"; then OPERA_JAVA_DIR="${PREFIX}/${SUNJAVA}/lib/i386" && break; fi
	done
	if test "${OPERA_JAVA_DIR}"; then break; fi
    done

    if test -z "${OPERA_JAVA_DIR}"
    then
	for IBMJAVA in \
	    IBMJava2-142/jre \
	    IBMJava2-141/jre \
	    IBMJava2-14/jre \
	    IBMJava2-131/jre \
	    jre1.3.0/jre
	do
	    for PREFIX in ${PREFIXES}
	    do
		if test -f "${PREFIX}/${IBMJAVA}/bin/libjava.so"; then OPERA_JAVA_DIR="${PREFIX}/${IBMJAVA}/bin" && break; fi
	    done
	    if test "${OPERA_JAVA_DIR}"; then break; fi
	done
    fi
fi

if test "${OPERA_JAVA_DIR}"
then
    LD_LIBRARY_PATH="${OPERA_JAVA_DIR}:${OPERA_JAVA_DIR}/native_threads:${OPERA_JAVA_DIR}/client:${OPERA_JAVA_DIR}/classic${LD_LIBRARY_PATH:+:}${LD_LIBRARY_PATH}"
    export LD_LIBRARY_PATH OPERA_JAVA_DIR
fi

if [ -z "$AWT_TOOLKIT" ]
then # Prefer raw X over Motif, to avoid libXm version/location complications:
    AWT_TOOLKIT=XToolkit
    export AWT_TOOLKIT
fi

# Workarounds for the "preloaded libXt" problem.
LD_PRELOAD="libjvm.so:libawt.so:${OPERA_LD_PRELOAD}"
export LD_PRELOAD
# To disable the first workaround, comment the next line.
JAVA_WORKAROUND=`${OPERA_BINARYDIR}/works 2>/dev/null`

if test "${JAVA_WORKAROUND}" = 'works'
then OPERA_FORCE_JAVA_ENABLED="1"
else
    LD_PRELOAD="libjava.so:${LD_PRELOAD}"
    # To disable the second workaround, comment the next line.
    IBMJAVA131_WORKAROUND=`${OPERA_BINARYDIR}/works 2>/dev/null`
    if test "${IBMJAVA131_WORKAROUND}" = 'works'
    then OPERA_FORCE_JAVA_ENABLED="1"
    else LD_PRELOAD="${OPERA_LD_PRELOAD}"
    fi
fi
export LD_PRELOAD OPERA_FORCE_JAVA_ENABLED

if test "${OPERA_JAVA_DIR}" -o "${OPERA_FORCE_JAVA_ENABLED}" = "1"
then
    if test ! -f "${OPERA_DIR}/java/opera.policy"
    then
	if test -w "${OPERA_DIR}/java/"
	then
	    policy_contain="
// Standard extensions get all permissions by default

grant codeBase \"file:\${java.home}/lib/ext/*\" {
	permission java.security.AllPermission;
};

// Opera package classes get all permissions
grant codebase \"file://${OPERA_DIR}/java//opera.jar\" {
	permission java.security.AllPermission;
};

// default permissions granted to all domains

grant {
	// Allows any thread to stop itself using the java.lang.Thread.stop()
	// method that takes no argument.
	// Note that this permission is granted by default only to remain
	// backwards compatible.
	// It is strongly recommended that you either remove this permission
	// from this policy file or further restrict it to code sources
	// that you specify, because Thread.stop() is potentially unsafe.
	// See \"http://java.sun.com/notes\" for more information.
	permission java.lang.RuntimePermission \"stopThread\";

	// allows anyone to listen on un-privileged ports
	permission java.net.SocketPermission \"localhost:1024-\", \"listen\";

	// \"standard\" properies that can be read by anyone

	permission java.util.PropertyPermission \"java.version\", \"read\";
	permission java.util.PropertyPermission \"java.vendor\", \"read\";
	permission java.util.PropertyPermission \"java.vendor.url\", \"read\";
	permission java.util.PropertyPermission \"java.class.version\", \"read\";
	permission java.util.PropertyPermission \"os.name\", \"read\";
	permission java.util.PropertyPermission \"os.version\", \"read\";
	permission java.util.PropertyPermission \"os.arch\", \"read\";
	permission java.util.PropertyPermission \"file.separator\", \"read\";
	permission java.util.PropertyPermission \"path.separator\", \"read\";
	permission java.util.PropertyPermission \"line.separator\", \"read\";

	permission java.util.PropertyPermission \"java.specification.version\", \"read\";
	permission java.util.PropertyPermission \"java.specification.vendor\", \"read\";
	permission java.util.PropertyPermission \"java.specification.name\", \"read\";

	permission java.util.PropertyPermission \"java.vm.specification.version\", \"read\";
	permission java.util.PropertyPermission \"java.vm.specification.vendor\", \"read\";
	permission java.util.PropertyPermission \"java.vm.specification.name\", \"read\";
	permission java.util.PropertyPermission \"java.vm.version\", \"read\";
	permission java.util.PropertyPermission \"java.vm.vendor\", \"read\";
	permission java.util.PropertyPermission \"java.vm.name\", \"read\";
};
"
	    echo "${policy_contain}" > "${OPERA_DIR}/java/opera.policy"
	    _CLEAN_OPERA_POLICY_='YES'
	fi
    fi
fi

# Acrobat Reader
for ACROBATBINDIR in \
    /usr/local/Adobe/Acrobat7.0/bin \
    /usr/lib/Acrobat7.0/bin \
    /usr/X11R6/lib/Acrobat7.0/bin \
    /opt/Acrobat7.0/bin \
    /usr/Acrobat7.0/bin \
    /usr/local/Acrobat7/bin \
    /usr/lib/Acrobat7/bin \
    /usr/X11R6/lib/Acrobat7/bin \
    /opt/Acrobat7/bin \
    /usr/Acrobat7/bin \
    /usr/local/Acrobat5/bin \
    /usr/lib/Acrobat5/bin \
    /usr/X11R6/lib/Acrobat5/bin \
    /opt/Acrobat5/bin \
    /usr/Acrobat5/bin \
    /opt/acroread-5.07/bin/ \
    /usr/local/Acrobat4/bin \
    /usr/lib/Acrobat4/bin \
    /usr/X11R6/lib/Acrobat4/bin \
    /opt/Acrobat4/bin \
    /usr/Acrobat4/bin \
    ; do
    if test -d "${ACROBATBINDIR}" ; then PATH="${PATH}:${ACROBATBINDIR}"; fi
done

# Setting environment relative to current working directory
LD_LIBRARY_PATH="${PWD}/lib${LD_LIBRARY_PATH:+:}${LD_LIBRARY_PATH}"
export LD_LIBRARY_PATH

# Running Opera
"${OPERA_BINARYDIR}opera" "$@"

# Cleanup
if test "${_CLEAN_OPERA_POLICY_}" = 'YES'; then
    if test -w "${OPERA_DIR}/java/opera.policy"; then
	rm "${OPERA_DIR}/java/opera.policy"
    fi
fi