#!/bin/sh
# Uncomment the following line to override the JVM search sequence
# INSTALL4J_JAVA_HOME_OVERRIDE=
# Uncomment the following line to add additional VM parameters
# INSTALL4J_ADD_VM_PARAMS=
INSTALL4J_JAVA_PREFIX=""
GREP_OPTIONS=""
fill_version_numbers() {
if [ "$ver_major" = "" ]; then
ver_major=0
fi
if [ "$ver_minor" = "" ]; then
ver_minor=0
fi
if [ "$ver_micro" = "" ]; then
ver_micro=0
fi
if [ "$ver_patch" = "" ]; then
ver_patch=0
fi
}
read_db_entry() {
if [ -n "$INSTALL4J_NO_DB" ]; then
return 1
fi
if [ ! -f "$db_file" ]; then
return 1
fi
if [ ! -x "$java_exc" ]; then
return 1
fi
found=1
exec 7< $db_file
while read r_type r_dir r_ver_major r_ver_minor r_ver_micro r_ver_patch r_ver_vendor<&7; do
if [ "$r_type" = "JRE_VERSION" ]; then
if [ "$r_dir" = "$test_dir" ]; then
ver_major=$r_ver_major
ver_minor=$r_ver_minor
ver_micro=$r_ver_micro
ver_patch=$r_ver_patch
fill_version_numbers
fi
elif [ "$r_type" = "JRE_INFO" ]; then
if [ "$r_dir" = "$test_dir" ]; then
is_openjdk=$r_ver_major
is_64bit=$r_ver_micro
if [ "W$r_ver_minor" = "W$modification_date" ] && [ "W$is_64bit" != "W" ]; then
found=0
break
fi
fi
fi
r_ver_micro=""
done
exec 7<&-
return $found
}
create_db_entry() {
tested_jvm=true
version_output=`"$bin_dir/java" $1 -version 2>&1`
is_gcj=`expr "$version_output" : '.*gcj'`
is_64bit=`expr "$version_output" : '.*64-Bit\|.*amd64'`
if [ "$is_gcj" = "0" ]; then
java_version=`expr "$version_output" : '.*"\(.*\)".*'`
ver_major=`expr "$java_version" : '\([0-9][0-9]*\).*'`
ver_minor=`expr "$java_version" : '[0-9][0-9]*\.\([0-9][0-9]*\).*'`
ver_micro=`expr "$java_version" : '[0-9][0-9]*\.[0-9][0-9]*\.\([0-9][0-9]*\).*'`
ver_patch=`expr "$java_version" : '[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*[\._]\([0-9][0-9]*\).*'`
fi
fill_version_numbers
if [ -n "$INSTALL4J_NO_DB" ]; then
return
fi
db_new_file=${db_file}_new
if [ -f "$db_file" ]; then
awk '$2 != "'"$test_dir"'" {print $0}' $db_file > $db_new_file
cp "$db_new_file" "$db_file"
rm "$db_new_file" 2> /dev/null
fi
dir_escaped=`echo "$test_dir" | sed -e 's/ /\\\\ /g'`
echo "JRE_VERSION $dir_escaped $ver_major $ver_minor $ver_micro $ver_patch" >> $db_file
echo "JRE_INFO $dir_escaped $is_openjdk $modification_date $is_64bit" >> $db_file
chmod g+w $db_file
}
check_date_output() {
if [ -n "$date_output" -a $date_output -eq $date_output 2> /dev/null ]; then
modification_date=$date_output
fi
}
test_jvm() {
tested_jvm=na
test_dir=$1
bin_dir=$test_dir/bin
java_exc=$bin_dir/java
if [ -z "$test_dir" ] || [ ! -d "$bin_dir" ] || [ ! -f "$java_exc" ] || [ ! -x "$java_exc" ]; then
return
fi
modification_date=0
date_output=`date -r "$java_exc" "+%s" 2>/dev/null`
if [ $? -eq 0 ]; then
check_date_output
fi
if [ $modification_date -eq 0 ]; then
stat_path=`command -v stat 2> /dev/null`
if [ "$?" -ne "0" ] || [ "W$stat_path" = "W" ]; then
stat_path=`which stat 2> /dev/null`
if [ "$?" -ne "0" ]; then
stat_path=""
fi
fi
if [ -f "$stat_path" ]; then
date_output=`stat -f "%m" "$java_exc" 2>/dev/null`
if [ $? -eq 0 ]; then
check_date_output
fi
if [ $modification_date -eq 0 ]; then
date_output=`stat -c "%Y" "$java_exc" 2>/dev/null`
if [ $? -eq 0 ]; then
check_date_output
fi
fi
fi
fi
tested_jvm=false
read_db_entry || create_db_entry $2
if [ "$ver_major" = "" ]; then
return;
fi
if [ "$ver_major" -lt "1" ]; then
return;
elif [ "$ver_major" -eq "1" ]; then
if [ "$ver_minor" -lt "8" ]; then
return;
fi
fi
if [ "$ver_major" = "" ]; then
return;
fi
app_java_home=$test_dir
}
add_class_path() {
if [ -n "$1" ] && [ `expr "$1" : '.*\*'` -eq "0" ]; then
local_classpath="$local_classpath${local_classpath:+:}${1}${2}"
fi
}
read_vmoptions() {
vmoptions_file=`eval echo "$1" 2>/dev/null`
if [ ! -r "$vmoptions_file" ]; then
vmoptions_file="$prg_dir/$vmoptions_file"
fi
if [ -r "$vmoptions_file" ] && [ -f "$vmoptions_file" ]; then
exec 8< "$vmoptions_file"
while read cur_option<&8; do
is_comment=`expr "W$cur_option" : 'W *#.*'`
if [ "$is_comment" = "0" ]; then
vmo_classpath=`expr "W$cur_option" : 'W *-classpath \(.*\)'`
vmo_classpath_a=`expr "W$cur_option" : 'W *-classpath/a \(.*\)'`
vmo_classpath_p=`expr "W$cur_option" : 'W *-classpath/p \(.*\)'`
vmo_include=`expr "W$cur_option" : 'W *-include-options \(.*\)'`
if [ ! "W$vmo_include" = "W" ]; then
if [ "W$vmo_include_1" = "W" ]; then
vmo_include_1="$vmo_include"
elif [ "W$vmo_include_2" = "W" ]; then
vmo_include_2="$vmo_include"
elif [ "W$vmo_include_3" = "W" ]; then
vmo_include_3="$vmo_include"
fi
fi
if [ ! "$vmo_classpath" = "" ]; then
local_classpath="$i4j_classpath:$vmo_classpath"
elif [ ! "$vmo_classpath_a" = "" ]; then
local_classpath="${local_classpath}:${vmo_classpath_a}"
elif [ ! "$vmo_classpath_p" = "" ]; then
local_classpath="${vmo_classpath_p}:${local_classpath}"
elif [ "W$vmo_include" = "W" ]; then
needs_quotes=`expr "W$cur_option" : 'W.* .*'`
if [ "$needs_quotes" = "0" ]; then
vmoptions_val="$vmoptions_val $cur_option"
else
if [ "W$vmov_1" = "W" ]; then
vmov_1="$cur_option"
elif [ "W$vmov_2" = "W" ]; then
vmov_2="$cur_option"
elif [ "W$vmov_3" = "W" ]; then
vmov_3="$cur_option"
elif [ "W$vmov_4" = "W" ]; then
vmov_4="$cur_option"
elif [ "W$vmov_5" = "W" ]; then
vmov_5="$cur_option"
fi
fi
fi
fi
done
exec 8<&-
if [ ! "W$vmo_include_1" = "W" ]; then
vmo_include="$vmo_include_1"
unset vmo_include_1
read_vmoptions "$vmo_include"
fi
if [ ! "W$vmo_include_2" = "W" ]; then
vmo_include="$vmo_include_2"
unset vmo_include_2
read_vmoptions "$vmo_include"
fi
if [ ! "W$vmo_include_3" = "W" ]; then
vmo_include="$vmo_include_3"
unset vmo_include_3
read_vmoptions "$vmo_include"
fi
fi
}
unpack_file() {
if [ -f "$1" ]; then
jar_file=`echo "$1" | awk '{ print substr($0,1,length($0)-5) }'`
bin/unpack200 -r "$1" "$jar_file" > /dev/null 2>&1
if [ $? -ne 0 ]; then
echo "Error unpacking jar files. The architecture or bitness (32/64)"
echo "of the bundled JVM might not match your machine."
returnCode=1
cd "$old_pwd"
if [ ! "W $INSTALL4J_KEEP_TEMP" = "W yes" ]; then
rm -R -f "$sfx_dir_name"
fi
exit $returnCode
else
chmod a+r "$jar_file"
fi
fi
}
run_unpack200() {
if [ -d "$1/lib" ]; then
old_pwd200=`pwd`
cd "$1"
for pack_file in lib/*.jar.pack
do
unpack_file $pack_file
done
for pack_file in lib/ext/*.jar.pack
do
unpack_file $pack_file
done
cd "$old_pwd200"
fi
}
search_jre() {
if [ -z "$app_java_home" ]; then
test_jvm "$INSTALL4J_JAVA_HOME_OVERRIDE"
fi
if [ -z "$app_java_home" ]; then
if [ -f "$app_home/.install4j/pref_jre.cfg" ]; then
read file_jvm_home < "$app_home/.install4j/pref_jre.cfg"
test_jvm "$file_jvm_home"
if [ -z "$app_java_home" ] && [ $tested_jvm = "false" ]; then
if [ -w "$db_file" ]; then
/bin/sh -c ': > "$db_file"' 2> /dev/null
fi
test_jvm "$file_jvm_home"
fi
fi
fi
if [ -z "$app_java_home" ]; then
test_jvm "$app_home/./jre"
if [ -z "$app_java_home" ] && [ $tested_jvm = "false" ]; then
if [ -w "$db_file" ]; then
/bin/sh -c