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

Diff of /eclass/libtool.eclass

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

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

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

  ViewVC Help
Powered by ViewVC 1.1.20