Openembedded Core Discussions
 help / color / mirror / Atom feed
* [PATCH 0/3] Update the sanity check and make
@ 2013-06-24 14:45 Mark Hatle
  2013-06-24 14:45 ` [PATCH 1/3] sanity.bbclass: Check for the known broken version of make Mark Hatle
                   ` (2 more replies)
  0 siblings, 3 replies; 9+ messages in thread
From: Mark Hatle @ 2013-06-24 14:45 UTC (permalink / raw)
  To: openembedded-core

The sanity check should also look for the broken version of make.

Our version of make also happens to be broken, so fix that as well.

And add nativesdk-make to the buildtools-tarball, to assist people with
broken buildtools.  (Note, current Fedora and CentOS machines contain
the broken make as well.  A patch is pending in the Fedora community
to update this.)

Mark Hatle (3):
  sanity.bbclass: Check for the known broken version of make
  make: Fix second part of bug Savannah 30612
  buildtools-tarball: Add nativesdk-make

 meta/classes/sanity.bbclass                        | 39 +++++++++++++++
 meta/recipes-core/meta/buildtools-tarball.bb       |  3 +-
 .../make-savannah-bug30612-fix_white_space.patch   | 58 ++++++++++++++++++++++
 meta/recipes-devtools/make/make_3.82.bb            |  5 +-
 4 files changed, 102 insertions(+), 3 deletions(-)
 create mode 100644 meta/recipes-devtools/make/make-3.82/make-savannah-bug30612-fix_white_space.patch

-- 
1.8.3.1



^ permalink raw reply	[flat|nested] 9+ messages in thread

* [PATCH 1/3] sanity.bbclass: Check for the known broken version of make
  2013-06-24 14:45 [PATCH 0/3] Update the sanity check and make Mark Hatle
@ 2013-06-24 14:45 ` Mark Hatle
  2013-06-24 22:09   ` Saul Wold
  2013-06-24 14:45 ` [PATCH 2/3] make: Fix second part of bug Savannah 30612 Mark Hatle
  2013-06-24 14:45 ` [PATCH 3/3] buildtools-tarball: Add nativesdk-make Mark Hatle
  2 siblings, 1 reply; 9+ messages in thread
From: Mark Hatle @ 2013-06-24 14:45 UTC (permalink / raw)
  To: openembedded-core

See GNU Savannah bug 30612 -- make 3.82 is known to be broken.

A number of vendors are providing a modified version, so checking
for just the version string is not enough.  We also need to check
if the patch for the issue has been applied.  We use a modified
version of the reproduced to check for the issue.

Signed-off-by: Mark Hatle <mark.hatle@windriver.com>
---
 meta/classes/sanity.bbclass | 39 +++++++++++++++++++++++++++++++++++++++
 1 file changed, 39 insertions(+)

diff --git a/meta/classes/sanity.bbclass b/meta/classes/sanity.bbclass
index 7f95f31..dc251a1 100644
--- a/meta/classes/sanity.bbclass
+++ b/meta/classes/sanity.bbclass
@@ -336,6 +336,41 @@ def check_gcc_march(sanity_data):
 
     return result
 
+# Unpatched versions of make 3.82 are known to be broken.  See GNU Savannah Bug 30612.
+# Use a modified reproducer from http://savannah.gnu.org/bugs/?30612 to validate.
+def check_make_version(sanity_data, loosever):
+    status, result = oe.utils.getstatusoutput("make --version")
+    if status != 0:
+        return "Unable to execute make --version, exit code %s\n" % status
+    version = result.split()[2]
+    if loosever(version) == loosever("3.82"):
+        # Construct a test file
+        f = open("makefile_test", "w")
+        f.write("makefile_test.a: makefile_test_a.c makefile_test_b.c makefile_test.a( makefile_test_a.c makefile_test_b.c)\n")
+        f.write("\n")
+        f.write("makefile_test_a.c:\n")
+        f.write("	touch $@\n")
+        f.write("\n")
+        f.write("makefile_test_b.c:\n")
+        f.write("	touch $@\n")
+        f.close()
+
+        # Check if make 3.82 has been patched
+        status,result = oe.utils.getstatusoutput("make -f makefile_test")
+
+        os.remove("makefile_test")
+        if os.path.exists("makefile_test_a.c"):
+            os.remove("makefile_test_a.c")
+        if os.path.exists("makefile_test_b.c"):
+            os.remove("makefile_test_b.c")
+        if os.path.exists("makefile_test.a"):
+            os.remove("makefile_test.a")
+
+        if status != 0:
+            return "Your version of make 3.82 is broken. Please revert to 3.81 or install a patched version.\n"
+    return None
+
+
 # Tar version 1.24 and onwards handle overwriting symlinks correctly
 # but earlier versions do not; this needs to work properly for sstate
 def check_tar_version(sanity_data, loosever):
@@ -407,6 +442,10 @@ def check_sanity(sanity_data):
         messages = messages + 'Please set a MACHINE in your local.conf or environment\n'
         machinevalid = False
 
