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

Contents of /eclass/libtool.eclass

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.58 - (hide annotations) (download)
Sun Sep 4 20:45:57 2005 UTC (8 years, 10 months ago) by azarah
Branch: MAIN
Changes since 1.57: +9 -9 lines
Make grep tests more consistent.

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

  ViewVC Help
Powered by ViewVC 1.1.20