Skip to content
Snippets Groups Projects
ltmain.sh 158 KiB
Newer Older
jason's avatar
jason committed
# ltmain.sh - Provide generalized library-building support services.
law's avatar
#  
law committed
# NOTE: Changing this file will not affect anything until you rerun ltconfig.
#
# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001
# Free Software Foundation, Inc.
jason's avatar
jason committed
# Originally by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996
jason's avatar
jason committed
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
# General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
jason's avatar
jason committed
#
# As a special exception to the GNU General Public License, if you
# distribute this file as part of a program that contains a
# configuration script generated by Autoconf, you may include it under
# the same distribution terms that you use for the rest of that program.

# Check that we have a working $echo.
if test "X$1" = X--no-reexec; then
  # Discard the --no-reexec flag, and continue.
  shift
elif test "X$1" = X--fallback-echo; then
jason's avatar
jason committed
  # Avoid inline document here, it may be left over
  :
elif test "X`($echo '\t') 2>/dev/null`" = 'X\t'; then
  # Yippee, $echo works!
  :
else
  # Restart under the correct shell, and then maybe $echo will work.
  exec $SHELL "$0" --no-reexec ${1+"$@"}
fi

jason's avatar
jason committed
if test "X$1" = X--fallback-echo; then
  # used as fallback echo
  shift
  cat <<EOF
$*
EOF
  exit 0
fi

jason's avatar
jason committed
# The name of this program.
law's avatar
#  
law committed
progname=`$echo "$0" | sed 's%^.*/%%'`
modename="$progname"
jason's avatar
jason committed

# Constants.
PROGRAM=ltmain.sh
PACKAGE=libtool
aoliva's avatar
aoliva committed
VERSION=1.4a-GCC3.0
TIMESTAMP=" (1.641.2.256 2001/05/28 20:09:07 with GCC-local changes)"
jason's avatar
jason committed

default_mode=
help="Try \`$progname --help' for more information."
magic="%%%MAGIC variable%%%"
mkdir="mkdir"
mv="mv -f"
rm="rm -f"

law's avatar
#  
law committed
# Sed substitution that helps us do robust quoting.  It backslashifies
# metacharacters that are still active within double-quoted strings.
Xsed='sed -e 1s/^X//'
law's avatar
#  
law committed
sed_quote_subst='s/\([\\`\\"$\\\\]\)/\\\1/g'
SP2NL='tr \040 \012'
jason's avatar
jason committed
NL2SP='tr \015\012 \040\040'
law's avatar
#  
law committed

# NLS nuisances.
# Only set LANG and LC_ALL to C if already set.
# These must not be set unconditionally because not all systems understand
# e.g. LANG=C (notably SCO).
# We save the old values to restore during execute mode.
if test "${LC_ALL+set}" = set; then
  save_LC_ALL="$LC_ALL"; LC_ALL=C; export LC_ALL
fi
if test "${LANG+set}" = set; then
  save_LANG="$LANG"; LANG=C; export LANG
fi
law's avatar
#  
law committed

jason's avatar
jason committed
if test "$LTCONFIG_VERSION" != "$VERSION"; then
law's avatar
#  
law committed
  echo "$modename: ltconfig version \`$LTCONFIG_VERSION' does not match $PROGRAM version \`$VERSION'" 1>&2
jason's avatar
jason committed
  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
law's avatar
#  
law committed
  echo "$modename: not configured to build any kind of library" 1>&2
jason's avatar
jason committed
  echo "Fatal configuration error.  See the $PACKAGE docs for more information." 1>&2
  exit 1
fi

# Global variables.
mode=$default_mode
nonopt=
prev=
prevopt=
run=
law's avatar
#  
law committed
show="$echo"
jason's avatar
jason committed
show_help=
law's avatar
#  
law committed
execute_dlfiles=
lo2o="s/\\.lo\$/.${objext}/"
jason's avatar
jason committed
o2lo="s/\\.${objext}\$/.lo/"
jason's avatar
jason committed

# Parse our command line options once, thoroughly.
while test $# -gt 0
do
  arg="$1"
  shift

