1 | # Copyright 1999-2005 Gentoo Foundation |
1 | # Copyright 1999-2005 Gentoo Foundation |
2 | # Distributed under the terms of the GNU General Public License v2 |
2 | # Distributed under the terms of the GNU General Public License v2 |
3 | # $Header: /var/cvsroot/gentoo-x86/eclass/libtool.eclass,v 1.42 2005/01/31 03:02:13 vapier Exp $ |
3 | # $Header: /var/cvsroot/gentoo-x86/eclass/libtool.eclass,v 1.46 2005/05/11 15:15:03 azarah Exp $ |
4 | # |
4 | # |
5 | # Author: Martin Schlemmer <azarah@gentoo.org> |
5 | # Author: Martin Schlemmer <azarah@gentoo.org> |
6 | # |
6 | # |
7 | # This eclass patches ltmain.sh distributed with libtoolized packages with the |
7 | # This eclass patches ltmain.sh distributed with libtoolized packages with the |
8 | # relink and portage patch among others |
8 | # relink and portage patch among others |
… | |
… | |
18 | # stageballs <3. if anybody decides to revert this, please attempt |
18 | # stageballs <3. if anybody decides to revert this, please attempt |
19 | # to find an alternate way of resolving that bug at the same time. |
19 | # to find an alternate way of resolving that bug at the same time. |
20 | |
20 | |
21 | DESCRIPTION="Based on the ${ECLASS} eclass" |
21 | DESCRIPTION="Based on the ${ECLASS} eclass" |
22 | |
22 | |
23 | ELIBTOOL_VERSION="2.0.1" |
23 | ELIBTOOL_VERSION="2.0.2" |
24 | |
24 | |
25 | ELT_PATCH_DIR="${PORTDIR}/eclass/ELT-patches" |
25 | ELT_PATCH_DIR="${PORTDIR}/eclass/ELT-patches" |
26 | ELT_APPLIED_PATCHES= |
26 | ELT_APPLIED_PATCHES= |
27 | |
27 | |
28 | # |
28 | # |
… | |
… | |
66 | ELT_walk_patches() { |
66 | ELT_walk_patches() { |
67 | local x= |
67 | local x= |
68 | local y= |
68 | local y= |
69 | local ret=1 |
69 | local ret=1 |
70 | local patch_dir= |
70 | local patch_dir= |
|
|
71 | local version=$(eval $(grep -e '^[[:space:]]*VERSION=' $1); \ |
|
|
72 | echo "${VERSION}") |
71 | |
73 | |
72 | if [[ -n $2 ]] ; then |
74 | if [[ -n $2 ]] ; then |
73 | if [[ -d ${ELT_PATCH_DIR}/$2 ]] ; then |
75 | if [[ -d ${ELT_PATCH_DIR}/$2 ]] ; then |
74 | patch_dir="${ELT_PATCH_DIR}/$2" |
76 | patch_dir="${ELT_PATCH_DIR}/$2" |
75 | else |
77 | else |
76 | return ${ret} |
78 | return ${ret} |
77 | fi |
79 | fi |
78 | |
80 | |
|
|
81 | if [[ -z ${version} ]] ; then |
|
|
82 | eerror "Could not get VERSION for ${1##*/}!" |
|
|
83 | die "Could not get VERSION for ${1##*/}!" |
|
|
84 | fi |
|
|
85 | |
|
|
86 | # Go through the patches in reverse order (large to small) |
79 | for x in $(ls -d "${patch_dir}"/* 2> /dev/null) ; do |
87 | for x in $(ls -d "${patch_dir}"/* 2> /dev/null | sort -r) ; do |
80 | if [[ -n ${x} && -f ${x} ]] ; then |
88 | if [[ -n ${x} && -f ${x} ]] ; then |
|
|
89 | local ltver=$(VER_to_int "${version}") |
|
|
90 | local ptver=$(VER_to_int "${x##*/}") |
|
|
91 | |
|
|
92 | # If libtool version smaller than patch version, skip patch. |
|
|
93 | [[ ${ltver} -lt ${ptver} ]] && continue |
81 | # For --remove-internal-dep ... |
94 | # For --remove-internal-dep ... |
82 | if [[ -n $3 ]] ; then |
95 | if [[ -n $3 ]] ; then |
83 | # For replace @REM_INT_DEP@ with what was passed |
96 | # For replace @REM_INT_DEP@ with what was passed |
84 | # to --remove-internal-dep |
97 | # to --remove-internal-dep |
85 | sed -e "s|@REM_INT_DEP@|$3|g" ${x} > \ |
98 | sed -e "s|@REM_INT_DEP@|$3|g" ${x} > \ |
… | |
… | |
212 | echo |
225 | echo |
213 | eerror "Portage patch requested, but failed to apply!" |
226 | eerror "Portage patch requested, but failed to apply!" |
214 | die "Portage patch requested, but failed to apply!" |
227 | die "Portage patch requested, but failed to apply!" |
215 | fi |
228 | fi |
216 | else |
229 | else |
217 | ewarn " Could not apply portage.patch!" |
230 | if [[ -n $(grep 'We do not want portage' "${x}/ltmain.sh") ]] ; then |
|
|
231 | ewarn " Portage patch seems to be already applied." |
218 | ewarn " Please verify that it is not needed." |
232 | ewarn " Please verify that it is not needed." |
|
|
233 | else |
|
|
234 | local version=$( \ |
|
|
235 | eval $(grep -e '^[[:space:]]*VERSION=' "${x}/ltmain.sh"); \ |
|
|
236 | echo "${VERSION}") |
|
|
237 | |
|
|
238 | echo |
|
|
239 | eerror "Portage patch failed to apply (ltmain.sh version ${version})!" |
|
|
240 | die "Portage patch failed to apply!" |
|
|
241 | fi |
|
|
242 | # We do not want to run libtoolize ... |
|
|
243 | ELT_APPLIED_PATCHES="portage" |
219 | fi |
244 | fi |
220 | ;; |
245 | ;; |
221 | esac |
246 | esac |
222 | fi |
247 | fi |
223 | |
248 | |
… | |
… | |
316 | eend $? "PLEASE CHECK ${x}" |
341 | eend $? "PLEASE CHECK ${x}" |
317 | ;; |
342 | ;; |
318 | esac |
343 | esac |
319 | done |
344 | done |
320 | } |
345 | } |
|
|
346 | |
|
|
347 | # char *VER_major(string) |
|
|
348 | # |
|
|
349 | # Return the Major (X of X.Y.Z) version |
|
|
350 | # |
|
|
351 | VER_major() { |
|
|
352 | [[ -z $1 ]] && return 1 |
|
|
353 | |
|
|
354 | local VER=$@ |
|
|
355 | echo ${VER%%[^[:digit:]]*} |
|
|
356 | } |
|
|
357 | |
|
|
358 | # char *VER_minor(string) |
|
|
359 | # |
|
|
360 | # Return the Minor (Y of X.Y.Z) version |
|
|
361 | # |
|
|
362 | VER_minor() { |
|
|
363 | [[ -z $1 ]] && return 1 |
|
|
364 | |
|
|
365 | local VER=$@ |
|
|
366 | VER=${VER#*.} |
|
|
367 | echo ${VER%%[^[:digit:]]*} |
|
|
368 | } |
|
|
369 | |
|
|
370 | # char *VER_micro(string) |
|
|
371 | # |
|
|
372 | # Return the Micro (Z of X.Y.Z) version. |
|
|
373 | # |
|
|
374 | VER_micro() { |
|
|
375 | [[ -z $1 ]] && return 1 |
|
|
376 | |
|
|
377 | local VER=$@ |
|
|
378 | VER=${VER#*.*.} |
|
|
379 | echo ${VER%%[^[:digit:]]*} |
|
|
380 | } |
|
|
381 | |
|
|
382 | # int VER_to_int(string) |
|
|
383 | # |
|
|
384 | # Convert a string type version (2.4.0) to an int (132096) |
|
|
385 | # for easy compairing or versions ... |
|
|
386 | # |
|
|
387 | VER_to_int() { |
|
|
388 | [[ -z $1 ]] && return 1 |
|
|
389 | |
|
|
390 | local VER_MAJOR=$(VER_major "$1") |
|
|
391 | local VER_MINOR=$(VER_minor "$1") |
|
|
392 | local VER_MICRO=$(VER_micro "$1") |
|
|
393 | local VER_int=$(( VER_MAJOR * 65536 + VER_MINOR * 256 + VER_MICRO )) |
|
|
394 | |
|
|
395 | # We make version 1.0.0 the minimum version we will handle as |
|
|
396 | # a sanity check ... if its less, we fail ... |
|
|
397 | if [[ ${VER_int} -ge 65536 ]] ; then |
|
|
398 | echo "${VER_int}" |
|
|
399 | return 0 |
|
|
400 | fi |
|
|
401 | |
|
|
402 | echo 1 |
|
|
403 | return 1 |
|
|
404 | } |