build: cache modules from playground

Now that we are able to build our own test modules, also allow to use
cached modules so a) kernel headers are not required and b) distro
maintainers are happy.  It's still need a "--disable-test-modules" in
the configure since the default is enabled.

There's no license problems anymore since all modules come from our own
repository, we ship the sources and the modules can be easily rebuilt.
diff --git a/Makefile.am b/Makefile.am
index 9457655..b991936 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -230,7 +230,12 @@
 		cp -r $(top_srcdir)/$(MODULE_PLAYGROUND) $(top_builddir)/$(MODULE_PLAYGROUND) && \
 		find $(top_builddir)/$(MODULE_PLAYGROUND) -type d -exec chmod +w {} \; ; \
 		fi
+if BUILD_MODULES
 	$(MAKE) -C $(MODULE_PLAYGROUND)
+else
+	$(MAKE) -C $(MODULE_PLAYGROUND) FAKE_BUILD=1
+endif
+
 
 rootfs: build-module-playground
 	$(CREATE_ROOTFS)
diff --git a/configure.ac b/configure.ac
index be597b4..6e67584 100644
--- a/configure.ac
+++ b/configure.ac
@@ -127,6 +127,11 @@
 	[], enable_manpages=yes)
 AM_CONDITIONAL([BUILD_MANPAGES], [test "x$enable_manpages" = "xyes"])
 
+AC_ARG_ENABLE([test-modules],
+        AS_HELP_STRING([--disable-test-modules], [disable building test modules during make check: cached modules will be used @<:@default=enabled@:>@]),
+	[], enable_test_modules=yes)
+AM_CONDITIONAL([BUILD_MODULES], [test "x$enable_test_modules" = "xyes"])
+
 AC_ARG_ENABLE([logging],
 	AS_HELP_STRING([--disable-logging], [disable system logging @<:@default=enabled@:>@]),
 	[], enable_logging=yes)
@@ -282,4 +287,5 @@
 	coverage:		${enable_coverage}
 	doc:			${enable_gtk_doc}
 	man:			${enable_manpages}
+	test-modules:           ${enable_test_modules}
 ])
diff --git a/testsuite/module-playground/.gitignore b/testsuite/module-playground/.gitignore
index 5cd3034..6767e0e 100644
--- a/testsuite/module-playground/.gitignore
+++ b/testsuite/module-playground/.gitignore
@@ -1,6 +1,7 @@
 *o.cmd
 *.ko
 !mod-simple-*.ko
