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