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>

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