Proper support for DESTDIR and INSTALL_MOD_PATH

The environment variables DESTDIR and INSTALL_MOD_PATH must
be mutually exclusive.

https://www.gnu.org/prep/standards/html_node/DESTDIR.html
https://www.kernel.org/doc/Documentation/kbuild/modules.txt

This issue was discussed in this Buildroot thread:
https://lists.buildroot.org/pipermail/buildroot/2021-August/621350.html

I saw this behavior in other different projects, as:

- Yocto Project:
  https://www.yoctoproject.org/pipermail/meta-freescale/2013-August/004307.html

- Google IA Coral:
  https://coral.googlesource.com/linux-imx-debian/+/refs/heads/master/debian/rules

For the above reasons, INSTALL_MOD_PATH will be set as DESTDIR
by default.

Reviewed-by: Tony Hutter <hutter2@llnl.gov>
Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
Signed-off-by: José Luis Salvador Rufo <salvador.joseluis@gmail.com>
Signed-off-by: Romain Naour <romain.naour@gmail.com>
Closes #12577
This commit is contained in:
José Luis Salvador Rufo 2021-10-01 19:44:34 +02:00 committed by Tony Hutter
parent fe8b0a33d4
commit a35125e3d5
1 changed files with 5 additions and 4 deletions

View File

@ -1,6 +1,7 @@
include Kbuild include Kbuild
INSTALL_MOD_DIR ?= extra INSTALL_MOD_DIR ?= extra
INSTALL_MOD_PATH ?= $(DESTDIR)
SUBDIR_TARGETS = icp lua zstd SUBDIR_TARGETS = icp lua zstd
@ -81,15 +82,15 @@ clean: clean-@ac_system@
modules_install-Linux: modules_install-Linux:
@# Install the kernel modules @# Install the kernel modules
$(MAKE) -C @LINUX_OBJ@ M=`pwd` modules_install \ $(MAKE) -C @LINUX_OBJ@ M=`pwd` modules_install \
INSTALL_MOD_PATH=$(DESTDIR)$(INSTALL_MOD_PATH) \ INSTALL_MOD_PATH=$(INSTALL_MOD_PATH) \
INSTALL_MOD_DIR=$(INSTALL_MOD_DIR) \ INSTALL_MOD_DIR=$(INSTALL_MOD_DIR) \
KERNELRELEASE=@LINUX_VERSION@ KERNELRELEASE=@LINUX_VERSION@
@# Remove extraneous build products when packaging @# Remove extraneous build products when packaging
kmoddir=$(DESTDIR)$(INSTALL_MOD_PATH)/lib/modules/@LINUX_VERSION@; \ kmoddir=$(INSTALL_MOD_PATH)/lib/modules/@LINUX_VERSION@; \
if [ -n "$(DESTDIR)" ]; then \ if [ -n "$(DESTDIR)" ]; then \
find $$kmoddir -name 'modules.*' | xargs $(RM); \ find $$kmoddir -name 'modules.*' | xargs $(RM); \
fi fi
sysmap=$(DESTDIR)$(INSTALL_MOD_PATH)/boot/System.map-@LINUX_VERSION@; \ sysmap=$(INSTALL_MOD_PATH)/boot/System.map-@LINUX_VERSION@; \
if [ -f $$sysmap ]; then \ if [ -f $$sysmap ]; then \
depmod -ae -F $$sysmap @LINUX_VERSION@; \ depmod -ae -F $$sysmap @LINUX_VERSION@; \
fi fi
@ -102,7 +103,7 @@ modules_install: modules_install-@ac_system@
modules_uninstall-Linux: modules_uninstall-Linux:
@# Uninstall the kernel modules @# Uninstall the kernel modules
kmoddir=$(DESTDIR)$(INSTALL_MOD_PATH)/lib/modules/@LINUX_VERSION@; \ kmoddir=$(INSTALL_MOD_PATH)/lib/modules/@LINUX_VERSION@; \
for objdir in $(ZFS_MODULES); do \ for objdir in $(ZFS_MODULES); do \
$(RM) -R $$kmoddir/$(INSTALL_MOD_DIR)/$$objdir; \ $(RM) -R $$kmoddir/$(INSTALL_MOD_DIR)/$$objdir; \
done done