279 lines
		
	
	
		
			8.9 KiB
		
	
	
	
		
			Bash
		
	
	
	
	
	
			
		
		
	
	
			279 lines
		
	
	
		
			8.9 KiB
		
	
	
	
		
			Bash
		
	
	
	
	
	
# -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
 | 
						|
##@require sysinc/base
 | 
						|
##@require sysinc/functions
 | 
						|
 | 
						|
################################################################################
 | 
						|
# versions installées sur le système
 | 
						|
JAVA_VMS14=(); JAVA_HOMES14=()
 | 
						|
JAVA_VMS5=(); JAVA_HOMES5=()
 | 
						|
JAVA_VMS6=(); JAVA_HOMES6=()
 | 
						|
JAVA_VMS7=(); JAVA_HOMES7=()
 | 
						|
# versions locales 32 bits
 | 
						|
JAVA32_VMS14=(); JAVA32_HOMES14=()
 | 
						|
JAVA32_VMS5=(); JAVA32_HOMES5=()
 | 
						|
JAVA32_VMS6=(); JAVA32_HOMES6=()
 | 
						|
JAVA32_VMS7=(); JAVA32_HOMES7=()
 | 
						|
# versions locales 64 bits
 | 
						|
JAVA64_VMS5=(); JAVA64_HOMES5=()
 | 
						|
JAVA64_VMS6=(); JAVA64_HOMES6=()
 | 
						|
JAVA64_VMS7=(); JAVA64_HOMES7=()
 | 
						|
# version sélectionnée
 | 
						|
SELECTED_JAVA_VM=; SELECTED_JAVA_HOME=
 | 
						|
SELECTED_JAVA=; SELECTED_JAVAC=
 | 
						|
 | 
						|
function __add() {
 | 
						|
    # Ajouter à la liste JAVA$3_$1 la valeur $2
 | 
						|
    array_add "JAVA${3}_${1}" "$2"
 | 
						|
}
 | 
						|
 | 
						|
