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

Diff of /eclass/libtool.eclass

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

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

Legend:
Removed from v.1.51  
changed lines
  Added in v.1.77

  ViewVC Help
Powered by ViewVC 1.1.20