law's avatar
#  
law committed
  -*=*) optarg=`$echo "X$arg" | $Xsed -e 's/[-_a-zA-Z0-9]*=//'` ;;
jason's avatar
jason committed
  *) optarg= ;;
  esac

  # If the previous option needs an argument, assign it.
  if test -n "$prev"; then
law's avatar
#  
law committed
    execute_dlfiles)
      execute_dlfiles="$execute_dlfiles $arg"
law's avatar
#  
law committed
      ;;
bkoz's avatar
 
bkoz committed
    tag)
      tagname="$arg"

      # Check whether tagname contains only valid characters
bkoz's avatar
 
bkoz committed
      *[!-_A-Za-z0-9,/]*)
	echo "$progname: invalid tag name: $tagname" 1>&2
	exit 1
        ;;
      esac

      case $tagname in
      CC)
	# Don't test for the "default" C tag, as we know, it's there, but
	# not specially marked.
	taglist="$taglist $tagname"
	;;
      *)
        if grep "^### BEGIN LIBTOOL TAG CONFIG: $tagname$" < "$0" > /dev/null; then
          taglist="$taglist $tagname"
	  # Evaluate the configuration.
	  eval "`sed -n -e '/^### BEGIN LIBTOOL TAG CONFIG: '$tagname'$/,/^### END LIBTOOL TAG CONFIG: '$tagname'$/p' < $0`"
        else
	  echo "$progname: ignoring unknown tag $tagname" 1>&2
        fi
        ;;
      esac
bkoz's avatar
 
bkoz committed
      ;;
law's avatar
#  
law committed
    *)
      eval "$prev=\$arg"
      ;;
    esac

jason's avatar
jason committed
    prev=
    prevopt=
    continue
  fi

  # Have we seen a non-optional argument yet?
jason's avatar
jason committed
  --help)
    show_help=yes
    ;;

  --version)
    echo "$PROGRAM (GNU $PACKAGE) $VERSION$TIMESTAMP"
jason's avatar
jason committed
    exit 0
    ;;

law's avatar
#  
law committed
  --config)
bkoz's avatar
 
bkoz committed
    sed -n -e '/^### BEGIN LIBTOOL CONFIG/,/^### END LIBTOOL CONFIG/p' < "$0"
    # Now print the configurations for the tags.
    for tagname in $taglist; do
      sed -n -e "/^### BEGIN LIBTOOL TAG CONFIG: $tagname$/,/^### END LIBTOOL TAG CONFIG: $tagname$/p" < "$0"
    done
law's avatar
#  
law committed
    exit 0
    ;;

  --debug)
    echo "$progname: enabling shell trace mode"
    set -x
    ;;

jason's avatar
jason committed
  --dry-run | -n)
    run=:
    ;;

  --features)
    echo "host: $host"
    if test "$build_libtool_libs" = yes; then
      echo "enable shared libraries"
    else
      echo "disable shared libraries"
    fi
    if test "$build_old_libs" = yes; then
      echo "enable static libraries"
    else
      echo "disable static libraries"
    fi
    exit 0
    ;;

  --finish) mode="finish" ;;

  --mode) prevopt="--mode" prev=mode ;;
  --mode=*) mode="$optarg" ;;

law's avatar
#  
law committed
  --quiet | --silent)
    show=:
    ;;

bkoz's avatar
 
bkoz committed
  --tag) prevopt="--tag" prev=tag ;;
  --tag=*)
    set tag "$optarg" ${1+"$@"}
    shift
    prev=tag
    ;;

law's avatar
#  
law committed
  -dlopen)
    prevopt="-dlopen"
    prev=execute_dlfiles
    ;;

jason's avatar
jason committed
  -*)
law's avatar
#  
law committed
    $echo "$modename: unrecognized option \`$arg'" 1>&2
    $echo "$help" 1>&2
jason's avatar
jason committed
    exit 1
    ;;

  *)
    nonopt="$arg"
    break
    ;;
  esac
done

if test -n "$prevopt"; then
law's avatar
#  
law committed
  $echo "$modename: option \`$prevopt' requires an argument" 1>&2
  $echo "$help" 1>&2
jason's avatar
jason committed
  exit 1
fi

# If this variable is set in any of the actions, the command in it
# will be execed at the end.  This prevents here-documents from being
# left over by shells.
exec_cmd=

jason's avatar
jason committed
if test -z "$show_help"; then

  # Infer the operation mode.
  if test -z "$mode"; then
law's avatar
#  
law committed
    *cc | *++ | gcc* | *-gcc*)
jason's avatar
jason committed
      mode=link
      for arg
      do
	-c)
	   mode=compile
	   break
	   ;;
	esac
jason's avatar
jason committed
      done
      ;;
    *db | *dbx | *strace | *truss)
law's avatar
#  
law committed
      mode=execute
      ;;
    *install*|cp|mv)
jason's avatar
jason committed
      mode=install
      ;;
    *rm)
      mode=uninstall
      ;;
    *)
law's avatar
#  
law committed
      # If we have no mode, but dlfiles were specified, then do execute mode.
      test -n "$execute_dlfiles" && mode=execute

jason's avatar
jason committed
      # Just use the default operation mode.
      if test -z "$mode"; then
	if test -n "$nonopt"; then
	  $echo "$modename: warning: cannot infer operation mode from \`$nonopt'" 1>&2
	else
	  $echo "$modename: warning: cannot infer operation mode without MODE-ARGS" 1>&2
	fi
jason's avatar
jason committed
      fi
      ;;
    esac
  fi

law's avatar
#  
law committed
  # Only execute mode is allowed to have -dlopen flags.
  if test -n "$execute_dlfiles" && test "$mode" != execute; then
    $echo "$modename: unrecognized option \`-dlopen'" 1>&2
    $echo "$help" 1>&2
    exit 1
  fi

jason's avatar
jason committed
  # Change the help message to a mode-specific one.
  generic_help="$help"
law's avatar
#  
law committed
  help="Try \`$modename --help --mode=$mode' for more information."
jason's avatar
jason committed

  # These modes are in order of execution frequency so that they run quickly.
jason's avatar
jason committed
  # libtool compile mode
  compile)
law's avatar
#  
law committed
    modename="$modename: compile"
jason's avatar
jason committed
    # Get the compilation command and the source file.
law's avatar
#  
law committed
    base_compile=
bkoz's avatar
 
bkoz committed
    prev=
jason's avatar
jason committed
    lastarg=
law's avatar
#  
law committed
    srcfile="$nonopt"
    suppress_output=
jason's avatar
jason committed

    user_target=no
jason's avatar
jason committed
    for arg
    do
bkoz's avatar
 
bkoz committed
      "") ;;
      xcompiler)
	# Aesthetically quote the previous argument.
	prev=
	lastarg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"`

bkoz's avatar
 
bkoz committed
	# Double-quote args containing other shell metacharacters.
	# Many Bourne shells cannot handle close brackets correctly
	# in scan sets, so we specify it separately.
	*[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \	]*|*]*|"")
	  arg="\"$arg\""
	  ;;
	esac

	# Add the previous argument to base_compile.
	if test -z "$base_compile"; then
	  base_compile="$lastarg"
	else
	  base_compile="$base_compile $lastarg"
	fi
	continue
	;;
      esac

law's avatar
#  
law committed
      # Accept any command-line options.
law's avatar
#  
law committed
      -o)
	if test "$user_target" != "no"; then
	  $echo "$modename: you cannot specify \`-o' more than once" 1>&2
	  exit 1
	fi
	user_target=next
law's avatar
#  
law committed
	;;

      -static)
	build_old_libs=yes
	continue
	;;
bkoz's avatar
 
bkoz committed

      -prefer-pic)
	pic_mode=yes
	continue
	;;

      -prefer-non-pic)
	pic_mode=no
	continue
	;;

      -Xcompiler)
	prev=xcompiler
	continue
	;;

      -Wc,*)
	args=`$echo "X$arg" | $Xsed -e "s/^-Wc,//"`
	lastarg=
	IFS="${IFS= 	}"; save_ifs="$IFS"; IFS=','
	for arg in $args; do
	  IFS="$save_ifs"

	  # Double-quote args containing other shell metacharacters.
	  # Many Bourne shells cannot handle close brackets correctly
	  # in scan sets, so we specify it separately.
