MINI MINI MANI MO
#!/bin/bash
#=============================================================================
# Launcher for Database Migration Assistant for Unicode
# Copyright (c) 2011, 2017, Oracle and/or its affiliates. All rights reserved.
#=============================================================================
#-----------------------------------------------------------------------------
# toAbsPath() takes two arguments
# 1) a pathname (assumed to point to a file)
# 2) a directory that the pathname is relative to
#
# and converts the pathname to an absolute path (if necessary), resolving
# any "." or ".." in the absolute path. The result is echoed to STDOUT.
#-----------------------------------------------------------------------------
toAbsPath()
{
local pathname="$1"
local rawAbsPath
# Test if $arg starts with '/'.
if [ "X`expr \"${pathname}\" : '\(/\).*'`" = "X/" ]
then
rawAbsPath="${pathname}"
else
local relativeTo="$2"
rawAbsPath="${relativeTo}/${pathname}"
fi
# Resolve any "." and ".." in $rawAbsPath.
local cwd=`pwd`
local rawAbsDir=`dirname "$rawAbsPath"`
local basename=`basename "$rawAbsPath"`
cd "${rawAbsDir}"
local dir=`pwd -P`
cd "${cwd}"
echo "${dir}/${basename}"
}
#-----------------------------------------------------------------------------
# getSymlinkTarget() takes one argument
# 1) a pathname
#
# If the pathname is a symlink, the symlink target is echoed to STDOUT.
# If the pathname is not a symlink, the pathname itself is echoed.
#-----------------------------------------------------------------------------
getSymlinkTarget()
{
local pathname="$1"
while [ -h "$pathname" ] ; do
local ls=`ls -ld "$pathname"`
local link=`expr "$ls" : '.*-> \(.*\)$'`
if expr "$link" : '.*/.*' > /dev/null
then
pathname="$link"
else
pathname="`dirname \"$pathname\"`/$link"
fi
done
echo "$pathname"
}
#-----------------------------------------------------------------------------
# main
#-----------------------------------------------------------------------------
STARTING_CWD=`pwd`
readonly STARTING_CWD
# INVOKED_AS contains the absolute path of the script invocation.
INVOKED_AS=`toAbsPath "$0" "\`pwd\`"`
readonly INVOKED_AS
# SCRIPT contains the absolute path of the actual (symlink-resolved) script.
SCRIPT=`toAbsPath "\`getSymlinkTarget \"${INVOKED_AS}\"\`" "\`dirname \"${INVOKED_AS}\"\`"`
readonly SCRIPT
# IS_CMD indicates whether the launcher should launch command-line scanner instead of GUI
IS_CMD=false
if [ -n "$1" ] && [ $1 = "-c" ]; then
IS_CMD=true
fi
readonly IS_CMD
# PRODUCT_HANDLES_HELP should be 1 if the java part of this product handles help argument
PRODUCT_HANDLES_HELP=0
# PRODUCT_DISPLAYS_BANNER should be 1 if the java part of this product displays the banner
PRODUCT_DISPLAYS_BANNER=0
. "`dirname "${SCRIPT}"`/../../ide/bin/launcher.sh"
# A segmentation fault or other core dump at startup can occur if
# the shell's stack size limit is too small. Uncomment the following
# line to raise the stack size to 4MB or more.
#ulimit -s 4096
#-----------------------------------------------------------------------------
# product-specific function overrides
#-----------------------------------------------------------------------------
GetFullProductName()
{
echo "Database Migration Assistant for Unicode"
}
GetShortProductName()
{
echo "DMU"
}
GetProductVersion()
{
echo "2.2"
}
GetDotJdkFileName()
{
echo ".dmu_jdk"
}
DisplayBanner()
{
cat <<EOF
`GetFullProductName`
Copyright (c) 2011, 2017, Oracle and/or its affiliates. All rights reserved.
EOF
}
GetDefaultJDK()
{
#
# Search for Java in the following order:
# 0) $OIDE_JAVA_HOME. This serves as a global override.
# 1) ../../jdk/bin/java. This is consistent with the shipped
# location of Java for Windows, and is the correct place to look
# for internal developers building labels of JDEVADF.
# 2) ../../../jdk/bin/java for SQL Developer in the database shiphome.
# 3) $JAVA_HOME/bin/java. If JAVA_HOME is set, we should use that
# to determine the JDK to use.
# 4) A java in /usr/java/jdk1.6*
# 5) Any java on the PATH.
# Per bug 6058050, we check environment variables are set before
# using them.
if [[ -n "$OIDE_JAVA_HOME" && -f "$OIDE_JAVA_HOME/bin/java" ]]
then
tmpvar="$OIDE_JAVA_HOME/bin/java"
else
if [ -f "../../jdk/bin/java" ]
then
tmpvar="../../jdk/bin/java"
else
if [ -f "../../../jdk/bin/java" ]
then
tmpvar="../../../jdk/bin/java"
else
if [[ -n "$JAVA_HOME" && -f "$JAVA_HOME/bin/java" ]]
then
tmpvar="$JAVA_HOME/bin/java"
else
# See if we can find /usr/java/jdk1.6.*
jdk=`ls /usr/java 2>/dev/null | grep jdk1.6 | sort -r | head -1`
if [ -f "/usr/java/$jdk/bin/java" ]
then
tmpvar="/usr/java/$jdk/bin/java"
else
tmpvar=`which "java" 2>/dev/null`
fi
fi
fi
fi
fi
#
# Make sure java is not
# a symlink to some other bin/java location somewhere, if it is
# follow it, and follow it as long as the new path ends with /bin/java
#
# Once the new path for java has been determined, truncate the /bin/java
# ending portion of it and set javahome with the trucated path
#
if [ -f "$tmpvar" ]
then
while [ -h "$tmpvar" ]
do
tmpvar2=`ls -ls "$tmpvar"`
tmpvar2=`expr "$tmpvar2" : '.*-> \(.*\)$'`
if [ `expr "$tmpvar2" : "\.\/"` -gt 0 -o `expr "$tmpvar2" : "\.\.\/"` -gt 0 -o `expr "$tmpvar2" : ".*/.*"` -le 0 ]
then
tmpvar="`dirname "$tmpvar"`/$tmpvar2"
else
tmpvar="$tmpvar2"
fi
done
tmpvar=`expr "$tmpvar" : '\(.*\)\/bin\/[^\/]*$'`
SetJavaHome "$tmpvar"
fi
}
LaunchCmd()
{
LaunchDir=$PWD
#:ValidateArgs:
{
if [ "X${STARTING_CWD}" = "X" ]
then
echo "ERROR: STARTING_CWD variable not defined."
exit 1
fi
if [ "X${INVOKED_AS}" = "X" ]
then
echo "ERROR: INVOKED_AS variable not defined."
exit 1
fi
if [ "X${SCRIPT}" = "X" ]
then
echo "ERROR: SCRIPT variable not defined."
exit 1
fi
}
USE_USER_CONF=0
#:PreProcessArgs:
{
for arg in "$@"
do
case "$arg" in
-nouserconf)
USE_USER_CONF=1
;;
--verbose)
SetVerbose
;;
esac
done
}
#:SetConfigFiles:
{
# Set user configuration file
if [ "$USE_USER_CONF" = "0" ]
then
USER_CONF_FILE="`GetUserConfFilePath`"
WriteUserConfFile;
else
USER_CONF_FILE=""
fi
# Check INVOKED_AS first. This allows a launcher to be a
# symlink to launch.sh but use its own conf file.
local invokedDir=`dirname "${INVOKED_AS}"`
local invokedProdName=`basename "${INVOKED_AS}"`
local confFileName="${invokedProdName}.conf"
local confFile="${invokedDir}/${confFileName}"
if [ -f "${confFile}" ]
then
PRODUCT_NAME="${invokedProdName}"
APP_CONF_DIR="${invokedDir}"
APP_CONF_FILE="${confFile}"
cd "${APP_CONF_DIR}"
LaunchDir=$PWD
else
# Check SCRIPT next. This allows the user to make a
# symlink to the launcher script and use its conf file.
local scriptDir=`dirname "${SCRIPT}"`
PRODUCT_NAME=`basename "${SCRIPT}"`
confFileName="${PRODUCT_NAME}.conf"
confFile="${scriptDir}/${confFileName}"
if [ -f "${confFile}" ]
then
APP_CONF_DIR="${scriptDir}"
APP_CONF_FILE="${confFile}"
cd "${APP_CONF_DIR}"
LaunchDir=$PWD
fi
fi
# Set tool specific user configuration file
if [ "$USE_USER_CONF" = "0" ]
then
TOOL_SPECIFIC_USER_CONF_FILE="`GetUserConfDirPath`/${confFileName}"
WriteToolSpecificUserConfFile;
else
TOOL_SPECIFIC_USER_CONF_FILE="";
fi
# Set platform configuration file.
APP_UNAME_VALUE=`uname`
APP_PLATFORM_CONF_FILE="${PRODUCT_NAME}-${APP_UNAME_VALUE}.conf"
if [ -f "${APP_PLATFORM_CONF_FILE}" ]
then
APP_PLATFORM_CONF_FILE="${APP_CONF_DIR}/${PRODUCT_NAME}-${APP_UNAME_VALUE}.conf"
fi
}
#:ReadConfig:
{
if [ -f "${APP_CONF_FILE}" ]
then
EchoIfVerbose "Reading configuration from: ${APP_CONF_FILE}"
source "${APP_CONF_FILE}"
else
echo "Unable to find configuration file: ${APP_CONF_FILE}"
exit 1
fi
if [ -f "${APP_PLATFORM_CONF_FILE}" ]
then
EchoIfVerbose "Reading platform specific configuration from: ${APP_PLATFORM_CONF_FILE}"
source "${APP_PLATFORM_CONF_FILE}"
fi
if [ -f "${USER_CONF_FILE}" ]
then
EchoIfVerbose "Reading user configuration file from: ${USER_CONF_FILE}"
IncludeConfFile "${USER_CONF_FILE}"
fi
if [ -f "${TOOL_SPECIFIC_USER_CONF_FILE}" ]
then
if [ "${TOOL_SPECIFIC_USER_CONF_FILE}" != "${USER_CONF_FILE}" ]
then
EchoIfVerbose "Reading tool specific override of user configuration file from: ${TOOL_SPECIFIC_USER_CONF_FILE}"
IncludeConfFile "${TOOL_SPECIFIC_USER_CONF_FILE}"
fi
fi
}
# Pass the configuration pathname to the IDE
AddVMOption -Dide.conf="${APP_CONF_FILE}"
# Pass the user configuration pathnames to the IDE
AddVMOption -Duser.conf="${USER_CONF_FILE}"
AddVMOption -Dtool.user.conf="${TOOL_SPECIFIC_USER_CONF_FILE}"
# Pass the starting directory (before any chdir) to the IDE
AddVMOption -Dide.startingcwd="${STARTING_CWD}"
CheckJDK
CheckLibraryPath
#:Startup:
{
APP_MAIN_CLASS="oracle.duma.cli.util.Launcher"
APP_CLASSPATH+=":../extensions/oracle.duma.jar"
APP_CLASSPATH+=":../../bootstrap.jar"
APP_CLASSPATH+=":../../sleepycat/je-3.3.98/lib/je-3.3.98.jar"
APP_CLASSPATH+=":../../modules/oracle.xmlef/xmlef.jar"
APP_CLASSPATH+=":../../modules/oracle.help/ohj.jar"
APP_CLASSPATH+=":../../modules/oracle.help/oracle_ice.jar"
APP_CLASSPATH+=":../../modules/oracle.help/help-share.jar"
APP_CLASSPATH+=":../../modules/oracle.javatools/javamodel-rt.jar"
APP_CLASSPATH+=":../../modules/oracle.javatools/javatools-nodeps.jar"
APP_CLASSPATH+=":../../modules/oracle.xdk/oraclexsql.jar"
APP_CLASSPATH+=":../../modules/oracle.xdk/xsqlserializers.jar"
APP_CLASSPATH+=":../../modules/oracle.xdk/xmlparserv2.jar"
APP_CLASSPATH+=":../../modules/oracle.xdk/xml.jar"
APP_CLASSPATH+=":../../modules/oracle.xdk/xsu12.jar"
APP_CLASSPATH+=":../../modules/oracle.xdk/xqjapi.jar"
APP_CLASSPATH+=":../../modules/oracle.ldap/ojmisc.jar"
APP_CLASSPATH+=":../../modules/oracle.ldap/ldapjclnt11.jar"
APP_CLASSPATH+=":../../modules/oracle.bali.share/share.jar"
APP_CLASSPATH+=":../../modules/oracle.xdb_11.1.0.jar"
APP_CLASSPATH+=":../../jlib/*"
APP_CLASSPATH+=":../doc/dumac_help.jar"
APP_CLASSPATH+=":../lib/*"
APP_CLASSPATH+=":../../ide/extensions/oracle.ide.jar"
}
EchoIfVerbose "Working directory is `pwd`"
EchoIfVerbose "Running Command: ${JAVA} ${APP_VM_OPTS} ${APP_ENV_VARS} -classpath ${APP_CLASSPATH} ${APP_MAIN_CLASS} ${APP_APP_OPTS[@]}"
#echo "${JAVA} ${APP_VM_OPTS[@]} ${APP_ENV_VARS} -classpath ${APP_CLASSPATH} ${APP_MAIN_CLASS} ${@:2}"
${JAVA} "${APP_VM_OPTS[@]}" ${APP_ENV_VARS} -classpath ${APP_CLASSPATH} ${APP_MAIN_CLASS} "${@:2}"
EXITCODE=$?
#echo "Exit code is: $EXITCODE"
return $EXITCODE
}
if ${IS_CMD}; then
LaunchCmd "$@"
else
LaunchIDE $*
fi
OHA YOOOO