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

Contents of /eclass/libtool.eclass

Parent Directory Parent Directory | Revision Log Revision Log


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

1 vapier 1.28 # Copyright 1999-2004 Gentoo Foundation
2 vapier 1.15 # Distributed under the terms of the GNU General Public License v2
3 vapier 1.41 # $Header: /var/cvsroot/gentoo-x86/eclass/libtool.eclass,v 1.40 2004/10/20 14:29:26 vapier Exp $
4 vapier 1.20 #
5 azarah 1.1 # Author: Martin Schlemmer <azarah@gentoo.org>
6 vapier 1.20 #
7 azarah 1.1 # This eclass patches ltmain.sh distributed with libtoolized packages with the
8 azarah 1.24 # relink and portage patch among others
9 vapier 1.15
10 azarah 1.24 ECLASS="libtool"
11     INHERITED="${INHERITED} ${ECLASS}"
12 danarmak 1.12
13 rac 1.34 # 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 azarah 1.1
23 vapier 1.22 DESCRIPTION="Based on the ${ECLASS} eclass"
24 azarah 1.1
25 azarah 1.24 ELIBTOOL_VERSION="2.0.1"
26 azarah 1.1
27    
28 azarah 1.24 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 mr_bones_ 1.27 for x in $(find "${S}" -name 'ltmain.sh')
39     do
40     dirlist="${dirlist} ${x%/*}"
41     done
42 azarah 1.24
43 mr_bones_ 1.27 echo "${dirlist}"
44 azarah 1.24 }
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 vapier 1.37 einfo " Applying $(basename "$(dirname "${patch}")")-${patch##*/}.patch ..."
57 azarah 1.24 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 azarah 1.2
77 azarah 1.24 if [ -n "$2" ]
78     then
79     if [ -d "${ELT_PATCH_DIR}/$2" ]
80 azarah 1.4 then
81 azarah 1.24 patch_dir="${ELT_PATCH_DIR}/$2"
82     else
83     return ${ret}
84 azarah 1.4 fi
85 mr_bones_ 1.27
86 azarah 1.24 for x in $(ls -d "${patch_dir}"/* 2>/dev/null)
87     do
88     if [ -n "${x}" -a -f "${x}" ]
89 azarah 1.4 then
90 azarah 1.24 # 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 mr_bones_ 1.27
98 azarah 1.24 x="${T}/$$.rem_int_deps.patch"
99     fi
100 mr_bones_ 1.27
101 azarah 1.24 if ELT_try_and_apply_patch "$1" "${x}"
102     then
103     ret=0
104     break
105     fi
106 azarah 1.4 fi
107 azarah 1.24 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 azarah 1.25 local elt_patches="portage relink max_cmd_len sed test tmp"
122 vapier 1.29 local start_dir="${PWD}"
123 azarah 1.24
124     my_dirlist="$(ELT_find_ltmain_sh)"
125 mr_bones_ 1.27
126 vapier 1.30 for x in "$@"
127 azarah 1.24 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 vapier 1.40 "--no-uclibc")
162     NO_UCLIBCTOOLIZE=1
163     ;;
164 azarah 1.24 esac
165 azarah 1.4 done
166 azarah 1.1
167 usata 1.36 if use ppc-macos ; then
168     glibtoolize --copy --force
169     darwintoolize
170     fi
171    
172 azarah 1.24 for x in ${my_dirlist}
173 azarah 1.1 do
174 azarah 1.24 local tmp="$(echo "${x}" | sed -e "s|${S}||")"
175     export ELT_APPLIED_PATCHES=
176 mr_bones_ 1.27
177 azarah 1.1 cd ${x}
178 vapier 1.37 einfo "Patching \${S}$(echo "/${tmp}/ltmain.sh" | sed -e 's|//|/|g') ..."
179 azarah 1.2
180 azarah 1.24 for y in ${elt_patches}
181 azarah 1.1 do
182 azarah 1.24 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 azarah 1.25 "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 azarah 1.24 *)
206     ELT_walk_patches "${x}/ltmain.sh" "${y}"
207     ret=$?
208     ;;
209     esac
210 mr_bones_ 1.27
211 azarah 1.24 if [ "${ret}" -ne 0 ]
212 azarah 1.1 then
213 azarah 1.3 case ${y} in
214 azarah 1.24 "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 azarah 1.3 fi
237     ;;
238     esac
239 azarah 1.1 fi
240 azarah 1.11
241 azarah 1.24 if [ -z "${ELT_APPLIED_PATCHES}" ]
242 azarah 1.1 then
243 azarah 1.24 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 azarah 1.3 then
253 azarah 1.24 cd ${x}/../
254 azarah 1.3 fi
255 azarah 1.24 fi
256    
257     if which libtoolize &>/dev/null
258 azarah 1.19 then
259 azarah 1.24 ewarn "Cannot apply any patch, running libtoolize..."
260     libtoolize --copy --force
261 azarah 1.19 fi
262 azarah 1.24 cd ${x}
263     break
264 azarah 1.19 fi
265 azarah 1.1 fi
266     done
267     done
268 azarah 1.6
269 azarah 1.7 if [ -f libtool ]
270     then
271     rm -f libtool
272     fi
273    
274 vapier 1.29 cd "${start_dir}"
275 vapier 1.30
276     uclibctoolize
277     }
278    
279     uclibctoolize() {
280 vapier 1.39 [ -n "${NO_UCLIBCTOOLIZE}" ] && return 0
281 vapier 1.38
282 vapier 1.41 local errmsg=""
283     [ "${PORTAGE_LIBC}" = "uClibc" ] \
284     && errmsg="PLEASE CHECK" \
285     || errmsg="Already patched"
286 vapier 1.30 local targets=""
287     local x
288    
289     if [ -z "$@" ] ; then
290 vapier 1.32 targets="$(find ${S} -name configure -o -name ltconfig)"
291 vapier 1.30 fi
292    
293     einfo "Applying uClibc/libtool patches ..."
294     for x in ${targets} ; do
295 vapier 1.35 [ ! -s "${x}" ] && continue
296 vapier 1.31 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 vapier 1.41 eend $? "${errmsg} ${x}"
302 vapier 1.31 fi
303     ;;
304    
305     ltconfig)
306     local ver="$(grep '^VERSION=' ${x})"
307     ver="${ver/VERSION=}"
308 vapier 1.33 [ "${ver:0:3}" == "1.4" ] && ver="1.3" # 1.4 and 1.3 are compat
309 vapier 1.30 ebegin " Fixing \${S}${x/${S}}"
310 vapier 1.31 patch -p0 "${x}" "${ELT_PATCH_DIR}/uclibc/ltconfig-${ver:0:3}.patch" > /dev/null
311 vapier 1.41 eend $? "${errmsg} ${x}"
312 vapier 1.31 ;;
313     esac
314 vapier 1.30 done
315 azarah 1.1 }
316 usata 1.36
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