aboutsummaryrefslogtreecommitdiffstats
path: root/classes/sanity.bbclass
diff options
context:
space:
mode:
authorRichard Purdie <rpurdie@rpsys.net>2006-03-19 18:34:37 +0000
committerOpenEmbedded Project <openembedded-devel@lists.openembedded.org>2006-03-19 18:34:37 +0000
commit63e9b71a88c9cebec1bff318c7854d64bc7d41d4 (patch)
treea7bfa05fe5464af3b0530d32ce87bdf5e3d52042 /classes/sanity.bbclass
parent0e411760a86e6bf483cc75af5d0962d5770422a4 (diff)
downloadopenembedded-63e9b71a88c9cebec1bff318c7854d64bc7d41d4.tar.gz
Add sanity.conf/sanity.bbclass. This checks for common user misconfigurations and gives helpful information about fixing them. The checks can be expanded over time. It can be disabled by following the slightly cryptic instructions in sanity.conf.
Diffstat (limited to 'classes/sanity.bbclass')
-rw-r--r--classes/sanity.bbclass69
1 files changed, 69 insertions, 0 deletions
diff --git a/classes/sanity.bbclass b/classes/sanity.bbclass
new file mode 100644
index 0000000000..f82af18d74
--- /dev/null
+++ b/classes/sanity.bbclass
@@ -0,0 +1,69 @@
+#
+# Sanity check the users setup for common misconfigurations
+#
+
+BB_MIN_VERSION = "1.3.3"
+
+def raise_sanity_error(msg):
+ import bb
+ bb.fatal("Openembedded's config sanity checker detected a potential misconfiguration.\nEither fix cause of this error or at your own risk disable the checker (see sanity.conf).\n%s" % msg)
+
+def check_conf_exists(fn, data):
+ import bb, os
+
+ bbpath = []
+ fn = bb.data.expand(fn, data)
+ vbbpath = bb.data.getVar("BBPATH", data)
+ if vbbpath:
+ bbpath += vbbpath.split(":")
+ for p in bbpath:
+ currname = os.path.join(bb.data.expand(p, data), fn)
+ if os.access(currname, os.R_OK):
+ return True
+ return False
+
+addhandler check_sanity_eventhandler
+python check_sanity_eventhandler() {
+ from bb import note, error, data, __version__
+ from bb.event import Handled, NotHandled, getName
+ from distutils.version import LooseVersion
+ import os
+
+ sanity_checked = bb.data.getVar('SANITY_CHECKED', e.data)
+ if sanity_checked == "1":
+ return
+
+ # Check the bitbake version meets minimum requirements
+ minversion = bb.data.getVar('BB_MIN_VERSION', e.data , True)
+ if not minversion:
+ # Hack: BB_MIN_VERSION hasn't been parsed yet so return
+ # and wait for the next call
+ return
+
+ if (LooseVersion(bb.__version__) < LooseVersion(minversion)):
+ raise_sanity_error('Bitbake version %s is required and version %s was found' % (minversion, bb.__version__))
+
+ # Check TARGET_ARCH is set
+ if bb.data.getVar('TARGET_ARCH', e.data, True) == 'INVALID':
+ raise_sanity_error('Please set TARGET_ARCH directly, or choose a MACHINE or DISTRO that does so.')
+
+ # Check TARGET_OS is set
+ if bb.data.getVar('TARGET_OS', e.data, True) == 'INVALID':
+ raise_sanity_error('Please set TARGET_OS directly, or choose a MACHINE or DISTRO that does so.')
+
+ # Check user doesn't have ASSUME_PROVIDED = instead of += in local.conf
+ if "diffstat-native" not in bb.data.getVar('ASSUME_PROVIDED', e.data, True).split():
+ raise_sanity_error('Please use ASSUME_PROVIDED +=, not ASSUME_PROVIDED = in your local.conf')
+
+ # Check the MACHINE is valid
+ if not check_conf_exists("conf/machine/${MACHINE}.conf", e.data):
+ raise_sanity_error('Please set a valid MACHINE in your local.conf')
+
+ # Check the distro is valid
+ if not check_conf_exists("conf/distro/${DISTRO}.conf", e.data):
+ raise_sanity_error('Please set a valid DISTRO in your local.conf')
+
+ bb.data.setVar('SANITY_CHECKED', "1", e.data)
+ return
+}
+