OSDN Git Service

The dragonegg plugin needs except.h, so add it to the list of
[pf3gnuchains/gcc-fork.git] / gcc / exec-tool.in
index bc6e7ec..a146899 100644 (file)
@@ -1,11 +1,11 @@
 #! /bin/sh
 
-# Copyright (C) 2007 Free Software Foundation, Inc.
+# Copyright (C) 2007, 2008 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 2, or (at your option)
+# 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,
 # 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 COPYING.  If not, write to
-# the Free Software Foundation, 51 Franklin Street, Fifth Floor,
-# Boston MA 02110-1301, USA.
+# 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_PLUGIN_LD_FOR_TARGET="@ORIGINAL_PLUGIN_LD_FOR_TARGET@"
 ORIGINAL_NM_FOR_TARGET="@ORIGINAL_NM_FOR_TARGET@"
 exeext=@host_exeext@
+fast_install=@enable_fast_install@
+objdir=@objdir@
 
 invoked=`basename "$0"`
 case "$invoked" in
@@ -33,7 +35,13 @@ case "$invoked" in
     dir=gas
     ;;
   collect-ld)
-    original=$ORIGINAL_LD_FOR_TARGET
+    # when using a linker plugin, gcc will always pass '-plugin' as the
+    # first option to the linker.
+    if test x"$1" = "x-plugin"; then
+      original=$ORIGINAL_PLUGIN_LD_FOR_TARGET
+    else
+      original=$ORIGINAL_LD_FOR_TARGET
+    fi
     prog=ld-new$exeext
     dir=ld
     ;;
@@ -51,7 +59,22 @@ case "$original" in
     scriptdir=`cd "$tdir" && pwd`
 
     if test -x $scriptdir/../$dir/$prog; then
-      exec $scriptdir/../$dir/$prog ${1+"$@"}
+      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*.
+      test x"$LT_RCU" = x"1" && exec $scriptdir/../prev-$dir/$prog ${1+"$@"}
+
+      LT_RCU=1; export LT_RCU
+      $scriptdir/../$dir/$prog ${1+"$@"}
+      result=$?
+      exit $result
+
     else
       exec $scriptdir/../prev-$dir/$prog ${1+"$@"}
     fi