[bitbake-devel] [PATCH] siggen: Fix a subtle bug in hash calculation for shared work tasks

Peter Kjellerstedt peter.kjellerstedt at axis.com
Mon Aug 25 15:02:16 UTC 2014


> -----Original Message-----
> From: bitbake-devel-bounces at lists.openembedded.org [mailto:bitbake-
> devel-bounces at lists.openembedded.org] On Behalf Of Richard Purdie
> Sent: den 23 augusti 2014 10:23
> To: bitbake-devel
> Subject: [bitbake-devel] [PATCH] siggen: Fix a subtle bug in hash
> calculation for shared work tasks
> 
> 
> With a shared work task like gcc, the task can be run from a variety of
> different recipes which may have different virtual extensions in place.
> 
> Depending on whether gcc-runtime or nativesdk-gcc-runtime's
> do_preconfigure
> task is called for example will change the sorting of the task hashes
> due
> to the way clean_basename currently works.
> 
> The correct thing to do here is sort on the base filename first, then
> any
> extension when ordering the hashes. This means we do account for things
> like recipes with both a native and non-native dependency but we also
> fix
> the shared work case where we don't care whether it was a virtual
> version
> or not.
> 
> Signed-off-by: Richard Purdie <richard.purdie at linuxfoundation.org>
> 
> diff --git a/bitbake/lib/bb/siggen.py b/bitbake/lib/bb/siggen.py
> index 933311c..548f50d 100644
> --- a/bitbake/lib/bb/siggen.py
> +++ b/bitbake/lib/bb/siggen.py
> @@ -295,7 +295,7 @@ def dump_this_task(outfile, d):
> 
>  def clean_basepath(a):
>      if a.startswith("virtual:"):
> -        b = a.rsplit(":", 1)[0] + ":" + a.rsplit("/", 1)[1]
> +        b = a.rsplit("/", 1)[1] + ":" + a.rsplit(":", 1)[0]
>      else:
>          b = a.rsplit("/", 1)[1]
>      return b

After the rewrite above, this can be simplified as:

def clean_basepath(a):
    b = a.rsplit("/", 1)[1]
    if a.startswith("virtual:"):
        b += ":" + a.rsplit(":", 1)[0]
    return b

//Peter




More information about the bitbake-devel mailing list