bkoz's avatar
 
bkoz committed
	    *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \	]*|*]*|"")
	    arg="\"$arg\""
	    ;;
	  esac
	  lastarg="$lastarg $arg"
	done
	IFS="$save_ifs"
	lastarg=`$echo "X$lastarg" | $Xsed -e "s/^ //"`

	# Add the arguments to base_compile.
	if test -z "$base_compile"; then
	  base_compile="$lastarg"
	else
	  base_compile="$base_compile $lastarg"
	fi
	continue
	;;
jason's avatar
jason committed
      esac

      next)
	# The next one is the -o target name
	user_target=yes
	continue
	;;
      yes)
	# We got the output file
	user_target=set
	libobj="$arg"
	continue
	;;
      esac

law's avatar
#  
law committed
      # Accept the current argument as the source file.
      lastarg="$srcfile"
      srcfile="$arg"

      # Aesthetically quote the previous argument.

      # Backslashify any backslashes, double quotes, and dollar signs.
      # These are the only characters that are still specially
      # interpreted inside of double-quoted scrings.
      lastarg=`$echo "X$lastarg" | $Xsed -e "$sed_quote_subst"`

      # Double-quote args containing other shell metacharacters.
bkoz's avatar
 
bkoz committed
      # Many Bourne shells cannot handle close brackets correctly
      # in scan sets, so we specify it separately.
bkoz's avatar
 
bkoz committed
      *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \	]*|*]*|"")
law's avatar
#  
law committed
	lastarg="\"$lastarg\""
	;;
      esac

      # Add the previous argument to base_compile.
      if test -z "$base_compile"; then
	base_compile="$lastarg"
      else
	base_compile="$base_compile $lastarg"
      fi
jason's avatar
jason committed
    done

    set)
      ;;
    no)
      # Get the name of the library object.
      libobj=`$echo "X$srcfile" | $Xsed -e 's%^.*/%%'`
      ;;
    *)
      $echo "$modename: you must specify a target with \`-o'" 1>&2
      exit 1
      ;;
    esac
jason's avatar
jason committed

    # Recognize several different file suffixes.
    # If the user specifies -o file.o, it is replaced with file.lo
    xform='[cCFSfmso]'
law's avatar
#  
law committed
    *.ada) xform=ada ;;
    *.adb) xform=adb ;;
    *.ads) xform=ads ;;
    *.asm) xform=asm ;;
    *.c++) xform=c++ ;;
jason's avatar
jason committed
    *.cc) xform=cc ;;
bkoz's avatar
 
bkoz committed
    *.class) xform=class ;;
jason's avatar
jason committed
    *.cpp) xform=cpp ;;
    *.cxx) xform=cxx ;;
    *.f90) xform=f90 ;;
law's avatar
#  
law committed
    *.for) xform=for ;;
bkoz's avatar
 
bkoz committed
    *.java) xform=java ;;
jason's avatar
jason committed
    esac

law's avatar
#  
law committed
    libobj=`$echo "X$libobj" | $Xsed -e "s/\.$xform$/.lo/"`
jason's avatar
jason committed

    *.lo) obj=`$echo "X$libobj" | $Xsed -e "$lo2o"` ;;
jason's avatar
jason committed
    *)
      $echo "$modename: cannot determine name of library object from \`$libobj'" 1>&2
jason's avatar
jason committed
      exit 1
      ;;
    esac

bkoz's avatar
 
bkoz committed
    # Infer tagged configuration to use if any are available and
    # if one wasn't chosen via the "--tag" command line option.
    # Only attempt this if the compiler in the base compile
    # command doesn't match the default compiler.
    if test -n "$available_tags" && test -z "$tagname"; then
      case $base_compile in
      "$CC "*) ;;
      # Blanks in the command may have been stripped by the calling shell,
      # but not from the CC environment variable when ltconfig was run.
bkoz's avatar
 
