scripts/addToolVersion.sh
author "Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
Fri Sep 04 17:27:16 2009 +0200 (2009-09-04)
changeset 1512 439a6b292917
parent 1380 945dc995daa7
child 1535 073d351bdcd3
permissions -rwxr-xr-x
TODO: update

Add TODO list for m4, autoconf, automake and libtool.
Building our own versions would remove burden from the users
who have older versions on their distributions, and are not
ready/able/allowed to upgrade.
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@1441
    99
            SedExpr1="${SedExpr1}    select CC_GCC_4_3_or_later\n"
yann@1441
   100
        fi
yann@1441
   101
        if [    ${ver_M} -gt 4                          \
yann@1441
   102
             -o \( ${ver_M} -eq 4 -a ${ver_m} -ge 4 \)  ]; then
yann@1441
   103
            SedExpr1="${SedExpr1}    select CC_GCC_4_4_or_later\n"
yann@1173
   104
        fi
yann@1173
   105
    fi
yann@1173
   106
    SedExpr2="    default \"${version}\" if ${cat}_V_${v}"
yann@1174
   107
    "${sed}" -r -i -e 's/^(# CT_INSERT_VERSION_ABOVE)$/'"${SedExpr1}"'\n\1/;' "${file}"
yann@1174
   108
    "${sed}" -r -i -e 's/^(# CT_INSERT_VERSION_STRING_ABOVE)$/'"${SedExpr2}"'\n\1/;' "${file}"
yann@1173
   109
}
yann@1173
   110
yann@96
   111
cat=
yann@1
   112
tool=
yann@1
   113
tool_prefix=
yann@1
   114
VERSION=
yann@43
   115
EXP=
yann@96
   116
OBS=
yann@1
   117
yann@1173
   118
if [ $# -eq 0 ]; then
yann@1173
   119
    doHelp
yann@1173
   120
    exit 1
yann@1173
   121
fi
yann@1173
   122
yann@1173
   123
while [ $# -gt 0 ]; do
yann@1173
   124
    case "$1" in
yann@96
   125
        # Tools:
yann@1173
   126
        --gcc)      EXP=; OBS=; cat=CC;        tool=gcc;      tool_prefix=cc;;
yann@1173
   127
        --binutils) EXP=; OBS=; cat=BINUTILS;  tool=binutils; tool_prefix=;;
yann@1173
   128
        --glibc)    EXP=; OBS=; cat=LIBC;      tool=glibc;    tool_prefix=libc;;
yann@1173
   129
        --eglibc)   EXP=; OBS=; cat=LIBC;      tool=eglibc;   tool_prefix=libc;;
yann@1173
   130
        --uClibc)   EXP=; OBS=; cat=LIBC;      tool=uClibc;   tool_prefix=libc;;
yann@1173
   131
        --linux)    EXP=; OBS=; cat=KERNEL;    tool=linux;    tool_prefix=kernel;;
yann@1173
   132
        --gdb)      EXP=; OBS=; cat=GDB;       tool=gdb;      tool_prefix=debug;;
yann@1173
   133
        --dmalloc)  EXP=; OBS=; cat=DMALLOC;   tool=dmalloc;  tool_prefix=debug;;
yann@1173
   134
        --duma)     EXP=; OBS=; cat=DUMA;      tool=duma;     tool_prefix=debug;;
yann@1173
   135
        --strace)   EXP=; OBS=; cat=STRACE;    tool=strace;   tool_prefix=debug;;
yann@1173
   136
        --ltrace)   EXP=; OBS=; cat=LTRACE;    tool=ltrace;   tool_prefix=debug;;
yann@1173
   137
        --libelf)   EXP=; OBS=; cat=LIBELF;    tool=libelf;   tool_prefix=tools;;
yann@1318
   138
        --gmp)      EXP=; OBS=; cat=GMP;       tool=gmp;      tool_prefix=companion_libs;;
yann@1318
   139
        --mpfr)     EXP=; OBS=; cat=MPFR;      tool=mpfr;     tool_prefix=companion_libs;;
yann@1324
   140
        --ppl)      EXP=; OBS=; cat=PPL;       tool=ppl;      tool_prefix=companion_libs;;
yann@1380
   141
        --cloog)    EXP=; OBS=; cat=CLOOG;     tool=cloog;    tool_prefix=companion_libs;;
yann@1173
   142
yann@96
   143
        # Tools options:
yann@1173
   144
        -x|--experimental|+s)   EXP=1;;
yann@1173
   145
        -s|--stable|+x)         EXP=;;
yann@1173
   146
        -o|--obsolete|+c)       OBS=1;;
yann@1173
   147
        -c|--current|+o)        OBS=;;
yann@1173
   148
yann@96
   149
        # Misc:
yann@1173
   150
        -h|--help)  doHelp; exit 0;;
yann@1173
   151
        -*)         echo "Unknown option: '$1' (use -h/--help for help)."; exit 1;;
yann@1173
   152
yann@1173
   153
        # Version string:
yann@1173
   154
        *)  [ -n "${tool}" ] || { doHelp; exit 1; }
yann@1173
   155
            addToolVersion "$1"
yann@1173
   156
            ;;
yann@1
   157
    esac
yann@1173
   158
    shift
yann@1
   159
done