* README, ltconfig, ltmain.sh: New libtool: 1.0c.
[bpt/guile.git] / ltmain.sh
index d38fae1..0ab17a8 100644 (file)
--- a/ltmain.sh
+++ b/ltmain.sh
@@ -1,5 +1,5 @@
 # ltmain.sh - Provide generalized library-building support services.
-# Generated automatically from ltmain.sh.in by configure.
+# Generated automatically from ltmain.in by configure.
 # Copyright (C) 1996, 1997 Free Software Foundation, Inc.
 # Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996
 #
 # configuration script generated by Autoconf, you may include it under
 # the same distribution terms that you use for the rest of that program.
 
+#FIXME: echo=echo
+echo='printf %s\n'
+if test "X`$echo '\t'`" = 'X\t'; then :
+else
+  # The Solaris and AIX default echo program unquotes backslashes.
+  # This makes it impossible to quote backslashes using
+  #   echo "$something" | sed 's/\\/\\\\/g'
+  # So, we emulate echo with printf '%s\n'
+  echo='printf %s\n'
+  if test "X`$echo '\t'`" = 'X\t'; then :
+  else
+    # Oops.  We have no working printf.  Try to find a not-so-buggy echo.
+    echo=echo
+    IFS="${IFS=        }"; save_ifs="$IFS"; IFS="${IFS}:"
+    save_PATH="$PATH"
+    PATH="$PATH":/usr/ucb
+    for dir in $PATH; do
+      if test -f $dir/echo && test "X`$dir/echo '\t'`" = 'X\t'; then
+        echo="$dir/echo"
+        break
+      fi
+    done
+    IFS="$save_ifs"
+    PATH="$save_PATH"
+  fi
+fi
+
 # The name of this program.
-progname=`echo "$0" | sed 's%^.*/%%'`
+progname=`$echo "$0" | sed 's%^.*/%%'`
 
 # Constants.
 PROGRAM=ltmain.sh
 PACKAGE=libtool
-VERSION=0.9d
+VERSION=1.0c
 
-default_mode=NONE
+default_mode=
 help="Try \`$progname --help' for more information."
-ln_s="ln -s"
-cp_p="cp -p"
 magic="%%%MAGIC variable%%%"
 mkdir="mkdir"
 mv="mv -f"
-objdir=.libs
+objdir=_libs
 rm="rm -f"
 
+# Sed substitution that helps us do robust quoting.  It backslashifies
+# metacharacters that are still active within double-quoted strings.
+sed_quote_subst='s/\([\\"$]\)/\\\1/g'
+
+# 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).
+if test "${LC_ALL+set}" = set; then LC_ALL=C; export LC_ALL; fi
+if test "${LANG+set}"   = set; then LANG=C;   export LANG;   fi
+
 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
+  $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
+  $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
 
@@ -59,23 +95,32 @@ nonopt=
 prev=
 prevopt=
 run=
-show=echo
+show="$echo"
 show_help=
+execute_dlfiles=
 
 # Parse our command line options once, thoroughly.
-while test -n "$1"
+while test $# -gt 0
 do
   arg="$1"
   shift
 
   case "$arg" in
-  -*=*) optarg=`echo "$arg" | sed 's/[-_a-zA-Z0-9]*=//'` ;;
+  -*=*) 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"
+    case "$prev" in
+    execute_dlfiles)
+      eval "$prev=\"\$$prev \$arg\""
+      ;;
+    *)
+      eval "$prev=\$arg"
+      ;;
+    esac
+
     prev=
     prevopt=
     continue
@@ -88,7 +133,7 @@ do
     ;;
 
   --version)
-    echo "$PROGRAM (GNU $PACKAGE) $VERSION"
+    $echo "$PROGRAM (GNU $PACKAGE) $VERSION"
     exit 0
     ;;
 
@@ -97,16 +142,16 @@ do
     ;;
 
   --features)
-    echo "host: $host"
+    $echo "host: $host"
     if test "$build_libtool_libs" = yes; then
-      echo "enable shared libraries"
+      $echo "enable shared libraries"
     else
-      echo "disable shared libraries"
+      $echo "disable shared libraries"
     fi
     if test "$build_old_libs" = yes; then
-      echo "enable static libraries"
+      $echo "enable static libraries"
     else
-      echo "disable static libraries"
+      $echo "disable static libraries"
     fi
     exit 0
     ;;
@@ -116,9 +161,18 @@ do
   --mode) prevopt="--mode" prev=mode ;;
   --mode=*) mode="$optarg" ;;
 
+  --quiet | --silent)
+    show=:
+    ;;
+
+  -dlopen)
+    prevopt="-dlopen"
+    prev=execute_dlfiles
+    ;;
+
   -*)
-    echo "$progname: unrecognized option \`$arg'" 1>&2
-    echo "$help" 1>&2
+    $echo "$progname: unrecognized option \`$arg'" 1>&2
+    $echo "$help" 1>&2
     exit 1
     ;;
 
@@ -129,25 +183,31 @@ do
   esac
 done
 
-
 if test -n "$prevopt"; then
-  echo "$progname: option \`$prevopt' requires an argument" 1>&2
-  echo "$help" 1>&2
+  $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 "$mode" = NONE; then
+  if test -z "$mode"; then
     case "$nonopt" in
     *cc)
-      if echo " $@ " | egrep "[        ]-c[    ]" > /dev/null 2>&1; then
-        mode=compile
-      else
-        mode=link
-      fi
+      mode=link
+      for arg
+      do
+        case "$arg" in
+        -c)
+           mode=compile
+           break
+           ;;
+        esac
+      done
+      ;;
+    *db | *dbx)
+      mode=execute
       ;;
     *install*|cp)
       mode=install
@@ -155,22 +215,29 @@ if test -z "$show_help"; then
     *rm)
       mode=uninstall
       ;;
-    *.la)
-      mode=dlname
-      ;;
     *)
+      # 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 "$mode" = NONE; 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
+      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
 
+  # Only execute mode is allowed to have -dlopen flags.
+  if test -n "$execute_dlfiles" && test "$mode" != execute; then
+    $echo "$progname: 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 \`$progname --help --mode=$mode' for more information."
@@ -181,93 +248,128 @@ if test -z "$show_help"; then
   compile)
     progname="$progname: compile"
     # Get the compilation command and the source file.
-    base_compile="$nonopt"
+    base_compile=
     lastarg=
-    srcfile=
+    srcfile="$nonopt"
+    suppress_output=
 
     for arg
     do
