scripts/addToolVersion.sh
author "Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
Mon Aug 23 14:32:16 2010 +0200 (2010-08-23)
changeset 2100 f9fcfc002c8a
parent 1872 d7787259005e
child 2412 20edcd78cf67
permissions -rwxr-xr-x
debug/gdb: install dependable libs in a generic target static libs dir

For now, ncurses is the only dependable target library built for gdb.
But expat is coming, and there's no reason to install each library in
its own place.

So, install ncurses in a generic directory, where other dependable
libraries can be installed as well.

Signed-off-by: "Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
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@1734
    61
    local deps v ver_M ver_m ver_p
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@1920
   103
                 -o \( ${ver_M} -eq 4 -a ${ver_m} -ge 5 \)  ]; then
yann@1920
   104
                SedExpr1="${SedExpr1}\n    select CC_GCC_4_5_or_later"
yann@1920
   105
            elif [    ${ver_M} -gt 4                          \
yann@1920
   106
                   -o \( ${ver_M} -eq 4 -a ${ver_m} -ge 4 \)  ]; then
yann@1692
   107
                SedExpr1="${SedExpr1}\n    select CC_GCC_4_4_or_later"
yann@1805
   108
            elif [    ${ver_M} -gt 4                          \
yann@1805
   109
                   -o \( ${ver_M} -eq 4 -a ${ver_m} -ge 3 \)  ]; then
yann@1805
   110
                SedExpr1="${SedExpr1}\n    select CC_GCC_4_3_or_later"
yann@1692
   111
            fi
yann@1692
   112
            ;;
yann@1734
   113
        uClibc)
yann@1734
   114
            # uClibc-0.9.30 and above need some love
yann@1734
   115
            ver_M=$(echo "${version}...." |cut -d . -f 1)
yann@1734
   116
            ver_m=$(echo "${version}...." |cut -d . -f 2)
yann@1734
   117
            ver_p=$(echo "${version}...." |cut -d . -f 3)
yann@1734
   118
            if [    ${ver_M} -ge 1                                      \
yann@1734
   119
                 -o ${ver_M} -eq 0 -a ${ver_m} -ge 10                   \
yann@1734
   120
                 -o ${ver_M} -eq 0 -a ${ver_m} -eq 9 -a ${ver_p} -ge 30 ]; then
yann@1734
   121
                SedExpr1="${SedExpr1}\n    select LIBC_UCLIBC_0_9_30_or_later"
yann@1734
   122
            fi
yann@1734
   123
            ;;
yann@1852
   124
        gdb)
yann@1852
   125
            # gdb-7.0 and above have special handling
yann@1852
   126
            ver_M=$(echo "${version}...." |cut -d . -f 1)
yann@1852
   127
            if [ ${ver_M} -ge 7 ]; then
yann@1852
   128
                SedExpr1="${SedExpr1}\n    select GDB_7_0_or_later"
yann@1852
   129
            fi
yann@1852
   130
            ;;
yann@1692
   131
    esac
yann@1721
   132
    SedExpr2="    default \"${version}\" if ${config_ver_option}"
yann@1542
   133
    "${sed}" -r -i -e 's/^(# CT_INSERT_VERSION_BELOW)$/\1\n\n'"${SedExpr1}"'/;' "${file}"
yann@1535
   134
    "${sed}" -r -i -e 's/^(# CT_INSERT_VERSION_STRING_BELOW)$/\1\n'"${SedExpr2}"'/;' "${file}"
yann@1173
   135
}
yann@1173
   136
yann@96
   137
cat=
yann@1
   138
tool=
yann@1
   139
tool_prefix=
yann@1
   140
VERSION=
yann@43
   141
EXP=
yann@96
   142
OBS=
yann@1
   143
yann@1173
   144
if [ $# -eq 0 ]; then
yann@1173
   145
    doHelp
yann@1173
   146
    exit 1
yann@1173
   147
fi
yann@1173
   148
yann@1173
   149
while [ $# -gt 0 ]; do
yann@1173
   150
    case "$1" in
yann@96
   151
        # Tools:
yann@1722
   152
        --gcc)      EXP=; OBS=; cat=CC;             tool=gcc;       tool_prefix=cc;;
yann@1722
   153
        --binutils) EXP=; OBS=; cat=BINUTILS;       tool=binutils;  tool_prefix=binutils;;
yann@1722
   154
        --glibc)    EXP=; OBS=; cat=LIBC_GLIBC;     tool=glibc;     tool_prefix=libc;;
yann@1722
   155
        --eglibc)   EXP=; OBS=; cat=LIBC_EGLIBC;    tool=eglibc;    tool_prefix=libc;;
yann@1722
   156
        --uClibc)   EXP=; OBS=; cat=LIBC_UCLIBC;    tool=uClibc;    tool_prefix=libc;;
yann@1723
   157
        --newlib)   EXP=; OBS=; cat=LIBC_NEWLIB;    tool=newlib;    tool_prefix=libc;;
yann@1722
   158
        --linux)    EXP=; OBS=; cat=KERNEL;         tool=linux;     tool_prefix=kernel;;
yann@1722
   159
        --gdb)      EXP=; OBS=; cat=GDB;            tool=gdb;       tool_prefix=debug;;
yann@1722
   160
        --dmalloc)  EXP=; OBS=; cat=DMALLOC;        tool=dmalloc;   tool_prefix=debug;;
yann@1722
   161
        --duma)     EXP=; OBS=; cat=DUMA;           tool=duma;      tool_prefix=debug;;
yann@1722
   162
        --strace)   EXP=; OBS=; cat=STRACE;         tool=strace;    tool_prefix=debug;;
yann@1722
   163
        --ltrace)   EXP=; OBS=; cat=LTRACE;         tool=ltrace;    tool_prefix=debug;;
yann@1722
   164
        --gmp)      EXP=; OBS=; cat=GMP;            tool=gmp;       tool_prefix=companion_libs;;
yann@1722
   165
        --mpfr)     EXP=; OBS=; cat=MPFR;           tool=mpfr;      tool_prefix=companion_libs;;
yann@1722
   166
        --ppl)      EXP=; OBS=; cat=PPL;            tool=ppl;       tool_prefix=companion_libs;;
yann@1722
   167
        --cloog)    EXP=; OBS=; cat=CLOOG;          tool=cloog;     tool_prefix=companion_libs;;
yann@1722
   168
        --mpc)      EXP=; OBS=; cat=MPC;            tool=mpc;       tool_prefix=companion_libs;;
yann@1872
   169
        --libelf)   EXP=; OBS=; cat=LIBELF;         tool=libelf;    tool_prefix=companion_libs;;
yann@1173
   170
yann@96
   171
        # Tools options:
yann@1173
   172
        -x|--experimental|+s)   EXP=1;;
yann@1173
   173
        -s|--stable|+x)         EXP=;;
yann@1173
   174
        -o|--obsolete|+c)       OBS=1;;
yann@1173
   175
        -c|--current|+o)        OBS=;;
yann@1173
   176
yann@96
   177
        # Misc:
yann@1173
   178
        -h|--help)  doHelp; exit 0;;
yann@1173
   179
        -*)         echo "Unknown option: '$1' (use -h/--help for help)."; exit 1;;
yann@1173
   180
yann@1173
   181
        # Version string:
yann@1173
   182
        *)  [ -n "${tool}" ] || { doHelp; exit 1; }
yann@1173
   183
            addToolVersion "$1"
yann@1173
   184
            ;;
yann@1
   185
    esac
yann@1173
   186
    shift
yann@1
   187
done