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

Diff of /eclass/libtool.eclass

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

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

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

  ViewVC Help
Powered by ViewVC 1.1.20