-      # Quote any args containing shell metacharacters.
-      case "$arg" in
-      *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?]*|*\"*)
-        quote_arg="'$arg'" ;;
-      *) quote_arg="$arg" ;;
+      # The only flag that cannot be specified is the output filename.
+      if test "X$arg" = "X-o"; then
+       $echo "$progname: you cannot specify the output filename with \`-o'" 1>&2
+       $echo "$help" 1>&2
+       exit 1
+      fi
+
+      # 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 "$lastarg" | sed "$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
 
-      base_compile="$base_compile$lastarg"
-      srcfile="$quote_arg"
-      lastarg=" $srcfile"
+      # Add the previous argument to base_compile.
+      if test -z "$base_compile"; then
+       base_compile="$lastarg"
+      else
+       base_compile="$base_compile $lastarg"
+      fi
     done
 
     # Get the name of the library object.
-    libobj=`echo "$srcfile" | sed -e 's%^.*/%%'`
+    libobj=`$echo "$srcfile" | sed -e 's%^.*/%%'`
 
     # Recognize several different file suffixes.
-    xform='[cCFSf]'
+    xform='[cCFSfm]'
     case "$libobj" in
-    *.c++) xform='c++' ;;
+    *.c++) xform=c++ ;;
     *.cc) xform=cc ;;
     *.cpp) xform=cpp ;;
     *.cxx) xform=cxx ;;
     *.f90) xform=f90 ;;
-    *.for) xform='for' ;;
+    *.for) xform=for ;;
     esac
 
-    libobj=`echo "$libobj" | sed -e "s/\.$xform$/.lo/"`
+    libobj=`$echo "$libobj" | sed -e "s/\.$xform$/.lo/"`
 
     case "$libobj" in
-    *.lo) obj=`echo "$libobj" | sed -e 's/\.lo$/.o/'` ;;
+    *.lo) obj=`$echo "$libobj" | sed -e 's/\.lo$/.o/'` ;;
     *)
-      echo "$progname: cannot determine name of library object from \`$srcfile'" 1>&2
+      $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
+      $echo "$progname: you must specify a compilation command" 1>&2
+      $echo "$help" 1>&2
       exit 1
     fi
 
-    # Delete any old library objects.
-    $run $rm $obj $libobj
-    trap "$run $rm $obj $libobj; exit 1" 1 2 15
+    # 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 eval "$run $base_compile$pic_flag -DPIC $srcfile"; then :
+      if $run eval "$base_compile\$pic_flag -DPIC \$srcfile"; then :
       else
-       $run $rm $obj
-       exit 1
+        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 || $run $cp_p $obj $libobj
-       exit $?
+        $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
+
+      # Allow error messages only from the first compilation.
+      suppress_output=' >/dev/null 2>&1'
     fi
 
-    # Compile the position-dependent object.
-    $show "$base_compile $srcfile"
-    if eval "$run $base_compile $srcfile"; then :
-    else
-      $run $rm $obj $libobj
-      exit 1
+    # Only build a position-dependent object if we build old libraries.
+    if test "$build_old_libs" = yes; then
+      # Suppress compiler output if we already did a PIC compilation.
+      $show "$base_compile $srcfile$suppress_output"
+      if $run eval "$base_compile \$srcfile$suppress_output"; then :
+      else
+        $run $rm $obj $libobj
+        exit 1
+      fi
     fi
 
-    # Symlink or copy the object file into library object, if no PIC.
+    # 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 "$ln_s $obj $libobj"
-      $run $ln_s $obj $libobj || $run $cp_p $obj $libobj
-      exit $?
+      $show "$echo timestamp > $libobj"
+      $run eval "\$echo timestamp > \$libobj" || exit $?
     fi
 
     exit 0
@@ -276,348 +378,406 @@ if test -z "$show_help"; then
   # libtool link mode
   link)
     progname="$progname: link"
-    # Go through the arguments, transforming them on the way.
-    cc="$nonopt"
-    args="$cc"
-    compile_command="$cc"
-    finalize_command="$cc"
+    CC="$nonopt"
+    allow_undefined=no
+    compile_command="$CC"
+    finalize_command="$CC"
+
     compile_shlibpath=
     finalize_shlibpath=
     deplibs=
+    dlfiles=
+    dlprefiles=
     export_dynamic=no
     hardcode_libdirs=
-    install_libdir=
     libobjs=
     link_against_libtool_libs=
-    link_static=
     ltlibs=
     objs=
-    output=
     prev=
     prevarg=
+    rpath=
+    perm_rpath=
     temp_rpath=
     vinfo=
-    whole_archive=no
 
     # We need to know -static, to get the right output filenames.
-    case " $@ " in
-    *" -static "*) build_libtool_libs=no build_old_libs=yes ;;
-    esac
+    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 "$progname: warning: complete static linking is impossible in this configuration" 1>&2
+        fi
+        build_libtool_libs=no
+       build_old_libs=yes
+        break
+        ;;
+      esac
+    done
 
+    # Go through the arguments, transforming them on the way.
     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"
+        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
+          ;;
+        rpath)
+         rpath="$rpath $arg"
+         prev=
+         continue
          ;;
-       esac
-
-       eval "$prev=\$arg"
-       prev=
-
-       continue
+        *)
+          eval "$prev=\"\$arg\""
+          prev=
+          continue
+          ;;
+        esac
       fi
 
-      args="$args $arg"
       prevarg="$arg"
 
       case "$arg" in
-      -export-dynamic)
-       export_dynamic=yes
-       compile_command="$compile_command $export_dynamic_flag"
-       finalize_command="$finalize_command $export_dynamic_flag"
+      -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)
+       allow_undefined=yes
        continue
        ;;
 
+      -dlopen)
+        prev=dlfiles
+        continue
+        ;;
+
+      -dlpreopen)
+        prev=dlprefiles
+        continue
+        ;;
+
+      -export-dynamic)
+        if test "$export_dynamic" != yes; then
+          export_dynamic=yes
+         arg=`eval \\$echo "$export_dynamic_flag_spec"`
+
+          # Add the symbol object into the linking commands.
+         compile_command="$compile_command @SYMFILE@"
+         finalize_command="$finalize_command @SYMFILE@"
+        fi
+        ;;
+
       -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"
-       ;;
+        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" ;;
 
-      -no-whole-archive) whole_archive=no ;;
-
       -o) prev=output ;;
 
       -rpath)
-       prev=install_libdir
-       continue
-       ;;
+        prev=rpath
+        continue
+        ;;
 
       -static)
-       link_static="`eval echo \"$link_static_flag\"`"
-       compile_command="$compile_command $link_static"
+       # We already handled this flag above.
        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
