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

Contents of /eclass/libtool.eclass

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.41 - (show annotations) (download)
Mon Nov 22 14:55:57 2004 UTC (9 years, 4 months ago) by vapier
Branch: MAIN
Changes since 1.40: +7 -3 lines
only make the error failure scary fur uclibc users

1 # Copyright 1999-2004 Gentoo Foundation
2 # Distributed under the terms of the GNU General Public License v2
3 # $Header: /var/cvsroot/gentoo-x86/eclass/libtool.eclass,v 1.40 2004/10/20 14:29:26 vapier Exp $
4 #
5 # Author: Martin Schlemmer <azarah@gentoo.org>
6 #
7 # This eclass patches ltmain.sh distributed with libtoolized packages with the
8 # relink and portage patch among others
9
10 ECLASS="libtool"
11 INHERITED="${INHERITED} ${ECLASS}"
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
21 #DEPEND="!bootstrap? ( sys-devel/libtool )"
22
23 DESCRIPTION="Based on the ${ECLASS} eclass"
24
25 ELIBTOOL_VERSION="2.0.1"
26
27
28 ELT_PATCH_DIR="${PORTDIR}/eclass/ELT-patches"
29 ELT_APPLIED_PATCHES=
30
31 #
32 # Returns all the directories containing ltmain.sh
33 #
34 ELT_find_ltmain_sh() {
35 local x=
36 local dirlist=
37
38 for x in $(find "${S}" -name 'ltmain.sh')
39 do
40 dirlist="${dirlist} ${x%/*}"
41 done
42
43 echo "${dirlist}"
44 }
45
46 #
47 # See if we can apply $2 on $1, and if so, do it
48 #
49 ELT_try_and_apply_patch() {
50 local ret=0
51 local patch="$2"
52
53 # We only support patchlevel of 0 - why worry if its static patches?
54 if patch -p0 --dry-run $1 < ${patch} &>${T}/elibtool.log
55 then
56 einfo " Applying $(basename "$(dirname "${patch}")")-${patch##*/}.patch ..."
57 patch -p0 $1 < ${patch} &>${T}/elibtool.log
58 ret=$?
59 export ELT_APPLIED_PATCHES="${ELT_APPLIED_PATCHES} ${patch##*/}"
60 else
61 ret=1
62 fi
63
64 return ${ret}
65 }
66
67 #
68 # Run through the patches in $2 and see if any
69 # apply to $1 ...
70 #
71 ELT_walk_patches() {
72 local x=
73 local y=
74 local ret=1
75 local patch_dir=
76
77 if [ -n "$2" ]
78 then
79 if [ -d "${ELT_PATCH_DIR}/$2" ]
80 then
81 patch_dir="${ELT_PATCH_DIR}/$2"
82 else
83 return ${ret}
84 fi
85
86 for x in $(ls -d "${patch_dir}"/* 2>/dev/null)
87 do
88 if [ -n "${x}" -a -f "${x}" ]
89 then
90 # For --remove-internal-dep ...
91 if [ -n "$3" ]
92 then
93 # For replace @REM_INT_DEP@ with what was passed
94 # to --remove-internal-dep
95 sed -e "s|@REM_INT_DEP@|$3|g" ${x} > \
96 ${T}/$$.rem_int_deps.patch
97
98 x="${T}/$$.rem_int_deps.patch"
99 fi
100
101 if ELT_try_and_apply_patch "$1" "${x}"
102 then
103 ret=0
104 break
105 fi
106 fi
107 done
108 fi
109
110 return ${ret}
111 }
112
113 elibtoolize() {
114 local x=
115 local y=
116 local do_portage="no"
117 local do_reversedeps="no"
118 local do_only_patches="no"
119 local deptoremove=
120 local my_dirlist=
121 local elt_patches="portage relink max_cmd_len sed test tmp"
122 local start_dir="${PWD}"
123
124 my_dirlist="$(ELT_find_ltmain_sh)"
125
126 for x in "$@"
127 do
128 case "${x}" in
129 "--portage")
130 # Only apply portage patch, and don't
131 # 'libtoolize --copy --force' if all patches fail.
132 do_portage="yes"
133 ;;
134 "--reverse-deps")
135 # Apply the reverse-deps patch
136 # http://bugzilla.gnome.org/show_bug.cgi?id=75635
137 do_reversedeps="yes"
138 elt_patches="${elt_patches} fix-relink"
139 ;;
140 "--patch-only")
141 # Do not run libtoolize if none of the patches apply ..
142 do_only_patches="yes"
143 ;;
144 "^--remove-internal-dep="*)
145 # We will replace @REM_INT_DEP@ with what is needed
146 # in ELT_walk_patches() ...
147 deptoremove="$(echo "${x}" | sed -e 's|--remove-internal-dep=||')"
148
149 # Add the patch for this ...
150 [ -n "${deptoremove}" ] && elt_patches="${elt_patches} rem-int-dep"
151 ;;
152 "--shallow")
153 # Only patch the ltmain.sh in ${S}
154 if [ -f "${S}/ltmain.sh" ]
155 then
156 my_dirlist="${S}"
157 else
158 my_dirlist=
159 fi
160 ;;
161 "--no-uclibc")
162 NO_UCLIBCTOOLIZE=1
163 ;;
164 esac
165 done
166
167 if use ppc-macos ; then
168 glibtoolize --copy --force
169 darwintoolize
170 fi
171
172 for x in ${my_dirlist}
173 do
174 local tmp="$(echo "${x}" | sed -e "s|${S}||")"
175 export ELT_APPLIED_PATCHES=
176
177 cd ${x}
178 einfo "Patching \${S}$(echo "/${tmp}/ltmain.sh" | sed -e 's|//|/|g') ..."
179
180 for y in ${elt_patches}
181 do
182 local ret=0
183
184 case "${y}" in
185 "rem-int-dep")
186 ELT_walk_patches "${x}/ltmain.sh" "${y}" "${deptoremove}"
187 ret=$?
188 ;;
189 "fix-relink")
190 # Do not apply if we do not have the relink patch applied ...
191 if [ -n "$(grep 'inst_prefix_dir' "${x}/ltmain.sh")" ]
192 then
193 ELT_walk_patches "${x}/ltmain.sh" "${y}"
194 ret=$?
195 fi
196 ;;
197 "max_cmd_len")
198 # Do not apply if $max_cmd_len is not used ...
199 if [ -n "$(grep 'max_cmd_len' "${x}/ltmain.sh")" ]
200 then
201 ELT_walk_patches "${x}/ltmain.sh" "${y}"
202 ret=$?
203 fi
204 ;;
205 *)
206 ELT_walk_patches "${x}/ltmain.sh" "${y}"
207 ret=$?
208 ;;
209 esac
210
211 if [ "${ret}" -ne 0 ]
212 then
213 case ${y} in
214 "relink")
215 # Critical patch, but could be applied ...
216 if [ -z "$(grep 'inst_prefix_dir' "${x}/ltmain.sh")" ]
217 then
218 ewarn " Could not apply relink.patch!"
219 fi
220 ;;
221 "portage")
222 # Critical patch - for this one we abort, as it can really
223 # cause breakage without it applied!
224 if [ "${do_portage}" = "yes" ]
225 then
226 # Stupid test to see if its already applied ...
227 if [ -z "$(grep 'We do not want portage' "${x}/ltmain.sh")" ]
228 then
229 echo
230 eerror "Portage patch requested, but failed to apply!"
231 die "Portage patch requested, but failed to apply!"
232 fi
233 else
234 ewarn " Could not apply portage.patch!"
235 ewarn " Please verify that it is not needed."
236 fi
237 ;;
238 esac
239 fi
240
241 if [ -z "${ELT_APPLIED_PATCHES}" ]
242 then
243 if [ "${do_portage}" = "no" -a \
244 "${do_reversedeps}" = "no" -a \
245 "${do_only_patches}" = "no" -a \
246 "${deptoremove}" = "" ]
247 then
248 # Sometimes ltmain.sh is in a subdirectory ...
249 if [ ! -f ${x}/configure.in -a ! -f ${x}/configure.ac ]
250 then
251 if [ -f ${x}/../configure.in -o -f ${x}/../configure.ac ]
252 then
253 cd ${x}/../
254 fi
255 fi
256
257 if which libtoolize &>/dev/null
258 then
259 ewarn "Cannot apply any patch, running libtoolize..."
260 libtoolize --copy --force
261 fi
262 cd ${x}
263 break
264 fi
265 fi
266 done
267 done
268
269 if [ -f libtool ]
270 then
271 rm -f libtool
272 fi
273
274 cd "${start_dir}"
275
276 uclibctoolize
277 }
278
279 uclibctoolize() {
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
317 darwintoolize() {
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 }

  ViewVC Help
Powered by ViewVC 1.1.20