+    makemsg = check_make_version(sanity_data, LooseVersion)
+    if makemsg:
+        messages = messages + makemsg
+
     tarmsg = check_tar_version(sanity_data, LooseVersion)
     if tarmsg:
         messages = messages + tarmsg
-- 
1.8.3.1



^ permalink raw reply related	[flat|nested] 9+ messages in thread

* [PATCH 2/3] make: Fix second part of bug Savannah 30612
  2013-06-24 14:45 [PATCH 0/3] Update the sanity check and make Mark Hatle
  2013-06-24 14:45 ` [PATCH 1/3] sanity.bbclass: Check for the known broken version of make Mark Hatle
@ 2013-06-24 14:45 ` Mark Hatle
  2013-06-24 14:45 ` [PATCH 3/3] buildtools-tarball: Add nativesdk-make Mark Hatle
  2 siblings, 0 replies; 9+ messages in thread
From: Mark Hatle @ 2013-06-24 14:45 UTC (permalink / raw)
  To: openembedded-core

The Savannah bug 30612 describes two different issue.  The first,
previously fixed, errors parsing multiple objects in parenthesis.
The second, (this issue), extra white space contained in the
parenthesis.

The fix was backported from the current make git tree:
http://git.savannah.gnu.org/cgit/make.git/commit/?id=b06b8c64a29a5ba3a8daecd829fa2f98d42cb285

Signed-off-by: Mark Hatle <mark.hatle@windriver.com>
---
 .../make-savannah-bug30612-fix_white_space.patch   | 58 ++++++++++++++++++++++
 meta/recipes-devtools/make/make_3.82.bb            |  3 +-
 2 files changed, 60 insertions(+), 1 deletion(-)
 create mode 100644 meta/recipes-devtools/make/make-3.82/make-savannah-bug30612-fix_white_space.patch

diff --git a/meta/recipes-devtools/make/make-3.82/make-savannah-bug30612-fix_white_space.patch b/meta/recipes-devtools/make/make-3.82/make-savannah-bug30612-fix_white_space.patch
new file mode 100644
index 0000000..0ef501f
--- /dev/null
+++ b/meta/recipes-devtools/make/make-3.82/make-savannah-bug30612-fix_white_space.patch
@@ -0,0 +1,58 @@
+Fix another error related to whitespace handling in archives.
+
+2011-06-12  Paul Smith  <psmith@gnu.org>
+
+* read.c (parse_file_seq): Move the check for empty members out of
+the loop so we can go to the next member properly.
+Another fix for Savannah bug #30612.
+
+Upstream-Status: Backport
+
+---
+ read.c                          | 10 +++++-----
+ tests/scripts/features/archives |  5 +++++
+ 5 files changed, 30 insertions(+), 5 deletions(-)
+
+diff --git a/read.c b/read.c
+index c87d4a7..b012094 100644
+--- a/read.c
++++ b/read.c
+@@ -3044,16 +3044,16 @@ parse_file_seq (char **stringp, unsigned int size, int stopchar,
+                       nlen -= (n + 1) - tp;
+                       tp = n + 1;
+ 
+-                      /* If we have just "lib(", part of something like
+-                         "lib( a b)", go to the next item.  */
+-                      if (! nlen)
+-                        continue;
+-
+                       /* We can stop looking now.  */
+                       break;
+                     }
+                 }
+               while (*e != '\0');
++
++              /* If we have just "lib(", part of something like "lib( a b)",
++                 go to the next item.  */
++              if (! nlen)
++                continue;
+             }
+         }
+ 
+diff --git a/tests/scripts/features/archives b/tests/scripts/features/archives
+index 00aa1af..3fe46a0 100644
+--- a/tests/scripts/features/archives
++++ b/tests/scripts/features/archives
+@@ -36,6 +36,11 @@ utouch(-50, 'a2.o');
+ run_make_test('all: libxx.a(a3.o *.o)', '',
+               "ar rv libxx.a a3.o\na - a3.o\nar rv libxx.a a2.o\nr - a2.o\n");
+ 
++# Check whitespace handling
++utouch(-40, 'a2.o');
++run_make_test('all: libxx.a(  a3.o    *.o     )', '',
++              "ar rv libxx.a a2.o\nr - a2.o\n");
++
+ rmfiles(qw(a1.o a2.o a3.o libxx.a));
+ 
+ # This tells the test driver that the perl test script executed properly.
+
diff --git a/meta/recipes-devtools/make/make_3.82.bb b/meta/recipes-devtools/make/make_3.82.bb
index b4292b5..8a2f287 100644
--- a/meta/recipes-devtools/make/make_3.82.bb
+++ b/meta/recipes-devtools/make/make_3.82.bb
@@ -7,7 +7,8 @@ require make.inc
 
 SRC_URI += "file://expand_MAKEFLAGS.patch \
             file://intermediate-target-bugfix.patch \
-            file://make-savannah-bug30612-handling_of_archives.patch;striplevel=0"
+            file://make-savannah-bug30612-handling_of_archives.patch;striplevel=0 \
+            file://make-savannah-bug30612-fix_white_space.patch"
 
 SRC_URI[md5sum] = "1a11100f3c63fcf5753818e59d63088f"
 SRC_URI[sha256sum] = "e2c1a73f179c40c71e2fe8abf8a8a0688b8499538512984da4a76958d0402966"
-- 
1.8.3.1



^ permalink raw reply related	[flat|nested] 9+ messages in thread

* [PATCH 3/3] buildtools-tarball: Add nativesdk-make
  2013-06-24 14:45 [PATCH 0/3] Update the sanity check and make Mark Hatle
  2013-06-24 14:45 ` [PATCH 1/3] sanity.bbclass: Check for the known broken version of make Mark Hatle
  2013-06-24 14:45 ` [PATCH 2/3] make: Fix second part of bug Savannah 30612 Mark Hatle
@ 2013-06-24 14:45 ` Mark Hatle
  2 siblings, 0 replies; 9+ messages in thread
From: Mark Hatle @ 2013-06-24 14:45 UTC (permalink / raw)
  To: openembedded-core

Recently it was discovered that many Fedora hosts have a broken version of
make 3.82.  Add make to the buildtools-tarball, as well ad modify make to
support building a special nativesdk version.

Signed-off-by: Mark Hatle <mark.hatle@windriver.com>
---
 meta/recipes-core/meta/buildtools-tarball.bb | 3 ++-
 meta/recipes-devtools/make/make_3.82.bb      | 2 +-
 2 files changed, 3 insertions(+), 2 deletions(-)

diff --git a/meta/recipes-core/meta/buildtools-tarball.bb b/meta/recipes-core/meta/buildtools-tarball.bb
index 7a91c6b..f8024f9 100644
--- a/meta/recipes-core/meta/buildtools-tarball.bb
+++ b/meta/recipes-core/meta/buildtools-tarball.bb
@@ -1,4 +1,4 @@
-DESCRIPTION = "SDK type target for building a standalone tarball containing python, chrpath, git and tar. The \
+DESCRIPTION = "SDK type target for building a standalone tarball containing python, chrpath, make, git and tar. The \
                tarball can be used to run bitbake builds on systems which don't meet the usual version requirements."
 SUMMARY = "Standalone tarball for running builds on systems with inadequate software"
 LICENSE = "MIT"
@@ -36,6 +36,7 @@ TOOLCHAIN_HOST_TASK ?= "\
     nativesdk-chrpath \
     nativesdk-tar \
     nativesdk-git \
+    nativesdk-make \
     "
 
 TOOLCHAIN_OUTPUTNAME ?= "${SDK_NAME}-buildtools-nativesdk-standalone-${DISTRO_VERSION}"
diff --git a/meta/recipes-devtools/make/make_3.82.bb b/meta/recipes-devtools/make/make_3.82.bb
index 8a2f287..6cc467d 100644
--- a/meta/recipes-devtools/make/make_3.82.bb
+++ b/meta/recipes-devtools/make/make_3.82.bb
@@ -13,4 +13,4 @@ SRC_URI += "file://expand_MAKEFLAGS.patch \
 SRC_URI[md5sum] = "1a11100f3c63fcf5753818e59d63088f"
 SRC_URI[sha256sum] = "e2c1a73f179c40c71e2fe8abf8a8a0688b8499538512984da4a76958d0402966"
 
-BBCLASSEXTEND = "native"
+BBCLASSEXTEND = "native nativesdk"
-- 
1.8.3.1



^ permalink raw reply related	[flat|nested] 9+ messages in thread