bkoz committed
      *)
        for z in $available_tags; do
          if grep "^### BEGIN LIBTOOL TAG CONFIG: $z$" < "$0" > /dev/null; then
	    # Evaluate the configuration.
	    eval "`sed -n -e '/^### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^### END LIBTOOL TAG CONFIG: '$z'$/p' < $0`"
            case $base_compile in
	    "$CC "*)
              # The compiler in the base compile command matches
              # the one in the tagged configuration.
              # Assume this is the tagged configuration we want.
              tagname=$z
              break
              ;;
bkoz's avatar
 
bkoz committed
	      tagname=$z
	      break
	      ;;
	    esac
          fi
        done
        # If $tagname still isn't set, then no tagged configuration
        # was found and let the user know that the "--tag" command
        # line option must be used.
        if test -z "$tagname"; then
          echo "$modename: unable to infer tagged configuration"
          echo "$modename: specify a tag with \`--tag'" 1>&2
	  exit 1
#        else
#          echo "$modename: using $tagname tagged configuration"
        fi
	;;
      esac
    fi

    objname=`$echo "X$obj" | $Xsed -e 's%^.*/%%'`
    xdir=`$echo "X$obj" | $Xsed -e 's%/[^/]*$%%'`
    if test "X$xdir" = "X$obj"; then
      xdir=
    else
      xdir=$xdir/
    fi
    lobj=${xdir}$objdir/$objname

jason's avatar
jason committed
    if test -z "$base_compile"; then
law's avatar
#  
law committed
      $echo "$modename: you must specify a compilation command" 1>&2
      $echo "$help" 1>&2
jason's avatar
jason committed
      exit 1
    fi

    # Delete any leftover library objects.
    if test "$build_old_libs" = yes; then
bkoz's avatar
 
bkoz committed
      removelist="$obj $lobj $libobj ${libobj}T"
jason's avatar
jason committed
    else
bkoz's avatar
 
bkoz committed
      removelist="$lobj $libobj ${libobj}T"
    fi

    $run $rm $removelist
    trap "$run $rm $removelist; exit 1" 1 2 15

bkoz's avatar
 
bkoz committed
    # On Cygwin there's no "real" PIC flag so we must build both object types
    cygwin* | mingw* | pw32* | os2*)
bkoz's avatar
 
bkoz committed
      pic_mode=default
      ;;
    esac
    if test $pic_mode = no && test "$deplibs_check_method" != pass_all; then
      # non-PIC code in shared libraries is not supported
      pic_mode=default
    fi

    # Calculate the filename of the output object if compiler does
    # not support -o with -c
    if test "$compiler_c_o" = no; then
      output_obj=`$echo "X$srcfile" | $Xsed -e 's%^.*/%%' -e 's%\.[^.]*$%%'`.${objext}
      lockfile="$output_obj.lock"
      removelist="$removelist $output_obj $lockfile"
      trap "$run $rm $removelist; exit 1" 1 2 15
    else
bkoz's avatar
 
bkoz committed
      output_obj=
      need_locks=no
      lockfile=
    fi

    # Lock this critical section if it is needed
    # We use this script file to make the link, it avoids creating a new file
    if test "$need_locks" = yes; then
      until $run ln "$0" "$lockfile" 2>/dev/null; do
	$show "Waiting for $lockfile to be removed"
	sleep 2
      done
    elif test "$need_locks" = warn; then
      if test -f "$lockfile"; then
	echo "\
*** ERROR, $lockfile exists and contains:
`cat $lockfile 2>/dev/null`

