[OE-core] [PATCH RFC] autotools: Improve configure dependency code for finding m4 files

Martin Jansa martin.jansa at gmail.com
Mon Jun 2 21:47:11 UTC 2014


On Mon, Jun 02, 2014 at 09:15:01PM +0100, Richard Purdie wrote:
> We have an open bug about the warnings issues in builds from an sstate
> cache when something like glib-2.0 gets rebuilt. The issue is that
> sstate is "clever" and prunes unneeded dependencies out the tree.
> 
> For example is X depends on pkgconfig-native but we've already build X
> and installed it from sstate, it will not get installed when you build Y
> which depends on X.
> 
> This patch changes the logic to match the sstate behaviour and prune out
> unnecessary dependencies from the scope of aclocal. This in turn removes
> the warning about missing manifest files.
> 
> The issue is that this patch exposes holes in our DEPENDS in recipes,
> specifically that some native tools are not listed, specifically, and
> problematically, pkgconfig, gtk-doc and intltool-native in particular.
> 
> I've sent out patches against OE-Core that address the bulk of the
> issues there however I'm conscious this is probably going to a bug issue
> in other layers and may be too annoying to consider at this point. The
> other alternative is simply to turn the warning into a debug statement.

I'm fine with new warning like this, because I would say that fixing
this has higher priority than e.g. QA warnings we have, so it's
annoying, but easy to fix.

If you wait +- a week I can do test run on my world builds and report
how many warnings it shows.

> I appreciate the code below has commented blocks, this is simply debug
> I've left around for now. It will be cleaned from any final version.
> 
> Signed-off-by: Richard Purdie <richard.purdie at linuxfoundation.org>
> 
> diff --git a/meta/classes/autotools.bbclass b/meta/classes/autotools.bbclass
> index 0dc1e6b..34d432e 100644
> --- a/meta/classes/autotools.bbclass
> +++ b/meta/classes/autotools.bbclass
> @@ -142,15 +142,51 @@ python autotools_copy_aclocals () {
>              return
>  
>      taskdepdata = d.getVar("BB_TASKDEPDATA", False)
> +    #bb.warn(str(taskdepdata))
>      pn = d.getVar("PN", True)
>      aclocaldir = d.getVar("ACLOCALDIR", True)
>      oe.path.remove(aclocaldir)
>      bb.utils.mkdirhier(aclocaldir)
> +    start = None
>      configuredeps = []
> +
>      for dep in taskdepdata:
>          data = taskdepdata[dep]
> -        if data[1] == "do_configure" and data[0] != pn:
> -            configuredeps.append(data[0])
> +        if data[1] == "do_configure" and data[0] == pn:
> +            start = dep
> +            break
> +    if not start:
> +        bb.fatal("Couldn't find ourself in BB_TASKDEPDATA?")
> +
> +    # We need to find configure tasks which are either from <target> -> <target>
> +    # or <native> -> <native> but not <target> -> <native> unless they're direct
> +    # dependencies. This mirrors what would get restored from sstate.
> +    done = [dep]
> +    next = [dep]
> +    while next:
> +        new = []
> +        for dep in next:
> +            data = taskdepdata[dep]
> +            for datadep in data[3]:
> +                if datadep in done:
> +                    continue
> +                done.append(datadep)
> +                if (not data[0].endswith("-native")) and taskdepdata[datadep][0].endswith("-native") and dep != start:
> +                    continue
> +                new.append(datadep)
> +                if taskdepdata[datadep][1] == "do_configure":
> +                    configuredeps.append(taskdepdata[datadep][0])
> +        next = new
> +
> +    #configuredeps2 = []
> +    #for dep in taskdepdata:
> +    #    data = taskdepdata[dep]
> +    #    if data[1] == "do_configure" and data[0] != pn:
> +    #        configuredeps2.append(data[0])
> +    #configuredeps.sort()
> +    #configuredeps2.sort()
> +    #bb.warn(str(configuredeps))
> +    #bb.warn(str(configuredeps2))
>  
>      cp = []
>      for c in configuredeps:
> 
> 

-- 
Martin 'JaMa' Jansa     jabber: Martin.Jansa at gmail.com
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 198 bytes
Desc: Digital signature
URL: <http://lists.openembedded.org/pipermail/openembedded-core/attachments/20140602/6b724d9e/attachment-0002.sig>


More information about the Openembedded-core mailing list