* Re: [PATCH 1/3] sanity.bbclass: Check for the known broken version of make
  2013-06-24 14:45 ` [PATCH 1/3] sanity.bbclass: Check for the known broken version of make Mark Hatle
@ 2013-06-24 22:09   ` Saul Wold
  2013-06-25  2:06     ` Mark Hatle
  0 siblings, 1 reply; 9+ messages in thread
From: Saul Wold @ 2013-06-24 22:09 UTC (permalink / raw)
  To: Mark Hatle; +Cc: openembedded-core

On 06/24/2013 07:45 AM, Mark Hatle wrote:
> See GNU Savannah bug 30612 -- make 3.82 is known to be broken.
>
> A number of vendors are providing a modified version, so checking
> for just the version string is not enough.  We also need to check
> if the patch for the issue has been applied.  We use a modified
> version of the reproduced to check for the issue.
>
> Signed-off-by: Mark Hatle <mark.hatle@windriver.com>
> ---
>   meta/classes/sanity.bbclass | 39 +++++++++++++++++++++++++++++++++++++++
>   1 file changed, 39 insertions(+)
>

Seems this needs a rebase since RP also changed sanity.bbclass recently.

Sau!

> diff --git a/meta/classes/sanity.bbclass b/meta/classes/sanity.bbclass
> index 7f95f31..dc251a1 100644
> --- a/meta/classes/sanity.bbclass
> +++ b/meta/classes/sanity.bbclass
> @@ -336,6 +336,41 @@ def check_gcc_march(sanity_data):
>
>       return result
>
> +# Unpatched versions of make 3.82 are known to be broken.  See GNU Savannah Bug 30612.
> +# Use a modified reproducer from http://savannah.gnu.org/bugs/?30612 to validate.
> +def check_make_version(sanity_data, loosever):
> +    status, result = oe.utils.getstatusoutput("make --version")
> +    if status != 0:
> +        return "Unable to execute make --version, exit code %s\n" % status
> +    version = result.split()[2]
> +    if loosever(version) == loosever("3.82"):
> +        # Construct a test file
> +        f = open("makefile_test", "w")
> +        f.write("makefile_test.a: makefile_test_a.c makefile_test_b.c makefile_test.a( makefile_test_a.c makefile_test_b.c)\n")
> +        f.write("\n")
> +        f.write("makefile_test_a.c:\n")
> +        f.write("	touch $@\n")
> +        f.write("\n")
> +        f.write("makefile_test_b.c:\n")
> +        f.write("	touch $@\n")
> +        f.close()
> +
> +        # Check if make 3.82 has been patched
> +        status,result = oe.utils.getstatusoutput("make -f makefile_test")
> +
> +        os.remove("makefile_test")
> +        if os.path.exists("makefile_test_a.c"):
> +            os.remove("makefile_test_a.c")
> +        if os.path.exists("makefile_test_b.c"):
> +            os.remove("makefile_test_b.c")
> +        if os.path.exists("makefile_test.a"):
> +            os.remove("makefile_test.a")
> +
> +        if status != 0:
> +            return "Your version of make 3.82 is broken. Please revert to 3.81 or install a patched version.\n"
> +    return None
> +
> +
>   # Tar version 1.24 and onwards handle overwriting symlinks correctly
>   # but earlier versions do not; this needs to work properly for sstate
>   def check_tar_version(sanity_data, loosever):
> @@ -407,6 +442,10 @@ def check_sanity(sanity_data):
>           messages = messages + 'Please set a MACHINE in your local.conf or environment\n'
>           machinevalid = False
>
> +    makemsg = check_make_version(sanity_data, LooseVersion)
> +    if makemsg:
> +        messages = messages + makemsg
> +
>       tarmsg = check_tar_version(sanity_data, LooseVersion)
>       if tarmsg:
>           messages = messages + tarmsg
>


^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH 1/3] sanity.bbclass: Check for the known broken version of make
  2013-06-24 22:09   ` Saul Wold
@ 2013-06-25  2:06     ` Mark Hatle
  2013-06-25 11:20       ` Martin Jansa
  0 siblings, 1 reply; 9+ messages in thread
From: Mark Hatle @ 2013-06-25  2:06 UTC (permalink / raw)
  To: Saul Wold; +Cc: openembedded-core

On 6/24/13 5:09 PM, Saul Wold wrote:
> On 06/24/2013 07:45 AM, Mark Hatle wrote:
>> See GNU Savannah bug 30612 -- make 3.82 is known to be broken.
>>
>> A number of vendors are providing a modified version, so checking
>> for just the version string is not enough.  We also need to check
>> if the patch for the issue has been applied.  We use a modified
>> version of the reproduced to check for the issue.
>>
>> Signed-off-by: Mark Hatle <mark.hatle@windriver.com>
>> ---
>>    meta/classes/sanity.bbclass | 39 +++++++++++++++++++++++++++++++++++++++
>>    1 file changed, 39 insertions(+)
>>
>
> Seems this needs a rebase since RP also changed sanity.bbclass recently.

This is from Friday morning.  I'll start a rebase and send new code when I have 
it ready.

--Mark

