$(MODLIB)/source symlink no longer created for kernel 6.6+; breaks dkms build

I use the “O=” option when building my kernel so that the output directory is different from the source directory. In Linux < 6.6 using --kernel-name and --kernel-output-path was enough when running the installer. With Linux 6.6.y I also had to add --kernel-source-path=/lib/modules/$KVER/build/source for the installer to successfully run. However, I’ve now discovered DKMS no longer builds the modules for a new kernel due to the missing /lib/modules/$KVER/source symlink.

I think the Makefile (kernel/Makefile and kernel-open/Makefile) needs to additionally check for $(KERNEL_MODLIB)/build/source around line 31:

  ifdef SYSSRC
    KERNEL_SOURCES := $(SYSSRC)
  else
    KERNEL_UNAME ?= $(shell uname -r)
    KERNEL_MODLIB := /lib/modules/$(KERNEL_UNAME)
    KERNEL_SOURCES := $(shell test -d $(KERNEL_MODLIB)/source && echo $(KERNEL_MODLIB)/source || echo $(KERNEL_MODLIB)/build)
  endif

  KERNEL_OUTPUT := $(KERNEL_SOURCES)
  KBUILD_PARAMS :=

  ifdef SYSOUT
    ifneq ($(SYSOUT), $(KERNEL_SOURCES))
      KERNEL_OUTPUT := $(SYSOUT)
      KBUILD_PARAMS := KBUILD_OUTPUT=$(KERNEL_OUTPUT)
    endif
  else
    KERNEL_UNAME ?= $(shell uname -r)
    KERNEL_MODLIB := /lib/modules/$(KERNEL_UNAME)
    ifeq ($(KERNEL_SOURCES), $(KERNEL_MODLIB)/source)
      KERNEL_OUTPUT := $(KERNEL_MODLIB)/build
      KBUILD_PARAMS := KBUILD_OUTPUT=$(KERNEL_OUTPUT)
    endif
  endif

The kernel patch that caused this is d8131c2965d5ee59bfa4d548641e52a13cbe17c9.

Here are the contents of my $KERNEL_MODLIB :

$ ls -l /lib/modules/6.6.2-etr2/
total 6032
lrwxrwxrwx  1 root root      41 Nov 22 10:07 build -> /usr/src/linux-src/build/linux-6.6.2-etr2/
drwxr-xr-x 12 root root    4096 Nov 22 10:07 kernel/
drwxr-xr-x  3 root root    4096 Nov 22 10:08 updates/
-rw-r--r--  1 root root 1421865 Nov 22 10:08 modules.alias
-rw-r--r--  1 root root 1379687 Nov 22 10:08 modules.alias.bin
-rw-r--r--  1 root root   12922 Nov 22 10:07 modules.builtin
-rw-r--r--  1 root root   40249 Nov 22 10:08 modules.builtin.alias.bin
-rw-r--r--  1 root root   17130 Nov 22 10:08 modules.builtin.bin
-rw-r--r--  1 root root  107144 Nov 22 10:07 modules.builtin.modinfo
-rw-r--r--  1 root root  671126 Nov 22 10:08 modules.dep
-rw-r--r--  1 root root  888479 Nov 22 10:08 modules.dep.bin
-rw-r--r--  1 root root     440 Nov 22 10:08 modules.devname
-rw-r--r--  1 root root  201056 Nov 22 10:07 modules.order
-rw-r--r--  1 root root    1702 Nov 22 10:08 modules.softdep
-rw-r--r--  1 root root  630909 Nov 22 10:08 modules.symbols
-rw-r--r--  1 root root  763369 Nov 22 10:08 modules.symbols.bin
$ ls -l /lib/modules/6.6.2-etr2/build/
total 179988
drwxr-xr-x   3 erich erich      4096 Nov 22 09:58 Documentation/
drwxr-xr-x   4 erich erich      4096 Nov 22 09:58 arch/
drwxr-xr-x   3 erich erich      4096 Nov 22 09:53 block/
drwxr-xr-x   2 erich erich      4096 Nov 22 09:52 certs/
drwxr-xr-x   4 erich erich     20480 Nov 22 09:58 crypto/
drwxr-xr-x 111 erich erich      4096 Nov 22 09:58 drivers/
drwxr-xr-x  77 erich erich     12288 Nov 22 09:58 fs/
drwxr-xr-x   4 erich erich      4096 Nov 22 09:31 include/
drwxr-xr-x   2 erich erich      4096 Nov 22 09:58 init/
drwxr-xr-x   2 erich erich      4096 Nov 22 09:53 io_uring/
drwxr-xr-x   2 erich erich      4096 Nov 22 09:52 ipc/
drwxr-xr-x  18 erich erich     12288 Nov 22 09:58 kernel/
drwxr-xr-x  17 erich erich     20480 Nov 22 09:58 lib/
drwxr-xr-x   2 erich erich     12288 Nov 22 09:58 mm/
drwxr-xr-x  61 erich erich      4096 Nov 22 09:56 net/
drwxr-xr-x   6 erich erich      4096 Nov 22 09:52 scripts/
drwxr-xr-x   4 erich erich      4096 Nov 22 09:53 security/
drwxr-xr-x  24 erich erich      4096 Nov 22 09:58 sound/
lrwxrwxrwx   1 erich erich        30 Nov 22 09:52 source -> /usr/src/linux-src/linux-6.6.2/
drwxr-xr-x   3 erich erich      4096 Nov 22 09:52 tools/
drwxr-xr-x   2 erich erich      4096 Nov 22 09:52 usr/
drwxr-xr-x   4 erich erich      4096 Nov 22 09:53 virt/
-rw-r--r--   1 erich erich       129 Nov 22 09:52 Makefile
-rw-r--r--   1 erich erich   1841179 Nov 22 09:58 Module.symvers
-rw-r--r--   1 erich erich   8873466 Nov 22 09:58 System.map
-rw-r--r--   1 erich erich      6346 Nov 22 10:04 build.docs.error.log
-rw-r--r--   1 erich erich       452 Nov 22 10:13 build.docs.log
-rw-r--r--   1 erich erich         0 Nov 22 09:52 build.error.log
-rw-r--r--   1 root  root         13 Nov 22 10:07 build.install.error.log
-rw-r--r--   1 root  root     373617 Nov 22 10:07 build.install.log
-rw-r--r--   1 erich erich   1244650 Nov 22 09:58 build.log
-rw-r--r--   1 erich erich    265456 Nov 22 09:58 built-in.a
-rw-r--r--   1 erich erich    260164 Nov 20 12:34 config-generic-6.6.2.x64
-rw-r--r--   1 erich erich     12922 Nov 22 09:58 modules.builtin
-rw-r--r--   1 erich erich    107144 Nov 22 09:58 modules.builtin.modinfo
-rw-r--r--   1 erich erich    161576 Nov 22 09:58 modules.order
-rwxr-xr-x   1 erich erich  70484544 Nov 22 09:58 vmlinux*
-rw-r--r--   1 erich erich    270982 Nov 22 09:58 vmlinux.a
-rw-r--r--   1 erich erich 100213168 Nov 22 09:58 vmlinux.o

Note the absence of /lib/modules/6.6.2-etr2/source.