scripts/addToolsVersion: properly handle .in vs. .in.2
While most components have their version in the .in file, some
have it in the .in.2 (eg. elf2flt).
Currently, to handle this case, we indiscriminately munge both files,
but this is wrong: in the elf2flt case, if we add a binutils version,
we do not want it to be added to elf2flt, and conversely.
So, for each tool, we need to explicitly know what file to munge.
Signed-off-by: "Yann E. MORIN" <yann.morin.1998@free.fr>
4 # Adds a new version to one of the toolchain component
7 # Parse the tools' paths configuration
8 # It is expected that this script is only to be run from the
9 # source directory of crosstool-NG, so it is trivial to find
10 # paths.sh (we can't use ". paths.sh", as POSIX states that
11 # $PATH should be searched for, and $PATH most probably doe
12 # not include "."), hence the "./".
17 Usage: ${myname} <--tool> <[options] version [...]> ...
19 gcc, binutils, glibc, eglibc, uClibc, newlib, linux, gdb, dmalloc,
20 duma, strace, ltrace, libelf, gmp, mpfr, ppl, cloog, mpc
22 Valid options for all tools:
23 --stable, -s, +x (default)
24 mark the version as being stable (as opposed to experimental, below)
26 --experimental, -x, +s
27 mark the version as being experimental (as opposed to stable, above)
29 --current, -c, +o (default)
30 mark the version as being cuurent (as opposed to obsolete, below)
33 mark the version as being obsolete (as opposed to current, above)
35 Note: setting a new tool resets to the defaults: 'stable' and 'current'.
37 'version' is a valid version for the specified tool.
40 add stable current version 2.6.19.2 to linux kernel:
41 ${myname} --linux 2.6.19.2
43 add experimental obsolete version 2.3.5 and stable current versions 2.6.1
44 and 2.6.2 to glibc, add stable obsolete version 3.3.3 to gcc:
45 ${myname} --glibc -x -o 2.3.5 -s -c 2.6.1 2.6.2 --gcc -o 3.3.3
49 # Extract field $3 from version $1 with separator $2
55 echo "${version}${sep}${sep}${sep}${sep}" |cut -d ${sep} -f ${field}
58 # Effectively add a version to the specified tool
59 # $cat : tool category
61 # $tool_prefix : tool directory prefix
62 # $EXP : set to non empty if experimental, to empty otherwise
63 # #OBS : set to non empty if obsolete, to empty otherwise
64 # $1 : version string to add
68 local config_ver_option
70 local deps v ver_M ver_m ver_p
71 local SedExpr1 SedExpr2
73 [ -f "${file}" ] || return 0
75 v=$(echo "${version}" |"${sed}" -r -e 's/-/_/g; s/\./_/g;')
77 config_ver_option="${cat}_V_${v}"
79 # Check for existing version: it can be legitimitate for an end-user
80 # to try adding a new version if the one he/she wants is not listed.
81 # But it can be the case where the version is hidden behind either one
82 # of EXPERIMENTAL or OBSOLETE, so warn if the version is already listed.
83 if grep -E "^config ${config_ver_option}$" "${file}" >/dev/null 2>&1; then
84 echo "'${tool}': version '${version}' already present:"
86 -E "^(config ${config_ver_option}| {4}prompt \"${version}\")$" \
91 SedExpr1="${SedExpr1}config ${config_ver_option}\n"
92 SedExpr1="${SedExpr1} bool\n"
93 SedExpr1="${SedExpr1} prompt \"${version}"
94 case "${EXP},${OBS}" in
96 ,*) exp_obs_prompt=" (OBSOLETE)"
97 deps=" depends on OBSOLETE"
99 *,) exp_obs_prompt=" (EXPERIMENTAL)"
100 deps=" depends on EXPERIMENTAL"
102 *) exp_obs_prompt=" (EXPERIMENTAL, OBSOLETE)"
103 deps=" depends on EXPERIMENTAL \\&\\& OBSOLETE"
106 [ -n "${exp_obs_prompt}" ] && SedExpr1="${SedExpr1}${exp_obs_prompt}"
107 SedExpr1="${SedExpr1}\""
108 [ -n "${deps}" ] && SedExpr1="${SedExpr1}\n${deps}"
111 # Extract 'M'ajor and 'm'inor from version string
112 ver_M=$(getVersionField "${version}" . 1)
113 ver_m=$(getVersionField "${version}" . 2)
114 if [ \( ${ver_M} -eq 4 -a ${ver_m} -eq 6 \) ]; then
115 SedExpr1="${SedExpr1}\n select CC_GCC_4_6"
116 elif [ \( ${ver_M} -eq 4 -a ${ver_m} -eq 5 \) ]; then
117 SedExpr1="${SedExpr1}\n select CC_GCC_4_5"
118 elif [ \( ${ver_M} -eq 4 -a ${ver_m} -eq 4 \) ]; then
119 SedExpr1="${SedExpr1}\n select CC_GCC_4_4"
120 elif [ \( ${ver_M} -eq 4 -a ${ver_m} -eq 3 \) ]; then
121 SedExpr1="${SedExpr1}\n select CC_GCC_4_3"
122 elif [ \( ${ver_M} -eq 4 -a ${ver_m} -eq 2 \) ]; then
123 SedExpr1="${SedExpr1}\n select CC_GCC_4_2"
127 # Extract 'M'ajor and 'm'inor from version string
128 ver_M=$(getVersionField "${version}" . 1)
129 ver_m=$(getVersionField "${version}" . 2)
130 if [ \( ${ver_M} -eq 2 -a ${ver_m} -eq 22 \) ]; then
131 SedExpr1="${SedExpr1}\n select BINUTILS_2_22_or_later"
132 elif [ \( ${ver_M} -eq 2 -a ${ver_m} -eq 21 \) ]; then
133 SedExpr1="${SedExpr1}\n select BINUTILS_2_21_or_later"
134 elif [ \( ${ver_M} -eq 2 -a ${ver_m} -eq 20 \) ]; then
135 SedExpr1="${SedExpr1}\n select BINUTILS_2_20_or_later"
136 elif [ \( ${ver_M} -eq 2 -a ${ver_m} -eq 19 \) ]; then
137 SedExpr1="${SedExpr1}\n select BINUTILS_2_19_or_later"
138 elif [ \( ${ver_M} -eq 2 -a ${ver_m} -eq 18 \) ]; then
139 SedExpr1="${SedExpr1}\n select BINUTILS_2_18_or_later"
143 # Extract 'M'ajor and 'm'inor from version string
144 ver_M=$(getVersionField "${version}" _ 1)
145 ver_m=$(getVersionField "${version}" _ 2)
146 if [ \( ${ver_M} -eq 2 -a ${ver_m} -ge 16 \) ]; then
147 SedExpr1="${SedExpr1}\n select LIBC_EGLIBC_2_16_or_later"
151 # uClibc-0.9.30 and above need some love
152 ver_M=$(getVersionField "${version}" . 1)
153 ver_m=$(getVersionField "${version}" . 2)
154 ver_p=$(getVersionField "${version}" . 3)
155 if [ ${ver_M} -eq 0 -a ${ver_m} -eq 9 -a ${ver_p} -eq 30 \
156 -o ${ver_M} -eq 0 -a ${ver_m} -eq 9 -a ${ver_p} -eq 31 ]; then
157 SedExpr1="${SedExpr1}\n select LIBC_UCLIBC_0_9_30_or_later"
158 elif [ ${ver_M} -eq 0 -a ${ver_m} -eq 9 -a ${ver_p} -eq 32 ]; then
159 SedExpr1="${SedExpr1}\n select LIBC_UCLIBC_0_9_32_or_later"
163 # gdb-7.0 and above have special handling
164 ver_M=$(getVersionField "${version}" . 1)
165 if [ ${ver_M} -ge 7 ]; then
166 SedExpr1="${SedExpr1}\n select GDB_7_0_or_later"
170 SedExpr2=" default \"${version}\" if ${config_ver_option}"
171 "${sed}" -r -i -e 's/^(# CT_INSERT_VERSION_BELOW)$/\1\n\n'"${SedExpr1}"'/;' "${file}"
172 "${sed}" -r -i -e 's/^(# CT_INSERT_VERSION_STRING_BELOW)$/\1\n'"${SedExpr2}"'/;' "${file}"
182 if [ $# -eq 0 ]; then
187 while [ $# -gt 0 ]; do
190 --gcc) EXP=; OBS=; cat=CC; tool=gcc; tool_prefix=cc; dot2suffix=;;
191 --binutils) EXP=; OBS=; cat=BINUTILS; tool=binutils; tool_prefix=binutils; dot2suffix=;;
192 --glibc) EXP=; OBS=; cat=LIBC_GLIBC; tool=glibc; tool_prefix=libc; dot2suffix=;;
193 --eglibc) EXP=; OBS=; cat=LIBC_EGLIBC; tool=eglibc; tool_prefix=libc; dot2suffix=;;
194 --uClibc) EXP=; OBS=; cat=LIBC_UCLIBC; tool=uClibc; tool_prefix=libc; dot2suffix=;;
195 --newlib) EXP=; OBS=; cat=LIBC_NEWLIB; tool=newlib; tool_prefix=libc; dot2suffix=;;
196 --linux) EXP=; OBS=; cat=KERNEL; tool=linux; tool_prefix=kernel; dot2suffix=;;
197 --gdb) EXP=; OBS=; cat=GDB; tool=gdb; tool_prefix=debug; dot2suffix=;;
198 --dmalloc) EXP=; OBS=; cat=DMALLOC; tool=dmalloc; tool_prefix=debug; dot2suffix=;;
199 --duma) EXP=; OBS=; cat=DUMA; tool=duma; tool_prefix=debug; dot2suffix=;;
200 --strace) EXP=; OBS=; cat=STRACE; tool=strace; tool_prefix=debug; dot2suffix=;;
201 --ltrace) EXP=; OBS=; cat=LTRACE; tool=ltrace; tool_prefix=debug; dot2suffix=;;
202 --gmp) EXP=; OBS=; cat=GMP; tool=gmp; tool_prefix=companion_libs; dot2suffix=;;
203 --mpfr) EXP=; OBS=; cat=MPFR; tool=mpfr; tool_prefix=companion_libs; dot2suffix=;;
204 --ppl) EXP=; OBS=; cat=PPL; tool=ppl; tool_prefix=companion_libs; dot2suffix=;;
205 --cloog) EXP=; OBS=; cat=CLOOG; tool=cloog; tool_prefix=companion_libs; dot2suffix=;;
206 --mpc) EXP=; OBS=; cat=MPC; tool=mpc; tool_prefix=companion_libs; dot2suffix=;;
207 --libelf) EXP=; OBS=; cat=LIBELF; tool=libelf; tool_prefix=companion_libs; dot2suffix=;;
210 -x|--experimental|+s) EXP=1;;
211 -s|--stable|+x) EXP=;;
212 -o|--obsolete|+c) OBS=1;;
213 -c|--current|+o) OBS=;;
216 -h|--help) doHelp; exit 0;;
217 -*) echo "Unknown option: '$1' (use -h/--help for help)."; exit 1;;
220 *) [ -n "${tool}" ] || { doHelp; exit 1; }
221 file_base="config/${tool_prefix}/${tool}.in"
222 addToolVersion "$1" "${file_base}${dot2suffix}"