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

Diff of /eclass/libtool.eclass

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

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

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

  ViewVC Help
Powered by ViewVC 1.1.20