Openembedded Core Discussions
 help / color / mirror / Atom feed
From: Martin Jansa <martin.jansa@gmail.com>
To: Richard Purdie <richard.purdie@linuxfoundation.org>
Cc: openembedded-core <openembedded-core@lists.openembedded.org>
Subject: Re: [PATCH RFC] autotools: Improve configure dependency code for finding m4 files
Date: Mon, 2 Jun 2014 23:47:11 +0200	[thread overview]
Message-ID: <20140602214711.GM2426@jama> (raw)
In-Reply-To: <1401740101.12440.22.camel@ted>

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

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@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@gmail.com

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

  reply	other threads:[~2014-06-02 21:46 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-06-02 20:15 [PATCH RFC] autotools: Improve configure dependency code for finding m4 files Richard Purdie
2014-06-02 21:47 ` Martin Jansa [this message]
2014-06-02 22:28   ` Richard Purdie

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20140602214711.GM2426@jama \
    --to=martin.jansa@gmail.com \
    --cc=openembedded-core@lists.openembedded.org \
    --cc=richard.purdie@linuxfoundation.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox