scripts/addToolVersion.sh
author "Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
Sun Jan 17 23:06:02 2010 +0100 (2010-01-17)
changeset 1740 c57458bb354d
parent 1723 a4298e0844ec
child 1805 ca5e7981fc24
permissions -rwxr-xr-x
configure: do not require hg when configuring in an hg clone

When configuring in an hg clone, we need hg to compute the version string.
It can happen that users do not have Mercurial (eg. if they got a snapshot
rather that they did a full clone). In this case, we can still run, of
course, so simply fill the version string with a sufficiently explicit
value, that does not require hg. The date is a good candidate.
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@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@1734
   111
        uClibc)
yann@1734
   112
            # uClibc-0.9.30 and above need some love
yann@1734
   113
            ver_M=$(echo "${version}...." |cut -d . -f 1)
yann@1734
   114
            ver_m=$(echo "${version}...." |cut -d . -f 2)
yann@1734
   115
            ver_p=$(echo "${version}...." |cut -d . -f 3)
yann@1734
   116
            if [    ${ver_M} -ge 1                                      \
yann@1734
   117
                 -o ${ver_M} -eq 0 -a ${ver_m} -ge 10                   \
yann@1734
   118
                 -o ${ver_M} -eq 0 -a ${ver_m} -eq 9 -a ${ver_p} -ge 30 ]; then
yann@1734
   119
                SedExpr1="${SedExpr1}\n    select LIBC_UCLIBC_0_9_30_or_later"
yann@1734
   120
            fi
yann@1734
   121
            ;;
yann@1692
   122
    esac
yann@1721
   123
    SedExpr2="    default \"${version}\" if ${config_ver_option}"
yann@1542
   124
    "${sed}" -r -i -e 's/^(# CT_INSERT_VERSION_BELOW)$/\1\n\n'"${SedExpr1}"'/;' "${file}"
yann@1535
   125
    "${sed}" -r -i -e 's/^(# CT_INSERT_VERSION_STRING_BELOW)$/\1\n'"${SedExpr2}"'/;' "${file}"
yann@1173
   126
}
yann@1173
   127
yann@96
   128
cat=
yann@1
   129
tool=
yann@1
   130
tool_prefix=
yann@1
   131
VERSION=
yann@43
   132
EXP=
yann@96
   133
OBS=
yann@1
   134
yann@1173
   135
if [ $# -eq 0 ]; then
yann@1173
   136
    doHelp
yann@1173
   137
    exit 1
yann@1173
   138
fi
yann@1173
   139
yann@1173
   140
while [ $# -gt 0 ]; do
yann@1173
   141
    case "$1" in
yann@96
   142
        # Tools:
yann@1722
   143
        --gcc)      EXP=; OBS=; cat=CC;             tool=gcc;       tool_prefix=cc;;
yann@1722
   144
        --binutils) EXP=; OBS=; cat=BINUTILS;       tool=binutils;  tool_prefix=binutils;;
yann@1722
   145
        --glibc)    EXP=; OBS=; cat=LIBC_GLIBC;     tool=glibc;     tool_prefix=libc;;
yann@1722
   146
        --eglibc)   EXP=; OBS=; cat=LIBC_EGLIBC;    tool=eglibc;    tool_prefix=libc;;
yann@1722
   147
        --uClibc)   EXP=; OBS=; cat=LIBC_UCLIBC;    tool=uClibc;    tool_prefix=libc;;
yann@1723
   148
        --newlib)   EXP=; OBS=; cat=LIBC_NEWLIB;    tool=newlib;    tool_prefix=libc;;
yann@1722
   149
        --linux)    EXP=; OBS=; cat=KERNEL;         tool=linux;     tool_prefix=kernel;;
yann@1722
   150
        --gdb)      EXP=; OBS=; cat=GDB;            tool=gdb;       tool_prefix=debug;;
yann@1722
   151
        --dmalloc)  EXP=; OBS=; cat=DMALLOC;        tool=dmalloc;   tool_prefix=debug;;
yann@1722
   152
        --duma)     EXP=; OBS=; cat=DUMA;           tool=duma;      tool_prefix=debug;;
yann@1722
   153
        --strace)   EXP=; OBS=; cat=STRACE;         tool=strace;    tool_prefix=debug;;
yann@1722
   154
        --ltrace)   EXP=; OBS=; cat=LTRACE;         tool=ltrace;    tool_prefix=debug;;
yann@1722
   155
        --libelf)   EXP=; OBS=; cat=LIBELF;         tool=libelf;    tool_prefix=tools;;
yann@1722
   156
        --gmp)      EXP=; OBS=; cat=GMP;            tool=gmp;       tool_prefix=companion_libs;;
yann@1722
   157
        --mpfr)     EXP=; OBS=; cat=MPFR;           tool=mpfr;      tool_prefix=companion_libs;;
yann@1722
   158
        --ppl)      EXP=; OBS=; cat=PPL;            tool=ppl;       tool_prefix=companion_libs;;
yann@1722
   159
        --cloog)    EXP=; OBS=; cat=CLOOG;          tool=cloog;     tool_prefix=companion_libs;;
yann@1722
   160
        --mpc)      EXP=; OBS=; cat=MPC;            tool=mpc;       tool_prefix=companion_libs;;
yann@1173
   161
yann@96
   162
        # Tools options:
yann@1173
   163
        -x|--experimental|+s)   EXP=1;;
yann@1173
   164
        -s|--stable|+x)         EXP=;;
yann@1173
   165
        -o|--obsolete|+c)       OBS=1;;
yann@1173
   166
        -c|--current|+o)        OBS=;;
yann@1173
   167
yann@96
   168
        # Misc:
yann@1173
   169
        -h|--help)  doHelp; exit 0;;
yann@1173
   170
        -*)         echo "Unknown option: '$1' (use -h/--help for help)."; exit 1;;
yann@1173
   171
yann@1173
   172
        # Version string:
yann@1173
   173
        *)  [ -n "${tool}" ] || { doHelp; exit 1; }
yann@1173
   174
            addToolVersion "$1"
yann@1173
   175
            ;;
yann@1
   176
    esac
yann@1173
   177
    shift
yann@1
   178
done