/[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.55
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.55 2005/09/04 18:40:48 flameeyes 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=
25ELT_LTMAIN_SH=
27 26
28# 27#
29# Returns all the directories containing ltmain.sh 28# Returns all the directories containing ltmain.sh
30# 29#
31ELT_find_ltmain_sh() { 30ELT_find_ltmain_sh() {
66ELT_walk_patches() { 65ELT_walk_patches() {
67 local x= 66 local x=
68 local y= 67 local y=
69 local ret=1 68 local ret=1
70 local patch_dir= 69 local patch_dir=
70 local version=
71 local ltmain_sh=$1
72
73 [[ $1 == *"/configure" ]] && ltmain_sh=${ELT_LTMAIN_SH}
74 version=$(eval $(grep -e '^[[:space:]]*VERSION=' "${ltmain_sh}"); \
75 echo "${VERSION}")
71 76
72 if [[ -n $2 ]] ; then 77 if [[ -n $2 ]] ; then
73 if [[ -d ${ELT_PATCH_DIR}/$2 ]] ; then 78 if [[ -d ${ELT_PATCH_DIR}/$2 ]] ; then
74 patch_dir="${ELT_PATCH_DIR}/$2" 79 patch_dir="${ELT_PATCH_DIR}/$2"
75 else 80 else
76 return ${ret} 81 return ${ret}
77 fi 82 fi
78 83
84 if [[ -z ${version} ]] ; then
85 eerror "Could not get VERSION for ${1##*/}!"
86 die "Could not get VERSION for ${1##*/}!"
87 fi
88
89 # Go through the patches in reverse order (large to small)
79 for x in $(ls -d "${patch_dir}"/* 2> /dev/null) ; do 90 for x in $(ls -d "${patch_dir}"/* 2> /dev/null | sort -r) ; do
80 if [[ -n ${x} && -f ${x} ]] ; then 91 if [[ -n ${x} && -f ${x} ]] ; then
92 local ltver=$(VER_to_int "${version}")
93 local ptver=$(VER_to_int "${x##*/}")
94
95 # If libtool version smaller than patch version, skip patch.
96 [[ ${ltver} -lt ${ptver} ]] && continue
81 # For --remove-internal-dep ... 97 # For --remove-internal-dep ...
82 if [[ -n $3 ]] ; then 98 if [[ -n $3 ]] ; then
83 # For replace @REM_INT_DEP@ with what was passed 99 # For replace @REM_INT_DEP@ with what was passed
84 # to --remove-internal-dep 100 # to --remove-internal-dep
85 sed -e "s|@REM_INT_DEP@|$3|g" ${x} > \ 101 sed -e "s|@REM_INT_DEP@|$3|g" ${x} > \
105 local do_portage="no" 121 local do_portage="no"
106 local do_reversedeps="no" 122 local do_reversedeps="no"
107 local do_only_patches="no" 123 local do_only_patches="no"
108 local deptoremove= 124 local deptoremove=
109 local my_dirlist= 125 local my_dirlist=
110 local elt_patches="portage relink max_cmd_len sed test tmp" 126 local elt_patches="portage relink max_cmd_len sed test tmp \
127 uclibc-conf uclibc-ltconf"
111 local start_dir="${PWD}" 128 local start_dir="${PWD}"
112 129
113 my_dirlist="$(ELT_find_ltmain_sh)" 130 my_dirlist="$(ELT_find_ltmain_sh)"
131
132 [[ ${CHOST} == *"-freebsd"* ]] && \
133 elt_patches="${elt_patches} fbsd-conf"
114 134
115 for x in "$@" ; do 135 for x in "$@" ; do
116 case "${x}" in 136 case "${x}" in
117 "--portage") 137 "--portage")
118 # Only apply portage patch, and don't 138 # Only apply portage patch, and don't
154 die "elibtoolize called with $x ??" 174 die "elibtoolize called with $x ??"
155 esac 175 esac
156 done 176 done
157 177
158 if use ppc-macos ; then 178 if use ppc-macos ; then
179 local opts
180 [[ -f Makefile.am ]] && opts="--automake"
159 glibtoolize --copy --force 181 glibtoolize --copy --force ${opts}
160 darwintoolize 182 darwintoolize
161 fi 183 fi
162 184
163 for x in ${my_dirlist} ; do 185 for x in ${my_dirlist} ; do
164 local tmp=$(echo "${x}" | sed -e "s|${S}||") 186 local tmp=$(echo "${x}" | sed -e "s|${WORKDIR}||")
165 export ELT_APPLIED_PATCHES= 187 export ELT_APPLIED_PATCHES=
188 export ELT_LTMAIN_SH="${x}/ltmain.sh"
189
190 [[ -f ${x}/.elibtoolized ]] && continue
166 191
167 cd ${x} 192 cd ${x}
168 einfo "Patching \${S}$(echo "/${tmp}/ltmain.sh" | sed -e 's|//|/|g') ..." 193 einfo "Running elibtoolize in: $(echo "/${tmp}" | sed -e 's|//|/|g; s|^/||')"
169 194
170 for y in ${elt_patches} ; do 195 for y in ${elt_patches} ; do
171 local ret=0 196 local ret=0
172 197
173 case "${y}" in 198 case "${y}" in
184 ;; 209 ;;
185 "max_cmd_len") 210 "max_cmd_len")
186 # Do not apply if $max_cmd_len is not used ... 211 # Do not apply if $max_cmd_len is not used ...
187 if [[ -n $(grep 'max_cmd_len' "${x}/ltmain.sh") ]] ; then 212 if [[ -n $(grep 'max_cmd_len' "${x}/ltmain.sh") ]] ; then
188 ELT_walk_patches "${x}/ltmain.sh" "${y}" 213 ELT_walk_patches "${x}/ltmain.sh" "${y}"
214 ret=$?
215 fi
216 ;;
217 "uclibc-conf")
218 if [[ -e ${x}/configure ]] && \
219 grep 'Transform linux' "${x}/configure" > /dev/null ; then
220 ELT_walk_patches "${x}/configure" "${y}"
221 ret=$?
222 # ltmain.sh and co might be in a subdirectory ...
223 elif [[ ! -e ${x}/configure && -e ${x}/../configure ]] && \
224 grep 'Transform linux' "${x}/../configure" > /dev/null ; then
225 ELT_walk_patches "${x}/../configure" "${y}"
226 ret=$?
227 fi
228 ;;
229 "uclibc-ltconf")
230 if [[ -e ${x}/ltconfig ]] ; then
231 ELT_walk_patches "${x}/ltconfig" "${y}"
232 ret=$?
233 fi
234 ;;
235 "fbsd-conf")
236 if [[ -e ${x}/configure ]] && \
237 grep 'version_type=freebsd-' "${x}/configure" > /dev/null ; then
238 ELT_walk_patches "${x}/configure" "${y}"
239 ret=$?
240 # ltmain.sh and co might be in a subdirectory ...
241 elif [[ ! -e ${x}/configure && -e ${x}/../configure ]] && \
242 grep 'version_type=freebsd-' "${x}/../configure" > /dev/null ; then
243 ELT_walk_patches "${x}/../configure" "${y}"
189 ret=$? 244 ret=$?
190 fi 245 fi
191 ;; 246 ;;
192 *) 247 *)
193 ELT_walk_patches "${x}/ltmain.sh" "${y}" 248 ELT_walk_patches "${x}/ltmain.sh" "${y}"
212 echo 267 echo
213 eerror "Portage patch requested, but failed to apply!" 268 eerror "Portage patch requested, but failed to apply!"
214 die "Portage patch requested, but failed to apply!" 269 die "Portage patch requested, but failed to apply!"
215 fi 270 fi
216 else 271 else
217 ewarn " Could not apply portage.patch!" 272 if [[ -n $(grep 'We do not want portage' "${x}/ltmain.sh") ]] ; then
273 # ewarn " Portage patch seems to be already applied."
218 ewarn " Please verify that it is not needed." 274 # ewarn " Please verify that it is not needed."
275 :
276 else
277 local version=$( \
278 eval $(grep -e '^[[:space:]]*VERSION=' "${x}/ltmain.sh"); \
279 echo "${VERSION}")
280
281 echo
282 eerror "Portage patch failed to apply (ltmain.sh version ${version})!"
283 die "Portage patch failed to apply!"
284 fi
285 # We do not want to run libtoolize ...
286 ELT_APPLIED_PATCHES="portage"
219 fi 287 fi
288 ;;
289 "uclibc-"*)
290 [[ ${CHOST} == *"-uclibc" ]] && \
291 ewarn " uClibc patch set '${y}' failed to apply!"
292 ;;
293 "fbsd-"*)
294 [[ ${CHOST} == *"-freebsd"* ]] && \
295 eerror " FreeBSD patch set '${y}' failed to apply!"
296 die "FreeBSD patch set '${y}' failed to apply!"
220 ;; 297 ;;
221 esac 298 esac
222 fi 299 fi
300 done
223 301
224 if [[ -z ${ELT_APPLIED_PATCHES} ]] ; then 302 if [[ -z ${ELT_APPLIED_PATCHES} ]] ; then
225 if [[ ${do_portage} == "no" && \ 303 if [[ ${do_portage} == "no" && \
226 ${do_reversedeps} == "no" && \ 304 ${do_reversedeps} == "no" && \
227 ${do_only_patches} == "no" && \ 305 ${do_only_patches} == "no" && \
228 ${deptoremove} == "" ]] 306 ${deptoremove} == "" ]]
229 then 307 then
308 ewarn "Cannot apply any patches, please file a bug about this"
309 break
310
230 # Sometimes ltmain.sh is in a subdirectory ... 311 # Sometimes ltmain.sh is in a subdirectory ...
231 if [[ ! -f ${x}/configure.in && ! -f ${x}/configure.ac ]] ; then 312 if [[ ! -f ${x}/configure.in && ! -f ${x}/configure.ac ]] ; then
232 if [[ -f ${x}/../configure.in || -f ${x}/../configure.ac ]] ; then 313 if [[ -f ${x}/../configure.in || -f ${x}/../configure.ac ]] ; then
233 cd "${x}"/../ 314 cd "${x}"/../
234 fi 315 fi
235 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 316 fi
317
318 if type -p libtoolize &> /dev/null ; then
319 ewarn "Cannot apply any patches, running libtoolize..."
320 libtoolize --copy --force
321 fi
322 cd "${x}"
323 break
244 fi 324 fi
245 done 325 fi
326
327 [[ -f ${x}/libtool ]] && rm -f "${x}/libtool"
328
329 touch "${x}/.elibtoolized"
246 done 330 done
247 331
248 if [[ -f libtool ]] ; then
249 rm -f libtool
250 fi
251
252 cd "${start_dir}" 332 cd "${start_dir}"
253
254 uclibctoolize
255} 333}
256 334
257uclibctoolize() { 335uclibctoolize() {
258 [[ -n ${NO_UCLIBCTOOLIZE} ]] && return 0 336 ewarn "uclibctoolize() is depreciated, please just use libtoolize()!"
259 337 elibtoolize
260 local errmsg=""
261 [[ ${CTARGET:-${CHOST}} == *-uclibc ]] \
262 && errmsg="PLEASE CHECK" \
263 || errmsg="Already patched"
264 local targets=""
265 local x
266
267 if [[ -z $* ]] ; then
268 targets=$(find ${S} -name configure -o -name ltconfig)
269 fi
270
271 einfo "Applying uClibc/libtool patches ..."
272 for x in ${targets} ; do
273 [[ ! -s ${x} ]] && continue
274 case ${x##*/} in
275 configure)
276 if grep 'Transform linux' "${x}" > /dev/null ; then
277 ebegin " Fixing \${S}${x/${S}}"
278 patch -p0 "${x}" "${ELT_PATCH_DIR}/uclibc/configure.patch" > /dev/null
279 eend $? "${errmsg} ${x}"
280 fi
281 ;;
282
283 ltconfig)
284 local ver=$(grep '^VERSION=' ${x})
285 ver=${ver/VERSION=}
286 [[ ${ver:0:3} == "1.4" ]] && ver="1.3" # 1.4 and 1.3 are compat
287 ebegin " Fixing \${S}${x/${S}}"
288 patch -p0 "${x}" "${ELT_PATCH_DIR}/uclibc/ltconfig-${ver:0:3}.patch" > /dev/null
289 eend $? "${errmsg} ${x}"
290 ;;
291 esac
292 done
293} 338}
294 339
295darwintoolize() { 340darwintoolize() {
296 local targets="" 341 local targets=""
297 local x 342 local x
316 eend $? "PLEASE CHECK ${x}" 361 eend $? "PLEASE CHECK ${x}"
317 ;; 362 ;;
318 esac 363 esac
319 done 364 done
320} 365}
366
367# char *VER_major(string)
368#
369# Return the Major (X of X.Y.Z) version
370#
371VER_major() {
372 [[ -z $1 ]] && return 1
373
374 local VER=$@
375 echo ${VER%%[^[:digit:]]*}
376}
377
378# char *VER_minor(string)
379#
380# Return the Minor (Y of X.Y.Z) version
381#
382VER_minor() {
383 [[ -z $1 ]] && return 1
384
385 local VER=$@
386 VER=${VER#*.}
387 echo ${VER%%[^[:digit:]]*}
388}
389
390# char *VER_micro(string)
391#
392# Return the Micro (Z of X.Y.Z) version.
393#
394VER_micro() {
395 [[ -z $1 ]] && return 1
396
397 local VER=$@
398 VER=${VER#*.*.}
399 echo ${VER%%[^[:digit:]]*}
400}
401
402# int VER_to_int(string)
403#
404# Convert a string type version (2.4.0) to an int (132096)
405# for easy compairing or versions ...
406#
407VER_to_int() {
408 [[ -z $1 ]] && return 1
409
410 local VER_MAJOR=$(VER_major "$1")
411 local VER_MINOR=$(VER_minor "$1")
412 local VER_MICRO=$(VER_micro "$1")
413 local VER_int=$(( VER_MAJOR * 65536 + VER_MINOR * 256 + VER_MICRO ))
414
415 # We make version 1.0.0 the minimum version we will handle as
416 # a sanity check ... if its less, we fail ...
417 if [[ ${VER_int} -ge 65536 ]] ; then
418 echo "${VER_int}"
419 return 0
420 fi
421
422 echo 1
423 return 1
424}

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

  ViewVC Help
Powered by ViewVC 1.1.20