[oe] [PATCH] python-{native}-2.6.5: Fix parallel build.

Khem Raj raj.khem at gmail.com
Mon Oct 4 06:47:14 UTC 2010


On Sun, Oct 3, 2010 at 11:10 AM, Paul Menzel
<paulepanter at users.sourceforge.net> wrote:
> Sorry, I forgot to add the patch iteration to the subject line. It is v3
> and it has the ID 3153 in Patchwork [1].

you have my ack for this patch

>
> Am Sonntag, den 03.10.2010, 17:54 +0200 schrieb Paul Menzel:
>> Date: Sat, 2 Oct 2010 12:51:03 +0200
>>
>> Randomly the build failed for me with the following error message.
>>
>>     libpython2.6.so: undefined reference to `_PyParser_Grammar'
>>
>> The applied patch in [5] tried to fix this problem, but it turns out that this also was due to a possible race. This is already known in OpenOffice too [3].
>>
>> R. David Murray (dmalcolm) <dmalcolm at fedoraproject.org> fixed this in Fedora [1] and I applied his patch.
>>
>> I reported this issue upstream [4] and this will only be fixed in Python 2.7, so we have to keep this patch for Python 2.6.
>>
>> I put 00 in front of the name of the patch file because I did not want to rename the other patches.
>>
>> I build tested this with `MACHINE = " beagleboard"` for `angstrom-2008.1` and `minimal-{eglibc,uclibc,libc}`.
>>
>> [1] http://pkgs.fedoraproject.org/gitweb/?p=python.git;a=commitdiff;h=b95f6cc2ca6a009f97436c6aa16cfd70547353d9
>> [2] http://www.openoffice.org/issues/show_bug.cgi?id=114866
>> [3] http://doc.services.openoffice.org/wiki/RedTinderboxStatusInEIS
>> [4] http://bugs.python.org/issue10013
>> [5] http://patchwork.openembedded.org/patch/1899/
>>
>> Signed-off-by: Paul Menzel <paulepanter at users.sourceforge.net>
>> ---
>> v1 → v2: comments by Khem and Tom, add accidentely removed »\« at the line ending.
>> v2 → v3: Reorder patches, so that they can be applied to python and python-native.
>> ---
>>  .../python/python-2.6.5/00-fix-parallel-make.patch |   40 ++++++++++++++++++++
>>  .../01-use-proper-tools-for-cross-build.patch      |   14 +++---
>>  recipes/python/python-native_2.6.5.bb              |    3 +-
>>  recipes/python/python_2.6.5.bb                     |    3 +-
>>  4 files changed, 51 insertions(+), 9 deletions(-)
>>  create mode 100644 recipes/python/python-2.6.5/00-fix-parallel-make.patch
>>
>> diff --git a/recipes/python/python-2.6.5/00-fix-parallel-make.patch b/recipes/python/python-2.6.5/00-fix-parallel-make.patch
>> new file mode 100644
>> index 0000000..c80ca19
>> --- /dev/null
>> +++ b/recipes/python/python-2.6.5/00-fix-parallel-make.patch
>> @@ -0,0 +1,40 @@
>> +upstream: <http://bugs.python.org/issue10013>
>> +comment: As in the comment in the issue tracker this is fixed for py3k a little differently <http://svn.python.org/view?view=rev&revision=84068>. This patch is taken from Fedora.
>> +
>> +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
>> +@@ -197,6 +197,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
>> +@@ -514,10 +515,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/recipes/python/python-2.6.5/01-use-proper-tools-for-cross-build.patch b/recipes/python/python-2.6.5/01-use-proper-tools-for-cross-build.patch
>> index e89faa4..4b485ec 100644
>> --- a/recipes/python/python-2.6.5/01-use-proper-tools-for-cross-build.patch
>> +++ b/recipes/python/python-2.6.5/01-use-proper-tools-for-cross-build.patch
>> @@ -14,7 +14,7 @@ Index: Python-2.6.1/Makefile.pre.in
>>
>>   # The task to run while instrument when building the profile-opt target
>>   PROFILE_TASK=       $(srcdir)/Tools/pybench/pybench.py -n 2 --with-gc --with-syscheck
>> -@@ -205,7 +206,7 @@ GRAMMAR_INPUT=   $(srcdir)/Grammar/Grammar
>> +@@ -206,7 +207,7 @@ GRAMMAR_INPUT=   $(srcdir)/Grammar/Grammar
>>   ##########################################################################
>>   # Parser
>>   PGEN=               Parser/pgen$(EXE)
>> @@ -23,7 +23,7 @@ Index: Python-2.6.1/Makefile.pre.in
>>   POBJS=              \
>>               Parser/acceler.o \
>>               Parser/grammar1.o \
>> -@@ -394,8 +395,8 @@ platform: $(BUILDPYTHON)
>> +@@ -395,8 +396,8 @@ platform: $(BUILDPYTHON)
>>   # Build the shared modules
>>   sharedmods: $(BUILDPYTHON)
>>       @case $$MAKEFLAGS in \
>> @@ -34,16 +34,16 @@ Index: Python-2.6.1/Makefile.pre.in
>>       esac
>>
>>   # Build static library
>> -@@ -513,7 +514,7 @@ Modules/python.o: $(srcdir)/Modules/pyth
>> +@@ -531,7 +532,7 @@ $(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)
>>  +            -$(HOSTPGEN) $(GRAMMAR_INPUT) $(GRAMMAR_H) $(GRAMMAR_C)
>> +             touch $(GRAMMAR_STAMP)
>>
>>   $(PGEN):    $(PGENOBJS)
>> -             $(CC) $(OPT) $(LDFLAGS) $(PGENOBJS) $(LIBS) -o $(PGEN)
>> -@@ -879,23 +880,23 @@ libinstall:    build_all $(srcdir)/Lib/$(PL
>> +@@ -902,23 +903,23 @@ libinstall:    build_all $(srcdir)/Lib/$(PL
>>       done
>>       $(INSTALL_DATA) $(srcdir)/LICENSE $(DESTDIR)$(LIBDEST)/LICENSE.txt
>>       PYTHONPATH=$(DESTDIR)$(LIBDEST)  $(RUNSHARED) \
>> @@ -72,7 +72,7 @@ Index: Python-2.6.1/Makefile.pre.in
>>
>>   # Create the PLATDIR source directory, if one wasn't distributed..
>>   $(srcdir)/Lib/$(PLATDIR):
>> -@@ -993,7 +994,7 @@ libainstall:     all
>> +@@ -1016,7 +1017,7 @@ libainstall:   all
>>   # Install the dynamically loadable modules
>>   # This goes into $(exec_prefix)
>>   sharedinstall:
>> diff --git a/recipes/python/python-native_2.6.5.bb b/recipes/python/python-native_2.6.5.bb
>> index 76fbbb6..51a1fb1 100644
>> --- a/recipes/python/python-native_2.6.5.bb
>> +++ b/recipes/python/python-native_2.6.5.bb
>> @@ -1,9 +1,10 @@
>>  require python.inc
>>  DEPENDS = "openssl-native bzip2-full-native zlib-native readline-native sqlite3-native"
>> -PR = "${INC_PR}.0"
>> +PR = "${INC_PR}.1"
>>
>>  FILESPATHPKG .= ":python-${PV}:python"
>>  SRC_URI = "http://www.python.org/ftp/python/${PV}/Python-${PV}.tar.bz2 \
>> +           file://00-fix-parallel-make.patch \
>>             file://00-fix-bindir-libdir-for-cross.patch \
>>             file://04-default-is-optimized.patch \
>>             file://05-enable-ctypes-cross-build.patch \
>> diff --git a/recipes/python/python_2.6.5.bb b/recipes/python/python_2.6.5.bb
>> index ecd9f78..c8393c1 100644
>> --- a/recipes/python/python_2.6.5.bb
>> +++ b/recipes/python/python_2.6.5.bb
>> @@ -3,10 +3,11 @@ DEPENDS = "python-native db gdbm openssl readline sqlite3 tcl zlib\
>>             ${@base_contains('DISTRO_FEATURES', 'tk', 'tk', '', d)}"
>>  DEPENDS_sharprom = "python-native db readline zlib gdbm openssl"
>>  # set to .0 on every increase of INC_PR
>> -PR = "${INC_PR}.0"
>> +PR = "${INC_PR}.1"
>>
>>  SRC_URI = "\
>>    http://www.python.org/ftp/python/${PV}/Python-${PV}.tar.bz2 \
>> +  file://00-fix-parallel-make.patch \
>>    file://00-fix-bindir-libdir-for-cross.patch \
>>    file://01-use-proper-tools-for-cross-build.patch \
>>    file://02-remove-test-for-cross.patch \
>
>
> Thanks,
>
> Paul
>
>
> [1] http://patchwork.openembedded.org/patch/3153/
>
> _______________________________________________
> Openembedded-devel mailing list
> Openembedded-devel at lists.openembedded.org
> http://lists.linuxtogo.org/cgi-bin/mailman/listinfo/openembedded-devel
>
>




More information about the Openembedded-devel mailing list