-       ;;
-
-      -whole-archive) whole_archive=yes ;;
+        prev=vinfo
+        continue
+        ;;
 
-      -*) cc="$cc $arg" ;; # Some other compiler flag.
+      # 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 "$arg" | sed "$sed_quote_subst"`
+       case "$arg" in
+       *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \   ]*|*]*)
+         arg="\"$arg\""
+         ;;
+       esac
+        ;;
 
-      *.o)
-       # A standard object.
-       objs="$objs $arg"
-       ;;
+      *.o | *.a)
+        # 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=
-
-       # If -whole-archive was specified, we need to link all the members.
-       if test "$whole_archive" = yes; then
-         if test -f $arg; then :
+      *.lo)
+        # A library object.
+       if test "$prev" = dlfiles; then
+         dlfiles="$dlfiles $arg"
+         if test "$build_libtool_libs" = yes; then
+           prev=
+           continue
          else
-           echo "$progname: \`$arg' does not exist" 1>&2
-           echo "$help" 1>&2
-           exit 1
+           # If libtool objects are unsupported, then we need to preload.
+           prev=dlprefiles
          fi
-
-         # Get the names of the members of the archive.
-         members=`$AR t $arg 2>/dev/null`
-         for m in $members; do
-           case "$m" in
-           *.lo) libobjs="$libobjs $dir$m" ;;
-           *.o)
-             if test "$build_libtool_libs" = yes; then
-               objs="$objs $dir$m"
-             else
-               libobjs="$libobjs $dir$m"
-             fi
-             ;;
-           esac
-         done
-       elif test -f "$dir$objdir/$file"; then
-         # .libs/libfoo.a exists, so this is an archive of libobjects.
-         libobjs="$libobjs $arg"
-       else
-         # Standard archive.
-         objs="$objs $arg"
        fi
-       ;;
 
-      *.lo)
-       # A library object.
+       if test "$prev" = dlprefiles; then
+         # Preload the old-style object.
+         dlprefiles="$dlprefiles "`$echo "$arg" | sed 's/\.lo$/\.o/'`
+         prev=
+       fi
        libobjs="$libobjs $arg"
-       ;;
+        ;;
 
       *.la)
-       # A libtool-controlled library.
+        # A libtool-controlled library.
 
-       libdir=
-       library_names=
-       old_library=
+        dlname=
+        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
+        # Check to see that this really is a libtool archive.
+        if egrep "^# Generated by ltmain.sh" $arg >/dev/null 2>&1; then :
+        else
+          $echo "$progname: \`$arg' is not a valid libtool archive" 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 there is no directory component, then add one.
+        case "$arg" in
+        */*) . $arg ;;
+        *) . ./$arg ;;
+        esac
 
-       if test -z "$linklib"; then
-         echo "$progname: cannot find name of link library for \`$arg'" 1>&2
-         exit 1
-       fi
+        if test -z "$libdir"; then
+          $echo "$progname: \`$arg' contains no -rpath information" 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
+        # Get the name of the library we link against.
+        linklib=
+        for l in $old_library $library_names; do
+          linklib="$l"
+        done
 
-       link_against_libtool_libs="$link_against_libtool_libs $arg"
+        if test -z "$linklib"; then
+          $echo "$progname: cannot find name of link library for \`$arg'" 1>&2
+          exit 1
+        fi
 
-       if test "$build_libtool_libs" = yes; then
-         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
+        # Find the relevant object directory and library name.
+        name=`$echo "$arg" | sed -e 's%^.*/%%' -e 's/\.la$//' -e 's/^lib//'`
+        dir=`$echo "$arg" | sed 's%/[^/]*$%%'`
+        if test "X$dir" = "X$arg"; then
+          dir="$objdir"
+        else
+          dir="$dir/$objdir"
+        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
-         fi
+        # This library was specified with -dlopen.
+        if test "$prev" = dlfiles; then
+          dlfiles="$dlfiles $arg"
+          if test -z "$dlname"; then
+            # If there is no dlname, we need to preload.
+            prev=dlprefiles
+          else
+            # We should not create a dependency on this library.
+            prev=
+            continue
+          fi
+        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
+        # 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
 
-         # 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"
+        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
+
+         # FIXME: 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 libdirs.
+                hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir"
+                libdir=
+              fi
+            fi
+
+            if test -n "$libdir"; then
+              flag=`eval \\$echo \"$hardcode_libdir_flag_spec\"`
+
+              compile_command="$compile_command $flag"
+              finalize_command="$finalize_command $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
+            finalize_command="$finalize_command -L$libdir -l$name"
+          fi
         else
           # Transform directly to old archives if we don't build new libraries.
-         test -z "$old_library" || linklib="$old_library"
-          compile_command="$compile_command $dir/$linklib"
-         finalize_command="$finalize_command $dir/$linklib"
+          if test -n "$pic_flag" && test -z "$old_library"; then
+            $echo "$progname: cannot find static library for \`$arg'" 1>&2
+            exit 1
+          fi
+
+         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
+           # Here we assume that "$hardcode_minus_L" != unsupported.
+           # This is valid on all known static and shared platforms.
+           compile_command="$compile_command -L$dir -l$name"
+           finalize_command="$finalize_command -L$dir -l$name"
+         fi
         fi
        continue
-       ;;
+        ;;
 
       *)
-        echo "$progname: unknown file suffix for \`$arg'" 1>&2
-       echo "$help" 1>&2
-       exit 1
-       ;;
+        $echo "$progname: unknown file suffix for \`$arg'" 1>&2
+        $echo "$help" 1>&2
+        exit 1
+        ;;
       esac
 
+      # Now actually substitute the argument into the commands.
       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
+      $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
+      $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
+      $echo "$progname: output file \`$output' must have no directory components" 1>&2
       exit 1
       ;;
 
-    *.a)
-      # Old archive.
-      libname=`echo "$output" | sed 's/\.a$//'`
-      build_old_libs=yes
-
-      if test -n "$install_libdir"; then
-        echo "$progname: warning: \`-rpath' is ignored while linking old-style libraries" 1>&2
-      fi
-
-      if test -n "$vinfo"; then
-       echo "$progname: warning: \`-version-info' is ignored while linking old-style libraries" 1>&2
-      fi
-      ;;
-
     *.la)
-      libname=`echo "$output" | sed 's/\.la$//'`
+      libname=`$echo "$output" | sed 's/\.la$//'`
 
       # All the library-specific variables (install_libdir is set above).
       library_names=
