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

Contents of /eclass/libtool.eclass

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.51 - (hide annotations) (download)
Fri Sep 2 09:35:17 2005 UTC (8 years, 10 months ago) by azarah
Branch: MAIN
Changes since 1.50: +9 -6 lines
Some misc cleanups, and do not warn if portage patch seems to be applied.

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

  ViewVC Help
Powered by ViewVC 1.1.20