...originally probably replaced an en-dash (thanks Roman Eisele).
[LibreOffice.git] / python / Python-parallel-make.patch
blob81ce8dabe35b5feef2819cf2aa8646cb49c0c0c4
1 --- misc/Python-2.6.1/Makefile.pre.in.fix-parallel-make 2010-07-22 15:01:39.567996932 -0400
2 +++ misc/build/Python-2.6.1/Makefile.pre.in 2010-07-22 15:47:02.437998509 -0400
3 @@ -207,6 +207,7 @@ SIGNAL_OBJS= @SIGNAL_OBJS@
5 ##########################################################################
6 # Grammar
7 +GRAMMAR_STAMP= $(srcdir)/grammar-stamp
8 GRAMMAR_H= $(srcdir)/Include/graminit.h
9 GRAMMAR_C= $(srcdir)/Python/graminit.c
10 GRAMMAR_INPUT= $(srcdir)/Grammar/Grammar
11 @@ -530,10 +531,24 @@ Modules/getpath.o: $(srcdir)/Modules/get
12 Modules/python.o: $(srcdir)/Modules/python.c
13 $(MAINCC) -c $(PY_CFLAGS) -o $@ $(srcdir)/Modules/python.c
15 +# GNU "make" interprets rules with two dependents as two copies of the rule.
16 +#
17 +# In a parallel build this can lead to pgen being run twice, once for each of
18 +# GRAMMAR_H and GRAMMAR_C, leading to race conditions in which the compiler
19 +# reads a partially-overwritten copy of one of these files, leading to syntax
20 +# errors (or linker errors if the fragment happens to be syntactically valid C)
22 +# See http://www.gnu.org/software/hello/manual/automake/Multiple-Outputs.html
23 +# for more information
25 +# Introduce ".grammar-stamp" as a contrived single output from PGEN to avoid
26 +# this:
27 +$(GRAMMAR_H) $(GRAMMAR_C): $(GRAMMAR_STAMP)
29 -$(GRAMMAR_H) $(GRAMMAR_C): $(PGEN) $(GRAMMAR_INPUT)
30 +$(GRAMMAR_STAMP): $(PGEN) $(GRAMMAR_INPUT)
31 -@$(INSTALL) -d Include
32 -$(PGEN) $(GRAMMAR_INPUT) $(GRAMMAR_H) $(GRAMMAR_C)
33 + touch $(GRAMMAR_STAMP)
35 $(PGEN): $(PGENOBJS)
36 $(CC) $(OPT) $(LDFLAGS) $(PGENOBJS) $(LIBS) -o $(PGEN)