@@ -628,30 +788,44 @@ if test -z "$show_help"; then
       age=0
 
       if test -n "$objs"; then
-       echo "$progname: cannot build libtool library \`$output' from non-libtool objects:$objs" 2>&1
-       exit 1
+        $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
+        $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
+      if test -n "$dlfiles$dlprefiles"; then
+        $echo "$progname: warning: \`-dlopen' is ignored while creating libtool libraries" 1>&2
+        # Nullify the symbol file.
+        compile_command=`$echo "$compile_command" | sed "s% @SYMFILE@%%"`
+        finalize_command=`$echo "$finalize_command" | sed "s% @SYMFILE@%%"`
       fi
 
+      if test -z "$rpath"; then
+        $echo "$progname: you must specify an installation directory with \`-rpath'" 1>&2
+       $echo "$help" 1>&2
+        exit 1
+      fi
+
+      set dummy $rpath
+      if test $# -gt 2; then
+       $echo "$progname: warning: ignoring multiple \`-rpath's for a libtool library" 1>&2
+      fi
+      install_libdir="$2"
+
       # 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
+        $echo "$progname: too many parameters to \`-version-info'" 1>&2
+        $echo "$help" 1>&2
+        exit 1
       fi
 
       test -n "$2" && current="$2"
@@ -662,33 +836,33 @@ if test -z "$show_help"; then
       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
+        $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
+        $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
+        $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
+        $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
 
@@ -698,40 +872,40 @@ if test -z "$show_help"; then
       none) ;;
 
       linux)
-       version_vars="$version_vars major versuffix"
-       major=`expr $current - $age`
-       versuffix="$major.$age.$revision"
-       ;;
+        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
+        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"
-       ;;
+        # Make executables depend on our current version.
+        verstring="$verstring:${current}.0"
+        ;;
 
       sunos)
-       version_vars="$version_vars major versuffix"
-       major="$current"
-       versuffix="$current.$revision"
-       ;;
+        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
-       ;;
+        $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.
@@ -740,169 +914,316 @@ if test -z "$show_help"; then
         $run $rm $objdir/$libname.*
       else
         $show "$mkdir $objdir"
-       $run $mkdir $objdir || exit $?
+        $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
+         build_old_libs=yes
+        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
+        # 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 $objdir/$link"
-       done
+        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'`
+        # Use standard objects if they are PIC.
+        test -z "$pic_flag" && libobjs=`$echo "$libobjs " | sed -e 's/\.lo /.o /g' -e '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"
-         eval "$run $cmd" || exit $?
-       done
-       IFS="$save_ifs"
+        # 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 "$ln_s $realname $link"
-         $run $ln_s $realname $link || exit $?
-       done
+        # 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
+        # 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
+        $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
+        $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
+      if test -n "$dlfiles$dlprefiles"; then
+        $echo "$progname: warning: \`-dlopen' is ignored while creating objects" 1>&2
+        # Nullify the symbol file.
+        compile_command=`$echo "$compile_command" | sed "s% @SYMFILE@%%"`
+        finalize_command=`$echo "$finalize_command" | sed "s% @SYMFILE@%%"`
+      fi
+
+      if test -n "$rpath"; 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
+        $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/'`
-       ;;
+        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"
-       ;;
+        obj="$output"
+        ;;
       esac
 
       # Delete the old objects.
       $run $rm $obj $libobj
 
-      # Create the old-style object (skipping any convenience libraries).
-      # FIXME: skipping them is simplistic.  We should determine which members
-      # are actually needed to resolve symbols.
-      reload_objs="$objs"`echo "$libobjs " | sed 's/[^         ]*\.a //g; s/\.lo /.o /g; s/ $//g'`
+      # Create the old-style object.
+      reload_objs="$objs"`$echo "$libobjs " | sed -e 's/[^       ]*\.a //g' -e 's/\.lo /.o /g' -e 's/ $//g'`
 
       output="$obj"
-      cmds=`eval echo \"$reload_cmds\"`
+      cmds=`eval \\$echo \"$reload_cmds\"`
       IFS="${IFS=      }"; save_ifs="$IFS"; IFS=';'
       for cmd in $cmds; do
         IFS="$save_ifs"
         $show "$cmd"
-       eval "$run $cmd" || exit $?
+        $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 && 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\"`
+      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"
-          eval "$run $cmd" || exit $?
+          $run eval "$cmd" || exit $?
         done
         IFS="$save_ifs"
       else
         # Just create a symlink.
-        $show "$ln_s $obj $libobj"
-        $run $ln_s $obj $libobj || $run $cp_p $obj $libobj || exit 1
+        $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
+      if test -n "$vinfo"; then
+        $echo "$progname: warning: \`-version-info' 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
+      if test -n "$rpath"; then
+       # If the user specified any rpath flags, then add them.
+       for libdir in $rpath; do
+          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
+              flag=`eval \\$echo \"$hardcode_libdir_flag_spec\"`
+
+              compile_command="$compile_command $flag"
+              finalize_command="$finalize_command $flag"
+            fi
+          elif test "$hardcode_runpath_var" = yes; then
+            case "$perm_rpath " in
+            "* $libdir *") ;;
+            *) perm_rpath="$perm_rpath $libdir" ;;
+            esac
+          fi
+       done
+      fi
+
+      # Substitute the hardcoded libdirs into the compile commands.
+      if test -n "$hardcode_libdir_separator"; 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
 
