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

Diff of /eclass/libtool.eclass

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

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

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

  ViewVC Help
Powered by ViewVC 1.1.20