Skip to contentSkip to conversation

kbuild: fix the binrpm-pkg target to work with KBUILD_OUTPUT set

PATCH RESEND Applied Frans Pop 2 participants 2 messages Aug 25, 2009 – Sep 27, 2009 Kbuild

lore
Share & tools
lore

Frans Pop

author
#0 lore raw

PATCH RESEND 1/1 kbuild: fix the binrpm-pkg target to work with KBUILD_OUTPUT set

The binrpm-pkg target (binary RPM only) fails when called with KBUILD_OUTPUT set. This patch makes it work.

For the rpm-pkg target (source + binary RPM), building with KBUILD_OUTPUT set is not possible and also not needed as the actual build is done in a temporary directory anyway, so check that KBUILD_OUTPUT is not set in that case to avoid later errors.

---

I ran into this while trying if I could build an RPM kernel package on my Debian notebook :-)

The patch has been tested by doing three builds:
- make -j4 rpm-pkg
- make -j4 binrpm-pkg
- KBUILD_OUTPUT=../builds/amd64 make -j4 binrpm-pkg

For all three the contents of the resulting binary RPM package was identical
(and looked correct); the source RPM package from the first build looked sane.

A 'KBUILD_OUTPUT=../builds/amd64 make -j4 rpm-pkg' fails as intended.

One open issue is that the following commands should IIUC be identical, but the second one does not work:
- KBUILD_OUTPUT=../builds/amd64 make -j4 binrpm-pkg
- make -j4 O=../builds/amd64 binrpm-pkg

AFAICT the root Makefile is supposed to set KBUILD_OUTPUT based on O=, but that is not visible when the lines within the binrpm-pkg target are executed.
My make foo was not strong enough to debug this. Sam, do you know?

Cheers,
FJP

scripts/package/Makefile +9 -0
index fa4a0a1..b305c57 100644
@@ -18,6 +18,9 @@
 # e) generate the rpm files, based on kernel.spec
 # - Use /. to avoid tar packing just the symlink
 
+# Note that the rpm-pkg target cannot be used with KBUILD_OUTPUT,
+# but the binrpm-pkg target can; for some reason O= gets ignored.
+
 # Do we have rpmbuild, otherwise fall back to the older rpm
 RPM := $(shell if [ -x "/usr/bin/rpmbuild" ]; then echo rpmbuild; \
 	           else echo rpm; fi)
@@ -33,6 +36,12 @@ $(objtree)/kernel.spec: $(MKSPEC) $(srctree)/Makefile
 	$(CONFIG_SHELL) $(MKSPEC) > $@
 
 rpm-pkg rpm: $(objtree)/kernel.spec FORCE
+	@if test -n "$(KBUILD_OUTPUT)"; then \
+		echo "Building source + binary RPM is not possible outside the"; \
+		echo "kernel source tree. Don't set KBUILD_OUTPUT, or use the"; \
+		echo "binrpm-pkg target instead."; \
+		false; \
+	fi
 	$(MAKE) clean
 	$(PREV) ln -sf $(srctree) $(KERNELPATH)
 	$(CONFIG_SHELL) $(srctree)/scripts/setlocalversion > 

$(objtree)/.scmversion
@@ -61,7 +70,7 @@ binrpm-pkg: $(objtree)/binkernel.spec FORCE
set -e; \
mv -f $(objtree)/.tmp_version $(objtree)/.version

- $(RPM) $(RPMOPTS) --define "_builddir $(srctree)" --target \
+ $(RPM) $(RPMOPTS) --define "_builddir $(objtree)" --target \
$(UTS_MACHINE) -bb $<

clean-files += $(objtree)/binkernel.spec

scripts/package/mkspec +0 -0
index 3d93f8c..ce9c60e 100755
@@ -70,7 +70,7 @@ echo 'mkdir -p $RPM_BUILD_ROOT/boot 

$RPM_BUILD_ROOT/lib/modules'
echo 'mkdir -p $RPM_BUILD_ROOT/lib/firmware'
echo "%endif"

-echo 'INSTALL_MOD_PATH=$RPM_BUILD_ROOT make %{_smp_mflags} modules_install'
+echo 'INSTALL_MOD_PATH=$RPM_BUILD_ROOT make %{_smp_mflags} KBUILD_SRC= modules_install'
echo "%ifarch ia64"
echo 'cp $KBUILD_IMAGE $RPM_BUILD_ROOT'"/boot/efi/vmlinuz-$KERNELRELEASE" echo 'ln -s '"efi/vmlinuz-$KERNELRELEASE" '$RPM_BUILD_ROOT'"/boot/"

Applied
#1 lore raw
Quoted 9 lines · Frans Pop

The binrpm-pkg target (binary RPM only) fails when called with KBUILD_OUTPUT set. This patch makes it work.

For the rpm-pkg target (source + binary RPM), building with KBUILD_OUTPUT set is not possible and also not needed as the actual build is done in a temporary directory anyway, so check that KBUILD_OUTPUT is not set in that case to avoid later errors.

Applied.

Quoted 22 lines

---

I ran into this while trying if I could build an RPM kernel package on my Debian notebook :-)

The patch has been tested by doing three builds:
- make -j4 rpm-pkg
- make -j4 binrpm-pkg
- KBUILD_OUTPUT=../builds/amd64 make -j4 binrpm-pkg

For all three the contents of the resulting binary RPM package was identical
(and looked correct); the source RPM package from the first build looked sane.

A 'KBUILD_OUTPUT=../builds/amd64 make -j4 rpm-pkg' fails as intended.

One open issue is that the following commands should IIUC be identical, but the second one does not work:
- KBUILD_OUTPUT=../builds/amd64 make -j4 binrpm-pkg
- make -j4 O=../builds/amd64 binrpm-pkg

Quoted 4 lines

AFAICT the root Makefile is supposed to set KBUILD_OUTPUT based on O=, but that is not visible when the lines within the binrpm-pkg target are executed.
My make foo was not strong enough to debug this. Sam, do you know?

I did not look into this - there is too much other stuff pending.

Sam