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

Contents of /eclass/libtool.eclass

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.65 - (hide annotations) (download)
Thu Mar 30 12:29:23 2006 UTC (8 years ago) by flameeyes
Branch: MAIN
Changes since 1.64: +3 -2 lines
Check also for configure in the previous directory when using aux directory for libtool files.

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.65 # $Header: /var/cvsroot/gentoo-x86/eclass/libtool.eclass,v 1.64 2006/02/03 22:20:25 azarah 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.24 ELT_PATCH_DIR="${PORTDIR}/eclass/ELT-patches"
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.53 local version=
90     local ltmain_sh=$1
91 swegener 1.54
92 azarah 1.57 [[ ${file} == *"/configure" ]] && ltmain_sh=${ELT_LTMAIN_SH}
93 azarah 1.59 version=$(ELT_libtool_version "${ltmain_sh}")
94 azarah 1.2
95 azarah 1.57 if [[ -n ${patch_set} ]] ; then
96     if [[ -d ${ELT_PATCH_DIR}/${patch_set} ]] ; then
97     patch_dir="${ELT_PATCH_DIR}/${patch_set}"
98 azarah 1.24 else
99 azarah 1.57 return "${ret}"
100 azarah 1.4 fi
101 mr_bones_ 1.27
102 azarah 1.59 if [[ ${version} == "0" ]] ; then
103 azarah 1.57 eerror "Could not get VERSION for ${file##*/}!"
104     die "Could not get VERSION for ${file##*/}!"
105 azarah 1.44 fi
106 mr_bones_ 1.27
107 azarah 1.44 # Go through the patches in reverse order (large to small)
108 azarah 1.62 for x in $(ls -d "${patch_dir}"/* 2> /dev/null | grep -v 'CVS' | sort -r) ; do
109 azarah 1.44 if [[ -n ${x} && -f ${x} ]] ; then
110     local ltver=$(VER_to_int "${version}")
111     local ptver=$(VER_to_int "${x##*/}")
112 swegener 1.50
113 azarah 1.44 # If libtool version smaller than patch version, skip patch.
114     [[ ${ltver} -lt ${ptver} ]] && continue
115     # For --remove-internal-dep ...
116 azarah 1.57 if [[ -n ${rem_int_dep} ]] ; then
117 azarah 1.44 # For replace @REM_INT_DEP@ with what was passed
118     # to --remove-internal-dep
119 azarah 1.57 sed -e "s|@REM_INT_DEP@|${rem_int_dep}|g" ${x} > \
120     "${T}/$$.rem_int_deps.patch"
121 azarah 1.43
122 azarah 1.44 x="${T}/$$.rem_int_deps.patch"
123 azarah 1.24 fi
124 azarah 1.43
125 azarah 1.57 if ELT_try_and_apply_patch "${file}" "${x}" ; then
126 azarah 1.44 ret=0
127     break
128 azarah 1.24 fi
129 azarah 1.44 fi
130     done
131 azarah 1.24 fi
132    
133 azarah 1.57 return "${ret}"
134 azarah 1.24 }
135    
136     elibtoolize() {
137     local x=
138     local y=
139     local do_portage="no"
140     local do_reversedeps="no"
141     local do_only_patches="no"
142 azarah 1.56 local do_uclibc="yes"
143 azarah 1.24 local deptoremove=
144     local my_dirlist=
145 azarah 1.56 local elt_patches="portage relink max_cmd_len sed test tmp"
146 azarah 1.57 local start_dir=${PWD}
147 azarah 1.24
148 azarah 1.57 my_dirlist=$(ELT_find_ltmain_sh)
149 mr_bones_ 1.27
150 vapier 1.42 for x in "$@" ; do
151 azarah 1.24 case "${x}" in
152     "--portage")
153     # Only apply portage patch, and don't
154     # 'libtoolize --copy --force' if all patches fail.
155     do_portage="yes"
156     ;;
157     "--reverse-deps")
158     # Apply the reverse-deps patch
159     # http://bugzilla.gnome.org/show_bug.cgi?id=75635
160     do_reversedeps="yes"
161     elt_patches="${elt_patches} fix-relink"
162     ;;
163     "--patch-only")
164     # Do not run libtoolize if none of the patches apply ..
165     do_only_patches="yes"
166     ;;
167     "^--remove-internal-dep="*)
168     # We will replace @REM_INT_DEP@ with what is needed
169     # in ELT_walk_patches() ...
170 azarah 1.57 deptoremove=$(echo "${x}" | sed -e 's|--remove-internal-dep=||')
171 azarah 1.24
172     # Add the patch for this ...
173 azarah 1.57 [[ -n ${deptoremove} ]] && elt_patches="${elt_patches} rem-int-dep"
174 azarah 1.24 ;;
175     "--shallow")
176     # Only patch the ltmain.sh in ${S}
177 azarah 1.57 if [[ -f ${S}/ltmain.sh ]] ; then
178     my_dirlist=${S}
179 azarah 1.24 else
180     my_dirlist=
181     fi
182     ;;
183 vapier 1.40 "--no-uclibc")
184 azarah 1.56 do_uclibc="no"
185 vapier 1.40 ;;
186 vapier 1.42 *)
187 azarah 1.57 eerror "Invalid elibtoolize option: ${x}"
188     die "elibtoolize called with ${x} ??"
189 azarah 1.24 esac
190 azarah 1.4 done
191 azarah 1.1
192 azarah 1.56 [[ ${do_uclibc} == "yes" ]] && \
193     elt_patches="${elt_patches} uclibc-conf uclibc-ltconf"
194    
195     [[ ${CHOST} == *"-freebsd"* ]] && \
196     elt_patches="${elt_patches} fbsd-conf"
197    
198 azarah 1.60 if useq ppc-macos ; then
199 azarah 1.51 local opts
200     [[ -f Makefile.am ]] && opts="--automake"
201     glibtoolize --copy --force ${opts}
202 flameeyes 1.61
203 azarah 1.60 elt_patches="${elt_patches} darwin-ltconf darwin-ltmain"
204 usata 1.36 fi
205    
206 vapier 1.42 for x in ${my_dirlist} ; do
207 azarah 1.51 local tmp=$(echo "${x}" | sed -e "s|${WORKDIR}||")
208 azarah 1.24 export ELT_APPLIED_PATCHES=
209 azarah 1.53 export ELT_LTMAIN_SH="${x}/ltmain.sh"
210 mr_bones_ 1.27
211 azarah 1.52 [[ -f ${x}/.elibtoolized ]] && continue
212    
213 azarah 1.1 cd ${x}
214 azarah 1.51 einfo "Running elibtoolize in: $(echo "/${tmp}" | sed -e 's|//|/|g; s|^/||')"
215 azarah 1.2
216 vapier 1.42 for y in ${elt_patches} ; do
217 azarah 1.24 local ret=0
218    
219     case "${y}" in
220 azarah 1.64 "portage")
221     # Stupid test to see if its already applied ...
222     if [[ -z $(grep 'We do not want portage' "${x}/ltmain.sh") ]] ; then
223     ELT_walk_patches "${x}/ltmain.sh" "${y}"
224     ret=$?
225     fi
226     ;;
227 azarah 1.24 "rem-int-dep")
228     ELT_walk_patches "${x}/ltmain.sh" "${y}" "${deptoremove}"
229     ret=$?
230     ;;
231     "fix-relink")
232     # Do not apply if we do not have the relink patch applied ...
233 vapier 1.42 if [[ -n $(grep 'inst_prefix_dir' "${x}/ltmain.sh") ]] ; then
234 azarah 1.24 ELT_walk_patches "${x}/ltmain.sh" "${y}"
235     ret=$?
236     fi
237     ;;
238 azarah 1.25 "max_cmd_len")
239     # Do not apply if $max_cmd_len is not used ...
240 vapier 1.42 if [[ -n $(grep 'max_cmd_len' "${x}/ltmain.sh") ]] ; then
241 azarah 1.25 ELT_walk_patches "${x}/ltmain.sh" "${y}"
242     ret=$?
243     fi
244     ;;
245 azarah 1.53 "uclibc-conf")
246 azarah 1.58 if [[ -e ${x}/configure && \
247     -n $(grep 'Transform linux' "${x}/configure") ]] ; then
248 azarah 1.53 ELT_walk_patches "${x}/configure" "${y}"
249     ret=$?
250     # ltmain.sh and co might be in a subdirectory ...
251 azarah 1.58 elif [[ ! -e ${x}/configure && -e ${x}/../configure && \
252     -n $(grep 'Transform linux' "${x}/../configure") ]] ; then
253 azarah 1.53 ELT_walk_patches "${x}/../configure" "${y}"
254     ret=$?
255     fi
256     ;;
257     "uclibc-ltconf")
258 azarah 1.60 # Newer libtoolize clears ltconfig, as not used anymore
259     if [[ -s ${x}/ltconfig ]] ; then
260 azarah 1.53 ELT_walk_patches "${x}/ltconfig" "${y}"
261     ret=$?
262     fi
263     ;;
264 flameeyes 1.55 "fbsd-conf")
265 azarah 1.58 if [[ -e ${x}/configure && \
266     -n $(grep 'version_type=freebsd-' "${x}/configure") ]] ; then
267 flameeyes 1.55 ELT_walk_patches "${x}/configure" "${y}"
268     ret=$?
269     # ltmain.sh and co might be in a subdirectory ...
270 azarah 1.58 elif [[ ! -e ${x}/configure && -e ${x}/../configure && \
271     -n $(grep 'version_type=freebsd-' "${x}/../configure") ]] ; then
272 flameeyes 1.55 ELT_walk_patches "${x}/../configure" "${y}"
273     ret=$?
274     fi
275     ;;
276 azarah 1.60 "darwin-ltconf")
277     # Newer libtoolize clears ltconfig, as not used anymore
278     if [[ -s ${x}/ltconfig ]] ; then
279     ELT_walk_patches "${x}/ltconfig" "${y}"
280     ret=$?
281     fi
282     ;;
283 azarah 1.24 *)
284     ELT_walk_patches "${x}/ltmain.sh" "${y}"
285     ret=$?
286     ;;
287     esac
288 mr_bones_ 1.27
289 vapier 1.42 if [[ ${ret} -ne 0 ]] ; then
290 azarah 1.3 case ${y} in
291 azarah 1.24 "relink")
292 azarah 1.59 local version=$(ELT_libtool_version "${x}/ltmain.sh")
293 azarah 1.24 # Critical patch, but could be applied ...
294 azarah 1.59 # FIXME: Still need a patch for ltmain.sh > 1.4.0
295     if [[ -z $(grep 'inst_prefix_dir' "${x}/ltmain.sh") && \
296     $(VER_to_int "${version}") -ge $(VER_to_int "1.4.0") ]] ; then
297 azarah 1.24 ewarn " Could not apply relink.patch!"
298     fi
299     ;;
300     "portage")
301     # Critical patch - for this one we abort, as it can really
302     # cause breakage without it applied!
303 vapier 1.42 if [[ ${do_portage} == "yes" ]] ; then
304 azarah 1.24 # Stupid test to see if its already applied ...
305 vapier 1.42 if [[ -z $(grep 'We do not want portage' "${x}/ltmain.sh") ]] ; then
306 azarah 1.24 echo
307     eerror "Portage patch requested, but failed to apply!"
308 azarah 1.63 eerror "Please bug azarah or vapier to add proper patch."
309 azarah 1.24 die "Portage patch requested, but failed to apply!"
310     fi
311     else
312 azarah 1.45 if [[ -n $(grep 'We do not want portage' "${x}/ltmain.sh") ]] ; then
313 azarah 1.51 # ewarn " Portage patch seems to be already applied."
314     # ewarn " Please verify that it is not needed."
315     :
316 azarah 1.45 else
317 azarah 1.46 local version=$( \
318     eval $(grep -e '^[[:space:]]*VERSION=' "${x}/ltmain.sh"); \
319     echo "${VERSION}")
320    
321 azarah 1.45 echo
322 azarah 1.46 eerror "Portage patch failed to apply (ltmain.sh version ${version})!"
323 azarah 1.63 eerror "Please bug azarah or vapier to add proper patch."
324 azarah 1.45 die "Portage patch failed to apply!"
325     fi
326     # We do not want to run libtoolize ...
327     ELT_APPLIED_PATCHES="portage"
328 azarah 1.3 fi
329     ;;
330 azarah 1.53 "uclibc-"*)
331     [[ ${CHOST} == *"-uclibc" ]] && \
332     ewarn " uClibc patch set '${y}' failed to apply!"
333     ;;
334 flameeyes 1.55 "fbsd-"*)
335 azarah 1.60 if [[ ${CHOST} == *"-freebsd"* ]] ; then
336 flameeyes 1.65 if [[ -z $(grep 'Handle Gentoo/FreeBSD as it was Linux' \
337     "${x}/configure" "${x}/../configure" 2>/dev/null) ]]; then
338 flameeyes 1.61 eerror " FreeBSD patch set '${y}' failed to apply!"
339     die "FreeBSD patch set '${y}' failed to apply!"
340     fi
341 azarah 1.60 fi
342     ;;
343     "darwin-"*)
344     useq ppc-macos && \
345     ewarn " Darwin patch set '${y}' failed to apply!"
346 flameeyes 1.55 ;;
347 azarah 1.3 esac
348 azarah 1.1 fi
349 azarah 1.52 done
350 azarah 1.11
351 azarah 1.52 if [[ -z ${ELT_APPLIED_PATCHES} ]] ; then
352     if [[ ${do_portage} == "no" && \
353     ${do_reversedeps} == "no" && \
354     ${do_only_patches} == "no" && \
355     ${deptoremove} == "" ]]
356     then
357     ewarn "Cannot apply any patches, please file a bug about this"
358     break
359    
360     # Sometimes ltmain.sh is in a subdirectory ...
361     if [[ ! -f ${x}/configure.in && ! -f ${x}/configure.ac ]] ; then
362     if [[ -f ${x}/../configure.in || -f ${x}/../configure.ac ]] ; then
363     cd "${x}"/../
364 azarah 1.24 fi
365 azarah 1.52 fi
366 azarah 1.24
367 azarah 1.52 if type -p libtoolize &> /dev/null ; then
368     ewarn "Cannot apply any patches, running libtoolize..."
369     libtoolize --copy --force
370 azarah 1.19 fi
371 azarah 1.52 cd "${x}"
372     break
373 azarah 1.1 fi
374 azarah 1.52 fi
375    
376     [[ -f ${x}/libtool ]] && rm -f "${x}/libtool"
377    
378     touch "${x}/.elibtoolized"
379 azarah 1.1 done
380 azarah 1.6
381 vapier 1.29 cd "${start_dir}"
382 vapier 1.30 }
383    
384     uclibctoolize() {
385 azarah 1.60 ewarn "uclibctoolize() is depreciated, please just use elibtoolize()!"
386 azarah 1.53 elibtoolize
387 azarah 1.1 }
388 usata 1.36
389     darwintoolize() {
390 azarah 1.60 ewarn "darwintoolize() is depreciated, please just use elibtoolize()!"
391     elibtoolize
392 usata 1.36 }
393 azarah 1.44
394     # char *VER_major(string)
395     #
396     # Return the Major (X of X.Y.Z) version
397     #
398     VER_major() {
399     [[ -z $1 ]] && return 1
400    
401     local VER=$@
402 azarah 1.57 echo "${VER%%[^[:digit:]]*}"
403 azarah 1.44 }
404    
405     # char *VER_minor(string)
406     #
407     # Return the Minor (Y of X.Y.Z) version
408     #
409     VER_minor() {
410     [[ -z $1 ]] && return 1
411    
412     local VER=$@
413     VER=${VER#*.}
414 azarah 1.57 echo "${VER%%[^[:digit:]]*}"
415 azarah 1.44 }
416    
417     # char *VER_micro(string)
418     #
419     # Return the Micro (Z of X.Y.Z) version.
420     #
421     VER_micro() {
422     [[ -z $1 ]] && return 1
423    
424     local VER=$@
425     VER=${VER#*.*.}
426 azarah 1.57 echo "${VER%%[^[:digit:]]*}"
427 azarah 1.44 }
428    
429     # int VER_to_int(string)
430     #
431     # Convert a string type version (2.4.0) to an int (132096)
432     # for easy compairing or versions ...
433     #
434     VER_to_int() {
435     [[ -z $1 ]] && return 1
436    
437     local VER_MAJOR=$(VER_major "$1")
438     local VER_MINOR=$(VER_minor "$1")
439     local VER_MICRO=$(VER_micro "$1")
440     local VER_int=$(( VER_MAJOR * 65536 + VER_MINOR * 256 + VER_MICRO ))
441    
442     # We make version 1.0.0 the minimum version we will handle as
443     # a sanity check ... if its less, we fail ...
444     if [[ ${VER_int} -ge 65536 ]] ; then
445     echo "${VER_int}"
446     return 0
447     fi
448    
449     echo 1
450     return 1
451     }

  ViewVC Help
Powered by ViewVC 1.1.20