aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rwxr-xr-xscripts/setup.sh122
1 files changed, 103 insertions, 19 deletions
diff --git a/scripts/setup.sh b/scripts/setup.sh
index 340364f..60517a4 100755
--- a/scripts/setup.sh
+++ b/scripts/setup.sh
@@ -160,6 +160,82 @@ fi
LAUNCHER="eclipse/startup.jar"
+#
+# Utility function to compare version number strings using operators. Returns
+# 0 if the operator's result matches, or 1 otherwise.
+#
+# Arguments:
+#
+# $1 version number
+# $2 compare operator
+# $3 version number
+#
+test_version() {
+
+ A_VERSION=$1
+ OP=$2
+ B_VERSION=$3
+
+ compare_version $A_VERSION $B_VERSION
+ RESULT=$?
+
+ # workaround bash function return value limitation
+ [ $RESULT -eq 255 ] && RESULT=-1
+
+ case $OP in
+ "lt") [ $RESULT -gt 0 ] && return 0;;
+ "le") [ $RESULT -ge 0 ] && return 0;;
+ "eq") [ $RESULT -eq 0 ] && return 0;;
+ "ge") [ $RESULT -le 0 ] && return 0;;
+ "gt") [ $RESULT -lt 0 ] && return 0;;
+ esac
+
+ return 1
+}
+
+#
+# Utility function to compare version number strings even if the formats are
+# not identical.
+#
+# Supported version number format is <major>.<minor>.<service>, where <minor>
+# and <service> is optional. Subsequent numbers after <service> will be
+# ignored.
+#
+# Returns 0 if the versions are identical, 1 if the later is greater, or -1
+# (255) is the later is lesser.
+#
+compare_version() {
+
+ # Discard anything after <major>.<minor>.<service>
+
+ A_VERSION=$(echo $1 | sed -r 's/^([0-9]\.[0-9]\.[0-9])\..*/\1/g')
+ B_VERSION=$(echo $2 | sed -r 's/^([0-9]\.[0-9]\.[0-9])\..*/\1/g')
+
+ # Split version strings into arrays
+
+ IFS=. read -a A <<<"$A_VERSION"
+ IFS=. read -a B <<<"$B_VERSION"
+
+ # When version numbers do not specify <minor> or <service> numbers, assume
+ # they are zero
+
+ [ ${#A[@]} -ge 2 ] || A[1]=0
+ [ ${#A[@]} -ge 3 ] || A[2]=0
+ [ ${#B[@]} -ge 2 ] || B[1]=0
+ [ ${#B[@]} -ge 3 ] || B[2]=0
+
+ # Compare only <major>, <minor> and <service> numbers
+
+ [ ${A[0]} -lt ${B[0]} ] && return 1
+ [ ${A[0]} -gt ${B[0]} ] && return -1
+ [ ${A[1]} -lt ${B[1]} ] && return 1
+ [ ${A[1]} -gt ${B[1]} ] && return -1
+ [ ${A[2]} -lt ${B[2]} ] && return 1
+ [ ${A[2]} -gt ${B[2]} ] && return -1
+
+ return 0
+}
+
#$1: repository_url
#$2: featureId
#$3: 'all' or 'max' or 'min', 'max' if not specified
@@ -182,12 +258,12 @@ get_version()
;;
min)
for i in ${remote_vers}; do
- [ "${remote_ver}" \> "$i" ] && remote_ver="$i"
+ test_version "${remote_ver}" "gt" "$i" && remote_ver="$i"
done
;;
*)
for i in ${remote_vers}; do
- [ "${remote_ver}" \< "$i" ] && remote_ver="$i"
+ test_version "${remote_ver}" "lt" "$i" && remote_ver="$i"
done
;;
esac
@@ -202,9 +278,13 @@ check_local_version()
{
curdir=`pwd`
version="`get_version file:///${curdir}/eclipse/p2/org.eclipse.equinox.p2.engine/profileRegistry/SDKProfile.profile $1`"
- [ "$version" \< "$2" ] && return 1
+
+ # empty version string means there's no local version installed
+ [ -z "$version" ] && return -1
+
+ test_version "$version" "lt" "$2" && return 1
if [ "x$3" != "x" ]; then
- [ "$version" \> "$3" ] && return -1
+ test_version "$version" "gt" "$3" && return -1
fi
return 0
}
@@ -219,17 +299,21 @@ update_feature_remote()
[ $# -lt 3 ] && err_exit 1 "update_feature_remote: invalid parameters, $*"
check_local_version $2 $3 $4 && echo "Feature $2 is already installed" && return 0
local installIU=""
+ local all_versions=$(get_version $1 $2 'all')
+
+ echo "Feature $2 versions available: $all_versions"
+
if [ "x$4" != "x" ]; then
#has max version requirement
- for i in "`get_version $1 $2 'all'`"; do
- if [ "$i" \> "$3" ] || [ "$i" = "$3" ] && [ "$i" \< "$4" ]; then
- [ "$i" \> "$installIU" ] && installIU=$i
+ for i in $all_versions; do
+ if test_version "$i" "ge" "$3" && test_version "$i" "lt" "$4"; then
+ test_version "$i" "gt" "$installIU" && installIU=$i
fi
done
else
#only has minimum version requirement
local max_remote_ver="`get_version $1 $2 'max'`"
- [ "$max_remote_ver" \> "$3" ] || [ "$max_remote_ver" = "$3" ] && installIU=$max_remote_ver
+ test_version "$max_remote_ver" "ge" "$3" && installIU=$max_remote_ver
fi
[ "x$installIU" = "x" ] && err_exit 1 "Can NOT find candidates of $2 version($3, $4) at $1!"
@@ -260,51 +344,51 @@ fi
UPDATE_SITE="http://download.eclipse.org/eclipse/updates/4.7"
#CDT related
-echo -e "\nPlease wait. Installing CDT.SDK.FEATURE.GROUP"
CDTFEAT="9.3.0"
+echo -e "\nPlease wait. Installing CDT.SDK.FEATURE.GROUP $CDTFEAT"
update_feature_remote ${MAIN_SITE} org.eclipse.cdt.sdk.feature.group ${CDTFEAT}
-echo -e "\nPlease wait. Installing CDT.LAUNCH.REMOTE.FEATURE.GROUP"
CDTREMOTEVER="9.3.0"
+echo -e "\nPlease wait. Installing CDT.LAUNCH.REMOTE.FEATURE.GROUP $CDTREMOTEVER"
update_feature_remote ${MAIN_SITE} org.eclipse.cdt.launch.remote.feature.group ${CDTREMOTEVER}
#TM Terminal (was RSE) related
-echo -e "\nPlease wait. Installing TM.TERMINAL.FEATURE.FEATURE.GROUP"
TMTERMVER="4.3.0"
+echo -e "\nPlease wait. Installing TM.TERMINAL.FEATURE.FEATURE.GROUP $TMTERMVER"
update_feature_remote ${MAIN_SITE} org.eclipse.tm.terminal.feature.feature.group ${TMTERMVER}
-echo -e "\nPlease wait. Installing TM.TERMINAL.VIEW.RSE.FEATURE.GROUP"
TMTERMVIEWRSEVER="4.3.0"
+echo -e "\nPlease wait. Installing TM.TERMINAL.VIEW.RSE.FEATURE.GROUP $TMTERMVIEWRSEVER"
update_feature_remote ${MAIN_SITE} org.eclipse.tm.terminal.view.rse.feature.feature.group ${TMTERMVIEWRSEVER}
-echo -e "\nPlease wait. Installing TM.TERMINAL.CONTROL.FEATURE.GROUP"
TMCONTROLVER="4.3.0"
+echo -e "\nPlease wait. Installing TM.TERMINAL.CONTROL.FEATURE.GROUP $TMCONTROLVER"
update_feature_remote ${MAIN_SITE} org.eclipse.tm.terminal.control.feature.feature.group ${TMCONTROLVER}
#RSE_SDK
-echo -e "\nPlease wait. Installing RSE.SDK.FEATURE.GROUP"
RSESDKVER="3.7.0"
+echo -e "\nPlease wait. Installing RSE.SDK.FEATURE.GROUP $RSESDKVER"
update_feature_remote ${TM_SITE} org.eclipse.rse.sdk.feature.group ${RSESDKVER}
#echo -e "\nSkipping RSE.SDK.FEATURE.GROUP"
-RSE_TERMINALS
-echo -e "\nPlease wait. Installing RSE.TERMINALS.FEATURE.GROUP"
+#RSE_TERMINALS
RSETERMVER="3.8.0"
+echo -e "\nPlease wait. Installing RSE.TERMINALS.FEATURE.GROUP $RSETERMVER"
update_feature_remote ${TM_SITE} org.eclipse.rse.terminals.feature.group ${RSETERMVER}
#echo -e "\nSkipping RSE.TERMINALS.FEATURE.GROUP"
#AUTOTOOLS
-echo -e "\nPlease wait. Installing AUTOTOOLS.FEATURE.GROUP"
ATVER="9.3.0"
+echo -e "\nPlease wait. Installing AUTOTOOLS.FEATURE.GROUP $ATVER"
update_feature_remote ${MAIN_SITE} org.eclipse.cdt.autotools.feature.group ${ATVER}
#Lttng2
TMF_CTF_REL="3.0.0"
-echo -e "\nPlease wait. Installing TRACECOMPASS.LTTNG2.UST.FEATURE.GROUP"
+echo -e "\nPlease wait. Installing TRACECOMPASS.LTTNG2.UST.FEATURE.GROUP $TMF_CTF_REL"
update_feature_remote ${MAIN_SITE} org.eclipse.tracecompass.lttng2.ust.feature.group ${TMF_CTF_REL}
-echo -e "\nPlease wait. Installing OSGI.COMPATIBILITY.PLUGINS.FEATURE.FEATURE.GROUP"
COMPAT_VER="1.1.0"
+echo -e "\nPlease wait. Installing OSGI.COMPATIBILITY.PLUGINS.FEATURE.FEATURE.GROUP $COMPAT_VER"
update_feature_remote ${UPDATE_SITE} org.eclipse.osgi.compatibility.plugins.feature.feature.group ${COMPAT_VER}
echo -e "\nYour build environment is successfully created."