function __compute_java_vms() {
 | 
						|
    # calculer la liste de VMs disponibles et initialiser les tableaux
 | 
						|
    # JAVA{,32,64}_{VMS,HOMES}{14,5,6,7}
 | 
						|
    [ -z "$__COMPUTED_JAVA_VMS" ] || return
 | 
						|
 | 
						|
    local vms vm v
 | 
						|
    if [ "$SYSTEM_NAME" == "Linux" ]; then
 | 
						|
        if [ "$LINUX_FLAVOUR" == "gentoo" ]; then
 | 
						|
            # sur gentoo
 | 
						|
            array_from_lines vms "$(list_dirs /usr/lib/jvm)"
 | 
						|
            for vm in "${vms[@]}"; do
 | 
						|
                v="${vm#sun-jdk-}"
 | 
						|
                if [ "$v" == 1.4 ]; then
 | 
						|
                    __add VMS14 "$vm"
 | 
						|
                    __add HOMES14 "/usr/lib/jvm/$vm"
 | 
						|
                elif [ "$v" == 1.5 ]; then
 | 
						|
                    __add VMS5 "$vm"
 | 
						|
                    __add HOMES5 "/usr/lib/jvm/$vm"
 | 
						|
                elif [ "$v" == 1.6 ]; then
 | 
						|
                    __add VMS6 "$vm"
 | 
						|
                    __add HOMES6 "/usr/lib/jvm/$vm"
 | 
						|
                elif [ "$v" == 1.7 ]; then
 | 
						|
                    __add VMS7 "$vm"
 | 
						|
                    __add HOMES7 "/usr/lib/jvm/$vm"
 | 
						|
                fi
 | 
						|
            done
 | 
						|
        elif [ "$LINUX_FLAVOUR" == "debian" ]; then
 | 
						|
        # sur debian
 | 
						|
            array_from_lines vms "$(list_dirs /usr/lib/jvm)"
 | 
						|
            for vm in "${vms[@]}"; do
 | 
						|
                v="${vm%-sun}"
 | 
						|
                v="${v#java-}"
 | 
						|
                v="${v#j2sdk}"
 | 
						|
                if [ "$v" == 1.4 ]; then
 | 
						|
                    __add VMS14 "$vm"
 | 
						|
                    __add HOMES14 "/usr/lib/jvm/$vm"
 | 
						|
                elif [ "$v" == 1.5 -o "$v" == 1.5.0 ]; then
 | 
						|
                    __add VMS5 "$vm"
 | 
						|
                    __add HOMES5 "/usr/lib/jvm/$vm"
 | 
						|
                elif [ "$v" == 6 -o "$v" == 1.6 ]; then
 | 
						|
                    __add VMS6 "$vm"
 | 
						|
                    __add HOMES6 "/usr/lib/jvm/$vm"
 | 
						|
                elif [ "$v" == 7 -o "$v" == 1.7 ]; then
 | 
						|
                    __add VMS7 "$vm"
 | 
						|
                    __add HOMES7 "/usr/lib/jvm/$vm"
 | 
						|
                fi
 | 
						|
            done
 | 
						|
            if [ -d /usr/lib/j2sdk1.4-sun ]; then
 | 
						|
                __add VMS14 j2sdk1.4-sun
 | 
						|
                __add HOMES14 /usr/lib/j2sdk1.4-sun
 | 
						|
            fi
 | 
						|
        fi
 | 
						|
        array_from_lines vms "$(list_dirs "$HOME/opt/jvm32")"
 | 
						|
        for vm in "${vms[@]}"; do
 | 
						|
            v="${vm#sun-jdk-}"
 | 
						|
            if [ "$v" == 1.4 ]; then
 | 
						|
                __add VMS14 "$vm" 32
 | 
						|
                __add HOMES14 "$HOME/opt/jvm32/$vm" 32
 | 
						|
            elif [ "$v" == 1.5 ]; then
 | 
						|
                __add VMS5 "$vm" 32
 | 
						|
                __add HOMES5 "$HOME/opt/jvm32/$vm" 32
 | 
						|
            elif [ "$v" == 1.6 ]; then
 | 
						|
                __add VMS6 "$vm" 32
 | 
						|
                __add HOMES6 "$HOME/opt/jvm32/$vm" 32
 | 
						|
            elif [ "$v" == 1.7 ]; then
 | 
						|
                __add VMS7 "$vm" 32
 | 
						|
                __add HOMES7 "$HOME/opt/jvm32/$vm" 32
 | 
						|
            fi
 | 
						|
        done
 | 
						|
        array_from_lines vms "$(list_dirs "$HOME/opt/jvm64")"
 | 
						|
        for vm in "${vms[@]}"; do
 | 
						|
            v="${vm#sun-jdk-}"
 | 
						|
            if [ "$v" == 1.5 ]; then
 | 
						|
                __add VMS5 "$vm" 64
 | 
						|
                __add HOMES5 "$HOME/opt/jvm64/$vm" 64
 | 
						|
            elif [ "$v" == 1.6 ]; then
 | 
						|
                __add VMS6 "$vm" 64
 | 
						|
                __add HOMES6 "$HOME/opt/jvm64/$vm" 64
 | 
						|
            elif [ "$v" == 1.7 ]; then
 | 
						|
                __add VMS7 "$vm" 64
 | 
						|
                __add HOMES7 "$HOME/opt/jvm64/$vm" 64
 | 
						|
            fi
 | 
						|
        done
 | 
						|
    elif [ "$SYSTEM_NAME" == "Darwin" ]; then
 | 
						|
        if [ -d "/System/Library/Frameworks/JavaVM.framework/Versions/1.4" ]; then
 | 
						|
            __add VMS14 "1.4"
 | 
						|
            __add HOMES14 "/System/Library/Frameworks/JavaVM.framework/Versions/1.4/Home"
 | 
						|
        fi
 | 
						|
        if [ -d "/System/Library/Frameworks/JavaVM.framework/Versions/1.5" ]; then
 | 
						|
            __add VMS5 "1.5"
 | 
						|
            __add HOMES5 "/System/Library/Frameworks/JavaVM.framework/Versions/1.5/Home"
 | 
						|
        fi
 | 
						|
        if [ -d "/System/Library/Frameworks/JavaVM.framework/Versions/1.6" ]; then
 | 
						|
            __add VMS6 "1.6"
 | 
						|
            __add HOMES6 "/System/Library/Frameworks/JavaVM.framework/Versions/1.6/Home"
 | 
						|
        fi
 | 
						|
        if [ -d "/System/Library/Frameworks/JavaVM.framework/Versions/1.7" ]; then
 | 
						|
            __add VMS7 "1.7"
 | 
						|
            __add HOMES7 "/System/Library/Frameworks/JavaVM.framework/Versions/1.7/Home"
 | 
						|
        fi
 | 
						|
    fi
 | 
						|
    __COMPUTED_JAVA_VMS=1
 | 
						|
}
 | 
						|
 | 
						|
