diff options
| -rw-r--r-- | meta/classes/autotools.bbclass | 58 | 
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= | 
