/[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.56
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.56 2005/09/04 20:23:42 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=
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} > \
103 local x= 119 local x=
104 local y= 120 local y=
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"
124 local do_uclibc="yes"
108 local deptoremove= 125 local deptoremove=
109 local my_dirlist= 126 local my_dirlist=
110 local elt_patches="portage relink max_cmd_len sed test tmp" 127 local elt_patches="portage relink max_cmd_len sed test tmp"
111 local start_dir="${PWD}" 128 local start_dir="${PWD}"
112 129
145 else 162 else
146 my_dirlist= 163 my_dirlist=
147 fi 164 fi
148 ;; 165 ;;
149 "--no-uclibc") 166 "--no-uclibc")
150 NO_UCLIBCTOOLIZE=1 167 do_uclibc="no"
151 ;; 168 ;;
152 *) 169 *)
153 eerror "Invalid elibtoolize option: $x" 170 eerror "Invalid elibtoolize option: $x"
154 die "elibtoolize called with $x ??" 171 die "elibtoolize called with $x ??"
155 esac 172 esac
156 done 173 done
157 174
175 [[ ${do_uclibc} == "yes" ]] && \
176 elt_patches="${elt_patches} uclibc-conf uclibc-ltconf"
177
178 [[ ${CHOST} == *"-freebsd"* ]] && \
179 elt_patches="${elt_patches} fbsd-conf"
180
158 if use ppc-macos ; then 181 if use ppc-macos ; then
182 local opts
183 [[ -f Makefile.am ]] && opts="--automake"
159 glibtoolize --copy --force 184 glibtoolize --copy --force ${opts}
160 darwintoolize 185 darwintoolize
161 fi 186 fi
162 187
163 for x in ${my_dirlist} ; do 188 for x in ${my_dirlist} ; do
164 local tmp=$(echo "${x}" | sed -e "s|${S}||") 189 local tmp=$(echo "${x}" | sed -e "s|${WORKDIR}||")
165 export ELT_APPLIED_PATCHES= 190 export ELT_APPLIED_PATCHES=
191 export ELT_LTMAIN_SH="${x}/ltmain.sh"
192
193 [[ -f ${x}/.elibtoolized ]] && continue
166 194
167 cd ${x} 195 cd ${x}
168 einfo "Patching \${S}$(echo "/${tmp}/ltmain.sh" | sed -e 's|//|/|g') ..." 196 einfo "Running elibtoolize in: $(echo "/${tmp}" | sed -e 's|//|/|g; s|^/||')"
169 197
170 for y in ${elt_patches} ; do 198 for y in ${elt_patches} ; do
171 local ret=0 199 local ret=0
172 200
173 case "${y}" in 201 case "${y}" in
184 ;; 212 ;;
185 "max_cmd_len") 213 "max_cmd_len")
186 # Do not apply if $max_cmd_len is not used ... 214 # Do not apply if $max_cmd_len is not used ...
187 if [[ -n $(grep 'max_cmd_len' "${x}/ltmain.sh") ]] ; then 215 if [[ -n $(grep 'max_cmd_len' "${x}/ltmain.sh") ]] ; then
188 ELT_walk_patches "${x}/ltmain.sh" "${y}" 216 ELT_walk_patches "${x}/ltmain.sh" "${y}"
217 ret=$?
218 fi
219 ;;
220 "uclibc-conf")
221 if [[ -e ${x}/configure ]] && \
222 grep 'Transform linux' "${x}/configure" > /dev/null ; 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 grep 'Transform linux' "${x}/../configure" > /dev/null ; then
228 ELT_walk_patches "${x}/../configure" "${y}"
229 ret=$?
230 fi
231 ;;
232 "uclibc-ltconf")
233 if [[ -e ${x}/ltconfig ]] ; then
234 ELT_walk_patches "${x}/ltconfig" "${y}"
235 ret=$?
236 fi
237 ;;
238 "fbsd-conf")
239 if [[ -e ${x}/configure ]] && \
240 grep 'version_type=freebsd-' "${x}/configure" > /dev/null ; then
241 ELT_walk_patches "${x}/configure" "${y}"
242 ret=$?
243 # ltmain.sh and co might be in a subdirectory ...
244 elif [[ ! -e ${x}/configure && -e ${x}/../configure ]] && \
245 grep 'version_type=freebsd-' "${x}/../configure" > /dev/null ; then
246 ELT_walk_patches "${x}/../configure" "${y}"
189 ret=$? 247 ret=$?
190 fi 248 fi
191 ;; 249 ;;
192 *) 250 *)
193 ELT_walk_patches "${x}/ltmain.sh" "${y}" 251 ELT_walk_patches "${x}/ltmain.sh" "${y}"
212 echo 270 echo
213 eerror "Portage patch requested, but failed to apply!" 271 eerror "Portage patch requested, but failed to apply!"
214 die "Portage patch requested, but failed to apply!" 272 die "Portage patch requested, but failed to apply!"
215 fi 273 fi
216 else 274 else
217 ewarn " Could not apply portage.patch!" 275 if [[ -n $(grep 'We do not want portage' "${x}/ltmain.sh") ]] ; then
276 # ewarn " Portage patch seems to be already applied."
218 ewarn " Please verify that it is not needed." 277 # ewarn " Please verify that it is not needed."
278 :
279 else
280 local version=$( \
281 eval $(grep -e '^[[:space:]]*VERSION=' "${x}/ltmain.sh"); \
282 echo "${VERSION}")
283
284 echo
285 eerror "Portage patch failed to apply (ltmain.sh version ${version})!"
286 die "Portage patch failed to apply!"
287 fi
288 # We do not want to run libtoolize ...
289 ELT_APPLIED_PATCHES="portage"
219 fi 290 fi
291 ;;
292 "uclibc-"*)
293 [[ ${CHOST} == *"-uclibc" ]] && \
294 ewarn " uClibc patch set '${y}' failed to apply!"
295 ;;
296 "fbsd-"*)
297 [[ ${CHOST} == *"-freebsd"* ]] && \
298 eerror " FreeBSD patch set '${y}' failed to apply!"
299 die "FreeBSD patch set '${y}' failed to apply!"
220 ;; 300 ;;
221 esac 301 esac
222 fi 302 fi
303 done
223 304
224 if [[ -z ${ELT_APPLIED_PATCHES} ]] ; then 305 if [[ -z ${ELT_APPLIED_PATCHES} ]] ; then
225 if [[ ${do_portage} == "no" && \ 306 if [[ ${do_portage} == "no" && \
226 ${do_reversedeps} == "no" && \ 307 ${do_reversedeps} == "no" && \
227 ${do_only_patches} == "no" && \ 308 ${do_only_patches} == "no" && \
228 ${deptoremove} == "" ]] 309 ${deptoremove} == "" ]]
229 then 310 then
311 ewarn "Cannot apply any patches, please file a bug about this"
312 break
313
230 # Sometimes ltmain.sh is in a subdirectory ... 314 # Sometimes ltmain.sh is in a subdirectory ...
231 if [[ ! -f ${x}/configure.in && ! -f ${x}/configure.ac ]] ; then 315 if [[ ! -f ${x}/configure.in && ! -f ${x}/configure.ac ]] ; then
232 if [[ -f ${x}/../configure.in || -f ${x}/../configure.ac ]] ; then 316 if [[ -f ${x}/../configure.in || -f ${x}/../configure.ac ]] ; then
233 cd "${x}"/../ 317 cd "${x}"/../
234 fi 318 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 319 fi
320
321 if type -p libtoolize &> /dev/null ; then
322 ewarn "Cannot apply any patches, running libtoolize..."
323 libtoolize --copy --force
324 fi
325 cd "${x}"
326 break
244 fi 327 fi
245 done 328 fi
329
330 [[ -f ${x}/libtool ]] && rm -f "${x}/libtool"
331
332 touch "${x}/.elibtoolized"
246 done 333 done
247 334
248 if [[ -f libtool ]] ; then
249 rm -f libtool
250 fi
251
252 cd "${start_dir}" 335 cd "${start_dir}"
253
254 uclibctoolize
255} 336}
256 337
257uclibctoolize() { 338uclibctoolize() {
258 [[ -n ${NO_UCLIBCTOOLIZE} ]] && return 0 339 ewarn "uclibctoolize() is depreciated, please just use libtoolize()!"
259 340 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} 341}
294 342
295darwintoolize() { 343darwintoolize() {
296 local targets="" 344 local targets=""
297 local x 345 local x
316 eend $? "PLEASE CHECK ${x}" 364 eend $? "PLEASE CHECK ${x}"
317 ;; 365 ;;
318 esac 366 esac
319 done 367 done
320} 368}
369
370# char *VER_major(string)
371#
372# Return the Major (X of X.Y.Z) version
373#
374VER_major() {
375 [[ -z $1 ]] && return 1
376
377 local VER=$@
378 echo ${VER%%[^[:digit:]]*}
379}
380
381# char *VER_minor(string)
382#
383# Return the Minor (Y of X.Y.Z) version
384#
385VER_minor() {
386 [[ -z $1 ]] && return 1
387
388 local VER=$@
389 VER=${VER#*.}
390 echo ${VER%%[^[:digit:]]*}
391}
392
393# char *VER_micro(string)
394#
395# Return the Micro (Z of X.Y.Z) version.
396#
397VER_micro() {
398 [[ -z $1 ]] && return 1
399
400 local VER=$@
401 VER=${VER#*.*.}
402 echo ${VER%%[^[:digit:]]*}
403}
404
405# int VER_to_int(string)
406#
407# Convert a string type version (2.4.0) to an int (132096)
408# for easy compairing or versions ...
409#
410VER_to_int() {
411 [[ -z $1 ]] && return 1
412
413 local VER_MAJOR=$(VER_major "$1")
414 local VER_MINOR=$(VER_minor "$1")
415 local VER_MICRO=$(VER_micro "$1")
416 local VER_int=$(( VER_MAJOR * 65536 + VER_MINOR * 256 + VER_MICRO ))
417
418 # We make version 1.0.0 the minimum version we will handle as
419 # a sanity check ... if its less, we fail ...
420 if [[ ${VER_int} -ge 65536 ]] ; then
421 echo "${VER_int}"
422 return 0
423 fi
424
425 echo 1
426 return 1
427}

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

  ViewVC Help
Powered by ViewVC 1.1.20