diff options
-rw-r--r-- | meta/classes/autotools.bbclass | 7 | ||||
-rw-r--r-- | meta/classes/siteinfo.bbclass | 17 | ||||
-rw-r--r-- | meta/classes/toolchain-scripts.bbclass | 2 |
3 files changed, 16 insertions, 10 deletions
diff --git a/meta/classes/autotools.bbclass b/meta/classes/autotools.bbclass index 4c32c84fa8..e5f527ec07 100644 --- a/meta/classes/autotools.bbclass +++ b/meta/classes/autotools.bbclass @@ -25,7 +25,7 @@ inherit siteinfo # Space separated list of shell scripts with variables defined to supply test # results for autoconf tests we cannot run at build time. -export CONFIG_SITE = "${@siteinfo_get_files(d, False)}" +export CONFIG_SITE = "${@siteinfo_get_files(d)}" acpaths = "default" EXTRA_AUTORECONF = "--exclude=autopoint" @@ -253,8 +253,9 @@ python autotools_copy_aclocals () { t = os.path.join(aclocaldir, os.path.basename(c)) if not os.path.exists(t): os.symlink(c, t) - - d.setVar("CONFIG_SITE", siteinfo_get_files(d, False)) + + # Refresh variable with cache files + d.setVar("CONFIG_SITE", siteinfo_get_files(d, aclocalcache=True)) } autotools_copy_aclocals[vardepsexclude] += "MACHINE SDK_ARCH BUILD_ARCH SDK_OS BB_TASKDEPDATA" diff --git a/meta/classes/siteinfo.bbclass b/meta/classes/siteinfo.bbclass index 03d4c4fd20..6a2e4bf560 100644 --- a/meta/classes/siteinfo.bbclass +++ b/meta/classes/siteinfo.bbclass @@ -153,7 +153,7 @@ python () { bb.fatal("Please add your architecture to siteinfo.bbclass") } -def siteinfo_get_files(d, no_cache = False): +def siteinfo_get_files(d, aclocalcache = False): sitedata = siteinfo_data(d) sitefiles = "" for path in d.getVar("BBPATH", True).split(":"): @@ -162,11 +162,17 @@ def siteinfo_get_files(d, no_cache = False): if os.path.exists(filename): sitefiles += filename + " " - if no_cache: return sitefiles + if not aclocalcache: + return sitefiles - # Now check for siteconfig cache files - # Use the files copied to the aclocal cache generated by autotools.bbclass - # to avoid races + # Now check for siteconfig cache files in the directory setup by autotools.bbclass to + # avoid races. + # + # ACLOCALDIR may or may not exist so cache should only be set to True from autotools.bbclass + # after files have been copied into this location. To do otherwise risks parsing/signature + # issues and the directory being created/removed whilst this code executes. This can happen + # when a multilib recipe is parsed along with its base variant which may be running at the time + # causing rare but nasty failures path_siteconfig = d.getVar('ACLOCALDIR', True) if path_siteconfig and os.path.isdir(path_siteconfig): for i in os.listdir(path_siteconfig): @@ -174,7 +180,6 @@ def siteinfo_get_files(d, no_cache = False): continue filename = os.path.join(path_siteconfig, i) sitefiles += filename + " " - return sitefiles # diff --git a/meta/classes/toolchain-scripts.bbclass b/meta/classes/toolchain-scripts.bbclass index 57874f38dc..997ff8865f 100644 --- a/meta/classes/toolchain-scripts.bbclass +++ b/meta/classes/toolchain-scripts.bbclass @@ -105,7 +105,7 @@ EOF } #we get the cached site config in the runtime -TOOLCHAIN_CONFIGSITE_NOCACHE = "${@siteinfo_get_files(d, True)}" +TOOLCHAIN_CONFIGSITE_NOCACHE = "${@siteinfo_get_files(d)}" TOOLCHAIN_CONFIGSITE_SYSROOTCACHE = "${STAGING_DIR}/${MLPREFIX}${MACHINE}/${target_datadir}/${TARGET_SYS}_config_site.d" TOOLCHAIN_NEED_CONFIGSITE_CACHE ??= "virtual/${MLPREFIX}libc ncurses" |