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

Diff of /eclass/libtool.eclass

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

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

Legend:
Removed from v.1.50  
changed lines
  Added in v.1.58

  ViewVC Help
Powered by ViewVC 1.1.20