scripts/addToolVersion.sh
author "Yann E. MORIN" <yann.morin.1998@free.fr>
Thu Jan 10 00:27:13 2013 +0100 (2013-01-10)
changeset 3159 fb71cad4b085
parent 3152 b286c7993be5
child 3214 374dfd876af2
permissions -rwxr-xr-x
arch/arm: OABI is no more, switch to only EABI

Well, leave the prompt as an OBSOLETE thing, scheduled to
be removed soon.

As an indication OABI lives its last days, gcc-4.8 will no
longer recognise non-EABI targets.

Signed-off-by: "Yann E. MORIN" <yann.morin.1998@free.fr>
yann@1173
     1
#!/bin/sh
yann@1174
     2
set -e
yann@1
     3
yann@1
     4
# Adds a new version to one of the toolchain component
yann@1
     5
myname="$0"
yann@1
     6
yann@1174
     7
# Parse the tools' paths configuration
yann@1623
     8
# It is expected that this script is only to be run from the
yann@1623
     9
# source directory of crosstool-NG, so it is trivial to find
yann@2838
    10
# paths.sh (we can't use  ". paths.sh", as POSIX states that
yann@1623
    11
# $PATH should be searched for, and $PATH most probably doe
yann@1623
    12
# not include "."), hence the "./".
yann@2838
    13
. "./paths.sh"
yann@1174
    14
yann@1
    15
doHelp() {
yann@1
    16
    cat <<-EOF
yann@1722
    17
		Usage: ${myname} <--tool> <[options] version [...]> ...
yann@1722
    18
		  'tool' in one of:
yann@1723
    19
		    gcc, binutils, glibc, eglibc, uClibc, newlib, linux, gdb, dmalloc,
yann@1723
    20
		    duma, strace, ltrace, libelf, gmp, mpfr, ppl, cloog, mpc
yann@1722
    21
		
yann@1722
    22
		  Valid options for all tools:
yann@1722
    23
		    --stable, -s, +x   (default)
yann@1722
    24
		      mark the version as being stable (as opposed to experimental, below)
yann@1722
    25
		
yann@1722
    26
		    --experimental, -x, +s
yann@1722
    27
		      mark the version as being experimental (as opposed to stable, above)
yann@1722
    28
		
yann@1722
    29
		    --current, -c, +o   (default)
yann@1722
    30
		      mark the version as being cuurent (as opposed to obsolete, below)
yann@1722
    31
		
yann@1722
    32
		    --obsolete, -o, +c
yann@1722
    33
		      mark the version as being obsolete (as opposed to current, above)
yann@1722
    34
		
yann@1722
    35
		  Note: setting a new tool resets to the defaults: 'stable' and 'current'.
yann@1722
    36
		
yann@1722
    37
		  'version' is a valid version for the specified tool.
yann@1722
    38
		
yann@1722
    39
		  Examples:
yann@1722
    40
		    add stable current version 2.6.19.2 to linux kernel:
yann@1722
    41
		      ${myname} --linux 2.6.19.2
yann@1722
    42
		
yann@1722
    43
		    add experimental obsolete version 2.3.5 and stable current versions 2.6.1
yann@1722
    44
		    and 2.6.2 to glibc, add stable obsolete version 3.3.3 to gcc:
yann@1722
    45
		      ${myname} --glibc -x -o 2.3.5 -s -c 2.6.1 2.6.2 --gcc -o 3.3.3
yann@1722
    46
		EOF
yann@1
    47
}
yann@1
    48
benoit@2485
    49
# Extract field $3 from version $1 with separator $2
benoit@2485
    50
getVersionField() {
benoit@2485
    51
    local version="$1"
benoit@2485
    52
    local sep="$2"
benoit@2485
    53
    local field="$3"
benoit@2485
    54
benoit@2485
    55
    echo "${version}${sep}${sep}${sep}${sep}" |cut -d ${sep} -f ${field}
benoit@2485
    56
}
benoit@2485
    57
yann@1173
    58
# Effectively add a version to the specified tool
yann@1173
    59
# $cat          : tool category
yann@1173
    60
# $tool         : tool name
yann@1173
    61
# $tool_prefix  : tool directory prefix
yann@1173
    62
# $EXP          : set to non empty if experimental, to empty otherwise
yann@1173
    63
# #OBS          : set to non empty if obsolete, to empty otherwise
yann@1173
    64
# $1            : version string to add
yann@1173
    65
addToolVersion() {
yann@1173
    66
    local version="$1"
yann@2412
    67
    local file="$2"
yann@1200
    68
    local config_ver_option
yann@1173
    69
    local exp_obs_prompt
yann@1734
    70
    local deps v ver_M ver_m ver_p
yann@1173
    71
    local SedExpr1 SedExpr2
yann@1173
    72
yann@2412
    73
    [ -f "${file}" ] || return 0
yann@2412
    74
yann@1174
    75
    v=$(echo "${version}" |"${sed}" -r -e 's/-/_/g; s/\./_/g;')
yann@1173
    76
yann@1200
    77
    config_ver_option="${cat}_V_${v}"
yann@1200
    78
yann@1200
    79
    # Check for existing version: it can be legitimitate for an end-user
yann@1200
    80
    # to try adding a new version if the one he/she wants is not listed.
yann@1200
    81
    # But it can be the case where the version is hidden behind either one
yann@1200
    82
    # of EXPERIMENTAL or OBSOLETE, so warn if the version is already listed.
yann@2412
    83
    if grep -E "^config ${config_ver_option}$" "${file}" >/dev/null 2>&1; then
yann@1200
    84
        echo "'${tool}': version '${version}' already present:"
yann@2412
    85
        grep -A1 -B0 -n                                                     \
yann@2412
    86
             -E "^(config ${config_ver_option}| {4}prompt \"${version}\")$" \
yann@2412
    87
             "${file}" /dev/null
yann@1200
    88
        return 0
yann@1200
    89
    fi
yann@1200
    90
yann@1200
    91
    SedExpr1="${SedExpr1}config ${config_ver_option}\n"
yann@1173
    92
    SedExpr1="${SedExpr1}    bool\n"
yann@1173
    93
    SedExpr1="${SedExpr1}    prompt \"${version}"
yann@1173
    94
    case "${EXP},${OBS}" in
yann@1173
    95
        ,)  ;;
yann@1536
    96
        ,*) exp_obs_prompt=" (OBSOLETE)"
yann@1535
    97
            deps="    depends on OBSOLETE"
yann@1173
    98
            ;;
yann@1536
    99
        *,) exp_obs_prompt=" (EXPERIMENTAL)"
yann@1535
   100
            deps="    depends on EXPERIMENTAL"
yann@1173
   101
            ;;
yann@1536
   102
        *)  exp_obs_prompt=" (EXPERIMENTAL, OBSOLETE)"
yann@1535
   103
            deps="    depends on EXPERIMENTAL \\&\\& OBSOLETE"
yann@1173
   104
            ;;
yann@1173
   105
    esac
yann@1173
   106
    [ -n "${exp_obs_prompt}" ] && SedExpr1="${SedExpr1}${exp_obs_prompt}"
yann@1535
   107
    SedExpr1="${SedExpr1}\""
yann@1535
   108
    [ -n "${deps}" ] && SedExpr1="${SedExpr1}\n${deps}"
yann@1692
   109
    case "${tool}" in
yann@1692
   110
        gcc)
yann@1692
   111
            # Extract 'M'ajor and 'm'inor from version string
benoit@2485
   112
            ver_M=$(getVersionField "${version}" . 1)
benoit@2485
   113
            ver_m=$(getVersionField "${version}" . 2)
yann@2441
   114
            if [   \( ${ver_M} -eq 4 -a ${ver_m} -eq 6 \)  ]; then
yann@2441
   115
                SedExpr1="${SedExpr1}\n    select CC_GCC_4_6"
yann@2441
   116
            elif [ \( ${ver_M} -eq 4 -a ${ver_m} -eq 5 \)  ]; then
yann@2441
   117
                SedExpr1="${SedExpr1}\n    select CC_GCC_4_5"
yann@2441
   118
            elif [ \( ${ver_M} -eq 4 -a ${ver_m} -eq 4 \)  ]; then
yann@2441
   119
                SedExpr1="${SedExpr1}\n    select CC_GCC_4_4"
yann@2441
   120
            elif [ \( ${ver_M} -eq 4 -a ${ver_m} -eq 3 \)  ]; then
yann@2441
   121
                SedExpr1="${SedExpr1}\n    select CC_GCC_4_3"
yann@2441
   122
            elif [ \( ${ver_M} -eq 4 -a ${ver_m} -eq 2 \)  ]; then
yann@2441
   123
                SedExpr1="${SedExpr1}\n    select CC_GCC_4_2"
yann@1692
   124
            fi
yann@1692
   125
            ;;
benoit@2488
   126
        binutils)
benoit@2488
   127
            # Extract 'M'ajor and 'm'inor from version string
