diff options
-rwxr-xr-x | scripts/setup.sh | 122 |
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." |