Skip to content

Commit

Permalink
kbuild: deb-pkg: set DEB_* variables if debian/rules is directly exec…
Browse files Browse the repository at this point in the history
…uted

Since commit 491b146 ("kbuild: builddeb: Eliminate debian/arch
use"), direct execution of debian/rules results in the following error:

  dpkg-architecture: error: unknown option 'DEB_HOST_MULTIARCH'

The current code:

  dpkg-architecture -a$DEB_HOST_ARCH -qDEB_HOST_MULTIARCH

... does not look sensible because:

 - For this code to work correctly, DEB_HOST_ARCH must be pre-defined,
   which is true when the packages are built via dpkg-buildpackage.
   In this case, DEB_HOST_MULTIARCH is also likely defined, hence there
   is no need to query DEB_HOST_MULTIARCH in the first place.

 - If DEB_HOST_MULTIARCH is undefined, DEB_HOST_ARCH is likely undefined
   too. So, you cannot query DEB_HOST_MULTIARCH in this way. This is
   mostly the case where debian/rules is directly executed.

When debian/rules is directly executed, querying DEB_HOST_MUCHARCH is
not enough because we need to know DEB_{BUILD,HOST}_GNU_TYPE as well.

All DEB_* variables are defined when the package build is initiated by
dpkg-buildpackage, but otherwise, let's call dpkg-architecture to set
all DEB_* environment variables.

This requires dpkg 1.20.6 or newer because --print-format option
was added in dpkg commit 7c54fa2b232e ("dpkg-architecture: Add a
--print-format option").

Signed-off-by: Masahiro Yamada <masahiroy@kernel.org>
Reviewed-by: Nicolas Schier <n.schier@avm.de>
  • Loading branch information
Masahiro Yamada committed Jan 5, 2024
1 parent 7d4f07d commit 159956f
Show file tree
Hide file tree
Showing 2 changed files with 14 additions and 4 deletions.
5 changes: 2 additions & 3 deletions scripts/package/builddeb
Original file line number Diff line number Diff line change
Expand Up @@ -171,9 +171,8 @@ install_libc_headers () {

# move asm headers to /usr/include/<libc-machine>/asm to match the structure
# used by Debian-based distros (to support multi-arch)
host_arch=$(dpkg-architecture -a$DEB_HOST_ARCH -qDEB_HOST_MULTIARCH)
mkdir $pdir/usr/include/$host_arch
mv $pdir/usr/include/asm $pdir/usr/include/$host_arch/
mkdir "$pdir/usr/include/${DEB_HOST_MULTIARCH}"
mv "$pdir/usr/include/asm" "$pdir/usr/include/${DEB_HOST_MULTIARCH}"
}

rm -f debian/files
Expand Down
13 changes: 12 additions & 1 deletion scripts/package/debian/rules
Original file line number Diff line number Diff line change
Expand Up @@ -30,5 +30,16 @@ build-arch:

.PHONY: clean
clean:
rm -rf debian/files debian/linux-*
rm -rf debian/files debian/linux-* debian/deb-env.vars*
$(MAKE) -f $(srctree)/Makefile ARCH=$(ARCH) clean

# If DEB_HOST_ARCH is empty, it is likely that debian/rules was executed
# directly. Run 'dpkg-architecture --print-set --print-format=make' to
# generate a makefile construct that exports all DEB_* variables.
ifndef DEB_HOST_ARCH
include debian/deb-env.vars

debian/deb-env.vars:
dpkg-architecture -a$$(cat debian/arch) --print-set --print-format=make > $@.tmp
mv $@.tmp $@
endif

0 comments on commit 159956f

Please sign in to comment.