checkbashisms: add initial class to run against ${S}
authorChris Larson <chris_larson@mentor.com>
Mon, 15 Nov 2010 23:03:21 +0000 (16:03 -0700)
committerChris Larson <chris_larson@mentor.com>
Mon, 15 Nov 2010 23:04:06 +0000 (16:04 -0700)
Currently requires that you already have checkbashisms available somewhere in
your PATH.  Runs against all '#!/bin/sh' scripts in ${S}, to attempt to find
and fix issues with /bin/sh not being bash.

Signed-off-by: Chris Larson <chris_larson@mentor.com>
classes/checkbashisms.bbclass [new file with mode: 0644]

diff --git a/classes/checkbashisms.bbclass b/classes/checkbashisms.bbclass
new file mode 100644 (file)
index 0000000..3a38e34
--- /dev/null
@@ -0,0 +1,32 @@
+python do_checkbashisms () {
+    import re
+    import oe.process
+    import oe.path
+
+    def readline(path):
+        try:
+            return iter(open(path, "r")).next()
+        except StopIteration:
+            pass
+
+    shebang = re.compile("^#! */bin/sh$")
+    errors = False
+    srcdir = d.getVar("S", True)
+    for path in oe.path.find(srcdir):
+        line = readline(path)
+        if line and shebang.match(line):
+            try:
+                output = oe_run(d, ["checkbashisms", path])
+            except oe.process.ExecutionError, exc:
+                if not errors:
+                    errors = True
+                bb.note(str(exc))
+
+    if errors:
+        bb.fatal("bashisms were identified, aborting")
+}
+addtask checkbashisms after do_patch
+
+do_checkbashisms_all[recrdeptask] = "do_checkbashisms"
+do_checkbashisms_all[nostamp] = "1"
+addtask checkbashisms_all after do_checkbashisms