> Sau!
>
>> diff --git a/meta/classes/sanity.bbclass b/meta/classes/sanity.bbclass
>> index 7f95f31..dc251a1 100644
>> --- a/meta/classes/sanity.bbclass
>> +++ b/meta/classes/sanity.bbclass
>> @@ -336,6 +336,41 @@ def check_gcc_march(sanity_data):
>>
>>        return result
>>
>> +# Unpatched versions of make 3.82 are known to be broken.  See GNU Savannah Bug 30612.
>> +# Use a modified reproducer from http://savannah.gnu.org/bugs/?30612 to validate.
>> +def check_make_version(sanity_data, loosever):
>> +    status, result = oe.utils.getstatusoutput("make --version")
>> +    if status != 0:
>> +        return "Unable to execute make --version, exit code %s\n" % status
>> +    version = result.split()[2]
>> +    if loosever(version) == loosever("3.82"):
>> +        # Construct a test file
>> +        f = open("makefile_test", "w")
>> +        f.write("makefile_test.a: makefile_test_a.c makefile_test_b.c makefile_test.a( makefile_test_a.c makefile_test_b.c)\n")
>> +        f.write("\n")
>> +        f.write("makefile_test_a.c:\n")
>> +        f.write("	touch $@\n")
>> +        f.write("\n")
>> +        f.write("makefile_test_b.c:\n")
>> +        f.write("	touch $@\n")
>> +        f.close()
>> +
>> +        # Check if make 3.82 has been patched
>> +        status,result = oe.utils.getstatusoutput("make -f makefile_test")
>> +
>> +        os.remove("makefile_test")
>> +        if os.path.exists("makefile_test_a.c"):
>> +            os.remove("makefile_test_a.c")
>> +        if os.path.exists("makefile_test_b.c"):
>> +            os.remove("makefile_test_b.c")
>> +        if os.path.exists("makefile_test.a"):
>> +            os.remove("makefile_test.a")
>> +
>> +        if status != 0:
>> +            return "Your version of make 3.82 is broken. Please revert to 3.81 or install a patched version.\n"
>> +    return None
>> +
>> +
>>    # Tar version 1.24 and onwards handle overwriting symlinks correctly
>>    # but earlier versions do not; this needs to work properly for sstate
>>    def check_tar_version(sanity_data, loosever):
>> @@ -407,6 +442,10 @@ def check_sanity(sanity_data):
>>            messages = messages + 'Please set a MACHINE in your local.conf or environment\n'
>>            machinevalid = False
>>
>> +    makemsg = check_make_version(sanity_data, LooseVersion)
>> +    if makemsg:
>> +        messages = messages + makemsg
>> +
>>        tarmsg = check_tar_version(sanity_data, LooseVersion)
>>        if tarmsg:
>>            messages = messages + tarmsg
>>



^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH 1/3] sanity.bbclass: Check for the known broken version of make
  2013-06-25  2:06     ` Mark Hatle
@ 2013-06-25 11:20       ` Martin Jansa
  2013-06-25 14:12         ` Mark Hatle
  0 siblings, 1 reply; 9+ messages in thread
From: Martin Jansa @ 2013-06-25 11:20 UTC (permalink / raw)
  To: Mark Hatle; +Cc: openembedded-core

[-- Attachment #1: Type: text/plain, Size: 4221 bytes --]

On Mon, Jun 24, 2013 at 09:06:11PM -0500, Mark Hatle wrote:
> On 6/24/13 5:09 PM, Saul Wold wrote:
> > On 06/24/2013 07:45 AM, Mark Hatle wrote:
> >> See GNU Savannah bug 30612 -- make 3.82 is known to be broken.
> >>
> >> A number of vendors are providing a modified version, so checking
> >> for just the version string is not enough.  We also need to check
> >> if the patch for the issue has been applied.  We use a modified
> >> version of the reproduced to check for the issue.
> >>
> >> Signed-off-by: Mark Hatle <mark.hatle@windriver.com>
> >> ---
> >>    meta/classes/sanity.bbclass | 39 +++++++++++++++++++++++++++++++++++++++
> >>    1 file changed, 39 insertions(+)
> >>
> >
> > Seems this needs a rebase since RP also changed sanity.bbclass recently.
> 
> This is from Friday morning.  I'll start a rebase and send new code when I have 
> it ready.

There is another issues with unpatched make-3.82, webkit and newer
nodejs are failing for some people.
https://savannah.gnu.org/bugs/?36451

What about for cycle which generates some very long "ls" or something
like that?

On other hand so long commands arn't so common, so many people
could be using "broken" make without seeing issues with their images.

> 
> --Mark
> 
> > Sau!
> >
> >> diff --git a/meta/classes/sanity.bbclass b/meta/classes/sanity.bbclass
> >> index 7f95f31..dc251a1 100644
> >> --- a/meta/classes/sanity.bbclass
> >> +++ b/meta/classes/sanity.bbclass
> >> @@ -336,6 +336,41 @@ def check_gcc_march(sanity_data):
> >>
> >>        return result
> >>
> >> +# Unpatched versions of make 3.82 are known to be broken.  See GNU Savannah Bug 30612.
> >> +# Use a modified reproducer from http://savannah.gnu.org/bugs/?30612 to validate.
> >> +def check_make_version(sanity_data, loosever):
> >> +    status, result = oe.utils.getstatusoutput("make --version")
> >> +    if status != 0:
> >> +        return "Unable to execute make --version, exit code %s\n" % status
> >> +    version = result.split()[2]
> >> +    if loosever(version) == loosever("3.82"):
> >> +        # Construct a test file
> >> +        f = open("makefile_test", "w")
> >> +        f.write("makefile_test.a: makefile_test_a.c makefile_test_b.c makefile_test.a( makefile_test_a.c makefile_test_b.c)\n")
> >> +        f.write("\n")
> >> +        f.write("makefile_test_a.c:\n")
> >> +        f.write("	touch $@\n")
> >> +        f.write("\n")
> >> +        f.write("makefile_test_b.c:\n")
> >> +        f.write("	touch $@\n")
> >> +        f.close()
> >> +
> >> +        # Check if make 3.82 has been patched
> >> +        status,result = oe.utils.getstatusoutput("make -f makefile_test")
> >> +
> >> +        os.remove("makefile_test")
> >> +        if os.path.exists("makefile_test_a.c"):
> >> +            os.remove("makefile_test_a.c")
> >> +        if os.path.exists("makefile_test_b.c"):
> >> +            os.remove("makefile_test_b.c")
> >> +        if os.path.exists("makefile_test.a"):
> >> +            os.remove("makefile_test.a")
> >> +
> >> +        if status != 0:
> >> +            return "Your version of make 3.82 is broken. Please revert to 3.81 or install a patched version.\n"
> >> +    return None
> >> +
> >> +
> >>    # Tar version 1.24 and onwards handle overwriting symlinks correctly
> >>    # but earlier versions do not; this needs to work properly for sstate
> >>    def check_tar_version(sanity_data, loosever):
> >> @@ -407,6 +442,10 @@ def check_sanity(sanity_data):
> >>            messages = messages + 'Please set a MACHINE in your local.conf or environment\n'
> >>            machinevalid = False
> >>
> >> +    makemsg = check_make_version(sanity_data, LooseVersion)
> >> +    if makemsg:
> >> +        messages = messages + makemsg
> >> +
> >>        tarmsg = check_tar_version(sanity_data, LooseVersion)
> >>        if tarmsg:
> >>            messages = messages + tarmsg
> >>
> 
> _______________________________________________
> Openembedded-core mailing list
> Openembedded-core@lists.openembedded.org
> http://lists.openembedded.org/mailman/listinfo/openembedded-core

-- 
Martin 'JaMa' Jansa     jabber: Martin.Jansa@gmail.com

[-- Attachment #2: Digital signature --]
[-- Type: application/pgp-signature, Size: 205 bytes --]

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH 1/3] sanity.bbclass: Check for the known broken version of make
  2013-06-25 11:20       ` Martin Jansa