function __select_vms() {
 | 
						|
    if [ -z "$2" ]; then
 | 
						|
        vms="JAVA_VMS$1[@]"; vms=("${!vms}")
 | 
						|
        if [ -n "${vms[*]}" ]; then
 | 
						|
            homes="JAVA_HOMES$1[@]"; homes=("${!homes}")
 | 
						|
            return 0
 | 
						|
        else
 | 
						|
            return 1
 | 
						|
        fi
 | 
						|
    else
 | 
						|
        vms="JAVA${2}_VMS$1[@]"; vms=("${!vms}")
 | 
						|
        homes="JAVA${2}_HOMES$1[@]"; homes=("${!homes}")
 | 
						|
        custom=1
 | 
						|
        [ -n "${vms[*]}" ] && return 0 || return 1
 | 
						|
    fi
 | 
						|
}
 | 
						|
 | 
						|
function __select_java() {
 | 
						|
    # Sélectionner la version de java $1 (qui peut être 14, 5, 6 ou 7)
 | 
						|
    # Si $2 est défini, il peut s'agit de 32 ou 64 selon que l'on requière la
 | 
						|
    # version 32bits ou 64 bits. Sinon, la version sélectionnée peut être 32bits
 | 
						|
    # ou 64bits selon ce qui est disponible.
 | 
						|
    __compute_java_vms
 | 
						|
 | 
						|
    local vms homes custom
 | 
						|
    if [ -z "$2" ]; then
 | 
						|
        __select_vms "$1" ||
 | 
						|
        __select_vms "$1" "$SYSTEM_BITS" ||
 | 
						|
        __select_vms "$1" 32 ||
 | 
						|
        __select_vms "$1" 64
 | 
						|
    else
 | 
						|
        __select_vms "$1" "$2"
 | 
						|
    fi
 | 
						|
    if [ -n "${vms[*]}" ]; then
 | 
						|
        SELECTED_JAVA_VM="${vms[0]}"
 | 
						|
        SELECTED_JAVA_HOME="${homes[0]}"
 | 
						|
        SELECTED_JAVA="$SELECTED_JAVA_HOME/bin/java"
 | 
						|
        SELECTED_JAVAC="$SELECTED_JAVA_HOME/bin/javac"
 | 
						|
        if [ -z "$custom" -a "$LINUX_FLAVOUR" == "gentoo" ]; then
 | 
						|
            export GENTOO_VM="$SELECTED_JAVA_VM"
 | 
						|
            export JAVA=java
 | 
						|
            export JAVAC=javac
 | 
						|
            return 0
 | 
						|
        else
 | 
						|
            [ "$LINUX_FLAVOUR" == "gentoo" ] && unset GENTOO_VM
 | 
						|
            export JAVA_HOME="$SELECTED_JAVA_HOME"
 | 
						|
            export JAVA="$SELECTED_JAVA"
 | 
						|
            export JAVAC="$SELECTED_JAVAC"
 | 
						|
            export PATH="$JAVA_HOME/bin:$PATH"
 | 
						|
            return 0
 | 
						|
        fi
 | 
						|
    fi
 | 
						|
    return 1
 | 
						|
}
 | 
						|
 | 
						|
