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

Diff of /eclass/libtool.eclass

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

Revision 1.72 Revision 1.88
1# Copyright 1999-2005 Gentoo Foundation 1# Copyright 1999-2007 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.72 2006/05/09 17:50:17 flameeyes Exp $ 3# $Header: /var/cvsroot/gentoo-x86/eclass/libtool.eclass,v 1.88 2010/05/11 04:45:48 vapier Exp $
4# 4#
5# Author: Martin Schlemmer <azarah@gentoo.org> 5# Maintainer: base-system@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#
10 10# Note, this eclass does not require libtool as it only applies patches to
11# 2004.09.25 rac 11# generated libtool files. We do not run the libtoolize program because that
12# i have verified that at least one package can use this eclass and 12# requires a regeneration of the main autotool files in order to work properly.
13# build properly even without libtool installed yet, probably using
14# the files in the distribution. eliminating this dependency fixes
15# bug 65209, which is a showstopper for people doing installs using
16# stageballs <3. if anybody decides to revert this, please attempt
17# to find an alternate way of resolving that bug at the same time.
18 13
19DESCRIPTION="Based on the ${ECLASS} eclass" 14DESCRIPTION="Based on the ${ECLASS} eclass"
20 15
21ELIBTOOL_VERSION="2.0.2" 16ELIBTOOL_VERSION="2.0.2"
17
18inherit toolchain-funcs
22 19
23ELT_PATCH_DIR="${ECLASSDIR}/ELT-patches" 20ELT_PATCH_DIR="${ECLASSDIR}/ELT-patches"
24ELT_APPLIED_PATCHES= 21ELT_APPLIED_PATCHES=
25ELT_LTMAIN_SH= 22ELT_LTMAIN_SH=
26 23
77# 74#
78# Run through the patches in $2 and see if any 75# Run through the patches in $2 and see if any
79# apply to $1 ... 76# apply to $1 ...
80# 77#
81ELT_walk_patches() { 78ELT_walk_patches() {
82 local x= 79 local patch
83 local y=
84 local ret=1 80 local ret=1
85 local file=$1 81 local file=$1
86 local patch_set=$2 82 local patch_set=$2
87 local patch_dir= 83 local patch_dir="${ELT_PATCH_DIR}/${patch_set}"
88 local rem_int_dep=$3 84 local rem_int_dep=$3
89 85
90 if [[ -n ${patch_set} ]] ; then 86 [[ -z ${patch_set} ]] && return 1
91 if [[ -d ${ELT_PATCH_DIR}/${patch_set} ]] ; then 87 [[ ! -d ${patch_dir} ]] && return 1
92 patch_dir="${ELT_PATCH_DIR}/${patch_set}" 88
93 else 89 pushd "${ELT_PATCH_DIR}" >/dev/null
94 return "${ret}" 90
91 # Go through the patches in reverse order (newer version to older)
92 for patch in $(find "${patch_set}" -maxdepth 1 -type f | LC_ALL=C sort -r) ; do
93 # For --remove-internal-dep ...
94 if [[ -n ${rem_int_dep} ]] ; then
95 # For replace @REM_INT_DEP@ with what was passed
96 # to --remove-internal-dep
97 local tmp="${T}/$$.rem_int_deps.patch"
98 sed -e "s|@REM_INT_DEP@|${rem_int_dep}|g" "${patch}" > "${tmp}"
99 patch=${tmp}
95 fi 100 fi
96 101
97 # Go through the patches in reverse order (large to small)
98 for x in $(ls -d "${patch_dir}"/* 2> /dev/null | grep -v 'CVS' | sort -r) ; do
99 if [[ -n ${x} && -f ${x} ]] ; then
100 # For --remove-internal-dep ...
101 if [[ -n ${rem_int_dep} ]] ; then
102 # For replace @REM_INT_DEP@ with what was passed
103 # to --remove-internal-dep
104 sed -e "s|@REM_INT_DEP@|${rem_int_dep}|g" ${x} > \
105 "${T}/$$.rem_int_deps.patch"
106
107 x="${T}/$$.rem_int_deps.patch"
108 fi
109
110 if ELT_try_and_apply_patch "${file}" "${x}" ; then 102 if ELT_try_and_apply_patch "${file}" "${patch}" ; then
103 # Break to unwind w/popd rather than return directly
111 ret=0 104 ret=0
112 break 105 break
113 fi
114 fi 106 fi
115 done 107 done
116 fi
117 108
109 popd >/dev/null
118 return "${ret}" 110 return ${ret}
119} 111}
120 112
121elibtoolize() { 113elibtoolize() {
122 local x= 114 local x=
123 local y= 115 local y=
125 local do_reversedeps="no" 117 local do_reversedeps="no"
126 local do_only_patches="no" 118 local do_only_patches="no"
127 local do_uclibc="yes" 119 local do_uclibc="yes"
128 local deptoremove= 120 local deptoremove=
129 local my_dirlist= 121 local my_dirlist=
130 local elt_patches="portage relink max_cmd_len sed test tmp" 122 local elt_patches="install-sh ltmain portage relink max_cmd_len sed test tmp cross as-needed"
131 local start_dir=${PWD} 123 local start_dir=${PWD}
132 124
133 my_dirlist=$(ELT_find_ltmain_sh) 125 my_dirlist=$(ELT_find_ltmain_sh)
134 126
135 for x in "$@" ; do 127 for x in "$@" ; do
175 done 167 done
176 168
177 [[ ${do_uclibc} == "yes" ]] && \ 169 [[ ${do_uclibc} == "yes" ]] && \
178 elt_patches="${elt_patches} uclibc-conf uclibc-ltconf" 170 elt_patches="${elt_patches} uclibc-conf uclibc-ltconf"
179 171
180 [[ ${CHOST} == *"-freebsd"* ]] && \ 172 case "${CHOST}" in
173 *-aix*)
174 elt_patches="${elt_patches} hardcode aixrtl"
175 ;;
176 *-darwin*)
177 elt_patches="${elt_patches} darwin-ltconf darwin-ltmain darwin-conf"
178 ;;
179 *-freebsd*)
181 elt_patches="${elt_patches} fbsd-conf fbsd-ltconf" 180 elt_patches="${elt_patches} fbsd-conf fbsd-ltconf"
182 181 ;;
183 if useq ppc-macos ; then 182 *-hpux*)
184 local opts 183 elt_patches="${elt_patches} hpux-conf deplibs hc-flag-ld hardcode hardcode-relink relink-prog no-lc"
185 [[ -f Makefile.am ]] && opts="--automake" 184 ;;
186 glibtoolize --copy --force ${opts} 185 *-irix*)
187
188 elt_patches="${elt_patches} darwin-ltconf darwin-ltmain" 186 elt_patches="${elt_patches} irix-ltmain"
189 fi 187 ;;
188 *-mint*)
189 elt_patches="${elt_patches} mint-conf"
190 ;;
191 esac
190 192
191 for x in ${my_dirlist} ; do 193 for x in ${my_dirlist} ; do
192 local tmp=$(echo "${x}" | sed -e "s|${WORKDIR}||") 194 local tmp=$(echo "${x}" | sed -e "s|${WORKDIR}||")
193 export ELT_APPLIED_PATCHES= 195 export ELT_APPLIED_PATCHES=
194 export ELT_LTMAIN_SH="${x}/ltmain.sh" 196 export ELT_LTMAIN_SH="${x}/ltmain.sh"
225 if [[ -n $(grep 'max_cmd_len' "${x}/ltmain.sh") ]] ; then 227 if [[ -n $(grep 'max_cmd_len' "${x}/ltmain.sh") ]] ; then
226 ELT_walk_patches "${x}/ltmain.sh" "${y}" 228 ELT_walk_patches "${x}/ltmain.sh" "${y}"
227 ret=$? 229 ret=$?
228 fi 230 fi
229 ;; 231 ;;
232 "as-needed")
233 ELT_walk_patches "${x}/ltmain.sh" "${y}"
234 ret=$?
235 ;;
230 "uclibc-conf") 236 "uclibc-conf")
231 if [[ -e ${x}/configure && \ 237 if [[ -e ${x}/configure && \
232 -n $(grep 'Transform linux' "${x}/configure") ]] ; then 238 -n $(grep 'Transform linux' "${x}/configure") ]] ; then
233 ELT_walk_patches "${x}/configure" "${y}" 239 ELT_walk_patches "${x}/configure" "${y}"
234 ret=$? 240 ret=$?
262 if [[ -s ${x}/ltconfig ]] ; then 268 if [[ -s ${x}/ltconfig ]] ; then
263 ELT_walk_patches "${x}/ltconfig" "${y}" 269 ELT_walk_patches "${x}/ltconfig" "${y}"
264 ret=$? 270 ret=$?
265 fi 271 fi
266 ;; 272 ;;
273 "darwin-conf")
274 if [[ -e ${x}/configure && \
275 -n $(grep '&& echo \.so ||' "${x}/configure") ]] ; then
276 ELT_walk_patches "${x}/configure" "${y}"
277 ret=$?
278 # ltmain.sh and co might be in a subdirectory ...
279 elif [[ ! -e ${x}/configure && -e ${x}/../configure && \
280 -n $(grep '&& echo \.so ||' "${x}/../configure") ]] ; then
281 ELT_walk_patches "${x}/../configure" "${y}"
282 ret=$?
283 fi
284 ;;
267 "darwin-ltconf") 285 "darwin-ltconf")
268 # Newer libtoolize clears ltconfig, as not used anymore 286 # Newer libtoolize clears ltconfig, as not used anymore
269 if [[ -s ${x}/ltconfig ]] ; then 287 if [[ -s ${x}/ltconfig ]] ; then
270 ELT_walk_patches "${x}/ltconfig" "${y}" 288 ELT_walk_patches "${x}/ltconfig" "${y}"
289 ret=$?
290 fi
291 ;;
292 "darwin-ltmain")
293 # special case to avoid false positives (failing to apply
294 # ltmain.sh path message), newer libtools have this patch
295 # built in, so not much to patch around then
296 if [[ -e ${x}/ltmain.sh && \
297 -z $(grep 'verstring="-compatibility_version' "${x}/ltmain.sh") ]] ; then
298 ELT_walk_patches "${x}/ltmain.sh" "${y}"
299 ret=$?
300 fi
301 ;;
302 "aixrtl" | "hpux-conf")
303 ret=1
304 local subret=0
305 # apply multiple patches as often as they match
306 while [[ $subret -eq 0 ]]; do
307 subret=1
308 if [[ -e ${x}/configure ]]; then
309 ELT_walk_patches "${x}/configure" "${y}"
310 subret=$?
311 # ltmain.sh and co might be in a subdirectory ...
312 elif [[ ! -e ${x}/configure && -e ${x}/../configure ]] ; then
313 ELT_walk_patches "${x}/../configure" "${y}"
314 subret=$?
315 fi
316 if [[ $subret -eq 0 ]]; then
317 # have at least one patch succeeded.
318 ret=0
319 fi
320 done
321 ;;
322 "mint-conf")
323 ret=1
324 local subret=1
325 if [[ -e ${x}/configure ]]; then
326 ELT_walk_patches "${x}/configure" "${y}"
327 subret=$?
328 # ltmain.sh and co might be in a subdirectory ...
329 elif [[ ! -e ${x}/configure && -e ${x}/../configure ]] ; then
330 ELT_walk_patches "${x}/../configure" "${y}"
331 subret=$?
332 fi
333 if [[ $subret -eq 0 ]]; then
334 # have at least one patch succeeded.
335 ret=0
336 fi
337 ;;
338 "install-sh")
339 ELT_walk_patches "${x}/install-sh" "${y}"
340 ret=$?
341 ;;
342 "cross")
343 if tc-is-cross-compiler ; then
344 ELT_walk_patches "${x}/ltmain.sh" "${y}"
271 ret=$? 345 ret=$?
272 fi 346 fi
273 ;; 347 ;;
274 *) 348 *)
275 ELT_walk_patches "${x}/ltmain.sh" "${y}" 349 ELT_walk_patches "${x}/ltmain.sh" "${y}"
294 if [[ ${do_portage} == "yes" ]] ; then 368 if [[ ${do_portage} == "yes" ]] ; then
295 # Stupid test to see if its already applied ... 369 # Stupid test to see if its already applied ...
296 if [[ -z $(grep 'We do not want portage' "${x}/ltmain.sh") ]] ; then 370 if [[ -z $(grep 'We do not want portage' "${x}/ltmain.sh") ]] ; then
297 echo 371 echo
298 eerror "Portage patch requested, but failed to apply!" 372 eerror "Portage patch requested, but failed to apply!"
299 eerror "Please bug azarah or vapier to add proper patch." 373 eerror "Please file a bug report to add a proper patch."
300 die "Portage patch requested, but failed to apply!" 374 die "Portage patch requested, but failed to apply!"
301 fi 375 fi
302 else 376 else
303 if [[ -n $(grep 'We do not want portage' "${x}/ltmain.sh") ]] ; then 377 if [[ -n $(grep 'We do not want portage' "${x}/ltmain.sh") ]] ; then
304 # ewarn " Portage patch seems to be already applied." 378 # ewarn " Portage patch seems to be already applied."
309 eval $(grep -e '^[[:space:]]*VERSION=' "${x}/ltmain.sh"); \ 383 eval $(grep -e '^[[:space:]]*VERSION=' "${x}/ltmain.sh"); \
310 echo "${VERSION}") 384 echo "${VERSION}")
311 385
312 echo 386 echo
313 eerror "Portage patch failed to apply (ltmain.sh version ${version})!" 387 eerror "Portage patch failed to apply (ltmain.sh version ${version})!"
314 eerror "Please bug azarah or vapier to add proper patch." 388 eerror "Please file a bug report to add a proper patch."
315 die "Portage patch failed to apply!" 389 die "Portage patch failed to apply!"
316 fi 390 fi
317 # We do not want to run libtoolize ... 391 # We do not want to run libtoolize ...
318 ELT_APPLIED_PATCHES="portage" 392 ELT_APPLIED_PATCHES="portage"
319 fi 393 fi
330 die "FreeBSD patch set '${y}' failed to apply!" 404 die "FreeBSD patch set '${y}' failed to apply!"
331 fi 405 fi
332 fi 406 fi
333 ;; 407 ;;
334 "darwin-"*) 408 "darwin-"*)
335 useq ppc-macos && \ 409 [[ ${CHOST} == *"-darwin"* ]] && \
336 ewarn " Darwin patch set '${y}' failed to apply!" 410 ewarn " Darwin patch set '${y}' failed to apply!"
337 ;; 411 ;;
338 esac 412 esac
339 fi 413 fi
340 done 414 done
344 ${do_reversedeps} == "no" && \ 418 ${do_reversedeps} == "no" && \
345 ${do_only_patches} == "no" && \ 419 ${do_only_patches} == "no" && \
346 ${deptoremove} == "" ]] 420 ${deptoremove} == "" ]]
347 then 421 then
348 ewarn "Cannot apply any patches, please file a bug about this" 422 ewarn "Cannot apply any patches, please file a bug about this"
349 break
350
351 # Sometimes ltmain.sh is in a subdirectory ...
352 if [[ ! -f ${x}/configure.in && ! -f ${x}/configure.ac ]] ; then
353 if [[ -f ${x}/../configure.in || -f ${x}/../configure.ac ]] ; then
354 cd "${x}"/../
355 fi
356 fi 423 die
357
358 if type -p libtoolize &> /dev/null ; then
359 ewarn "Cannot apply any patches, running libtoolize..."
360 libtoolize --copy --force
361 fi
362 cd "${x}"
363 break
364 fi 424 fi
365 fi 425 fi
366 426
367 [[ -f ${x}/libtool ]] && rm -f "${x}/libtool" 427 [[ -f ${x}/libtool ]] && rm -f "${x}/libtool"
368 428
369 touch "${x}/.elibtoolized" 429 >> "${x}/.elibtoolized"
370 done 430 done
371 431
372 cd "${start_dir}" 432 cd "${start_dir}"
373} 433}
374 434
375uclibctoolize() { 435uclibctoolize() {
376 ewarn "uclibctoolize() is depreciated, please just use elibtoolize()!" 436 ewarn "uclibctoolize() is deprecated, please just use elibtoolize()!"
377 elibtoolize 437 elibtoolize
378} 438}
379 439
380darwintoolize() { 440darwintoolize() {
381 ewarn "darwintoolize() is depreciated, please just use elibtoolize()!" 441 ewarn "darwintoolize() is deprecated, please just use elibtoolize()!"
382 elibtoolize 442 elibtoolize
383} 443}
384 444
385# char *VER_major(string) 445# char *VER_major(string)
386# 446#

Legend:
Removed from v.1.72  
changed lines
  Added in v.1.88

  ViewVC Help
Powered by ViewVC 1.1.20