diff options
Diffstat (limited to 'meta')
| -rw-r--r-- | meta/classes/autotools.bbclass | 67 |
1 files changed, 48 insertions, 19 deletions
diff --git a/meta/classes/autotools.bbclass b/meta/classes/autotools.bbclass index 5fda03df80..4c32c84fa8 100644 --- a/meta/classes/autotools.bbclass +++ b/meta/classes/autotools.bbclass | |||
| @@ -137,6 +137,8 @@ do_configure[postfuncs] += "autotools_postconfigure" | |||
| 137 | ACLOCALDIR = "${WORKDIR}/aclocal-copy" | 137 | ACLOCALDIR = "${WORKDIR}/aclocal-copy" |
| 138 | 138 | ||
| 139 | python autotools_copy_aclocals () { | 139 | python autotools_copy_aclocals () { |
| 140 | import copy | ||
| 141 | |||
| 140 | s = d.getVar("AUTOTOOLS_SCRIPT_PATH", True) | 142 | s = d.getVar("AUTOTOOLS_SCRIPT_PATH", True) |
| 141 | if not os.path.exists(s + "/configure.in") and not os.path.exists(s + "/configure.ac"): | 143 | if not os.path.exists(s + "/configure.in") and not os.path.exists(s + "/configure.ac"): |
| 142 | if not d.getVar("AUTOTOOLS_COPYACLOCAL", False): | 144 | if not d.getVar("AUTOTOOLS_COPYACLOCAL", False): |
| @@ -165,36 +167,63 @@ python autotools_copy_aclocals () { | |||
| 165 | if start is None: | 167 | if start is None: |
| 166 | bb.fatal("Couldn't find ourself in BB_TASKDEPDATA?") | 168 | bb.fatal("Couldn't find ourself in BB_TASKDEPDATA?") |
| 167 | 169 | ||
| 168 | # We need to find configure tasks which are either from <target> -> <target> | 170 | # We need to figure out which m4 files we need to expose to this do_configure task. |
| 169 | # or <native> -> <native> but not <target> -> <native> unless they're direct | 171 | # This needs to match what would get restored from sstate, which is controlled |
| 170 | # dependencies. This mirrors what would get restored from sstate. | 172 | # ultimately by calls from bitbake to setscene_depvalid(). |
| 171 | done = [start] | 173 | # That function expects a setscene dependency tree. We build a dependency tree |
| 172 | next = [start] | 174 | # condensed to do_populate_sysroot -> do_populate_sysroot dependencies, similar to |
| 175 | # that used by setscene tasks. We can then call into setscene_depvalid() and decide | ||
| 176 | # which dependencies we can "see" and should expose the m4 files for. | ||
| 177 | setscenedeps = copy.deepcopy(taskdepdata) | ||
| 178 | |||
| 179 | start = set([start]) | ||
| 180 | |||
| 181 | # Create collapsed do_populate_sysroot -> do_populate_sysroot tree | ||
| 182 | for dep in taskdepdata: | ||
| 183 | data = setscenedeps[dep] | ||
| 184 | if data[1] != "do_populate_sysroot": | ||
| 185 | for dep2 in setscenedeps: | ||
| 186 | data2 = setscenedeps[dep2] | ||
| 187 | if dep in data2[3]: | ||
| 188 | data2[3].update(setscenedeps[dep][3]) | ||
| 189 | data2[3].remove(dep) | ||
| 190 | if dep in start: | ||
| 191 | start.update(setscenedeps[dep][3]) | ||
| 192 | start.remove(dep) | ||
| 193 | del setscenedeps[dep] | ||
| 194 | |||
| 195 | # Remove circular references | ||
| 196 | for dep in setscenedeps: | ||
| 197 | if dep in setscenedeps[dep][3]: | ||
| 198 | setscenedeps[dep][3].remove(dep) | ||
| 199 | |||
| 200 | # Direct dependencies should be present and can be depended upon | ||
| 201 | for dep in start: | ||
| 202 | configuredeps.append(setscenedeps[dep][0]) | ||
| 203 | |||
| 204 | # Call into setscene_depvalid for each sub-dependency and only copy m4 files | ||
| 205 | # for ones that would be restored from sstate. | ||
| 206 | done = list(start) | ||
| 207 | next = list(start) | ||
| 173 | while next: | 208 | while next: |
| 174 | new = [] | 209 | new = [] |
| 175 | for dep in next: | 210 | for dep in next: |
| 176 | data = taskdepdata[dep] | 211 | data = setscenedeps[dep] |
| 177 | for datadep in data[3]: | 212 | for datadep in data[3]: |
| 178 | if datadep in done: | 213 | if datadep in done: |
| 179 | continue | 214 | continue |
| 180 | if (not data[0].endswith("-native")) and taskdepdata[datadep][0].endswith("-native") and dep != start: | 215 | taskdeps = {} |
| 216 | taskdeps[dep] = setscenedeps[dep][:2] | ||
| 217 | taskdeps[datadep] = setscenedeps[datadep][:2] | ||
| 218 | retval = setscene_depvalid(datadep, taskdeps, [], d) | ||
| 219 | if retval: | ||
| 220 | bb.note("Skipping setscene dependency %s for m4 macro copying" % datadep) | ||
| 181 | continue | 221 | continue |
| 182 | done.append(datadep) | 222 | done.append(datadep) |
| 183 | new.append(datadep) | 223 | new.append(datadep) |
| 184 | if taskdepdata[datadep][1] == "do_configure": | 224 | configuredeps.append(setscenedeps[datadep][0]) |
| 185 | configuredeps.append(taskdepdata[datadep][0]) | ||
| 186 | next = new | 225 | next = new |
| 187 | 226 | ||
| 188 | #configuredeps2 = [] | ||
| 189 | #for dep in taskdepdata: | ||
| 190 | # data = taskdepdata[dep] | ||
| 191 | # if data[1] == "do_configure" and data[0] != pn: | ||
| 192 | # configuredeps2.append(data[0]) | ||
| 193 | #configuredeps.sort() | ||
| 194 | #configuredeps2.sort() | ||
| 195 | #bb.warn(str(configuredeps)) | ||
| 196 | #bb.warn(str(configuredeps2)) | ||
| 197 | |||
| 198 | cp = [] | 227 | cp = [] |
| 199 | if nodeps: | 228 | if nodeps: |
| 200 | bb.warn("autotools: Unable to find task dependencies, -b being used? Pulling in all m4 files") | 229 | bb.warn("autotools: Unable to find task dependencies, -b being used? Pulling in all m4 files") |
