automake-patches
[Top][All Lists]
Advanced

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

Re: tweak for documentation of how to create universal binaries


From: Ralf Wildenhues
Subject: Re: tweak for documentation of how to create universal binaries
Date: Wed, 22 Apr 2009 22:22:24 +0200
User-agent: Mutt/1.5.18 (2008-05-17)

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




reply via email to

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