scripts/addToolVersion.sh
author Bart vdr. Meulen <bartvdrmeulen@gmail.com>
Sun Aug 02 16:45:43 2009 +0200 (2009-08-02)
changeset 1434 7e7290acccc1
parent 1324 48c12c696778
child 1441 0c44af8a8b5a
permissions -rwxr-xr-x
fix wrapper script for symlinks

The wrapper script placed around the target binaries when
using the companion libraries does not work for symbolic links
The wrapper scripts needs to follow the links before calling the
actual binary

Signed-off-by: Bart vdr. Meulen <bartvdrmeulen@gmail.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 . "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\n"
    82             ;;
    83         *,) exp_obs_prompt="  (EXPERIMENTAL)"
    84             deps="    depends on EXPERIMENTAL\n"
    85             ;;
    86         *)  exp_obs_prompt="  (EXPERIMENTAL, OBSOLETE)"
    87             deps="    depends on EXPERIMENTAL && OBSOLETE\n"
    88             ;;
    89     esac
    90     [ -n "${exp_obs_prompt}" ] && SedExpr1="${SedExpr1}${exp_obs_prompt}"
    91     SedExpr1="${SedExpr1}\"\n"
    92     [ -n "${deps}" ] && SedExpr1="${SedExpr1}${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="    select CC_GCC_4_3_or_later\n"
   100         fi
   101     fi
   102     SedExpr2="    default \"${version}\" if ${cat}_V_${v}"
   103     "${sed}" -r -i -e 's/^(# CT_INSERT_VERSION_ABOVE)$/'"${SedExpr1}"'\n\1/;' "${file}"
   104     "${sed}" -r -i -e 's/^(# CT_INSERT_VERSION_STRING_ABOVE)$/'"${SedExpr2}"'\n\1/;' "${file}"
   105 }
   106 
   107 cat=
   108 tool=
   109 tool_prefix=
   110 VERSION=
   111 EXP=
   112 OBS=
   113 
   114 if [ $# -eq 0 ]; then
   115     doHelp
   116     exit 1
   117 fi
   118 
   119 while [ $# -gt 0 ]; do
   120     case "$1" in
   121         # Tools:
   122         --gcc)      EXP=; OBS=; cat=CC;        tool=gcc;      tool_prefix=cc;;
   123         --binutils) EXP=; OBS=; cat=BINUTILS;  tool=binutils; tool_prefix=;;
   124         --glibc)    EXP=; OBS=; cat=LIBC;      tool=glibc;    tool_prefix=libc;;
   125         --eglibc)   EXP=; OBS=; cat=LIBC;      tool=eglibc;   tool_prefix=libc;;
   126         --uClibc)   EXP=; OBS=; cat=LIBC;      tool=uClibc;   tool_prefix=libc;;
   127         --linux)    EXP=; OBS=; cat=KERNEL;    tool=linux;    tool_prefix=kernel;;
   128         --gdb)      EXP=; OBS=; cat=GDB;       tool=gdb;      tool_prefix=debug;;
   129         --dmalloc)  EXP=; OBS=; cat=DMALLOC;   tool=dmalloc;  tool_prefix=debug;;
   130         --duma)     EXP=; OBS=; cat=DUMA;      tool=duma;     tool_prefix=debug;;
   131         --strace)   EXP=; OBS=; cat=STRACE;    tool=strace;   tool_prefix=debug;;
   132         --ltrace)   EXP=; OBS=; cat=LTRACE;    tool=ltrace;   tool_prefix=debug;;
   133         --libelf)   EXP=; OBS=; cat=LIBELF;    tool=libelf;   tool_prefix=tools;;
   134         --gmp)      EXP=; OBS=; cat=GMP;       tool=gmp;      tool_prefix=companion_libs;;
   135         --mpfr)     EXP=; OBS=; cat=MPFR;      tool=mpfr;     tool_prefix=companion_libs;;
   136         --ppl)      EXP=; OBS=; cat=PPL;       tool=ppl;      tool_prefix=companion_libs;;
   137         --cloog)    EXP=; OBS=; cat=CLOOG;     tool=cloog;    tool_prefix=companion_libs;;
   138 
   139         # Tools options:
   140         -x|--experimental|+s)   EXP=1;;
   141         -s|--stable|+x)         EXP=;;
   142         -o|--obsolete|+c)       OBS=1;;
   143         -c|--current|+o)        OBS=;;
   144 
   145         # Misc:
   146         -h|--help)  doHelp; exit 0;;
   147         -*)         echo "Unknown option: '$1' (use -h/--help for help)."; exit 1;;
   148 
   149         # Version string:
   150         *)  [ -n "${tool}" ] || { doHelp; exit 1; }
   151             addToolVersion "$1"
   152             ;;
   153     esac
   154     shift
   155 done