@ 2013-06-25 14:12         ` Mark Hatle
  2013-06-25 14:26           ` Martin Jansa
  0 siblings, 1 reply; 9+ messages in thread
From: Mark Hatle @ 2013-06-25 14:12 UTC (permalink / raw)
  To: Martin Jansa; +Cc: openembedded-core

On 6/25/13 6:20 AM, Martin Jansa wrote:
> On Mon, Jun 24, 2013 at 09:06:11PM -0500, Mark Hatle wrote:
>> On 6/24/13 5:09 PM, Saul Wold wrote:
>>> On 06/24/2013 07:45 AM, Mark Hatle wrote:
>>>> See GNU Savannah bug 30612 -- make 3.82 is known to be broken.
>>>>
>>>> A number of vendors are providing a modified version, so checking
>>>> for just the version string is not enough.  We also need to check
>>>> if the patch for the issue has been applied.  We use a modified
>>>> version of the reproduced to check for the issue.
>>>>
>>>> Signed-off-by: Mark Hatle <mark.hatle@windriver.com>
>>>> ---
>>>>     meta/classes/sanity.bbclass | 39 +++++++++++++++++++++++++++++++++++++++
>>>>     1 file changed, 39 insertions(+)
>>>>
>>>
>>> Seems this needs a rebase since RP also changed sanity.bbclass recently.
>>
>> This is from Friday morning.  I'll start a rebase and send new code when I have
>> it ready.
>
> There is another issues with unpatched make-3.82, webkit and newer
> nodejs are failing for some people.
> https://savannah.gnu.org/bugs/?36451
>
> What about for cycle which generates some very long "ls" or something
> like that?
>
> On other hand so long commands arn't so common, so many people
> could be using "broken" make without seeing issues with their images.

If you can point me to a reproducer, I'm happy to add it to the sanity check as 
part of the rebase work.

The current reproducer covers two cases (see the patch for the savannah bug 
number).  These were the two cases that I knew had caused problems for others in 
the past.

--Mark