+!cache/*.ko
 *.mod.c
 .tmp_versions
 modules.order
diff --git a/testsuite/module-playground/Makefile b/testsuite/module-playground/Makefile
index 5ba9ed2..a5f142f 100644
--- a/testsuite/module-playground/Makefile
+++ b/testsuite/module-playground/Makefile
@@ -38,6 +38,9 @@
 # normal makefile
 KDIR ?= /lib/modules/`uname -r`/build
 KVER ?= `uname -r`
+ifeq ($(FAKE_BUILD),)
+    FAKE_BUILD=0
+endif
 
 ARCH_SPECIFIC_MODULES := mod-simple-x86_64.ko mod-simple-i386.ko mod-simple-sparc64.ko
 MY_MODULES := $(filter-out $(ARCH_SPECIFIC_MODULES),$(wildcard *.ko))
@@ -48,8 +51,14 @@
 	$(eval arch=$(patsubst mod-simple-%.ko,%,$@))
 	$(MAKE) KDIR=$(KDIR_$(arch)) ARCH=$(arch) CROSS_COMPILE=$(CROSS_COMPILE_$(arch)) -f Makefile.arch
 
+ifeq ($(FAKE_BUILD),0)
 modules:
 	$(MAKE) -C $(KDIR) M=$$PWD
+else
+modules:
+	@echo "  CP       cache/*.ko"
+	@cp cache/*.ko .
+endif
 
 arch-modules: $(ARCH_SPECIFIC_MODULES)
 
diff --git a/testsuite/module-playground/cache/mod-fake-cciss.ko b/testsuite/module-playground/cache/mod-fake-cciss.ko
new file mode 100644
index 0000000..f61409a
--- /dev/null
+++ b/testsuite/module-playground/cache/mod-fake-cciss.ko
Binary files differ
diff --git a/testsuite/module-playground/cache/mod-fake-hpsa.ko b/testsuite/module-playground/cache/mod-fake-hpsa.ko
new file mode 100644
index 0000000..3d33ba7
--- /dev/null
+++ b/testsuite/module-playground/cache/mod-fake-hpsa.ko
Binary files differ
diff --git a/testsuite/module-playground/cache/mod-fake-scsi-mod.ko b/testsuite/module-playground/cache/mod-fake-scsi-mod.ko
new file mode 100644
index 0000000..c0eb974
--- /dev/null
+++ b/testsuite/module-playground/cache/mod-fake-scsi-mod.ko
Binary files differ
diff --git a/testsuite/module-playground/cache/mod-foo-a.ko b/testsuite/module-playground/cache/mod-foo-a.ko
new file mode 100644
index 0000000..f2d406e
--- /dev/null
+++ b/testsuite/module-playground/cache/mod-foo-a.ko
Binary files differ
diff --git a/testsuite/module-playground/cache/mod-foo-b.ko b/testsuite/module-playground/cache/mod-foo-b.ko
new file mode 100644
index 0000000..53bf3a9
--- /dev/null
+++ b/testsuite/module-playground/cache/mod-foo-b.ko
Binary files differ
diff --git a/testsuite/module-playground/cache/mod-foo-c.ko b/testsuite/module-playground/cache/mod-foo-c.ko
new file mode 100644
index 0000000..083e801
--- /dev/null
+++ b/testsuite/module-playground/cache/mod-foo-c.ko
Binary files differ
diff --git a/testsuite/module-playground/cache/mod-foo.ko b/testsuite/module-playground/cache/mod-foo.ko
new file mode 100644
index 0000000..0961478
--- /dev/null
+++ b/testsuite/module-playground/cache/mod-foo.ko
Binary files differ
diff --git a/testsuite/module-playground/cache/mod-loop-a.ko b/testsuite/module-playground/cache/mod-loop-a.ko
new file mode 100644
index 0000000..51533d8
--- /dev/null
+++ b/testsuite/module-playground/cache/mod-loop-a.ko
Binary files differ
diff --git a/testsuite/module-playground/cache/mod-loop-b.ko b/testsuite/module-playground/cache/mod-loop-b.ko
new file mode 100644
index 0000000..5e20348
--- /dev/null
+++ b/testsuite/module-playground/cache/mod-loop-b.ko
Binary files differ
diff --git a/testsuite/module-playground/cache/mod-loop-c.ko b/testsuite/module-playground/cache/mod-loop-c.ko
new file mode 100644
index 0000000..6a02b04
--- /dev/null
+++ b/testsuite/module-playground/cache/mod-loop-c.ko
Binary files differ
diff --git a/testsuite/module-playground/cache/mod-loop-d.ko b/testsuite/module-playground/cache/mod-loop-d.ko
new file mode 100644
index 0000000..3ab3348
--- /dev/null
+++ b/testsuite/module-playground/cache/mod-loop-d.ko
Binary files differ
diff --git a/testsuite/module-playground/cache/mod-loop-e.ko b/testsuite/module-playground/cache/mod-loop-e.ko
new file mode 100644
index 0000000..efe93ff
--- /dev/null
+++ b/testsuite/module-playground/cache/mod-loop-e.ko
Binary files differ
diff --git a/testsuite/module-playground/cache/mod-simple.ko b/testsuite/module-playground/cache/mod-simple.ko
new file mode 100644
index 0000000..2c5ffcf
--- /dev/null
+++ b/testsuite/module-playground/cache/mod-simple.ko
Binary files differ