Avoid racy depmodes with universal builds.
authorRalf Wildenhues <Ralf.Wildenhues@gmx.de>
Wed, 22 Apr 2009 20:13:05 +0000 (22:13 +0200)
committerRalf Wildenhues <Ralf.Wildenhues@gmx.de>
Wed, 22 Apr 2009 20:13:35 +0000 (22:13 +0200)
* m4/depend.m4 (_AM_DEPENDENCIES): If universal builds are used,
avoid racy depmodes.
* lib/depcomp: Ignore `-arch' argument for makedepend depmode.
Report by Bruno Haible, analysis by Bruno Haible, Peter O'Gorman,
and Eric Blake.

Signed-off-by: Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
ChangeLog
lib/depcomp
m4/depend.m4

index dfafb91..5585ced 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,12 @@
+2009-04-22  Ralf Wildenhues  <Ralf.Wildenhues@gmx.de>
+
+       Avoid racy depmodes with universal builds.
+       * m4/depend.m4 (_AM_DEPENDENCIES): If universal builds are used,
+       avoid racy depmodes.
+       * lib/depcomp: Ignore `-arch' argument for makedepend depmode.
+       Report by Bruno Haible, analysis by Bruno Haible, Peter O'Gorman,
+       and Eric Blake.
+
 2009-04-21  Fabian Alenius  <fabian.alenius@gmail.com>  (tiny change)
 
        Fix link to autotools tutorial.
index 0fb633e..9ebfd85 100755 (executable)
@@ -1,7 +1,7 @@
 #! /bin/sh
 # depcomp - compile a program generating dependencies as side-effects
 
-scriptversion=2009-03-04.20
+scriptversion=2009-04-22.22
 
 # Copyright (C) 1999, 2000, 2003, 2004, 2005, 2006, 2007, 2009 Free
 # Software Foundation, Inc.
@@ -474,7 +474,7 @@ makedepend)
   fi
   # X makedepend
   shift
-  cleared=no
+  cleared=no eat=no
   for arg
   do
     case $cleared in
@@ -482,11 +482,17 @@ makedepend)
       set ""; shift
       cleared=yes ;;
     esac
+    if test $eat = yes; then
+      eat=no
+      continue
+    fi
     case "$arg" in
     -D*|-I*)
       set fnord "$@" "$arg"; shift ;;
     # Strip any option that makedepend may not understand.  Remove
     # the object too, otherwise makedepend will parse it as a source file.
+    -arch)
+      eat=yes ;;
     -*|$object)
       ;;
     *)
index 451312a..efe8643 100644 (file)
@@ -63,6 +63,16 @@ AC_CACHE_CHECK([dependency style of $depcc],
   if test "$am_compiler_list" = ""; then
      am_compiler_list=`sed -n ['s/^#*\([a-zA-Z0-9]*\))$/\1/p'] < ./depcomp`
   fi
+  am__universal=false
+  m4_case([$1], [CC],
+    [case " $depcc " in #(
+     *\ -arch\ *\ -arch\ *) am__universal=true ;;
+     esac],
+    [CXX],
+    [case " $depcc " in #(
+     *\ -arch\ *\ -arch\ *) am__universal=true ;;
+     esac])
+
   for depmode in $am_compiler_list; do
     # Setup a source with many dependencies, because some compilers
     # like to wrap large dependency lists on column 80 (with \), and
@@ -87,6 +97,10 @@ AC_CACHE_CHECK([dependency style of $depcc],
     am__obj=sub/conftest.${OBJEXT-o}
     am__minus_obj="-o $am__obj"
     case $depmode in
+    gcc)
+      # This depmode causes a compiler race in universal mode.
+      test "$am__universal" = false || continue
+      ;;
     nosideeffect)
       # after this tag, mechanisms are not by side-effect, so they'll
       # only be used when explicitly requested