scripts/addToolVersion.sh
author "Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
Tue Nov 10 19:32:11 2009 +0100 (2009-11-10)
changeset 1622 9ad2a3fd1fcc
parent 1542 774837ae23ae
child 1623 f935634ef900
permissions -rwxr-xr-x
scripts: output renumbered patches in a new directory

When renumbering patches, the original patches get removed and replaced
with the new ones. This can be annoying to loose the original patches.
Fix this by putting the new patchs in a directory of their own.
     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 . "paths.mk"
     9 
    10 doHelp() {
    11     cat <<-EOF
    12 Usage: ${myname} <tool> <[options] version [...]> ...
    13   'tool' in one of:
    14     --gcc, --binutils, --glibc, --eglibc, --uClibc, --linux,
    15     --gdb, --dmalloc, --duma, --strace, --ltrace, --libelf
    16     --gmp, --mpfr, --ppl, --cloog
    17 
    18   Valid options for all tools:
    19     --stable, -s, +x   (default)
    20       mark the version as being stable (as opposed to experimental, below)
    21 
    22     --experimental, -x, +s
    23       mark the version as being experimental (as opposed to stable, above)
    24 
    25     --current, -c, +o   (default)
    26       mark the version as being cuurent (as opposed to obsolete, below)
    27 
    28     --obsolete, -o, +c
    29       mark the version as being obsolete (as opposed to current, above)
    30 
    31   Note: setting a new tool resets to the defaults: 'stable' and 'current'.
    32 
    33   'version' is a valid version for the specified tool.
    34 
    35   Examples:
    36     add stable current version 2.6.19.2 to linux kernel:
    37       ${myname} --linux 2.6.19.2
    38 
    39     add experimental obsolete version 2.3.5 and stable current versions 2.6.1
    40     and 2.6.2 to glibc, add stable obsolete version 3.3.3 to gcc:
    41       ${myname} --glibc -x -o 2.3.5 -s -c 2.6.1 2.6.2 --gcc -o 3.3.3
    42 EOF
    43 }
    44 
    45 # Effectively add a version to the specified tool
    46 # $cat          : tool category
    47 # $tool         : tool name
    48 # $tool_prefix  : tool directory prefix
    49 # $EXP          : set to non empty if experimental, to empty otherwise
    50 # #OBS          : set to non empty if obsolete, to empty otherwise
    51 # $1            : version string to add
    52 addToolVersion() {
    53     local version="$1"
    54     local file
    55     local config_ver_option
    56     local exp_obs_prompt
    57     local deps v ver_M ver_m
    58     local SedExpr1 SedExpr2
    59 
    60     file="config/${tool_prefix}/${tool}.in"
    61     v=$(echo "${version}" |"${sed}" -r -e 's/-/_/g; s/\./_/g;')
    62 
    63     config_ver_option="${cat}_V_${v}"
    64 
    65     # Check for existing version: it can be legitimitate for an end-user
    66     # to try adding a new version if the one he/she wants is not listed.
    67     # But it can be the case where the version is hidden behind either one
    68     # of EXPERIMENTAL or OBSOLETE, so warn if the version is already listed.
    69     if (GREP_OPTIONS= grep -E "^config ${config_ver_option}$" "${file}" >/dev/null 2>&1); then
    70         echo "'${tool}': version '${version}' already present:"
    71         GREP_OPTIONS= grep -A3 -B0 -E "^config ${config_ver_option}$" "${file}"
    72         return 0
    73     fi
    74 
    75     SedExpr1="${SedExpr1}config ${config_ver_option}\n"
    76     SedExpr1="${SedExpr1}    bool\n"
    77     SedExpr1="${SedExpr1}    prompt \"${version}"
    78     case "${EXP},${OBS}" in
    79         ,)  ;;
    80         ,*) exp_obs_prompt=" (OBSOLETE)"
    81             deps="    depends on OBSOLETE"
    82             ;;
    83         *,) exp_obs_prompt=" (EXPERIMENTAL)"
    84             deps="    depends on EXPERIMENTAL"
    85             ;;
    86         *)  exp_obs_prompt=" (EXPERIMENTAL, OBSOLETE)"
    87             deps="    depends on EXPERIMENTAL \\&\\& OBSOLETE"
    88             ;;
    89     esac
    90     [ -n "${exp_obs_prompt}" ] && SedExpr1="${SedExpr1}${exp_obs_prompt}"
    91     SedExpr1="${SedExpr1}\""
    92     [ -n "${deps}" ] && SedExpr1="${SedExpr1}\n${deps}"
    93     if [ "${tool}" = "gcc" ]; then
    94         # Extract 'M'ajor and 'm'inor from version string
    95         ver_M=$(echo "${version}...." |cut -d . -f 1)
    96         ver_m=$(echo "${version}...." |cut -d . -f 2)
    97         if [    ${ver_M} -gt 4                          \
    98              -o \( ${ver_M} -eq 4 -a ${ver_m} -ge 3 \)  ]; then
    99             SedExpr1="${SedExpr1}\n    select CC_GCC_4_3_or_later"
   100         fi
   101         if [    ${ver_M} -gt 4                          \
   102              -o \( ${ver_M} -eq 4 -a ${ver_m} -ge 4 \)  ]; then
   103             SedExpr1="${SedExpr1}\n    select CC_GCC_4_4_or_later"
   104         fi
   105     fi
   106     SedExpr2="    default \"${version}\" if ${cat}_V_${v}"
   107     "${sed}" -r -i -e 's/^(# CT_INSERT_VERSION_BELOW)$/\1\n\n'"${SedExpr1}"'/;' "${file}"
   108     "${sed}" -r -i -e 's/^(# CT_INSERT_VERSION_STRING_BELOW)$/\1\n'"${SedExpr2}"'/;' "${file}"
   109 }
   110 
   111 cat=
   112 tool=
   113 tool_prefix=
   114 VERSION=
   115 EXP=
   116 OBS=
   117 
   118 if [ $# -eq 0 ]; then
   119     doHelp
   120     exit 1
   121 fi
   122 
   123 while [ $# -gt 0 ]; do
   124     case "$1" in
   125         # Tools:
   126         --gcc)      EXP=; OBS=; cat=CC;        tool=gcc;      tool_prefix=cc;;
   127         --binutils) EXP=; OBS=; cat=BINUTILS;  tool=binutils; tool_prefix=binutils;;
   128         --glibc)    EXP=; OBS=; cat=LIBC;      tool=glibc;    tool_prefix=libc;;
   129         --eglibc)   EXP=; OBS=; cat=LIBC;      tool=eglibc;   tool_prefix=libc;;
   130         --uClibc)   EXP=; OBS=; cat=LIBC;      tool=uClibc;   tool_prefix=libc;;
   131         --linux)    EXP=; OBS=; cat=KERNEL;    tool=linux;    tool_prefix=kernel;;
   132         --gdb)      EXP=; OBS=; cat=GDB;       tool=gdb;      tool_prefix=debug;;
   133         --dmalloc)  EXP=; OBS=; cat=DMALLOC;   tool=dmalloc;  tool_prefix=debug;;
   134         --duma)     EXP=; OBS=; cat=DUMA;      tool=duma;     tool_prefix=debug;;
   135         --strace)   EXP=; OBS=; cat=STRACE;    tool=strace;   tool_prefix=debug;;
   136         --ltrace)   EXP=; OBS=; cat=LTRACE;    tool=ltrace;   tool_prefix=debug;;
   137         --libelf)   EXP=; OBS=; cat=LIBELF;    tool=libelf;   tool_prefix=tools;;
   138         --gmp)      EXP=; OBS=; cat=GMP;       tool=gmp;      tool_prefix=companion_libs;;
   139         --mpfr)     EXP=; OBS=; cat=MPFR;      tool=mpfr;     tool_prefix=companion_libs;;
   140         --ppl)      EXP=; OBS=; cat=PPL;       tool=ppl;      tool_prefix=companion_libs;;
   141         --cloog)    EXP=; OBS=; cat=CLOOG;     tool=cloog;    tool_prefix=companion_libs;;
   142 
   143         # Tools options:
   144         -x|--experimental|+s)   EXP=1;;
   145         -s|--stable|+x)         EXP=;;
   146         -o|--obsolete|+c)       OBS=1;;
   147         -c|--current|+o)        OBS=;;
   148 
   149         # Misc:
   150         -h|--help)  doHelp; exit 0;;
   151         -*)         echo "Unknown option: '$1' (use -h/--help for help)."; exit 1;;
   152 
   153         # Version string:
   154         *)  [ -n "${tool}" ] || { doHelp; exit 1; }
   155             addToolVersion "$1"
   156             ;;
   157     esac
   158     shift
   159 done