This indicates that another process is trying to use the same
temporary object file, and libtool could not work around it because
your compiler does not support \`-c' and \`-o' together.  If you
repeat this compilation, it may succeed, by chance, but you had better
avoid parallel builds (make -j) in this platform, or get a better
compiler."

	$run $rm $removelist
	exit 1
      fi
      echo $srcfile > "$lockfile"
jason's avatar
jason committed
    fi

    if test -n "$fix_srcfile_path"; then
      eval srcfile=\"$fix_srcfile_path\"
    fi

bkoz's avatar
 
bkoz committed
    $run $rm "$libobj" "${libobj}T"

    # Create a libtool object file (analogous to a ".la" file),
    # but don't create it if we're doing a dry run.
    test -z "$run" && cat > ${libobj}T <<EOF
# $libobj - a libtool object file
# Generated by $PROGRAM - GNU $PACKAGE $VERSION$TIMESTAMP
#
# Please DO NOT delete this file!
# It is necessary for linking the library.

# Name of the PIC object.
EOF

jason's avatar
jason committed
    # Only build a PIC object if we are building libtool libraries.
    if test "$build_libtool_libs" = yes; then
law's avatar
#  
law committed
      # Without this assignment, base_compile gets emptied.
      fbsd_hideous_sh_bug=$base_compile

bkoz's avatar
 
bkoz committed
      if test "$pic_mode" != no; then
	command="$base_compile $srcfile $pic_flag"
      else
	# Don't build PIC code
	command="$base_compile $srcfile"
bkoz's avatar
 
bkoz committed

      if test ! -d ${xdir}$objdir; then
	$show "$mkdir ${xdir}$objdir"
	$run $mkdir ${xdir}$objdir
	status=$?
	if test $status -ne 0 && test ! -d ${xdir}$objdir; then
	  exit $status
        fi
      fi 

      if test -z "$output_obj"; then
        # Place PIC objects in $objdir
        command="$command -o $lobj"
bkoz's avatar
 
bkoz committed
      $run $rm "$lobj" "$output_obj"

      $show "$command"
      if $run eval "$command"; then :
jason's avatar
jason committed
      else
	test -n "$output_obj" && $run $rm $removelist
	exit 1
jason's avatar
jason committed
      fi

      if test "$need_locks" = warn &&
	 test x"`cat $lockfile 2>/dev/null`" != x"$srcfile"; then
	echo "\
*** ERROR, $lockfile contains:
`cat $lockfile 2>/dev/null`

but it should contain:
$srcfile

This indicates that another process is trying to use the same
temporary object file, and libtool could not work around it because
your compiler does not support \`-c' and \`-o' together.  If you
repeat this compilation, it may succeed, by chance, but you had better
avoid parallel builds (make -j) in this platform, or get a better
compiler."

	$run $rm $removelist
	exit 1
      fi

      # Just move the object if needed, then go on to compile the next one
bkoz's avatar
 
bkoz committed
      if test -n "$output_obj" && test "x$output_obj" != "x$lobj"; then
	$show "$mv $output_obj $lobj"
	if $run $mv $output_obj $lobj; then :
	else
	  error=$?
	  $run $rm $removelist
	  exit $error
	fi
jason's avatar
jason committed
      fi

bkoz's avatar
 
bkoz committed
      # Append the name of the PIC object to the libtool object file.
      test -z "$run" && cat >> ${libobj}T <<EOF
pic_object='$objdir/$objname'
bkoz's avatar
 
bkoz committed
EOF
law's avatar
#  
law committed

      # Allow error messages only from the first compilation.
      suppress_output=' >/dev/null 2>&1'
bkoz's avatar
 
bkoz committed
    else
      # No PIC object so indicate it doesn't exist in the libtool
      # object file.
      test -z "$run" && cat >> ${libobj}T <<EOF
pic_object=none

EOF
jason's avatar
jason committed
    fi

    # Only build a position-dependent object if we build old libraries.
    if test "$build_old_libs" = yes; then
bkoz's avatar
 
bkoz committed
      if test "$pic_mode" != yes; then
	# Don't build PIC code
	command="$base_compile $srcfile"
      else
	command="$base_compile $srcfile $pic_flag"
      fi
      if test "$compiler_c_o" = yes; then
	command="$command -o $obj"
      fi

law's avatar
#  
law committed
      # Suppress compiler output if we already did a PIC compilation.
      command="$command$suppress_output"
bkoz's avatar
 
bkoz committed
      $run $rm "$obj" "$output_obj"
      $show "$command"
      if $run eval "$command"; then :
jason's avatar
jason committed
      else
	$run $rm $removelist
	exit 1
      fi

      if test "$need_locks" = warn &&
	 test x"`cat $lockfile 2>/dev/null`" != x"$srcfile"; then
	echo "\
*** ERROR, $lockfile contains:
`cat $lockfile 2>/dev/null`

but it should contain:
$srcfile

This indicates that another process is trying to use the same
temporary object file, and libtool could not work around it because
your compiler does not support \`-c' and \`-o' together.  If you
repeat this compilation, it may succeed, by chance, but you had better
avoid parallel builds (make -j) in this platform, or get a better
compiler."

	$run $rm $removelist
	exit 1
      fi

      # Just move the object if needed
bkoz's avatar
 
bkoz committed
      if test -n "$output_obj" && test "x$output_obj" != "x$obj"; then
	$show "$mv $output_obj $obj"
	if $run $mv $output_obj $obj; then :
	else
	  error=$?
	  $run $rm $removelist
	  exit $error
	fi
      fi

bkoz's avatar
 
bkoz committed
      # Append the name of the non-PIC object the libtool object file.
      # Only append if the libtool object file exists.
      test -z "$run" && cat >> ${libobj}T <<EOF
# Name of the non-PIC object.
non_pic_object='$objname'

EOF
    else
      # Append the name of the non-PIC object the libtool object file.
      # Only append if the libtool object file exists.
      test -z "$run" && cat >> ${libobj}T <<EOF
# Name of the non-PIC object.
non_pic_object=none

EOF
jason's avatar
jason committed
    fi

bkoz's avatar
 
bkoz committed
    $run $mv "${libobj}T" "${libobj}"

    # Unlock the critical section if it was locked
    if test "$need_locks" != no; then
jason's avatar
jason committed
    fi

    exit 0
    ;;

  # libtool link mode
bkoz's avatar
 
bkoz committed
  link | relink)
law's avatar
#  
law committed
    modename="$modename: link"
    *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2*)
      # It is impossible to link a dll without this setting, and
      # we shouldn't force the makefile maintainer to figure out
      # which system we are compiling for in order to pass an extra
      # flag for every libtool invokation.
      # allow_undefined=no

      # FIXME: Unfortunately, there are problems with the above when trying
      # to make a dll which has undefined symbols, in which case not
      # even a static library is built.  For now, we need to specify
      # -no-undefined on the libtool link line when we can be certain
      # that all symbols are satisfied, otherwise we get a static library.
      allow_undefined=yes
      ;;
    *)
      allow_undefined=yes
      ;;
    esac
bkoz's avatar
 
bkoz committed
    libtool_args="$nonopt"
    base_compile="$nonopt"
jason's avatar
jason committed
    compile_command="$nonopt"
    finalize_command="$nonopt"
law's avatar
#  
law committed

    compile_rpath=
    finalize_rpath=
jason's avatar
jason committed
    compile_shlibpath=
    finalize_shlibpath=
    convenience=
    old_convenience=
jason's avatar
jason committed
    deplibs=
bkoz's avatar
 
bkoz committed
    old_deplibs=
    compiler_flags=
    linker_flags=
    dllsearchpath=
    lib_search_path=`pwd`
schwab's avatar
schwab committed
    inst_prefix_dir=
law's avatar
#  
law committed
    dlfiles=
    dlprefiles=
jason's avatar
jason committed
    export_dynamic=no
    export_symbols=
    export_symbols_regex=
jason's avatar
jason committed
    libobjs=
    ltlibs=
bkoz's avatar
 
bkoz committed
    no_install=no
jason's avatar
jason committed
    objs=
bkoz's avatar
 
bkoz committed
    non_pic_objects=
jason's avatar
jason committed
    prefer_static_libs=no
jason's avatar
jason committed
    prev=
    prevarg=
law's avatar
#  
law committed
    release=
    rpath=
jason's avatar
jason committed
    perm_rpath=
    temp_rpath=
    thread_safe=no
jason's avatar
jason committed
    vinfo=

    # We need to know -static, to get the right output filenames.
    for arg
    do
law's avatar
#  
law committed
      -all-static | -static)
jason's avatar
jason committed
	if test "X$arg" = "X-all-static"; then
	  if test "$build_libtool_libs" = yes && test -z "$link_static_flag"; then
law's avatar
#  
law committed
	    $echo "$modename: warning: complete static linking is impossible in this configuration" 1>&2
jason's avatar
jason committed
	  fi
	  if test -n "$link_static_flag"; then
	    dlopen_self=$dlopen_self_static
	  fi
	else
	  if test -z "$pic_flag" && test -n "$link_static_flag"; then
	    dlopen_self=$dlopen_self_static
	  fi
	fi
	build_libtool_libs=no
law's avatar
#  
law committed
	build_old_libs=yes
jason's avatar
jason committed
	prefer_static_libs=yes
jason's avatar
jason committed
      esac
    done

law's avatar
#  
law committed
    # See if our shared archives depend on static archives.
    test -n "$old_archive_from_new_cmds" && build_old_libs=yes

    # Go through the arguments, transforming them on the way.
    while test $# -gt 0; do
      arg="$1"
bkoz's avatar
 
bkoz committed
      base_compile="$base_compile $arg"
bkoz's avatar
 
bkoz committed
      *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \	]*|*]*|"")
	qarg=\"`$echo "X$arg" | $Xsed -e "$sed_quote_subst"`\" ### testsuite: skip nested quoting test
	;;
      *) qarg=$arg ;;
      esac
      libtool_args="$libtool_args $qarg"
jason's avatar
jason committed
      # If the previous option needs an argument, assign it.
      if test -n "$prev"; then
	output)
	  compile_command="$compile_command @OUTPUT@"
	  finalize_command="$finalize_command @OUTPUT@"
	  ;;
	esac

	dlfiles|dlprefiles)
	  if test "$preload" = no; then
	    # Add the symbol object into the linking commands.
	    compile_command="$compile_command @SYMFILE@"
	    finalize_command="$finalize_command @SYMFILE@"
	    preload=yes
	  fi
	  *.la | *.lo) ;;  # We handle these cases below.
jason's avatar
jason committed
	  force)
	    if test "$dlself" = no; then
	      dlself=needless
	      export_dynamic=yes
	    fi
	    prev=
	    continue
	    ;;
	  self)
	    if test "$prev" = dlprefiles; then
	      dlself=yes
	    elif test "$prev" = dlfiles && test "$dlopen_self" != yes; then
	      dlself=yes
jason's avatar
jason committed
	    else
	      dlself=needless
	      export_dynamic=yes
jason's avatar
jason committed
	    if test "$prev" = dlfiles; then
	      dlfiles="$dlfiles $arg"
	    else
	      dlprefiles="$dlprefiles $arg"
	    fi
bkoz's avatar
 
bkoz committed
	    continue
	    ;;
	  esac
	  ;;
	expsyms)
	  export_symbols="$arg"
	  if test ! -f "$arg"; then
	    $echo "$modename: symbol file \`$arg' does not exist"
	    exit 1
	  fi
	  prev=
	  continue
	  ;;
	expsyms_regex)
	  export_symbols_regex="$arg"
	  prev=
	  continue
	  ;;
schwab's avatar
schwab committed
	inst_prefix)
	  inst_prefix_dir="$arg"
	  prev=
	  continue
	  ;;
law's avatar
#  
law committed
	release)
	  release="-$arg"
	  prev=
	  continue
	  ;;
	objectlist)
	  if test -f "$arg"; then
            save_arg=$arg
	    moreargs=
	    for fil in `cat $save_arg`
	    do
#	      moreargs="$moreargs $fil"
              arg=$fil
              # A libtool-controlled object.

	      # Check to see that this really is a libtool object.
	      if (sed -e '2q' $arg | egrep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then
                pic_object=
                non_pic_object=

                # Read the .lo file
                # If there is no directory component, then add one.
                case $arg in
                */* | *\\*) . $arg ;;
                *) . ./$arg ;;
                esac

                if test -z "$pic_object" || \
                   test -z "$non_pic_object" ||
                   test "$pic_object" = none && \
                   test "$non_pic_object" = none; then