scripts/addToolVersion.sh
author "Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
Thu Jan 29 18:48:05 2009 +0000 (2009-01-29)
changeset 1173 4b32ffb3f34d
parent 1095 a18b17c1ddc5
child 1174 7710d81d15e7
permissions -rwxr-xr-x
Fix scripts/addToolVersion.sh:
- make it a PSOX shell script (hopefully)
- enhance the command line parsing

/trunk/scripts/addToolVersion.sh | 161 102 59 0 +++++++++++++++++++++++++++++-----------------
1 file changed, 102 insertions(+), 59 deletions(-)
     1 #!/bin/sh
     2 
     3 # Adds a new version to one of the toolchain component
     4 myname="$0"
     5 
     6 doHelp() {
     7     cat <<-EOF
     8 Usage: ${myname} <tool> <[options] version [...]> ...
     9   'tool' in one of:
    10     --gcc, --binutils, --glibc, --eglibc, --uClibc, --linux,
    11     --gdb, --dmalloc, --duma, --strace, --ltrace, --libelf
    12     --gmp, --mpfr
    13 
    14   Valid options for all tools:
    15     --stable, -s, +x   (default)
    16       mark the version as being stable (as opposed to experimental)
    17 
    18     --experimental, -x, +s
    19       mark the version as being experimental (as opposed to stable)
    20 
    21     --current, -c, +o   (default)
    22       mark the version as being cuurent (as opposed to obsolete)
    23 
    24     --obsolete, -o, +c
    25       mark the version as being obsolete (as opposed to current)
    26 
    27   Note: setting a new tool resets to the defaults: 'stable' and 'current'.
    28 
    29   'version' is a valid version for the specified tool.
    30 
    31   Examples:
    32     add stable current version 2.6.19.2 to linux kernel:
    33       ${myname} --linux 2.6.19.2
    34 
    35     add experimental obsolete version 2.3.5 and stable current versions 2.6.1
    36     and 2.6.2 to glibc, add stable obsolete version 3.3.3 to gcc:
    37       ${myname} --glibc -x -o 2.3.5 -s -c 2.6.1 2.6.2 --gcc -o 3.3.3
    38 EOF
    39 }
    40 
    41 # Effectively add a version to the specified tool
    42 # $cat          : tool category
    43 # $tool         : tool name
    44 # $tool_prefix  : tool directory prefix
    45 # $EXP          : set to non empty if experimental, to empty otherwise
    46 # #OBS          : set to non empty if obsolete, to empty otherwise
    47 # $1            : version string to add
    48 addToolVersion() {
    49     local version="$1"
    50     local file
    51     local exp_obs_prompt
    52     local deps v ver_M ver_m
    53     local SedExpr1 SedExpr2
    54 
    55     file="config/${tool_prefix}/${tool}.in"
    56     v=$(echo "${version}" |sed -r -e 's/-/_/g; s/\./_/g;')
    57 
    58     SedExpr1="${SedExpr1}config ${cat}_V_${v}\n"
    59     SedExpr1="${SedExpr1}    bool\n"
    60     SedExpr1="${SedExpr1}    prompt \"${version}"
    61     case "${EXP},${OBS}" in
    62         ,)  ;;
    63         ,*) exp_obs_prompt="  (OBSOLETE)"
    64             deps="    depends on OBSOLETE\n"
    65             ;;
    66         *,) exp_obs_prompt="  (EXPERIMENTAL)"
    67             deps="    depends on EXPERIMENTAL\n"
    68             ;;
    69         *)  exp_obs_prompt="  (EXPERIMENTAL, OBSOLETE)"
    70             deps="    depends on EXPERIMENTAL && OBSOLETE\n"
    71             ;;
    72     esac
    73     [ -n "${exp_obs_prompt}" ] && SedExpr1="${SedExpr1}${exp_obs_prompt}"
    74     SedExpr1="${SedExpr1}\"\n"
    75     [ -n "${deps}" ] && SedExpr1="${SedExpr1}${deps}"
    76     if [ "${tool}" = "gcc" ]; then
    77         # Extract 'M'ajor and 'm'inor from version string
    78         ver_M=$(echo "${version}...." |cut -d . -f 1)
    79         ver_m=$(echo "${version}...." |cut -d . -f 2)
    80         if [    ${ver_M} -gt 4                          \
    81              -o \( ${ver_M} -eq 4 -a ${ver_m} -ge 3 \)  ]; then
    82             SedExpr1="    select CC_GCC_4_3_or_later\n"
    83         fi
    84     fi
    85     SedExpr2="    default \"${version}\" if ${cat}_V_${v}"
    86     sed -r -i -e 's/^(# CT_INSERT_VERSION_ABOVE)$/'"${SedExpr1}"'\n\1/;' "${file}"
    87     sed -r -i -e 's/^(# CT_INSERT_VERSION_STRING_ABOVE)$/'"${SedExpr2}"'\n\1/;' "${file}"
    88 }
    89 
    90 cat=
    91 tool=
    92 tool_prefix=
    93 VERSION=
    94 EXP=
    95 OBS=
    96 
    97 if [ $# -eq 0 ]; then
    98     doHelp
    99     exit 1
   100 fi
   101 
   102 while [ $# -gt 0 ]; do
   103     case "$1" in
   104         # Tools:
   105         --gcc)      EXP=; OBS=; cat=CC;        tool=gcc;      tool_prefix=cc;;
   106         --binutils) EXP=; OBS=; cat=BINUTILS;  tool=binutils; tool_prefix=;;
   107         --glibc)    EXP=; OBS=; cat=LIBC;      tool=glibc;    tool_prefix=libc;;
   108         --eglibc)   EXP=; OBS=; cat=LIBC;      tool=eglibc;   tool_prefix=libc;;
   109         --uClibc)   EXP=; OBS=; cat=LIBC;      tool=uClibc;   tool_prefix=libc;;
   110         --linux)    EXP=; OBS=; cat=KERNEL;    tool=linux;    tool_prefix=kernel;;
   111         --gdb)      EXP=; OBS=; cat=GDB;       tool=gdb;      tool_prefix=debug;;
   112         --dmalloc)  EXP=; OBS=; cat=DMALLOC;   tool=dmalloc;  tool_prefix=debug;;
   113         --duma)     EXP=; OBS=; cat=DUMA;      tool=duma;     tool_prefix=debug;;
   114         --strace)   EXP=; OBS=; cat=STRACE;    tool=strace;   tool_prefix=debug;;
   115         --ltrace)   EXP=; OBS=; cat=LTRACE;    tool=ltrace;   tool_prefix=debug;;
   116         --libelf)   EXP=; OBS=; cat=LIBELF;    tool=libelf;   tool_prefix=tools;;
   117         --gmp)      EXP=; OBS=; cat=GMP;       tool=gmp;      tool_prefix=gmp_mpfr;;
   118         --mpfr)     EXP=; OBS=; cat=MPFR;      tool=mpfr;     tool_prefix=gmp_mpfr;;
   119 
   120         # Tools options:
   121         -x|--experimental|+s)   EXP=1;;
   122         -s|--stable|+x)         EXP=;;
   123         -o|--obsolete|+c)       OBS=1;;
   124         -c|--current|+o)        OBS=;;
   125 
   126         # Misc:
   127         -h|--help)  doHelp; exit 0;;
   128         -*)         echo "Unknown option: '$1' (use -h/--help for help)."; exit 1;;
   129 
   130         # Version string:
   131         *)  [ -n "${tool}" ] || { doHelp; exit 1; }
   132             addToolVersion "$1"
   133             ;;
   134     esac
   135     shift
   136 done