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

Diff of /eclass/libtool.eclass

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

Revision 1.37 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.37 2004/10/19 19:51:12 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"
156 my_dirlist="${S}" 144 my_dirlist="${S}"
157 else 145 else
158 my_dirlist= 146 my_dirlist=
159 fi 147 fi
160 ;; 148 ;;
149 "--no-uclibc")
150 NO_UCLIBCTOOLIZE=1
151 ;;
152 *)
153 eerror "Invalid elibtoolize option: $x"
154 die "elibtoolize called with $x ??"
161 esac 155 esac
162 done 156 done
163 157
164 if use ppc-macos ; then 158 if use ppc-macos ; then
165 glibtoolize --copy --force 159 glibtoolize --copy --force
166 darwintoolize 160 darwintoolize
167 fi 161 fi
168 162
169 for x in ${my_dirlist} 163 for x in ${my_dirlist} ; do
170 do
171 local tmp="$(echo "${x}" | sed -e "s|${S}||")" 164 local tmp=$(echo "${x}" | sed -e "s|${S}||")
172 export ELT_APPLIED_PATCHES= 165 export ELT_APPLIED_PATCHES=
173 166
174 cd ${x} 167 cd ${x}
175 einfo "Patching \${S}$(echo "/${tmp}/ltmain.sh" | sed -e 's|//|/|g') ..." 168 einfo "Patching \${S}$(echo "/${tmp}/ltmain.sh" | sed -e 's|//|/|g') ..."
176 169
177 for y in ${elt_patches} 170 for y in ${elt_patches} ; do
178 do
179 local ret=0 171 local ret=0
180 172
181 case "${y}" in 173 case "${y}" in
182 "rem-int-dep") 174 "rem-int-dep")
183 ELT_walk_patches "${x}/ltmain.sh" "${y}" "${deptoremove}" 175 ELT_walk_patches "${x}/ltmain.sh" "${y}" "${deptoremove}"
184 ret=$? 176 ret=$?
185 ;; 177 ;;
186 "fix-relink") 178 "fix-relink")
187 # 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 ...
188 if [ -n "$(grep 'inst_prefix_dir' "${x}/ltmain.sh")" ] 180 if [[ -n $(grep 'inst_prefix_dir' "${x}/ltmain.sh") ]] ; then
189 then
190 ELT_walk_patches "${x}/ltmain.sh" "${y}" 181 ELT_walk_patches "${x}/ltmain.sh" "${y}"
191 ret=$? 182 ret=$?
192 fi 183 fi
193 ;; 184 ;;
194 "max_cmd_len") 185 "max_cmd_len")
195 # Do not apply if $max_cmd_len is not used ... 186 # Do not apply if $max_cmd_len is not used ...
196 if [ -n "$(grep 'max_cmd_len' "${x}/ltmain.sh")" ] 187 if [[ -n $(grep 'max_cmd_len' "${x}/ltmain.sh") ]] ; then
197 then
198 ELT_walk_patches "${x}/ltmain.sh" "${y}" 188 ELT_walk_patches "${x}/ltmain.sh" "${y}"
199 ret=$? 189 ret=$?
200 fi 190 fi
201 ;; 191 ;;
202 *) 192 *)
203 ELT_walk_patches "${x}/ltmain.sh" "${y}" 193 ELT_walk_patches "${x}/ltmain.sh" "${y}"
204 ret=$? 194 ret=$?
205 ;; 195 ;;
206 esac 196 esac
207 197
208 if [ "${ret}" -ne 0 ] 198 if [[ ${ret} -ne 0 ]] ; then
209 then
210 case ${y} in 199 case ${y} in
211 "relink") 200 "relink")
212 # Critical patch, but could be applied ... 201 # Critical patch, but could be applied ...
213 if [ -z "$(grep 'inst_prefix_dir' "${x}/ltmain.sh")" ] 202 if [[ -z $(grep 'inst_prefix_dir' "${x}/ltmain.sh") ]] ; then
214 then
215 ewarn " Could not apply relink.patch!" 203 ewarn " Could not apply relink.patch!"
216 fi 204 fi
217 ;; 205 ;;
218 "portage") 206 "portage")
219 # Critical patch - for this one we abort, as it can really 207 # Critical patch - for this one we abort, as it can really
220 # cause breakage without it applied! 208 # cause breakage without it applied!
221 if [ "${do_portage}" = "yes" ] 209 if [[ ${do_portage} == "yes" ]] ; then
222 then
223 # Stupid test to see if its already applied ... 210 # Stupid test to see if its already applied ...
224 if [ -z "$(grep 'We do not want portage' "${x}/ltmain.sh")" ] 211 if [[ -z $(grep 'We do not want portage' "${x}/ltmain.sh") ]] ; then
225 then
226 echo 212 echo
227 eerror "Portage patch requested, but failed to apply!" 213 eerror "Portage patch requested, but failed to apply!"
228 die "Portage patch requested, but failed to apply!" 214 die "Portage patch requested, but failed to apply!"
229 fi 215 fi
230 else 216 else
233 fi 219 fi
234 ;; 220 ;;
235 esac 221 esac
236 fi 222 fi
237 223
238 if [ -z "${ELT_APPLIED_PATCHES}" ] 224 if [[ -z ${ELT_APPLIED_PATCHES} ]] ; then
239 then
240 if [ "${do_portage}" = "no" -a \ 225 if [[ ${do_portage} == "no" && \
241 "${do_reversedeps}" = "no" -a \ 226 ${do_reversedeps} == "no" && \
242 "${do_only_patches}" = "no" -a \ 227 ${do_only_patches} == "no" && \
243 "${deptoremove}" = "" ] 228 ${deptoremove} == "" ]]
244 then 229 then
245 # Sometimes ltmain.sh is in a subdirectory ... 230 # Sometimes ltmain.sh is in a subdirectory ...
246 if [ ! -f ${x}/configure.in -a ! -f ${x}/configure.ac ] 231 if [[ ! -f ${x}/configure.in && ! -f ${x}/configure.ac ]] ; then
247 then
248 if [ -f ${x}/../configure.in -o -f ${x}/../configure.ac ] 232 if [[ -f ${x}/../configure.in || -f ${x}/../configure.ac ]] ; then
249 then
250 cd ${x}/../ 233 cd "${x}"/../
251 fi 234 fi
252 fi 235 fi
253 236
254 if which libtoolize &>/dev/null 237 if type -p libtoolize &> /dev/null ; then
255 then
256 ewarn "Cannot apply any patch, running libtoolize..." 238 ewarn "Cannot apply any patch, running libtoolize..."
257 libtoolize --copy --force 239 libtoolize --copy --force
258 fi 240 fi
259 cd ${x} 241 cd "${x}"
260 break 242 break
261 fi 243 fi
262 fi 244 fi
263 done 245 done
264 done 246 done
265 247
266 if [ -f libtool ] 248 if [[ -f libtool ]] ; then
267 then
268 rm -f libtool 249 rm -f libtool
269 fi 250 fi
270 251
271 cd "${start_dir}" 252 cd "${start_dir}"
272 253
273 uclibctoolize 254 uclibctoolize
274} 255}
275 256
276uclibctoolize() { 257uclibctoolize() {
258 [[ -n ${NO_UCLIBCTOOLIZE} ]] && return 0
259
260 local errmsg=""
261 [[ ${CTARGET:-${CHOST}} == *-uclibc ]] \
262 && errmsg="PLEASE CHECK" \
263 || errmsg="Already patched"
277 local targets="" 264 local targets=""
278 local x 265 local x
279 266
280 if [ -z "$@" ] ; then 267 if [[ -z $* ]] ; then
281 targets="$(find ${S} -name configure -o -name ltconfig)" 268 targets=$(find ${S} -name configure -o -name ltconfig)
282 fi 269 fi
283 270
284 einfo "Applying uClibc/libtool patches ..." 271 einfo "Applying uClibc/libtool patches ..."
285 for x in ${targets} ; do 272 for x in ${targets} ; do
286 [ ! -s "${x}" ] && continue 273 [[ ! -s ${x} ]] && continue
287 case $(basename "${x}") in 274 case ${x##*/} in
288 configure) 275 configure)
289 if grep 'Transform linux' "${x}" >/dev/null ; then 276 if grep 'Transform linux' "${x}" > /dev/null ; then
290 ebegin " Fixing \${S}${x/${S}}" 277 ebegin " Fixing \${S}${x/${S}}"
291 patch -p0 "${x}" "${ELT_PATCH_DIR}/uclibc/configure.patch" > /dev/null 278 patch -p0 "${x}" "${ELT_PATCH_DIR}/uclibc/configure.patch" > /dev/null
292 eend $? "PLEASE CHECK ${x}" 279 eend $? "${errmsg} ${x}"
293 fi 280 fi
294 ;; 281 ;;
295 282
296 ltconfig) 283 ltconfig)
297 local ver="$(grep '^VERSION=' ${x})" 284 local ver=$(grep '^VERSION=' ${x})
298 ver="${ver/VERSION=}" 285 ver=${ver/VERSION=}
299 [ "${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
300 ebegin " Fixing \${S}${x/${S}}" 287 ebegin " Fixing \${S}${x/${S}}"
301 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
289 eend $? "${errmsg} ${x}"
290 ;;
291 esac
292 done
293}
294
295darwintoolize() {
296 local targets=""
297 local x
298
299 if [[ -z $* ]] ; then
300 targets=$(find ${S} -name ltmain.sh -o -name ltconfig)
301 fi
302
303 einfo "Applying Darwin/libtool patches ..."
304 for x in ${targets} ; do
305 [[ ! -s ${x} ]] && continue
306 case ${x##*/} in
307 ltmain.sh|ltconfig)
308 local ver=$(grep '^VERSION=' ${x})
309 ver=${ver/VERSION=}
310 if [[ ${ver:0:3} == "1.4" || ${ver:0:3} == "1.5" ]] ; then
311 ver="1.3" # 1.4, 1.5 and 1.3 are compat
312 fi
313
314 ebegin " Fixing \${S}${x/${S}}"
315 patch -p0 "${x}" "${ELT_PATCH_DIR}/darwin/${x##*/}-${ver:0:3}.patch" > /dev/null
302 eend $? "PLEASE CHECK ${x}" 316 eend $? "PLEASE CHECK ${x}"
303 ;; 317 ;;
304 esac 318 esac
305 done 319 done
306} 320}
307
308darwintoolize() {
309 local targets=""
310 local x
311
312 if [ -z "$@" ] ; then
313 targets="$(find ${S} -name ltmain.sh -o -name ltconfig)"
314 fi
315
316 einfo "Applying Darwin/libtool patches ..."
317 for x in ${targets} ; do
318 [ ! -s "${x}" ] && continue
319 case $(basename "${x}") in
320 ltmain.sh|ltconfig)
321 local ver="$(grep '^VERSION=' ${x})"
322 ver="${ver/VERSION=}"
323 if [ "${ver:0:3}" == "1.4" -o "${ver:0:3}" == "1.5" ];
324 then
325 ver="1.3" # 1.4, 1.5 and 1.3 are compat
326 fi
327
328 ebegin " Fixing \${S}${x/${S}}"
329 patch -p0 "${x}" "${ELT_PATCH_DIR}/darwin/$(basename "${x}")-${ver:0:3}.patch" > /dev/null
330 eend $? "PLEASE CHECK ${x}"
331 ;;
332 esac
333 done
334}

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

  ViewVC Help
Powered by ViewVC 1.1.20