Hi Bruno, * Bruno Haible wrote on Sun, Apr 19, 2009 at 05:39:06PM CEST: > Ralf Wildenhues wrote: > > In the > > patch that I sent, there is an "icc" case match. If you omit that match > > from the patch, does not specifying --enable-dependency-tracking still > > cause depmode=none for gcc in universal mode? > > Yes. Without --enable-dependency-tracking: depmode=none. > With --enable-dependency-tracking: depmode=makedepend. > So, omitting "| icc" does not change anything.
Thanks again for testing, and Eric for the review. I've applied the patch as below, to git master of Automake. Will cherry-pick to branch-1-10 in a couple of days, unless I hear complaints. Cheers, Ralf 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. diff --git a/lib/depcomp b/lib/depcomp index 0fb633e..9ebfd85 100755 --- a/lib/depcomp +++ b/lib/depcomp @@ -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) ;; *) diff --git a/m4/depend.m4 b/m4/depend.m4 index 451312a..efe8643 100644 --- a/m4/depend.m4 +++ b/m4/depend.m4 @@ -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