mirror of
git://git.savannah.gnu.org/libtool.git
synced 2024-12-09 06:40:24 +08:00
0862357f6d
iterate, otherwise we'd overwrite `arg'
2968 lines
87 KiB
Plaintext
2968 lines
87 KiB
Plaintext
# ltmain.sh - Provide generalized library-building support services.
|
||
# NOTE: Changing this file will not affect anything until you rerun ltconfig.
|
||
#
|
||
# Copyright (C) 1996-1999 Free Software Foundation, Inc.
|
||
# Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996
|
||
#
|
||
# This program is free software; you can redistribute it and/or modify
|
||
# it under the terms of the GNU General Public License as published by
|
||
# the Free Software Foundation; either version 2 of the License, or
|
||
# (at your option) any later version.
|
||
#
|
||
# This program is distributed in the hope that it will be useful, but
|
||
# WITHOUT ANY WARRANTY; without even the implied warranty of
|
||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||
# General Public License for more details.
|
||
#
|
||
# You should have received a copy of the GNU General Public License
|
||
# along with this program; if not, write to the Free Software
|
||
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||
#
|
||
# As a special exception to the GNU General Public License, if you
|
||
# distribute this file as part of a program that contains a
|
||
# configuration script generated by Autoconf, you may include it under
|
||
# the same distribution terms that you use for the rest of that program.
|
||
|
||
# Check that we have a working $echo.
|
||
if test "X$1" = X--no-reexec; then
|
||
# Discard the --no-reexec flag, and continue.
|
||
shift
|
||
elif test "X$1" = X--fallback-echo; then
|
||
# used as fallback echo
|
||
shift
|
||
cat <<EOF
|
||
$*
|
||
EOF
|
||
exit 0
|
||
elif test "X`($echo '\t') 2>/dev/null`" = 'X\t'; then
|
||
# Yippee, $echo works!
|
||
:
|
||
else
|
||
# Restart under the correct shell, and then maybe $echo will work.
|
||
exec $SHELL "$0" --no-reexec ${1+"$@"}
|
||
fi
|
||
|
||
# The name of this program.
|
||
progname=`$echo "$0" | sed 's%^.*/%%'`
|
||
modename="$progname"
|
||
|
||
# Constants.
|
||
PROGRAM=ltmain.sh
|
||
PACKAGE=@PACKAGE@
|
||
VERSION=@VERSION@
|
||
|
||
default_mode=
|
||
help="Try \`$progname --help' for more information."
|
||
magic="%%%MAGIC variable%%%"
|
||
mkdir="mkdir"
|
||
mv="mv -f"
|
||
rm="rm -f"
|
||
|
||
# Sed substitution that helps us do robust quoting. It backslashifies
|
||
# metacharacters that are still active within double-quoted strings.
|
||
Xsed='sed -e 1s/^X//'
|
||
sed_quote_subst='s/\([\\`\\"$\\\\]\)/\\\1/g'
|
||
SP2NL='tr \040 \012'
|
||
NL2SP='tr \012 \040'
|
||
|
||
# NLS nuisances.
|
||
# Only set LANG and LC_ALL to C if already set.
|
||
# These must not be set unconditionally because not all systems understand
|
||
# e.g. LANG=C (notably SCO).
|
||
# We save the old values to restore during execute mode.
|
||
if test "${LC_ALL+set}" = set; then
|
||
save_LC_ALL="$LC_ALL"; LC_ALL=C; export LC_ALL
|
||
fi
|
||
if test "${LANG+set}" = set; then
|
||
save_LANG="$LANG"; LANG=C; export LANG
|
||
fi
|
||
|
||
if test "$LTCONFIG_VERSION" != "$VERSION"; then
|
||
echo "$modename: ltconfig version \`$LTCONFIG_VERSION' does not match $PROGRAM version \`$VERSION'" 1>&2
|
||
echo "Fatal configuration error. See the $PACKAGE docs for more information." 1>&2
|
||
exit 1
|
||
fi
|
||
|
||
if test "$build_libtool_libs" != yes && test "$build_old_libs" != yes; then
|
||
echo "$modename: not configured to build any kind of library" 1>&2
|
||
echo "Fatal configuration error. See the $PACKAGE docs for more information." 1>&2
|
||
exit 1
|
||
fi
|
||
|
||
# Global variables.
|
||
mode=$default_mode
|
||
nonopt=
|
||
prev=
|
||
prevopt=
|
||
run=
|
||
show="$echo"
|
||
show_help=
|
||
execute_dlfiles=
|
||
lo2o="s/\\.lo\$/.${objext}/"
|
||
|
||
# Parse our command line options once, thoroughly.
|
||
while test $# -gt 0
|
||
do
|
||
arg="$1"
|
||
shift
|
||
|
||
case "$arg" in
|
||
-*=*) optarg=`$echo "X$arg" | $Xsed -e 's/[-_a-zA-Z0-9]*=//'` ;;
|
||
*) optarg= ;;
|
||
esac
|
||
|
||
# If the previous option needs an argument, assign it.
|
||
if test -n "$prev"; then
|
||
case "$prev" in
|
||
execute_dlfiles)
|
||
eval "$prev=\"\$$prev \$arg\""
|
||
;;
|
||
*)
|
||
eval "$prev=\$arg"
|
||
;;
|
||
esac
|
||
|
||
prev=
|
||
prevopt=
|
||
continue
|
||
fi
|
||
|
||
# Have we seen a non-optional argument yet?
|
||
case "$arg" in
|
||
--help)
|
||
show_help=yes
|
||
;;
|
||
|
||
--version)
|
||
echo "$PROGRAM (GNU $PACKAGE) $VERSION"
|
||
exit 0
|
||
;;
|
||
|
||
--config)
|
||
sed -e '1,/^### BEGIN LIBTOOL CONFIG/d' -e '/^### END LIBTOOL CONFIG/,$d' $0
|
||
exit 0
|
||
;;
|
||
|
||
--debug)
|
||
echo "$progname: enabling shell trace mode"
|
||
set -x
|
||
;;
|
||
|
||
--dry-run | -n)
|
||
run=:
|
||
;;
|
||
|
||
--features)
|
||
echo "host: $host"
|
||
if test "$build_libtool_libs" = yes; then
|
||
echo "enable shared libraries"
|
||
else
|
||
echo "disable shared libraries"
|
||
fi
|
||
if test "$build_old_libs" = yes; then
|
||
echo "enable static libraries"
|
||
else
|
||
echo "disable static libraries"
|
||
fi
|
||
exit 0
|
||
;;
|
||
|
||
--finish) mode="finish" ;;
|
||
|
||
--mode) prevopt="--mode" prev=mode ;;
|
||
--mode=*) mode="$optarg" ;;
|
||
|
||
--quiet | --silent)
|
||
show=:
|
||
;;
|
||
|
||
-dlopen)
|
||
prevopt="-dlopen"
|
||
prev=execute_dlfiles
|
||
;;
|
||
|
||
-*)
|
||
$echo "$modename: unrecognized option \`$arg'" 1>&2
|
||
$echo "$help" 1>&2
|
||
exit 1
|
||
;;
|
||
|
||
*)
|
||
nonopt="$arg"
|
||
break
|
||
;;
|
||
esac
|
||
done
|
||
|
||
if test -n "$prevopt"; then
|
||
$echo "$modename: option \`$prevopt' requires an argument" 1>&2
|
||
$echo "$help" 1>&2
|
||
exit 1
|
||
fi
|
||
|
||
if test -z "$show_help"; then
|
||
|
||
# Infer the operation mode.
|
||
if test -z "$mode"; then
|
||
case "$nonopt" in
|
||
*cc | *++ | gcc* | *-gcc*)
|
||
mode=link
|
||
for arg
|
||
do
|
||
case "$arg" in
|
||
-c)
|
||
mode=compile
|
||
break
|
||
;;
|
||
esac
|
||
done
|
||
;;
|
||
*db | *dbx | *strace | *truss)
|
||
mode=execute
|
||
;;
|
||
*install*|cp|mv)
|
||
mode=install
|
||
;;
|
||
*rm)
|
||
mode=uninstall
|
||
;;
|
||
*)
|
||
# If we have no mode, but dlfiles were specified, then do execute mode.
|
||
test -n "$execute_dlfiles" && mode=execute
|
||
|
||
# Just use the default operation mode.
|
||
if test -z "$mode"; then
|
||
if test -n "$nonopt"; then
|
||
$echo "$modename: warning: cannot infer operation mode from \`$nonopt'" 1>&2
|
||
else
|
||
$echo "$modename: warning: cannot infer operation mode without MODE-ARGS" 1>&2
|
||
fi
|
||
fi
|
||
;;
|
||
esac
|
||
fi
|
||
|
||
# Only execute mode is allowed to have -dlopen flags.
|
||
if test -n "$execute_dlfiles" && test "$mode" != execute; then
|
||
$echo "$modename: unrecognized option \`-dlopen'" 1>&2
|
||
$echo "$help" 1>&2
|
||
exit 1
|
||
fi
|
||
|
||
# Change the help message to a mode-specific one.
|
||
generic_help="$help"
|
||
help="Try \`$modename --help --mode=$mode' for more information."
|
||
|
||
# These modes are in order of execution frequency so that they run quickly.
|
||
case "$mode" in
|
||
# libtool compile mode
|
||
compile)
|
||
modename="$modename: compile"
|
||
# Get the compilation command and the source file.
|
||
base_compile=
|
||
lastarg=
|
||
srcfile="$nonopt"
|
||
suppress_output=
|
||
|
||
user_target=no
|
||
for arg
|
||
do
|
||
# Accept any command-line options.
|
||
case "$arg" in
|
||
-o)
|
||
if test "$user_target" != "no"; then
|
||
$echo "$modename: you cannot specify \`-o' more than once" 1>&2
|
||
exit 1
|
||
fi
|
||
user_target=next
|
||
;;
|
||
|
||
-static)
|
||
build_old_libs=yes
|
||
continue
|
||
;;
|
||
esac
|
||
|
||
case "$user_target" in
|
||
next)
|
||
# The next one is the -o target name
|
||
user_target=yes
|
||
continue
|
||
;;
|
||
yes)
|
||
# We got the output file
|
||
user_target=set
|
||
libobj="$arg"
|
||
continue
|
||
;;
|
||
esac
|
||
|
||
# Accept the current argument as the source file.
|
||
lastarg="$srcfile"
|
||
srcfile="$arg"
|
||
|
||
# Aesthetically quote the previous argument.
|
||
|
||
# Backslashify any backslashes, double quotes, and dollar signs.
|
||
# These are the only characters that are still specially
|
||
# interpreted inside of double-quoted scrings.
|
||
lastarg=`$echo "X$lastarg" | $Xsed -e "$sed_quote_subst"`
|
||
|
||
# Double-quote args containing other shell metacharacters.
|
||
# Many Bourne shells cannot handle close brackets correctly in scan
|
||
# sets, so we specify it separately.
|
||
case "$lastarg" in
|
||
*[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*)
|
||
lastarg="\"$lastarg\""
|
||
;;
|
||
esac
|
||
|
||
# Add the previous argument to base_compile.
|
||
if test -z "$base_compile"; then
|
||
base_compile="$lastarg"
|
||
else
|
||
base_compile="$base_compile $lastarg"
|
||
fi
|
||
done
|
||
|
||
case "$user_target" in
|
||
set)
|
||
;;
|
||
no)
|
||
# Get the name of the library object.
|
||
libobj=`$echo "X$srcfile" | $Xsed -e 's%^.*/%%'`
|
||
;;
|
||
*)
|
||
$echo "$modename: you must specify a target with \`-o'" 1>&2
|
||
exit 1
|
||
;;
|
||
esac
|
||
|
||
# Recognize several different file suffixes.
|
||
# If the user specifies -o file.o, it is replaced with file.lo
|
||
xform='[cCFSfmso]'
|
||
case "$libobj" in
|
||
*.ada) xform=ada ;;
|
||
*.adb) xform=adb ;;
|
||
*.ads) xform=ads ;;
|
||
*.asm) xform=asm ;;
|
||
*.c++) xform=c++ ;;
|
||
*.cc) xform=cc ;;
|
||
*.cpp) xform=cpp ;;
|
||
*.cxx) xform=cxx ;;
|
||
*.f90) xform=f90 ;;
|
||
*.for) xform=for ;;
|
||
esac
|
||
|
||
libobj=`$echo "X$libobj" | $Xsed -e "s/\.$xform$/.lo/"`
|
||
|
||
case "$libobj" in
|
||
*.lo) obj=`$echo "X$libobj" | $Xsed -e "$lo2o"` ;;
|
||
*)
|
||
$echo "$modename: cannot determine name of library object from \`$libobj'" 1>&2
|
||
exit 1
|
||
;;
|
||
esac
|
||
|
||
if test -z "$base_compile"; then
|
||
$echo "$modename: you must specify a compilation command" 1>&2
|
||
$echo "$help" 1>&2
|
||
exit 1
|
||
fi
|
||
|
||
# Delete any leftover library objects.
|
||
if test "$build_old_libs" = yes; then
|
||
removelist="$obj $libobj $lockfile"
|
||
else
|
||
removelist="$libobj $lockfile"
|
||
fi
|
||
|
||
$run $rm $removelist
|
||
trap "$run $rm $removelist; exit 1" 1 2 15
|
||
|
||
# Calculate the filename of the output object if compiler does
|
||
# not support -o with -c
|
||
if test "$compiler_c_o" = no; then
|
||
output_obj=`$echo "X$srcfile" | $Xsed -e 's%^.*/%%' -e 's%\..*$%%'`.${objext}
|
||
lockfile="$output_obj.lock"
|
||
removelist="$removelist $output_obj $lockfile"
|
||
trap "$run $rm $removelist; exit 1" 1 2 15
|
||
else
|
||
need_locks=no
|
||
lockfile=
|
||
fi
|
||
|
||
# Lock this critical section if it is needed
|
||
# We use this script file to make the link, it avoids creating a new file
|
||
if test "$need_locks" = yes; then
|
||
until ln "$0" "$lockfile" 2>/dev/null; do
|
||
$show "Waiting for $lockfile to be removed"
|
||
sleep 2
|
||
done
|
||
elif test "$need_locks" = warn; then
|
||
if test -f "$lockfile"; then
|
||
echo "\
|
||
*** ERROR, $lockfile exists and contains:
|
||
`cat $lockfile 2>/dev/null`
|
||
|
||
This indicates that another process is trying to use the same
|
||
temporary object file, and libtool could not work around it because
|
||
your compiler does not support \`-c' and \`-o' together. If you
|
||
repeat this compilation, it may succeed, by chance, but you had better
|
||
avoid parallel builds (make -j) in this platform, or get a better
|
||
compiler."
|
||
|
||
$run $rm $removelist
|
||
exit 1
|
||
fi
|
||
echo $srcfile > "$lockfile"
|
||
fi
|
||
|
||
if test -n "$fix_srcfile_path"; then
|
||
eval srcfile=\"$fix_srcfile_path\"
|
||
fi
|
||
|
||
# Only build a PIC object if we are building libtool libraries.
|
||
if test "$build_libtool_libs" = yes; then
|
||
# Without this assignment, base_compile gets emptied.
|
||
fbsd_hideous_sh_bug=$base_compile
|
||
|
||
# All platforms use -DPIC, to notify preprocessed assembler code.
|
||
command="$base_compile$pic_flag -DPIC $srcfile"
|
||
if test "$compiler_o_lo" = yes; then
|
||
command="$command -o $libobj"
|
||
output_obj="$libobj"
|
||
elif test "$compiler_c_o" = yes; then
|
||
command="$command -o $obj"
|
||
output_obj="$obj"
|
||
fi
|
||
|
||
$show "$command"
|
||
if $run eval "$command"; then :
|
||
else
|
||
test -n "$output_obj" && $run $rm $removelist
|
||
exit 1
|
||
fi
|
||
|
||
if test "$need_locks" = warn &&
|
||
test x"`cat $lockfile 2>/dev/null`" != x"$srcfile"; then
|
||
echo "\
|
||
*** ERROR, $lockfile contains:
|
||
`cat $lockfile 2>/dev/null`
|
||
|
||
but it should contain:
|
||
$srcfile
|
||
|
||
This indicates that another process is trying to use the same
|
||
temporary object file, and libtool could not work around it because
|
||
your compiler does not support \`-c' and \`-o' together. If you
|
||
repeat this compilation, it may succeed, by chance, but you had better
|
||
avoid parallel builds (make -j) in this platform, or get a better
|
||
compiler."
|
||
|
||
$run $rm $removelist
|
||
exit 1
|
||
fi
|
||
|
||
# Just move the object if needed, then go on to compile the next one
|
||
if test "$compiler_o_lo" = no && test x"$output_obj" != x"$libobj"; then
|
||
$show "$mv $output_obj $libobj"
|
||
if $run $mv $output_obj $libobj; then :
|
||
else
|
||
error=$?
|
||
$run $rm $removelist
|
||
exit $error
|
||
fi
|
||
fi
|
||
|
||
# If we have no pic_flag, then copy the object into place and finish.
|
||
if test -z "$pic_flag"; then
|
||
$show $rm $obj
|
||
$run $rm $obj
|
||
$show "$LN_S $libobj $obj"
|
||
if $run $LN_S $libobj $obj; then
|
||
exit 0
|
||
else
|
||
error=$?
|
||
$run $rm $removelist
|
||
exit $error
|
||
fi
|
||
fi
|
||
|
||
# Allow error messages only from the first compilation.
|
||
suppress_output=' >/dev/null 2>&1'
|
||
fi
|
||
|
||
# Only build a position-dependent object if we build old libraries.
|
||
if test "$build_old_libs" = yes; then
|
||
command="$base_compile $srcfile"
|
||
if test "$compiler_c_o" = yes; then
|
||
command="$command -o $obj"
|
||
output_obj="$obj"
|
||
fi
|
||
|
||
# Suppress compiler output if we already did a PIC compilation.
|
||
command="$command$suppress_output"
|
||
$show "$command"
|
||
if $run eval "$command"; then :
|
||
else
|
||
$run $rm $removelist
|
||
exit 1
|
||
fi
|
||
|
||
if test "$need_locks" = warn &&
|
||
test x"`cat $lockfile 2>/dev/null`" != x"$srcfile"; then
|
||
echo "\
|
||
*** ERROR, $lockfile contains:
|
||
`cat $lockfile 2>/dev/null`
|
||
|
||
but it should contain:
|
||
$srcfile
|
||
|
||
This indicates that another process is trying to use the same
|
||
temporary object file, and libtool could not work around it because
|
||
your compiler does not support \`-c' and \`-o' together. If you
|
||
repeat this compilation, it may succeed, by chance, but you had better
|
||
avoid parallel builds (make -j) in this platform, or get a better
|
||
compiler."
|
||
|
||
$run $rm $removelist
|
||
exit 1
|
||
fi
|
||
|
||
# Just move the object if needed
|
||
if test "$compiler_c_o" = no && test x"$output_obj" != x"$obj"; then
|
||
$show "$mv $output_obj $obj"
|
||
if $run $mv $output_obj $obj; then :
|
||
else
|
||
error=$?
|
||
$run $rm $removelist
|
||
exit $error
|
||
fi
|
||
fi
|
||
fi
|
||
|
||
# Unlock the critical section if it was locked
|
||
if test "$need_locks" != no; then
|
||
$rm "$lockfile"
|
||
fi
|
||
|
||
# Create an invalid libtool object if no PIC, so that we do not
|
||
# accidentally link it into a program.
|
||
if test "$build_libtool_libs" != yes; then
|
||
$show "echo timestamp > $libobj"
|
||
$run eval "echo timestamp > \$libobj" || exit $?
|
||
fi
|
||
|
||
exit 0
|
||
;;
|
||
|
||
# libtool link mode
|
||
link)
|
||
modename="$modename: link"
|
||
C_compiler="$CC" # save it, to compile generated C sources
|
||
CC="$nonopt"
|
||
case "$host" in
|
||
*-*-cygwin32* | *-*-mingw32* | *-*-os2*)
|
||
# It is impossible to link a dll without this setting, and
|
||
# we shouldn't force the makefile maintainer to figure out
|
||
# which system we are compiling for in order to pass an extra
|
||
# flag for every libtool invokation.
|
||
# allow_undefined=no
|
||
|
||
# FIXME: Unfortunately, there are problems with the above when trying
|
||
# to make a dll which has undefined symbols, in which case not
|
||
# even a static library is built. For now, we need to specify
|
||
# -no-undefined on the libtool link line when we can be certain
|
||
# that all symbols are satisfied, otherwise we get a static library.
|
||
allow_undefined=yes
|
||
|
||
# This is a source program that is used to create dlls on Windows
|
||
# Don't remove nor modify the starting and closing comments
|
||
# /* ltdll.c starts here */
|
||
# #define WIN32_LEAN_AND_MEAN
|
||
# #include <windows.h>
|
||
# #undef WIN32_LEAN_AND_MEAN
|
||
# #include <stdio.h>
|
||
#
|
||
# BOOL APIENTRY DllMain (HINSTANCE hInst, DWORD reason, LPVOID reserved);
|
||
#
|
||
# #include <cygwin/cygwin_dll.h>
|
||
# DECLARE_CYGWIN_DLL( DllMain );
|
||
# HINSTANCE __hDllInstance_base;
|
||
#
|
||
# BOOL APIENTRY
|
||
# DllMain (HINSTANCE hInst, DWORD reason, LPVOID reserved)
|
||
# {
|
||
# __hDllInstance_base = hInst;
|
||
# return TRUE;
|
||
# }
|
||
# /* ltdll.c ends here */
|
||
;;
|
||
*)
|
||
allow_undefined=yes
|
||
;;
|
||
esac
|
||
compile_command="$CC"
|
||
finalize_command="$CC"
|
||
|
||
compile_shlibpath=
|
||
finalize_shlibpath=
|
||
convenience=
|
||
old_convenience=
|
||
deplibs=
|
||
eval lib_search_path=\"$sys_lib_search_path\"
|
||
|
||
avoid_versioning=no
|
||
dlfiles=
|
||
dlprefiles=
|
||
export_dynamic=no
|
||
export_symbols=
|
||
generated=
|
||
hardcode_libdirs=
|
||
libobjs=
|
||
link_against_libtool_libs=
|
||
ltlibs=
|
||
module=no
|
||
objs=
|
||
prev=
|
||
prevarg=
|
||
release=
|
||
rpath=
|
||
xrpath=
|
||
perm_rpath=
|
||
temp_rpath=
|
||
vinfo=
|
||
|
||
# We need to know -static, to get the right output filenames.
|
||
for arg
|
||
do
|
||
case "$arg" in
|
||
-all-static | -static)
|
||
if test "X$arg" = "X-all-static" && test "$build_libtool_libs" = yes && test -z "$link_static_flag"; then
|
||
$echo "$modename: warning: complete static linking is impossible in this configuration" 1>&2
|
||
fi
|
||
build_libtool_libs=no
|
||
build_old_libs=yes
|
||
break
|
||
;;
|
||
esac
|
||
done
|
||
|
||
# See if our shared archives depend on static archives.
|
||
test -n "$old_archive_from_new_cmds" && build_old_libs=yes
|
||
|
||
# Go through the arguments, transforming them on the way.
|
||
while test $# -gt 0; do
|
||
arg="$1"
|
||
shift
|
||
|
||
# If the previous option needs an argument, assign it.
|
||
if test -n "$prev"; then
|
||
case "$prev" in
|
||
output)
|
||
compile_command="$compile_command @OUTPUT@"
|
||
finalize_command="$finalize_command @OUTPUT@"
|
||
;;
|
||
esac
|
||
|
||
case "$prev" in
|
||
dlfiles|dlprefiles)
|
||
case "$arg" in
|
||
*.la | *.lo) ;; # We handle these cases below.
|
||
*)
|
||
dlprefiles="$dlprefiles $arg"
|
||
test "$prev" = dlfiles && dlfiles="$dlfiles $arg"
|
||
prev=
|
||
;;
|
||
esac
|
||
;;
|
||
exportsyms)
|
||
export_symbols="$arg"
|
||
if test ! -f "$arg"; then
|
||
$echo "$modename: symbol file \`$arg' does not exist"
|
||
exit 1
|
||
fi
|
||
prev=
|
||
;;
|
||
release)
|
||
release="-$arg"
|
||
prev=
|
||
continue
|
||
;;
|
||
rpath)
|
||
rpath="$rpath $arg"
|
||
prev=
|
||
continue
|
||
;;
|
||
xrpath)
|
||
xrpath="$xrpath $arg"
|
||
prev=
|
||
continue
|
||
;;
|
||
*)
|
||
eval "$prev=\"\$arg\""
|
||
prev=
|
||
continue
|
||
;;
|
||
esac
|
||
fi
|
||
|
||
prevarg="$arg"
|
||
|
||
case "$arg" in
|
||
-all-static)
|
||
if test -n "$link_static_flag"; then
|
||
compile_command="$compile_command $link_static_flag"
|
||
finalize_command="$finalize_command $link_static_flag"
|
||
fi
|
||
continue
|
||
;;
|
||
|
||
-allow-undefined)
|
||
# FIXME: remove this flag sometime in the future.
|
||
$echo "$modename: \`-allow-undefined' is deprecated because it is the default" 1>&2
|
||
continue
|
||
;;
|
||
|
||
-avoid-versioning)
|
||
avoid_versioning=yes
|
||
continue
|
||
;;
|
||
|
||
-dlopen)
|
||
prev=dlfiles
|
||
continue
|
||
;;
|
||
|
||
-dlpreopen)
|
||
prev=dlprefiles
|
||
continue
|
||
;;
|
||
|
||
-export-dynamic)
|
||
if test "$export_dynamic" != yes; then
|
||
export_dynamic=yes
|
||
if test -n "$export_dynamic_flag_spec"; then
|
||
eval arg=\"$export_dynamic_flag_spec\"
|
||
else
|
||
arg=
|
||
fi
|
||
|
||
# Add the symbol object into the linking commands.
|
||
compile_command="$compile_command @SYMFILE@"
|
||
finalize_command="$finalize_command @SYMFILE@"
|
||
fi
|
||
;;
|
||
|
||
-export-symbols)
|
||
if test -n "$export_symbols"; then
|
||
$echo "$modename: cannot have more than one -exported-symbols"
|
||
exit 1
|
||
fi
|
||
prev=exportsyms
|
||
continue
|
||
;;
|
||
|
||
-L*)
|
||
dir=`$echo "X$arg" | $Xsed -e 's%^-L\(.*\)$%\1%'`
|
||
case "$dir" in
|
||
/* | [A-Za-z]:[/\\]*)
|
||
# Add the corresponding hardcode_libdir_flag, if it is not identical.
|
||
;;
|
||
*)
|
||
$echo "$modename: \`-L$dir' cannot specify a relative directory" 1>&2
|
||
exit 1
|
||
;;
|
||
esac
|
||
deplibs="$deplibs $arg"
|
||
lib_search_path="$lib_search_path `expr $arg : '-L\(.*\)'`"
|
||
case "$host" in
|
||
*-*-cygwin32* | *-*-mingw32* | *-*-os2*)
|
||
compile_dependencylibs="$compile_dependencylibs $arg"
|
||
dllsearchdir="`expr $arg : '-L\(.*\)'`"
|
||
dllsearchdir=`cd "$dllsearchdir" && pwd || echo "$dllsearchdir"`
|
||
if test -n "$dllsearchpath"; then
|
||
dllsearchpath="$dllsearchpath:$dllsearchdir"
|
||
else
|
||
dllsearchpath="$dllsearchdir"
|
||
fi
|
||
;;
|
||
esac
|
||
;;
|
||
|
||
-l*)
|
||
deplibs="$deplibs $arg"
|
||
compile_dependencylibs="$compile_dependencylibs $arg"
|
||
;;
|
||
|
||
-module)
|
||
if test "$module" != yes; then
|
||
module=yes
|
||
if test -n "$export_dynamic_flag_spec"; then
|
||
eval arg=\"$export_dynamic_flag_spec\"
|
||
else
|
||
arg=
|
||
fi
|
||
fi
|
||
;;
|
||
|
||
-no-undefined)
|
||
allow_undefined=no
|
||
continue
|
||
;;
|
||
|
||
-o) prev=output ;;
|
||
|
||
-release)
|
||
prev=release
|
||
continue
|
||
;;
|
||
|
||
-rpath)
|
||
prev=rpath
|
||
continue
|
||
;;
|
||
|
||
-R)
|
||
prev=xrpath
|
||
continue
|
||
;;
|
||
|
||
-R*)
|
||
xrpath="$xrpath "`echo "X$arg" | $Xsed -e 's/^-R//'`
|
||
continue
|
||
;;
|
||
|
||
-static)
|
||
# If we have no pic_flag, then this is the same as -all-static.
|
||
if test -z "$pic_flag" && test -n "$link_static_flag"; then
|
||
compile_command="$compile_command $link_static_flag"
|
||
finalize_command="$finalize_command $link_static_flag"
|
||
fi
|
||
continue
|
||
;;
|
||
|
||
-version-info)
|
||
prev=vinfo
|
||
continue
|
||
;;
|
||
|
||
# Some other compiler flag.
|
||
-* | +*)
|
||
# Unknown arguments in both finalize_command and compile_command need
|
||
# to be aesthetically quoted because they are evaled later.
|
||
arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"`
|
||
case "$arg" in
|
||
*[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*)
|
||
arg="\"$arg\""
|
||
;;
|
||
esac
|
||
;;
|
||
|
||
*.o | *.obj | *.a | *.lib)
|
||
# A standard object.
|
||
objs="$objs $arg"
|
||
;;
|
||
|
||
*.lo)
|
||
# A library object.
|
||
if test "$prev" = dlfiles; then
|
||
dlfiles="$dlfiles $arg"
|
||
if test "$build_libtool_libs" = yes; then
|
||
prev=
|
||
continue
|
||
else
|
||
# If libtool objects are unsupported, then we need to preload.
|
||
prev=dlprefiles
|
||
fi
|
||
fi
|
||
|
||
if test "$prev" = dlprefiles; then
|
||
# Preload the old-style object.
|
||
dlprefiles="$dlprefiles "`$echo "X$arg" | $Xsed -e "$lo2o"`
|
||
prev=
|
||
fi
|
||
libobjs="$libobjs $arg"
|
||
;;
|
||
|
||
*.la)
|
||
# A libtool-controlled library.
|
||
|
||
dlname=
|
||
libdir=
|
||
library_names=
|
||
old_library=
|
||
|
||
# Check to see that this really is a libtool archive.
|
||
if (sed -e '2q' $arg | egrep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then :
|
||
else
|
||
$echo "$modename: \`$arg' is not a valid libtool archive" 1>&2
|
||
exit 1
|
||
fi
|
||
|
||
# If the library was installed with an old release of libtool,
|
||
# it will not redefine variable installed.
|
||
installed=yes
|
||
|
||
# If there is no directory component, then add one.
|
||
case "$arg" in
|
||
*/* | *\\*) . $arg ;;
|
||
*) . ./$arg ;;
|
||
esac
|
||
|
||
# Get the name of the library we link against.
|
||
linklib=
|
||
for l in $old_library $library_names; do
|
||
linklib="$l"
|
||
done
|
||
|
||
if test -z "$linklib"; then
|
||
$echo "$modename: cannot find name of link library for \`$arg'" 1>&2
|
||
exit 1
|
||
fi
|
||
|
||
# Find the relevant object directory and library name.
|
||
name=`$echo "X$arg" | $Xsed -e 's%^.*/%%' -e 's/\.la$//' -e 's/^lib//'`
|
||
|
||
if test "X$installed" = Xyes; then
|
||
dir="$libdir"
|
||
else
|
||
dir=`$echo "X$arg" | $Xsed -e 's%/[^/]*$%%'`
|
||
if test "X$dir" = "X$arg"; then
|
||
dir="$objdir"
|
||
else
|
||
dir="$dir/$objdir"
|
||
fi
|
||
fi
|
||
|
||
if test -n "$dependency_libs"; then
|
||
# Extract -R from dependency_libs
|
||
temp_deplibs=
|
||
for dep in $dependency_libs; do
|
||
case "$dep" in
|
||
-R*) xrpath="$xrpath "`echo "X$dep" | $Xsed -e 's/^-R//'`;;
|
||
*) temp_deplibs="$temp_deplibs $dep";;
|
||
esac
|
||
done
|
||
dependency_libs="$temp_deplibs"
|
||
fi
|
||
|
||
if test -z "$libdir"; then
|
||
# It is a libtool convenience library, so add in its objects.
|
||
convenience="$convenience $dir/$old_library"
|
||
old_convenience="$old_convenience $dir/$old_library"
|
||
deplibs="$deplibs$dependency_libs"
|
||
compile_command="$compile_command $dir/$old_library$dependency_libs"
|
||
finalize_command="$finalize_command $dir/$old_library$dependency_libs"
|
||
continue
|
||
fi
|
||
|
||
# This library was specified with -dlopen.
|
||
if test "$prev" = dlfiles; then
|
||
dlfiles="$dlfiles $arg"
|
||
if test -z "$dlname" || test "$build_libtool_libs" = no; then
|
||
# If there is no dlname or we're linking statically,
|
||
# we need to preload.
|
||
prev=dlprefiles
|
||
else
|
||
# We should not create a dependency on this library, but we
|
||
# may need any libraries it requires.
|
||
compile_command="$compile_command$dependency_libs"
|
||
finalize_command="$finalize_command$dependency_libs"
|
||
prev=
|
||
continue
|
||
fi
|
||
fi
|
||
|
||
# The library was specified with -dlpreopen.
|
||
if test "$prev" = dlprefiles; then
|
||
# Prefer using a static library (so that no silly _DYNAMIC symbols
|
||
# are required to link).
|
||
if test -n "$old_library"; then
|
||
dlprefiles="$dlprefiles $dir/$old_library"
|
||
else
|
||
dlprefiles="$dlprefiles $dir/$linklib"
|
||
fi
|
||
prev=
|
||
fi
|
||
|
||
if test "$build_libtool_libs" = yes && test -n "$library_names"; then
|
||
link_against_libtool_libs="$link_against_libtool_libs $arg"
|
||
if test -n "$shlibpath_var"; then
|
||
# Make sure the rpath contains only unique directories.
|
||
case "$temp_rpath " in
|
||
*" $dir "*) ;;
|
||
*) temp_rpath="$temp_rpath $dir" ;;
|
||
esac
|
||
fi
|
||
|
||
# This is the magic to use -rpath.
|
||
if test -n "$hardcode_libdir_flag_spec"; then
|
||
if test -n "$hardcode_libdir_separator"; then
|
||
if test -z "$hardcode_libdirs"; then
|
||
# Put the magic libdir with the hardcode flag.
|
||
hardcode_libdirs="$libdir"
|
||
libdir="@HARDCODE_LIBDIRS@"
|
||
else
|
||
# Just accumulate the unique libdirs.
|
||
case "$hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator" in
|
||
*"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
|
||
;;
|
||
*)
|
||
hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir"
|
||
;;
|
||
esac
|
||
libdir=
|
||
fi
|
||
fi
|
||
|
||
if test -n "$libdir"; then
|
||
eval flag=\"$hardcode_libdir_flag_spec\"
|
||
|
||
compile_command="$compile_command $flag"
|
||
finalize_command="$finalize_command $flag"
|
||
fi
|
||
elif test -n "$runpath_var"; then
|
||
# Do the same for the permanent run path.
|
||
case "$perm_rpath " in
|
||
*" $libdir "*) ;;
|
||
*) perm_rpath="$perm_rpath $libdir" ;;
|
||
esac
|
||
fi
|
||
|
||
|
||
lib_linked=yes
|
||
case "$hardcode_action" in
|
||
immediate | unsupported)
|
||
if test "$hardcode_direct" = no; then
|
||
compile_command="$compile_command $dir/$linklib"
|
||
case "$host" in
|
||
*-*-cygwin32* | *-*-mingw32* | *-*-os2*)
|
||
compile_dependencylibs="$compile_dependencylibs -L$dir -l$name"
|
||
dllsearchdir=`cd "$dir" && pwd || echo "$dir"`
|
||
if test -n "$dllsearchpath"; then
|
||
dllsearchpath="$dllsearchpath:$dllsearchdir"
|
||
else
|
||
dllsearchpath="$dllsearchdir"
|
||
fi
|
||
;;
|
||
esac
|
||
elif test "$hardcode_minus_L" = no; then
|
||
case "$host" in
|
||
*-*-sunos*)
|
||
compile_shlibpath="$compile_shlibpath$dir:"
|
||
;;
|
||
esac
|
||
compile_command="$compile_command -L$dir -l$name"
|
||
elif test "$hardcode_shlibpath_var" = no; then
|
||
compile_shlibpath="$compile_shlibpath$dir:"
|
||
compile_command="$compile_command -l$name"
|
||
else
|
||
lib_linked=no
|
||
fi
|
||
;;
|
||
|
||
relink)
|
||
# We need an absolute path.
|
||
case "$dir" in
|
||
/* | [A-Za-z]:[/\\]*) ;;
|
||
*)
|
||
absdir=`cd "$dir" && pwd`
|
||
if test -z "$absdir"; then
|
||
$echo "$modename: cannot determine absolute directory name of \`$dir'" 1>&2
|
||
exit 1
|
||
fi
|
||
dir="$absdir"
|
||
;;
|
||
esac
|
||
|
||
if test "$hardcode_direct" = yes; then
|
||
compile_command="$compile_command $dir/$linklib"
|
||
elif test "$hardcode_minus_L" = yes; then
|
||
compile_command="$compile_command -L$dir -l$name"
|
||
elif test "$hardcode_shlibpath_var" = yes; then
|
||
compile_shlibpath="$compile_shlibpath$dir:"
|
||
compile_command="$compile_command -l$name"
|
||
else
|
||
lib_linked=no
|
||
fi
|
||
;;
|
||
|
||
*)
|
||
lib_linked=no
|
||
;;
|
||
esac
|
||
|
||
if test "$lib_linked" != yes; then
|
||
$echo "$modename: configuration error: unsupported hardcode properties"
|
||
exit 1
|
||
fi
|
||
|
||
# Finalize command for both is simple: just hardcode it.
|
||
if test "$hardcode_direct" = yes; then
|
||
finalize_command="$finalize_command $libdir/$linklib"
|
||
elif test "$hardcode_minus_L" = yes; then
|
||
finalize_command="$finalize_command -L$libdir -l$name"
|
||
elif test "$hardcode_shlibpath_var" = yes; then
|
||
finalize_shlibpath="$finalize_shlibpath$libdir:"
|
||
finalize_command="$finalize_command -l$name"
|
||
else
|
||
# We cannot seem to hardcode it, guess we'll fake it.
|
||
finalize_command="$finalize_command -L$libdir -l$name"
|
||
fi
|
||
else
|
||
# Transform directly to old archives if we don't build new libraries.
|
||
if test -n "$pic_flag" && test -z "$old_library"; then
|
||
$echo "$modename: cannot find static library for \`$arg'" 1>&2
|
||
exit 1
|
||
fi
|
||
|
||
# Here we assume that one of hardcode_direct or hardcode_minus_L
|
||
# is not unsupported. This is valid on all known static and
|
||
# shared platforms.
|
||
if test "$hardcode_direct" != unsupported; then
|
||
test -n "$old_library" && linklib="$old_library"
|
||
compile_command="$compile_command $dir/$linklib"
|
||
finalize_command="$finalize_command $dir/$linklib"
|
||
else
|
||
compile_command="$compile_command -L$dir -l$name"
|
||
finalize_command="$finalize_command -L$dir -l$name"
|
||
fi
|
||
fi
|
||
|
||
# Add in any libraries that this one depends upon.
|
||
compile_command="$compile_command$dependency_libs"
|
||
finalize_command="$finalize_command$dependency_libs"
|
||
continue
|
||
;;
|
||
|
||
# Some other compiler argument.
|
||
*)
|
||
# Unknown arguments in both finalize_command and compile_command need
|
||
# to be aesthetically quoted because they are evaled later.
|
||
arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"`
|
||
case "$arg" in
|
||
*[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*)
|
||
arg="\"$arg\""
|
||
;;
|
||
esac
|
||
;;
|
||
esac
|
||
|
||
# Now actually substitute the argument into the commands.
|
||
if test -n "$arg"; then
|
||
compile_command="$compile_command $arg"
|
||
finalize_command="$finalize_command $arg"
|
||
fi
|
||
done
|
||
|
||
if test -n "$prev"; then
|
||
$echo "$modename: the \`$prevarg' option requires an argument" 1>&2
|
||
$echo "$help" 1>&2
|
||
exit 1
|
||
fi
|
||
|
||
if test -n "$export_symbols" && test "$module" = yes; then
|
||
$echo "$modename: \`-export-symbols' is not supported for modules"
|
||
exit 1
|
||
fi
|
||
|
||
oldlibs=
|
||
# calculate the name of the file, without its directory
|
||
outputname=`$echo "X$output" | $Xsed -e 's%^.*/%%'`
|
||
libobjs_save="$libobjs"
|
||
|
||
case "$output" in
|
||
"")
|
||
$echo "$modename: you must specify an output file" 1>&2
|
||
$echo "$help" 1>&2
|
||
exit 1
|
||
;;
|
||
|
||
*.a | *.lib)
|
||
if test -n "$link_against_libtool_libs"; then
|
||
$echo "$modename: error: cannot link libtool libraries into archives" 1>&2
|
||
exit 1
|
||
fi
|
||
|
||
if test -n "$deplibs"; then
|
||
$echo "$modename: warning: \`-l' and \`-L' are ignored for archives" 1>&2
|
||
fi
|
||
|
||
if test -n "$dlfiles$dlprefiles"; then
|
||
$echo "$modename: warning: \`-dlopen' is ignored for archives" 1>&2
|
||
fi
|
||
|
||
if test -n "$rpath"; then
|
||
$echo "$modename: warning: \`-rpath' is ignored for archives" 1>&2
|
||
fi
|
||
|
||
if test -n "$xrpath"; then
|
||
$echo "$modename: warning: \`-R' is ignored for archives" 1>&2
|
||
fi
|
||
|
||
if test -n "$vinfo"; then
|
||
$echo "$modename: warning: \`-version-info' is ignored for archives" 1>&2
|
||
fi
|
||
|
||
if test -n "$release"; then
|
||
$echo "$modename: warning: \`-release' is ignored for archives" 1>&2
|
||
fi
|
||
|
||
if test -n "$export_symbols"; then
|
||
$echo "$modename: warning: \`-export-symbols' is ignored for archives" 1>&2
|
||
fi
|
||
|
||
# Now set the variables for building old libraries.
|
||
build_libtool_libs=no
|
||
oldlibs="$output"
|
||
;;
|
||
|
||
*.la)
|
||
# Make sure we only generate libraries of the form `libNAME.la'.
|
||
case "$outputname" in
|
||
lib*)
|
||
name=`$echo "X$outputname" | $Xsed -e 's/\.la$//' -e 's/^lib//'`
|
||
eval libname=\"$libname_spec\"
|
||
;;
|
||
*)
|
||
if test "$module" = no; then
|
||
$echo "$modename: libtool library \`$output' must begin with \`lib'" 1>&2
|
||
$echo "$help" 1>&2
|
||
exit 1
|
||
fi
|
||
if test "$need_lib_prefix" = yes; then
|
||
# Add the "lib" prefix for modules if required
|
||
name=`$echo "X$outputname" | $Xsed -e 's/\.la$//'`
|
||
eval libname=\"$libname_spec\"
|
||
else
|
||
libname=`$echo "X$outputname" | $Xsed -e 's/\.la$//'`
|
||
fi
|
||
;;
|
||
esac
|
||
|
||
if test -n "$xrpath"; then
|
||
temp_xrpath=
|
||
for libdir in $xrpath; do
|
||
temp_xrpath="$temp_xrpath -R$libdir"
|
||
done
|
||
deplibs="$temp_xrpath $deplibs"
|
||
fi
|
||
|
||
output_objdir=`$echo "X$output" | $Xsed -e 's%/[^/]*$%%'`
|
||
if test "X$output_objdir" = "X$output"; then
|
||
output_objdir="$objdir"
|
||
else
|
||
output_objdir="$output_objdir/$objdir"
|
||
fi
|
||
|
||
# All the library-specific variables (install_libdir is set above).
|
||
library_names=
|
||
old_library=
|
||
dlname=
|
||
|
||
if test -n "$objs"; then
|
||
$echo "$modename: cannot build libtool library \`$output' from non-libtool objects:$objs" 2>&1
|
||
exit 1
|
||
fi
|
||
|
||
# If the following section is uncommented, then it is impossible to
|
||
# link with ltlibrary deplibs...
|
||
|
||
# How the heck are we supposed to write a wrapper for a shared library?
|
||
#if test -n "$link_against_libtool_libs"; then
|
||
# $echo "$modename: error: cannot link shared libraries into libtool libraries" 1>&2
|
||
# exit 1
|
||
#fi
|
||
|
||
if test -n "$dlfiles$dlprefiles"; then
|
||
$echo "$modename: warning: \`-dlopen' is ignored for libtool libraries" 1>&2
|
||
fi
|
||
|
||
set d |