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

Contents of /eclass/libtool.eclass

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.72 - (hide annotations) (download)
Tue May 9 17:50:17 2006 UTC (8 years, 4 months ago) by flameeyes
Branch: MAIN
Changes since 1.71: +2 -7 lines
Remove references to kde-fastinstall patch.

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 flameeyes 1.72 # $Header: /var/cvsroot/gentoo-x86/eclass/libtool.eclass,v 1.71 2006/04/29 12:18:30 flameeyes 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 azarah 1.60 if useq ppc-macos ; then
184 azarah 1.51 local opts
185     [[ -f Makefile.am ]] && opts="--automake"
186     glibtoolize --copy --force ${opts}
187 flameeyes 1.61
188 azarah 1.60 elt_patches="${elt_patches} darwin-ltconf darwin-ltmain"
189 usata 1.36 fi
190    
191 vapier 1.42 for x in ${my_dirlist} ; do
192 azarah 1.51 local tmp=$(echo "${x}" | sed -e "s|${WORKDIR}||")
193 azarah 1.24 export ELT_APPLIED_PATCHES=
194 azarah 1.53 export ELT_LTMAIN_SH="${x}/ltmain.sh"
195 mr_bones_ 1.27
196 azarah 1.52 [[ -f ${x}/.elibtoolized ]] && continue
197    
198 azarah 1.1 cd ${x}
199 azarah 1.51 einfo "Running elibtoolize in: $(echo "/${tmp}" | sed -e 's|//|/|g; s|^/||')"
200 azarah 1.2
201 vapier 1.42 for y in ${elt_patches} ; do
202 azarah 1.24 local ret=0
203    
204     case "${y}" in
205 azarah 1.64 "portage")
206     # Stupid test to see if its already applied ...
207     if [[ -z $(grep 'We do not want portage' "${x}/ltmain.sh") ]] ; then
208     ELT_walk_patches "${x}/ltmain.sh" "${y}"
209     ret=$?
210     fi
211     ;;
212 azarah 1.24 "rem-int-dep")
213     ELT_walk_patches "${x}/ltmain.sh" "${y}" "${deptoremove}"
214     ret=$?
215     ;;
216     "fix-relink")
217     # Do not apply if we do not have the relink patch applied ...
218 vapier 1.42 if [[ -n $(grep 'inst_prefix_dir' "${x}/ltmain.sh") ]] ; then
219 azarah 1.24 ELT_walk_patches "${x}/ltmain.sh" "${y}"
220     ret=$?
221     fi
222     ;;
223 azarah 1.25 "max_cmd_len")
224     # Do not apply if $max_cmd_len is not used ...
225 vapier 1.42 if [[ -n $(grep 'max_cmd_len' "${x}/ltmain.sh") ]] ; then
226 azarah 1.25 ELT_walk_patches "${x}/ltmain.sh" "${y}"
227     ret=$?
228     fi
229     ;;
230 azarah 1.53 "uclibc-conf")
231 azarah 1.58 if [[ -e ${x}/configure && \
232     -n $(grep 'Transform linux' "${x}/configure") ]] ; then
233 azarah 1.53 ELT_walk_patches "${x}/configure" "${y}"
234     ret=$?
235     # ltmain.sh and co might be in a subdirectory ...
236 azarah 1.58 elif [[ ! -e ${x}/configure && -e ${x}/../configure && \
237     -n $(grep 'Transform linux' "${x}/../configure") ]] ; then
238 azarah 1.53 ELT_walk_patches "${x}/../configure" "${y}"
239     ret=$?
240     fi
241     ;;
242     "uclibc-ltconf")
243 azarah 1.60 # Newer libtoolize clears ltconfig, as not used anymore
244     if [[ -s ${x}/ltconfig ]] ; then
245 azarah 1.53 ELT_walk_patches "${x}/ltconfig" "${y}"
246     ret=$?
247     fi
248     ;;
249 flameeyes 1.55 "fbsd-conf")
250 azarah 1.58 if [[ -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     # ltmain.sh and co might be in a subdirectory ...
255 azarah 1.58 elif [[ ! -e ${x}/configure && -e ${x}/../configure && \
256     -n $(grep 'version_type=freebsd-' "${x}/../configure") ]] ; then
257 flameeyes 1.55 ELT_walk_patches "${x}/../configure" "${y}"
258     ret=$?
259     fi
260     ;;
261 flameeyes 1.68 "fbsd-ltconf")
262     if [[ -s ${x}/ltconfig ]] ; then
263     ELT_walk_patches "${x}/ltconfig" "${y}"
264     ret=$?
265     fi
266     ;;
267 azarah 1.60 "darwin-ltconf")
268     # Newer libtoolize clears ltconfig, as not used anymore
269     if [[ -s ${x}/ltconfig ]] ; then
270     ELT_walk_patches "${x}/ltconfig" "${y}"
271     ret=$?
272     fi
273     ;;
274 azarah 1.24 *)
275     ELT_walk_patches "${x}/ltmain.sh" "${y}"
276     ret=$?
277     ;;
278     esac
279 mr_bones_ 1.27
280 vapier 1.42 if [[ ${ret} -ne 0 ]] ; then
281 azarah 1.3 case ${y} in
282 azarah 1.24 "relink")
283 azarah 1.59 local version=$(ELT_libtool_version "${x}/ltmain.sh")
284 azarah 1.24 # Critical patch, but could be applied ...
285 azarah 1.59 # FIXME: Still need a patch for ltmain.sh > 1.4.0
286     if [[ -z $(grep 'inst_prefix_dir' "${x}/ltmain.sh") && \
287     $(VER_to_int "${version}") -ge $(VER_to_int "1.4.0") ]] ; then
288 azarah 1.24 ewarn " Could not apply relink.patch!"
289     fi
290     ;;
291     "portage")
292     # Critical patch - for this one we abort, as it can really
293     # cause breakage without it applied!
294 vapier 1.42 if [[ ${do_portage} == "yes" ]] ; then
295 azarah 1.24 # Stupid test to see if its already applied ...
296 vapier 1.42 if [[ -z $(grep 'We do not want portage' "${x}/ltmain.sh") ]] ; then
297 azarah 1.24 echo
298     eerror "Portage patch requested, but failed to apply!"
299 azarah 1.63 eerror "Please bug azarah or vapier to add proper patch."
300 azarah 1.24 die "Portage patch requested, but failed to apply!"
301     fi
302     else
303 azarah 1.45 if [[ -n $(grep 'We do not want portage' "${x}/ltmain.sh") ]] ; then
304 azarah 1.51 # ewarn " Portage patch seems to be already applied."
305     # ewarn " Please verify that it is not needed."
306     :
307 azarah 1.45 else
308 azarah 1.46 local version=$( \
309     eval $(grep -e '^[[:space:]]*VERSION=' "${x}/ltmain.sh"); \
310     echo "${VERSION}")
311    
312 azarah 1.45 echo
313 azarah 1.46 eerror "Portage patch failed to apply (ltmain.sh version ${version})!"
314 azarah 1.63 eerror "Please bug azarah or vapier to add proper patch."
315 azarah 1.45 die "Portage patch failed to apply!"
316     fi
317     # We do not want to run libtoolize ...
318     ELT_APPLIED_PATCHES="portage"
319 azarah 1.3 fi
320     ;;
321 azarah 1.53 "uclibc-"*)
322     [[ ${CHOST} == *"-uclibc" ]] && \
323     ewarn " uClibc patch set '${y}' failed to apply!"
324     ;;
325 flameeyes 1.55 "fbsd-"*)
326 azarah 1.60 if [[ ${CHOST} == *"-freebsd"* ]] ; then
327 flameeyes 1.65 if [[ -z $(grep 'Handle Gentoo/FreeBSD as it was Linux' \
328     "${x}/configure" "${x}/../configure" 2>/dev/null) ]]; then
329 flameeyes 1.61 eerror " FreeBSD patch set '${y}' failed to apply!"
330     die "FreeBSD patch set '${y}' failed to apply!"
331     fi
332 azarah 1.60 fi
333     ;;
334     "darwin-"*)
335     useq ppc-macos && \
336     ewarn " Darwin patch set '${y}' failed to apply!"
337 flameeyes 1.55 ;;
338 azarah 1.3 esac
339 azarah 1.1 fi
340 azarah 1.52 done
341 azarah 1.11
342 azarah 1.52 if [[ -z ${ELT_APPLIED_PATCHES} ]] ; then
343     if [[ ${do_portage} == "no" && \
344     ${do_reversedeps} == "no" && \
345     ${do_only_patches} == "no" && \
346     ${deptoremove} == "" ]]
347     then
348     ewarn "Cannot apply any patches, please file a bug about this"
349     break
350    
351     # Sometimes ltmain.sh is in a subdirectory ...
352     if [[ ! -f ${x}/configure.in && ! -f ${x}/configure.ac ]] ; then
353     if [[ -f ${x}/../configure.in || -f ${x}/../configure.ac ]] ; then
354     cd "${x}"/../
355 azarah 1.24 fi
356 azarah 1.52 fi
357 azarah 1.24
358 azarah 1.52 if type -p libtoolize &> /dev/null ; then
359     ewarn "Cannot apply any patches, running libtoolize..."
360     libtoolize --copy --force
361 azarah 1.19 fi
362 azarah 1.52 cd "${x}"
363     break
364 azarah 1.1 fi
365 azarah 1.52 fi
366    
367     [[ -f ${x}/libtool ]] && rm -f "${x}/libtool"
368    
369     touch "${x}/.elibtoolized"
370 azarah 1.1 done
371 azarah 1.6
372 vapier 1.29 cd "${start_dir}"
373 vapier 1.30 }
374    
375     uclibctoolize() {
376 azarah 1.60 ewarn "uclibctoolize() is depreciated, please just use elibtoolize()!"
377 azarah 1.53 elibtoolize
378 azarah 1.1 }
379 usata 1.36
380     darwintoolize() {
381 azarah 1.60 ewarn "darwintoolize() is depreciated, please just use elibtoolize()!"
382     elibtoolize
383 usata 1.36 }
384 azarah 1.44
385     # char *VER_major(string)
386     #
387     # Return the Major (X of X.Y.Z) version
388     #
389     VER_major() {
390     [[ -z $1 ]] && return 1
391    
392     local VER=$@
393 azarah 1.57 echo "${VER%%[^[:digit:]]*}"
394 azarah 1.44 }
395    
396     # char *VER_minor(string)
397     #
398     # Return the Minor (Y of X.Y.Z) version
399     #
400     VER_minor() {
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     # char *VER_micro(string)
409     #
410     # Return the Micro (Z of X.Y.Z) version.
411     #
412     VER_micro() {
413     [[ -z $1 ]] && return 1
414    
415     local VER=$@
416     VER=${VER#*.*.}
417 azarah 1.57 echo "${VER%%[^[:digit:]]*}"
418 azarah 1.44 }
419    
420     # int VER_to_int(string)
421     #
422     # Convert a string type version (2.4.0) to an int (132096)
423     # for easy compairing or versions ...
424     #
425     VER_to_int() {
426     [[ -z $1 ]] && return 1
427    
428     local VER_MAJOR=$(VER_major "$1")
429     local VER_MINOR=$(VER_minor "$1")
430     local VER_MICRO=$(VER_micro "$1")
431     local VER_int=$(( VER_MAJOR * 65536 + VER_MINOR * 256 + VER_MICRO ))
432    
433     # We make version 1.0.0 the minimum version we will handle as
434     # a sanity check ... if its less, we fail ...
435     if [[ ${VER_int} -ge 65536 ]] ; then
436     echo "${VER_int}"
437     return 0
438     fi
439    
440     echo 1
441     return 1
442     }

  ViewVC Help
Powered by ViewVC 1.1.20