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

Contents of /eclass/libtool.eclass

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.77 - (hide annotations) (download)
Fri Sep 14 06:49:45 2007 UTC (7 years, 2 months ago) by uberlord
Branch: MAIN
Changes since 1.76: +2 -2 lines
Add a patch for ltmain.sh-1.5 so that KDE ebuilds link correctly on FreeBSD, #182214

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.77 # $Header: /var/cvsroot/gentoo-x86/eclass/libtool.eclass,v 1.76 2007/05/30 15:45:34 cardoe 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.77 local elt_patches="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 azarah 1.24 *)
265     ELT_walk_patches "${x}/ltmain.sh" "${y}"
266     ret=$?
267     ;;
268     esac
269 mr_bones_ 1.27
270 vapier 1.42 if [[ ${ret} -ne 0 ]] ; then
271 azarah 1.3 case ${y} in
272 azarah 1.24 "relink")
273 azarah 1.59 local version=$(ELT_libtool_version "${x}/ltmain.sh")
274 azarah 1.24 # Critical patch, but could be applied ...
275 azarah 1.59 # FIXME: Still need a patch for ltmain.sh > 1.4.0
276     if [[ -z $(grep 'inst_prefix_dir' "${x}/ltmain.sh") && \
277     $(VER_to_int "${version}") -ge $(VER_to_int "1.4.0") ]] ; then
278 azarah 1.24 ewarn " Could not apply relink.patch!"
279     fi
280     ;;
281     "portage")
282     # Critical patch - for this one we abort, as it can really
283     # cause breakage without it applied!
284 vapier 1.42 if [[ ${do_portage} == "yes" ]] ; then
285 azarah 1.24 # Stupid test to see if its already applied ...
286 vapier 1.42 if [[ -z $(grep 'We do not want portage' "${x}/ltmain.sh") ]] ; then
287 azarah 1.24 echo
288     eerror "Portage patch requested, but failed to apply!"
289 azarah 1.63 eerror "Please bug azarah or vapier to add proper patch."
290 azarah 1.24 die "Portage patch requested, but failed to apply!"
291     fi
292     else
293 azarah 1.45 if [[ -n $(grep 'We do not want portage' "${x}/ltmain.sh") ]] ; then
294 azarah 1.51 # ewarn " Portage patch seems to be already applied."
295     # ewarn " Please verify that it is not needed."
296     :
297 azarah 1.45 else
298 azarah 1.46 local version=$( \
299     eval $(grep -e '^[[:space:]]*VERSION=' "${x}/ltmain.sh"); \
300     echo "${VERSION}")
301    
302 azarah 1.45 echo
303 azarah 1.46 eerror "Portage patch failed to apply (ltmain.sh version ${version})!"
304 azarah 1.63 eerror "Please bug azarah or vapier to add proper patch."
305 azarah 1.45 die "Portage patch failed to apply!"
306     fi
307     # We do not want to run libtoolize ...
308     ELT_APPLIED_PATCHES="portage"
309 azarah 1.3 fi
310     ;;
311 azarah 1.53 "uclibc-"*)
312     [[ ${CHOST} == *"-uclibc" ]] && \
313     ewarn " uClibc patch set '${y}' failed to apply!"
314     ;;
315 flameeyes 1.55 "fbsd-"*)
316 azarah 1.60 if [[ ${CHOST} == *"-freebsd"* ]] ; then
317 flameeyes 1.65 if [[ -z $(grep 'Handle Gentoo/FreeBSD as it was Linux' \
318     "${x}/configure" "${x}/../configure" 2>/dev/null) ]]; then
319 flameeyes 1.61 eerror " FreeBSD patch set '${y}' failed to apply!"
320     die "FreeBSD patch set '${y}' failed to apply!"
321     fi
322 azarah 1.60 fi
323     ;;
324     "darwin-"*)
325 grobian 1.74 [[ ${CHOST} == *"-darwin"* ]] && \
326 azarah 1.60 ewarn " Darwin patch set '${y}' failed to apply!"
327 flameeyes 1.55 ;;
328 azarah 1.3 esac
329 azarah 1.1 fi
330 azarah 1.52 done
331 azarah 1.11
332 azarah 1.52 if [[ -z ${ELT_APPLIED_PATCHES} ]] ; then
333     if [[ ${do_portage} == "no" && \
334     ${do_reversedeps} == "no" && \
335     ${do_only_patches} == "no" && \
336     ${deptoremove} == "" ]]
337     then
338     ewarn "Cannot apply any patches, please file a bug about this"
339 vapier 1.75 die
340 azarah 1.1 fi
341 azarah 1.52 fi
342    
343     [[ -f ${x}/libtool ]] && rm -f "${x}/libtool"
344    
345     touch "${x}/.elibtoolized"
346 azarah 1.1 done
347 azarah 1.6
348 vapier 1.29 cd "${start_dir}"
349 vapier 1.30 }
350    
351     uclibctoolize() {
352 cardoe 1.76 ewarn "uclibctoolize() is deprecated, please just use elibtoolize()!"
353 azarah 1.53 elibtoolize
354 azarah 1.1 }
355 usata 1.36
356     darwintoolize() {
357 cardoe 1.76 ewarn "darwintoolize() is deprecated, please just use elibtoolize()!"
358 azarah 1.60 elibtoolize
359 usata 1.36 }
360 azarah 1.44
361     # char *VER_major(string)
362     #
363     # Return the Major (X of X.Y.Z) version
364     #
365     VER_major() {
366     [[ -z $1 ]] && return 1
367    
368     local VER=$@
369 azarah 1.57 echo "${VER%%[^[:digit:]]*}"
370 azarah 1.44 }
371    
372     # char *VER_minor(string)
373     #
374     # Return the Minor (Y of X.Y.Z) version
375     #
376     VER_minor() {
377     [[ -z $1 ]] && return 1
378    
379     local VER=$@
380     VER=${VER#*.}
381 azarah 1.57 echo "${VER%%[^[:digit:]]*}"
382 azarah 1.44 }
383    
384     # char *VER_micro(string)
385     #
386     # Return the Micro (Z of X.Y.Z) version.
387     #
388     VER_micro() {
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     # int VER_to_int(string)
397     #
398     # Convert a string type version (2.4.0) to an int (132096)
399     # for easy compairing or versions ...
400     #
401     VER_to_int() {
402     [[ -z $1 ]] && return 1
403    
404     local VER_MAJOR=$(VER_major "$1")
405     local VER_MINOR=$(VER_minor "$1")
406     local VER_MICRO=$(VER_micro "$1")
407     local VER_int=$(( VER_MAJOR * 65536 + VER_MINOR * 256 + VER_MICRO ))
408    
409     # We make version 1.0.0 the minimum version we will handle as
410     # a sanity check ... if its less, we fail ...
411     if [[ ${VER_int} -ge 65536 ]] ; then
412     echo "${VER_int}"
413     return 0
414     fi
415    
416     echo 1
417     return 1
418     }

  ViewVC Help
Powered by ViewVC 1.1.20