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

Contents of /eclass/libtool.eclass

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.74 - (hide annotations) (download)
Thu Mar 1 18:48:02 2007 UTC (7 years, 4 months ago) by grobian
Branch: MAIN
Changes since 1.73: +4 -3 lines
Avoid QA warnings about ppc-macos not in USE by using CHOST like fbsd
does.

1 vapier 1.42 # Copyright 1999-2005 Gentoo Foundation
2 vapier 1.15 # Distributed under the terms of the GNU General Public License v2
3 grobian 1.74 # $Header: /var/cvsroot/gentoo-x86/eclass/libtool.eclass,v 1.73 2006/06/04 13:25:56 exg 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 danarmak 1.12
11 rac 1.34 # 2004.09.25 rac
12     # i have verified that at least one package can use this eclass and
13     # build properly even without libtool installed yet, probably using
14     # the files in the distribution. eliminating this dependency fixes
15     # bug 65209, which is a showstopper for people doing installs using
16     # stageballs <3. if anybody decides to revert this, please attempt
17     # to find an alternate way of resolving that bug at the same time.
18    
19 vapier 1.22 DESCRIPTION="Based on the ${ECLASS} eclass"
20 azarah 1.1
21 azarah 1.44 ELIBTOOL_VERSION="2.0.2"
22 azarah 1.1
23 azarah 1.67 ELT_PATCH_DIR="${ECLASSDIR}/ELT-patches"
24 azarah 1.24 ELT_APPLIED_PATCHES=
25 azarah 1.53 ELT_LTMAIN_SH=
26 azarah 1.24
27     #
28     # Returns all the directories containing ltmain.sh
29     #
30     ELT_find_ltmain_sh() {
31     local x=
32     local dirlist=
33    
34 vapier 1.42 for x in $(find "${S}" -name 'ltmain.sh') ; do
35 mr_bones_ 1.27 dirlist="${dirlist} ${x%/*}"
36     done
37 azarah 1.24
38 mr_bones_ 1.27 echo "${dirlist}"
39 azarah 1.24 }
40    
41     #
42     # See if we can apply $2 on $1, and if so, do it
43     #
44     ELT_try_and_apply_patch() {
45     local ret=0
46 azarah 1.57 local file=$1
47     local patch=$2
48 azarah 1.24
49     # We only support patchlevel of 0 - why worry if its static patches?
50 azarah 1.62 if patch -p0 --dry-run "${file}" "${patch}" &> "${T}/elibtool.log" ; then
51 vapier 1.37 einfo " Applying $(basename "$(dirname "${patch}")")-${patch##*/}.patch ..."
52 azarah 1.62 patch -p0 -g0 --no-backup-if-mismatch "${file}" "${patch}" \
53     &> "${T}/elibtool.log"
54 azarah 1.24 ret=$?
55     export ELT_APPLIED_PATCHES="${ELT_APPLIED_PATCHES} ${patch##*/}"
56     else
57     ret=1
58     fi
59    
60 azarah 1.57 return "${ret}"
61 azarah 1.24 }
62    
63     #
64 azarah 1.59 # Get string version of ltmain.sh or ltconfig (passed as $1)
65     #
66     ELT_libtool_version() {
67     local ltmain_sh=$1
68     local version=
69    
70     version=$(eval $(grep -e '^[[:space:]]*VERSION=' "${ltmain_sh}"); \
71     echo "${VERSION}")
72     [[ -z ${version} ]] && version="0"
73    
74     echo "${version}"
75     }
76    
77     #
78 azarah 1.24 # Run through the patches in $2 and see if any
79     # apply to $1 ...
80     #
81     ELT_walk_patches() {
82     local x=
83     local y=
84     local ret=1
85 azarah 1.57 local file=$1
86     local patch_set=$2
87 azarah 1.24 local patch_dir=
88 azarah 1.57 local rem_int_dep=$3
89 azarah 1.2
90 azarah 1.57 if [[ -n ${patch_set} ]] ; then
91     if [[ -d ${ELT_PATCH_DIR}/${patch_set} ]] ; then
92     patch_dir="${ELT_PATCH_DIR}/${patch_set}"
93 azarah 1.24 else
94 azarah 1.57 return "${ret}"
95 azarah 1.4 fi
96 mr_bones_ 1.27
97 azarah 1.44 # Go through the patches in reverse order (large to small)
98 azarah 1.62 for x in $(ls -d "${patch_dir}"/* 2> /dev/null | grep -v 'CVS' | sort -r) ; do
99 azarah 1.44 if [[ -n ${x} && -f ${x} ]] ; then
100     # For --remove-internal-dep ...
101 azarah 1.57 if [[ -n ${rem_int_dep} ]] ; then
102 azarah 1.44 # For replace @REM_INT_DEP@ with what was passed
103     # to --remove-internal-dep
104 azarah 1.57 sed -e "s|@REM_INT_DEP@|${rem_int_dep}|g" ${x} > \
105     "${T}/$$.rem_int_deps.patch"
106 azarah 1.43
107 azarah 1.44 x="${T}/$$.rem_int_deps.patch"
108 azarah 1.24 fi
109 azarah 1.43
110 azarah 1.57 if ELT_try_and_apply_patch "${file}" "${x}" ; then
111 azarah 1.44 ret=0
112     break
113 azarah 1.24 fi
114 azarah 1.44 fi
115     done
116 azarah 1.24 fi
117    
118 azarah 1.57 return "${ret}"
119 azarah 1.24 }
120    
121     elibtoolize() {
122     local x=
123     local y=
124     local do_portage="no"
125     local do_reversedeps="no"
126     local do_only_patches="no"
127 azarah 1.56 local do_uclibc="yes"
128 azarah 1.24 local deptoremove=
129     local my_dirlist=
130 flameeyes 1.72 local elt_patches="portage relink max_cmd_len sed test tmp"
131 azarah 1.57 local start_dir=${PWD}
132 azarah 1.24
133 azarah 1.57 my_dirlist=$(ELT_find_ltmain_sh)
134 mr_bones_ 1.27
135 vapier 1.42 for x in "$@" ; do
136 azarah 1.24 case "${x}" in
137     "--portage")
138     # Only apply portage patch, and don't
139     # 'libtoolize --copy --force' if all patches fail.
140     do_portage="yes"
141     ;;
142     "--reverse-deps")
143     # Apply the reverse-deps patch
144     # http://bugzilla.gnome.org/show_bug.cgi?id=75635
145     do_reversedeps="yes"
146     elt_patches="${elt_patches} fix-relink"
147     ;;
148     "--patch-only")
149     # Do not run libtoolize if none of the patches apply ..
150     do_only_patches="yes"
151     ;;
152     "^--remove-internal-dep="*)
153     # We will replace @REM_INT_DEP@ with what is needed
154     # in ELT_walk_patches() ...
155 azarah 1.57 deptoremove=$(echo "${x}" | sed -e 's|--remove-internal-dep=||')
156 azarah 1.24
157     # Add the patch for this ...
158 azarah 1.57 [[ -n ${deptoremove} ]] && elt_patches="${elt_patches} rem-int-dep"
159 azarah 1.24 ;;
160     "--shallow")
161     # Only patch the ltmain.sh in ${S}
162 azarah 1.57 if [[ -f ${S}/ltmain.sh ]] ; then
163     my_dirlist=${S}
164 azarah 1.24 else
165     my_dirlist=
166     fi
167     ;;
168 vapier 1.40 "--no-uclibc")
169 azarah 1.56 do_uclibc="no"
170 vapier 1.40 ;;
171 vapier 1.42 *)
172 azarah 1.57 eerror "Invalid elibtoolize option: ${x}"
173     die "elibtoolize called with ${x} ??"
174 azarah 1.24 esac
175 azarah 1.4 done
176 azarah 1.1
177 azarah 1.56 [[ ${do_uclibc} == "yes" ]] && \
178     elt_patches="${elt_patches} uclibc-conf uclibc-ltconf"
179    
180     [[ ${CHOST} == *"-freebsd"* ]] && \
181 flameeyes 1.68 elt_patches="${elt_patches} fbsd-conf fbsd-ltconf"
182 azarah 1.56
183 grobian 1.74 [[ ${CHOST} == *"-darwin"* ]] && \
184     elt_patches="${elt_patches} darwin-ltconf darwin-ltmain"
185 usata 1.36
186 vapier 1.42 for x in ${my_dirlist} ; do
187 azarah 1.51 local tmp=$(echo "${x}" | sed -e "s|${WORKDIR}||")
188 azarah 1.24 export ELT_APPLIED_PATCHES=
189 azarah 1.53 export ELT_LTMAIN_SH="${x}/ltmain.sh"
190 mr_bones_ 1.27
191 azarah 1.52 [[ -f ${x}/.elibtoolized ]] && continue
192    
193 azarah 1.1 cd ${x}
194 azarah 1.51 einfo "Running elibtoolize in: $(echo "/${tmp}" | sed -e 's|//|/|g; s|^/||')"
195 azarah 1.2
196 vapier 1.42 for y in ${elt_patches} ; do
197 azarah 1.24 local ret=0
198    
199     case "${y}" in
200 azarah 1.64 "portage")
201     # Stupid test to see if its already applied ...
202     if [[ -z $(grep 'We do not want portage' "${x}/ltmain.sh") ]] ; then
203     ELT_walk_patches "${x}/ltmain.sh" "${y}"
204     ret=$?
205     fi
206     ;;
207 azarah 1.24 "rem-int-dep")
208     ELT_walk_patches "${x}/ltmain.sh" "${y}" "${deptoremove}"
209     ret=$?
210     ;;
211     "fix-relink")
212     # Do not apply if we do not have the relink patch applied ...
213 vapier 1.42 if [[ -n $(grep 'inst_prefix_dir' "${x}/ltmain.sh") ]] ; then
214 azarah 1.24 ELT_walk_patches "${x}/ltmain.sh" "${y}"
215     ret=$?
216     fi
217     ;;
218 azarah 1.25 "max_cmd_len")
219     # Do not apply if $max_cmd_len is not used ...
220 vapier 1.42 if [[ -n $(grep 'max_cmd_len' "${x}/ltmain.sh") ]] ; then
221 azarah 1.25 ELT_walk_patches "${x}/ltmain.sh" "${y}"
222     ret=$?
223     fi
224     ;;
225 azarah 1.53 "uclibc-conf")
226 azarah 1.58 if [[ -e ${x}/configure && \
227     -n $(grep 'Transform linux' "${x}/configure") ]] ; then
228 azarah 1.53 ELT_walk_patches "${x}/configure" "${y}"
229     ret=$?
230     # ltmain.sh and co might be in a subdirectory ...
231 azarah 1.58 elif [[ ! -e ${x}/configure && -e ${x}/../configure && \
232     -n $(grep 'Transform linux' "${x}/../configure") ]] ; then
233 azarah 1.53 ELT_walk_patches "${x}/../configure" "${y}"
234     ret=$?
235     fi
236     ;;
237     "uclibc-ltconf")
238 azarah 1.60 # Newer libtoolize clears ltconfig, as not used anymore
239     if [[ -s ${x}/ltconfig ]] ; then
240 azarah 1.53 ELT_walk_patches "${x}/ltconfig" "${y}"
241     ret=$?
242     fi
243     ;;
244 flameeyes 1.55 "fbsd-conf")
245 azarah 1.58 if [[ -e ${x}/configure && \
246     -n $(grep 'version_type=freebsd-' "${x}/configure") ]] ; then
247 flameeyes 1.55 ELT_walk_patches "${x}/configure" "${y}"
248     ret=$?
249     # ltmain.sh and co might be in a subdirectory ...
250 azarah 1.58 elif [[ ! -e ${x}/configure && -e ${x}/../configure && \
251     -n $(grep 'version_type=freebsd-' "${x}/../configure") ]] ; then
252 flameeyes 1.55 ELT_walk_patches "${x}/../configure" "${y}"
253     ret=$?
254     fi
255     ;;
256 flameeyes 1.68 "fbsd-ltconf")
257     if [[ -s ${x}/ltconfig ]] ; then
258     ELT_walk_patches "${x}/ltconfig" "${y}"
259     ret=$?
260     fi
261     ;;
262 azarah 1.60 "darwin-ltconf")
263     # Newer libtoolize clears ltconfig, as not used anymore
264     if [[ -s ${x}/ltconfig ]] ; then
265     ELT_walk_patches "${x}/ltconfig" "${y}"
266     ret=$?
267     fi
268     ;;
269 azarah 1.24 *)
270     ELT_walk_patches "${x}/ltmain.sh" "${y}"
271     ret=$?
272     ;;
273     esac
274 mr_bones_ 1.27
275 vapier 1.42 if [[ ${ret} -ne 0 ]] ; then
276 azarah 1.3 case ${y} in
277 azarah 1.24 "relink")
278 azarah 1.59 local version=$(ELT_libtool_version "${x}/ltmain.sh")
279 azarah 1.24 # Critical patch, but could be applied ...
280 azarah 1.59 # FIXME: Still need a patch for ltmain.sh > 1.4.0
281     if [[ -z $(grep 'inst_prefix_dir' "${x}/ltmain.sh") && \
282     $(VER_to_int "${version}") -ge $(VER_to_int "1.4.0") ]] ; then
283 azarah 1.24 ewarn " Could not apply relink.patch!"
284     fi
285     ;;
286     "portage")
287     # Critical patch - for this one we abort, as it can really
288     # cause breakage without it applied!
289 vapier 1.42 if [[ ${do_portage} == "yes" ]] ; then
290 azarah 1.24 # Stupid test to see if its already applied ...
291 vapier 1.42 if [[ -z $(grep 'We do not want portage' "${x}/ltmain.sh") ]] ; then
292 azarah 1.24 echo
293     eerror "Portage patch requested, but failed to apply!"
294 azarah 1.63 eerror "Please bug azarah or vapier to add proper patch."
295 azarah 1.24 die "Portage patch requested, but failed to apply!"
296     fi
297     else
298 azarah 1.45 if [[ -n $(grep 'We do not want portage' "${x}/ltmain.sh") ]] ; then
299 azarah 1.51 # ewarn " Portage patch seems to be already applied."
300     # ewarn " Please verify that it is not needed."
301     :
302 azarah 1.45 else
303 azarah 1.46 local version=$( \
304     eval $(grep -e '^[[:space:]]*VERSION=' "${x}/ltmain.sh"); \
305     echo "${VERSION}")
306    
307 azarah 1.45 echo
308 azarah 1.46 eerror "Portage patch failed to apply (ltmain.sh version ${version})!"
309 azarah 1.63 eerror "Please bug azarah or vapier to add proper patch."
310 azarah 1.45 die "Portage patch failed to apply!"
311     fi
312     # We do not want to run libtoolize ...
313     ELT_APPLIED_PATCHES="portage"
314 azarah 1.3 fi
315     ;;
316 azarah 1.53 "uclibc-"*)
317     [[ ${CHOST} == *"-uclibc" ]] && \
318     ewarn " uClibc patch set '${y}' failed to apply!"
319     ;;
320 flameeyes 1.55 "fbsd-"*)
321 azarah 1.60 if [[ ${CHOST} == *"-freebsd"* ]] ; then
322 flameeyes 1.65 if [[ -z $(grep 'Handle Gentoo/FreeBSD as it was Linux' \
323     "${x}/configure" "${x}/../configure" 2>/dev/null) ]]; then
324 flameeyes 1.61 eerror " FreeBSD patch set '${y}' failed to apply!"
325     die "FreeBSD patch set '${y}' failed to apply!"
326     fi
327 azarah 1.60 fi
328     ;;
329     "darwin-"*)
330 grobian 1.74 [[ ${CHOST} == *"-darwin"* ]] && \
331 azarah 1.60 ewarn " Darwin patch set '${y}' failed to apply!"
332 flameeyes 1.55 ;;
333 azarah 1.3 esac
334 azarah 1.1 fi
335 azarah 1.52 done
336 azarah 1.11
337 azarah 1.52 if [[ -z ${ELT_APPLIED_PATCHES} ]] ; then
338     if [[ ${do_portage} == "no" && \
339     ${do_reversedeps} == "no" && \
340     ${do_only_patches} == "no" && \
341     ${deptoremove} == "" ]]
342     then
343     ewarn "Cannot apply any patches, please file a bug about this"
344     break
345    
346     # Sometimes ltmain.sh is in a subdirectory ...
347     if [[ ! -f ${x}/configure.in && ! -f ${x}/configure.ac ]] ; then
348     if [[ -f ${x}/../configure.in || -f ${x}/../configure.ac ]] ; then
349     cd "${x}"/../
350 azarah 1.24 fi
351 azarah 1.52 fi
352 azarah 1.24
353 azarah 1.52 if type -p libtoolize &> /dev/null ; then
354     ewarn "Cannot apply any patches, running libtoolize..."
355     libtoolize --copy --force
356 azarah 1.19 fi
357 azarah 1.52 cd "${x}"
358     break
359 azarah 1.1 fi
360 azarah 1.52 fi
361    
362     [[ -f ${x}/libtool ]] && rm -f "${x}/libtool"
363    
364     touch "${x}/.elibtoolized"
365 azarah 1.1 done
366 azarah 1.6
367 vapier 1.29 cd "${start_dir}"
368 vapier 1.30 }
369    
370     uclibctoolize() {
371 azarah 1.60 ewarn "uclibctoolize() is depreciated, please just use elibtoolize()!"
372 azarah 1.53 elibtoolize
373 azarah 1.1 }
374 usata 1.36
375     darwintoolize() {
376 azarah 1.60 ewarn "darwintoolize() is depreciated, please just use elibtoolize()!"
377     elibtoolize
378 usata 1.36 }
379 azarah 1.44
380     # char *VER_major(string)
381     #
382     # Return the Major (X of X.Y.Z) version
383     #
384     VER_major() {
385     [[ -z $1 ]] && return 1
386    
387     local VER=$@
388 azarah 1.57 echo "${VER%%[^[:digit:]]*}"
389 azarah 1.44 }
390    
391     # char *VER_minor(string)
392     #
393     # Return the Minor (Y of X.Y.Z) version
394     #
395     VER_minor() {
396     [[ -z $1 ]] && return 1
397    
398     local VER=$@
399     VER=${VER#*.}
400 azarah 1.57 echo "${VER%%[^[:digit:]]*}"
401 azarah 1.44 }
402    
403     # char *VER_micro(string)
404     #
405     # Return the Micro (Z of X.Y.Z) version.
406     #
407     VER_micro() {
408     [[ -z $1 ]] && return 1
409    
410     local VER=$@
411     VER=${VER#*.*.}
412 azarah 1.57 echo "${VER%%[^[:digit:]]*}"
413 azarah 1.44 }
414    
415     # int VER_to_int(string)
416     #
417     # Convert a string type version (2.4.0) to an int (132096)
418     # for easy compairing or versions ...
419     #
420     VER_to_int() {
421     [[ -z $1 ]] && return 1
422    
423     local VER_MAJOR=$(VER_major "$1")
424     local VER_MINOR=$(VER_minor "$1")
425     local VER_MICRO=$(VER_micro "$1")
426     local VER_int=$(( VER_MAJOR * 65536 + VER_MINOR * 256 + VER_MICRO ))
427    
428     # We make version 1.0.0 the minimum version we will handle as
429     # a sanity check ... if its less, we fail ...
430     if [[ ${VER_int} -ge 65536 ]] ; then
431     echo "${VER_int}"
432     return 0
433     fi
434    
435     echo 1
436     return 1
437     }

  ViewVC Help
Powered by ViewVC 1.1.20