scripts/addToolVersion.sh
author "Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
Thu Jun 11 21:47:19 2009 +0000 (2009-06-11)
branch1.4
changeset 1451 25d050084e98
parent 1200 136731f6f597
child 1318 5416f4ba36bf
child 1363 87f25f1d25d0
permissions -rwxr-xr-x
populate: fix installing dynamic linker 'ld.so'

The dynamic linker, ld.so, needs the execute bit to be set.
Detect tht the library being installed is in fact ld.so and
install it with 0755 instead of 0644.

Fix detecting src == dst.

Use a simpler command to copy src -> dst.

Also change echo to printf, get rid of 'echo -n', which is
highly non-portable.


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