This issue tracker has been migrated to GitHub, and is currently read-only.
For more information, see the GitHub FAQs in the Python's Developer Guide.

classification
Title: fix `./libpython2.6.so: undefined reference to `_PyParser_Grammar´` in parallel builds
Type: compile error Stage:
Components: Build Versions: Python 3.1, Python 3.2, Python 2.7
process
Status: closed Resolution: fixed
Dependencies: Superseder:
Assigned To: Nosy List: Arfrever, PaulePanter, dmalcolm, eric.araujo, loewis
Priority: normal Keywords:

Created on 2010-10-02 11:13 by PaulePanter, last changed 2022-04-11 14:57 by admin. This issue is now closed.

Messages (3)
msg117865 - (view) Author: Paul Menzel (PaulePanter) Date: 2010-10-02 11:13
Compiling Python in parallel sometimes fails as reported in [1] and [2].

    ./libpython2.6.so: undefined reference to `_PyParser_Grammar´

Fedora applies a patch by dmalcolm <dmalcolm@fedoraproject.org> which fixes this issue [3].

    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)

Could you please apply it. Could this also be applied to 2.6.x?


[1] http://doc.services.openoffice.org/wiki/RedTinderboxStatusInEIS
[2] http://www.openoffice.org/issues/show_bug.cgi?id=114866
[3] http://pkgs.fedoraproject.org/gitweb/?p=python.git;a=commit;h=b95f6cc2ca6a009f97436c6aa16cfd70547353d9
msg117867 - (view) Author: Martin v. Löwis (loewis) * (Python committer) Date: 2010-10-02 11:54
2.6 is closed for bug fixes, so this cannot be applied anymore.

Notice that py3k has this fixed in r84068; I'll backport the fix to 2.7.
msg126174 - (view) Author: Arfrever Frehtes Taifersar Arahesis (Arfrever) * (Python triager) Date: 2011-01-13 15:32
This change was backported to 2.7 (r87701) and 3.1 (r87702).
History
Date User Action Args
2022-04-11 14:57:07adminsetgithub: 54222
2011-01-13 16:02:30SilentGhostsetresolution: accepted -> fixed
2011-01-13 15:38:20SilentGhostsetstatus: open -> closed
resolution: accepted
versions: + Python 3.1, Python 3.2
2011-01-13 15:32:39Arfreversetnosy: + Arfrever
messages: + msg126174
2010-10-24 18:41:36eric.araujosetnosy: + eric.araujo

versions: + Python 2.7, - Python 2.6
2010-10-02 12:11:07r.david.murraysetnosy: + dmalcolm
2010-10-02 11:54:29loewissetnosy: + loewis
messages: + msg117867
2010-10-02 11:13:42PaulePantercreate