>>
>> --Mark
>>
>>> Sau!
>>>
>>>> diff --git a/meta/classes/sanity.bbclass b/meta/classes/sanity.bbclass
>>>> index 7f95f31..dc251a1 100644
>>>> --- a/meta/classes/sanity.bbclass
>>>> +++ b/meta/classes/sanity.bbclass
>>>> @@ -336,6 +336,41 @@ def check_gcc_march(sanity_data):
>>>>
>>>>         return result
>>>>
>>>> +# Unpatched versions of make 3.82 are known to be broken.  See GNU Savannah Bug 30612.
>>>> +# Use a modified reproducer from http://savannah.gnu.org/bugs/?30612 to validate.
>>>> +def check_make_version(sanity_data, loosever):
>>>> +    status, result = oe.utils.getstatusoutput("make --version")
>>>> +    if status != 0:
>>>> +        return "Unable to execute make --version, exit code %s\n" % status
>>>> +    version = result.split()[2]
>>>> +    if loosever(version) == loosever("3.82"):
>>>> +        # Construct a test file
>>>> +        f = open("makefile_test", "w")
>>>> +        f.write("makefile_test.a: makefile_test_a.c makefile_test_b.c makefile_test.a( makefile_test_a.c makefile_test_b.c)\n")
>>>> +        f.write("\n")
>>>> +        f.write("makefile_test_a.c:\n")
>>>> +        f.write("	touch $@\n")
>>>> +        f.write("\n")
>>>> +        f.write("makefile_test_b.c:\n")
>>>> +        f.write("	touch $@\n")
>>>> +        f.close()
>>>> +
>>>> +        # Check if make 3.82 has been patched
>>>> +        status,result = oe.utils.getstatusoutput("make -f makefile_test")
>>>> +
>>>> +        os.remove("makefile_test")
>>>> +        if os.path.exists("makefile_test_a.c"):
>>>> +            os.remove("makefile_test_a.c")
>>>> +        if os.path.exists("makefile_test_b.c"):
>>>> +            os.remove("makefile_test_b.c")
>>>> +        if os.path.exists("makefile_test.a"):
>>>> +            os.remove("makefile_test.a")
>>>> +
>>>> +        if status != 0:
>>>> +            return "Your version of make 3.82 is broken. Please revert to 3.81 or install a patched version.\n"
>>>> +    return None
>>>> +
>>>> +
>>>>     # Tar version 1.24 and onwards handle overwriting symlinks correctly
>>>>     # but earlier versions do not; this needs to work properly for sstate
>>>>     def check_tar_version(sanity_data, loosever):
>>>> @@ -407,6 +442,10 @@ def check_sanity(sanity_data):
>>>>             messages = messages + 'Please set a MACHINE in your local.conf or environment\n'
>>>>             machinevalid = False
>>>>
>>>> +    makemsg = check_make_version(sanity_data, LooseVersion)
>>>> +    if makemsg:
>>>> +        messages = messages + makemsg
>>>> +
>>>>         tarmsg = check_tar_version(sanity_data, LooseVersion)
>>>>         if tarmsg:
>>>>             messages = messages + tarmsg
>>>>
>>
>> _______________________________________________
>> Openembedded-core mailing list
>> Openembedded-core@lists.openembedded.org
>> http://lists.openembedded.org/mailman/listinfo/openembedded-core
>



^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH 1/3] sanity.bbclass: Check for the known broken version of make
  2013-06-25 14:12         ` Mark Hatle
@ 2013-06-25 14:26           ` Martin Jansa
  0 siblings, 0 replies; 9+ messages in thread
From: Martin Jansa @ 2013-06-25 14:26 UTC (permalink / raw)
  To: Mark Hatle; +Cc: openembedded-core

