/[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.42
1# Copyright 1999-2004 Gentoo Technologies, Inc. 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.25 2004/02/11 19:33:14 azarah Exp $ 3# $Header: /var/cvsroot/gentoo-x86/eclass/libtool.eclass,v 1.42 2005/01/31 03:02:13 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
13newdepend "!bootstrap? ( sys-devel/libtool )" 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.
14 20
15DESCRIPTION="Based on the ${ECLASS} eclass" 21DESCRIPTION="Based on the ${ECLASS} eclass"
16 22
17ELIBTOOL_VERSION="2.0.1" 23ELIBTOOL_VERSION="2.0.1"
18
19 24
20ELT_PATCH_DIR="${PORTDIR}/eclass/ELT-patches" 25ELT_PATCH_DIR="${PORTDIR}/eclass/ELT-patches"
21ELT_APPLIED_PATCHES= 26ELT_APPLIED_PATCHES=
22 27
23# 28#
25# 30#
26ELT_find_ltmain_sh() { 31ELT_find_ltmain_sh() {
27 local x= 32 local x=
28 local dirlist= 33 local dirlist=
29 34
30 for x in $(find "${S}" -name 'ltmain.sh') 35 for x in $(find "${S}" -name 'ltmain.sh') ; do
31 do
32 dirlist="${dirlist} ${x%/*}" 36 dirlist="${dirlist} ${x%/*}"
33 done 37 done
34 38
35 echo "${dirlist}" 39 echo "${dirlist}"
36} 40}
37 41
38# 42#
39# See if we can apply $2 on $1, and if so, do it 43# See if we can apply $2 on $1, and if so, do it
40# 44#
41ELT_try_and_apply_patch() { 45ELT_try_and_apply_patch() {
42 local ret=0 46 local ret=0
43 local patch="$2" 47 local patch="$2"
44 48
45 # We only support patchlevel of 0 - why worry if its static patches? 49 # We only support patchlevel of 0 - why worry if its static patches?
46 if patch -p0 --dry-run $1 < ${patch} &>${T}/elibtool.log 50 if patch -p0 --dry-run $1 < ${patch} &> ${T}/elibtool.log ; then
47 then
48 einfo " Applying $(basename "$(dirname "${patch}")")-${patch##*/}.patch..." 51 einfo " Applying $(basename "$(dirname "${patch}")")-${patch##*/}.patch ..."
49 patch -p0 $1 < ${patch} &>${T}/elibtool.log 52 patch -p0 $1 < ${patch} &>${T}/elibtool.log
50 ret=$? 53 ret=$?
51 export ELT_APPLIED_PATCHES="${ELT_APPLIED_PATCHES} ${patch##*/}" 54 export ELT_APPLIED_PATCHES="${ELT_APPLIED_PATCHES} ${patch##*/}"
52 else 55 else
53 ret=1 56 ret=1
64 local x= 67 local x=
65 local y= 68 local y=
66 local ret=1 69 local ret=1
67 local patch_dir= 70 local patch_dir=
68 71
69 if [ -n "$2" ] 72 if [[ -n $2 ]] ; then
70 then
71 if [ -d "${ELT_PATCH_DIR}/$2" ] 73 if [[ -d ${ELT_PATCH_DIR}/$2 ]] ; then
72 then
73 patch_dir="${ELT_PATCH_DIR}/$2" 74 patch_dir="${ELT_PATCH_DIR}/$2"
74 else 75 else
75 return ${ret} 76 return ${ret}
76 fi 77 fi
77 78
78 for x in $(ls -d "${patch_dir}"/* 2>/dev/null) 79 for x in $(ls -d "${patch_dir}"/* 2> /dev/null) ; do
79 do 80 if [[ -n ${x} && -f ${x} ]] ; then
80 if [ -n "${x}" -a -f "${x}" ]
81 then
82 # For --remove-internal-dep ... 81 # For --remove-internal-dep ...
83 if [ -n "$3" ] 82 if [[ -n $3 ]] ; then
84 then
85 # For replace @REM_INT_DEP@ with what was passed 83 # For replace @REM_INT_DEP@ with what was passed
86 # to --remove-internal-dep 84 # to --remove-internal-dep
87 sed -e "s|@REM_INT_DEP@|$3|g" ${x} > \ 85 sed -e "s|@REM_INT_DEP@|$3|g" ${x} > \
88 ${T}/$$.rem_int_deps.patch 86 ${T}/$$.rem_int_deps.patch
89 87
90 x="${T}/$$.rem_int_deps.patch" 88 x="${T}/$$.rem_int_deps.patch"
91 fi 89 fi
92 90
93 if ELT_try_and_apply_patch "$1" "${x}" 91 if ELT_try_and_apply_patch "$1" "${x}" ; then
94 then
95 ret=0 92 ret=0
96 break 93 break
97 fi 94 fi
98 fi 95 fi
99 done 96 done
109 local do_reversedeps="no" 106 local do_reversedeps="no"
110 local do_only_patches="no" 107 local do_only_patches="no"
111 local deptoremove= 108 local deptoremove=
112 local my_dirlist= 109 local my_dirlist=
113 local elt_patches="portage relink max_cmd_len sed test tmp" 110 local elt_patches="portage relink max_cmd_len sed test tmp"
111 local start_dir="${PWD}"
114 112
115 my_dirlist="$(ELT_find_ltmain_sh)" 113 my_dirlist="$(ELT_find_ltmain_sh)"
116 114
117 for x in $* 115 for x in "$@" ; do
118 do
119 case "${x}" in 116 case "${x}" in
120 "--portage") 117 "--portage")
121 # Only apply portage patch, and don't 118 # Only apply portage patch, and don't
122 # 'libtoolize --copy --force' if all patches fail. 119 # 'libtoolize --copy --force' if all patches fail.
123 do_portage="yes" 120 do_portage="yes"
147 my_dirlist="${S}" 144 my_dirlist="${S}"
148 else 145 else
149 my_dirlist= 146 my_dirlist=
150 fi 147 fi
151 ;; 148 ;;
149 "--no-uclibc")
150 NO_UCLIBCTOOLIZE=1
151 ;;
152 *)
153 eerror "Invalid elibtoolize option: $x"
154 die "elibtoolize called with $x ??"
152 esac 155 esac
153 done 156 done
154 157
158 if use ppc-macos ; then
159 glibtoolize --copy --force
160 darwintoolize
161 fi
162
155 for x in ${my_dirlist} 163 for x in ${my_dirlist} ; do
156 do
157 local tmp="$(echo "${x}" | sed -e "s|${S}||")" 164 local tmp=$(echo "${x}" | sed -e "s|${S}||")
158 export ELT_APPLIED_PATCHES= 165 export ELT_APPLIED_PATCHES=
159 166
160 cd ${x} 167 cd ${x}
161 einfo "Patching \${S}$(echo "/${tmp}/ltmain.sh" | sed -e 's|//|/|g')..." 168 einfo "Patching \${S}$(echo "/${tmp}/ltmain.sh" | sed -e 's|//|/|g') ..."
162 169
163 for y in ${elt_patches} 170 for y in ${elt_patches} ; do
164 do
165 local ret=0 171 local ret=0
166 172
167 case "${y}" in 173 case "${y}" in
168 "rem-int-dep") 174 "rem-int-dep")
169 ELT_walk_patches "${x}/ltmain.sh" "${y}" "${deptoremove}" 175 ELT_walk_patches "${x}/ltmain.sh" "${y}" "${deptoremove}"
170 ret=$? 176 ret=$?
171 ;; 177 ;;
172 "fix-relink") 178 "fix-relink")
173 # Do not apply if we do not have the relink patch applied ... 179 # Do not apply if we do not have the relink patch applied ...
174 if [ -n "$(grep 'inst_prefix_dir' "${x}/ltmain.sh")" ] 180 if [[ -n $(grep 'inst_prefix_dir' "${x}/ltmain.sh") ]] ; then
175 then
176 ELT_walk_patches "${x}/ltmain.sh" "${y}" 181 ELT_walk_patches "${x}/ltmain.sh" "${y}"
177 ret=$? 182 ret=$?
178 fi 183 fi
179 ;; 184 ;;
180 "max_cmd_len") 185 "max_cmd_len")
181 # Do not apply if $max_cmd_len is not used ... 186 # Do not apply if $max_cmd_len is not used ...
182 if [ -n "$(grep 'max_cmd_len' "${x}/ltmain.sh")" ] 187 if [[ -n $(grep 'max_cmd_len' "${x}/ltmain.sh") ]] ; then
183 then
184 ELT_walk_patches "${x}/ltmain.sh" "${y}" 188 ELT_walk_patches "${x}/ltmain.sh" "${y}"
185 ret=$? 189 ret=$?
186 fi 190 fi
187 ;; 191 ;;
188 *) 192 *)
189 ELT_walk_patches "${x}/ltmain.sh" "${y}" 193 ELT_walk_patches "${x}/ltmain.sh" "${y}"
190 ret=$? 194 ret=$?
191 ;; 195 ;;
192 esac 196 esac
193 197
194 if [ "${ret}" -ne 0 ] 198 if [[ ${ret} -ne 0 ]] ; then
195 then
196 case ${y} in 199 case ${y} in
197 "relink") 200 "relink")
198 # Critical patch, but could be applied ... 201 # Critical patch, but could be applied ...
199 if [ -z "$(grep 'inst_prefix_dir' "${x}/ltmain.sh")" ] 202 if [[ -z $(grep 'inst_prefix_dir' "${x}/ltmain.sh") ]] ; then
200 then
201 ewarn " Could not apply relink.patch!" 203 ewarn " Could not apply relink.patch!"
202 fi 204 fi
203 ;; 205 ;;
204 "portage") 206 "portage")
205 # Critical patch - for this one we abort, as it can really 207 # Critical patch - for this one we abort, as it can really
206 # cause breakage without it applied! 208 # cause breakage without it applied!
207 if [ "${do_portage}" = "yes" ] 209 if [[ ${do_portage} == "yes" ]] ; then
208 then
209 # Stupid test to see if its already applied ... 210 # Stupid test to see if its already applied ...
210 if [ -z "$(grep 'We do not want portage' "${x}/ltmain.sh")" ] 211 if [[ -z $(grep 'We do not want portage' "${x}/ltmain.sh") ]] ; then
211 then
212 echo 212 echo
213 eerror "Portage patch requested, but failed to apply!" 213 eerror "Portage patch requested, but failed to apply!"
214 die "Portage patch requested, but failed to apply!" 214 die "Portage patch requested, but failed to apply!"
215 fi 215 fi
216 else 216 else
219 fi 219 fi
220 ;; 220 ;;
221 esac 221 esac
222 fi 222 fi
223 223
224 if [ -z "${ELT_APPLIED_PATCHES}" ] 224 if [[ -z ${ELT_APPLIED_PATCHES} ]] ; then
225 then
226 if [ "${do_portage}" = "no" -a \ 225 if [[ ${do_portage} == "no" && \
227 "${do_reversedeps}" = "no" -a \ 226 ${do_reversedeps} == "no" && \
228 "${do_only_patches}" = "no" -a \ 227 ${do_only_patches} == "no" && \
229 "${deptoremove}" = "" ] 228 ${deptoremove} == "" ]]
230 then 229 then
231 # Sometimes ltmain.sh is in a subdirectory ... 230 # Sometimes ltmain.sh is in a subdirectory ...
232 if [ ! -f ${x}/configure.in -a ! -f ${x}/configure.ac ] 231 if [[ ! -f ${x}/configure.in && ! -f ${x}/configure.ac ]] ; then
233 then
234 if [ -f ${x}/../configure.in -o -f ${x}/../configure.ac ] 232 if [[ -f ${x}/../configure.in || -f ${x}/../configure.ac ]] ; then
235 then
236 cd ${x}/../ 233 cd "${x}"/../
237 fi 234 fi
238 fi 235 fi
239 236
240 if which libtoolize &>/dev/null 237 if type -p libtoolize &> /dev/null ; then
241 then
242 ewarn "Cannot apply any patch, running libtoolize..." 238 ewarn "Cannot apply any patch, running libtoolize..."
243 libtoolize --copy --force 239 libtoolize --copy --force
244 fi 240 fi
245 cd ${x} 241 cd "${x}"
246 break 242 break
247 fi 243 fi
248 fi 244 fi
249 done 245 done
250 done 246 done
251 247
252 if [ -f libtool ] 248 if [[ -f libtool ]] ; then
253 then
254 rm -f libtool 249 rm -f libtool
255 fi 250 fi
256 251
257 # We need to change the pwd back to $S, as we may be called in 252 cd "${start_dir}"
258 # src_compile()
259 cd ${S}
260}
261 253
254 uclibctoolize
255}
256
257uclibctoolize() {
258 [[ -n ${NO_UCLIBCTOOLIZE} ]] && return 0
259
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}
294
295darwintoolize() {
296 local targets=""
297 local x
298
299 if [[ -z $* ]] ; then
300 targets=$(find ${S} -name ltmain.sh -o -name ltconfig)
301 fi
302
303 einfo "Applying Darwin/libtool patches ..."
304 for x in ${targets} ; do
305 [[ ! -s ${x} ]] && continue
306 case ${x##*/} in
307 ltmain.sh|ltconfig)
308 local ver=$(grep '^VERSION=' ${x})
309 ver=${ver/VERSION=}
310 if [[ ${ver:0:3} == "1.4" || ${ver:0:3} == "1.5" ]] ; then
311 ver="1.3" # 1.4, 1.5 and 1.3 are compat
312 fi
313
314 ebegin " Fixing \${S}${x/${S}}"
315 patch -p0 "${x}" "${ELT_PATCH_DIR}/darwin/${x##*/}-${ver:0:3}.patch" > /dev/null
316 eend $? "PLEASE CHECK ${x}"
317 ;;
318 esac
319 done
320}

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

  ViewVC Help
Powered by ViewVC 1.1.20