scripts/addToolVersion.sh
author "Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
Wed Jan 13 20:46:01 2010 +0100 (2010-01-13)
changeset 1732 6b2ae7804c6f
parent 1722 cde6a2002479
child 1734 ef453652ccc7
permissions -rwxr-xr-x
debug/gdb: staticaly link to ncurses for the native gdb

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