summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--nss/makefile.mk4
-rw-r--r--python/Python-parallel-make.patch36
-rw-r--r--python/makefile.mk1
3 files changed, 38 insertions, 3 deletions
diff --git a/nss/makefile.mk b/nss/makefile.mk
index 22b126a43c57..34e278c4d84c 100644
--- a/nss/makefile.mk
+++ b/nss/makefile.mk
@@ -136,8 +136,6 @@ OUT2LIB= \
MOZ_MSVCVERSION= 9
.EXPORT : MOZ_MSVCVERSION
moz_build:=$(shell cygpath -p $(MOZILLABUILD))
-PATH!:=$(moz_build)/msys/bin:$(moz_build)/moztools/bin:$(PATH)
-.EXPORT : PATH
#Using WINNT will cause at least that nspr4.dll, plc4.dll, plds4.dll
#become libnspr4.dll, libplc4.dll, libplds4.dll
@@ -152,7 +150,7 @@ EXT_USE_STLPORT=TRUE
#To build nss one has to call "make nss_build_all" in
#mozilla/security/nss
NSS_BUILD_DIR= $(subst,\,/ $(PWD)/$(MISC)/build/$(TARFILE_ROOTDIR)/mozilla/security/nss)
-BUILD_ACTION= $(subst,/,$/ $(MOZILLABUILD)/msys/bin/bash) -i \
+BUILD_ACTION= PATH="$(moz_build)/msys/bin:$(moz_build)/moztools/bin:$(PATH)" && $(subst,/,$/ $(MOZILLABUILD)/msys/bin/bash) -i \
-c "cd $(NSS_BUILD_DIR) && make nss_build_all"
OUT2LIB= \
diff --git a/python/Python-parallel-make.patch b/python/Python-parallel-make.patch
new file mode 100644
index 000000000000..81ce8dabe35b
--- /dev/null
+++ b/python/Python-parallel-make.patch
@@ -0,0 +1,36 @@
+--- misc/Python-2.6.1/Makefile.pre.in.fix-parallel-make 2010-07-22 15:01:39.567996932 -0400
++++ misc/build/Python-2.6.1/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)
diff --git a/python/makefile.mk b/python/makefile.mk
index 5caa7ac1d601..607ba93ab92d 100644
--- a/python/makefile.mk
+++ b/python/makefile.mk
@@ -49,6 +49,7 @@ TARFILE_NAME=Python-$(PYVERSION)
TARFILE_MD5=e81c2f0953aa60f8062c05a4673f2be0
PATCH_FILES=\
Python-$(PYVERSION).patch \
+ Python-parallel-make.patch \
Python-ssl.patch
CONFIGURE_DIR=