[-- Attachment #1: Type: text/plain, Size: 5342 bytes --]

On Tue, Jun 25, 2013 at 09:12:24AM -0500, Mark Hatle wrote:
> On 6/25/13 6:20 AM, Martin Jansa wrote:
> > On Mon, Jun 24, 2013 at 09:06:11PM -0500, Mark Hatle wrote:
> >> On 6/24/13 5:09 PM, Saul Wold wrote:
> >>> On 06/24/2013 07:45 AM, Mark Hatle wrote:
> >>>> See GNU Savannah bug 30612 -- make 3.82 is known to be broken.
> >>>>
> >>>> A number of vendors are providing a modified version, so checking
> >>>> for just the version string is not enough.  We also need to check
> >>>> if the patch for the issue has been applied.  We use a modified
> >>>> version of the reproduced to check for the issue.
> >>>>
> >>>> Signed-off-by: Mark Hatle <mark.hatle@windriver.com>
> >>>> ---
> >>>>     meta/classes/sanity.bbclass | 39 +++++++++++++++++++++++++++++++++++++++
> >>>>     1 file changed, 39 insertions(+)
> >>>>
> >>>
> >>> Seems this needs a rebase since RP also changed sanity.bbclass recently.
> >>
> >> This is from Friday morning.  I'll start a rebase and send new code when I have
> >> it ready.
> >
> > There is another issues with unpatched make-3.82, webkit and newer
> > nodejs are failing for some people.
> > https://savannah.gnu.org/bugs/?36451
> >
> > What about for cycle which generates some very long "ls" or something
> > like that?
> >
> > On other hand so long commands arn't so common, so many people
> > could be using "broken" make without seeing issues with their images.
> 
> If you can point me to a reproducer, I'm happy to add it to the sanity check as 
> part of the rebase work.
> 
> The current reproducer covers two cases (see the patch for the savannah bug 
> number).  These were the two cases that I knew had caused problems for others in 
> the past.

I don't have simple reproducer, because it works fine in both make-3.82
I'm using (from Gentoo and Ubuntu) and with my reasonable long TOPDIR.

The problem is triggered in some webkit builds and also in nodejs-0.10.4
http://patchwork.openembedded.org/patch/48253/

Tasslehoff reported today that nodejs was failing for him with
/home/tas/angstrom-setup-scripts and works fine with /home/tas/oe
adding him to Cc, maybe he has better reproducer now.

> 
> --Mark
> 
> >>
> >> --Mark
> >>
> >>> Sau!
> >>>
> >>>> diff --git a/meta/classes/sanity.bbclass b/meta/classes/sanity.bbclass
> >>>> index 7f95f31..dc251a1 100644
> >>>> --- a/meta/classes/sanity.bbclass
> >>>> +++ b/meta/classes/sanity.bbclass
> >>>> @@ -336,6 +336,41 @@ def check_gcc_march(sanity_data):
> >>>>
> >>>>         return result
> >>>>
> >>>> +# Unpatched versions of make 3.82 are known to be broken.  See GNU Savannah Bug 30612.
> >>>> +# Use a modified reproducer from http://savannah.gnu.org/bugs/?30612 to validate.
> >>>> +def check_make_version(sanity_data, loosever):
> >>>> +    status, result = oe.utils.getstatusoutput("make --version")
> >>>> +    if status != 0:
> >>>> +        return "Unable to execute make --version, exit code %s\n" % status
> >>>> +    version = result.split()[2]
> >>>> +    if loosever(version) == loosever("3.82"):
> >>>> +        # Construct a test file
> >>>> +        f = open("makefile_test", "w")
> >>>> +        f.write("makefile_test.a: makefile_test_a.c makefile_test_b.c makefile_test.a( makefile_test_a.c makefile_test_b.c)\n")
> >>>> +        f.write("\n")
> >>>> +        f.write("makefile_test_a.c:\n")
> >>>> +        f.write("	touch $@\n")
> >>>> +        f.write("\n")
> >>>> +        f.write("makefile_test_b.c:\n")
> >>>> +        f.write("	touch $@\n")
> >>>> +        f.close()
> >>>> +
> >>>> +        # Check if make 3.82 has been patched
> >>>> +        status,result = oe.utils.getstatusoutput("make -f makefile_test")
> >>>> +
> >>>> +        os.remove("makefile_test")
> >>>> +        if os.path.exists("makefile_test_a.c"):
> >>>> +            os.remove("makefile_test_a.c")
> >>>> +        if os.path.exists("makefile_test_b.c"):
> >>>> +            os.remove("makefile_test_b.c")
> >>>> +        if os.path.exists("makefile_test.a"):
> >>>> +            os.remove("makefile_test.a")
> >>>> +
> >>>> +        if status != 0:
> >>>> +            return "Your version of make 3.82 is broken. Please revert to 3.81 or install a patched version.\n"
> >>>> +    return None
> >>>> +
> >>>> +
> >>>>     # Tar version 1.24 and onwards handle overwriting symlinks correctly
> >>>>     # but earlier versions do not; this needs to work properly for sstate
> >>>>     def check_tar_version(sanity_data, loosever):
> >>>> @@ -407,6 +442,10 @@ def check_sanity(sanity_data):
> >>>>             messages = messages + 'Please set a MACHINE in your local.conf or environment\n'
> >>>>             machinevalid = False
> >>>>
> >>>> +    makemsg = check_make_version(sanity_data, LooseVersion)
> >>>> +    if makemsg:
> >>>> +        messages = messages + makemsg
> >>>> +
> >>>>         tarmsg = check_tar_version(sanity_data, LooseVersion)
> >>>>         if tarmsg:
> >>>>             messages = messages + tarmsg
> >>>>
> >>
> >> _______________________________________________
> >> Openembedded-core mailing list
> >> Openembedded-core@lists.openembedded.org
> >> http://lists.openembedded.org/mailman/listinfo/openembedded-core
> >
> 

-- 
Martin 'JaMa' Jansa     jabber: Martin.Jansa@gmail.com

[-- Attachment #2: Digital signature --]
[-- Type: application/pgp-signature, Size: 205 bytes --]

^ permalink raw reply	[flat|nested] 9+ messages in thread

end of thread, other threads:[~2013-06-25 14:25 UTC | newest]

Thread overview: 9+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2013-06-24 14:45 [PATCH 0/3] Update the sanity check and make Mark Hatle
2013-06-24 14:45 ` [PATCH 1/3] sanity.bbclass: Check for the known broken version of make Mark Hatle
2013-06-24 22:09   ` Saul Wold
2013-06-25  2:06     ` Mark Hatle
2013-06-25 11:20       ` Martin Jansa
2013-06-25 14:12         ` Mark Hatle
2013-06-25 14:26           ` Martin Jansa
2013-06-24 14:45 ` [PATCH 2/3] make: Fix second part of bug Savannah 30612 Mark Hatle
2013-06-24 14:45 ` [PATCH 3/3] buildtools-tarball: Add nativesdk-make Mark Hatle

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox