scripts/addToolVersion.sh
author "Benoît Thébaudeau" <benoit.thebaudeau@advansee.com>
Mon Apr 16 15:25:36 2012 +0200 (2012-04-16)
changeset 2941 13e40098fffc
parent 2797 ce8ada0b1d41
child 3144 481658dd0e7f
permissions -rwxr-xr-x
cc/gcc: update Linaro GCC revisions to 2012.04

Update Linaro GCC with the latest available revisions.

The 4.7 revision is also released, but the infrastructure is not yet ready for
it in CT-NG.

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