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

Contents of /eclass/libtool.eclass

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.56 - (hide annotations) (download)
Sun Sep 4 20:23:42 2005 UTC (8 years, 11 months ago) by azarah
Branch: MAIN
Changes since 1.55: +10 -7 lines
Make --no-uclibc work again.

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 azarah 1.56 # $Header: /var/cvsroot/gentoo-x86/eclass/libtool.eclass,v 1.55 2005/09/04 18:40:48 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.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     local patch="$2"
47    
48     # We only support patchlevel of 0 - why worry if its static patches?
49 vapier 1.42 if patch -p0 --dry-run $1 < ${patch} &> ${T}/elibtool.log ; then
50 vapier 1.37 einfo " Applying $(basename "$(dirname "${patch}")")-${patch##*/}.patch ..."
51 azarah 1.24 patch -p0 $1 < ${patch} &>${T}/elibtool.log
52     ret=$?
53     export ELT_APPLIED_PATCHES="${ELT_APPLIED_PATCHES} ${patch##*/}"
54     else
55     ret=1
56     fi
57    
58     return ${ret}
59     }
60    
61     #
62     # Run through the patches in $2 and see if any
63     # apply to $1 ...
64     #
65     ELT_walk_patches() {
66     local x=
67     local y=
68     local ret=1
69     local patch_dir=
70 azarah 1.53 local version=
71     local ltmain_sh=$1
72 swegener 1.54
73 azarah 1.53 [[ $1 == *"/configure" ]] && ltmain_sh=${ELT_LTMAIN_SH}
74     version=$(eval $(grep -e '^[[:space:]]*VERSION=' "${ltmain_sh}"); \
75 azarah 1.44 echo "${VERSION}")
76 azarah 1.2
77 vapier 1.42 if [[ -n $2 ]] ; then
78     if [[ -d ${ELT_PATCH_DIR}/$2 ]] ; then
79 azarah 1.24 patch_dir="${ELT_PATCH_DIR}/$2"
80     else
81     return ${ret}
82 azarah 1.4 fi
83 mr_bones_ 1.27
84 azarah 1.44 if [[ -z ${version} ]] ; then
85     eerror "Could not get VERSION for ${1##*/}!"
86     die "Could not get VERSION for ${1##*/}!"
87     fi
88 mr_bones_ 1.27
89 azarah 1.44 # Go through the patches in reverse order (large to small)
90     for x in $(ls -d "${patch_dir}"/* 2> /dev/null | sort -r) ; do
91     if [[ -n ${x} && -f ${x} ]] ; then
92     local ltver=$(VER_to_int "${version}")
93     local ptver=$(VER_to_int "${x##*/}")
94 swegener 1.50
95 azarah 1.44 # If libtool version smaller than patch version, skip patch.
96     [[ ${ltver} -lt ${ptver} ]] && continue
97     # For --remove-internal-dep ...
98     if [[ -n $3 ]] ; then
99     # For replace @REM_INT_DEP@ with what was passed
100     # to --remove-internal-dep
101     sed -e "s|@REM_INT_DEP@|$3|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.44 if ELT_try_and_apply_patch "$1" "${x}" ; then
108     ret=0
109     break
110 azarah 1.24 fi
111 azarah 1.44 fi
112     done
113 azarah 1.24 fi
114    
115     return ${ret}
116     }
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 azarah 1.56 local elt_patches="portage relink max_cmd_len sed test tmp"
128 vapier 1.29 local start_dir="${PWD}"
129 azarah 1.24
130     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     deptoremove="$(echo "${x}" | sed -e 's|--remove-internal-dep=||')"
153    
154     # Add the patch for this ...
155     [ -n "${deptoremove}" ] && elt_patches="${elt_patches} rem-int-dep"
156     ;;
157     "--shallow")
158     # Only patch the ltmain.sh in ${S}
159     if [ -f "${S}/ltmain.sh" ]
160     then
161     my_dirlist="${S}"
162     else
163     my_dirlist=
164     fi
165     ;;
166 vapier 1.40 "--no-uclibc")
167 azarah 1.56 do_uclibc="no"
168 vapier 1.40 ;;
169 vapier 1.42 *)
170     eerror "Invalid elibtoolize option: $x"
171     die "elibtoolize called with $x ??"
172 azarah 1.24 esac
173 azarah 1.4 done
174 azarah 1.1
175 azarah 1.56 [[ ${do_uclibc} == "yes" ]] && \
176     elt_patches="${elt_patches} uclibc-conf uclibc-ltconf"
177    
178     [[ ${CHOST} == *"-freebsd"* ]] && \
179     elt_patches="${elt_patches} fbsd-conf"
180    
181 usata 1.36 if use ppc-macos ; then
182 azarah 1.51 local opts
183     [[ -f Makefile.am ]] && opts="--automake"
184     glibtoolize --copy --force ${opts}
185 usata 1.36 darwintoolize
186     fi
187    
188 vapier 1.42 for x in ${my_dirlist} ; do
189 azarah 1.51 local tmp=$(echo "${x}" | sed -e "s|${WORKDIR}||")
190 azarah 1.24 export ELT_APPLIED_PATCHES=
191 azarah 1.53 export ELT_LTMAIN_SH="${x}/ltmain.sh"
192 mr_bones_ 1.27
193 azarah 1.52 [[ -f ${x}/.elibtoolized ]] && continue
194    
195 azarah 1.1 cd ${x}
196 azarah 1.51 einfo "Running elibtoolize in: $(echo "/${tmp}" | sed -e 's|//|/|g; s|^/||')"
197 azarah 1.2
198 vapier 1.42 for y in ${elt_patches} ; do
199 azarah 1.24 local ret=0
200    
201     case "${y}" in
202     "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     if [[ -e ${x}/configure ]] && \
222     grep 'Transform linux' "${x}/configure" > /dev/null ; then
223     ELT_walk_patches "${x}/configure" "${y}"
224     ret=$?
225     # ltmain.sh and co might be in a subdirectory ...
226     elif [[ ! -e ${x}/configure && -e ${x}/../configure ]] && \
227     grep 'Transform linux' "${x}/../configure" > /dev/null ; then
228     ELT_walk_patches "${x}/../configure" "${y}"
229     ret=$?
230     fi
231     ;;
232     "uclibc-ltconf")
233     if [[ -e ${x}/ltconfig ]] ; then
234     ELT_walk_patches "${x}/ltconfig" "${y}"
235     ret=$?
236     fi
237     ;;
238 flameeyes 1.55 "fbsd-conf")
239     if [[ -e ${x}/configure ]] && \
240     grep 'version_type=freebsd-' "${x}/configure" > /dev/null ; then
241     ELT_walk_patches "${x}/configure" "${y}"
242     ret=$?
243     # ltmain.sh and co might be in a subdirectory ...
244     elif [[ ! -e ${x}/configure && -e ${x}/../configure ]] && \
245     grep 'version_type=freebsd-' "${x}/../configure" > /dev/null ; then
246     ELT_walk_patches "${x}/../configure" "${y}"
247     ret=$?
248     fi
249     ;;
250 azarah 1.24 *)
251     ELT_walk_patches "${x}/ltmain.sh" "${y}"
252     ret=$?
253     ;;
254     esac
255 mr_bones_ 1.27
256 vapier 1.42 if [[ ${ret} -ne 0 ]] ; then
257 azarah 1.3 case ${y} in
258 azarah 1.24 "relink")
259     # Critical patch, but could be applied ...
260 vapier 1.42 if [[ -z $(grep 'inst_prefix_dir' "${x}/ltmain.sh") ]] ; then
261 azarah 1.24 ewarn " Could not apply relink.patch!"
262     fi
263     ;;
264     "portage")
265     # Critical patch - for this one we abort, as it can really
266     # cause breakage without it applied!
267 vapier 1.42 if [[ ${do_portage} == "yes" ]] ; then
268 azarah 1.24 # Stupid test to see if its already applied ...
269 vapier 1.42 if [[ -z $(grep 'We do not want portage' "${x}/ltmain.sh") ]] ; then
270 azarah 1.24 echo
271     eerror "Portage patch requested, but failed to apply!"
272     die "Portage patch requested, but failed to apply!"
273     fi
274     else
275 azarah 1.45 if [[ -n $(grep 'We do not want portage' "${x}/ltmain.sh") ]] ; then
276 azarah 1.51 # ewarn " Portage patch seems to be already applied."
277     # ewarn " Please verify that it is not needed."
278     :
279 azarah 1.45 else
280 azarah 1.46 local version=$( \
281     eval $(grep -e '^[[:space:]]*VERSION=' "${x}/ltmain.sh"); \
282     echo "${VERSION}")
283    
284 azarah 1.45 echo
285 azarah 1.46 eerror "Portage patch failed to apply (ltmain.sh version ${version})!"
286 azarah 1.45 die "Portage patch failed to apply!"
287     fi
288     # We do not want to run libtoolize ...
289     ELT_APPLIED_PATCHES="portage"
290 azarah 1.3 fi
291     ;;
292 azarah 1.53 "uclibc-"*)
293     [[ ${CHOST} == *"-uclibc" ]] && \
294     ewarn " uClibc patch set '${y}' failed to apply!"
295     ;;
296 flameeyes 1.55 "fbsd-"*)
297     [[ ${CHOST} == *"-freebsd"* ]] && \
298     eerror " FreeBSD patch set '${y}' failed to apply!"
299     die "FreeBSD patch set '${y}' failed to apply!"
300     ;;
301 azarah 1.3 esac
302 azarah 1.1 fi
303 azarah 1.52 done
304 azarah 1.11
305 azarah 1.52 if [[ -z ${ELT_APPLIED_PATCHES} ]] ; then
306     if [[ ${do_portage} == "no" && \
307     ${do_reversedeps} == "no" && \
308     ${do_only_patches} == "no" && \
309     ${deptoremove} == "" ]]
310     then
311     ewarn "Cannot apply any patches, please file a bug about this"
312     break
313    
314     # Sometimes ltmain.sh is in a subdirectory ...
315     if [[ ! -f ${x}/configure.in && ! -f ${x}/configure.ac ]] ; then
316     if [[ -f ${x}/../configure.in || -f ${x}/../configure.ac ]] ; then
317     cd "${x}"/../
318 azarah 1.24 fi
319 azarah 1.52 fi
320 azarah 1.24
321 azarah 1.52 if type -p libtoolize &> /dev/null ; then
322     ewarn "Cannot apply any patches, running libtoolize..."
323     libtoolize --copy --force
324 azarah 1.19 fi
325 azarah 1.52 cd "${x}"
326     break
327 azarah 1.1 fi
328 azarah 1.52 fi
329    
330     [[ -f ${x}/libtool ]] && rm -f "${x}/libtool"
331    
332     touch "${x}/.elibtoolized"
333 azarah 1.1 done
334 azarah 1.6
335 vapier 1.29 cd "${start_dir}"
336 vapier 1.30 }
337    
338     uclibctoolize() {
339 azarah 1.53 ewarn "uclibctoolize() is depreciated, please just use libtoolize()!"
340     elibtoolize
341 azarah 1.1 }
342 usata 1.36
343     darwintoolize() {
344     local targets=""
345     local x
346    
347 vapier 1.42 if [[ -z $* ]] ; then
348     targets=$(find ${S} -name ltmain.sh -o -name ltconfig)
349 usata 1.36 fi
350    
351     einfo "Applying Darwin/libtool patches ..."
352     for x in ${targets} ; do
353 vapier 1.42 [[ ! -s ${x} ]] && continue
354     case ${x##*/} in
355 usata 1.36 ltmain.sh|ltconfig)
356 vapier 1.42 local ver=$(grep '^VERSION=' ${x})
357     ver=${ver/VERSION=}
358     if [[ ${ver:0:3} == "1.4" || ${ver:0:3} == "1.5" ]] ; then
359 usata 1.36 ver="1.3" # 1.4, 1.5 and 1.3 are compat
360     fi
361    
362     ebegin " Fixing \${S}${x/${S}}"
363 vapier 1.42 patch -p0 "${x}" "${ELT_PATCH_DIR}/darwin/${x##*/}-${ver:0:3}.patch" > /dev/null
364 usata 1.36 eend $? "PLEASE CHECK ${x}"
365     ;;
366     esac
367     done
368     }
369 azarah 1.44
370     # char *VER_major(string)
371     #
372     # Return the Major (X of X.Y.Z) version
373     #
374     VER_major() {
375     [[ -z $1 ]] && return 1
376    
377     local VER=$@
378     echo ${VER%%[^[:digit:]]*}
379     }
380    
381     # char *VER_minor(string)
382     #
383     # Return the Minor (Y of X.Y.Z) version
384     #
385     VER_minor() {
386     [[ -z $1 ]] && return 1
387    
388     local VER=$@
389     VER=${VER#*.}
390     echo ${VER%%[^[:digit:]]*}
391     }
392    
393     # char *VER_micro(string)
394     #
395     # Return the Micro (Z of X.Y.Z) version.
396     #
397     VER_micro() {
398     [[ -z $1 ]] && return 1
399    
400     local VER=$@
401     VER=${VER#*.*.}
402     echo ${VER%%[^[:digit:]]*}
403     }
404    
405     # int VER_to_int(string)
406     #
407     # Convert a string type version (2.4.0) to an int (132096)
408     # for easy compairing or versions ...
409     #
410     VER_to_int() {
411     [[ -z $1 ]] && return 1
412    
413     local VER_MAJOR=$(VER_major "$1")
414     local VER_MINOR=$(VER_minor "$1")
415     local VER_MICRO=$(VER_micro "$1")
416     local VER_int=$(( VER_MAJOR * 65536 + VER_MINOR * 256 + VER_MICRO ))
417    
418     # We make version 1.0.0 the minimum version we will handle as
419     # a sanity check ... if its less, we fail ...
420     if [[ ${VER_int} -ge 65536 ]] ; then
421     echo "${VER_int}"
422     return 0
423     fi
424    
425     echo 1
426     return 1
427     }

  ViewVC Help
Powered by ViewVC 1.1.20