This is the mail archive of the mailing list for the GCC project.

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Patch: FYI: fix atomicity bug in libcpp Makefile

I'm checking this in.

This fixes the atomicity bug in the libcpp Makefile that Ralf pointed
out.  Now we create a temporary dependency file and rename it if the
compilation succeeds.  If the compilation fails, we just leave it; it
will be overwritten next time anyway.

Bootstrapped etc on the compile farm.


2008-03-28  Tom Tromey  <>

	* (POSTCOMPILE): New variable.
	(.c.o): Use it.

---	(revision 133651)
+++	(working copy)
@@ -1,7 +1,7 @@
 # @configure_input@
 # Makefile for libcpp.  Run 'configure' to generate Makefile from
-# Copyright (C) 2004 Free Software Foundation, Inc.
+# Copyright (C) 2004, 2008 Free Software Foundation, Inc.
 #This file is part of libcpp.
@@ -197,16 +197,24 @@
 # Dependency rule.
 ifeq ($(DEPMODE),depmode=gcc3)
-COMPILE = $(COMPILE.base) -o $@ -MT $@ -MMD -MP -MF $(DEPDIR)/$*.Po
+# Note that we put the dependencies into a .Tpo file, then move them
+# into place if the compile succeeds.  We need this because gcc does
+# not atomically write the dependency output file.
+COMPILE = $(COMPILE.base) -o $@ -MT $@ -MMD -MP -MF $(DEPDIR)/$*.Tpo
+POSTCOMPILE = @mv $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
 COMPILE = source='$<' object='$@' libtool=no DEPDIR=$(DEPDIR) $(DEPMODE) \
 	  $(depcomp) $(COMPILE.base)
+# depcomp handles atomicity for us, so we don't need a postcompile
+# step.
 # Implicit rules and I18N
 	$(COMPILE) $<
 # N.B. We do not attempt to copy these into $(srcdir).

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]