aboutsummaryrefslogtreecommitdiffstats
path: root/meta/classes/autotools.bbclass
diff options
context:
space:
mode:
authorRichard Purdie <richard.purdie@linuxfoundation.org>2014-03-02 17:36:38 +0000
committerRichard Purdie <richard.purdie@linuxfoundation.org>2014-03-05 15:50:19 +0000
commitb924b499ecd28bb433a12fb327f0e63d66db97b5 (patch)
tree5023fbc0b6ca49646f1828fce88ffe9f196e4f2a /meta/classes/autotools.bbclass
parentb2d55fa5b5bc991c62e982eb53d99408c769656a (diff)
downloadopenembedded-core-contrib-b924b499ecd28bb433a12fb327f0e63d66db97b5.tar.gz
autotools: Limit aclocal files to those in dependencies
We still occasionally see race issues with cp-noerror, and it copies too many files, we should limit the the m4 files to those explicitly in the DEPENDS for the recipe. This change takes advantage of the BB_TASKDEPDATA data from bitbake to only copy in those files listed in the manifest of the recipes in DEPENDS. I've had this testing locally for some time, its ready for wider review/testing. (From OE-Core rev: 79ea036de331bde65a88fb777647dc099ef05acf) Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Diffstat (limited to 'meta/classes/autotools.bbclass')
-rw-r--r--meta/classes/autotools.bbclass58
1 files changed, 40 insertions, 18 deletions
diff --git a/meta/classes/autotools.bbclass b/meta/classes/autotools.bbclass
index 883eb06e26..01e49c98bf 100644
--- a/meta/classes/autotools.bbclass
+++ b/meta/classes/autotools.bbclass
@@ -130,28 +130,51 @@ autotools_postconfigure(){
EXTRACONFFUNCS ??= ""
-do_configure[prefuncs] += "autotools_preconfigure ${EXTRACONFFUNCS}"
+do_configure[prefuncs] += "autotools_preconfigure autotools_copy_aclocals ${EXTRACONFFUNCS}"
do_configure[postfuncs] += "autotools_postconfigure"
ACLOCALDIR = "${B}/aclocal-copy"
-autotools_copy_aclocal () {
- # Remove any previous copy of the m4 macros
- rm -rf ${ACLOCALDIR}/
-
- # The aclocal directory could get modified by other processes
- # uninstalling data from the sysroot. See Yocto #861 for details.
- # We avoid this by taking a copy here and then files cannot disappear.
- # We copy native first, then target. This avoids certain races since cp-noerror
- # won't overwrite existing files.
- mkdir -p ${ACLOCALDIR}/
- if [ -d ${STAGING_DATADIR_NATIVE}/aclocal ]; then
- cp-noerror ${STAGING_DATADIR_NATIVE}/aclocal/ ${ACLOCALDIR}/
- fi
- if [ -d ${STAGING_DATADIR}/aclocal -a "${STAGING_DATADIR_NATIVE}/aclocal" != "${STAGING_DATADIR}/aclocal" ]; then
- cp-noerror ${STAGING_DATADIR}/aclocal/ ${ACLOCALDIR}/
- fi
+python autotools_copy_aclocals () {
+ s = d.getVar("S", True)
+ if not os.path.exists(s + "/configure.in") and not os.path.exists(s + "/configure.ac"):
+ return
+
+ taskdepdata = d.getVar("BB_TASKDEPDATA", False)
+ pn = d.getVar("PN", True)
+ aclocaldir = d.getVar("ACLOCALDIR", True)
+ oe.path.remove(aclocaldir)
+ bb.utils.mkdirhier(aclocaldir)
+ configuredeps = []
+ for dep in taskdepdata:
+ data = taskdepdata[dep]
+ if data[1] == "do_configure" and data[0] != pn:
+ configuredeps.append(data[0])
+
+ cp = []
+ for c in configuredeps:
+ if c.endswith("-native"):
+ manifest = d.expand("${SSTATE_MANIFESTS}/manifest-${BUILD_ARCH}-%s.populate_sysroot" % c)
+ elif c.startswith("nativesdk-"):
+ manifest = d.expand("${SSTATE_MANIFESTS}/manifest-${SDK_ARCH}-%s.populate_sysroot" % c)
+ elif c.endswith("-cross") or c.endswith("-cross-initial") or c.endswith("-crosssdk") or c.endswith("-crosssdk-initial"):
+ continue
+ else:
+ manifest = d.expand("${SSTATE_MANIFESTS}/manifest-${MACHINE}-%s.populate_sysroot" % c)
+ try:
+ f = open(manifest, "r")
+ for l in f:
+ if "/aclocal/" in l and l.strip().endswith(".m4"):
+ cp.append(l.strip())
+ except:
+ bb.warn("%s not found" % manifest)
+
+ for c in cp:
+ t = os.path.join(aclocaldir, os.path.basename(c))
+ if not os.path.exists(t):
+ os.symlink(c, t)
}
+autotools_copy_aclocals[vardepsexclude] += "MACHINE"
autotools_do_configure() {
# WARNING: gross hack follows:
@@ -168,7 +191,6 @@ autotools_do_configure() {
if [ -e ${S}/configure.in -o -e ${S}/configure.ac ]; then
olddir=`pwd`
cd ${S}
- autotools_copy_aclocal
ACLOCAL="aclocal --system-acdir=${ACLOCALDIR}/"
if [ x"${acpaths}" = xdefault ]; then
acpaths=