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