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

Diff of /eclass/libtool.eclass

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

Revision 1.10 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.10 2002/06/29 23:50:56 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 for y in test_patch relink_patch tmp_patch portage_patch 348 if [[ -z ${ELT_APPLIED_PATCHES} ]] ; then
106 do 349 if [[ ${do_portage} == "no" && \
107 if [ "${dopatch}" = "yes" ] 350 ${do_reversedeps} == "no" && \
351 ${do_only_patches} == "no" && \
352 ${deptoremove} == "" ]]
108 then 353 then
109 case ${y} in 354 ewarn "Cannot apply any patches, please file a bug about this"
110 test_patch) 355 die
111 if [ "${dotest}" = "no" ]
112 then
113 continue
114 fi
115 ;;
116 relink_patch)
117 if [ "${dorelink}" = "no" ]
118 then
119 continue
120 fi
121 ;;
122 tmp_patch)
123 if [ "${dotmp}" = "no" ]
124 then
125 continue
126 fi
127 ;;
128 portage_patch)
129 if [ "${doportage}" = "no" ]
130 then
131 continue
132 fi
133 ;;
134 esac
135
136 einfo "Applying libtool-${y/_patch/}.patch..."
137 eval ${y} $>${T}/libtool.foo
138 elif [ "${portage}" = "no" ] && [ "${reversedeps}" = "no" ]
139 then
140 ewarn "Cannot apply any patch, running libtoolize..."
141 libtoolize --copy --force
142 break
143 fi
144 done
145
146 if [ "${reversedeps}" = "yes" ]
147 then
148 if eval reversedeps_patch --test $>${T}/libtool.foo
149 then
150 einfo "Applying libtool-reverse-deps.patch..."
151 eval reversedeps_patch $>${T}/libtool.foo
152 fi 356 fi
153 fi 357 fi
358
359 [[ -f ${x}/libtool ]] && rm -f "${x}/libtool"
360
361 >> "${x}/.elibtoolized"
154 done 362 done
155 363
156 if [ -f libtool ] 364 cd "${start_dir}"
157 then 365}
158 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
159 fi 430 fi
160 431
161 # We need to change the pwd back to $S, as we may be called in 432 echo 1
162 # src_compile() 433 return 1
163 cd ${S}
164} 434}
165
166#
167# Returns all the directories containing ltmain.sh
168#
169find_ltmain() {
170
171 local x=""
172 local dirlist=""
173
174 for x in $(find ${S} -name 'ltmain.sh')
175 do
176 dirlist="${dirlist} ${x%/*}"
177 done
178
179 echo "${dirlist}"
180}
181
182#
183# Various patches we want to apply.
184#
185# Contains: portage_patch
186# relink_patch
187# test_patch
188#
189portage_patch() {
190
191 local opts=""
192
193 if [ "${1}" = "--test" ]
194 then
195 opts="--force --dry-run"
196 fi
197
198 patch ${opts} -p0 <<-"ENDPATCH"
199 --- ltmain.sh.orig Wed Apr 3 01:19:37 2002
200 +++ ltmain.sh Sun May 26 19:50:52 2002
201 @@ -3940,9 +3940,41 @@
202 $echo "$modename: \`$deplib' is not a valid libtool archive" 1>&2
203 exit 1
204 fi
205 - newdependency_libs="$newdependency_libs $libdir/$name"
206 + # We do not want portage's install root ($D) present. Check only for
207 + # this if the .la is being installed.
208 + if test "$installed" = yes && test "$D"; then
209 + mynewdependency_lib="`echo "$libdir/$name" |sed -e "s:$D::g" -e 's://:/:g'`"
210 + else
211 + mynewdependency_lib="$libdir/$name"
212 + fi
213 + # Do not add duplicates
214 + if test "$mynewdependency_lib"; then
215 + if test -z "`echo $newdependency_libs |grep -e "$mynewdependency_lib"`"; then
216 + newdependency_libs="$newdependency_libs $mynewdependency_lib"
217 + fi
218 + fi
219 + ;;
220 + *)
221 + if test "$installed" = yes; then
222 + # We do not want portage's build root ($S) present.
223 + if test -n "`echo $deplib |grep -e "$S"`" && test "$S"; then
224 + newdependency_libs=""
225 + # We do not want portage's install root ($D) present.
226 + elif test -n "`echo $deplib |grep -e "$D"`" && test "$D"; then
227 + mynewdependency_lib="`echo "$deplib" |sed -e "s:$D::g" -e 's://:/:g'`"
228 + else
229 + mynewdependency_lib="$deplib"
230 + fi
231 + else
232 + mynewdependency_lib="$deplib"
233 + fi
234 + # Do not add duplicates
235 + if test "$mynewdependency_lib"; then
236 + if test -z "`echo $newdependency_libs |grep -e "$mynewdependency_lib"`"; then
237 + newdependency_libs="$newdependency_libs $mynewdependency_lib"
238 + fi
239 + fi
240 ;;
241 - *) newdependency_libs="$newdependency_libs $deplib" ;;
242 esac
243 done
244 dependency_libs="$newdependency_libs"
245 @@ -3975,6 +4005,10 @@
246 case $host,$output,$installed,$module,$dlname in
247 *cygwin*,*lai,yes,no,*.dll) tdlname=../bin/$dlname ;;
248 esac
249 + # Do not add duplicates
250 + if test "$installed" = yes && test "$D"; then
251 + install_libdir="`echo "$install_libdir" |sed -e "s:$D::g" -e 's://:/:g'`"
252 + fi
253 $echo > $output "\
254 # $outputname - a libtool library file
255 # Generated by $PROGRAM - GNU $PACKAGE $VERSION$TIMESTAMP
256 ENDPATCH
257}
258
259relink_patch() {
260
261 local opts=""
262 local retval=0
263
264 if [ "${1}" = "--test" ]
265 then
266 opts="--force --dry-run"
267 fi
268
269 patch ${opts} -p0 <<-"ENDPATCH"
270 --- ltmain.sh Sun Aug 12 18:08:05 2001
271 +++ ltmain-relinkable.sh Tue Aug 28 18:55:13 2001
272 @@ -827,6 +827,7 @@
273 linker_flags=
274 dllsearchpath=
275 lib_search_path=`pwd`
276 + inst_prefix_dir=
277
278 avoid_version=no
279 dlfiles=
280 @@ -959,6 +960,11 @@
281 prev=
282 continue
283 ;;
284 + inst_prefix)
285 + inst_prefix_dir="$arg"
286 + prev=
287 + continue
288 + ;;
289 release)
290 release="-$arg"
291 prev=
292 @@ -1167,6 +1173,11 @@
293 continue
294 ;;
295
296 + -inst-prefix-dir)
297 + prev=inst_prefix
298 + continue
299 + ;;
300 +
301 # The native IRIX linker understands -LANG:*, -LIST:* and -LNO:*
302 # so, if we see these flags be careful not to treat them like -L
303 -L[A-Z][A-Z]*:*)
304 @@ -2231,7 +2242,16 @@
305 if test "$hardcode_direct" = yes; then
306 add="$libdir/$linklib"
307 elif test "$hardcode_minus_L" = yes; then
308 - add_dir="-L$libdir"
309 + # Try looking first in the location we're being installed to.
310 + add_dir=
311 + if test -n "$inst_prefix_dir"; then
312 + case "$libdir" in
313 + [\\/]*)
314 + add_dir="-L$inst_prefix_dir$libdir"
315 + ;;
316 + esac
317 + fi
318 + add_dir="$add_dir -L$libdir"
319 add="-l$name"
320 elif test "$hardcode_shlibpath_var" = yes; then
321 case :$finalize_shlibpath: in
322 @@ -2241,7 +2261,16 @@
323 add="-l$name"
324 else
325 # We cannot seem to hardcode it, guess we'll fake it.
326 - add_dir="-L$libdir"
327 + # Try looking first in the location we're being installed to.
328 + add_dir=
329 + if test -n "$inst_prefix_dir"; then
330 + case "$libdir" in
331 + [\\/]*)
332 + add_dir="-L$inst_prefix_dir$libdir"
333 + ;;
334 + esac
335 + fi
336 + add_dir="$add_dir -L$libdir"
337 add="-l$name"
338 fi
339
340 @@ -4622,12 +4651,30 @@
341 dir="$dir$objdir"
342
343 if test -n "$relink_command"; then
344 + # Determine the prefix the user has applied to our future dir.
345 + inst_prefix_dir=`$echo "$destdir" | sed "s%$libdir\$%%"`
346 +
347 + # Don't allow the user to place us outside of our expected
348 + # location b/c this prevents finding dependent libraries that
349 + # are installed to the same prefix.
350 + if test "$inst_prefix_dir" = "$destdir"; then
351 + $echo "$modename: error: cannot install \`$file' to a directory not ending in $libdir" 1>&2
352 + exit 1
353 + fi
354 +
355 + if test -n "$inst_prefix_dir"; then
356 + # Stick the inst_prefix_dir data into the link command.
357 + relink_command=`$echo "$relink_command" | sed "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%"`
358 + else
359 + relink_command=`$echo "$relink_command" | sed "s%@inst_prefix_dir@%%"`
360 + fi
361 +
362 $echo "$modename: warning: relinking \`$file'" 1>&2
363 $show "$relink_command"
364 if $run eval "$relink_command"; then :
365 else
366 $echo "$modename: error: relink \`$file' with the above command before installing it" 1>&2
367 - continue
368 + exit 1
369 fi
370 fi
371
372 ENDPATCH
373
374 retval=$?
375
376 # This one dont apply clean to libtool-1.4.2a, so do it manually.
377 if [ "${1}" != "--test" ] && [ "${retval}" -eq 0 ]
378 then
379 cp ltmain.sh ltmain.sh.orig
380 sed -e 's:cd `pwd`; $SHELL $0 --mode=relink $libtool_args:cd `pwd`; $SHELL $0 --mode=relink $libtool_args @inst_prefix_dir@:' \
381 ltmain.sh.orig > ltmain.sh
382 rm -f ltmain.sh.orig
383 fi
384
385 return ${retval}
386}
387
388tmp_patch() {
389
390 local opts=""
391
392 if [ "${1}" = "--test" ]
393 then
394 opts="--force --dry-run"
395 fi
396
397 patch ${opts} -p0 <<-"ENDPATCH"
398 --- ltmain.sh Sun Aug 12 18:08:05 2001
399 +++ ltmain-relinkable.sh Tue Aug 28 18:55:13 2001
400 @@ -4782,7 +4829,11 @@
401 if test "$finalize" = yes && test -z "$run"; then
402 tmpdir="/tmp"
403 test -n "$TMPDIR" && tmpdir="$TMPDIR"
404 - tmpdir="$tmpdir/libtool-$$"
405 + tmpdir=`mktemp -d $tmpdir/libtool-XXXXXX 2> /dev/null`
406 + if test $? = 0 ; then :
407 + else
408 + tmpdir="$tmpdir/libtool-$$"
409 + fi
410 if $mkdir -p "$tmpdir" && chmod 700 "$tmpdir"; then :
411 else
412 $echo "$modename: error: cannot create temporary directory \`$tmpdir'" 1>&2
413 ENDPATCH
414}
415
416test_patch() {
417
418 local opts=""
419
420 if [ "${1}" = "--test" ]
421 then
422 opts="--force --dry-run"
423 fi
424
425 patch ${opts} -p0 <<-"ENDPATCH"
426 --- ./ltmain.sh Tue May 29 19:16:03 2001
427 +++ ./ltmain.sh Tue May 29 21:26:50 2001
428 @@ -459,7 +459,7 @@
429 pic_mode=default
430 ;;
431 esac
432 - if test $pic_mode = no && test "$deplibs_check_method" != pass_all; then
433 + if test "$pic_mode" = no && test "$deplibs_check_method" != pass_all; then
434 # non-PIC code in shared libraries is not supported
435 pic_mode=default
436 fi
437 @@ -1343,7 +1343,7 @@
438 ;;
439 esac
440 for pass in $passes; do
441 - if test $linkmode = prog; then
442 + if test "$linkmode" = prog; then
443 # Determine which files to process
444 case $pass in
445 dlopen)
446 @@ -1360,11 +1360,11 @@
447 found=no
448 case $deplib in
449 -l*)
450 - if test $linkmode = oldlib && test $linkmode = obj; then
451 + if test "$linkmode" = oldlib && test "$linkmode" = obj; then
452 $echo "$modename: warning: \`-l' is ignored for archives/objects: $deplib" 1>&2
453 continue
454 fi
455 - if test $pass = conv; then
456 + if test "$pass" = conv; then
457 deplibs="$deplib $deplibs"
458 continue
459 fi
460 @@ -1384,7 +1384,7 @@
461 finalize_deplibs="$deplib $finalize_deplibs"
462 else
463 deplibs="$deplib $deplibs"
464 - test $linkmode = lib && newdependency_libs="$deplib $newdependency_libs"
465 + test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs"
466 fi
467 continue
468 fi
469 @@ -1393,16 +1393,16 @@
470 case $linkmode in
471 lib)
472 deplibs="$deplib $deplibs"
473 - test $pass = conv && continue
474 + test "$pass" = conv && continue
475 newdependency_libs="$deplib $newdependency_libs"
476 newlib_search_path="$newlib_search_path "`$echo "X$deplib" | $Xsed -e 's/^-L//'`
477 ;;
478 prog)
479 - if test $pass = conv; then
480 + if test "$pass" = conv; then
481 deplibs="$deplib $deplibs"
482 continue
483 fi
484 - if test $pass = scan; then
485 + if test "$pass" = scan; then
486 deplibs="$deplib $deplibs"
487 newlib_search_path="$newlib_search_path "`$echo "X$deplib" | $Xsed -e 's/^-L//'`
488 else
489 @@ -1417,7 +1417,7 @@
490 continue
491 ;; # -L
492 -R*)
493 - if test $pass = link; then
494 + if test "$pass" = link; then
495 dir=`$echo "X$deplib" | $Xsed -e 's/^-R//'`
496 # Make sure the xrpath contains only unique directories.
497 case "$xrpath " in
498 @@ -1430,7 +1430,7 @@
499 ;;
500 *.la) lib="$deplib" ;;
501 *.$libext)
502 - if test $pass = conv; then
503 + if test "$pass" = conv; then
504 deplibs="$deplib $deplibs"
505 continue
506 fi
507 @@ -1451,7 +1451,7 @@
508 continue
509 ;;
510 prog)
511 - if test $pass != link; then
512 + if test "$pass" != link; then
513 deplibs="$deplib $deplibs"
514 else
515 compile_deplibs="$deplib $compile_deplibs"
516 @@ -1462,7 +1462,7 @@
517 esac # linkmode
518 ;; # *.$libext
519 *.lo | *.$objext)
520 - if test $pass = dlpreopen || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then
521 + if test "$pass" = dlpreopen || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then
522 # If there is no dlopen support or we're linking statically,
523 # we need to preload.
524 newdlprefiles="$newdlprefiles $deplib"
525 @@ -1512,13 +1512,13 @@
526
527 if test "$linkmode,$pass" = "lib,link" ||
528 test "$linkmode,$pass" = "prog,scan" ||
529 - { test $linkmode = oldlib && test $linkmode = obj; }; then
530 + { test "$linkmode" = oldlib && test "$linkmode" = obj; }; then
531 # Add dl[pre]opened files of deplib
532 test -n "$dlopen" && dlfiles="$dlfiles $dlopen"
533 test -n "$dlpreopen" && dlprefiles="$dlprefiles $dlpreopen"
534 fi
535
536 - if test $pass = conv; then
537 + if test "$pass" = conv; then
538 # Only check for convenience libraries
539 deplibs="$lib $deplibs"
540 if test -z "$libdir"; then
541 @@ -1537,7 +1537,7 @@
542 esac
543 tmp_libs="$tmp_libs $deplib"
544 done
545 - elif test $linkmode != prog && test $linkmode != lib; then
546 + elif test "$linkmode" != prog && test "$linkmode" != lib; then
547 $echo "$modename: \`$lib' is not a convenience library" 1>&2
548 exit 1
549 fi
550 @@ -1555,7 +1555,7 @@
551 fi
552
553 # This library was specified with -dlopen.
554 - if test $pass = dlopen; then
555 + if test "$pass" = dlopen; then
556 if test -z "$libdir"; then
557 $echo "$modename: cannot -dlopen a convenience library: \`$lib'" 1>&2
558 exit 1
559 @@ -1604,7 +1604,7 @@
560 name=`$echo "X$laname" | $Xsed -e 's/\.la$//' -e 's/^lib//'`
561
562 # This library was specified with -dlpreopen.
563 - if test $pass = dlpreopen; then
564 + if test "$pass" = dlpreopen; then
565 if test -z "$libdir"; then
566 $echo "$modename: cannot -dlpreopen a convenience library: \`$lib'" 1>&2
567 exit 1
568 @@ -1623,7 +1623,7 @@
569
570 if test -z "$libdir"; then
571 # Link the convenience library
572 - if test $linkmode = lib; then
573 + if test "$linkmode" = lib; then
574 deplibs="$dir/$old_library $deplibs"
575 elif test "$linkmode,$pass" = "prog,link"; then
576 compile_deplibs="$dir/$old_library $compile_deplibs"
577 @@ -1634,7 +1634,7 @@
578 continue
579 fi
580
581 - if test $linkmode = prog && test $pass != link; then
582 + if test "$linkmode" = prog && test "$pass" != link; then
583 newlib_search_path="$newlib_search_path $ladir"
584 deplibs="$lib $deplibs"
585
586 @@ -1671,7 +1671,7 @@
587 # Link against this shared library
588
589 if test "$linkmode,$pass" = "prog,link" ||
590 - { test $linkmode = lib && test $hardcode_into_libs = yes; }; then
591 + { test "$linkmode" = lib && test "$hardcode_into_libs" = yes; }; then
592 # Hardcode the library path.
593 # Skip directories that are in the system default run-time
594 # search path.
595 @@ -1693,7 +1693,7 @@
596 esac
597 ;;
598 esac
599 - if test $linkmode = prog; then
600 + if test "$linkmode" = prog; then
601 # We need to hardcode the library path
602 if test -n "$shlibpath_var"; then
603 # Make sure the rpath contains only unique directories.
604 @@ -1777,7 +1777,7 @@
605 linklib=$newlib
606 fi # test -n $old_archive_from_expsyms_cmds
607
608 - if test $linkmode = prog || test "$mode" != relink; then
609 + if test "$linkmode" = prog || test "$mode" != relink; then
610 add_shlibpath=
611 add_dir=
612 add=
613 @@ -1826,7 +1826,7 @@
614 *) compile_shlibpath="$compile_shlibpath$add_shlibpath:" ;;
615 esac
616 fi
617 - if test $linkmode = prog; then
618 + if test "$linkmode" = prog; then
619 test -n "$add_dir" && compile_deplibs="$add_dir $compile_deplibs"
620 test -n "$add" && compile_deplibs="$add $compile_deplibs"
621 else
622 @@ -1843,7 +1843,7 @@
623 fi
624 fi
625
626 - if test $linkmode = prog || test "$mode" = relink; then
627 + if test "$linkmode" = prog || test "$mode" = relink; then
628 add_shlibpath=
629 add_dir=
630 add=
631 @@ -1865,7 +1865,7 @@
632 add="-l$name"
633 fi
634
635 - if test $linkmode = prog; then
636 + if test "$linkmode" = prog; then
637 test -n "$add_dir" && finalize_deplibs="$add_dir $finalize_deplibs"
638 test -n "$add" && finalize_deplibs="$add $finalize_deplibs"
639 else
640 @@ -1873,7 +1873,7 @@
641 test -n "$add" && deplibs="$add $deplibs"
642 fi
643 fi
644 - elif test $linkmode = prog; then
645 + elif test "$linkmode" = prog; then
646 if test "$alldeplibs" = yes &&
647 { test "$deplibs_check_method" = pass_all ||
648 { test "$build_libtool_libs" = yes &&
649 @@ -1932,9 +1932,9 @@
650 fi
651 fi # link shared/static library?
652
653 - if test $linkmode = lib; then
654 + if test "$linkmode" = lib; then
655 if test -n "$dependency_libs" &&
656 - { test $hardcode_into_libs != yes || test $build_old_libs = yes ||
657 + { test "$hardcode_into_libs" != yes || test $build_old_libs = yes ||
658 test $link_static = yes; }; then
659 # Extract -R from dependency_libs
660 temp_deplibs=
661 @@ -1964,7 +1964,7 @@
662 tmp_libs="$tmp_libs $deplib"
663 done
664
665 - if test $link_all_deplibs != no; then
666 + if test "$link_all_deplibs" != no; then
667 # Add the search paths of all dependency libraries
668 for deplib in $dependency_libs; do
669 case $deplib in
670 @@ -2007,15 +2007,15 @@
671 fi # link_all_deplibs != no
672 fi # linkmode = lib
673 done # for deplib in $libs
674 - if test $pass = dlpreopen; then
675 + if test "$pass" = dlpreopen; then
676 # Link the dlpreopened libraries before other libraries
677 for deplib in $save_deplibs; do
678 deplibs="$deplib $deplibs"
679 done
680 fi
681 - if test $pass != dlopen; then
682 - test $pass != scan && dependency_libs="$newdependency_libs"
683 - if test $pass != conv; then
684 + if test "$pass" != dlopen; then
685 + test "$pass" != scan && dependency_libs="$newdependency_libs"
686 + if test "$pass" != conv; then
687 # Make sure lib_search_path contains only unique directories.
688 lib_search_path=
689 for dir in $newlib_search_path; do
690 @@ -2073,7 +2073,7 @@
691 deplibs=
692 fi
693 done # for pass
694 - if test $linkmode = prog; then
695 + if test "$linkmode" = prog; then
696 dlfiles="$newdlfiles"
697 dlprefiles="$newdlprefiles"
698 fi
699 @@ -2410,7 +2410,7 @@
700 ;;
701 *)
702 # Add libc to deplibs on all other systems if necessary.
703 - if test $build_libtool_need_lc = "yes"; then
704 + if test "$build_libtool_need_lc" = "yes"; then
705 deplibs="$deplibs -lc"
706 fi
707 ;;
708 @@ -2683,7 +2683,7 @@
709
710 # Test again, we may have decided not to build it any more
711 if test "$build_libtool_libs" = yes; then
712 - if test $hardcode_into_libs = yes; then
713 + if test "$hardcode_into_libs" = yes; then
714 # Hardcode the library paths
715 hardcode_libdirs=
716 dep_rpath=
717 ENDPATCH
718}
719
720reversedeps_patch() {
721
722 local opts=""
723
724 if [ "${1}" = "--test" ]
725 then
726 opts="--force --dry-run"
727 fi
728
729 patch ${opts} -p0 <<-"ENDPATCH"
730 --- ltmain.sh.orig Sat Mar 23 22:48:45 2002
731 +++ ltmain.sh Sat Mar 23 22:45:38 2002
732 @@ -1553,6 +1553,8 @@
733 convenience="$convenience $ladir/$objdir/$old_library"
734 old_convenience="$old_convenience $ladir/$objdir/$old_library"
735 tmp_libs=
736 + # PKGW
737 + dependency_libs=
738 for deplib in $dependency_libs; do
739 deplibs="$deplib $deplibs"
740 case "$tmp_libs " in
741 @@ -1668,6 +1670,8 @@
742 fi
743
744 tmp_libs=
745 + #PKGW
746 + dependency_libs=
747 for deplib in $dependency_libs; do
748 case $deplib in
749 -L*) newlib_search_path="$newlib_search_path "`$echo "X$deplib" | $Xsed -e 's/^-L//'`;; ### testsuite: skip nested quoting test
750 @@ -2081,7 +2085,7 @@
751 -L*)
752 case " $tmp_libs " in
753 *" $deplib "*) ;;
754 - *) tmp_libs="$tmp_libs $deplib" ;;
755 + *) tmp_libs="$deplib $tmp_libs" ;;
756 esac
757 ;;
758 *) tmp_libs="$tmp_libs $deplib" ;;
759 ENDPATCH
760}
761

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

  ViewVC Help
Powered by ViewVC 1.1.20