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

Diff of /eclass/libtool.eclass

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

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

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

  ViewVC Help
Powered by ViewVC 1.1.20