scripts/addToolVersion.sh
author "Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
Thu Nov 12 18:42:13 2009 +0100 (2009-11-12)
changeset 1623 f935634ef900
parent 1607 a119153ca777
child 1692 068c809cc646
permissions -rwxr-xr-x
scripts: be POSIXly correct in helper scripts

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