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

Contents of /eclass/libtool.eclass

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.78 - (hide annotations) (download)
Fri Sep 14 11:38:01 2007 UTC (7 years ago) by uberlord
Branch: MAIN
Changes since 1.77: +6 -2 lines
Apply install-sh patches

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

  ViewVC Help
Powered by ViewVC 1.1.20