[svn.haxx.se] · SVN Dev · SVN Users · SVN Org · TSVN Dev · TSVN Users · Subclipse Dev · Subclipse Users · this month's index

Re: libtool relink failure notes

From: ryan <ryan_at_netidea.com>
Date: 2003-04-05 23:57:35 CEST

Hi,

This is a semi-well known problem.

This error also occurs when you don't install into the prefix directory.
Ie: you configure with --prefix=/usr/local and you make install
prefix=/usr/local/stow/subversion.

I managed to solve this by installing the sub projects (apr, apr-util, db,
neon) independently into /usr/local/stow, then while I was installing
subversion, use:
Export LD_LIBRARY_PATH=/usr/local/stow/subversion/lib

This will allow you to install even though you're using stow.

Regards,
-ryan

On 4/5/03 1:30 PM, "Greg Hudson" <ghudson@MIT.EDU> wrote:

> Searching the mailing list, I've seen sporadic reports of libtool
> relinking failures at install time. I've also seen it myself once. I
> don't think anyone here has ever determined exactly what's going on,
> except to note that it doesn't happen in very many circumstances.
>
> I ran into the problem in my job and was forced to figure out what was
> going on. Essentially, it's a known bug in some versions of libtool
> which will bite you if all of the following are true:
>
> * You are installing a package containing multiple interdependent
> libraries (such as Subversion).
> * You are installing into a DESTDIR area.
> * You do not have any libraries previously installed in the final
> $(libdir).
> * You (or the tarball creator) did not libtoolize with a fixed
> libtool. Debian-unstable and recent versions of Red Hat include
> fixes in their libtool packages; some other OS distributions
> presumably do so as well.
>
> The bug is that, when relinking, libtool only instructs the linker to
> look in $(libdir) for libraries, not in $(DESTDIR)$(libdir). Worse,
> libtool doesn't error out when the relink fails; it just silently
> declines to install a library, resulting in a partially populated
> package.
>
> Here is the fix from Red Hat 9.0's libtool SRPM, reformulated as a
> diff against ltmain.sh. We might consider doing something to ensure
> that this fix winds up in tarballs we distribute, but it would be
> pretty ugly since the tarball creator's installed libtool might or
> might not already have this fix.
>
> diff -u -r1.2 ltmain.sh
> --- ltmain.sh 5 Apr 2003 17:44:05 -0000 1.2
> +++ ltmain.sh 5 Apr 2003 21:01:36 -0000
> @@ -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]*:*)
> @@ -1893,7 +1904,16 @@
> if test "$hardcode_direct" = yes; then
> add="$libdir/$linklib"
> elif test "$hardcode_minus_L" = yes; then
> - add_dir="-L$libdir"
> + # Try looking first in the location we're being installed to.
> + add_dir=
> + if test -n "$inst_prefix_dir"; then
> + case "$libdir" in
> + [\\/]*)
> + add_dir="-L$inst_prefix_dir$libdir"
> + ;;
> + esac
> + fi
> + add_dir="$add_dir -L$libdir"
> add="-l$name"
> elif test "$hardcode_shlibpath_var" = yes; then
> case :$finalize_shlibpath: in
> @@ -1903,7 +1923,16 @@
> add="-l$name"
> 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.
> + add_dir=
> + if test -n "$inst_prefix_dir"; then
> + case "$libdir" in
> + [\\/]*)
> + add_dir="-L$inst_prefix_dir$libdir"
> + ;;
> + esac
> + fi
> + add_dir="$add_dir -L$libdir"
> add="-l$name"
> fi
>
> @@ -3928,7 +3957,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 +4258,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
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: dev-unsubscribe@subversion.tigris.org
> For additional commands, e-mail: dev-help@subversion.tigris.org
>

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@subversion.tigris.org
For additional commands, e-mail: dev-help@subversion.tigris.org
Received on Sat Apr 5 23:58:01 2003

This is an archived mail posted to the Subversion Dev mailing list.