pkgsrc/mk/buildlink3/libtool.sh
jlam 7783b66d89 Extend the capabilities of buildlink3's libtool wrapper a bit compared
to the stock libtool: you can now copy or symlink an uninstalled
libtool archive file somewhere else than its build directory, and you
can still link against it.  This allows us to more easily bolt libtool
build machinery onto packages that have unusual(ly crappy) build
systems that rely on installing libraries to some common build directory
after they're built.

We do this by adding a "buildlibdir" variable to the uninstalled
libtool archive that points to the build directory of the archive.
Whenever we link against this archive, we rewrite the path to archive
on the libtool command line so that it points to the true archive.
This allows the real libtool to find the files under $buildlibdir/.libs.
2004-03-30 17:25:19 +00:00

194 lines
3.5 KiB
Bash

#!@BUILDLINK_SHELL@
#
# $NetBSD: libtool.sh,v 1.17 2004/03/30 17:25:19 jlam Exp $
Xsed='@SED@ -e 1s/^X//'
sed_quote_subst='s/\([\\`\\"$\\\\]\)/\\\1/g'
buildcmd="@_BLNK_WRAP_BUILDCMD@"
quotearg="@_BLNK_WRAP_QUOTEARG@"
buffer="@_BLNK_WRAP_BUFFER@"
marshall="@_BLNK_WRAP_MARSHALL@"
private_pre_cache="@_BLNK_WRAP_PRIVATE_PRE_CACHE@"
private_cache_add="@_BLNK_WRAP_PRIVATE_CACHE_ADD@"
private_cache="@_BLNK_WRAP_PRIVATE_CACHE@"
private_post_cache="@_BLNK_WRAP_PRIVATE_POST_CACHE@"
pre_cache="@_BLNK_WRAP_PRE_CACHE@"
cache_add="@_BLNK_WRAP_CACHE_ADD@"
cache="@_BLNK_WRAP_CACHE@"
post_cache="@_BLNK_WRAP_POST_CACHE@"
logic="@_BLNK_WRAP_LOGIC@"
post_logic="@_BLNK_WRAP_POST_LOGIC@"
reorderlibs="@_BLNK_REORDERLIBS@"
wrapperlog="${BUILDLINK_WRAPPER_LOG-@_BLNK_WRAP_LOG@}"
libtool_fix_la="@_BLNK_LIBTOOL_FIX_LA@"
fixlibpath=${BUILDLINK_FIX_IMPROPER_LIBTOOL_LIBPATH-yes}
updatecache="${BUILDLINK_UPDATE_CACHE-yes}"
cacheall="${BUILDLINK_CACHE_ALL-no}"
reorder="${BUILDLINK_REORDER-no}"
basename="@BASENAME@"
cat="@CAT@"
dirname="@DIRNAME@"
echo="@ECHO@"
expr="@EXPR@"
pwd="@PWD_CMD@"
test="@TEST@"
BUILDLINK_DIR="@BUILDLINK_DIR@"
WRKDIR="@WRKDIR@"
WRKSRC="@WRKSRC@"
# Argument stack depth
depth=
original_cmd="$0 $@"
$echo [*] $original_cmd >> $wrapperlog
# Discover the libtool mode by examining the argument list.
mode=link
prevopt=
nonopt=
lafile=
for arg do
case $arg in
-*=*) optarg=`$echo "X$arg" | $Xsed -e 's/[-_a-zA-Z0-9]*=//'` ;;
*) optarg= ;;
esac
if $test -n "$prevopt"; then
case $prevopt in
--mode)
mode="$arg"
;;
--fix-la|-o)
case $arg in
*.la) lafile="$arg" ;;
esac
;;
esac
prevopt=
continue
fi
case $arg in
--mode|--fix-la|-o)
prevopt="$arg"
;;
--mode=*)
mode="$optarg"
;;
-*)
if $test -n "$nonopt" -a "$mode" != "install"; then
case $arg in
-c) mode=compile ;;
esac
fi
;;
*)
if $test -z "$nonopt"; then
nonopt="$arg"
case $arg in
*cc|*++|gcc*|*-gcc*|*CC) mode=link ;;
*install*|cp|mv) mode=install ;;
esac
fi
;;
esac
done
cmd="@WRAPPEE@"
ldflags=
libs=
case $mode in
install)
#
# We're doing libtool installation, so just quote all of the
# command-line arguments and append them to $cmd. We don't worry
# about caching or speed, since installation is not a bottleneck
# for package creation.
#
while $test $# -gt 0; do
arg="$1"; shift
. $quotearg
arg="$qarg"
cmd="$cmd $arg"
done
;;
*)
while $test $# -gt 0 -o -n "$depth"; do
skipargs=0
#
# Get the next argument from the buffer.
#
. $buffer
case $arg in
--fix-la)
. $libtool_fix_la
exit
;;
*cc|*++|gcc*|*-gcc*|*CC)
case $mode in
link)
set -- "$@" @_BLNK_WRAP_EXTRA_FLAGS@
;;
esac
;;
*)
cachehit=no
skipcache=no
#
# Check the private cache, and possibly set
# skipcache=yes.
#
. $private_cache
#
# Check the common cache shared by all of the other
# wrappers.
#
case $skipcache,$cachehit in
no,no) . $cache ;;
esac
#
# If the cache doesn't cover the arg we're
# examining, then run it through the
# transformations and cache the result.
#
case $cachehit in
no) . $logic ;;
esac
;;
esac
#
# Build up the command-line.
#
. $buildcmd
done
;;
esac
# Reorder the libraries so that the library dependencies are correct.
case $reorder in
yes)
if $test -n "$libs"; then
. $reorderlibs
fi
;;
esac
cmd="$cmd $ldflags $libs"
@_BLNK_WRAP_ENV@
@_BLNK_WRAP_SANITIZE_PATH@
$echo "<.>" $cmd >> $wrapperlog
eval $cmd
wrapper_result=$?
if $test -n "$lafile" && $test -f "$lafile"; then
. $libtool_fix_la
fi
exit ${wrapper_result}