benoit@2488
   128
            ver_M=$(getVersionField "${version}" . 1)
benoit@2488
   129
            ver_m=$(getVersionField "${version}" . 2)
titus@2797
   130
            if [   \( ${ver_M} -eq 2 -a ${ver_m} -eq 22 \)  ]; then
titus@2797
   131
                SedExpr1="${SedExpr1}\n    select BINUTILS_2_22_or_later"
titus@2797
   132
            elif [ \( ${ver_M} -eq 2 -a ${ver_m} -eq 21 \)  ]; then
benoit@2488
   133
                SedExpr1="${SedExpr1}\n    select BINUTILS_2_21_or_later"
benoit@2488
   134
            elif [ \( ${ver_M} -eq 2 -a ${ver_m} -eq 20 \)  ]; then
benoit@2488
   135
                SedExpr1="${SedExpr1}\n    select BINUTILS_2_20_or_later"
benoit@2488
   136
            elif [ \( ${ver_M} -eq 2 -a ${ver_m} -eq 19 \)  ]; then
benoit@2488
   137
                SedExpr1="${SedExpr1}\n    select BINUTILS_2_19_or_later"
benoit@2488
   138
            elif [ \( ${ver_M} -eq 2 -a ${ver_m} -eq 18 \)  ]; then
benoit@2488
   139
                SedExpr1="${SedExpr1}\n    select BINUTILS_2_18_or_later"
benoit@2488
   140
            fi
benoit@2488
   141
            ;;
benoit@2489
   142
        eglibc)
benoit@2489
   143
            # Extract 'M'ajor and 'm'inor from version string
yann@3147
   144
            ver_M=$(getVersionField "${version}" _ 1)
yann@3147
   145
            ver_m=$(getVersionField "${version}" _ 2)
yann@3144
   146
            if [   \( ${ver_M} -eq 2 -a ${ver_m} -ge 16 \)  ]; then
yann@3144
   147
                SedExpr1="${SedExpr1}\n    select LIBC_EGLIBC_2_16_or_later"
benoit@2489
   148
            fi
benoit@2489
   149
            ;;
yann@1734
   150
        uClibc)
yann@1734
   151
            # uClibc-0.9.30 and above need some love
benoit@2485
   152
            ver_M=$(getVersionField "${version}" . 1)
benoit@2485
   153
            ver_m=$(getVersionField "${version}" . 2)
benoit@2485
   154
            ver_p=$(getVersionField "${version}" . 3)
yann@2666
   155
            if [    ${ver_M} -eq 0 -a ${ver_m} -eq 9 -a ${ver_p} -eq 30 \
yann@2666
   156
                 -o ${ver_M} -eq 0 -a ${ver_m} -eq 9 -a ${ver_p} -eq 31 ]; then
yann@1734
   157
                SedExpr1="${SedExpr1}\n    select LIBC_UCLIBC_0_9_30_or_later"
yann@2666
   158
            elif [  ${ver_M} -eq 0 -a ${ver_m} -eq 9 -a ${ver_p} -eq 32 ]; then
yann@2666
   159
                SedExpr1="${SedExpr1}\n    select LIBC_UCLIBC_0_9_32_or_later"
yann@1734
   160
            fi
yann@1734
   161
            ;;
yann@1852
   162
        gdb)
yann@1852
   163
            # gdb-7.0 and above have special handling
benoit@2485
   164
            ver_M=$(getVersionField "${version}" . 1)
yann@1852
   165
            if [ ${ver_M} -ge 7 ]; then
yann@1852
   166
                SedExpr1="${SedExpr1}\n    select GDB_7_0_or_later"
yann@1852
   167
            fi
yann@1852
   168
            ;;
yann@1692
   169
    esac
yann@1721
   170
    SedExpr2="    default \"${version}\" if ${config_ver_option}"
yann@1542
   171
    "${sed}" -r -i -e 's/^(# CT_INSERT_VERSION_BELOW)$/\1\n\n'"${SedExpr1}"'/;' "${file}"
yann@1535
   172
    "${sed}" -r -i -e 's/^(# CT_INSERT_VERSION_STRING_BELOW)$/\1\n'"${SedExpr2}"'/;' "${file}"
yann@1173
   173
}
yann@1173
   174
yann@96
   175
cat=
yann@1
   176
tool=
yann@1
   177
tool_prefix=
yann@1
   178
VERSION=
yann@43
   179
EXP=
yann@96
   180
OBS=
yann@1
   181
yann@1173
   182
