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

Diff of /eclass/libtool.eclass

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

Revision 1.25 Revision 1.41
1# Copyright 1999-2004 Gentoo Technologies, Inc. 1# Copyright 1999-2004 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.25 2004/02/11 19:33:14 azarah Exp $ 3# $Header: /var/cvsroot/gentoo-x86/eclass/libtool.eclass,v 1.41 2004/11/22 14:55:57 vapier 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" 10ECLASS="libtool"
11INHERITED="${INHERITED} ${ECLASS}" 11INHERITED="${INHERITED} ${ECLASS}"
12 12
13# 2004.09.25 rac
14# i have verified that at least one package can use this eclass and
15# build properly even without libtool installed yet, probably using
16# the files in the distribution. eliminating this dependency fixes
17# bug 65209, which is a showstopper for people doing installs using
18# stageballs <3. if anybody decides to revert this, please attempt
19# to find an alternate way of resolving that bug at the same time.
20
13newdepend "!bootstrap? ( sys-devel/libtool )" 21#DEPEND="!bootstrap? ( sys-devel/libtool )"
14 22
15DESCRIPTION="Based on the ${ECLASS} eclass" 23DESCRIPTION="Based on the ${ECLASS} eclass"
16 24
17ELIBTOOL_VERSION="2.0.1" 25ELIBTOOL_VERSION="2.0.1"
18 26
25# 33#
26ELT_find_ltmain_sh() { 34ELT_find_ltmain_sh() {
27 local x= 35 local x=
28 local dirlist= 36 local dirlist=
29 37
30 for x in $(find "${S}" -name 'ltmain.sh') 38 for x in $(find "${S}" -name 'ltmain.sh')
31 do 39 do
32 dirlist="${dirlist} ${x%/*}" 40 dirlist="${dirlist} ${x%/*}"
33 done 41 done
34 42
35 echo "${dirlist}" 43 echo "${dirlist}"
36} 44}
37 45
38# 46#
39# See if we can apply $2 on $1, and if so, do it 47# See if we can apply $2 on $1, and if so, do it
40# 48#
43 local patch="$2" 51 local patch="$2"
44 52
45 # We only support patchlevel of 0 - why worry if its static patches? 53 # We only support patchlevel of 0 - why worry if its static patches?
46 if patch -p0 --dry-run $1 < ${patch} &>${T}/elibtool.log 54 if patch -p0 --dry-run $1 < ${patch} &>${T}/elibtool.log
47 then 55 then
48 einfo " Applying $(basename "$(dirname "${patch}")")-${patch##*/}.patch..." 56 einfo " Applying $(basename "$(dirname "${patch}")")-${patch##*/}.patch ..."
49 patch -p0 $1 < ${patch} &>${T}/elibtool.log 57 patch -p0 $1 < ${patch} &>${T}/elibtool.log
50 ret=$? 58 ret=$?
51 export ELT_APPLIED_PATCHES="${ELT_APPLIED_PATCHES} ${patch##*/}" 59 export ELT_APPLIED_PATCHES="${ELT_APPLIED_PATCHES} ${patch##*/}"
52 else 60 else
53 ret=1 61 ret=1
72 then 80 then
73 patch_dir="${ELT_PATCH_DIR}/$2" 81 patch_dir="${ELT_PATCH_DIR}/$2"
74 else 82 else
75 return ${ret} 83 return ${ret}
76 fi 84 fi
77 85
78 for x in $(ls -d "${patch_dir}"/* 2>/dev/null) 86 for x in $(ls -d "${patch_dir}"/* 2>/dev/null)
79 do 87 do
80 if [ -n "${x}" -a -f "${x}" ] 88 if [ -n "${x}" -a -f "${x}" ]
81 then 89 then
82 # For --remove-internal-dep ... 90 # For --remove-internal-dep ...
84 then 92 then
85 # For replace @REM_INT_DEP@ with what was passed 93 # For replace @REM_INT_DEP@ with what was passed
86 # to --remove-internal-dep 94 # to --remove-internal-dep
87 sed -e "s|@REM_INT_DEP@|$3|g" ${x} > \ 95 sed -e "s|@REM_INT_DEP@|$3|g" ${x} > \
88 ${T}/$$.rem_int_deps.patch 96 ${T}/$$.rem_int_deps.patch
89 97
90 x="${T}/$$.rem_int_deps.patch" 98 x="${T}/$$.rem_int_deps.patch"
91 fi 99 fi
92 100
93 if ELT_try_and_apply_patch "$1" "${x}" 101 if ELT_try_and_apply_patch "$1" "${x}"
94 then 102 then
95 ret=0 103 ret=0
96 break 104 break
97 fi 105 fi
109 local do_reversedeps="no" 117 local do_reversedeps="no"
110 local do_only_patches="no" 118 local do_only_patches="no"
111 local deptoremove= 119 local deptoremove=
112 local my_dirlist= 120 local my_dirlist=
113 local elt_patches="portage relink max_cmd_len sed test tmp" 121 local elt_patches="portage relink max_cmd_len sed test tmp"
122 local start_dir="${PWD}"
114 123
115 my_dirlist="$(ELT_find_ltmain_sh)" 124 my_dirlist="$(ELT_find_ltmain_sh)"
116 125
117 for x in $* 126 for x in "$@"
118 do 127 do
119 case "${x}" in 128 case "${x}" in
120 "--portage") 129 "--portage")
121 # Only apply portage patch, and don't 130 # Only apply portage patch, and don't
122 # 'libtoolize --copy --force' if all patches fail. 131 # 'libtoolize --copy --force' if all patches fail.
147 my_dirlist="${S}" 156 my_dirlist="${S}"
148 else 157 else
149 my_dirlist= 158 my_dirlist=
150 fi 159 fi
151 ;; 160 ;;
161 "--no-uclibc")
162 NO_UCLIBCTOOLIZE=1
163 ;;
152 esac 164 esac
153 done 165 done
166
167 if use ppc-macos ; then
168 glibtoolize --copy --force
169 darwintoolize
170 fi
154 171
155 for x in ${my_dirlist} 172 for x in ${my_dirlist}
156 do 173 do
157 local tmp="$(echo "${x}" | sed -e "s|${S}||")" 174 local tmp="$(echo "${x}" | sed -e "s|${S}||")"
158 export ELT_APPLIED_PATCHES= 175 export ELT_APPLIED_PATCHES=
159 176
160 cd ${x} 177 cd ${x}
161 einfo "Patching \${S}$(echo "/${tmp}/ltmain.sh" | sed -e 's|//|/|g')..." 178 einfo "Patching \${S}$(echo "/${tmp}/ltmain.sh" | sed -e 's|//|/|g') ..."
162 179
163 for y in ${elt_patches} 180 for y in ${elt_patches}
164 do 181 do
165 local ret=0 182 local ret=0
166 183
188 *) 205 *)
189 ELT_walk_patches "${x}/ltmain.sh" "${y}" 206 ELT_walk_patches "${x}/ltmain.sh" "${y}"
190 ret=$? 207 ret=$?
191 ;; 208 ;;
192 esac 209 esac
193 210
194 if [ "${ret}" -ne 0 ] 211 if [ "${ret}" -ne 0 ]
195 then 212 then
196 case ${y} in 213 case ${y} in
197 "relink") 214 "relink")
198 # Critical patch, but could be applied ... 215 # Critical patch, but could be applied ...
252 if [ -f libtool ] 269 if [ -f libtool ]
253 then 270 then
254 rm -f libtool 271 rm -f libtool
255 fi 272 fi
256 273
257 # We need to change the pwd back to $S, as we may be called in 274 cd "${start_dir}"
258 # src_compile()
259 cd ${S}
260}
261 275
276 uclibctoolize
277}
278
279uclibctoolize() {
280 [ -n "${NO_UCLIBCTOOLIZE}" ] && return 0
281
282 local errmsg=""
283 [ "${PORTAGE_LIBC}" = "uClibc" ] \
284 && errmsg="PLEASE CHECK" \
285 || errmsg="Already patched"
286 local targets=""
287 local x
288
289 if [ -z "$@" ] ; then
290 targets="$(find ${S} -name configure -o -name ltconfig)"
291 fi
292
293 einfo "Applying uClibc/libtool patches ..."
294 for x in ${targets} ; do
295 [ ! -s "${x}" ] && continue
296 case $(basename "${x}") in
297 configure)
298 if grep 'Transform linux' "${x}" >/dev/null ; then
299 ebegin " Fixing \${S}${x/${S}}"
300 patch -p0 "${x}" "${ELT_PATCH_DIR}/uclibc/configure.patch" > /dev/null
301 eend $? "${errmsg} ${x}"
302 fi
303 ;;
304
305 ltconfig)
306 local ver="$(grep '^VERSION=' ${x})"
307 ver="${ver/VERSION=}"
308 [ "${ver:0:3}" == "1.4" ] && ver="1.3" # 1.4 and 1.3 are compat
309 ebegin " Fixing \${S}${x/${S}}"
310 patch -p0 "${x}" "${ELT_PATCH_DIR}/uclibc/ltconfig-${ver:0:3}.patch" > /dev/null
311 eend $? "${errmsg} ${x}"
312 ;;
313 esac
314 done
315}
316
317darwintoolize() {
318 local targets=""
319 local x
320
321 if [ -z "$@" ] ; then
322 targets="$(find ${S} -name ltmain.sh -o -name ltconfig)"
323 fi
324
325 einfo "Applying Darwin/libtool patches ..."
326 for x in ${targets} ; do
327 [ ! -s "${x}" ] && continue
328 case $(basename "${x}") in
329 ltmain.sh|ltconfig)
330 local ver="$(grep '^VERSION=' ${x})"
331 ver="${ver/VERSION=}"
332 if [ "${ver:0:3}" == "1.4" -o "${ver:0:3}" == "1.5" ];
333 then
334 ver="1.3" # 1.4, 1.5 and 1.3 are compat
335 fi
336
337 ebegin " Fixing \${S}${x/${S}}"
338 patch -p0 "${x}" "${ELT_PATCH_DIR}/darwin/$(basename "${x}")-${ver:0:3}.patch" > /dev/null
339 eend $? "PLEASE CHECK ${x}"
340 ;;
341 esac
342 done
343}

Legend:
Removed from v.1.25  
changed lines
  Added in v.1.41

  ViewVC Help
Powered by ViewVC 1.1.20