-      if test -n "$libobjs"; then
-       # Transform all the library objects into standard objects.
-       compile_command=`echo "$compile_command " | sed 's/\.lo /.o /g; s/ $//'`
+      if test -n "$libobjs" && test "$build_old_libs" = yes; then
+        # Transform all the library objects into standard objects.
+        compile_command=`$echo "$compile_command " | sed -e 's/\.lo /.o /g' -e 's/ $//'`
+        finalize_command=`$echo "$finalize_command " | sed -e 's/\.lo /.o /g' -e 's/ $//'`
+      fi
+
+      if test "$export_dynamic" = yes && test -n "$global_symbol_pipe" && test -n "$NM"; then
+        # Add our own program objects to the preloaded list.
+        dlprefiles=`$echo "$objs$dlprefiles " | sed -e 's/\.lo /.o /g' -e 's/ $//'`
+
+        # Discover the nlist of each of the dlfiles.
+        dlsyms="$objdir/${output}S.c"
+        nlist="$objdir/${output}.nm"
+
+        $run rm -f "$nlist" "$nlist"T
+        for arg in $dlprefiles; do
+          $echo "extracting global symbols from \`$arg'"
+          $run eval "$NM $arg | $global_symbol_pipe >> '$nlist'"
+        done
+
+        # Parse the name list into a C file.
+        $echo "creating $dlsyms"
+        if test -z "$run"; then
+         # Try sorting and uniquifying the output.
+         if sort "$nlist" | uniq > "$nlist"T; then
+           mv -f "$nlist"T "$nlist"
+           wcout=`wc "$nlist" 2>/dev/null`
+           count=`$echo "$wcout" | sed 's/^[   ]*\([0-9][0-9]*\).*$/\1/'`
+           test "$wcout" = "$count" && count=-1
+         else
+           rm -f "$nlist"T
+           count=-1
+         fi
+
+          cat <<EOF > "$dlsyms"
+/* $dlsyms - symbol resolution table for \`$output' dlsym emulation. */
+/* Generated by $PROGRAM - GNU $PACKAGE $VERSION */
+
+/* Prevent the only kind of circular reference mistakes we can make. */
+#define dld_preloaded_symbol_count some_other_symbol
+#define dld_preloaded_symbols some_other_symbol
+
+/* External symbol declarations for the compiler. */
+EOF
+          if test -f "$nlist"; then
+            sed -e 's/^.* \(.*\)$/extern char \1;/' < "$nlist" >> "$dlsyms"
+          else
+            $echo "/* NONE */" >> "$dlsyms"
+          fi
+
+          cat <<EOF >> "$dlsyms"
+
+#undef dld_preloaded_symbol_count
+#undef dld_preloaded_symbols
+
+#if defined (__STDC__) && __STDC__
+# define __ptr_t void *
+#else
+# define __ptr_t char *
+#endif
+
+/* The number of symbols in dld_preloaded_symbols, -1 if unsorted. */
+int dld_preloaded_symbol_count = $count;
+
+/* The mapping between symbol names and symbols. */
+struct {
+  char *name;
+  __ptr_t address;
+}
+dld_preloaded_symbols[] =
+{
+EOF
+
+          if test -f "$nlist"; then
+            sed 's/^\(.*\) \(.*\)$/  {"\1", \&\2},/' < "$nlist" >> "$dlsyms"
+          fi
+
+          cat <<\EOF >> "$dlsyms"
+  {0},
+};
+EOF
+        fi
+        $run rm -f "$nlist" "$nlist"T
+
+        # Now compile the dynamic symbol file.
+        $show "(cd $objdir && $CC -c$no_builtin_flag \"${output}S.c\")"
+        $run eval '(cd $objdir && $CC -c$no_builtin_flag "${output}S.c")' || exit $?
+
+        # Transform the symbol file into the correct name.
+        compile_command=`$echo "$compile_command" | sed "s%@SYMFILE@%$objdir/${output}S.o%"`
+        finalize_command=`$echo "$finalize_command" | sed "s%@SYMFILE@%$objdir/${output}S.o%"`
+      elif test "$export_dynamic" != yes; then
+        test -n "$dlfiles$dlprefiles" && $echo "$progname: warning: \`-dlopen' and \`-dlpreopen' are ignored without \`-export-dynamic'" 1>&2
+      else
+        # We keep going just in case the user didn't refer to
+        # dld_preloaded_symbols.  The linker will fail if global_symbol_pipe
+        # really was required.
+        $echo "$progname: not configured to extract global symbols from dlpreopened files" 1>&2
+
+        # Nullify the symbol file.
+        compile_command=`$echo "$compile_command" | sed "s% @SYMFILE@%%"`
+        finalize_command=`$echo "$finalize_command" | sed "s% @SYMFILE@%%"`
       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
+        # 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 eval "$compile_command"
+        exit $?
       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'`
+      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 :
@@ -913,55 +1234,69 @@ if test -z "$show_help"; then
 
       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
+        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"
+        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"
+        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
-       ;;
+        # 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"
-      eval "$run $compile_command" || exit $?
+      $run eval "$compile_command" || exit $?
 
       # Now create the wrapper script.
-      echo "creating $output"
+      $echo "creating $output"
+
+      # Quote the finalize command for shipping.
+      finalize_command=`$echo "$finalize_command" | sed "$sed_quote_subst"`
 
       # 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
+        $rm $output
+        trap "$rm $output; exit 1" 1 2 15
 
-       cat > $output <<EOF
+        cat > $output <<EOF
 #! /bin/sh
 
 # $output - temporary wrapper script for $objdir/$output
-# Generated by $PROGRAM - GNU $PACKAGE $VERSION
+# Generated by ltmain.sh - GNU $PACKAGE $VERSION
 #
 # The $output program cannot be directly executed until all the libtool
 # libraries that it depends on are installed.
@@ -972,60 +1307,83 @@ if test -z "$show_help"; then
 # 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"
+  link_against_libtool_libs='$link_against_libtool_libs'
   finalize_command="$finalize_command"
 else
+  # When we are sourced in execute mode, \$file and \$echo are already set.
+  if test "\$libtool_execute_magic" = "$magic"; then :
+  else
+    echo='$echo'
+    file="\$0"
+  fi
+
   # Find the directory that this script lives in.
-  thisdir=\`echo \$0 | sed 's%/[^/]*$%%'\`
-  test "x\$thisdir" = "x\$0" && thisdir=.
+  thisdir=\`\$echo "\$file" | sed 's%/[^/]*$%%'\`
+  test "x\$thisdir" = "x\$file" && thisdir=.
 
   # Try to get the absolute directory name.
   absdir=\`cd "\$thisdir" && pwd\`
   test -n "\$absdir" && thisdir="\$absdir"
 
   progdir="\$thisdir/$objdir"
-  program="$output"
+  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
+  # If the \$file dir failed (maybe due to symlink), try a hardcoded dir.
+  oprogdir="\$progdir"
+  if test -f "\$progdir/\$program"; then :
+  else
+    thisdir='`pwd`'
+    progdir="\$thisdir/$objdir"
+  fi
 
-    # Export the path to the program.
-    PATH="\$progdir:\$PATH"
-    export PATH
+  if test -f "\$progdir/\$program"; then
 EOF
 
-       # Export our shlibpath_var if we have one.
-       if test -n "$shlibpath_var" && test -n "$rpath"; then
-         cat >> $output <<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="$rpath\$$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
+        fi
 
         cat >> $output <<EOF
+    if test "\$libtool_execute_magic" != "$magic"; then
+      # Run the actual program with our arguments.
+      args=
+      for arg
+      do
+        # Quote arguments (to preserve shell metacharacters).
+       sed_quote_subst='$sed_quote_subst'
+       arg=\`\$echo "\$arg" | sed "\$sed_quote_subst"\`
+        args="\$args \\"\$arg\\""
+      done
 
-    eval "exec \$program \$args"
+      # Export the path to the program.
+      PATH="\$progdir:\$PATH"
+      export PATH
 
-    echo "\$0: cannot exec \$program \$args"
-    exit 1
+      eval "exec \$program \$args"
+
+      \$echo "\$0: cannot exec \$program \$args"
+      exit 1
+    fi
   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
+    \$echo "\$0: error: neither \$oprogdir/\$program nor \$progdir/\$program exists" 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
+        chmod +x $output
       fi
       exit 0
       ;;
@@ -1037,60 +1395,26 @@ EOF
       # Now set the variables for building old libraries.
       oldlib="$objdir/$libname.a"
 
-      # Transform .lo files to .o (skipping convenience libraries).
-      # FIXME: skipping them is simplistic.  We should determine which members
-      # are actually needed to resolve symbols.
-      oldobjs="$objs"`echo "$libobjs " | sed 's/[^     ]*\.a //g; s/\.lo /.o /g; s/ $//g'`
+      # Transform .lo files to .o files.
+      oldobjs="$objs"`$echo "$libobjs " | sed -e 's/[^   ]*\.a //g' -e 's/\.lo /.o /g' -e 's/ $//g'`
 
       if test -d "$objdir"; then
-       $show "$rm $oldlib"
-       $run $rm $oldlib
+        $show "$rm $oldlib"
+        $run $rm $oldlib
       else
-       $show "$mkdir $objdir"
-       $run $mkdir $objdir
+        $show "$mkdir $objdir"
+        $run $mkdir $objdir
       fi
 
       # Do each command in the archive commands.
-      cmds=`eval echo \"$old_archive_cmds\"`
+      cmds=`eval \\$echo \"$old_archive_cmds\"`
       IFS="${IFS=      }"; save_ifs="$IFS"; IFS=';'
       for cmd in $cmds; do
         IFS="$save_ifs"
         $show "$cmd"
-       eval "$run $cmd" || exit $?
+        $run eval "$cmd" || exit $?
       done
       IFS="$save_ifs"
-
-      case "$output" in
-      *.a)
-       # Just move into place if there were any non-libtool objects.
-       if test -n "$objs"; then
-         $show "$mv $oldlib $output"
-         $run $mv $oldlib $output
-
-       elif test -z "$pic_flag" || test "$build_libtool_libs" != yes; then
-         # Just symlink if libtool objects are the same.
-         $show "$rm $output"
-         $run $rm $output
-         $show "$ln_s $oldlib $output"
-         $run $ln_s $oldlib $output
-
-       else
-         # Create an archive of libtool objects.
-         oldlib="$output"
-         oldobjs="$libobjs"
-
-         # 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"
-           eval "$run $cmd" || exit $?
-         done
-         IFS="$save_ifs"
-       fi
-       ;;
-      esac
     fi
 
     # Now create the libtool archive.
@@ -1099,13 +1423,16 @@ EOF
       old_library=
       test "$build_old_libs" = yes && old_library="$libname.a"
 
-      echo "creating $output"
+      $echo "creating $output"
 
       # Only create the output if not a dry run.
       if test -z "$run"; then
-       cat > $output <<EOF
+        cat > $output <<EOF
 # $output - a libtool library file
-# Generated by $PROGRAM - GNU $PACKAGE $VERSION
+# Generated by ltmain.sh - GNU $PACKAGE $VERSION
+
+# The name that we can dlopen(3).
+dlname='$dlname'
 
 # Names of this library.
 library_names='$library_names'
@@ -1113,9 +1440,6 @@ library_names='$library_names'
 # The name of the static archive.
 old_library='$old_library'
 
-# The name that we can dlopen(3).
-dlname='$dlname'
-
 # Version information for $libname.
 current=$current
 age=$age
@@ -1125,6 +1449,11 @@ revision=$revision
 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
@@ -1135,7 +1464,14 @@ EOF
     progname="$progname: install"
 
     # The first argument is the name of the installation program.
-    install_prog="$nonopt"
+    # Aesthetically quote it.
+    arg=`$echo "$nonopt" | sed "$sed_quote_subst"`
+    case "$arg" in
+    *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \      ]*|*]*)
+      arg="\"$arg\""
+      ;;
+    esac
+    install_prog="$arg"
 
     # We need to accept at least all the BSD install flags.
     dest=
@@ -1149,8 +1485,8 @@ EOF
     do
       if test -n "$dest"; then
         files="$files $dest"
-       dest="$arg"
-       continue
+        dest="$arg"
+        continue
       fi
 
       case "$arg" in
@@ -1160,64 +1496,95 @@ EOF
       -m) prev="-m" ;;
       -o) prev="-o" ;;
       -s)
-       stripme=" -s"
-       continue
-       ;;
+        stripme=" -s"
+        continue
+        ;;
       -*) ;;
 
       *)
-       # If the previous option needed an argument, then skip it.
-       if test -n "$prev"; then
-         prev=
-       else
-         dest="$arg"
-         continue
-       fi
+        # If the previous option needed an argument, then skip it.
+        if test -n "$prev"; then
+          prev=
+        else
+          dest="$arg"
+          continue
+        fi
         ;;
       esac
+
+      # Aesthetically quote the argument.
+      arg=`$echo "$arg" | sed "$sed_quote_subst"`
+      case "$arg" in
+      *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \    ]*|*]*)
+       arg="\"$arg\""
+       ;;
+      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
+      $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
+      $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
+        $echo "$progname: no file or destination specified" 1>&2
       else
-       echo "$progname: you must specify a destination" 1>&2
+        $echo "$progname: you must specify a destination" 1>&2
       fi
-      echo "$help" 1>&2
+      $echo "$help" 1>&2
       exit 1
     fi
 
     # Strip any trailing slash from the destination.
