#! /bin/sh

# Copyright (C) 2007-2021 Free Software Foundation, Inc.
# This file is part of GCC.

# GCC 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 3, or (at your option)
# any later version.

# GCC 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 GCC; see the file COPYING3.  If not see
# <http://www.gnu.org/licenses/>.

# Invoke as, ld or nm from the build tree.

ORIGINAL_AS_FOR_TARGET="@ORIGINAL_AS_FOR_TARGET@"
ORIGINAL_LD_FOR_TARGET="@ORIGINAL_LD_FOR_TARGET@"
ORIGINAL_LD_BFD_FOR_TARGET="@ORIGINAL_LD_BFD_FOR_TARGET@"
ORIGINAL_LD_GOLD_FOR_TARGET="@ORIGINAL_LD_GOLD_FOR_TARGET@"
ORIGINAL_PLUGIN_LD_FOR_TARGET="@ORIGINAL_PLUGIN_LD_FOR_TARGET@"
ORIGINAL_NM_FOR_TARGET="@ORIGINAL_NM_FOR_TARGET@"
ORIGINAL_DSYMUTIL_FOR_TARGET="@ORIGINAL_DSYMUTIL_FOR_TARGET@"
exeext=@host_exeext@
fast_install=@enable_fast_install@
objdir=@objdir@

invoked=`basename "$0"`
id=$invoked
case "$invoked" in
  as)
    original=$ORIGINAL_AS_FOR_TARGET
    prog=as-new$exeext
    dir=gas
    ;;
  collect-ld)
    # Check -fuse-ld=bfd and -fuse-ld=gold
    case " $* " in
      *\ -fuse-ld=bfd\ *)
	original=$ORIGINAL_LD_BFD_FOR_TARGET
	;;
      *\ -fuse-ld=gold\ *)
	original=$ORIGINAL_LD_GOLD_FOR_TARGET
	;;
      *)
	# when using a linker plugin, gcc will always pass '-plugin' as the
	# first or second option to the linker.
	if test x"$1" = "x-plugin" || test x"$2" = "x-plugin"; then
	  original=$ORIGINAL_PLUGIN_LD_FOR_TARGET
	else
	  original=$ORIGINAL_LD_FOR_TARGET
	fi
	;;
    esac
    prog=ld-new$exeext
    if test "$original" = ../gold/ld-new$exeext; then
      dir=gold
      # No need to handle relink since gold doesn't use libtool.
      fast_install=yes
    else
      dir=ld
    fi
    id=ld
    ;;
  nm)
    original=$ORIGINAL_NM_FOR_TARGET
    prog=nm-new$exeext
    dir=binutils
    ;;
  dsymutil)
    original=$ORIGINAL_DSYMUTIL_FOR_TARGET
    # We do not build this in tree - but still want to be able to execute
    # a configured version from the build dir.
    prog=
    dir=
    ;;
esac

case "$original" in
  ../*)
    # compute absolute path of the location of this script
    tdir=`dirname "$0"`
    scriptdir=`cd "$tdir" && pwd`

    if test -x $scriptdir/../$dir/$prog; then
      test "$fast_install" = yes || exec $scriptdir/../$dir/$prog ${1+"$@"}

      # if libtool did everything it needs to do, there's a fast path
      lt_prog=$scriptdir/../$dir/$objdir/lt-$prog 
      test -x $lt_prog && exec $lt_prog ${1+"$@"}

      # libtool has not relinked ld-new yet, but we cannot just use the
      # previous stage (because then the relinking would just never happen!).
      # So we take extra care to use prev-ld/ld-new *on recursive calls*.
      eval LT_RCU="\${LT_RCU_$id}"
      test x"$LT_RCU" = x"1" && exec $scriptdir/../prev-$dir/$prog ${1+"$@"}

      eval LT_RCU_$id=1
      export LT_RCU_$id
      $scriptdir/../$dir/$prog ${1+"$@"}
      result=$?
      exit $result

    else
      exec $scriptdir/../prev-$dir/$prog ${1+"$@"}
    fi
    ;;
  *)
    exec $original ${1+"$@"}
    ;;
esac
