/[gentoo-x86]/eclass/libtool.eclass
Gentoo

Diff of /eclass/libtool.eclass

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

Revision 1.50 Revision 1.74
1# Copyright 1999-2005 Gentoo Foundation 1# Copyright 1999-2005 Gentoo Foundation
2# Distributed under the terms of the GNU General Public License v2 2# Distributed under the terms of the GNU General Public License v2
3# $Header: /var/cvsroot/gentoo-x86/eclass/libtool.eclass,v 1.50 2005/07/11 15:08:06 swegener Exp $ 3# $Header: /var/cvsroot/gentoo-x86/eclass/libtool.eclass,v 1.74 2007/03/01 18:48:02 grobian Exp $
4# 4#
5# Author: Martin Schlemmer <azarah@gentoo.org> 5# Author: Martin Schlemmer <azarah@gentoo.org>
6# 6#
7# This eclass patches ltmain.sh distributed with libtoolized packages with the 7# This eclass patches ltmain.sh distributed with libtoolized packages with the
8# relink and portage patch among others 8# relink and portage patch among others
18 18
19DESCRIPTION="Based on the ${ECLASS} eclass" 19DESCRIPTION="Based on the ${ECLASS} eclass"
20 20
21ELIBTOOL_VERSION="2.0.2" 21ELIBTOOL_VERSION="2.0.2"
22 22
23ELT_PATCH_DIR="${PORTDIR}/eclass/ELT-patches" 23ELT_PATCH_DIR="${ECLASSDIR}/ELT-patches"
24ELT_APPLIED_PATCHES= 24ELT_APPLIED_PATCHES=
25ELT_LTMAIN_SH=
25 26
26# 27#
27# Returns all the directories containing ltmain.sh 28# Returns all the directories containing ltmain.sh
28# 29#
29ELT_find_ltmain_sh() { 30ELT_find_ltmain_sh() {
40# 41#
41# See if we can apply $2 on $1, and if so, do it 42# See if we can apply $2 on $1, and if so, do it
42# 43#
43ELT_try_and_apply_patch() { 44ELT_try_and_apply_patch() {
44 local ret=0 45 local ret=0
46 local file=$1
45 local patch="$2" 47 local patch=$2
46 48
47 # We only support patchlevel of 0 - why worry if its static patches? 49 # We only support patchlevel of 0 - why worry if its static patches?
48 if patch -p0 --dry-run $1 < ${patch} &> ${T}/elibtool.log ; then 50 if patch -p0 --dry-run "${file}" "${patch}" &> "${T}/elibtool.log" ; then
49 einfo " Applying $(basename "$(dirname "${patch}")")-${patch##*/}.patch ..." 51 einfo " Applying $(basename "$(dirname "${patch}")")-${patch##*/}.patch ..."
50 patch -p0 $1 < ${patch} &>${T}/elibtool.log 52 patch -p0 -g0 --no-backup-if-mismatch "${file}" "${patch}" \
53 &> "${T}/elibtool.log"
51 ret=$? 54 ret=$?
52 export ELT_APPLIED_PATCHES="${ELT_APPLIED_PATCHES} ${patch##*/}" 55 export ELT_APPLIED_PATCHES="${ELT_APPLIED_PATCHES} ${patch##*/}"
53 else 56 else
54 ret=1 57 ret=1
55 fi 58 fi
56 59
57 return ${ret} 60 return "${ret}"
61}
62
63#
64# Get string version of ltmain.sh or ltconfig (passed as $1)
65#
66ELT_libtool_version() {
67 local ltmain_sh=$1
68 local version=
69
70 version=$(eval $(grep -e '^[[:space:]]*VERSION=' "${ltmain_sh}"); \
71 echo "${VERSION}")
72 [[ -z ${version} ]] && version="0"
73
74 echo "${version}"
58} 75}
59 76
60# 77#
61# Run through the patches in $2 and see if any 78# Run through the patches in $2 and see if any
62# apply to $1 ... 79# apply to $1 ...
63# 80#
64ELT_walk_patches() { 81ELT_walk_patches() {
65 local x= 82 local x=
66 local y= 83 local y=
67 local ret=1 84 local ret=1
85 local file=$1
86 local patch_set=$2
68 local patch_dir= 87 local patch_dir=
69 local version=$(eval $(grep -e '^[[:space:]]*VERSION=' $1); \ 88 local rem_int_dep=$3
70 echo "${VERSION}")
71 89
72 if [[ -n $2 ]] ; then 90 if [[ -n ${patch_set} ]] ; then
73 if [[ -d ${ELT_PATCH_DIR}/$2 ]] ; then 91 if [[ -d ${ELT_PATCH_DIR}/${patch_set} ]] ; then
74 patch_dir="${ELT_PATCH_DIR}/$2" 92 patch_dir="${ELT_PATCH_DIR}/${patch_set}"
75 else 93 else
76 return ${ret} 94 return "${ret}"
77 fi 95 fi
78 96
79 if [[ -z ${version} ]] ; then
80 eerror "Could not get VERSION for ${1##*/}!"
81 die "Could not get VERSION for ${1##*/}!"
82 fi
83
84 # Go through the patches in reverse order (large to small) 97 # Go through the patches in reverse order (large to small)
85 for x in $(ls -d "${patch_dir}"/* 2> /dev/null | sort -r) ; do 98 for x in $(ls -d "${patch_dir}"/* 2> /dev/null | grep -v 'CVS' | sort -r) ; do
86 if [[ -n ${x} && -f ${x} ]] ; then 99 if [[ -n ${x} && -f ${x} ]] ; then
87 local ltver=$(VER_to_int "${version}")
88 local ptver=$(VER_to_int "${x##*/}")
89
90 # If libtool version smaller than patch version, skip patch.
91 [[ ${ltver} -lt ${ptver} ]] && continue
92 # For --remove-internal-dep ... 100 # For --remove-internal-dep ...
93 if [[ -n $3 ]] ; then 101 if [[ -n ${rem_int_dep} ]] ; then
94 # For replace @REM_INT_DEP@ with what was passed 102 # For replace @REM_INT_DEP@ with what was passed
95 # to --remove-internal-dep 103 # to --remove-internal-dep
96 sed -e "s|@REM_INT_DEP@|$3|g" ${x} > \ 104 sed -e "s|@REM_INT_DEP@|${rem_int_dep}|g" ${x} > \
97 ${T}/$$.rem_int_deps.patch 105 "${T}/$$.rem_int_deps.patch"
98 106
99 x="${T}/$$.rem_int_deps.patch" 107 x="${T}/$$.rem_int_deps.patch"
100 fi 108 fi
101 109
102 if ELT_try_and_apply_patch "$1" "${x}" ; then 110 if ELT_try_and_apply_patch "${file}" "${x}" ; then
103 ret=0 111 ret=0
104 break 112 break
105 fi 113 fi
106 fi 114 fi
107 done 115 done
108 fi 116 fi
109 117
110 return ${ret} 118 return "${ret}"
111} 119}
112 120
113elibtoolize() { 121elibtoolize() {
114 local x= 122 local x=
115 local y= 123 local y=
116 local do_portage="no" 124 local do_portage="no"
117 local do_reversedeps="no" 125 local do_reversedeps="no"
118 local do_only_patches="no" 126 local do_only_patches="no"
127 local do_uclibc="yes"
119 local deptoremove= 128 local deptoremove=
120 local my_dirlist= 129 local my_dirlist=
121 local elt_patches="portage relink max_cmd_len sed test tmp" 130 local elt_patches="portage relink max_cmd_len sed test tmp"
122 local start_dir="${PWD}" 131 local start_dir=${PWD}
123 132
124 my_dirlist="$(ELT_find_ltmain_sh)" 133 my_dirlist=$(ELT_find_ltmain_sh)
125 134
126 for x in "$@" ; do 135 for x in "$@" ; do
127 case "${x}" in 136 case "${x}" in
128 "--portage") 137 "--portage")
129 # Only apply portage patch, and don't 138 # Only apply portage patch, and don't
141 do_only_patches="yes" 150 do_only_patches="yes"
142 ;; 151 ;;
143 "^--remove-internal-dep="*) 152 "^--remove-internal-dep="*)
144 # We will replace @REM_INT_DEP@ with what is needed 153 # We will replace @REM_INT_DEP@ with what is needed
145 # in ELT_walk_patches() ... 154 # in ELT_walk_patches() ...
146 deptoremove="$(echo "${x}" | sed -e 's|--remove-internal-dep=||')" 155 deptoremove=$(echo "${x}" | sed -e 's|--remove-internal-dep=||')
147 156
148 # Add the patch for this ... 157 # Add the patch for this ...
149 [ -n "${deptoremove}" ] && elt_patches="${elt_patches} rem-int-dep" 158 [[ -n ${deptoremove} ]] && elt_patches="${elt_patches} rem-int-dep"
150 ;; 159 ;;
151 "--shallow") 160 "--shallow")
152 # Only patch the ltmain.sh in ${S} 161 # Only patch the ltmain.sh in ${S}
153 if [ -f "${S}/ltmain.sh" ] 162 if [[ -f ${S}/ltmain.sh ]] ; then
154 then
155 my_dirlist="${S}" 163 my_dirlist=${S}
156 else 164 else
157 my_dirlist= 165 my_dirlist=
158 fi 166 fi
159 ;; 167 ;;
160 "--no-uclibc") 168 "--no-uclibc")
161 NO_UCLIBCTOOLIZE=1 169 do_uclibc="no"
162 ;; 170 ;;
163 *) 171 *)
164 eerror "Invalid elibtoolize option: $x" 172 eerror "Invalid elibtoolize option: ${x}"
165 die "elibtoolize called with $x ??" 173 die "elibtoolize called with ${x} ??"
166 esac 174 esac
167 done 175 done
168 176
169 if use ppc-macos ; then 177 [[ ${do_uclibc} == "yes" ]] && \
170 glibtoolize --copy --force 178 elt_patches="${elt_patches} uclibc-conf uclibc-ltconf"
171 darwintoolize 179
172 fi 180 [[ ${CHOST} == *"-freebsd"* ]] && \
181 elt_patches="${elt_patches} fbsd-conf fbsd-ltconf"
182
183 [[ ${CHOST} == *"-darwin"* ]] && \
184 elt_patches="${elt_patches} darwin-ltconf darwin-ltmain"
173 185
174 for x in ${my_dirlist} ; do 186 for x in ${my_dirlist} ; do
175 local tmp=$(echo "${x}" | sed -e "s|${S}||") 187 local tmp=$(echo "${x}" | sed -e "s|${WORKDIR}||")
176 export ELT_APPLIED_PATCHES= 188 export ELT_APPLIED_PATCHES=
189 export ELT_LTMAIN_SH="${x}/ltmain.sh"
190
191 [[ -f ${x}/.elibtoolized ]] && continue
177 192
178 cd ${x} 193 cd ${x}
179 einfo "Patching \${S}$(echo "/${tmp}/ltmain.sh" | sed -e 's|//|/|g') ..." 194 einfo "Running elibtoolize in: $(echo "/${tmp}" | sed -e 's|//|/|g; s|^/||')"
180 195
181 for y in ${elt_patches} ; do 196 for y in ${elt_patches} ; do
182 local ret=0 197 local ret=0
183 198
184 case "${y}" in 199 case "${y}" in
200 "portage")
201 # Stupid test to see if its already applied ...
202 if [[ -z $(grep 'We do not want portage' "${x}/ltmain.sh") ]] ; then
203 ELT_walk_patches "${x}/ltmain.sh" "${y}"
204 ret=$?
205 fi
206 ;;
185 "rem-int-dep") 207 "rem-int-dep")
186 ELT_walk_patches "${x}/ltmain.sh" "${y}" "${deptoremove}" 208 ELT_walk_patches "${x}/ltmain.sh" "${y}" "${deptoremove}"
187 ret=$? 209 ret=$?
188 ;; 210 ;;
189 "fix-relink") 211 "fix-relink")
198 if [[ -n $(grep 'max_cmd_len' "${x}/ltmain.sh") ]] ; then 220 if [[ -n $(grep 'max_cmd_len' "${x}/ltmain.sh") ]] ; then
199 ELT_walk_patches "${x}/ltmain.sh" "${y}" 221 ELT_walk_patches "${x}/ltmain.sh" "${y}"
200 ret=$? 222 ret=$?
201 fi 223 fi
202 ;; 224 ;;
225 "uclibc-conf")
226 if [[ -e ${x}/configure && \
227 -n $(grep 'Transform linux' "${x}/configure") ]] ; then
228 ELT_walk_patches "${x}/configure" "${y}"
229 ret=$?
230 # ltmain.sh and co might be in a subdirectory ...
231 elif [[ ! -e ${x}/configure && -e ${x}/../configure && \
232 -n $(grep 'Transform linux' "${x}/../configure") ]] ; then
233 ELT_walk_patches "${x}/../configure" "${y}"
234 ret=$?
235 fi
236 ;;
237 "uclibc-ltconf")
238 # Newer libtoolize clears ltconfig, as not used anymore
239 if [[ -s ${x}/ltconfig ]] ; then
240 ELT_walk_patches "${x}/ltconfig" "${y}"
241 ret=$?
242 fi
243 ;;
244 "fbsd-conf")
245 if [[ -e ${x}/configure && \
246 -n $(grep 'version_type=freebsd-' "${x}/configure") ]] ; then
247 ELT_walk_patches "${x}/configure" "${y}"
248 ret=$?
249 # ltmain.sh and co might be in a subdirectory ...
250 elif [[ ! -e ${x}/configure && -e ${x}/../configure && \
251 -n $(grep 'version_type=freebsd-' "${x}/../configure") ]] ; then
252 ELT_walk_patches "${x}/../configure" "${y}"
253 ret=$?
254 fi
255 ;;
256 "fbsd-ltconf")
257 if [[ -s ${x}/ltconfig ]] ; then
258 ELT_walk_patches "${x}/ltconfig" "${y}"
259 ret=$?
260 fi
261 ;;
262 "darwin-ltconf")
263 # Newer libtoolize clears ltconfig, as not used anymore
264 if [[ -s ${x}/ltconfig ]] ; then
265 ELT_walk_patches "${x}/ltconfig" "${y}"
266 ret=$?
267 fi
268 ;;
203 *) 269 *)
204 ELT_walk_patches "${x}/ltmain.sh" "${y}" 270 ELT_walk_patches "${x}/ltmain.sh" "${y}"
205 ret=$? 271 ret=$?
206 ;; 272 ;;
207 esac 273 esac
208 274
209 if [[ ${ret} -ne 0 ]] ; then 275 if [[ ${ret} -ne 0 ]] ; then
210 case ${y} in 276 case ${y} in
211 "relink") 277 "relink")
278 local version=$(ELT_libtool_version "${x}/ltmain.sh")
212 # Critical patch, but could be applied ... 279 # Critical patch, but could be applied ...
280 # FIXME: Still need a patch for ltmain.sh > 1.4.0
213 if [[ -z $(grep 'inst_prefix_dir' "${x}/ltmain.sh") ]] ; then 281 if [[ -z $(grep 'inst_prefix_dir' "${x}/ltmain.sh") && \
282 $(VER_to_int "${version}") -ge $(VER_to_int "1.4.0") ]] ; then
214 ewarn " Could not apply relink.patch!" 283 ewarn " Could not apply relink.patch!"
215 fi 284 fi
216 ;; 285 ;;
217 "portage") 286 "portage")
218 # Critical patch - for this one we abort, as it can really 287 # Critical patch - for this one we abort, as it can really
220 if [[ ${do_portage} == "yes" ]] ; then 289 if [[ ${do_portage} == "yes" ]] ; then
221 # Stupid test to see if its already applied ... 290 # Stupid test to see if its already applied ...
222 if [[ -z $(grep 'We do not want portage' "${x}/ltmain.sh") ]] ; then 291 if [[ -z $(grep 'We do not want portage' "${x}/ltmain.sh") ]] ; then
223 echo 292 echo
224 eerror "Portage patch requested, but failed to apply!" 293 eerror "Portage patch requested, but failed to apply!"
294 eerror "Please bug azarah or vapier to add proper patch."
225 die "Portage patch requested, but failed to apply!" 295 die "Portage patch requested, but failed to apply!"
226 fi 296 fi
227 else 297 else
228 if [[ -n $(grep 'We do not want portage' "${x}/ltmain.sh") ]] ; then 298 if [[ -n $(grep 'We do not want portage' "${x}/ltmain.sh") ]] ; then
229 ewarn " Portage patch seems to be already applied." 299 # ewarn " Portage patch seems to be already applied."
230 ewarn " Please verify that it is not needed." 300 # ewarn " Please verify that it is not needed."
301 :
231 else 302 else
232 local version=$( \ 303 local version=$( \
233 eval $(grep -e '^[[:space:]]*VERSION=' "${x}/ltmain.sh"); \ 304 eval $(grep -e '^[[:space:]]*VERSION=' "${x}/ltmain.sh"); \
234 echo "${VERSION}") 305 echo "${VERSION}")
235 306
236 echo 307 echo
237 eerror "Portage patch failed to apply (ltmain.sh version ${version})!" 308 eerror "Portage patch failed to apply (ltmain.sh version ${version})!"
309 eerror "Please bug azarah or vapier to add proper patch."
238 die "Portage patch failed to apply!" 310 die "Portage patch failed to apply!"
239 fi 311 fi
240 # We do not want to run libtoolize ... 312 # We do not want to run libtoolize ...
241 ELT_APPLIED_PATCHES="portage" 313 ELT_APPLIED_PATCHES="portage"
242 fi 314 fi
243 ;; 315 ;;
316 "uclibc-"*)
317 [[ ${CHOST} == *"-uclibc" ]] && \
318 ewarn " uClibc patch set '${y}' failed to apply!"
319 ;;
320 "fbsd-"*)
321 if [[ ${CHOST} == *"-freebsd"* ]] ; then
322 if [[ -z $(grep 'Handle Gentoo/FreeBSD as it was Linux' \
323 "${x}/configure" "${x}/../configure" 2>/dev/null) ]]; then
324 eerror " FreeBSD patch set '${y}' failed to apply!"
325 die "FreeBSD patch set '${y}' failed to apply!"
326 fi
327 fi
328 ;;
329 "darwin-"*)
330 [[ ${CHOST} == *"-darwin"* ]] && \
331 ewarn " Darwin patch set '${y}' failed to apply!"
332 ;;
244 esac 333 esac
245 fi 334 fi
335 done
246 336
247 if [[ -z ${ELT_APPLIED_PATCHES} ]] ; then 337 if [[ -z ${ELT_APPLIED_PATCHES} ]] ; then
248 if [[ ${do_portage} == "no" && \ 338 if [[ ${do_portage} == "no" && \
249 ${do_reversedeps} == "no" && \ 339 ${do_reversedeps} == "no" && \
250 ${do_only_patches} == "no" && \ 340 ${do_only_patches} == "no" && \
251 ${deptoremove} == "" ]] 341 ${deptoremove} == "" ]]
252 then 342 then
253 ewarn "Cannot apply any patches, please file a bug about this" 343 ewarn "Cannot apply any patches, please file a bug about this"
254 break 344 break
255 345
256 # Sometimes ltmain.sh is in a subdirectory ... 346 # Sometimes ltmain.sh is in a subdirectory ...
257 if [[ ! -f ${x}/configure.in && ! -f ${x}/configure.ac ]] ; then 347 if [[ ! -f ${x}/configure.in && ! -f ${x}/configure.ac ]] ; then
258 if [[ -f ${x}/../configure.in || -f ${x}/../configure.ac ]] ; then 348 if [[ -f ${x}/../configure.in || -f ${x}/../configure.ac ]] ; then
259 cd "${x}"/../ 349 cd "${x}"/../
260 fi 350 fi
261 fi
262
263 if type -p libtoolize &> /dev/null ; then
264 ewarn "Cannot apply any patches, running libtoolize..."
265 libtoolize --copy --force
266 fi
267 cd "${x}"
268 break
269 fi 351 fi
352
353 if type -p libtoolize &> /dev/null ; then
354 ewarn "Cannot apply any patches, running libtoolize..."
355 libtoolize --copy --force
356 fi
357 cd "${x}"
358 break
270 fi 359 fi
271 done 360 fi
361
362 [[ -f ${x}/libtool ]] && rm -f "${x}/libtool"
363
364 touch "${x}/.elibtoolized"
272 done 365 done
273 366
274 if [[ -f libtool ]] ; then
275 rm -f libtool
276 fi
277
278 cd "${start_dir}" 367 cd "${start_dir}"
279
280 uclibctoolize
281} 368}
282 369
283uclibctoolize() { 370uclibctoolize() {
284 [[ -n ${NO_UCLIBCTOOLIZE} ]] && return 0 371 ewarn "uclibctoolize() is depreciated, please just use elibtoolize()!"
285 372 elibtoolize
286 local errmsg=""
287 [[ ${CTARGET:-${CHOST}} == *-uclibc ]] \
288 && errmsg="PLEASE CHECK" \
289 || errmsg="Already patched"
290 local targets=""
291 local x
292
293 if [[ -z $* ]] ; then
294 targets=$(find ${S} -name configure -o -name ltconfig)
295 fi
296
297 einfo "Applying uClibc/libtool patches ..."
298 for x in ${targets} ; do
299 [[ ! -s ${x} ]] && continue
300 case ${x##*/} in
301 configure)
302 if grep 'Transform linux' "${x}" > /dev/null ; then
303 ebegin " Fixing \${S}${x/${S}}"
304 patch -p0 "${x}" "${ELT_PATCH_DIR}/uclibc/configure.patch" > /dev/null
305 eend $? "${errmsg} ${x}"
306 fi
307 ;;
308
309 ltconfig)
310 local ver=$(grep '^VERSION=' ${x})
311 ver=${ver/VERSION=}
312 [[ ${ver:0:3} == "1.4" ]] && ver="1.3" # 1.4 and 1.3 are compat
313 ebegin " Fixing \${S}${x/${S}}"
314 patch -p0 "${x}" "${ELT_PATCH_DIR}/uclibc/ltconfig-${ver:0:3}.patch" > /dev/null
315 eend $? "${errmsg} ${x}"
316 ;;
317 esac
318 done
319} 373}
320 374
321darwintoolize() { 375darwintoolize() {
322 local targets="" 376 ewarn "darwintoolize() is depreciated, please just use elibtoolize()!"
323 local x 377 elibtoolize
324
325 if [[ -z $* ]] ; then
326 targets=$(find ${S} -name ltmain.sh -o -name ltconfig)
327 fi
328
329 einfo "Applying Darwin/libtool patches ..."
330 for x in ${targets} ; do
331 [[ ! -s ${x} ]] && continue
332 case ${x##*/} in
333 ltmain.sh|ltconfig)
334 local ver=$(grep '^VERSION=' ${x})
335 ver=${ver/VERSION=}
336 if [[ ${ver:0:3} == "1.4" || ${ver:0:3} == "1.5" ]] ; then
337 ver="1.3" # 1.4, 1.5 and 1.3 are compat
338 fi
339
340 ebegin " Fixing \${S}${x/${S}}"
341 patch -p0 "${x}" "${ELT_PATCH_DIR}/darwin/${x##*/}-${ver:0:3}.patch" > /dev/null
342 eend $? "PLEASE CHECK ${x}"
343 ;;
344 esac
345 done
346} 378}
347 379
348# char *VER_major(string) 380# char *VER_major(string)
349# 381#
350# Return the Major (X of X.Y.Z) version 382# Return the Major (X of X.Y.Z) version
351# 383#
352VER_major() { 384VER_major() {
353 [[ -z $1 ]] && return 1 385 [[ -z $1 ]] && return 1
354 386
355 local VER=$@ 387 local VER=$@
356 echo ${VER%%[^[:digit:]]*} 388 echo "${VER%%[^[:digit:]]*}"
357} 389}
358 390
359# char *VER_minor(string) 391# char *VER_minor(string)
360# 392#
361# Return the Minor (Y of X.Y.Z) version 393# Return the Minor (Y of X.Y.Z) version
363VER_minor() { 395VER_minor() {
364 [[ -z $1 ]] && return 1 396 [[ -z $1 ]] && return 1
365 397
366 local VER=$@ 398 local VER=$@
367 VER=${VER#*.} 399 VER=${VER#*.}
368 echo ${VER%%[^[:digit:]]*} 400 echo "${VER%%[^[:digit:]]*}"
369} 401}
370 402
371# char *VER_micro(string) 403# char *VER_micro(string)
372# 404#
373# Return the Micro (Z of X.Y.Z) version. 405# Return the Micro (Z of X.Y.Z) version.
375VER_micro() { 407VER_micro() {
376 [[ -z $1 ]] && return 1 408 [[ -z $1 ]] && return 1
377 409
378 local VER=$@ 410 local VER=$@
379 VER=${VER#*.*.} 411 VER=${VER#*.*.}
380 echo ${VER%%[^[:digit:]]*} 412 echo "${VER%%[^[:digit:]]*}"
381} 413}
382 414
383# int VER_to_int(string) 415# int VER_to_int(string)
384# 416#
385# Convert a string type version (2.4.0) to an int (132096) 417# Convert a string type version (2.4.0) to an int (132096)

Legend:
Removed from v.1.50  
changed lines
  Added in v.1.74

  ViewVC Help
Powered by ViewVC 1.1.20