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

Diff of /eclass/libtool.eclass

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

Revision 1.43 Revision 1.49
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.43 2005/02/27 20:29:04 azarah Exp $ 3# $Header: /var/cvsroot/gentoo-x86/eclass/libtool.eclass,v 1.49 2005/07/06 20:23:20 agriffis 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=
71 local version=$(eval $(grep -e '^[[:space:]]*VERSION=' $1); echo "${VERSION}") 69 local version=$(eval $(grep -e '^[[:space:]]*VERSION=' $1); \
70 echo "${VERSION}")
72 71
73 if [[ -n $2 ]] ; then 72 if [[ -n $2 ]] ; then
74 if [[ -d ${ELT_PATCH_DIR}/$2 ]] ; then 73 if [[ -d ${ELT_PATCH_DIR}/$2 ]] ; then
75 patch_dir="${ELT_PATCH_DIR}/$2" 74 patch_dir="${ELT_PATCH_DIR}/$2"
76 else 75 else
77 return ${ret} 76 return ${ret}
78 fi 77 fi
79 78
80 # First check a version specific patch, if not check major.minor* 79 if [[ -z ${version} ]] ; then
81 for y in ${version} $(echo "${version}" | cut -d. -f1,2) ; do 80 eerror "Could not get VERSION for ${1##*/}!"
82 [[ -z ${y} ]] && continue 81 die "Could not get VERSION for ${1##*/}!"
82 fi
83
84 # Go through the patches in reverse order (large to small)
83 for x in $(ls -d "${patch_dir}/${y}"* 2> /dev/null) ; do 85 for x in $(ls -d "${patch_dir}"/* 2> /dev/null | sort -r) ; do
84 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
85 # For --remove-internal-dep ... 92 # For --remove-internal-dep ...
86 if [[ -n $3 ]] ; then 93 if [[ -n $3 ]] ; then
87 # For replace @REM_INT_DEP@ with what was passed 94 # For replace @REM_INT_DEP@ with what was passed
88 # to --remove-internal-dep 95 # to --remove-internal-dep
89 sed -e "s|@REM_INT_DEP@|$3|g" ${x} > \ 96 sed -e "s|@REM_INT_DEP@|$3|g" ${x} > \
90 ${T}/$$.rem_int_deps.patch 97 ${T}/$$.rem_int_deps.patch
91 98
92 x="${T}/$$.rem_int_deps.patch" 99 x="${T}/$$.rem_int_deps.patch"
93 fi
94
95 if ELT_try_and_apply_patch "$1" "${x}" ; then
96 ret=0
97 break
98 fi
99 fi 100 fi
100 done 101
102 if ELT_try_and_apply_patch "$1" "${x}" ; then
103 ret=0
104 break
105 fi
106 fi
101 done 107 done
102
103 # If still nothing, try the rest.
104 if [[ ${ret} -eq 1 ]]; then
105 for x in $(ls -d "${patch_dir}"/* 2> /dev/null) ; do
106 if [[ -n ${x} && -f ${x} ]] ; then
107 # For --remove-internal-dep ...
108 if [[ -n $3 ]] ; then
109 # For replace @REM_INT_DEP@ with what was passed
110 # to --remove-internal-dep
111 sed -e "s|@REM_INT_DEP@|$3|g" ${x} > \
112 ${T}/$$.rem_int_deps.patch
113
114 x="${T}/$$.rem_int_deps.patch"
115 fi
116
117 if ELT_try_and_apply_patch "$1" "${x}" ; then
118 ret=0
119 break
120 fi
121 fi
122 done
123 fi
124 fi 108 fi
125 109
126 return ${ret} 110 return ${ret}
127} 111}
128 112
239 echo 223 echo
240 eerror "Portage patch requested, but failed to apply!" 224 eerror "Portage patch requested, but failed to apply!"
241 die "Portage patch requested, but failed to apply!" 225 die "Portage patch requested, but failed to apply!"
242 fi 226 fi
243 else 227 else
244 ewarn " Could not apply portage.patch!" 228 if [[ -n $(grep 'We do not want portage' "${x}/ltmain.sh") ]] ; then
229 ewarn " Portage patch seems to be already applied."
245 ewarn " Please verify that it is not needed." 230 ewarn " Please verify that it is not needed."
231 else
232 local version=$( \
233 eval $(grep -e '^[[:space:]]*VERSION=' "${x}/ltmain.sh"); \
234 echo "${VERSION}")
235
236 echo
237 eerror "Portage patch failed to apply (ltmain.sh version ${version})!"
238 die "Portage patch failed to apply!"
239 fi
240 # We do not want to run libtoolize ...
241 ELT_APPLIED_PATCHES="portage"
246 fi 242 fi
247 ;; 243 ;;
248 esac 244 esac
249 fi 245 fi
250 246
252 if [[ ${do_portage} == "no" && \ 248 if [[ ${do_portage} == "no" && \
253 ${do_reversedeps} == "no" && \ 249 ${do_reversedeps} == "no" && \
254 ${do_only_patches} == "no" && \ 250 ${do_only_patches} == "no" && \
255 ${deptoremove} == "" ]] 251 ${deptoremove} == "" ]]
256 then 252 then
253 ewarn "Cannot apply any patches, please file a bug about this"
254 break
255
257 # Sometimes ltmain.sh is in a subdirectory ... 256 # Sometimes ltmain.sh is in a subdirectory ...
258 if [[ ! -f ${x}/configure.in && ! -f ${x}/configure.ac ]] ; then 257 if [[ ! -f ${x}/configure.in && ! -f ${x}/configure.ac ]] ; then
259 if [[ -f ${x}/../configure.in || -f ${x}/../configure.ac ]] ; then 258 if [[ -f ${x}/../configure.in || -f ${x}/../configure.ac ]] ; then
260 cd "${x}"/../ 259 cd "${x}"/../
261 fi 260 fi
262 fi 261 fi
263 262
264 if type -p libtoolize &> /dev/null ; then 263 if type -p libtoolize &> /dev/null ; then
265 ewarn "Cannot apply any patch, running libtoolize..." 264 ewarn "Cannot apply any patches, running libtoolize..."
266 libtoolize --copy --force 265 libtoolize --copy --force
267 fi 266 fi
268 cd "${x}" 267 cd "${x}"
269 break 268 break
270 fi 269 fi
343 eend $? "PLEASE CHECK ${x}" 342 eend $? "PLEASE CHECK ${x}"
344 ;; 343 ;;
345 esac 344 esac
346 done 345 done
347} 346}
347
348# char *VER_major(string)
349#
350# Return the Major (X of X.Y.Z) version
351#
352VER_major() {
353 [[ -z $1 ]] && return 1
354
355 local VER=$@
356 echo ${VER%%[^[:digit:]]*}
357}
358
359# char *VER_minor(string)
360#
361# Return the Minor (Y of X.Y.Z) version
362#
363VER_minor() {
364 [[ -z $1 ]] && return 1
365
366 local VER=$@
367 VER=${VER#*.}
368 echo ${VER%%[^[:digit:]]*}
369}
370
371# char *VER_micro(string)
372#
373# Return the Micro (Z of X.Y.Z) version.
374#
375VER_micro() {
376 [[ -z $1 ]] && return 1
377
378 local VER=$@
379 VER=${VER#*.*.}
380 echo ${VER%%[^[:digit:]]*}
381}
382
383# int VER_to_int(string)
384#
385# Convert a string type version (2.4.0) to an int (132096)
386# for easy compairing or versions ...
387#
388VER_to_int() {
389 [[ -z $1 ]] && return 1
390
391 local VER_MAJOR=$(VER_major "$1")
392 local VER_MINOR=$(VER_minor "$1")
393 local VER_MICRO=$(VER_micro "$1")
394 local VER_int=$(( VER_MAJOR * 65536 + VER_MINOR * 256 + VER_MICRO ))
395
396 # We make version 1.0.0 the minimum version we will handle as
397 # a sanity check ... if its less, we fail ...
398 if [[ ${VER_int} -ge 65536 ]] ; then
399 echo "${VER_int}"
400 return 0
401 fi
402
403 echo 1
404 return 1
405}

Legend:
Removed from v.1.43  
changed lines
  Added in v.1.49

  ViewVC Help
Powered by ViewVC 1.1.20