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

Diff of /eclass/libtool.eclass

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

Revision 1.41 Revision 1.42
1# Copyright 1999-2004 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.41 2004/11/22 14:55:57 vapier Exp $ 3# $Header: /var/cvsroot/gentoo-x86/eclass/libtool.eclass,v 1.42 2005/01/31 03:02:13 vapier 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
16# the files in the distribution. eliminating this dependency fixes 16# the files in the distribution. eliminating this dependency fixes
17# bug 65209, which is a showstopper for people doing installs using 17# bug 65209, which is a showstopper for people doing installs using
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#DEPEND="!bootstrap? ( sys-devel/libtool )"
22
23DESCRIPTION="Based on the ${ECLASS} eclass" 21DESCRIPTION="Based on the ${ECLASS} eclass"
24 22
25ELIBTOOL_VERSION="2.0.1" 23ELIBTOOL_VERSION="2.0.1"
26
27 24
28ELT_PATCH_DIR="${PORTDIR}/eclass/ELT-patches" 25ELT_PATCH_DIR="${PORTDIR}/eclass/ELT-patches"
29ELT_APPLIED_PATCHES= 26ELT_APPLIED_PATCHES=
30 27
31# 28#
33# 30#
34ELT_find_ltmain_sh() { 31ELT_find_ltmain_sh() {
35 local x= 32 local x=
36 local dirlist= 33 local dirlist=
37 34
38 for x in $(find "${S}" -name 'ltmain.sh') 35 for x in $(find "${S}" -name 'ltmain.sh') ; do
39 do
40 dirlist="${dirlist} ${x%/*}" 36 dirlist="${dirlist} ${x%/*}"
41 done 37 done
42 38
43 echo "${dirlist}" 39 echo "${dirlist}"
44} 40}
49ELT_try_and_apply_patch() { 45ELT_try_and_apply_patch() {
50 local ret=0 46 local ret=0
51 local patch="$2" 47 local patch="$2"
52 48
53 # 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?
54 if patch -p0 --dry-run $1 < ${patch} &>${T}/elibtool.log 50 if patch -p0 --dry-run $1 < ${patch} &> ${T}/elibtool.log ; then
55 then
56 einfo " Applying $(basename "$(dirname "${patch}")")-${patch##*/}.patch ..." 51 einfo " Applying $(basename "$(dirname "${patch}")")-${patch##*/}.patch ..."
57 patch -p0 $1 < ${patch} &>${T}/elibtool.log 52 patch -p0 $1 < ${patch} &>${T}/elibtool.log
58 ret=$? 53 ret=$?
59 export ELT_APPLIED_PATCHES="${ELT_APPLIED_PATCHES} ${patch##*/}" 54 export ELT_APPLIED_PATCHES="${ELT_APPLIED_PATCHES} ${patch##*/}"
60 else 55 else
72 local x= 67 local x=
73 local y= 68 local y=
74 local ret=1 69 local ret=1
75 local patch_dir= 70 local patch_dir=
76 71
77 if [ -n "$2" ] 72 if [[ -n $2 ]] ; then
78 then
79 if [ -d "${ELT_PATCH_DIR}/$2" ] 73 if [[ -d ${ELT_PATCH_DIR}/$2 ]] ; then
80 then
81 patch_dir="${ELT_PATCH_DIR}/$2" 74 patch_dir="${ELT_PATCH_DIR}/$2"
82 else 75 else
83 return ${ret} 76 return ${ret}
84 fi 77 fi
85 78
86 for x in $(ls -d "${patch_dir}"/* 2>/dev/null) 79 for x in $(ls -d "${patch_dir}"/* 2> /dev/null) ; do
87 do 80 if [[ -n ${x} && -f ${x} ]] ; then
88 if [ -n "${x}" -a -f "${x}" ]
89 then
90 # For --remove-internal-dep ... 81 # For --remove-internal-dep ...
91 if [ -n "$3" ] 82 if [[ -n $3 ]] ; then
92 then
93 # For replace @REM_INT_DEP@ with what was passed 83 # For replace @REM_INT_DEP@ with what was passed
94 # to --remove-internal-dep 84 # to --remove-internal-dep
95 sed -e "s|@REM_INT_DEP@|$3|g" ${x} > \ 85 sed -e "s|@REM_INT_DEP@|$3|g" ${x} > \
96 ${T}/$$.rem_int_deps.patch 86 ${T}/$$.rem_int_deps.patch
97 87
98 x="${T}/$$.rem_int_deps.patch" 88 x="${T}/$$.rem_int_deps.patch"
99 fi 89 fi
100 90
101 if ELT_try_and_apply_patch "$1" "${x}" 91 if ELT_try_and_apply_patch "$1" "${x}" ; then
102 then
103 ret=0 92 ret=0
104 break 93 break
105 fi 94 fi
106 fi 95 fi
107 done 96 done
121 local elt_patches="portage relink max_cmd_len sed test tmp" 110 local elt_patches="portage relink max_cmd_len sed test tmp"
122 local start_dir="${PWD}" 111 local start_dir="${PWD}"
123 112
124 my_dirlist="$(ELT_find_ltmain_sh)" 113 my_dirlist="$(ELT_find_ltmain_sh)"
125 114
126 for x in "$@" 115 for x in "$@" ; do
127 do
128 case "${x}" in 116 case "${x}" in
129 "--portage") 117 "--portage")
130 # Only apply portage patch, and don't 118 # Only apply portage patch, and don't
131 # 'libtoolize --copy --force' if all patches fail. 119 # 'libtoolize --copy --force' if all patches fail.
132 do_portage="yes" 120 do_portage="yes"
159 fi 147 fi
160 ;; 148 ;;
161 "--no-uclibc") 149 "--no-uclibc")
162 NO_UCLIBCTOOLIZE=1 150 NO_UCLIBCTOOLIZE=1
163 ;; 151 ;;
152 *)
153 eerror "Invalid elibtoolize option: $x"
154 die "elibtoolize called with $x ??"
164 esac 155 esac
165 done 156 done
166 157
167 if use ppc-macos ; then 158 if use ppc-macos ; then
168 glibtoolize --copy --force 159 glibtoolize --copy --force
169 darwintoolize 160 darwintoolize
170 fi 161 fi
171 162
172 for x in ${my_dirlist} 163 for x in ${my_dirlist} ; do
173 do
174 local tmp="$(echo "${x}" | sed -e "s|${S}||")" 164 local tmp=$(echo "${x}" | sed -e "s|${S}||")
175 export ELT_APPLIED_PATCHES= 165 export ELT_APPLIED_PATCHES=
176 166
177 cd ${x} 167 cd ${x}
178 einfo "Patching \${S}$(echo "/${tmp}/ltmain.sh" | sed -e 's|//|/|g') ..." 168 einfo "Patching \${S}$(echo "/${tmp}/ltmain.sh" | sed -e 's|//|/|g') ..."
179 169
180 for y in ${elt_patches} 170 for y in ${elt_patches} ; do
181 do
182 local ret=0 171 local ret=0
183 172
184 case "${y}" in 173 case "${y}" in
185 "rem-int-dep") 174 "rem-int-dep")
186 ELT_walk_patches "${x}/ltmain.sh" "${y}" "${deptoremove}" 175 ELT_walk_patches "${x}/ltmain.sh" "${y}" "${deptoremove}"
187 ret=$? 176 ret=$?
188 ;; 177 ;;
189 "fix-relink") 178 "fix-relink")
190 # Do not apply if we do not have the relink patch applied ... 179 # Do not apply if we do not have the relink patch applied ...
191 if [ -n "$(grep 'inst_prefix_dir' "${x}/ltmain.sh")" ] 180 if [[ -n $(grep 'inst_prefix_dir' "${x}/ltmain.sh") ]] ; then
192 then
193 ELT_walk_patches "${x}/ltmain.sh" "${y}" 181 ELT_walk_patches "${x}/ltmain.sh" "${y}"
194 ret=$? 182 ret=$?
195 fi 183 fi
196 ;; 184 ;;
197 "max_cmd_len") 185 "max_cmd_len")
198 # Do not apply if $max_cmd_len is not used ... 186 # Do not apply if $max_cmd_len is not used ...
199 if [ -n "$(grep 'max_cmd_len' "${x}/ltmain.sh")" ] 187 if [[ -n $(grep 'max_cmd_len' "${x}/ltmain.sh") ]] ; then
200 then
201 ELT_walk_patches "${x}/ltmain.sh" "${y}" 188 ELT_walk_patches "${x}/ltmain.sh" "${y}"
202 ret=$? 189 ret=$?
203 fi 190 fi
204 ;; 191 ;;
205 *) 192 *)
206 ELT_walk_patches "${x}/ltmain.sh" "${y}" 193 ELT_walk_patches "${x}/ltmain.sh" "${y}"
207 ret=$? 194 ret=$?
208 ;; 195 ;;
209 esac 196 esac
210 197
211 if [ "${ret}" -ne 0 ] 198 if [[ ${ret} -ne 0 ]] ; then
212 then
213 case ${y} in 199 case ${y} in
214 "relink") 200 "relink")
215 # Critical patch, but could be applied ... 201 # Critical patch, but could be applied ...
216 if [ -z "$(grep 'inst_prefix_dir' "${x}/ltmain.sh")" ] 202 if [[ -z $(grep 'inst_prefix_dir' "${x}/ltmain.sh") ]] ; then
217 then
218 ewarn " Could not apply relink.patch!" 203 ewarn " Could not apply relink.patch!"
219 fi 204 fi
220 ;; 205 ;;
221 "portage") 206 "portage")
222 # Critical patch - for this one we abort, as it can really 207 # Critical patch - for this one we abort, as it can really
223 # cause breakage without it applied! 208 # cause breakage without it applied!
224 if [ "${do_portage}" = "yes" ] 209 if [[ ${do_portage} == "yes" ]] ; then
225 then
226 # Stupid test to see if its already applied ... 210 # Stupid test to see if its already applied ...
227 if [ -z "$(grep 'We do not want portage' "${x}/ltmain.sh")" ] 211 if [[ -z $(grep 'We do not want portage' "${x}/ltmain.sh") ]] ; then
228 then
229 echo 212 echo
230 eerror "Portage patch requested, but failed to apply!" 213 eerror "Portage patch requested, but failed to apply!"
231 die "Portage patch requested, but failed to apply!" 214 die "Portage patch requested, but failed to apply!"
232 fi 215 fi
233 else 216 else
236 fi 219 fi
237 ;; 220 ;;
238 esac 221 esac
239 fi 222 fi
240 223
241 if [ -z "${ELT_APPLIED_PATCHES}" ] 224 if [[ -z ${ELT_APPLIED_PATCHES} ]] ; then
242 then
243 if [ "${do_portage}" = "no" -a \ 225 if [[ ${do_portage} == "no" && \
244 "${do_reversedeps}" = "no" -a \ 226 ${do_reversedeps} == "no" && \
245 "${do_only_patches}" = "no" -a \ 227 ${do_only_patches} == "no" && \
246 "${deptoremove}" = "" ] 228 ${deptoremove} == "" ]]
247 then 229 then
248 # Sometimes ltmain.sh is in a subdirectory ... 230 # Sometimes ltmain.sh is in a subdirectory ...
249 if [ ! -f ${x}/configure.in -a ! -f ${x}/configure.ac ] 231 if [[ ! -f ${x}/configure.in && ! -f ${x}/configure.ac ]] ; then
250 then
251 if [ -f ${x}/../configure.in -o -f ${x}/../configure.ac ] 232 if [[ -f ${x}/../configure.in || -f ${x}/../configure.ac ]] ; then
252 then
253 cd ${x}/../ 233 cd "${x}"/../
254 fi 234 fi
255 fi 235 fi
256 236
257 if which libtoolize &>/dev/null 237 if type -p libtoolize &> /dev/null ; then
258 then
259 ewarn "Cannot apply any patch, running libtoolize..." 238 ewarn "Cannot apply any patch, running libtoolize..."
260 libtoolize --copy --force 239 libtoolize --copy --force
261 fi 240 fi
262 cd ${x} 241 cd "${x}"
263 break 242 break
264 fi 243 fi
265 fi 244 fi
266 done 245 done
267 done 246 done
268 247
269 if [ -f libtool ] 248 if [[ -f libtool ]] ; then
270 then
271 rm -f libtool 249 rm -f libtool
272 fi 250 fi
273 251
274 cd "${start_dir}" 252 cd "${start_dir}"
275 253
276 uclibctoolize 254 uclibctoolize
277} 255}
278 256
279uclibctoolize() { 257uclibctoolize() {
280 [ -n "${NO_UCLIBCTOOLIZE}" ] && return 0 258 [[ -n ${NO_UCLIBCTOOLIZE} ]] && return 0
281 259
282 local errmsg="" 260 local errmsg=""
283 [ "${PORTAGE_LIBC}" = "uClibc" ] \ 261 [[ ${CTARGET:-${CHOST}} == *-uclibc ]] \
284 && errmsg="PLEASE CHECK" \ 262 && errmsg="PLEASE CHECK" \
285 || errmsg="Already patched" 263 || errmsg="Already patched"
286 local targets="" 264 local targets=""
287 local x 265 local x
288 266
289 if [ -z "$@" ] ; then 267 if [[ -z $* ]] ; then
290 targets="$(find ${S} -name configure -o -name ltconfig)" 268 targets=$(find ${S} -name configure -o -name ltconfig)
291 fi 269 fi
292 270
293 einfo "Applying uClibc/libtool patches ..." 271 einfo "Applying uClibc/libtool patches ..."
294 for x in ${targets} ; do 272 for x in ${targets} ; do
295 [ ! -s "${x}" ] && continue 273 [[ ! -s ${x} ]] && continue
296 case $(basename "${x}") in 274 case ${x##*/} in
297 configure) 275 configure)
298 if grep 'Transform linux' "${x}" >/dev/null ; then 276 if grep 'Transform linux' "${x}" > /dev/null ; then
299 ebegin " Fixing \${S}${x/${S}}" 277 ebegin " Fixing \${S}${x/${S}}"
300 patch -p0 "${x}" "${ELT_PATCH_DIR}/uclibc/configure.patch" > /dev/null 278 patch -p0 "${x}" "${ELT_PATCH_DIR}/uclibc/configure.patch" > /dev/null
301 eend $? "${errmsg} ${x}" 279 eend $? "${errmsg} ${x}"
302 fi 280 fi
303 ;; 281 ;;
304 282
305 ltconfig) 283 ltconfig)
306 local ver="$(grep '^VERSION=' ${x})" 284 local ver=$(grep '^VERSION=' ${x})
307 ver="${ver/VERSION=}" 285 ver=${ver/VERSION=}
308 [ "${ver:0:3}" == "1.4" ] && ver="1.3" # 1.4 and 1.3 are compat 286 [[ ${ver:0:3} == "1.4" ]] && ver="1.3" # 1.4 and 1.3 are compat
309 ebegin " Fixing \${S}${x/${S}}" 287 ebegin " Fixing \${S}${x/${S}}"
310 patch -p0 "${x}" "${ELT_PATCH_DIR}/uclibc/ltconfig-${ver:0:3}.patch" > /dev/null 288 patch -p0 "${x}" "${ELT_PATCH_DIR}/uclibc/ltconfig-${ver:0:3}.patch" > /dev/null
311 eend $? "${errmsg} ${x}" 289 eend $? "${errmsg} ${x}"
312 ;; 290 ;;
313 esac 291 esac
316 294
317darwintoolize() { 295darwintoolize() {
318 local targets="" 296 local targets=""
319 local x 297 local x
320 298
321 if [ -z "$@" ] ; then 299 if [[ -z $* ]] ; then
322 targets="$(find ${S} -name ltmain.sh -o -name ltconfig)" 300 targets=$(find ${S} -name ltmain.sh -o -name ltconfig)
323 fi 301 fi
324 302
325 einfo "Applying Darwin/libtool patches ..." 303 einfo "Applying Darwin/libtool patches ..."
326 for x in ${targets} ; do 304 for x in ${targets} ; do
327 [ ! -s "${x}" ] && continue 305 [[ ! -s ${x} ]] && continue
328 case $(basename "${x}") in 306 case ${x##*/} in
329 ltmain.sh|ltconfig) 307 ltmain.sh|ltconfig)
330 local ver="$(grep '^VERSION=' ${x})" 308 local ver=$(grep '^VERSION=' ${x})
331 ver="${ver/VERSION=}" 309 ver=${ver/VERSION=}
332 if [ "${ver:0:3}" == "1.4" -o "${ver:0:3}" == "1.5" ]; 310 if [[ ${ver:0:3} == "1.4" || ${ver:0:3} == "1.5" ]] ; then
333 then
334 ver="1.3" # 1.4, 1.5 and 1.3 are compat 311 ver="1.3" # 1.4, 1.5 and 1.3 are compat
335 fi 312 fi
336 313
337 ebegin " Fixing \${S}${x/${S}}" 314 ebegin " Fixing \${S}${x/${S}}"
338 patch -p0 "${x}" "${ELT_PATCH_DIR}/darwin/$(basename "${x}")-${ver:0:3}.patch" > /dev/null 315 patch -p0 "${x}" "${ELT_PATCH_DIR}/darwin/${x##*/}-${ver:0:3}.patch" > /dev/null
339 eend $? "PLEASE CHECK ${x}" 316 eend $? "PLEASE CHECK ${x}"
340 ;; 317 ;;
341 esac 318 esac
342 done 319 done
343} 320}

Legend:
Removed from v.1.41  
changed lines
  Added in v.1.42

  ViewVC Help
Powered by ViewVC 1.1.20