if [ $# -eq 0 ]; then
yann@1173
   183
    doHelp
yann@1173
   184
    exit 1
yann@1173
   185
fi
yann@1173
   186
yann@1173
   187
while [ $# -gt 0 ]; do
yann@1173
   188
    case "$1" in
yann@96
   189
        # Tools:
yann@3152
   190
        --gcc)      EXP=; OBS=; cat=CC;             tool=gcc;       tool_prefix=cc;             dot2suffix=;;
yann@3152
   191
        --binutils) EXP=; OBS=; cat=BINUTILS;       tool=binutils;  tool_prefix=binutils;       dot2suffix=;;
yann@3153
   192
        --elf2flt)  EXP=; OBS=; cat=BINUTILS;       tool=binutils;  tool_prefix=binutils;       dot2suffix=.2;;
yann@3152
   193
        --glibc)    EXP=; OBS=; cat=LIBC_GLIBC;     tool=glibc;     tool_prefix=libc;           dot2suffix=;;
yann@3152
   194
        --eglibc)   EXP=; OBS=; cat=LIBC_EGLIBC;    tool=eglibc;    tool_prefix=libc;           dot2suffix=;;
yann@3152
   195
        --uClibc)   EXP=; OBS=; cat=LIBC_UCLIBC;    tool=uClibc;    tool_prefix=libc;           dot2suffix=;;
yann@3152
   196
        --newlib)   EXP=; OBS=; cat=LIBC_NEWLIB;    tool=newlib;    tool_prefix=libc;           dot2suffix=;;
yann@3152
   197
        --linux)    EXP=; OBS=; cat=KERNEL;         tool=linux;     tool_prefix=kernel;         dot2suffix=;;
yann@3152
   198
        --gdb)      EXP=; OBS=; cat=GDB;            tool=gdb;       tool_prefix=debug;          dot2suffix=;;
yann@3152
   199
        --dmalloc)  EXP=; OBS=; cat=DMALLOC;        tool=dmalloc;   tool_prefix=debug;          dot2suffix=;;
yann@3152
   200
        --duma)     EXP=; OBS=; cat=DUMA;           tool=duma;      tool_prefix=debug;          dot2suffix=;;
yann@3152
   201
        --strace)   EXP=; OBS=; cat=STRACE;         tool=strace;    tool_prefix=debug;          dot2suffix=;;
yann@3152
   202
        --ltrace)   EXP=; OBS=; cat=LTRACE;         tool=ltrace;    tool_prefix=debug;          dot2suffix=;;
yann@3152
   203
        --gmp)      EXP=; OBS=; cat=GMP;            tool=gmp;       tool_prefix=companion_libs; dot2suffix=;;
yann@3152
   204
        --mpfr)     EXP=; OBS=; cat=MPFR;           tool=mpfr;      tool_prefix=companion_libs; dot2suffix=;;
yann@3152
   205
        --ppl)      EXP=; OBS=; cat=PPL;            tool=ppl;       tool_prefix=companion_libs; dot2suffix=;;
yann@3152
   206
        --cloog)    EXP=; OBS=; cat=CLOOG;          tool=cloog;     tool_prefix=companion_libs; dot2suffix=;;
yann@3152
   207
        --mpc)      EXP=; OBS=; cat=MPC;            tool=mpc;       tool_prefix=companion_libs; dot2suffix=;;
yann@3152
   208
        --libelf)   EXP=; OBS=; cat=LIBELF;         tool=libelf;    tool_prefix=companion_libs; dot2suffix=;;
yann@1173
   209
yann@96
   210
        # Tools options:
yann@1173
   211
        -x|--experimental|+s)   EXP=1;;
yann@1173
   212
        -s|--stable|+x)         EXP=;;
yann@1173
   213
        -o|--obsolete|+c)       OBS=1;;
yann@1173
   214
        -c|--current|+o)        OBS=;;
yann@1173
   215
yann@96
   216
        # Misc:
yann@1173
   217
        -h|--help)  doHelp; exit 0;;
yann@1173
   218
        -*)         echo "Unknown option: '$1' (use -h/--help for help)."; exit 1;;
yann@1173
   219
yann@1173
   220
        # Version string:
yann@1173
   221
        *)  [ -n "${tool}" ] || { doHelp; exit 1; }
yann@2412
   222
            file_base="config/${tool_prefix}/${tool}.in"
yann@3152
   223
            addToolVersion "$1" "${file_base}${dot2suffix}"
yann@1173
   224
            ;;
yann@1
   225
    esac
yann@1173
   226
    shift
yann@1
   227
done