[Buildroot] [PATCH 1/1] package/pkg-utils.mk: fix per-package build with ncurses
Arnout Vandecappelle
arnout at mind.be
Mon Aug 30 09:20:54 UTC 2021
On 29/08/2021 21:37, Yann E. MORIN wrote:
> Fabrice, All,
>
> +Hervé, +Thomas, +Arnout, +Romain
>
> Thanks for this patch, that is a very good example of a very tricky
> problem we've been stumbling upon since we started doing top-level
> parallel builds...
>
> On 2021-08-29 20:39 +0200, Fabrice Fontaine spake thusly:
>> Fix per-package build with ncurses and toolchains providing ncurses.h by
>> adding --update parameter to rsync call. Indeed, without this parameter,
>> the curses.h file installed by ncurses (with wchar support) could be
>> overriden by a curses.h file provided by the toolchain (without wchar
>> support) resulting in the following build failure on bmon or rtorrent:
>>
>> rsync -a --link-dest=/tmp/instance-0/output-1/per-package/host-pkgconf/host/ /tmp/instance-0/output-1/per-package/host-pkgconf/host/ /tmp/instance-0/output-1/per-package/rtorrent/host
>> rsync -a --link-dest=/tmp/instance-0/output-1/per-package/host-skeleton/host/ /tmp/instance-0/output-1/per-package/host-skeleton/host/ /tmp/instance-0/output-1/per-package/rtorrent/host
>> rsync -a --link-dest=/tmp/instance-0/output-1/per-package/libcurl/host/ /tmp/instance-0/output-1/per-package/libcurl/host/ /tmp/instance-0/output-1/per-package/rtorrent/host
>> rsync -a --link-dest=/tmp/instance-0/output-1/per-package/libtorrent/host/ /tmp/instance-0/output-1/per-package/libtorrent/host/ /tmp/instance-0/output-1/per-package/rtorrent/host
>> rsync -a --link-dest=/tmp/instance-0/output-1/per-package/ncurses/host/ /tmp/instance-0/output-1/per-package/ncurses/host/ /tmp/instance-0/output-1/per-package/rtorrent/host
>> rsync -a --link-dest=/tmp/instance-0/output-1/per-package/skeleton/host/ /tmp/instance-0/output-1/per-package/skeleton/host/ /tmp/instance-0/output-1/per-package/rtorrent/host
>> rsync -a --link-dest=/tmp/instance-0/output-1/per-package/toolchain/host/ /tmp/instance-0/output-1/per-package/toolchain/host/ /tmp/instance-0/output-1/per-package/rtorrent/host
>
> So, if we had had file overwrite detection in place (which I have been
> reviewing and testing this WE), the build would have failed earlier, at
> the end of the install step of ncurses, with:
>
> /home/ymorin/dev/buildroot/O/per-package/ncurses/host/riscv64-buildroot-linux-gnu/sysroot/usr/lib/pkgconfig/ncurses.pc: FAILED
> /home/ymorin/dev/buildroot/O/per-package/ncurses/host/riscv64-buildroot-linux-gnu/sysroot/usr/lib/pkgconfig/menu.pc: FAILED
> /home/ymorin/dev/buildroot/O/per-package/ncurses/host/riscv64-buildroot-linux-gnu/sysroot/usr/lib/pkgconfig/form.pc: FAILED
> /home/ymorin/dev/buildroot/O/per-package/ncurses/host/riscv64-buildroot-linux-gnu/sysroot/usr/lib/pkgconfig/panel.pc: FAILED
> /home/ymorin/dev/buildroot/O/per-package/ncurses/host/riscv64-buildroot-linux-gnu/sysroot/usr/include/curses.h: FAILED
> /home/ymorin/dev/buildroot/O/per-package/ncurses/host/riscv64-buildroot-linux-gnu/sysroot/usr/include/term.h: FAILED
> md5sum: WARNING: 6 computed checksums did NOT match
> ERROR: package ncurses has overwritten files installed by a previous package, aborting.
> make[1]: *** [package/pkg-generic.mk:467: /home/ymorin/dev/buildroot/O/build/ncurses-6.1/.stamp_installed] Error 1
> make: *** [Makefile:23: _all] Error 2
>
>> [...]
>>
>> checking for NcursesW wide-character library... yes
>> checking for working ncursesw/curses.h... no
>> checking for working ncursesw.h... no
>> checking for working ncurses.h... no
>> configure: WARNING: could not find a working ncursesw/curses.h, ncursesw.h or ncurses.h
>>
>> Fixes:
>> - http://autobuild.buildroot.org/results/8c0d13e3cc3ddd2a21f99477cad4e39522e9deec
>> - http://autobuild.buildroot.org/results/d2f18ccad6a0330d78e97d70c810ac89b84d2261
>>
>> Signed-off-by: Fabrice Fontaine <fontaine.fabrice at gmail.com>
>> ---
>> package/pkg-utils.mk | 2 +-
>> 1 file changed, 1 insertion(+), 1 deletion(-)
>>
>> diff --git a/package/pkg-utils.mk b/package/pkg-utils.mk
>> index ae3c7f9da9..5af34d4ee0 100644
>> --- a/package/pkg-utils.mk
>> +++ b/package/pkg-utils.mk
>> @@ -184,7 +184,7 @@ ifeq ($(BR2_PER_PACKAGE_DIRECTORIES),y)
>> define per-package-rsync
>> mkdir -p $(3)
>> $(foreach pkg,$(1),\
>> - rsync -a --link-dest=$(PER_PACKAGE_DIR)/$(pkg)/$(2)/ \
>> + rsync -au --link-dest=$(PER_PACKAGE_DIR)/$(pkg)/$(2)/ \
>
> Sorry, this is not the correct solution. Indeed, we can not accept that
> a package overwrites a file provided by another package. See the
> explanations Thomas and I discussed earlier today:
>
> https://lore.kernel.org/buildroot/20210829133955.74d921e9@windsurf/
> https://lore.kernel.org/buildroot/20210829164031.GB1053080@scaer/
>
> This case is however very special, and I have no idea (yet) on what the
> best solution is. I guess the curses headers in the toolchain are due to
> the presence of gdb with TUI support...
>
> I would be tempted to say "this toolchain is not pure, we can't use it",
> and defer to the Bootlin toolchain builder project to fix their
> toolchains, but this is probably a bit of shuffling the dust under the
> rag...
>
> So, any input and insight would be appreciated...
I think we need to start a wiki page for this discussion, on the mailing list
the conclusions will get lost too easily... I don't have time for that now
though, maybe tonight.
Regards,
Arnout
>
> Regards,
> Yann E. MORIN.
>
>> $(PER_PACKAGE_DIR)/$(pkg)/$(2)/ \
>> $(3)$(sep))
>> endef
>> --
>> 2.32.0
>>
>> _______________________________________________
>> buildroot mailing list
>> buildroot at busybox.net
>> http://lists.busybox.net/mailman/listinfo/buildroot
>
More information about the buildroot
mailing list