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

Diff of /eclass/libtool.eclass

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

Revision 1.11 Revision 1.83
1#!/bin/bash 1# Copyright 1999-2007 Gentoo Foundation
2# Copyright 1999-2002 Gentoo Technologies, Inc.
3# Distributed under the terms of the GNU General Public License, v2 or later 2# Distributed under the terms of the GNU General Public License v2
4# Author: Martin Schlemmer <azarah@gentoo.org>
5# $Header: /var/cvsroot/gentoo-x86/eclass/libtool.eclass,v 1.11 2002/07/03 19:11:27 azarah Exp $ 3# $Header: /var/cvsroot/gentoo-x86/eclass/libtool.eclass,v 1.83 2009/05/03 20:03:10 loki_val Exp $
4#
5# Maintainer: base-system@gentoo.org
6#
6# This eclass patches ltmain.sh distributed with libtoolized packages with the 7# This eclass patches ltmain.sh distributed with libtoolized packages with the
7# relink and portage patch 8# relink and portage patch among others
8ECLASS=libtool 9#
9newdepend sys-devel/libtool 10# Note, this eclass does not require libtool as it only applies patches to
11# generated libtool files. We do not run the libtoolize program because that
12# requires a regeneration of the main autotool files in order to work properly.
10 13
11DESCRIPTION="Based on the ${ECLASS} eclass" 14DESCRIPTION="Based on the ${ECLASS} eclass"
12 15
13ELIBTOOL_VERSION=1.8.1 16ELIBTOOL_VERSION="2.0.2"
17
18inherit toolchain-funcs
19
20ELT_PATCH_DIR="${ECLASSDIR}/ELT-patches"
21ELT_APPLIED_PATCHES=
22ELT_LTMAIN_SH=
23
24#
25# Returns all the directories containing ltmain.sh
26#
27ELT_find_ltmain_sh() {
28 local x=
29 local dirlist=
30
31 for x in $(find "${S}" -name 'ltmain.sh') ; do
32 dirlist="${dirlist} ${x%/*}"
33 done
34
35 echo "${dirlist}"
36}
37
38#
39# See if we can apply $2 on $1, and if so, do it
40#
41ELT_try_and_apply_patch() {
42 local ret=0
43 local file=$1
44 local patch=$2
45
46 # We only support patchlevel of 0 - why worry if its static patches?
47 if patch -p0 --dry-run "${file}" "${patch}" &> "${T}/elibtool.log" ; then
48 einfo " Applying $(basename "$(dirname "${patch}")")-${patch##*/}.patch ..."
49 patch -p0 -g0 --no-backup-if-mismatch "${file}" "${patch}" \
50 &> "${T}/elibtool.log"
51 ret=$?
52 export ELT_APPLIED_PATCHES="${ELT_APPLIED_PATCHES} ${patch##*/}"
53 else
54 ret=1
55 fi
56
57 return "${ret}"
58}
59
60#
61# Get string version of ltmain.sh or ltconfig (passed as $1)
62#
63ELT_libtool_version() {
64 local ltmain_sh=$1
65 local version=
66
67 version=$(eval $(grep -e '^[[:space:]]*VERSION=' "${ltmain_sh}"); \
68 echo "${VERSION}")
69 [[ -z ${version} ]] && version="0"
70
71 echo "${version}"
72}
73
74#
75# Run through the patches in $2 and see if any
76# apply to $1 ...
77#
78ELT_walk_patches() {
79 local x=
80 local y=
81 local ret=1
82 local file=$1
83 local patch_set=$2
84 local patch_dir=
85 local rem_int_dep=$3
86
87 if [[ -n ${patch_set} ]] ; then
88 if [[ -d ${ELT_PATCH_DIR}/${patch_set} ]] ; then
89 patch_dir="${ELT_PATCH_DIR}/${patch_set}"
90 else
91 return "${ret}"
92 fi
93
94 # Go through the patches in reverse order (large to small)
95 for x in $(ls -d "${patch_dir}"/* 2> /dev/null | grep -v 'CVS' | sort -r) ; do
96 if [[ -n ${x} && -f ${x} ]] ; then
97 # For --remove-internal-dep ...
98 if [[ -n ${rem_int_dep} ]] ; then
99 # For replace @REM_INT_DEP@ with what was passed
100 # to --remove-internal-dep
101 sed -e "s|@REM_INT_DEP@|${rem_int_dep}|g" ${x} > \
102 "${T}/$$.rem_int_deps.patch"
103
104 x="${T}/$$.rem_int_deps.patch"
105 fi
106
107 if ELT_try_and_apply_patch "${file}" "${x}" ; then
108 ret=0
109 break
110 fi
111 fi
112 done
113 fi
114
115 return "${ret}"
116}
14 117
15elibtoolize() { 118elibtoolize() {
16
17 local x="" 119 local x=
18 local y="" 120 local y=
19 local dopatch="no"
20 local dotest="yes"
21 local dorelink="yes"
22 local dotmp="yes"
23 local doportage="yes"
24 local portage="no" 121 local do_portage="no"
25 local reversedeps="no" 122 local do_reversedeps="no"
123 local do_only_patches="no"
124 local do_uclibc="yes"
125 local deptoremove=
26 local mylist="" 126 local my_dirlist=
127 local elt_patches="install-sh ltmain portage relink max_cmd_len sed test tmp cross as-needed"
128 local start_dir=${PWD}
27 129
28 mylist="$(find_ltmain)" 130 my_dirlist=$(ELT_find_ltmain_sh)
29 for x in ${*} 131
30 do 132 for x in "$@" ; do
31 # Only apply portage patch, and dont "libtoolize --copy --force" 133 case "${x}" in
32 # if all patches fail. 134 "--portage")
33 if [ "${x}" = "--portage" ] 135 # Only apply portage patch, and don't
34 then 136 # 'libtoolize --copy --force' if all patches fail.
35 portage="yes" 137 do_portage="yes"
36 fi 138 ;;
139 "--reverse-deps")
37 # Apply the reverse-deps patch 140 # Apply the reverse-deps patch
38 #
39 # http://bugzilla.gnome.org/show_bug.cgi?id=75635 141 # http://bugzilla.gnome.org/show_bug.cgi?id=75635
40 if [ "${x}" = "--reverse-deps" ]
41 then
42 reversedeps="yes" 142 do_reversedeps="yes"
43 fi 143 elt_patches="${elt_patches} fix-relink"
144 ;;
145 "--patch-only")
146 # Do not run libtoolize if none of the patches apply ..
147 do_only_patches="yes"
148 ;;
149 "^--remove-internal-dep="*)
150 # We will replace @REM_INT_DEP@ with what is needed
151 # in ELT_walk_patches() ...
152 deptoremove=$(echo "${x}" | sed -e 's|--remove-internal-dep=||')
153
154 # Add the patch for this ...
155 [[ -n ${deptoremove} ]] && elt_patches="${elt_patches} rem-int-dep"
156 ;;
157 "--shallow")
44 # Only patch the ltmain.sh in ${S} 158 # Only patch the ltmain.sh in ${S}
45 if [ "${x}" = "--shallow" ]
46 then
47 if [ -f ${S}/ltmain.sh ] 159 if [[ -f ${S}/ltmain.sh ]] ; then
48 then
49 mylist="${S}" 160 my_dirlist=${S}
50 else 161 else
51 mylist="" 162 my_dirlist=
52 fi 163 fi
53 else 164 ;;
54 mylist="$(find_ltmain)" 165 "--no-uclibc")
55 fi 166 do_uclibc="no"
167 ;;
168 *)
169 eerror "Invalid elibtoolize option: ${x}"
170 die "elibtoolize called with ${x} ??"
171 esac
56 done 172 done
57 173
174 [[ ${do_uclibc} == "yes" ]] && \
175 elt_patches="${elt_patches} uclibc-conf uclibc-ltconf"
176
177 [[ ${CHOST} == *"-freebsd"* ]] && \
178 elt_patches="${elt_patches} fbsd-conf fbsd-ltconf"
179
180 [[ ${CHOST} == *"-darwin"* ]] && \
181 elt_patches="${elt_patches} darwin-ltconf darwin-ltmain"
182
58 for x in ${mylist} 183 for x in ${my_dirlist} ; do
59 do 184 local tmp=$(echo "${x}" | sed -e "s|${WORKDIR}||")
185 export ELT_APPLIED_PATCHES=
186 export ELT_LTMAIN_SH="${x}/ltmain.sh"
187
188 [[ -f ${x}/.elibtoolized ]] && continue
189
60 cd ${x} 190 cd ${x}
61 einfo "Working directory: ${x}..." 191 einfo "Running elibtoolize in: $(echo "/${tmp}" | sed -e 's|//|/|g; s|^/||')"
62 dopatch="yes"
63 dotest="yes"
64 dorelink="yes"
65 dotmp="yes"
66 doportage="yes"
67 192
68 for y in test_patch relink_patch tmp_patch portage_patch 193 for y in ${elt_patches} ; do
69 do 194 local ret=0
70 if ! eval ${y} --test $>${T}/libtool.foo 195
71 then 196 case "${y}" in
197 "portage")
198 # Stupid test to see if its already applied ...
199 if [[ -z $(grep 'We do not want portage' "${x}/ltmain.sh") ]] ; then
200 ELT_walk_patches "${x}/ltmain.sh" "${y}"
201 ret=$?
202 fi
203 ;;
204 "rem-int-dep")
205 ELT_walk_patches "${x}/ltmain.sh" "${y}" "${deptoremove}"
206 ret=$?
207 ;;
208 "fix-relink")
209 # Do not apply if we do not have the relink patch applied ...
210 if [[ -n $(grep 'inst_prefix_dir' "${x}/ltmain.sh") ]] ; then
211 ELT_walk_patches "${x}/ltmain.sh" "${y}"
212 ret=$?
213 fi
214 ;;
215 "max_cmd_len")
216 # Do not apply if $max_cmd_len is not used ...
217 if [[ -n $(grep 'max_cmd_len' "${x}/ltmain.sh") ]] ; then
218 ELT_walk_patches "${x}/ltmain.sh" "${y}"
219 ret=$?
220 fi
221 ;;
222 "as-needed")
223 ELT_walk_patches "${x}/ltmain.sh" "${y}"
224 ret=$?
225 ;;
226 "uclibc-conf")
227 if [[ -e ${x}/configure && \
228 -n $(grep 'Transform linux' "${x}/configure") ]] ; then
229 ELT_walk_patches "${x}/configure" "${y}"
230 ret=$?
231 # ltmain.sh and co might be in a subdirectory ...
232 elif [[ ! -e ${x}/configure && -e ${x}/../configure && \
233 -n $(grep 'Transform linux' "${x}/../configure") ]] ; then
234 ELT_walk_patches "${x}/../configure" "${y}"
235 ret=$?
236 fi
237 ;;
238 "uclibc-ltconf")
239 # Newer libtoolize clears ltconfig, as not used anymore
240 if [[ -s ${x}/ltconfig ]] ; then
241 ELT_walk_patches "${x}/ltconfig" "${y}"
242 ret=$?
243 fi
244 ;;
245 "fbsd-conf")
246 if [[ -e ${x}/configure && \
247 -n $(grep 'version_type=freebsd-' "${x}/configure") ]] ; then
248 ELT_walk_patches "${x}/configure" "${y}"
249 ret=$?
250 # ltmain.sh and co might be in a subdirectory ...
251 elif [[ ! -e ${x}/configure && -e ${x}/../configure && \
252 -n $(grep 'version_type=freebsd-' "${x}/../configure") ]] ; then
253 ELT_walk_patches "${x}/../configure" "${y}"
254 ret=$?
255 fi
256 ;;
257 "fbsd-ltconf")
258 if [[ -s ${x}/ltconfig ]] ; then
259 ELT_walk_patches "${x}/ltconfig" "${y}"
260 ret=$?
261 fi
262 ;;
263 "darwin-ltconf")
264 # Newer libtoolize clears ltconfig, as not used anymore
265 if [[ -s ${x}/ltconfig ]] ; then
266 ELT_walk_patches "${x}/ltconfig" "${y}"
267 ret=$?
268 fi
269 ;;
270 "install-sh")
271 ELT_walk_patches "${x}/install-sh" "${y}"
272 ret=$?
273 ;;
274 "cross")
275 if tc-is-cross-compiler ; then
276 ELT_walk_patches "${x}/ltmain.sh" "${y}"
277 ret=$?
278 fi
279 ;;
280 *)
281 ELT_walk_patches "${x}/ltmain.sh" "${y}"
282 ret=$?
283 ;;
284 esac
285
286 if [[ ${ret} -ne 0 ]] ; then
72 case ${y} in 287 case ${y} in
73 test_patch) 288 "relink")
74 # non critical patch 289 local version=$(ELT_libtool_version "${x}/ltmain.sh")
75 dotest="no" 290 # Critical patch, but could be applied ...
291 # FIXME: Still need a patch for ltmain.sh > 1.4.0
292 if [[ -z $(grep 'inst_prefix_dir' "${x}/ltmain.sh") && \
293 $(VER_to_int "${version}") -ge $(VER_to_int "1.4.0") ]] ; then
294 ewarn " Could not apply relink.patch!"
295 fi
76 ;; 296 ;;
77 relink_patch) 297 "portage")
78 # critical patch, but could be applied 298 # Critical patch - for this one we abort, as it can really
79 if [ -z "$(grep -e "inst_prefix_dir" ltmain.sh)" ] && \ 299 # cause breakage without it applied!
80 [ "${portage}" = "no" ] 300 if [[ ${do_portage} == "yes" ]] ; then
81 then 301 # Stupid test to see if its already applied ...
82 dopatch="no" 302 if [[ -z $(grep 'We do not want portage' "${x}/ltmain.sh") ]] ; then
303 echo
304 eerror "Portage patch requested, but failed to apply!"
305 eerror "Please bug azarah or vapier to add proper patch."
306 die "Portage patch requested, but failed to apply!"
307 fi
308 else
309 if [[ -n $(grep 'We do not want portage' "${x}/ltmain.sh") ]] ; then
310 # ewarn " Portage patch seems to be already applied."
311 # ewarn " Please verify that it is not needed."
312 :
313 else
314 local version=$( \
315 eval $(grep -e '^[[:space:]]*VERSION=' "${x}/ltmain.sh"); \
316 echo "${VERSION}")
317
318 echo
319 eerror "Portage patch failed to apply (ltmain.sh version ${version})!"
320 eerror "Please bug azarah or vapier to add proper patch."
321 die "Portage patch failed to apply!"
322 fi
323 # We do not want to run libtoolize ...
324 ELT_APPLIED_PATCHES="portage"
83 fi 325 fi
84 dorelink="no"
85 ;; 326 ;;
86 tmp_patch) 327 "uclibc-"*)
87 # non critical patch 328 [[ ${CHOST} == *"-uclibc" ]] && \
88 dotmp="no" 329 ewarn " uClibc patch set '${y}' failed to apply!"
89 ;; 330 ;;
90 portage_patch) 331 "fbsd-"*)
91 # critical patch 332 if [[ ${CHOST} == *"-freebsd"* ]] ; then
92 if [ "${portage}" = "yes" ] 333 if [[ -z $(grep 'Handle Gentoo/FreeBSD as it was Linux' \
93 then 334 "${x}/configure" "${x}/../configure" 2>/dev/null) ]]; then
94 echo 335 eerror " FreeBSD patch set '${y}' failed to apply!"
95 eerror "Portage patch requested, but failed to apply!" 336 die "FreeBSD patch set '${y}' failed to apply!"
96 die 337 fi
97 fi 338 fi
98 dopatch="no" 339 ;;
99 doportage="no" 340 "darwin-"*)
341 [[ ${CHOST} == *"-darwin"* ]] && \
342 ewarn " Darwin patch set '${y}' failed to apply!"
100 ;; 343 ;;
101 esac 344 esac
102 fi 345 fi
103 done 346 done
104 347
105# Only apply portage patch ... I think if other can apply, they should. 348 if [[ -z ${ELT_APPLIED_PATCHES} ]] ; then
106# if [ "${portage}" = "yes" ] 349 if [[ ${do_portage} == "no" && \
107# then 350 ${do_reversedeps} == "no" && \
108# dotest="no" 351 ${do_only_patches} == "no" && \
109# dorelink="no" 352 ${deptoremove} == "" ]]
110# dotmp="no"
111# fi
112
113 for y in test_patch relink_patch tmp_patch portage_patch
114 do
115 if [ "${dopatch}" = "yes" ]
116 then 353 then
117 case ${y} in 354 ewarn "Cannot apply any patches, please file a bug about this"
118 test_patch) 355 die
119 if [ "${dotest}" = "no" ]
120 then
121 continue
122 fi
123 ;;
124 relink_patch)
125 if [ "${dorelink}" = "no" ]
126 then
127 continue
128 fi
129 ;;
130 tmp_patch)
131 if [ "${dotmp}" = "no" ]
132 then
133 continue
134 fi
135 ;;
136 portage_patch)
137 if [ "${doportage}" = "no" ]
138 then
139 continue
140 fi
141 ;;
142 esac
143
144 einfo "Applying libtool-${y/_patch/}.patch..."
145 eval ${y} $>${T}/libtool.foo
146 elif [ "${portage}" = "no" ] && [ "${reversedeps}" = "no" ]
147 then
148 ewarn "Cannot apply any patch, running libtoolize..."
149 libtoolize --copy --force
150 break
151 fi
152 done
153
154 if [ "${reversedeps}" = "yes" ]
155 then
156 if eval reversedeps_patch --test $>${T}/libtool.foo
157 then
158 einfo "Applying libtool-reverse-deps.patch..."
159 eval reversedeps_patch $>${T}/libtool.foo
160 fi 356 fi
161 fi 357 fi
358
359 [[ -f ${x}/libtool ]] && rm -f "${x}/libtool"
360
361 >> "${x}/.elibtoolized"
162 done 362 done
163 363
164 if [ -f libtool ] 364 cd "${start_dir}"
165 then 365}
166 rm -f libtool 366
367uclibctoolize() {
368 ewarn "uclibctoolize() is deprecated, please just use elibtoolize()!"
369 elibtoolize
370}
371
372darwintoolize() {
373 ewarn "darwintoolize() is deprecated, please just use elibtoolize()!"
374 elibtoolize
375}
376
377# char *VER_major(string)
378#
379# Return the Major (X of X.Y.Z) version
380#
381VER_major() {
382 [[ -z $1 ]] && return 1
383
384 local VER=$@
385 echo "${VER%%[^[:digit:]]*}"
386}
387
388# char *VER_minor(string)
389#
390# Return the Minor (Y of X.Y.Z) version
391#
392VER_minor() {
393 [[ -z $1 ]] && return 1
394
395 local VER=$@
396 VER=${VER#*.}
397 echo "${VER%%[^[:digit:]]*}"
398}
399
400# char *VER_micro(string)
401#
402# Return the Micro (Z of X.Y.Z) version.
403#
404VER_micro() {
405 [[ -z $1 ]] && return 1
406
407 local VER=$@
408 VER=${VER#*.*.}
409 echo "${VER%%[^[:digit:]]*}"
410}
411
412# int VER_to_int(string)
413#
414# Convert a string type version (2.4.0) to an int (132096)
415# for easy compairing or versions ...
416#
417VER_to_int() {
418 [[ -z $1 ]] && return 1
419
420 local VER_MAJOR=$(VER_major "$1")
421 local VER_MINOR=$(VER_minor "$1")
422 local VER_MICRO=$(VER_micro "$1")
423 local VER_int=$(( VER_MAJOR * 65536 + VER_MINOR * 256 + VER_MICRO ))
424
425 # We make version 1.0.0 the minimum version we will handle as
426 # a sanity check ... if its less, we fail ...
427 if [[ ${VER_int} -ge 65536 ]] ; then
428 echo "${VER_int}"
429 return 0
167 fi 430 fi
168 431
169 # We need to change the pwd back to $S, as we may be called in 432 echo 1
170 # src_compile() 433 return 1
171 cd ${S}
172} 434}
173
174#
175# Returns all the directories containing ltmain.sh
176#
177find_ltmain() {
178
179 local x=""
180 local dirlist=""
181
182 for x in $(find ${S} -name 'ltmain.sh')
183 do
184 dirlist="${dirlist} ${x%/*}"
185 done
186
187 echo "${dirlist}"
188}
189
190#
191# Various patches we want to apply.
192#
193# Contains: portage_patch
194# relink_patch
195# test_patch
196#
197portage_patch() {
198
199 local opts=""
200
201 if [ "${1}" = "--test" ]
202 then
203 opts="--force --dry-run"
204 fi
205
206 patch ${opts} -p0 <<-"ENDPATCH"
207 --- ltmain.sh.orig Wed Apr 3 01:19:37 2002
208 +++ ltmain.sh Sun May 26 19:50:52 2002
209 @@ -3940,9 +3940,46 @@
210 $echo "$modename: \`$deplib' is not a valid libtool archive" 1>&2
211 exit 1
212 fi
213 - newdependency_libs="$newdependency_libs $libdir/$name"
214 + # We do not want portage's install root ($D) present. Check only for
215 + # this if the .la is being installed.
216 + if test "$installed" = yes && test "$D"; then
217 + eval mynewdependency_lib="`echo "$libdir/$name" |sed -e "s:$D::g" -e 's://:/:g'`"
218 + else
219 + mynewdependency_lib="$libdir/$name"
220 + fi
221 + # Do not add duplicates
222 + if test "$mynewdependency_lib"; then
223 + if test -z "`echo $newdependency_libs |grep -e "$mynewdependency_lib"`"; then
224 + newdependency_libs="$newdependency_libs $mynewdependency_lib"
225 + fi
226 + fi
227 + ;;
228 + *)
229 + if test "$installed" = yes; then
230 + # Rather use S=WORKDIR if our version of portage supports it.
231 + # This is because some ebuild (gcc) do not use $S as buildroot.
232 + if test "$PWORKDIR"; then
233 + S="$PWORKDIR"
234 + fi
235 + # We do not want portage's build root ($S) present.
236 + if test -n "`echo $deplib |grep -e "$S"`" && test "$S"; then
237 + mynewdependency_lib=""
238 + # We do not want portage's install root ($D) present.
239 + elif test -n "`echo $deplib |grep -e "$D"`" && test "$D"; then
240 + eval mynewdependency_lib="`echo "$deplib" |sed -e "s:$D::g" -e 's://:/:g'`"
241 + else
242 + mynewdependency_lib="$deplib"
243 + fi
244 + else
245 + mynewdependency_lib="$deplib"
246 + fi
247 + # Do not add duplicates
248 + if test "$mynewdependency_lib"; then
249 + if test -z "`echo $newdependency_libs |grep -e "$mynewdependency_lib"`"; then
250 + newdependency_libs="$newdependency_libs $mynewdependency_lib"
251 + fi
252 + fi
253 ;;
254 - *) newdependency_libs="$newdependency_libs $deplib" ;;
255 esac
256 done
257 dependency_libs="$newdependency_libs"
258 @@ -3975,6 +4005,10 @@
259 case $host,$output,$installed,$module,$dlname in
260 *cygwin*,*lai,yes,no,*.dll) tdlname=../bin/$dlname ;;
261 esac
262 + # Do not add duplicates
263 + if test "$installed" = yes && test "$D"; then
264 + install_libdir="`echo "$install_libdir" |sed -e "s:$D::g" -e 's://:/:g'`"
265 + fi
266 $echo > $output "\
267 # $outputname - a libtool library file
268 # Generated by $PROGRAM - GNU $PACKAGE $VERSION$TIMESTAMP
269 ENDPATCH
270}
271
272relink_patch() {
273
274 local opts=""
275 local retval=0
276
277 if [ "${1}" = "--test" ]
278 then
279 opts="--force --dry-run"
280 fi
281
282 patch ${opts} -p0 <<-"ENDPATCH"
283 --- ltmain.sh Sun Aug 12 18:08:05 2001
284 +++ ltmain-relinkable.sh Tue Aug 28 18:55:13 2001
285 @@ -827,6 +827,7 @@
286 linker_flags=
287 dllsearchpath=
288 lib_search_path=`pwd`
289 + inst_prefix_dir=
290
291 avoid_version=no
292 dlfiles=
293 @@ -959,6 +960,11 @@
294 prev=
295 continue
296 ;;
297 + inst_prefix)
298 + inst_prefix_dir="$arg"
299 + prev=
300 + continue
301 + ;;
302 release)
303 release="-$arg"
304 prev=
305 @@ -1167,6 +1173,11 @@
306 continue
307 ;;
308
309 + -inst-prefix-dir)
310 + prev=inst_prefix
311 + continue
312 + ;;
313 +
314 # The native IRIX linker understands -LANG:*, -LIST:* and -LNO:*
315 # so, if we see these flags be careful not to treat them like -L
316 -L[A-Z][A-Z]*:*)
317 @@ -2231,7 +2242,16 @@
318 if test "$hardcode_direct" = yes; then
319 add="$libdir/$linklib"
320 elif test "$hardcode_minus_L" = yes; then
321 - add_dir="-L$libdir"
322 + # Try looking first in the location we're being installed to.
323 + add_dir=
324 + if test -n "$inst_prefix_dir"; then
325 + case "$libdir" in
326 + [\\/]*)
327 + add_dir="-L$inst_prefix_dir$libdir"
328 + ;;
329 + esac
330 + fi
331 + add_dir="$add_dir -L$libdir"
332 add="-l$name"
333 elif test "$hardcode_shlibpath_var" = yes; then
334 case :$finalize_shlibpath: in
335 @@ -2241,7 +2261,16 @@
336 add="-l$name"
337 else
338 # We cannot seem to hardcode it, guess we'll fake it.
339 - add_dir="-L$libdir"
340 + # Try looking first in the location we're being installed to.
341 + add_dir=
342 + if test -n "$inst_prefix_dir"; then
343 + case "$libdir" in
344 + [\\/]*)
345 + add_dir="-L$inst_prefix_dir$libdir"
346 + ;;
347 + esac
348 + fi
349 + add_dir="$add_dir -L$libdir"
350 add="-l$name"
351 fi
352
353 @@ -4622,12 +4651,30 @@
354 dir="$dir$objdir"
355
356 if test -n "$relink_command"; then
357 + # Determine the prefix the user has applied to our future dir.
358 + inst_prefix_dir=`$echo "$destdir" | sed "s%$libdir\$%%"`
359 +
360 + # Don't allow the user to place us outside of our expected
361 + # location b/c this prevents finding dependent libraries that
362 + # are installed to the same prefix.
363 + if test "$inst_prefix_dir" = "$destdir"; then
364 + $echo "$modename: error: cannot install \`$file' to a directory not ending in $libdir" 1>&2
365 + exit 1
366 + fi
367 +
368 + if test -n "$inst_prefix_dir"; then
369 + # Stick the inst_prefix_dir data into the link command.
370 + relink_command=`$echo "$relink_command" | sed "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%"`
371 + else
372 + relink_command=`$echo "$relink_command" | sed "s%@inst_prefix_dir@%%"`
373 + fi
374 +
375 $echo "$modename: warning: relinking \`$file'" 1>&2
376 $show "$relink_command"
377 if $run eval "$relink_command"; then :
378 else
379 $echo "$modename: error: relink \`$file' with the above command before installing it" 1>&2
380 - continue
381 + exit 1
382 fi
383 fi
384
385 ENDPATCH
386
387 retval=$?
388
389 # This one dont apply clean to libtool-1.4.2a, so do it manually.
390 if [ "${1}" != "--test" ] && [ "${retval}" -eq 0 ]
391 then
392 cp ltmain.sh ltmain.sh.orig
393 sed -e 's:cd `pwd`; $SHELL $0 --mode=relink $libtool_args:cd `pwd`; $SHELL $0 --mode=relink $libtool_args @inst_prefix_dir@:' \
394 ltmain.sh.orig > ltmain.sh
395 rm -f ltmain.sh.orig
396 fi
397
398 return ${retval}
399}
400
401tmp_patch() {
402
403 local opts=""
404
405 if [ "${1}" = "--test" ]
406 then
407 opts="--force --dry-run"
408 fi
409
410 patch ${opts} -p0 <<-"ENDPATCH"
411 --- ltmain.sh Sun Aug 12 18:08:05 2001
412 +++ ltmain-relinkable.sh Tue Aug 28 18:55:13 2001
413 @@ -4782,7 +4829,11 @@
414 if test "$finalize" = yes && test -z "$run"; then
415 tmpdir="/tmp"
416 test -n "$TMPDIR" && tmpdir="$TMPDIR"
417 - tmpdir="$tmpdir/libtool-$$"
418 + tmpdir=`mktemp -d $tmpdir/libtool-XXXXXX 2> /dev/null`
419 + if test $? = 0 ; then :
420 + else
421 + tmpdir="$tmpdir/libtool-$$"
422 + fi
423 if $mkdir -p "$tmpdir" && chmod 700 "$tmpdir"; then :
424 else
425 $echo "$modename: error: cannot create temporary directory \`$tmpdir'" 1>&2
426 ENDPATCH
427}
428
429test_patch() {
430
431 local opts=""
432
433 if [ "${1}" = "--test" ]
434 then
435 opts="--force --dry-run"
436 fi
437
438 patch ${opts} -p0 <<-"ENDPATCH"
439 --- ./ltmain.sh Tue May 29 19:16:03 2001
440 +++ ./ltmain.sh Tue May 29 21:26:50 2001
441 @@ -459,7 +459,7 @@
442 pic_mode=default
443 ;;
444 esac
445 - if test $pic_mode = no && test "$deplibs_check_method" != pass_all; then
446 + if test "$pic_mode" = no && test "$deplibs_check_method" != pass_all; then
447 # non-PIC code in shared libraries is not supported
448 pic_mode=default
449 fi
450 @@ -1343,7 +1343,7 @@
451 ;;
452 esac
453 for pass in $passes; do
454 - if test $linkmode = prog; then
455 + if test "$linkmode" = prog; then
456 # Determine which files to process
457 case $pass in
458 dlopen)
459 @@ -1360,11 +1360,11 @@
460 found=no
461 case $deplib in
462 -l*)
463 - if test $linkmode = oldlib && test $linkmode = obj; then
464 + if test "$linkmode" = oldlib && test "$linkmode" = obj; then
465 $echo "$modename: warning: \`-l' is ignored for archives/objects: $deplib" 1>&2
466 continue
467 fi
468 - if test $pass = conv; then
469 + if test "$pass" = conv; then
470 deplibs="$deplib $deplibs"
471 continue
472 fi
473 @@ -1384,7 +1384,7 @@
474 finalize_deplibs="$deplib $finalize_deplibs"
475 else
476 deplibs="$deplib $deplibs"
477 - test $linkmode = lib && newdependency_libs="$deplib $newdependency_libs"
478 + test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs"
479 fi
480 continue
481 fi
482 @@ -1393,16 +1393,16 @@
483 case $linkmode in
484 lib)
485 deplibs="$deplib $deplibs"
486 - test $pass = conv && continue
487 + test "$pass" = conv && continue
488 newdependency_libs="$deplib $newdependency_libs"
489 newlib_search_path="$newlib_search_path "`$echo "X$deplib" | $Xsed -e 's/^-L//'`
490 ;;
491 prog)
492 - if test $pass = conv; then
493 + if test "$pass" = conv; then
494 deplibs="$deplib $deplibs"
495 continue
496 fi
497 - if test $pass = scan; then
498 + if test "$pass" = scan; then
499 deplibs="$deplib $deplibs"
500 newlib_search_path="$newlib_search_path "`$echo "X$deplib" | $Xsed -e 's/^-L//'`
501 else
502 @@ -1417,7 +1417,7 @@
503 continue
504 ;; # -L
505 -R*)
506 - if test $pass = link; then
507 + if test "$pass" = link; then
508 dir=`$echo "X$deplib" | $Xsed -e 's/^-R//'`
509 # Make sure the xrpath contains only unique directories.
510 case "$xrpath " in
511 @@ -1430,7 +1430,7 @@
512 ;;
513 *.la) lib="$deplib" ;;
514 *.$libext)
515 - if test $pass = conv; then
516 + if test "$pass" = conv; then
517 deplibs="$deplib $deplibs"
518 continue
519 fi
520 @@ -1451,7 +1451,7 @@
521 continue
522 ;;
523 prog)
524 - if test $pass != link; then
525 + if test "$pass" != link; then
526 deplibs="$deplib $deplibs"
527 else
528 compile_deplibs="$deplib $compile_deplibs"
529 @@ -1462,7 +1462,7 @@
530 esac # linkmode
531 ;; # *.$libext
532 *.lo | *.$objext)
533 - if test $pass = dlpreopen || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then
534 + if test "$pass" = dlpreopen || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then
535 # If there is no dlopen support or we're linking statically,
536 # we need to preload.
537 newdlprefiles="$newdlprefiles $deplib"
538 @@ -1512,13 +1512,13 @@
539
540 if test "$linkmode,$pass" = "lib,link" ||
541 test "$linkmode,$pass" = "prog,scan" ||
542 - { test $linkmode = oldlib && test $linkmode = obj; }; then
543 + { test "$linkmode" = oldlib && test "$linkmode" = obj; }; then
544 # Add dl[pre]opened files of deplib
545 test -n "$dlopen" && dlfiles="$dlfiles $dlopen"
546 test -n "$dlpreopen" && dlprefiles="$dlprefiles $dlpreopen"
547 fi
548
549 - if test $pass = conv; then
550 + if test "$pass" = conv; then
551 # Only check for convenience libraries
552 deplibs="$lib $deplibs"
553 if test -z "$libdir"; then
554 @@ -1537,7 +1537,7 @@
555 esac
556 tmp_libs="$tmp_libs $deplib"
557 done
558 - elif test $linkmode != prog && test $linkmode != lib; then
559 + elif test "$linkmode" != prog && test "$linkmode" != lib; then
560 $echo "$modename: \`$lib' is not a convenience library" 1>&2
561 exit 1
562 fi
563 @@ -1555,7 +1555,7 @@
564 fi
565
566 # This library was specified with -dlopen.
567 - if test $pass = dlopen; then
568 + if test "$pass" = dlopen; then
569 if test -z "$libdir"; then
570 $echo "$modename: cannot -dlopen a convenience library: \`$lib'" 1>&2
571 exit 1
572 @@ -1604,7 +1604,7 @@
573 name=`$echo "X$laname" | $Xsed -e 's/\.la$//' -e 's/^lib//'`
574
575 # This library was specified with -dlpreopen.
576 - if test $pass = dlpreopen; then
577 + if test "$pass" = dlpreopen; then
578 if test -z "$libdir"; then
579 $echo "$modename: cannot -dlpreopen a convenience library: \`$lib'" 1>&2
580 exit 1
581 @@ -1623,7 +1623,7 @@
582
583 if test -z "$libdir"; then
584 # Link the convenience library
585 - if test $linkmode = lib; then
586 + if test "$linkmode" = lib; then
587 deplibs="$dir/$old_library $deplibs"
588 elif test "$linkmode,$pass" = "prog,link"; then
589 compile_deplibs="$dir/$old_library $compile_deplibs"
590 @@ -1634,7 +1634,7 @@
591 continue
592 fi
593
594 - if test $linkmode = prog && test $pass != link; then
595 + if test "$linkmode" = prog && test "$pass" != link; then
596 newlib_search_path="$newlib_search_path $ladir"
597 deplibs="$lib $deplibs"
598
599 @@ -1671,7 +1671,7 @@
600 # Link against this shared library
601
602 if test "$linkmode,$pass" = "prog,link" ||
603 - { test $linkmode = lib && test $hardcode_into_libs = yes; }; then
604 + { test "$linkmode" = lib && test "$hardcode_into_libs" = yes; }; then
605 # Hardcode the library path.
606 # Skip directories that are in the system default run-time
607 # search path.
608 @@ -1693,7 +1693,7 @@
609 esac
610 ;;
611 esac
612 - if test $linkmode = prog; then
613 + if test "$linkmode" = prog; then
614 # We need to hardcode the library path
615 if test -n "$shlibpath_var"; then
616 # Make sure the rpath contains only unique directories.
617 @@ -1777,7 +1777,7 @@
618 linklib=$newlib
619 fi # test -n $old_archive_from_expsyms_cmds
620
621 - if test $linkmode = prog || test "$mode" != relink; then
622 + if test "$linkmode" = prog || test "$mode" != relink; then
623 add_shlibpath=
624 add_dir=
625 add=
626 @@ -1826,7 +1826,7 @@
627 *) compile_shlibpath="$compile_shlibpath$add_shlibpath:" ;;
628 esac
629 fi
630 - if test $linkmode = prog; then
631 + if test "$linkmode" = prog; then
632 test -n "$add_dir" && compile_deplibs="$add_dir $compile_deplibs"
633 test -n "$add" && compile_deplibs="$add $compile_deplibs"
634 else
635 @@ -1843,7 +1843,7 @@
636 fi
637 fi
638
639 - if test $linkmode = prog || test "$mode" = relink; then
640 + if test "$linkmode" = prog || test "$mode" = relink; then
641 add_shlibpath=
642 add_dir=
643 add=
644 @@ -1865,7 +1865,7 @@
645 add="-l$name"
646 fi
647
648 - if test $linkmode = prog; then
649 + if test "$linkmode" = prog; then
650 test -n "$add_dir" && finalize_deplibs="$add_dir $finalize_deplibs"
651 test -n "$add" && finalize_deplibs="$add $finalize_deplibs"
652 else
653 @@ -1873,7 +1873,7 @@
654 test -n "$add" && deplibs="$add $deplibs"
655 fi
656 fi
657 - elif test $linkmode = prog; then
658 + elif test "$linkmode" = prog; then
659 if test "$alldeplibs" = yes &&
660 { test "$deplibs_check_method" = pass_all ||
661 { test "$build_libtool_libs" = yes &&
662 @@ -1932,9 +1932,9 @@
663 fi
664 fi # link shared/static library?
665
666 - if test $linkmode = lib; then
667 + if test "$linkmode" = lib; then
668 if test -n "$dependency_libs" &&
669 - { test $hardcode_into_libs != yes || test $build_old_libs = yes ||
670 + { test "$hardcode_into_libs" != yes || test $build_old_libs = yes ||
671 test $link_static = yes; }; then
672 # Extract -R from dependency_libs
673 temp_deplibs=
674 @@ -1964,7 +1964,7 @@
675 tmp_libs="$tmp_libs $deplib"
676 done
677
678 - if test $link_all_deplibs != no; then
679 + if test "$link_all_deplibs" != no; then
680 # Add the search paths of all dependency libraries
681 for deplib in $dependency_libs; do
682 case $deplib in
683 @@ -2007,15 +2007,15 @@
684 fi # link_all_deplibs != no
685 fi # linkmode = lib
686 done # for deplib in $libs
687 - if test $pass = dlpreopen; then
688 + if test "$pass" = dlpreopen; then
689 # Link the dlpreopened libraries before other libraries
690 for deplib in $save_deplibs; do
691 deplibs="$deplib $deplibs"
692 done
693 fi
694 - if test $pass != dlopen; then
695 - test $pass != scan && dependency_libs="$newdependency_libs"
696 - if test $pass != conv; then
697 + if test "$pass" != dlopen; then
698 + test "$pass" != scan && dependency_libs="$newdependency_libs"
699 + if test "$pass" != conv; then
700 # Make sure lib_search_path contains only unique directories.
701 lib_search_path=
702 for dir in $newlib_search_path; do
703 @@ -2073,7 +2073,7 @@
704 deplibs=
705 fi
706 done # for pass
707 - if test $linkmode = prog; then
708 + if test "$linkmode" = prog; then
709 dlfiles="$newdlfiles"
710 dlprefiles="$newdlprefiles"
711 fi
712 @@ -2410,7 +2410,7 @@
713 ;;
714 *)
715 # Add libc to deplibs on all other systems if necessary.
716 - if test $build_libtool_need_lc = "yes"; then
717 + if test "$build_libtool_need_lc" = "yes"; then
718 deplibs="$deplibs -lc"
719 fi
720 ;;
721 @@ -2683,7 +2683,7 @@
722
723 # Test again, we may have decided not to build it any more
724 if test "$build_libtool_libs" = yes; then
725 - if test $hardcode_into_libs = yes; then
726 + if test "$hardcode_into_libs" = yes; then
727 # Hardcode the library paths
728 hardcode_libdirs=
729 dep_rpath=
730 ENDPATCH
731}
732
733reversedeps_patch() {
734
735 local opts=""
736
737 if [ "${1}" = "--test" ]
738 then
739 opts="--force --dry-run"
740 fi
741
742 patch ${opts} -p0 <<-"ENDPATCH"
743 --- ltmain.sh.orig Sat Mar 23 22:48:45 2002
744 +++ ltmain.sh Sat Mar 23 22:45:38 2002
745 @@ -1553,6 +1553,8 @@
746 convenience="$convenience $ladir/$objdir/$old_library"
747 old_convenience="$old_convenience $ladir/$objdir/$old_library"
748 tmp_libs=
749 + # PKGW
750 + dependency_libs=
751 for deplib in $dependency_libs; do
752 deplibs="$deplib $deplibs"
753 case "$tmp_libs " in
754 @@ -1668,6 +1670,8 @@
755 fi
756
757 tmp_libs=
758 + #PKGW
759 + dependency_libs=
760 for deplib in $dependency_libs; do
761 case $deplib in
762 -L*) newlib_search_path="$newlib_search_path "`$echo "X$deplib" | $Xsed -e 's/^-L//'`;; ### testsuite: skip nested quoting test
763 @@ -2081,7 +2085,7 @@
764 -L*)
765 case " $tmp_libs " in
766 *" $deplib "*) ;;
767 - *) tmp_libs="$tmp_libs $deplib" ;;
768 + *) tmp_libs="$deplib $tmp_libs" ;;
769 esac
770 ;;
771 *) tmp_libs="$tmp_libs $deplib" ;;
772 ENDPATCH
773}
774

Legend:
Removed from v.1.11  
changed lines
  Added in v.1.83

  ViewVC Help
Powered by ViewVC 1.1.20