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.
     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="${SedExpr1}    select CC_GCC_4_3_or_later\n"
   100         fi
   101         if [    ${ver_M} -gt 4                          \
   102              -o \( ${ver_M} -eq 4 -a ${ver_m} -ge 4 \)  ]; then
   103             SedExpr1="${SedExpr1}    select CC_GCC_4_4_or_later\n"
   104         fi
   105     fi
   106     SedExpr2="    default \"${version}\" if ${cat}_V_${v}"
   107     "${sed}" -r -i -e 's/^(# CT_INSERT_VERSION_ABOVE)$/'"${SedExpr1}"'\n\1/;' "${file}"
   108     "${sed}" -r -i -e 's/^(# CT_INSERT_VERSION_STRING_ABOVE)$/'"${SedExpr2}"'\n\1/;' "${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=;;
   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