automake
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Automake 1.6.1b


From: Alexandre Duret-Lutz
Subject: Re: Automake 1.6.1b
Date: 11 Jun 2002 23:31:43 +0200
User-agent: Gnus/5.0808 (Gnus v5.8.8) Emacs/20.7

>>> "Nishio" == Nishio Futoshi <address@hidden> writes:

 Nishio> FAIL: pr307.test

Thanks!  Looks like it was worth making this snapshot.

The reason why you see this

 Nishio> mv -f .libs/g.lo g.lo
 Nishio> mv: .libs/g.lo: No such file or directory

and why I didn't see it is because not all gcc version will
create an object file when given the `-M' option.  
2.95.x do, but 3.x doesn't.

Now, what seems more dreadful is how depcomp's dashstdout mode works
when libtool is used:

 1. call `libtool --mode=compile gcc ... -c -o g.lo' to build g.lo
 2. call `libtool --mode=compile gcc ... -c -o g.lo -M > output' 
    the dependencies from the output.

I think this is completly bogus.  

`libtool --mode=compile gcc ... -c -o g.lo -M' outputs much more
than what `gcc ... -c -o g.lo -M' does (because libtool prints
the gcc commands it runs).

Striping `libtool --mode=compile' at step #2 is not enough right
because the compiler (e.g. gcc 2.95.x) could overwrite g.lo.
Therefore I suggest changing `g.lo' into `/dev/null' in addition:

   `gcc ... -c -o /dev/null -M > output'

Simply removing `-o g.lo' is not an option because then we don't
control where the object is created (if an object is created) and 
we might overwrite something by mistake.

Tom, what do you think?  I always feel apprehensive when changing depcomp.

2002-06-11  Alexandre Duret-Lutz  <address@hidden>

        Fix pr307.test failure with gcc 3.x.
        * lib/depcomp (dashmstdout): Strip the call to libtool, and
        replace `-o $object' by `-o /dev/null' before running "$@"
        to generate dependencies.
        (cpp): Strip the call to libtool as well as `-o $object'.

Index: lib/depcomp
===================================================================
RCS file: /cvs/automake/automake/lib/depcomp,v
retrieving revision 1.32.2.1
diff -u -r1.32.2.1 depcomp
--- lib/depcomp 25 Apr 2002 07:55:51 -0000      1.32.2.1
+++ lib/depcomp 11 Jun 2002 21:35:09 -0000
@@ -250,11 +250,40 @@
 
 dashmstdout)
   # Important note: in order to support this mode, a compiler *must*
-  # always write the proprocessed file to stdout, regardless of -o,
-  # because we must use -o when running libtool.
+  # always write the proprocessed file to stdout, regardless of -o.
   "$@" || exit $?
+
+  # Remove the call to Libtool.
+  if test "$libtool" = yes; then
+    while test $1 != '--mode=compile'; do
+      shift
+    done
+    shift
+  fi
+
+  # Remove `-o $object'.  We will use -o /dev/null later,
+  # however we can't do the remplacement now because
+  # `-o $object' might simply not be used
+  IFS=" "
+  for arg
+  do
+    case $arg in
+    -o)
+      shift
+      ;;
+    $object)
+      shift
+      ;;
+    *)
+      set fnord "$@" "$arg"
+      shift # fnord
+      shift # $arg
+      ;;
+    esac
+  done
+
   test -z "$dashmflag" && dashmflag=-M
-  "$@" $dashmflag | sed 's:^[^:]*\:[   ]*:'"$object"'\: :' > "$tmpdepfile"
+  "$@" -o /dev/null $dashmflag | sed 's:^[^:]*\:[      ]*:'"$object"'\: :' > 
"$tmpdepfile"
   rm -f "$depfile"
   cat < "$tmpdepfile" > "$depfile"
   tr ' ' '
@@ -306,9 +335,36 @@
 
 cpp)
   # Important note: in order to support this mode, a compiler *must*
-  # always write the proprocessed file to stdout, regardless of -o,
-  # because we must use -o when running libtool.
+  # always write the proprocessed file to stdout.
   "$@" || exit $?
+
+  # Remove the call to Libtool.
+  if test "$libtool" = yes; then
+    while test $1 != '--mode=compile'; do
+      shift
+    done
+    shift
+  fi
+
+  # Remove `-o $object'.
+  IFS=" "
+  for arg
+  do
+    case $arg in
+    -o)
+      shift
+      ;;
+    $object)
+      shift
+      ;;
+    *)
+      set fnord "$@" "$arg"
+      shift # fnord
+      shift # $arg
+      ;;
+    esac
+  done
+
   "$@" -E |
     sed -n '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' |
     sed '$ s: \\$::' > "$tmpdepfile"

-- 
Alexandre Duret-Lutz




reply via email to

[Prev in Thread] Current Thread [Next in Thread]