function __select_default_java() {
 | 
						|
    # Sélectionner la version de java par défaut. Si JAVA_HOME est défini,
 | 
						|
    # prendre cette valeur. Sinon, essayer dans l'ordre 5, 6, 7, puis 14
 | 
						|
    if [ -n "$JAVA_HOME" ]; then
 | 
						|
        export JAVA="$JAVA_HOME/bin/java"
 | 
						|
        export JAVAC="$JAVA_HOME/bin/java"
 | 
						|
        return 0
 | 
						|
    fi
 | 
						|
    local vm
 | 
						|
    for vm in 5 6 7 14; do
 | 
						|
        __select_java "$vm" && return 0
 | 
						|
    done
 | 
						|
    return 1
 | 
						|
}
 | 
						|
 | 
						|
function select_java() {
 | 
						|
    # sélectionner la version *minimum* de java correspondant à $1
 | 
						|
    # $1== 1.4|1.4+|1.5|1.5+|1.6|1.6+|1.7|1.7+
 | 
						|
    # Si $2 est défini, il peut s'agit de 32 ou 64 selon que l'on requière la
 | 
						|
    # version 32bits ou 64 bits
 | 
						|
    local v vms homes
 | 
						|
 | 
						|
    case "$1" in
 | 
						|
    1.4|1.4+)
 | 
						|
        for v in 14 5 6 7; do
 | 
						|
            __select_java "$v" "$2" && return 0
 | 
						|
        done
 | 
						|
        ;;
 | 
						|
    1.5|1.5+)
 | 
						|
        for v in 5 6 7; do
 | 
						|
            __select_java "$v" "$2" && return 0
 | 
						|
        done
 | 
						|
        ;;
 | 
						|
    1.6|1.6+)
 | 
						|
        for v in 6 7; do
 | 
						|
            __select_java "$v" "$2" && return 0
 | 
						|
        done
 | 
						|
        ;;
 | 
						|
    1.7|1.7+)
 | 
						|
        for v in 7; do
 | 
						|
            __select_java "$v" "$2" && return 0
 | 
						|
        done
 | 
						|
        ;;
 | 
						|
    esac
 | 
						|
    return 1
 | 
						|
}
 | 
						|
 | 
						|
function select_java_exact() {
 | 
						|
    # sélectionner la version *exacte* de javac correspondant à $1
 | 
						|
    # $1== 1.4|1.5|1.6|1.7 pour une correspondance exacte
 | 
						|
    # $1== 1.4+|1.5+|1.6+|1.7+ pour une version minimum
 | 
						|
    # Si $2 est défini, il peut s'agit de 32 ou 64 selon que l'on requière la
 | 
						|
    # version 32bits ou 64 bits
 | 
						|
    local v vms homes
 | 
						|
 | 
						|
    case "$1" in
 | 
						|
    1.4)
 | 
						|
        __select_java 14 && return 0
 | 
						|
        ;;
 | 
						|
    1.4+)
 | 
						|
        for v in 14 5 6 7; do
 | 
						|
            __select_java "$v" "$2" && return 0
 | 
						|
        done
 | 
						|
        ;;
 | 
						|
    1.5)
 | 
						|
        __select_java 5 "$2" && return 0
 | 
						|
        ;;
 | 
						|
    1.5+)
 | 
						|
        for v in 5 6 7; do
 | 
						|
            __select_java "$v" "$2" && return 0
 | 
						|
        done
 | 
						|
        ;;
 | 
						|
    1.6)
 | 
						|
        __select_java 6 "$2" && return 0
 | 
						|
        ;;
 | 
						|
    1.6+)
 | 
						|
        for v in 6 7; do
 | 
						|
            __select_java "$v" "$2" && return 0
 | 
						|
        done
 | 
						|
        ;;
 | 
						|
    1.7)
 | 
						|
        __select_java 7 "$2" && return 0
 | 
						|
        ;;
 | 
						|
    1.7+)
 | 
						|
        for v in 7; do
 | 
						|
            __select_java "$v" "$2" && return 0
 | 
						|
        done
 | 
						|
        ;;
 | 
						|
    esac
 | 
						|
    return 1
 | 
						|
}
 |