Message ID | 20231226135243.1393780-3-masahiroy@kernel.org (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | [1/6] kbuild: deb-pkg: factor out common Make options in debian/rules | expand |
On Tue, Dec 26, 2023 at 10:52:40PM +0900, Masahiro Yamada wrote: > Since commit 491b146d4c13 ("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 implementation relies on dpkg commit 7c54fa2b232e > ("dpkg-architecture: Add a --print-format option"). > > Signed-off-by: Masahiro Yamada <masahiroy@kernel.org> > --- > > scripts/package/builddeb | 5 ++--- > scripts/package/debian/rules | 12 +++++++++++- > 2 files changed, 13 insertions(+), 4 deletions(-) > > diff --git a/scripts/package/builddeb b/scripts/package/builddeb > index 2fe51e6919da..2eb4910f0ef3 100755 > --- a/scripts/package/builddeb > +++ b/scripts/package/builddeb > @@ -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 > diff --git a/scripts/package/debian/rules b/scripts/package/debian/rules > index 529b71b55efa..8f24a8e84bf2 100755 > --- a/scripts/package/debian/rules > +++ b/scripts/package/debian/rules > @@ -30,5 +30,15 @@ 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 > $@ > +endif > -- > 2.40.1 Thanks! Reviewed-by: Nicolas Schier <n.schier@avm.de>
diff --git a/scripts/package/builddeb b/scripts/package/builddeb index 2fe51e6919da..2eb4910f0ef3 100755 --- a/scripts/package/builddeb +++ b/scripts/package/builddeb @@ -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 diff --git a/scripts/package/debian/rules b/scripts/package/debian/rules index 529b71b55efa..8f24a8e84bf2 100755 --- a/scripts/package/debian/rules +++ b/scripts/package/debian/rules @@ -30,5 +30,15 @@ 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 > $@ +endif
Since commit 491b146d4c13 ("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 implementation relies on dpkg commit 7c54fa2b232e ("dpkg-architecture: Add a --print-format option"). Signed-off-by: Masahiro Yamada <masahiroy@kernel.org> --- scripts/package/builddeb | 5 ++--- scripts/package/debian/rules | 12 +++++++++++- 2 files changed, 13 insertions(+), 4 deletions(-)