/[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.38
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.38 2004/10/20 14:25:02 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.
150 fi 159 fi
151 ;; 160 ;;
152 esac 161 esac
153 done 162 done
154 163
164 if use ppc-macos ; then
165 glibtoolize --copy --force
166 darwintoolize
167 fi
168
155 for x in ${my_dirlist} 169 for x in ${my_dirlist}
156 do 170 do
157 local tmp="$(echo "${x}" | sed -e "s|${S}||")" 171 local tmp="$(echo "${x}" | sed -e "s|${S}||")"
158 export ELT_APPLIED_PATCHES= 172 export ELT_APPLIED_PATCHES=
159 173
160 cd ${x} 174 cd ${x}
161 einfo "Patching \${S}$(echo "/${tmp}/ltmain.sh" | sed -e 's|//|/|g')..." 175 einfo "Patching \${S}$(echo "/${tmp}/ltmain.sh" | sed -e 's|//|/|g') ..."
162 176
163 for y in ${elt_patches} 177 for y in ${elt_patches}
164 do 178 do
165 local ret=0 179 local ret=0
166 180
188 *) 202 *)
189 ELT_walk_patches "${x}/ltmain.sh" "${y}" 203 ELT_walk_patches "${x}/ltmain.sh" "${y}"
190 ret=$? 204 ret=$?
191 ;; 205 ;;
192 esac 206 esac
193 207
194 if [ "${ret}" -ne 0 ] 208 if [ "${ret}" -ne 0 ]
195 then 209 then
196 case ${y} in 210 case ${y} in
197 "relink") 211 "relink")
198 # Critical patch, but could be applied ... 212 # Critical patch, but could be applied ...
252 if [ -f libtool ] 266 if [ -f libtool ]
253 then 267 then
254 rm -f libtool 268 rm -f libtool
255 fi 269 fi
256 270
257 # We need to change the pwd back to $S, as we may be called in 271 cd "${start_dir}"
258 # src_compile()
259 cd ${S}
260}
261 272
273 uclibctoolize
274}
275
276uclibctoolize() {
277 [ -e "${WORKDIR}/.uclibcpatched" ] && return 0
278
279 local targets=""
280 local x
281
282 if [ -z "$@" ] ; then
283 targets="$(find ${S} -name configure -o -name ltconfig)"
284 fi
285
286 einfo "Applying uClibc/libtool patches ..."
287 for x in ${targets} ; do
288 [ ! -s "${x}" ] && continue
289 case $(basename "${x}") in
290 configure)
291 if grep 'Transform linux' "${x}" >/dev/null ; then
292 ebegin " Fixing \${S}${x/${S}}"
293 patch -p0 "${x}" "${ELT_PATCH_DIR}/uclibc/configure.patch" > /dev/null
294 eend $? "PLEASE CHECK ${x}"
295 fi
296 ;;
297
298 ltconfig)
299 local ver="$(grep '^VERSION=' ${x})"
300 ver="${ver/VERSION=}"
301 [ "${ver:0:3}" == "1.4" ] && ver="1.3" # 1.4 and 1.3 are compat
302 ebegin " Fixing \${S}${x/${S}}"
303 patch -p0 "${x}" "${ELT_PATCH_DIR}/uclibc/ltconfig-${ver:0:3}.patch" > /dev/null
304 eend $? "PLEASE CHECK ${x}"
305 ;;
306 esac
307 done
308}
309
310darwintoolize() {
311 local targets=""
312 local x
313
314 if [ -z "$@" ] ; then
315 targets="$(find ${S} -name ltmain.sh -o -name ltconfig)"
316 fi
317
318 einfo "Applying Darwin/libtool patches ..."
319 for x in ${targets} ; do
320 [ ! -s "${x}" ] && continue
321 case $(basename "${x}") in
322 ltmain.sh|ltconfig)
323 local ver="$(grep '^VERSION=' ${x})"
324 ver="${ver/VERSION=}"
325 if [ "${ver:0:3}" == "1.4" -o "${ver:0:3}" == "1.5" ];
326 then
327 ver="1.3" # 1.4, 1.5 and 1.3 are compat
328 fi
329
330 ebegin " Fixing \${S}${x/${S}}"
331 patch -p0 "${x}" "${ELT_PATCH_DIR}/darwin/$(basename "${x}")-${ver:0:3}.patch" > /dev/null
332 eend $? "PLEASE CHECK ${x}"
333 ;;
334 esac
335 done
336}

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

  ViewVC Help
Powered by ViewVC 1.1.20