summary refs log tree commit diff
path: root/pkgs/development/interpreters/python
diff options
context:
space:
mode:
authorDomen Kožar <domen@dev.si>2015-01-18 16:25:43 +0100
committerDomen Kožar <domen@dev.si>2015-01-18 19:20:07 +0100
commit652cfc36e92bca5cb99345f314a8de073b5d49bc (patch)
treeccdf61294ca7a0517f31fc171ac415bebc0f6a7a /pkgs/development/interpreters/python
parente4294c27e0de3c5524045abb0eb4928c1099f9a9 (diff)
downloadnixpkgs-652cfc36e92bca5cb99345f314a8de073b5d49bc.tar
nixpkgs-652cfc36e92bca5cb99345f314a8de073b5d49bc.tar.gz
nixpkgs-652cfc36e92bca5cb99345f314a8de073b5d49bc.tar.bz2
nixpkgs-652cfc36e92bca5cb99345f314a8de073b5d49bc.tar.lz
nixpkgs-652cfc36e92bca5cb99345f314a8de073b5d49bc.tar.xz
nixpkgs-652cfc36e92bca5cb99345f314a8de073b5d49bc.tar.zst
nixpkgs-652cfc36e92bca5cb99345f314a8de073b5d49bc.zip
python2.6: add a patch to fix parallel make failure
(cherry picked from commit 23a202519cb1d8704a0b4294d8d13a224efb1a74)
Signed-off-by: Domen Kožar <domen@dev.si>
Diffstat (limited to 'pkgs/development/interpreters/python')
-rw-r--r--pkgs/development/interpreters/python/2.6/default.nix3
-rw-r--r--pkgs/development/interpreters/python/2.6/python2.6-fix-parallel-make.patch37
2 files changed, 40 insertions, 0 deletions
diff --git a/pkgs/development/interpreters/python/2.6/default.nix b/pkgs/development/interpreters/python/2.6/default.nix
index d13fe9178bd..87e4dceee4d 100644
--- a/pkgs/development/interpreters/python/2.6/default.nix
+++ b/pkgs/development/interpreters/python/2.6/default.nix
@@ -24,6 +24,9 @@ let
       # doesn't work in Nix because Nix changes the mtime of files in
       # the Nix store to 1.  So treat that as a special case.
       ./nix-store-mtime.patch
+
+      # http://bugs.python.org/issue10013
+      ./python2.6-fix-parallel-make.patch
     ];
     
   preConfigure = ''
diff --git a/pkgs/development/interpreters/python/2.6/python2.6-fix-parallel-make.patch b/pkgs/development/interpreters/python/2.6/python2.6-fix-parallel-make.patch
new file mode 100644
index 00000000000..c43e141f9af
--- /dev/null
+++ b/pkgs/development/interpreters/python/2.6/python2.6-fix-parallel-make.patch
@@ -0,0 +1,37 @@
+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)