| 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.43 2005/02/27 20:29:04 azarah Exp $ |
3 | # $Header: /var/cvsroot/gentoo-x86/eclass/libtool.eclass,v 1.44 2005/03/23 18:03:21 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); echo "${VERSION}") |
71 | local version=$(eval $(grep -e '^[[:space:]]*VERSION=' $1); \ |
|
|
72 | echo "${VERSION}") |
| 72 | |
73 | |
| 73 | if [[ -n $2 ]] ; then |
74 | if [[ -n $2 ]] ; then |
| 74 | if [[ -d ${ELT_PATCH_DIR}/$2 ]] ; then |
75 | if [[ -d ${ELT_PATCH_DIR}/$2 ]] ; then |
| 75 | patch_dir="${ELT_PATCH_DIR}/$2" |
76 | patch_dir="${ELT_PATCH_DIR}/$2" |
| 76 | else |
77 | else |
| 77 | return ${ret} |
78 | return ${ret} |
| 78 | fi |
79 | fi |
| 79 | |
80 | |
| 80 | # First check a version specific patch, if not check major.minor* |
81 | if [[ -z ${version} ]] ; then |
| 81 | for y in ${version} $(echo "${version}" | cut -d. -f1,2) ; do |
82 | eerror "Could not get VERSION for ${1##*/}!" |
| 82 | [[ -z ${y} ]] && continue |
83 | die "Could not get VERSION for ${1##*/}!" |
|
|
84 | fi |
|
|
85 | |
|
|
86 | # Go through the patches in reverse order (large to small) |
| 83 | for x in $(ls -d "${patch_dir}/${y}"* 2> /dev/null) ; do |
87 | for x in $(ls -d "${patch_dir}"/* 2> /dev/null | sort -r) ; do |
| 84 | 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 |
| 85 | # For --remove-internal-dep ... |
94 | # For --remove-internal-dep ... |
| 86 | if [[ -n $3 ]] ; then |
95 | if [[ -n $3 ]] ; then |
| 87 | # For replace @REM_INT_DEP@ with what was passed |
96 | # For replace @REM_INT_DEP@ with what was passed |
| 88 | # to --remove-internal-dep |
97 | # to --remove-internal-dep |
| 89 | sed -e "s|@REM_INT_DEP@|$3|g" ${x} > \ |
98 | sed -e "s|@REM_INT_DEP@|$3|g" ${x} > \ |
| 90 | ${T}/$$.rem_int_deps.patch |
99 | ${T}/$$.rem_int_deps.patch |
| 91 | |
100 | |
| 92 | x="${T}/$$.rem_int_deps.patch" |
101 | x="${T}/$$.rem_int_deps.patch" |
| 93 | fi |
|
|
| 94 | |
|
|
| 95 | if ELT_try_and_apply_patch "$1" "${x}" ; then |
|
|
| 96 | ret=0 |
|
|
| 97 | break |
|
|
| 98 | fi |
|
|
| 99 | fi |
102 | fi |
| 100 | done |
103 | |
|
|
104 | if ELT_try_and_apply_patch "$1" "${x}" ; then |
|
|
105 | ret=0 |
|
|
106 | break |
|
|
107 | fi |
|
|
108 | fi |
| 101 | done |
109 | done |
| 102 | |
|
|
| 103 | # If still nothing, try the rest. |
|
|
| 104 | if [[ ${ret} -eq 1 ]]; then |
|
|
| 105 | for x in $(ls -d "${patch_dir}"/* 2> /dev/null) ; do |
|
|
| 106 | if [[ -n ${x} && -f ${x} ]] ; then |
|
|
| 107 | # For --remove-internal-dep ... |
|
|
| 108 | if [[ -n $3 ]] ; then |
|
|
| 109 | # For replace @REM_INT_DEP@ with what was passed |
|
|
| 110 | # to --remove-internal-dep |
|
|
| 111 | sed -e "s|@REM_INT_DEP@|$3|g" ${x} > \ |
|
|
| 112 | ${T}/$$.rem_int_deps.patch |
|
|
| 113 | |
|
|
| 114 | x="${T}/$$.rem_int_deps.patch" |
|
|
| 115 | fi |
|
|
| 116 | |
|
|
| 117 | if ELT_try_and_apply_patch "$1" "${x}" ; then |
|
|
| 118 | ret=0 |
|
|
| 119 | break |
|
|
| 120 | fi |
|
|
| 121 | fi |
|
|
| 122 | done |
|
|
| 123 | fi |
|
|
| 124 | fi |
110 | fi |
| 125 | |
111 | |
| 126 | return ${ret} |
112 | return ${ret} |
| 127 | } |
113 | } |
| 128 | |
114 | |
| … | |
… | |
| 343 | eend $? "PLEASE CHECK ${x}" |
329 | eend $? "PLEASE CHECK ${x}" |
| 344 | ;; |
330 | ;; |
| 345 | esac |
331 | esac |
| 346 | done |
332 | done |
| 347 | } |
333 | } |
|
|
334 | |
|
|
335 | # char *VER_major(string) |
|
|
336 | # |
|
|
337 | # Return the Major (X of X.Y.Z) version |
|
|
338 | # |
|
|
339 | VER_major() { |
|
|
340 | [[ -z $1 ]] && return 1 |
|
|
341 | |
|
|
342 | local VER=$@ |
|
|
343 | echo ${VER%%[^[:digit:]]*} |
|
|
344 | } |
|
|
345 | |
|
|
346 | # char *VER_minor(string) |
|
|
347 | # |
|
|
348 | # Return the Minor (Y of X.Y.Z) version |
|
|
349 | # |
|
|
350 | VER_minor() { |
|
|
351 | [[ -z $1 ]] && return 1 |
|
|
352 | |
|
|
353 | local VER=$@ |
|
|
354 | VER=${VER#*.} |
|
|
355 | echo ${VER%%[^[:digit:]]*} |
|
|
356 | } |
|
|
357 | |
|
|
358 | # char *VER_micro(string) |
|
|
359 | # |
|
|
360 | # Return the Micro (Z of X.Y.Z) version. |
|
|
361 | # |
|
|
362 | VER_micro() { |
|
|
363 | [[ -z $1 ]] && return 1 |
|
|
364 | |
|
|
365 | local VER=$@ |
|
|
366 | VER=${VER#*.*.} |
|
|
367 | echo ${VER%%[^[:digit:]]*} |
|
|
368 | } |
|
|
369 | |
|
|
370 | # int VER_to_int(string) |
|
|
371 | # |
|
|
372 | # Convert a string type version (2.4.0) to an int (132096) |
|
|
373 | # for easy compairing or versions ... |
|
|
374 | # |
|
|
375 | VER_to_int() { |
|
|
376 | [[ -z $1 ]] && return 1 |
|
|
377 | |
|
|
378 | local VER_MAJOR=$(VER_major "$1") |
|
|
379 | local VER_MINOR=$(VER_minor "$1") |
|
|
380 | local VER_MICRO=$(VER_micro "$1") |
|
|
381 | local VER_int=$(( VER_MAJOR * 65536 + VER_MINOR * 256 + VER_MICRO )) |
|
|
382 | |
|
|
383 | # We make version 1.0.0 the minimum version we will handle as |
|
|
384 | # a sanity check ... if its less, we fail ... |
|
|
385 | if [[ ${VER_int} -ge 65536 ]] ; then |
|
|
386 | echo "${VER_int}" |
|
|
387 | return 0 |
|
|
388 | fi |
|
|
389 | |
|
|
390 | echo 1 |
|
|
391 | return 1 |
|
|
392 | } |