summaryrefslogtreecommitdiffstats
path: root/debian/tests/kbuild
diff options
context:
space:
mode:
Diffstat (limited to 'debian/tests/kbuild')
-rw-r--r--debian/tests/kbuild58
1 files changed, 58 insertions, 0 deletions
diff --git a/debian/tests/kbuild b/debian/tests/kbuild
new file mode 100644
index 000000000..18cbe214e
--- /dev/null
+++ b/debian/tests/kbuild
@@ -0,0 +1,58 @@
+#!/bin/sh -eu
+
+mkdir "$AUTOPKGTEST_TMP"/foo
+cat >"$AUTOPKGTEST_TMP"/foo/foo.c <<EOF
+#include <linux/kernel.h>
+#include <linux/module.h>
+
+static int __init foo_init(void)
+{
+ pr_info("foo initialised\n");
+ return 0;
+}
+module_init(foo_init);
+
+static void __exit foo_exit(void)
+{
+}
+module_exit(foo_exit);
+
+MODULE_LICENSE("GPL");
+EOF
+cat >"$AUTOPKGTEST_TMP"/foo/Kbuild <<EOF
+obj-m += foo.o
+EOF
+
+arch="$(dpkg --print-architecture)"
+abiname="$(debian/bin/getconfig.py version abiname)"
+if flavour="$(debian/bin/getconfig.py base $arch none quick-flavour)"; then
+ echo "I: Found quick flavour $flavour"
+elif flavour="$(debian/bin/getconfig.py base $arch none default-flavour)"; then
+ echo "I: Found default flavour $flavour"
+elif flavour="$(debian/bin/getconfig.py base $arch default-flavour)"; then
+ echo "I: Found default flavour $flavour"
+else
+ echo >&2 "E: Failed to find quick or default flavour"
+ exit 1
+fi
+release="$abiname-$flavour"
+
+echo "I: Build for $release"
+# There are some warnings sent to stderr that we need to suppress,
+# but any other output to stderr should be treated as a failure.
+# We also want all stdout/stderr to appear in order in the log.
+# First, duplicate stdout to fd 3
+exec 3>&1
+# Next, run the build with stdout sent to the original stdout and
+# stderr sent through tee to both the original stdout and a file
+make -C /lib/modules/"$release"/build M="$AUTOPKGTEST_TMP"/foo V=1 \
+ 2>&1 1>&3 | tee "$AUTOPKGTEST_TMP"/foo/make.stderr
+# Close fd 3
+exec 3>&-
+# Check for any stderr output that doesn't match the suppressions
+if grep -q -v -E 'Skipping BTF generation .* due to unavailability of vmlinux' "$AUTOPKGTEST_TMP"/foo/make.stderr; then
+ echo >&2 "E: Unexpected warning/error messages"
+fi
+
+echo "I: Clean"
+make -C /lib/modules/"$release"/build M="$AUTOPKGTEST_TMP"/foo V=1 clean