-    dest=`echo "$dest" | sed 's%/$%%'`
+    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%/[^/]*$%%'`
+      destdir=`$echo "$dest" | sed 's%/[^/]*$%%'`
+      test "X$destdir" = "X$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
     /*) ;;
     *)
-      echo "$progname: $destdir must be an absolute directory name" 1>&2
-      echo "$help" 1>&2
-      exit 1
+      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
 
+    # This variable tells wrapper scripts just to set variables rather
+    # than running their programs.
+    libtool_install_magic="$magic"
+
     staticlibs=
     future_libdirs=
     current_libdirs=
@@ -1226,69 +1593,69 @@ EOF
       # Do each installation.
       case "$file" in
       *.a)
-       # Do the static libraries later.
-       staticlibs="$staticlibs $file"
-       ;;
+        # 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
+        # Check to see that this really is a libtool archive.
+        if egrep "^# Generated by ltmain.sh" $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
 
-       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"
-         eval "$run $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
+        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 "X$destdir" = "X$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
 
-         if test -n "$1"; then
-           # Delete the old symlinks.
+        dir="`$echo "$file" | sed 's%/[^/]*$%%'`/"
+        test "X$dir" = "X$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
@@ -1297,146 +1664,182 @@ EOF
             $show "$rmcmd"
             $run $rmcmd
 
-           # ... and create new ones.
-           for linkname
-           do
-             test "X$dlname" = "X$linkname" && dlname=
-             $show "$ln_s $realname $destdir/$linkname"
-             $run $ln_s $realname $destdir/$linkname
-           done
-         fi
+            # ... 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
 
-         if test -n "$dlname"; then
-           # Install the dynamically-loadable library.
-           $show "$install_prog $dir/$dlname $destdir/$dlname"
-           eval "$run $install_prog $dir/$dlname $destdir/$dlname" || exit $?
-         fi
+        # Install the pseudo-library for information purposes.
+        name=`$echo "$file" | sed 's%^.*/%%'`
+        $show "$install_prog $file $destdir/$name"
+        $run eval "$install_prog $file $destdir/$name" || exit $?
 
-         # 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"
-           eval "$run $cmd" || exit $?
-         done
-         IFS="$save_ifs"
-       fi
+        # Maybe install the static library, too.
+        test -n "$old_library" && staticlibs="$staticlibs $dir/$old_library"
+        ;;
 
-       # 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 $?
+      *.lo)
+        # Install (i.e. copy) a libtool object.
 
-       # Maybe install the static library, too.
-       test -n "$old_library" && staticlibs="$staticlibs $dir/$old_library"
-       ;;
+        # 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
 
-      *)
-       # 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=
+        # 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 eval "$install_prog $file $destfile" || exit $?
+        fi
 
-         # If there is no directory component, then add one.
-         case "$file" in
-         */*) . $file ;;
-         *) . ./$file ;;
-         esac
+        # 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/'`
 
-         # 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
+          $show "$install_prog $staticobj $staticdest"
+          $run eval "$install_prog \$staticobj \$staticdest" || exit $?
+        fi
+        exit 0
+        ;;
 
-         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_direct" != no && test "$hardcode_minus_L" != no && test "$hardcode_shlibpath_var" != no; then
-           if test "$finalize" = no; then
-             echo "$progname: warning: cannot relink \`$file' on behalf of your buggy system linker" 1>&2
-           else
-             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
-           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
+      *)
+        # Do a test to see if this is really a libtool program.
+        if egrep '^# Generated by ltmain.sh' $file >/dev/null 2>&1; then
+          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 eval "$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.
+           file=`$echo "$file" | sed "s%\([^/]*\)$%$objdir/\1%"`
+          fi
+        fi
 
-       $show "$install_prog$stripme $file $dest"
-       $run $install_prog$stripme $file $dest || exit $?
-       ;;
+        $show "$install_prog$stripme $file $dest"
+        $run eval "$install_prog\$stripme \$file \$dest" || exit $?
+        ;;
       esac
     done
 
     for file in $staticlibs; do
-      name=`echo "$file" | sed 's%^.*/%%'`
+      name=`$echo "$file" | sed 's%^.*/%%'`
 
       # Set up the ranlib parameters.
       oldlib="$destdir/$name"
 
       $show "$install_prog $file $oldlib"
-      $run $install_prog $file $oldlib || exit $?
+      $run eval "$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
+        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\"`
+      cmds=`eval \\$echo \"$old_postinstall_cmds\"`
       IFS="${IFS=      }"; save_ifs="$IFS"; IFS=';'
       for cmd in $cmds; do
         IFS="$save_ifs"
         $show "$cmd"
-        eval "$run $cmd" || exit $?
+        $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
+      $echo "$progname: warning: remember to run \`$progname --finish$future_libdirs'" 1>&2
     fi
 
     if test -n "$current_libdirs"; then
@@ -1449,48 +1852,6 @@ EOF
     exit 0
     ;;
 
-  # libtool dlname mode
-  dlname)
-    progname="$progname: dlname"
-    ltlibs="$nonopt"
-    for lib
-    do
-      ltlibs="$ltlibs $lib"
-    done
-
-    # Now check to make sure each one is a valid libtool library.
-    status=0
-    for lib in $ltlibs; do
-      dlname=
-      libdir=
-
-      # 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"
-      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"
@@ -1499,30 +1860,160 @@ EOF
     if test -n "$finish_cmds" && test -n "$libdirs"; then
       for dir
       do
-       libdirs="$libdirs $dir"
+        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"
-         eval "$run $cmd"
-       done
-       IFS="$save_ifs"
+        # 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:"
+    $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"
+      $echo "   - add LIBDIR to their \`$shlibpath_var' environment variable"
     fi
-    echo "   - use the \`-LLIBDIR' linker flag"
+    $echo "   - use the \`-LLIBDIR' linker flag"
     exit 0
     ;;
 
