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

Diff of /eclass/libtool.eclass

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

Revision 1.42 Revision 1.52
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.42 2005/01/31 03:02:13 vapier Exp $ 3# $Header: /var/cvsroot/gentoo-x86/eclass/libtool.eclass,v 1.52 2005/09/02 10:02:50 azarah 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
9 9
10ECLASS="libtool"
11INHERITED="${INHERITED} ${ECLASS}"
12 10
13# 2004.09.25 rac 11# 2004.09.25 rac
14# i have verified that at least one package can use this eclass and 12# i have verified that at least one package can use this eclass and
15# build properly even without libtool installed yet, probably using 13# build properly even without libtool installed yet, probably using
16# the files in the distribution. eliminating this dependency fixes 14# the files in the distribution. eliminating this dependency fixes
18# stageballs <3. if anybody decides to revert this, please attempt 16# stageballs <3. if anybody decides to revert this, please attempt
19# to find an alternate way of resolving that bug at the same time. 17# to find an alternate way of resolving that bug at the same time.
20 18
21DESCRIPTION="Based on the ${ECLASS} eclass" 19DESCRIPTION="Based on the ${ECLASS} eclass"
22 20
23ELIBTOOL_VERSION="2.0.1" 21ELIBTOOL_VERSION="2.0.2"
24 22
25ELT_PATCH_DIR="${PORTDIR}/eclass/ELT-patches" 23ELT_PATCH_DIR="${PORTDIR}/eclass/ELT-patches"
26ELT_APPLIED_PATCHES= 24ELT_APPLIED_PATCHES=
27 25
28# 26#
66ELT_walk_patches() { 64ELT_walk_patches() {
67 local x= 65 local x=
68 local y= 66 local y=
69 local ret=1 67 local ret=1
70 local patch_dir= 68 local patch_dir=
69 local version=$(eval $(grep -e '^[[:space:]]*VERSION=' $1); \
70 echo "${VERSION}")
71 71
72 if [[ -n $2 ]] ; then 72 if [[ -n $2 ]] ; then
73 if [[ -d ${ELT_PATCH_DIR}/$2 ]] ; then 73 if [[ -d ${ELT_PATCH_DIR}/$2 ]] ; then
74 patch_dir="${ELT_PATCH_DIR}/$2" 74 patch_dir="${ELT_PATCH_DIR}/$2"
75 else 75 else
76 return ${ret} 76 return ${ret}
77 fi 77 fi
78 78
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)
79 for x in $(ls -d "${patch_dir}"/* 2> /dev/null) ; do 85 for x in $(ls -d "${patch_dir}"/* 2> /dev/null | sort -r) ; do
80 if [[ -n ${x} && -f ${x} ]] ; then 86 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
81 # For --remove-internal-dep ... 92 # For --remove-internal-dep ...
82 if [[ -n $3 ]] ; then 93 if [[ -n $3 ]] ; then
83 # For replace @REM_INT_DEP@ with what was passed 94 # For replace @REM_INT_DEP@ with what was passed
84 # to --remove-internal-dep 95 # to --remove-internal-dep
85 sed -e "s|@REM_INT_DEP@|$3|g" ${x} > \ 96 sed -e "s|@REM_INT_DEP@|$3|g" ${x} > \
154 die "elibtoolize called with $x ??" 165 die "elibtoolize called with $x ??"
155 esac 166 esac
156 done 167 done
157 168
158 if use ppc-macos ; then 169 if use ppc-macos ; then
170 local opts
171 [[ -f Makefile.am ]] && opts="--automake"
159 glibtoolize --copy --force 172 glibtoolize --copy --force ${opts}
160 darwintoolize 173 darwintoolize
161 fi 174 fi
162 175
163 for x in ${my_dirlist} ; do 176 for x in ${my_dirlist} ; do
164 local tmp=$(echo "${x}" | sed -e "s|${S}||") 177 local tmp=$(echo "${x}" | sed -e "s|${WORKDIR}||")
165 export ELT_APPLIED_PATCHES= 178 export ELT_APPLIED_PATCHES=
166 179
180 [[ -f ${x}/.elibtoolized ]] && continue
181
167 cd ${x} 182 cd ${x}
168 einfo "Patching \${S}$(echo "/${tmp}/ltmain.sh" | sed -e 's|//|/|g') ..." 183 einfo "Running elibtoolize in: $(echo "/${tmp}" | sed -e 's|//|/|g; s|^/||')"
169 184
170 for y in ${elt_patches} ; do 185 for y in ${elt_patches} ; do
171 local ret=0 186 local ret=0
172 187
173 case "${y}" in 188 case "${y}" in
212 echo 227 echo
213 eerror "Portage patch requested, but failed to apply!" 228 eerror "Portage patch requested, but failed to apply!"
214 die "Portage patch requested, but failed to apply!" 229 die "Portage patch requested, but failed to apply!"
215 fi 230 fi
216 else 231 else
217 ewarn " Could not apply portage.patch!" 232 if [[ -n $(grep 'We do not want portage' "${x}/ltmain.sh") ]] ; then
233 # ewarn " Portage patch seems to be already applied."
218 ewarn " Please verify that it is not needed." 234 # ewarn " Please verify that it is not needed."
235 :
236 else
237 local version=$( \
238 eval $(grep -e '^[[:space:]]*VERSION=' "${x}/ltmain.sh"); \
239 echo "${VERSION}")
240
241 echo
242 eerror "Portage patch failed to apply (ltmain.sh version ${version})!"
243 die "Portage patch failed to apply!"
244 fi
245 # We do not want to run libtoolize ...
246 ELT_APPLIED_PATCHES="portage"
219 fi 247 fi
220 ;; 248 ;;
221 esac 249 esac
222 fi 250 fi
251 done
223 252
224 if [[ -z ${ELT_APPLIED_PATCHES} ]] ; then 253 if [[ -z ${ELT_APPLIED_PATCHES} ]] ; then
225 if [[ ${do_portage} == "no" && \ 254 if [[ ${do_portage} == "no" && \
226 ${do_reversedeps} == "no" && \ 255 ${do_reversedeps} == "no" && \
227 ${do_only_patches} == "no" && \ 256 ${do_only_patches} == "no" && \
228 ${deptoremove} == "" ]] 257 ${deptoremove} == "" ]]
229 then 258 then
259 ewarn "Cannot apply any patches, please file a bug about this"
260 break
261
230 # Sometimes ltmain.sh is in a subdirectory ... 262 # Sometimes ltmain.sh is in a subdirectory ...
231 if [[ ! -f ${x}/configure.in && ! -f ${x}/configure.ac ]] ; then 263 if [[ ! -f ${x}/configure.in && ! -f ${x}/configure.ac ]] ; then
232 if [[ -f ${x}/../configure.in || -f ${x}/../configure.ac ]] ; then 264 if [[ -f ${x}/../configure.in || -f ${x}/../configure.ac ]] ; then
233 cd "${x}"/../ 265 cd "${x}"/../
234 fi
235 fi 266 fi
236
237 if type -p libtoolize &> /dev/null ; then
238 ewarn "Cannot apply any patch, running libtoolize..."
239 libtoolize --copy --force
240 fi
241 cd "${x}"
242 break
243 fi 267 fi
268
269 if type -p libtoolize &> /dev/null ; then
270 ewarn "Cannot apply any patches, running libtoolize..."
271 libtoolize --copy --force
272 fi
273 cd "${x}"
274 break
244 fi 275 fi
245 done 276 fi
277
278 [[ -f ${x}/libtool ]] && rm -f "${x}/libtool"
279
280 touch "${x}/.elibtoolized"
246 done 281 done
247
248 if [[ -f libtool ]] ; then
249 rm -f libtool
250 fi
251 282
252 cd "${start_dir}" 283 cd "${start_dir}"
253 284
254 uclibctoolize 285 uclibctoolize
255} 286}
316 eend $? "PLEASE CHECK ${x}" 347 eend $? "PLEASE CHECK ${x}"
317 ;; 348 ;;
318 esac 349 esac
319 done 350 done
320} 351}
352
353# char *VER_major(string)
354#
355# Return the Major (X of X.Y.Z) version
356#
357VER_major() {
358 [[ -z $1 ]] && return 1
359
360 local VER=$@
361 echo ${VER%%[^[:digit:]]*}
362}
363
364# char *VER_minor(string)
365#
366# Return the Minor (Y of X.Y.Z) version
367#
368VER_minor() {
369 [[ -z $1 ]] && return 1
370
371 local VER=$@
372 VER=${VER#*.}
373 echo ${VER%%[^[:digit:]]*}
374}
375
376# char *VER_micro(string)
377#
378# Return the Micro (Z of X.Y.Z) version.
379#
380VER_micro() {
381 [[ -z $1 ]] && return 1
382
383 local VER=$@
384 VER=${VER#*.*.}
385 echo ${VER%%[^[:digit:]]*}
386}
387
388# int VER_to_int(string)
389#
390# Convert a string type version (2.4.0) to an int (132096)
391# for easy compairing or versions ...
392#
393VER_to_int() {
394 [[ -z $1 ]] && return 1
395
396 local VER_MAJOR=$(VER_major "$1")
397 local VER_MINOR=$(VER_minor "$1")
398 local VER_MICRO=$(VER_micro "$1")
399 local VER_int=$(( VER_MAJOR * 65536 + VER_MINOR * 256 + VER_MICRO ))
400
401 # We make version 1.0.0 the minimum version we will handle as
402 # a sanity check ... if its less, we fail ...
403 if [[ ${VER_int} -ge 65536 ]] ; then
404 echo "${VER_int}"
405 return 0
406 fi
407
408 echo 1
409 return 1
410}

Legend:
Removed from v.1.42  
changed lines
  Added in v.1.52

  ViewVC Help
Powered by ViewVC 1.1.20