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

Diff of /eclass/libtool.eclass

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

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

Legend:
Removed from v.1.20  
changed lines
  Added in v.1.82

  ViewVC Help
Powered by ViewVC 1.1.20