* Charles Wilson <[EMAIL PROTECTED]> [20021030 21:20]:
> David I. Lehn wrote:
>
> >Could someone -please- either let all of us know how to properly deal
> >with this relink issue or just apply the ltmain.sh patches in the latest
> >Debian libtool package to CVS? Or at least comment on how it should be
> >modified if it's not acceptable. Thanks.
> >
> >Grab the latest diffs from one of:
> >http://packages.debian.org/unstable/devel/libtool.html
> >http://packages.qa.debian.org/libt/libtool.html
>
> I'll take a look at them, unless somebody beats me to it. However, that
> patch is 282k against libtool-1.4.3. It is going to be quite difficult
> to extract the portion that fixes this problem, and then integrate it
> into libtool CVS (which has seen massive changes since 1.4.x).
>
> Any chance that the debian maintainer could give some advice on how to
> proceed?
>
Heh... just need the ltmain.sh part. Use filterdiff from patchutils:
zcat libtool_1.4.3-2.diff.gz | filterdiff -i \*ltmain.sh
Patch attached. It just patches ltmain.sh... I haven't looked to see if
there are other related fixes.
Notice also the "exit 1" vs "continue" when a relink fails... is there a
good reason not to exit? It does leave the -already-installed- files
broken if the relink fails, which can easily be missed unless you know
to scan install log files for it.
-dave
--- libtool-1.4.3.orig/ltmain.sh
+++ libtool-1.4.3/ltmain.sh
@@ -56,7 +56,7 @@
PROGRAM=ltmain.sh
PACKAGE=libtool
VERSION=1.4.3
-TIMESTAMP=" (1.922.2.110 2002/10/23 01:39:54)"
+TIMESTAMP=" (1.922.2.111 2002/10/23 02:54:36)"
default_mode=
help="Try \`$progname --help' for more information."
@@ -226,7 +226,7 @@
# Infer the operation mode.
if test -z "$mode"; then
case $nonopt in
- *cc | *++ | gcc* | *-gcc* | xlc*)
+ *cc | *++ | gcc* | *-gcc* | g++* | xlc*)
mode=link
for arg
do
@@ -768,6 +768,7 @@
linker_flags=
dllsearchpath=
lib_search_path=`pwd`
+ inst_prefix_dir=
avoid_version=no
dlfiles=
@@ -898,6 +899,11 @@
prev=
continue
;;
+ inst_prefix)
+ inst_prefix_dir="$arg"
+ prev=
+ continue
+ ;;
release)
release="-$arg"
prev=
@@ -999,6 +1005,11 @@
continue
;;
+ -inst-prefix-dir)
+ prev=inst_prefix
+ continue
+ ;;
+
# The native IRIX linker understands -LANG:*, -LIST:* and -LNO:*
# so, if we see these flags be careful not to treat them like -L
-L[A-Z][A-Z]*:*)
@@ -1846,6 +1857,14 @@
add="$dir/$linklib"
elif test "$hardcode_minus_L" = yes; then
add_dir="-L$dir"
+ # Try looking first in the location we're being installed to.
+ if test -n "$inst_prefix_dir"; then
+ case "$libdir" in
+ [\/]*)
+ add_dir="-L$inst_prefix_dir$libdir $add_dir"
+ ;;
+ esac
+ fi
add="-l$name"
elif test "$hardcode_shlibpath_var" = yes; then
add_shlibpath="$dir"
@@ -1904,6 +1923,14 @@
else
# We cannot seem to hardcode it, guess we'll fake it.
add_dir="-L$libdir"
+ # Try looking first in the location we're being installed to.
+ if test -n "$inst_prefix_dir"; then
+ case "$libdir" in
+ [\/]*)
+ add_dir="-L$inst_prefix_dir$libdir $add_dir"
+ ;;
+ esac
+ fi
add="-l$name"
fi
@@ -3928,7 +3955,7 @@
fi
done
# Quote the link command for shipping.
- relink_command="(cd `pwd`; $SHELL $0 --mode=relink $libtool_args)"
+ relink_command="(cd `pwd`; $SHELL $0 --mode=relink $libtool_args
+@inst_prefix_dir@)"
relink_command=`$echo "X$relink_command" | $Xsed -e "$sed_quote_subst"`
# Only create the output if not a dry run.
@@ -4229,12 +4256,30 @@
dir="$dir$objdir"
if test -n "$relink_command"; then
+ # Determine the prefix the user has applied to our future dir.
+ inst_prefix_dir=`$echo "$destdir" | sed "s%$libdir\$%%"`
+
+ # Don't allow the user to place us outside of our expected
+ # location b/c this prevents finding dependent libraries that
+ # are installed to the same prefix.
+ if test "$inst_prefix_dir" = "$destdir"; then
+ $echo "$modename: error: cannot install \`$file' to a directory not
+ending in $libdir" 1>&2
+ exit 1
+ fi
+
+ if test -n "$inst_prefix_dir"; then
+ # Stick the inst_prefix_dir data into the link command.
+ relink_command=`$echo "$relink_command" | sed
+"s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%"`
+ else
+ relink_command=`$echo "$relink_command" | sed "s%@inst_prefix_dir@%%"`
+ fi
+
$echo "$modename: warning: relinking \`$file'" 1>&2
$show "$relink_command"
if $run eval "$relink_command"; then :
else
$echo "$modename: error: relink \`$file' with the above command before
installing it" 1>&2
- continue
+ exit 1
fi
fi