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

Contents of /eclass/libtool.eclass

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.82 - (hide annotations) (download)
Sat Mar 14 13:02:08 2009 UTC (5 years, 7 months ago) by vapier
Branch: MAIN
Changes since 1.81: +10 -2 lines
start an elibtoolize cross category #262042 by Sven Rebhan.

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

  ViewVC Help
Powered by ViewVC 1.1.20