/[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.51
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.51 2005/09/02 09:35:17 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
167 cd ${x} 180 cd ${x}
168 einfo "Patching \${S}$(echo "/${tmp}/ltmain.sh" | sed -e 's|//|/|g') ..." 181 einfo "Running elibtoolize in: $(echo "/${tmp}" | sed -e 's|//|/|g; s|^/||')"
169 182
170 for y in ${elt_patches} ; do 183 for y in ${elt_patches} ; do
171 local ret=0 184 local ret=0
172 185
173 case "${y}" in 186 case "${y}" in
212 echo 225 echo
213 eerror "Portage patch requested, but failed to apply!" 226 eerror "Portage patch requested, but failed to apply!"
214 die "Portage patch requested, but failed to apply!" 227 die "Portage patch requested, but failed to apply!"
215 fi 228 fi
216 else 229 else
217 ewarn " Could not apply portage.patch!" 230 if [[ -n $(grep 'We do not want portage' "${x}/ltmain.sh") ]] ; then
231 # ewarn " Portage patch seems to be already applied."
218 ewarn " Please verify that it is not needed." 232 # ewarn " Please verify that it is not needed."
233 :
234 else
235 local version=$( \
236 eval $(grep -e '^[[:space:]]*VERSION=' "${x}/ltmain.sh"); \
237 echo "${VERSION}")
238
239 echo
240 eerror "Portage patch failed to apply (ltmain.sh version ${version})!"
241 die "Portage patch failed to apply!"
242 fi
243 # We do not want to run libtoolize ...
244 ELT_APPLIED_PATCHES="portage"
219 fi 245 fi
220 ;; 246 ;;
221 esac 247 esac
222 fi 248 fi
223 249
225 if [[ ${do_portage} == "no" && \ 251 if [[ ${do_portage} == "no" && \
226 ${do_reversedeps} == "no" && \ 252 ${do_reversedeps} == "no" && \
227 ${do_only_patches} == "no" && \ 253 ${do_only_patches} == "no" && \
228 ${deptoremove} == "" ]] 254 ${deptoremove} == "" ]]
229 then 255 then
256 ewarn "Cannot apply any patches, please file a bug about this"
257 break
258
230 # Sometimes ltmain.sh is in a subdirectory ... 259 # Sometimes ltmain.sh is in a subdirectory ...
231 if [[ ! -f ${x}/configure.in && ! -f ${x}/configure.ac ]] ; then 260 if [[ ! -f ${x}/configure.in && ! -f ${x}/configure.ac ]] ; then
232 if [[ -f ${x}/../configure.in || -f ${x}/../configure.ac ]] ; then 261 if [[ -f ${x}/../configure.in || -f ${x}/../configure.ac ]] ; then
233 cd "${x}"/../ 262 cd "${x}"/../
234 fi 263 fi
235 fi 264 fi
236 265
237 if type -p libtoolize &> /dev/null ; then 266 if type -p libtoolize &> /dev/null ; then
238 ewarn "Cannot apply any patch, running libtoolize..." 267 ewarn "Cannot apply any patches, running libtoolize..."
239 libtoolize --copy --force 268 libtoolize --copy --force
240 fi 269 fi
241 cd "${x}" 270 cd "${x}"
242 break 271 break
243 fi 272 fi
316 eend $? "PLEASE CHECK ${x}" 345 eend $? "PLEASE CHECK ${x}"
317 ;; 346 ;;
318 esac 347 esac
319 done 348 done
320} 349}
350
351# char *VER_major(string)
352#
353# Return the Major (X of X.Y.Z) version
354#
355VER_major() {
356 [[ -z $1 ]] && return 1
357
358 local VER=$@
359 echo ${VER%%[^[:digit:]]*}
360}
361
362# char *VER_minor(string)
363#
364# Return the Minor (Y of X.Y.Z) version
365#
366VER_minor() {
367 [[ -z $1 ]] && return 1
368
369 local VER=$@
370 VER=${VER#*.}
371 echo ${VER%%[^[:digit:]]*}
372}
373
374# char *VER_micro(string)
375#
376# Return the Micro (Z of X.Y.Z) version.
377#
378VER_micro() {
379 [[ -z $1 ]] && return 1
380
381 local VER=$@
382 VER=${VER#*.*.}
383 echo ${VER%%[^[:digit:]]*}
384}
385
386# int VER_to_int(string)
387#
388# Convert a string type version (2.4.0) to an int (132096)
389# for easy compairing or versions ...
390#
391VER_to_int() {
392 [[ -z $1 ]] && return 1
393
394 local VER_MAJOR=$(VER_major "$1")
395 local VER_MINOR=$(VER_minor "$1")
396 local VER_MICRO=$(VER_micro "$1")
397 local VER_int=$(( VER_MAJOR * 65536 + VER_MINOR * 256 + VER_MICRO ))
398
399 # We make version 1.0.0 the minimum version we will handle as
400 # a sanity check ... if its less, we fail ...
401 if [[ ${VER_int} -ge 65536 ]] ; then
402 echo "${VER_int}"
403 return 0
404 fi
405
406 echo 1
407 return 1
408}

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

  ViewVC Help
Powered by ViewVC 1.1.20