* pre.in (.et.c, .et.h): Change rules to only update the desired target file,
authorKen Raeburn <raeburn@mit.edu>
Tue, 24 Sep 2002 17:58:33 +0000 (17:58 +0000)
committerKen Raeburn <raeburn@mit.edu>
Tue, 24 Sep 2002 17:58:33 +0000 (17:58 +0000)
by using temporary files; this makes them safe for use in parallel builds.

git-svn-id: svn://anonsvn.mit.edu/krb5/trunk@14895 dc483132-0cff-0310-8789-dd5450dbe970

src/config/ChangeLog
src/config/pre.in

index 9da9700d87caef53ca3fa99c13cfb62423536595..1ff8bd01293a4a86006edb78537189fa703b24f9 100644 (file)
@@ -1,3 +1,9 @@
+2002-09-24  Ken Raeburn  <raeburn@mit.edu>
+
+       * pre.in (.et.c, .et.h): Change rules to only update the desired
+       target file, by using temporary files; this makes them safe for
+       use in parallel builds.
+
 2002-09-19  Ezra Peisach  <epeisach@bu.edu>
 
        * post.in (Makefile): Revert change until aclocal.m4 fixed.
index e7c751c15f13a11eefe390f1f302f8a1208b3cbb..8671396f9c1b47187537d1fd86b7d8f7ae007024 100644 (file)
@@ -317,11 +317,21 @@ COMPILE_ET-k5= $(BUILDTOP)/util/et/compile_et -d $(SRCTOP)/util/et
 
 .SUFFIXES:  .h .c .et .ct
 
+# These versions cause both .c and .h files to be generated at once.
+# But GNU make doesn't understand this, and parallel builds can trigger
+# both of them at once, causing them to stomp on each other.  The versions
+# below only update one of the files, so compile_et has to get run twice,
+# but it won't break parallel builds.
+#.et.h: ; $(COMPILE_ET) $<
+#.et.c: ; $(COMPILE_ET) $<
+
 .et.h:
-       $(COMPILE_ET) $<
+       set -x ; d=ettmp$$$$ ; (cp $< $$d.et && $(COMPILE_ET) $$d.et && mv $$d.h $*.h) ; \
+               e=$$? ; rm -f $$d.* ; exit $$e
 
 .et.c:
-       $(COMPILE_ET) $<
+       set -x ; d=ettmp$$$$ ; (cp $< $$d.et && $(COMPILE_ET) $$d.et && mv $$d.c $*.c) ; \
+               e=$$? ; rm -f $$d.* ; exit $$e
 
 # rule to make object files
 #