summaryrefslogtreecommitdiffstats
path: root/meta/classes/autotools.bbclass
diff options
context:
space:
mode:
authorRichard Purdie <richard.purdie@linuxfoundation.org>2014-06-02 21:15:01 +0100
committerRichard Purdie <richard.purdie@linuxfoundation.org>2014-07-25 16:54:42 +0100
commit419daaaf0a2c773cadd67671fdb6234c598cd252 (patch)
treeaa97a97605cdd42f3bd7b1ad39e97c72e806f8a0 /meta/classes/autotools.bbclass
parentc1b244edf71982ef9f7e019546fc305871c18bc8 (diff)
downloadpoky-419daaaf0a2c773cadd67671fdb6234c598cd252.tar.gz
autotools: Improve configure dependency code for finding m4 files
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 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. (From OE-Core rev: 6d2dc279faa8b28a00895dc6a620d80e2dbac685) Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Diffstat (limited to 'meta/classes/autotools.bbclass')
-rw-r--r--meta/classes/autotools.bbclass40
1 files changed, 38 insertions, 2 deletions
diff --git a/meta/classes/autotools.bbclass b/meta/classes/autotools.bbclass
index afca760804..c67896882d 100644
--- a/meta/classes/autotools.bbclass
+++ b/meta/classes/autotools.bbclass
@@ -135,15 +135,51 @@ python autotools_copy_aclocals () {
135 return 135 return
136 136
137 taskdepdata = d.getVar("BB_TASKDEPDATA", False) 137 taskdepdata = d.getVar("BB_TASKDEPDATA", False)
138 #bb.warn(str(taskdepdata))
138 pn = d.getVar("PN", True) 139 pn = d.getVar("PN", True)
139 aclocaldir = d.getVar("ACLOCALDIR", True) 140 aclocaldir = d.getVar("ACLOCALDIR", True)
140 oe.path.remove(aclocaldir) 141 oe.path.remove(aclocaldir)
141 bb.utils.mkdirhier(aclocaldir) 142 bb.utils.mkdirhier(aclocaldir)
143 start = None
142 configuredeps = [] 144 configuredeps = []
145
143 for dep in taskdepdata: 146 for dep in taskdepdata:
144 data = taskdepdata[dep] 147 data = taskdepdata[dep]
145 if data[1] == "do_configure" and data[0] != pn: 148 if data[1] == "do_configure" and data[0] == pn:
146 configuredeps.append(data[0]) 149 start = dep
150 break
151 if not start:
152 bb.fatal("Couldn't find ourself in BB_TASKDEPDATA?")
153
154 # We need to find configure tasks which are either from <target> -> <target>
155 # or <native> -> <native> but not <target> -> <native> unless they're direct
156 # dependencies. This mirrors what would get restored from sstate.
157 done = [dep]
158 next = [dep]
159 while next:
160 new = []
161 for dep in next:
162 data = taskdepdata[dep]
163 for datadep in data[3]:
164 if datadep in done:
165 continue
166 done.append(datadep)
167 if (not data[0].endswith("-native")) and taskdepdata[datadep][0].endswith("-native") and dep != start:
168 continue
169 new.append(datadep)
170 if taskdepdata[datadep][1] == "do_configure":
171 configuredeps.append(taskdepdata[datadep][0])
172 next = new
173
174 #configuredeps2 = []
175 #for dep in taskdepdata:
176 # data = taskdepdata[dep]
177 # if data[1] == "do_configure" and data[0] != pn:
178 # configuredeps2.append(data[0])
179 #configuredeps.sort()
180 #configuredeps2.sort()
181 #bb.warn(str(configuredeps))
182 #bb.warn(str(configuredeps2))
147 183
148 cp = [] 184 cp = []
149 for c in configuredeps: 185 for c in configuredeps: