diff options
author | jason <jason@138bc75d-0d04-0410-961f-82ee72b054a4> | 1997-08-21 22:57:35 +0000 |
---|---|---|
committer | jason <jason@138bc75d-0d04-0410-961f-82ee72b054a4> | 1997-08-21 22:57:35 +0000 |
commit | 28e9041cc224267271fbcd8db22bea115912365b (patch) | |
tree | a3b19970338bdae580faff126a716e1d5520400c /ltmain.sh | |
parent | 5000a677980ebfb439f5349c5e269f7447dbab41 (diff) | |
download | gcc-28e9041cc224267271fbcd8db22bea115912365b.tar.gz |
Initial revision
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@14877 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'ltmain.sh')
-rw-r--r-- | ltmain.sh | 1819 |
1 files changed, 1819 insertions, 0 deletions
diff --git a/ltmain.sh b/ltmain.sh new file mode 100644 index 00000000000..cda618977f0 --- /dev/null +++ b/ltmain.sh @@ -0,0 +1,1819 @@ +# ltmain.sh - Provide generalized library-building support services. +# Generated automatically from ltmain.sh.in by configure. +# Copyright (C) 1996, 1997 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. + +# The name of this program. +progname=`echo "$0" | sed 's%^.*/%%'` + +# Constants. +PROGRAM=ltmain.sh +PACKAGE=libtool +VERSION=1.0 + +default_mode= +help="Try \`$progname --help' for more information." +magic="%%%MAGIC variable%%%" +mkdir="mkdir" +mv="mv -f" +objdir=.libs +rm="rm -f" + +if test "$LTCONFIG_VERSION" != "$VERSION"; then + echo "$progname: 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 "$progname: 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= + +# Parse our command line options once, thoroughly. +while test $# -gt 0 +do + arg="$1" + shift + + case "$arg" in + -*=*) optarg=`echo "$arg" | sed 's/[-_a-zA-Z0-9]*=//'` ;; + *) optarg= ;; + esac + + # If the previous option needs an argument, assign it. + if test -n "$prev"; then + eval "$prev=\$arg" + 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 + ;; + + --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" ;; + + -*) + echo "$progname: unrecognized option \`$arg'" 1>&2 + echo "$help" 1>&2 + exit 1 + ;; + + *) + nonopt="$arg" + break + ;; + esac +done + + +if test -n "$prevopt"; then + echo "$progname: 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) + mode=link + for arg + do + case "$arg" in + -c) + mode=compile + break + ;; + esac + done + ;; + *install*|cp) + mode=install + ;; + *rm) + mode=uninstall + ;; + *.la) + mode=dlname + ;; + *) + # Just use the default operation mode. + if test -z "$mode"; then + if test -n "$nonopt"; then + echo "$progname: warning: cannot infer operation mode from \`$nonopt'" 1>&2 + else + echo "$progname: warning: cannot infer operation mode without MODE-ARGS" 1>&2 + fi + fi + ;; + esac + fi + + # Change the help message to a mode-specific one. + generic_help="$help" + help="Try \`$progname --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) + progname="$progname: compile" + # Get the compilation command and the source file. + base_compile="$nonopt" + lastarg= + srcfile= + + for arg + do + # Quote any args containing shell metacharacters. + case "$arg" in + *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?]*|*\"*) + quote_arg="'$arg'" ;; + *) quote_arg="$arg" ;; + esac + + base_compile="$base_compile$lastarg" + srcfile="$quote_arg" + lastarg=" $srcfile" + done + + # Get the name of the library object. + libobj=`echo "$srcfile" | sed -e 's%^.*/%%'` + + # Recognize several different file suffixes. + xform='[cCFSf]' + case "$libobj" in + *.c++) xform='c++' ;; + *.cc) xform=cc ;; + *.cpp) xform=cpp ;; + *.cxx) xform=cxx ;; + *.f90) xform=f90 ;; + *.for) xform='for' ;; + esac + + libobj=`echo "$libobj" | sed -e "s/\.$xform$/.lo/"` + + case "$libobj" in + *.lo) obj=`echo "$libobj" | sed -e 's/\.lo$/.o/'` ;; + *) + echo "$progname: cannot determine name of library object from \`$srcfile'" 1>&2 + exit 1 + ;; + esac + + if test -z "$base_compile"; then + echo "$progname: 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 + $run $rm $obj $libobj + trap "$run $rm $obj $libobj; exit 1" 1 2 15 + else + $run $rm $libobj + trap "$run $rm $libobj; exit 1" 1 2 15 + fi + + # Only build a PIC object if we are building libtool libraries. + if test "$build_libtool_libs" = yes; then + # All platforms use -DPIC, to notify preprocessed assembler code. + $show "$base_compile$pic_flag -DPIC $srcfile" + if $run eval "$base_compile$pic_flag -DPIC $srcfile"; then : + else + test -n "$obj" && $run $rm $obj + exit 1 + fi + + # If we have no pic_flag, then copy the object into place and finish. + if test -z "$pic_flag"; then + $show "$LN_S $obj $libobj" + $run $LN_S $obj $libobj + exit $? + fi + + # Just move the object, then go on to compile the next one + $show "$mv $obj $libobj" + $run $mv $obj $libobj || exit 1 + fi + + # Only build a position-dependent object if we build old libraries. + if test "$build_old_libs" = yes; then + $show "$base_compile $srcfile" + if $run eval "$base_compile $srcfile"; then : + else + $run $rm $obj $libobj + exit 1 + fi + fi + + # Create an invalid libtool object if no PIC, so that we don't 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) + progname="$progname: link" + # Go through the arguments, transforming them on the way. + cc="$nonopt" + args="$cc" + allow_undefined=no + compile_command="$cc" + finalize_command="$cc" + compile_shlibpath= + finalize_shlibpath= + deplibs= + export_dynamic=no + hardcode_libdirs= + install_libdir= + libobjs= + link_against_libtool_libs= + link_static= + ltlibs= + objs= + prev= + prevarg= + perm_rpath= + temp_rpath= + vinfo= + + # We need to know -static, to get the right output filenames. + for arg + do + case "$arg" in + -static) + build_libtool_libs=no + build_old_libs=yes + break + ;; + esac + done + + for arg + do + # 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@" + args="$args $arg" + ;; + esac + + eval "$prev=\$arg" + prev= + + continue + fi + + args="$args $arg" + prevarg="$arg" + + case "$arg" in + -allow-undefined) allow_undefined=yes ;; + + -export-dynamic) + export_dynamic=yes + compile_command="$compile_command $export_dynamic_flag" + finalize_command="$finalize_command $export_dynamic_flag" + continue + ;; + + -L*) + dir=`echo "$arg" | sed 's%^-L\(.*\)$%\1%'` + case "$dir" in + /*) + ;; + *) + echo "$progname: \`-L$dir' cannot specify a relative directory" 1>&2 + exit 1 + ;; + esac + deplibs="$deplibs $arg" + ;; + + -l*) deplibs="$deplibs $arg" ;; + + -o) prev=output ;; + + -rpath) + prev=install_libdir + continue + ;; + + -static) + link_static="`eval echo \"$link_static_flag\"`" + compile_command="$compile_command $link_static" + continue + ;; + + -version-file) + echo "$progname: \`-version-file' has been replaced by \`-version-info'" 1>&2 + echo "$help" 1>&2 + exit 1 + ;; + + -version-info) + prev=vinfo + continue + ;; + + -*) cc="$cc $arg" ;; # Some other compiler flag. + + *.o) + # A standard object. + objs="$objs $arg" + ;; + + *.a) + # Find the relevant object directory and library name. + file=`echo "$arg" | sed 's%^.*/%%'` + dir=`echo "$arg" | sed 's%/[^/]*$%/%'` + test "$dir" = "$arg" && dir= + + # Standard archive. + objs="$objs $arg" + ;; + + *.lo) + # A library object. + libobjs="$libobjs $arg" + ;; + + *.la) + # A libtool-controlled library. + + libdir= + library_names= + old_library= + + # Check to see that this really is a libtool archive. + if egrep "^# Generated by $PROGRAM" $arg >/dev/null 2>&1; then : + else + echo "$progname: \`$arg' is not a valid libtool archive" 1>&2 + exit 1 + fi + + # If there is no directory component, then add one. + case "$arg" in + */*) . $arg ;; + *) . ./$arg ;; + esac + + if test -z "$libdir"; then + echo "$progname: \`$arg' contains no -rpath information" 1>&2 + exit 1 + fi + + # 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 "$progname: cannot find name of link library for \`$arg'" 1>&2 + exit 1 + fi + + # Find the relevant object directory and library name. + name=`echo "$arg" | sed 's%^.*/%%; s/\.la$//; s/^lib//'` + dir=`echo "$arg" | sed 's%/[^/]*$%%'` + if test "$dir" = "$arg"; then + dir="$objdir" + else + dir="$dir/$objdir" + 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 + + 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 libdirs. + hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir" + libdir= + fi + fi + + if test -n "$libdir"; then + hardcode_libdir_flag=`eval echo \"$hardcode_libdir_flag_spec\"` + compile_command="$compile_command $hardcode_libdir_flag" + finalize_command="$finalize_command $hardcode_libdir_flag" + fi + elif test "$hardcode_runpath_var" = yes; then + # Do the same for the permanent run path. + case "$perm_rpath " in + "* $libdir *") ;; + *) perm_rpath="$perm_rpath $libdir" ;; + esac + fi + + + case "$hardcode_action" in + immediate) + if test "$hardcode_direct" = no; then + compile_command="$compile_command $dir/$linklib" + elif test "$hardcode_minus_L" = no; then + 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" + fi + ;; + + relink) + # We need an absolute path. + case "$dir" in + /*) ;; + *) + absdir=`cd "$dir" && pwd` + if test -z "$absdir"; then + echo "$progname: 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" + fi + ;; + + *) + echo "$progname: \`$hardcode_action' is an unknown hardcode action" 1>&2 + exit 1 + ;; + esac + + # 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 can't 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 "$progname: cannot find static library for \`$arg'" 1>&2 + exit 1 + fi + test -n "$old_library" && linklib="$old_library" + compile_command="$compile_command $dir/$linklib" + finalize_command="$finalize_command $dir/$linklib" + fi + continue + ;; + + *) + echo "$progname: unknown file suffix for \`$arg'" 1>&2 + echo "$help" 1>&2 + exit 1 + ;; + esac + + compile_command="$compile_command $arg" + finalize_command="$finalize_command $arg" + done + + if test -n "$prev"; then + echo "$progname: the \`$prevarg' option requires an argument" 1>&2 + echo "$help" 1>&2 + exit 1 + fi + + # Substitute the hardcoded libdirs into the compile commands. + if test "$hardcode_libdir_colon_separated" = yes; then + compile_command=`echo "$compile_command" | sed "s%@HARDCODE_LIBDIRS@%$hardcode_libdirs%g"` + finalize_command=`echo "$finalize_command" | sed "s%@HARDCODE_LIBDIRS@%$hardcode_libdirs%g"` + fi + + oldlib= + oldobjs= + case "$output" in + "") + echo "$progname: you must specify an output file" 1>&2 + echo "$help" 1>&2 + exit 1 + ;; + + */*) + echo "$progname: output file \`$output' must have no directory components" 1>&2 + exit 1 + ;; + + *.la) + libname=`echo "$output" | sed 's/\.la$//'` + + # All the library-specific variables (install_libdir is set above). + library_names= + old_library= + dlname= + current=0 + revision=0 + age=0 + + if test -n "$objs"; then + echo "$progname: cannot build libtool library \`$output' from non-libtool objects:$objs" 2>&1 + exit 1 + fi + + # How the heck are we supposed to write a wrapper for a shared library? + if test -n "$link_against_libtool_libs"; then + echo "$progname: libtool library \`$output' may not depend on uninstalled libraries:$link_against_libtool_libs" 1>&2 + exit 1 + fi + + if test -z "$install_libdir"; then + echo "$progname: you must specify an installation directory with \`-rpath'" 1>&2 + exit 1 + fi + + # Parse the version information argument. + IFS="${IFS= }"; save_ifs="$IFS"; IFS=':' + set dummy $vinfo + IFS="$save_ifs" + + if test -n "$5"; then + echo "$progname: too many parameters to \`-version-info'" 1>&2 + echo "$help" 1>&2 + exit 1 + fi + + test -n "$2" && current="$2" + test -n "$3" && revision="$3" + test -n "$4" && age="$4" + + # Check that each of the things are valid numbers. + case "$current" in + 0 | [1-9] | [1-9][0-9]*) ;; + *) + echo "$progname: CURRENT \`$current' is not a nonnegative integer" 1>&2 + echo "$progname: \`$vinfo' is not valid version information" 1>&2 + exit 1 + ;; + esac + + case "$revision" in + 0 | [1-9] | [1-9][0-9]*) ;; + *) + echo "$progname: REVISION \`$revision' is not a nonnegative integer" 1>&2 + echo "$progname: \`$vinfo' is not valid version information" 1>&2 + exit 1 + ;; + esac + + case "$age" in + 0 | [1-9] | [1-9][0-9]*) ;; + *) + echo "$progname: AGE \`$age' is not a nonnegative integer" 1>&2 + echo "$progname: \`$vinfo' is not valid version information" 1>&2 + exit 1 + ;; + esac + + if test $age -gt $current; then + echo "$progname: AGE \`$age' is greater than the current interface number \`$current'" 1>&2 + echo "$progname: \`$vinfo' is not valid version information" 1>&2 + exit 1 + fi + + # Calculate the version variables. + version_vars="version_type current age revision" + case "$version_type" in + none) ;; + + linux) + version_vars="$version_vars major versuffix" + major=`expr $current - $age` + versuffix="$major.$age.$revision" + ;; + + osf) + version_vars="$version_vars versuffix verstring" + major=`expr $current - $age` + versuffix="$current.$age.$revision" + verstring="$versuffix" + + # Add in all the interfaces that we are compatible with. + loop=$age + while test $loop != 0; do + iface=`expr $current - $loop` + loop=`expr $loop - 1` + verstring="$verstring:${iface}.0" + done + + # Make executables depend on our current version. + verstring="$verstring:${current}.0" + ;; + + sunos) + version_vars="$version_vars major versuffix" + major="$current" + versuffix="$current.$revision" + ;; + + *) + echo "$progname: unknown library version type \`$version_type'" 1>&2 + echo "Fatal configuration error. See the $PACKAGE docs for more information." 1>&2 + exit 1 + ;; + esac + + # Create the output directory, or remove our outputs if we need to. + if test -d $objdir; then + $show "$rm $objdir/$libname.*" + $run $rm $objdir/$libname.* + else + $show "$mkdir $objdir" + $run $mkdir $objdir || exit $? + fi + + # Check to see if the archive will have undefined symbols. + if test "$allow_undefined" = yes; then + if test "$allow_undefined_flag" = unsupported; then + echo "$progname: warning: undefined symbols not allowed in $host shared libraries" 1>&2 + build_libtool_libs=no + fi + else + # Clear the flag. + allow_undefined_flag= + fi + + if test "$build_libtool_libs" = yes; then + # Get the real and link names of the library. + library_names=`eval echo \"$library_names_spec\"` + set dummy $library_names + realname="$2" + shift; shift + + if test -n "$soname_spec"; then + soname=`eval echo \"$soname_spec\"` + else + soname="$realname" + fi + + lib="$objdir/$realname" + linknames= + for link + do + linknames="$linknames $link" + done + + # Use standard objects if they are PIC. + test -z "$pic_flag" && libobjs=`echo "$libobjs " | sed 's/\.lo /.o /g; s/ $//g'` + + # Do each of the archive commands. + cmds=`eval echo \"$archive_cmds\"` + IFS="${IFS= }"; save_ifs="$IFS"; IFS=';' + for cmd in $cmds; do + IFS="$save_ifs" + $show "$cmd" + $run eval "$cmd" || exit $? + done + IFS="$save_ifs" + + # Create links to the real library. + for link in $linknames; do + $show "(cd $objdir && $LN_S $realname $link)" + $run eval "(cd $objdir && $LN_S $realname $link)" || exit $? + done + + # If -export-dynamic was specified, set the dlname. + if test "$export_dynamic" = yes; then + # On all known operating systems, these are identical. + dlname="$soname" + fi + fi + ;; + + *.lo | *.o) + if test -n "$link_against_libtool_libs"; then + echo "$progname: error: cannot link libtool libraries into reloadable objects" 1>&2 + exit 1 + fi + + if test -n "$deplibs"; then + echo "$progname: warning: \`-l' and \`-L' are ignored while creating objects" 1>&2 + fi + + if test -n "$install_libdir"; then + echo "$progname: warning: \`-rpath' is ignored while creating objects" 1>&2 + fi + + if test -n "$vinfo"; then + echo "$progname: warning: \`-version-info' is ignored while creating objects" 1>&2 + fi + + case "$output" in + *.lo) + if test -n "$objs"; then + echo "$progname: cannot build library object \`$output' from non-libtool objects" 1>&2 + exit 1 + fi + libobj="$output" + obj=`echo "$output" | sed 's/\.lo$/.o/'` + ;; + *) + libobj= + obj="$output" + ;; + esac + + # Delete the old objects. + $run $rm $obj $libobj + + # Create the old-style object. + reload_objs="$objs"`echo "$libobjs " | sed 's/[^ ]*\.a //g; s/\.lo /.o /g; s/ $//g'` + + output="$obj" + cmds=`eval echo \"$reload_cmds\"` + IFS="${IFS= }"; save_ifs="$IFS"; IFS=';' + for cmd in $cmds; do + IFS="$save_ifs" + $show "$cmd" + $run eval "$cmd" || exit $? + done + IFS="$save_ifs" + + # Exit if we aren't doing a library object file. + test -z "$libobj" && exit 0 + + if test "$build_libtool_libs" != yes; then + # Create an invalid libtool object if no PIC, so that we don't + # accidentally link it into a program. + $show "echo timestamp > $libobj" + $run eval "echo timestamp > $libobj" || exit $? + exit 0 + fi + + if test -n "$pic_flag"; then + # Only do commands if we really have different PIC objects. + reload_objs="$libobjs" + output="$libobj" + cmds=`eval echo \"$reload_cmds\"` + IFS="${IFS= }"; save_ifs="$IFS"; IFS=';' + for cmd in $cmds; do + IFS="$save_ifs" + $show "$cmd" + $run eval "$cmd" || exit $? + done + IFS="$save_ifs" + else + # Just create a symlink. + $show "$LN_S $obj $libobj" + $run $LN_S $obj $libobj || exit 1 + fi + + exit 0 + ;; + + *) + if test -n "$install_libdir"; then + echo "$progname: warning: \`-rpath' is ignored while linking programs" 1>&2 + fi + + if test -n "$vinfo"; then + echo "$progname: warning: \`-version-info' is ignored while linking programs" 1>&2 + fi + + if test -n "$libobjs"; then + # Transform all the library objects into standard objects. + compile_command=`echo "$compile_command " | sed 's/\.lo /.o /g; s/ $//'` + finalize_command=`echo "$finalize_command " | sed 's/\.lo /.o /g; s/ $//'` + fi + + if test -z "$link_against_libtool_libs" || test "$build_libtool_libs" != yes; then + # Replace the output file specification. + compile_command=`echo "$compile_command" | sed 's%@OUTPUT@%'"$output"'%g'` + finalize_command=`echo "$finalize_command" | sed 's%@OUTPUT@%'"$output"'%g'` + + # We have no uninstalled library dependencies, so finalize right now. + $show "$compile_command" + $run $compile_command + status=$? + + # If we failed to link statically, then try again. + if test $status -ne 0 && test -n "$link_static"; then + echo "$progname: cannot link \`$output' statically; retrying semi-dynamically" 1>&2 + compile_command=`echo "$compile_command " | sed "s% $link_static % %;s/ $//"` + $show "$finalize_command" + $run $finalize_command + status=$? + fi + exit $status + fi + + # Replace the output file specification. + compile_command=`echo "$compile_command" | sed 's%@OUTPUT@%'"$objdir/$output"'%g'` + finalize_command=`echo "$finalize_command" | sed 's%@OUTPUT@%'"$objdir/$output"'T%g'` + + # Create the binary in the object directory, then wrap it. + if test -d $objdir; then : + else + $show "$mkdir $objdir" + $run $mkdir $objdir || exit $? + fi + + if test -n "$shlibpath_var"; then + # We should set the shlibpath_var + rpath= + for dir in $temp_rpath; do + case "$dir" in + /*) + # Absolute path. + rpath="$rpath$dir:" + ;; + *) + # Relative path: add a thisdir entry. + rpath="$rpath\$thisdir/$dir:" + ;; + esac + done + temp_rpath="$rpath" + fi + + # Delete the old output file. + $run $rm $output + + if test -n "$compile_shlibpath"; then + compile_command="$shlibpath_var=\"$compile_shlibpath\$$shlibpath_var\" $compile_command" + fi + if test -n "$finalize_shlibpath"; then + finalize_command="$shlibpath_var=\"$finalize_shlibpath\$$shlibpath_var\" $finalize_command" + fi + + if test -n "$perm_rpath"; then + # We should set the runpath_var. + rpath= + for dir in $perm_rpath; do + rpath="$rpath$dir:" + done + compile_command="$runpath_var=\"$rpath\$$runpath_var\" $compile_command" + finalize_command="$runpath_var=\"$rpath\$$runpath_var\" $finalize_command" + fi + + case "$hardcode_action" in + relink) + # AGH! Flame the AIX and HP-UX people for me, will ya? + echo "$progname: warning: using a buggy system linker" 1>&2 + echo "$progname: relinking will be required before \`$output' can be installed" 1>&2 + ;; + esac + + $show "$compile_command" + $run eval "$compile_command" || exit $? + + # Now create the wrapper script. + echo "creating $output" + + # Only actually do things if our run command is non-null. + if test -z "$run"; then + $rm $output + trap "$rm $output; exit 1" 1 2 15 + + cat > $output <<EOF +#! /bin/sh + +# $output - temporary wrapper script for $objdir/$output +# Generated by $PROGRAM - GNU $PACKAGE $VERSION +# +# The $output program cannot be directly executed until all the libtool +# libraries that it depends on are installed. +# +# This wrapper script should never be moved out of \``pwd`'. +# If it is, it will not operate correctly. + +# This environment variable determines our operation mode. +if test "\$libtool_install_magic" = "$magic"; then + # install mode needs the following variables: + link_against_libtool_libs='$link_against_libtool_libs' + finalize_command='$finalize_command' +else + # Find the directory that this script lives in. + thisdir=\`echo \$0 | sed 's%/[^/]*$%%'\` + test "x\$thisdir" = "x\$0" && thisdir=. + + # Try to get the absolute directory name. + absdir=\`cd "\$thisdir" && pwd\` + test -n "\$absdir" && thisdir="\$absdir" + + progdir="\$thisdir/$objdir" + program="$output" + + if test -f "\$progdir/\$program"; then + # Run the actual program with our arguments. + args= + for arg + do + # Quote arguments (to preserve shell metacharacters). + args="\$args '\$arg'" + done + + # Export the path to the program. + PATH="\$progdir:\$PATH" + export PATH +EOF + + # Export our shlibpath_var if we have one. + if test -n "$shlibpath_var" && test -n "$temp_rpath"; then + cat >> $output <<EOF + + # Add our own library path to $shlibpath_var + $shlibpath_var="$temp_rpath\$$shlibpath_var" + + # Some systems cannot cope with colon-terminated $shlibpath_var + $shlibpath_var=\`echo \$$shlibpath_var | sed -e 's/:*\$//'\` + + export $shlibpath_var +EOF + fi + + cat >> $output <<EOF + + eval "exec \$program \$args" + + echo "\$0: cannot exec \$program \$args" + exit 1 + else + # The program doesn't exist. + echo "\$0: error: \$progdir/\$program does not exist" 1>&2 + echo "This script is just a wrapper for \$program." 1>&2 + echo "See the $PACKAGE documentation for more information." 1>&2 + exit 1 + fi +fi +EOF + chmod +x $output + fi + exit 0 + ;; + esac + + + # See if we need to build an old-fashioned archive. + if test "$build_old_libs" = "yes"; then + # Now set the variables for building old libraries. + oldlib="$objdir/$libname.a" + + # Transform .lo files to .o files. + oldobjs="$objs"`echo "$libobjs " | sed 's/[^ ]*\.a //g; s/\.lo /.o /g; s/ $//g'` + + if test -d "$objdir"; then + $show "$rm $oldlib" + $run $rm $oldlib + else + $show "$mkdir $objdir" + $run $mkdir $objdir + fi + + # Do each command in the archive commands. + cmds=`eval echo \"$old_archive_cmds\"` + IFS="${IFS= }"; save_ifs="$IFS"; IFS=';' + for cmd in $cmds; do + IFS="$save_ifs" + $show "$cmd" + $run eval "$cmd" || exit $? + done + IFS="$save_ifs" + fi + + # Now create the libtool archive. + case "$output" in + *.la) + old_library= + test "$build_old_libs" = yes && old_library="$libname.a" + + echo "creating $output" + + # Only create the output if not a dry run. + if test -z "$run"; then + cat > $output <<EOF +# $output - a libtool library file +# Generated by $PROGRAM - GNU $PACKAGE $VERSION + +# The name that we can dlopen(3). +dlname='$dlname' + +# Names of this library. +library_names='$library_names' + +# The name of the static archive. +old_library='$old_library' + +# Version information for $libname. +current=$current +age=$age +revision=$revision + +# Directory that this library needs to be installed in: +libdir='$install_libdir' +EOF + fi + + # Do a symbolic link so that the libtool archive can be found in + # LD_LIBRARY_PATH before the program is installed. + $show "(cd $objdir && $LN_S ../$output $output)" + $run eval "(cd $objdir && $LN_S ../$output $output)" || exit 1 + ;; + esac + exit 0 + ;; + + # libtool install mode + install) + progname="$progname: install" + + # The first argument is the name of the installation program. + install_prog="$nonopt" + + # CYGNUS LOCAL: Handle /bin/sh at the start. + if test "$install_prog" = "/bin/sh"; then + install_prog=$1 + shift + fi + + # We need to accept at least all the BSD install flags. + dest= + files= + opts= + prev= + install_type= + isdir= + stripme= + for arg + do + if test -n "$dest"; then + files="$files $dest" + dest="$arg" + continue + fi + + case "$arg" in + -d) isdir=yes ;; + -f) prev="-f" ;; + -g) prev="-g" ;; + -m) prev="-m" ;; + -o) prev="-o" ;; + -s) + stripme=" -s" + continue + ;; + -*) ;; + + *) + # If the previous option needed an argument, then skip it. + if test -n "$prev"; then + prev= + else + dest="$arg" + continue + fi + ;; + esac + install_prog="$install_prog $arg" + done + + if test -z "$install_prog"; then + echo "$progname: you must specify an install program" 1>&2 + echo "$help" 1>&2 + exit 1 + fi + + if test -n "$prev"; then + echo "$progname: the \`$prev' option requires an argument" 1>&2 + echo "$help" 1>&2 + exit 1 + fi + + if test -z "$files"; then + if test -z "$dest"; then + echo "$progname: no file or destination specified" 1>&2 + else + echo "$progname: you must specify a destination" 1>&2 + fi + echo "$help" 1>&2 + exit 1 + fi + + # Strip any trailing slash from the destination. + dest=`echo "$dest" | sed 's%/$%%'` + + # Check to see that the destination is a directory. + test -d "$dest" && isdir=yes + if test -n "$isdir"; then + destdir="$dest" + destname= + else + destdir=`echo "$dest" | sed 's%/[^/]*$%%'` + test "$destdir" = "$dest" && destdir=. + destname=`echo "$dest" | sed 's%^.*/%%'` + + # Not a directory, so check to see that there is only one file specified. + set dummy $files + if test $# -gt 2; then + echo "$progname: \`$dest' is not a directory" 1>&2 + echo "$help" 1>&2 + exit 1 + fi + fi + case "$destdir" in + /*) ;; + *) + for file in $files; do + case "$file" in + *.lo) ;; + *) + echo "$progname: \`$destdir' must be an absolute directory name" 1>&2 + echo "$help" 1>&2 + exit 1 + ;; + esac + done + ;; + esac + + staticlibs= + future_libdirs= + current_libdirs= + for file in $files; do + + # Do each installation. + case "$file" in + *.a) + # Do the static libraries later. + staticlibs="$staticlibs $file" + ;; + + *.la) + # Check to see that this really is a libtool archive. + if egrep "^# Generated by $PROGRAM" $file >/dev/null 2>&1; then : + else + echo "$progname: \`$file' is not a valid libtool archive" 1>&2 + echo "$help" 1>&2 + exit 1 + fi + + library_names= + old_library= + # If there is no directory component, then add one. + case "$file" in + */*) . $file ;; + *) . ./$file ;; + esac + + # Add the libdir to current_libdirs if it is the destination. + if test "$destdir" = "$libdir"; then + case "$current_libdirs " in + "* $libdir *") ;; + *) current_libdirs="$current_libdirs $libdir" ;; + esac + else + # Note the libdir as a future libdir. + case "$future_libdirs " in + "* $libdir *") ;; + *) future_libdirs="$future_libdirs $libdir" ;; + esac + fi + + dir="`echo "$file" | sed 's%/[^/]*$%%'`/" + test "$dir" = "$file/" && dir= + dir="$dir$objdir" + + # See the names of the shared library. + set dummy $library_names + if test -n "$2"; then + realname="$2" + shift + shift + + # Install the shared library and build the symlinks. + $show "$install_prog $dir/$realname $destdir/$realname" + $run eval "$install_prog $dir/$realname $destdir/$realname" || exit $? + test "X$dlname" = "X$realname" && dlname= + + # Support stripping libraries. + if test -n "$stripme"; then + if test -n "$striplib"; then + $show "$striplib $destdir/$realname" + $run $striplib $destdir/$realname || exit $? + else + echo "$progname: warning: no library stripping program" 1>&2 + fi + fi + + if test $# -gt 0; then + # Delete the old symlinks. + rmcmd="$rm" + for linkname + do + rmcmd="$rmcmd $destdir/$linkname" + done + $show "$rmcmd" + $run $rmcmd + + # ... and create new ones. + for linkname + do + test "X$dlname" = "X$linkname" && dlname= + $show "(cd $destdir && $LN_S $realname $linkname)" + $run eval "(cd $destdir && $LN_S $realname $linkname)" + done + fi + + if test -n "$dlname"; then + # Install the dynamically-loadable library. + $show "$install_prog $dir/$dlname $destdir/$dlname" + $run eval "$install_prog $dir/$dlname $destdir/$dlname" || exit $? + fi + + # Do each command in the postinstall commands. + lib="$destdir/$realname" + cmds=`eval echo \"$postinstall_cmds\"` + IFS="${IFS= }"; save_ifs="$IFS"; IFS=';' + for cmd in $cmds; do + IFS="$save_ifs" + $show "$cmd" + $run eval "$cmd" || exit $? + done + IFS="$save_ifs" + fi + + # Install the pseudo-library for information purposes. + name=`echo "$file" | sed 's%^.*/%%'` + $show "$install_prog $file $destdir/$name" + $run $install_prog $file $destdir/$name || exit $? + + # Maybe install the static library, too. + test -n "$old_library" && staticlibs="$staticlibs $dir/$old_library" + ;; + + *.lo) + # Install (i.e. copy) a libtool object. + + # Figure out destination file name, if it wasn't already specified. + if test -n "$destname"; then + destfile="$destdir/$destname" + else + destfile=`echo "$file" | sed 's%^.*/%%;'` + destfile="$destdir/$destfile" + fi + + # Deduce the name of the destination old-style object file. + case "$destfile" in + *.lo) + staticdest=`echo "$destfile" | sed 's/\.lo$/\.o/;'` + ;; + *.o) + staticdest="$destfile" + destfile= + ;; + *) + echo "$progname: cannot copy a libtool object to \`$destfile'" 1>&2 + echo "$help" 1>&2 + exit 1 + ;; + esac + + # Install the libtool object if requested. + if test -n "$destfile"; then + $show "$install_prog $file $destfile" + $run $install_prog $file $destfile || exit $? + fi + + # Install the old object if enabled. + if test "$build_old_libs" = yes; then + # Deduce the name of the old-style object file. + staticobj=`echo "$file" | sed 's/\.lo$/\.o/;'` + + $show "$install_prog $staticobj $staticdest" + $run $install_prog $staticobj $staticdest || exit $? + fi + exit 0 + ;; + + *) + # Do a test to see if this is really a libtool program. + if egrep "^# Generated by $PROGRAM" $file >/dev/null 2>&1; then + # This variable tells wrapper scripts just to set variables rather + # than running their programs. + libtool_install_magic="$magic" + link_against_libtool_libs= + finalize_command= + + # If there is no directory component, then add one. + case "$file" in + */*) . $file ;; + *) . ./$file ;; + esac + + # Check the variables that should have been set. + if test -z "$link_against_libtool_libs" || test -z "$finalize_command"; then + echo "$progname: invalid libtool wrapper script \`$file'" 1>&2 + exit 1 + fi + + finalize=yes + for lib in $link_against_libtool_libs; do + # Check to see that each library is installed. + libdir= + if test -f "$lib"; then + # If there is no directory component, then add one. + case "$lib" in + */*) . $lib ;; + *) . ./$lib ;; + esac + fi + libfile="$libdir/`echo "$lib" | sed 's%^.*/%%g'`" + if test -z "$libdir"; then + echo "$progname: warning: \`$lib' contains no -rpath information" 1>&2 + elif test -f "$libfile"; then : + else + echo "$progname: warning: \`$lib' has not been installed in \`$libdir'" 1>&2 + finalize=no + fi + done + + if test "$hardcode_action" = relink; then + if test "$finalize" = yes; then + echo "$progname: warning: relinking \`$file' on behalf of your buggy system linker" 1>&2 + $show "$finalize_command" + if $run $finalize_command; then : + else + echo "$progname: error: relink \`$file' with the above command before installing it" 1>&2 + continue + fi + file="$objdir/$file"T + else + echo "$progname: warning: cannot relink \`$file' on behalf of your buggy system linker" 1>&2 + fi + else + # Install the binary that we compiled earlier. + dir=`echo "$file" | sed 's%/[^/]*$%%'` + if test "$file" = "$dir"; then + file="$objdir/$file" + else + file="$dir/$objdir/`echo "$file" | sed 's%^.*/%%'`" + fi + fi + fi + + $show "$install_prog$stripme $file $dest" + $run $install_prog$stripme $file $dest || exit $? + ;; + esac + done + + for file in $staticlibs; do + name=`echo "$file" | sed 's%^.*/%%'` + + # Set up the ranlib parameters. + oldlib="$destdir/$name" + + $show "$install_prog $file $oldlib" + $run $install_prog $file $oldlib || exit $? + + # Support stripping libraries. + if test -n "$stripme"; then + if test -n "$old_striplib"; then + $show "$old_striplib $oldlib" + $run $old_striplib $oldlib || exit $? + else + echo "$progname: warning: no static library stripping program" 1>&2 + fi + fi + + # Do each command in the postinstall commands. + cmds=`eval echo \"$old_postinstall_cmds\"` + IFS="${IFS= }"; save_ifs="$IFS"; IFS=';' + for cmd in $cmds; do + IFS="$save_ifs" + $show "$cmd" + $run eval "$cmd" || exit $? + done + IFS="$save_ifs" + done + + if test -n "$future_libdirs"; then + echo "$progname: warning: remember to run \`$progname --finish$future_libdirs'" 1>&2 + fi + + if test -n "$current_libdirs"; then + # Maybe just do a dry run. + test -n "$run" && current_libdirs=" -n$current_libdirs" + exec $0 --finish$current_libdirs + exit 1 + fi + + exit 0 + ;; + + # libtool dlname mode + dlname) + progname="$progname: dlname" + ltlibs="$nonopt" + for lib + do + ltlibs="$ltlibs $lib" + done + + if test -z "$ltlibs"; then + echo "$progname: you must specify at least one LTLIBRARY" 1>&2 + echo "$help" 1>&2 + exit 1 + fi + + # Now check to make sure each one is a valid libtool library. + status=0 + for lib in $ltlibs; do + dlname= + libdir= + library_names= + + # Check to see that this really is a libtool archive. + if egrep "^# Generated by $PROGRAM" $arg >/dev/null 2>&1; then : + else + echo "$progname: \`$arg' is not a valid libtool archive" 1>&2 + status=1 + continue + fi + + # If there is no directory component, then add one. + case "$arg" in + */*) . $arg ;; + *) . ./$arg ;; + esac + + if test -z "$libdir"; then + echo "$progname: \`$arg' contains no -rpath information" 1>&2 + status=1 + elif test -n "$dlname"; then + echo "$libdir/$dlname" + elif test -z "$library_names"; then + echo "$progname: \`$arg' is not a shared library" 1>&2 + status=1 + else + echo "$progname: \`$arg' was not linked with \`-export-dynamic'" 1>&2 + status=1 + fi + done + exit $status + ;; + + # libtool finish mode + finish) + progname="$progname: finish" + libdirs="$nonopt" + + if test -n "$finish_cmds" && test -n "$libdirs"; then + for dir + do + libdirs="$libdirs $dir" + done + + for libdir in $libdirs; do + # Do each command in the postinstall commands. + cmds=`eval echo \"$finish_cmds\"` + IFS="${IFS= }"; save_ifs="$IFS"; IFS=';' + for cmd in $cmds; do + IFS="$save_ifs" + $show "$cmd" + $run eval "$cmd" + done + IFS="$save_ifs" + done + fi + + echo "To link against installed libraries in LIBDIR, users may have to:" + if test -n "$shlibpath_var"; then + echo " - add LIBDIR to their \`$shlibpath_var' environment variable" + fi + echo " - use the \`-LLIBDIR' linker flag" + exit 0 + ;; + + # libtool uninstall mode + uninstall) + progname="$progname: uninstall" + rm="$nonopt" + files= + + for arg + do + case "$arg" in + -*) rm="$rm $arg" ;; + *) files="$files $arg" ;; + esac + done + + if test -z "$rm"; then + echo "$progname: you must specify an RM program" 1>&2 + echo "$help" 1>&2 + exit 1 + fi + + for file in $files; do + dir=`echo "$file" | sed -e 's%/[^/]*$%%'` + test "$dir" = "$file" && dir=. + name=`echo "$file" | sed -e 's%^.*/%%'` + + rmfiles="$file" + + case "$name" in + *.la) + # Possibly a libtool archive, so verify it. + if egrep "^# Generated by $PROGRAM" $file >/dev/null 2>&1; then + . $dir/$name + + # Delete the libtool libraries and symlinks. + for n in $library_names; do + rmfiles="$rmfiles $dir/$n" + test "X$n" = "X$dlname" && dlname= + done + test -n "$dlname" && rmfiles="$rmfiles $dir/$dlname" + test -n "$old_library" && rmfiles="$rmfiles $dir/$old_library" + + # FIXME: should reinstall the best remaining shared library. + fi + ;; + + *.lo) + if test "$build_old_libs" = yes; then + oldobj=`echo "$name" | sed 's/\.lo$/\.o/'` + rmfiles="$rmfiles $dir/$oldobj" + fi + ;; + esac + + $show "$rm $rmfiles" + $run $rm $rmfiles + done + exit 0 + ;; + + NONE) + echo "$progname: you must specify a MODE" 1>&2 + echo "$generic_help" 1>&2 + exit 1 + ;; + esac + + echo "$progname: invalid operation mode \`$mode'" 1>&2 + echo "$generic_help" 1>&2 + exit 1 +fi # test -z "$show_help" + +# We need to display help for each of the modes. +case "$mode" in +NONE) cat <<EOF +Usage: $progname [OPTION]... [MODE-ARG]... + +Provide generalized library-building support services. + +-n, --dry-run display commands without modifying any files + --features display configuration information and exit + --finish same as \`--mode=finish' + --help display this help message and exit + --mode=MODE use operation mode MODE [default=inferred from MODE-ARGS] + --version print version information + +MODE must be one of the following: + + compile compile a source file into a libtool object + dlname print filenames to use to \`dlopen' libtool libraries + finish complete the installation of libtool libraries + install install libraries or executables + link create a library or an executable + uninstall remove libraries from an installed directory + +MODE-ARGS vary depending on the MODE. Try \`$progname --help --mode=MODE' for +a more detailed description of MODE. +EOF + ;; + +compile) + cat <<EOF +Usage: $progname [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE + +Compile a source file into a libtool library object. + +COMPILE-COMMAND is a command to be used in creating a \`standard' object file +from the given SOURCEFILE. + +The output file name is determined by removing the directory component from +SOURCEFILE, then substituting the C source code suffix \`.c' with the +library object suffix, \`.lo'. +EOF + ;; + +dlname) + cat <<EOF +Usage: $progname [OPTION]... --mode=dlname LTLIBRARY... + +Print filenames to use to \`dlopen' libtool libraries. + +Each LTLIBRARY is the name of a dynamically loadable libtool library (one that +was linked using the \`-export-dynamic' option). + +The names to use are printed to standard output, one per line. +EOF + ;; + +finish) + cat <<EOF +Usage: $progname [OPTION]... --mode=finish [LIBDIR]... + +Complete the installation of libtool libraries. + +Each LIBDIR is a directory that contains libtool libraries. + +The commands that this mode executes may require superuser privileges. Use +the \`--dry-run' option if you just want to see what would be executed. +EOF + ;; + +install) + cat <<EOF +Usage: $progname [OPTION]... --mode=install INSTALL-COMMAND... + +Install executables or libraries. + +INSTALL-COMMAND is the installation command. The first component should be +either the \`install' or \`cp' program. + +The rest of the components are interpreted as arguments to that command (only +BSD-compatible install options are recognized). +EOF + ;; + +link) + cat <<EOF +Usage: $progname [OPTION]... --mode=link LINK-COMMAND... + +Link object files or libraries together to form another library, or to +create an executable program. + +LINK-COMMAND is a command using the C compiler that you would use to create +a program from several object files. + +The following components of LINK-COMMAND are treated specially: + + -allow-undefined allow a libtool library to reference undefined symbols + -export-dynamic allow symbols from OUTPUT-FILE to be resolved with dlsym(3) + -LLIBDIR search LIBDIR for required installed libraries + -lNAME OUTPUT-FILE requires the installed library libNAME + -o OUTPUT-FILE create OUTPUT-FILE from the specified objects + -rpath LIBDIR the created library will eventually be installed in LIBDIR + -static do not do any dynamic linking or shared library creation + -version-info CURRENT[:REVISION[:AGE]] + specify library version info [each variable defaults to 0] + +All other options (arguments beginning with \`-') are ignored. + +Every other argument is treated as a filename. Files ending in \`.la' are +treated as uninstalled libtool libraries, other files are standard or library +object files. + +If the OUTPUT-FILE ends in \`.la', then a libtool library is created, only +library objects (\`.lo' files) may be specified, and \`-rpath' is required. + +If OUTPUT-FILE ends in \`.a', then a standard library is created using \`ar' +and \`ranlib'. + +If OUTPUT-FILE ends in \`.lo' or \`.o', then a reloadable object file is +created, otherwise an executable program is created. +EOF + ;; + +uninstall) + cat <<EOF +Usage: $progname [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE... + +Remove libraries from an installation directory. + +RM is the name of the program to use to delete files associated with each FILE +(typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed +to RM. + +If FILE is a libtool library, all the files associated with it are deleted. +Otherwise, only FILE itself is deleted using RM. +EOF + ;; + +*) + echo "$progname: invalid operation mode \`$mode'" 1>&2 + echo "$help" 1>&2 + exit 1 + ;; +esac + +case "$mode" in +archive|compile) + echo + echo "Try \`$progname --help' for more information about other modes." + ;; +esac + +exit 0 + +# Local Variables: +# mode:shell-script +# sh-indentation:2 +# End: |