From dbc9d0fb6863026b16f4805709acc7e4977d7e66 Mon Sep 17 00:00:00 2001 From: Denys Fedoryshchenko Date: Sun, 30 Aug 2026 03:10:39 +0300 Subject: cmake: fix kernel module installation Install each module from its real build directory, propagate staged install roots, and fail when kbuild modules_install fails. Add a rootless CTest and CI regression for successful and failed installs. Best practices followed: Use the standard CMake DESTDIR and kbuild INSTALL_MOD_PATH staging interfaces: https://cmake.org/cmake/help/latest/envvar/DESTDIR.html https://docs.kernel.org/kbuild/modules.html#install-mod-path Check child command status with execute_process RESULT_VARIABLE: https://cmake.org/cmake/help/latest/command/execute_process.html Register repeatable tests with CTest add_test: https://cmake.org/cmake/help/latest/command/add_test.html --- tests/README.md | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) (limited to 'tests/README.md') diff --git a/tests/README.md b/tests/README.md index 689a16d8..65afd254 100644 --- a/tests/README.md +++ b/tests/README.md @@ -2,6 +2,25 @@ These tests are done for Ubuntu and Debian distros. Please use latest stable Debian or Ubuntu to run the tests. +## Kernel module installation test + +The kernel module installation regression test is rootless and does not need +kernel headers. It uses a fake kernel build tree to verify that `ipoe`, +`vlan_mon`, and `ppposeq` are installed from their actual build directories, +honor `DESTDIR`, and make installation fail when `modules_install` fails. + +Run it through CTest after configuring the project: + +```bash +ctest --test-dir build --output-on-failure -R '^kernel-module-install$' +``` + +It can also be run directly from the repository root: + +```bash +sh tests/kernel-module-install/test.sh cmake +``` + ## Preparations Install pytest @@ -100,4 +119,4 @@ If you want to re-run tests 'from scratch', you may want to remove coverage data # from root dir (parent for this dir) sudo gcovr -d # build report and delete sudo gcovr -d # check that data is deleted (any coverage = 0%) -``` \ No newline at end of file +``` -- cgit v1.2.3