+  # libtool execute mode
+  execute)
+    progname="$progname: execute"
+
+    # The first argument is the command name.
+    cmd="$nonopt"
+    if test -z "$cmd"; then
+      $echo "$progname: you must specify a COMMAND" 1>&2
+      $echo "$help"
+      exit 1
+    fi
+
+    # Handle -dlopen flags immediately.
+    for file in $execute_dlfiles; do
+      if test -f "$file"; then :
+      else
+       $echo "$progname: \`$file' is not a file" 1>&2
+       $echo "$help" 1>&2
+       exit 1
+      fi
+
+      dir=
+      case "$file" in
+      *.la)
+        # Check to see that this really is a libtool archive.
+        if egrep "^# Generated by ltmain.sh" $file >/dev/null 2>&1; then :
+        else
+          $echo "$progname: \`$lib' is not a valid libtool archive" 1>&2
+          $echo "$help" 1>&2
+          exit 1
+        fi
+
+       # Read the libtool library.
+       dlname=
+       library_names=
+
+        # If there is no directory component, then add one.
+       case "$file" in
+       */*) . $file ;;
+        *) . ./$file ;;
+       esac
+
+       # Skip this library if it cannot be dlopened.
+       if test -z "$dlname"; then
+         # Warn if it was a shared library.
+         test -n "$library_names" && $echo "$progname: warning: \`$file' was not linked with \`-export-dynamic'"
+         continue
+       fi
+
+       dir=`$echo "$file" | sed 's%/[^/]*$%%'`
+       test "X$dir" = "X$file" && dir=.
+
+       if test -f "$dir/$objdir/$dlname"; then
+         dir="$dir/$objdir"
+       else
+         $echo "$progname: cannot find \`$dlname' in \`$dir' or \`$dir/$objdir'" 1>&2
+         exit 1
+       fi
+       ;;
+
+      *.lo)
+       # Just add the directory containing the .lo file.
+       dir=`$echo "$file" | sed 's%/[^/]*$%%'`
+       test "X$dir" = "X$file" && dir=.
+       ;;
+
+      *)
+       $echo "$progname: warning \`-dlopen' is ignored for non-libtool libraries and objects" 1>&2
+        continue
+       ;;
+      esac
+
+      # Get the absolute pathname.
+      absdir=`cd "$dir" && pwd`
+      test -n "$absdir" && dir="$absdir"
+
+      # Now add the directory to shlibpath_var.
+      if eval "test -z \"\$$shlibpath_var\""; then
+       eval "$shlibpath_var=\"\$dir\""
+      else
+       eval "$shlibpath_var=\"\$dir:\$$shlibpath_var\""
+      fi
+    done
+
+    # This variable tells wrapper scripts just to set shlibpath_var
+    # rather than running their programs.
+    libtool_execute_magic="$magic"
+
+    # Check if any of the arguments is a wrapper script.
+    args=
+    for file
+    do
+      case "$file" in
+      -*) ;;
+      *)
+       if egrep '^# Generated by ltmain.sh' $file >/dev/null 2>&1; then
+         # If there is no directory component, then add one.
+         case "$file" in
+         */*) . $file ;;
+         *) . ./$file ;;
+         esac
+
+         # Transform arg to wrapped name.
+         file="$progdir/$program"
+       fi
+        ;;
+      esac
+      # Quote arguments (to preserve shell metacharacters).
+      file=`$echo "$file" | sed "$sed_quote_subst"`
+      args="$args \"$file\""
+    done
+
+    if test -z "$run"; then
+      # Export the shlibpath_var.
+      eval "export $shlibpath_var"
+
+      # Now actually exec the command.
+      eval "exec \$cmd$args"
+
+      $echo "$progname: cannot exec \$cmd$args"
+      exit 1
+    else
+      # Display what would be done.
+      eval "\$echo \"\$shlibpath_var=\$$shlibpath_var\""
+      $echo "export $shlibpath_var"
+      $echo "$cmd$args"
+      exit 0
+    fi
+    ;;
+
   # libtool uninstall mode
   uninstall)
     progname="$progname: uninstall"
@@ -1538,35 +2029,42 @@ EOF
     done
 
     if test -z "$rm"; then
-      echo "$progname: you must specify an RM program" 1>&2
-      echo "$help" 1>&2
+      $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%^.*/%%'`
+      dir=`$echo "$file" | sed -e 's%/[^/]*$%%'`
+      test "X$dir" = "X$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
-       ;;
+        # Possibly a libtool archive, so verify it.
+        if egrep "^# Generated by ltmain.sh" $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"
@@ -1575,21 +2073,21 @@ EOF
     exit 0
     ;;
 
-  NONE)
-    echo "$progname: you must specify a MODE" 1>&2
-    echo "$generic_help" 1>&2
+  "")
+    $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
+  $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
+"") cat <<EOF
 Usage: $progname [OPTION]... [MODE-ARG]...
 
 Provide generalized library-building support services.
@@ -1599,12 +2097,14 @@ Provide generalized library-building support services.
     --finish          same as \`--mode=finish'
     --help            display this help message and exit
     --mode=MODE       use operation mode MODE [default=inferred from MODE-ARGS]
+    --quiet           same as \`--silent'
+    --silent          don't print informational messages
     --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
+      execute         automatically set library path, then run a program
       finish          complete the installation of libtool libraries
       install         install libraries or executables
       link            create a library or an executable
@@ -1630,16 +2130,24 @@ library object suffix, \`.lo'.
 EOF
   ;;
 
-dlname)
+execute)
   cat <<EOF
-Usage: $progname [OPTION]... --mode=dlname LTLIBRARY [LTLIBRARY]...
+Usage: $progname [OPTION]... --mode=execute COMMAND [ARGS]...
+
+Automatically set library path, then run a program.
+
+This mode accepts the following additional options:
+
+  -dlopen FILE      add the directory containing FILE to the library path
 
-Print filenames to use to \`dlopen' libtool libraries.
+This mode sets the library path environment variable according to \`-dlopen'
+flags.
 
-Each LTLIBRARY is the name of a dynamically loadable libtool library (one that
-was linked using the \`-export-dynamic' option).
+If any of the ARGS are libtool executable wrappers, then they are translated
+into their corresponding uninstalled binary, and any of their required library
+directories are added to the library path.
 
-The names to use are printed to standard output, one per line.
+Then, COMMAND is executed, with ARGS as arguments.
 EOF
   ;;
 
@@ -1682,16 +2190,18 @@ a program from several object files.
 
 The following components of LINK-COMMAND are treated specially:
 
-  -export-dynamic   allow the output file to be loaded with dlopen(3)
+  -all-static       do not do any dynamic linking at all
+  -allow-undefined  allow a libtool library to reference undefined symbols
+  -dlopen FILE      \`-dlpreopen' FILE if it cannot be dlopened at runtime
+  -dlpreopen FILE   link in FILE and add its symbols to dld_preloaded_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
-  -no-whole-archive turn off \`-whole-archive'
   -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
+  -static           do not do any dynamic linking of libtool libraries
   -version-info CURRENT[:REVISION[:AGE]]
-                   specify library version info [each variable defaults to 0]
-  -whole-archive    use all members from subsequent \`.a' files
+                    specify library version info [each variable defaults to 0]
 
 All other options (arguments beginning with \`-') are ignored.
 
@@ -1703,8 +2213,7 @@ 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 only libtool objects are specified, then the output file
-may be used in the creation of other libtool archives.
+and \`ranlib'.
 
 If OUTPUT-FILE ends in \`.lo' or \`.o', then a reloadable object file is
 created, otherwise an executable program is created.
@@ -1727,18 +2236,14 @@ EOF
   ;;
 
 *)
-  echo "$progname: invalid operation mode \`$mode'" 1>&2
-  echo "$help" 1>&2
+  $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
+$echo
+$echo "Try \`$progname --help' for more information about other modes."
 
 exit 0