652cfc36e9
(cherry picked from commit 23a202519cb1d8704a0b4294d8d13a224efb1a74) Signed-off-by: Domen Kožar <domen@dev.si>
37 lines
1.6 KiB
Diff
37 lines
1.6 KiB
Diff
diff -up Python-2.7/Makefile.pre.in.fix-parallel-make Python-2.7/Makefile.pre.in
|
|
--- Python-2.7/Makefile.pre.in.fix-parallel-make 2010-07-22 15:01:39.567996932 -0400
|
|
+++ Python-2.7/Makefile.pre.in 2010-07-22 15:47:02.437998509 -0400
|
|
@@ -207,6 +207,7 @@ SIGNAL_OBJS= @SIGNAL_OBJS@
|
|
|
|
##########################################################################
|
|
# Grammar
|
|
+GRAMMAR_STAMP= $(srcdir)/grammar-stamp
|
|
GRAMMAR_H= $(srcdir)/Include/graminit.h
|
|
GRAMMAR_C= $(srcdir)/Python/graminit.c
|
|
GRAMMAR_INPUT= $(srcdir)/Grammar/Grammar
|
|
@@ -530,10 +531,24 @@ Modules/getpath.o: $(srcdir)/Modules/get
|
|
Modules/python.o: $(srcdir)/Modules/python.c
|
|
$(MAINCC) -c $(PY_CFLAGS) -o $@ $(srcdir)/Modules/python.c
|
|
|
|
+# GNU "make" interprets rules with two dependents as two copies of the rule.
|
|
+#
|
|
+# In a parallel build this can lead to pgen being run twice, once for each of
|
|
+# GRAMMAR_H and GRAMMAR_C, leading to race conditions in which the compiler
|
|
+# reads a partially-overwritten copy of one of these files, leading to syntax
|
|
+# errors (or linker errors if the fragment happens to be syntactically valid C)
|
|
+#
|
|
+# See http://www.gnu.org/software/hello/manual/automake/Multiple-Outputs.html
|
|
+# for more information
|
|
+#
|
|
+# Introduce ".grammar-stamp" as a contrived single output from PGEN to avoid
|
|
+# this:
|
|
+$(GRAMMAR_H) $(GRAMMAR_C): $(GRAMMAR_STAMP)
|
|
|
|
-$(GRAMMAR_H) $(GRAMMAR_C): $(PGEN) $(GRAMMAR_INPUT)
|
|
+$(GRAMMAR_STAMP): $(PGEN) $(GRAMMAR_INPUT)
|
|
-@$(INSTALL) -d Include
|
|
-$(PGEN) $(GRAMMAR_INPUT) $(GRAMMAR_H) $(GRAMMAR_C)
|
|
+ touch $(GRAMMAR_STAMP)
|
|
|
|
$(PGEN): $(PGENOBJS)
|
|
$(CC) $(OPT) $(LDFLAGS) $(PGENOBJS) $(LIBS) -o $(PGEN)
|