fakeroot: fix to work with glibc 2.33
authorIlya Lipnitskiy <ilya.lipnitskiy@gmail.com>
Sun, 14 Feb 2021 04:41:03 +0000 (20:41 -0800)
committerFelix Fietkau <nbd@nbd.name>
Mon, 15 Feb 2021 06:39:43 +0000 (07:39 +0100)
commit43dc26af6381f720adf4fe1dd2ea72ff0e45bb40
treed7a2f8e46802d67d3b4e46f7c11d49dc86042bf6
parent0052daae6044cac4c05e1a7f63cff1ee1c6c5df8
fakeroot: fix to work with glibc 2.33

The following commit removed _STAT_VER definitions from glibc:
https://sourceware.org/git/?p=glibc.git;a=commitdiff;h=8ed005daf0ab03e142500324a34087ce179ae78e

That subsequently broke fakeroot:
https://bugs.archlinux.org/task/69572
https://bugzilla.redhat.com/show_bug.cgi?id=1889862#c13
https://forum.openwrt.org/t/unable-to-build-toolchain-fakeroot-fails-perhaps-others-after-it/87966

Make the patch based on Jan Pazdziora's suggestion from here:
https://lists.fedoraproject.org/archives/list/devel@lists.fedoraproject.org/message/SMQ3RYXEYTVZH6PLQMKNB3NM4XLPMNZO/

Add wrappers for newly exported symbols in glibc.

Apply patch from Debian to fix warnings in fts_read and fts_children:
https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=676428
https://sources.debian.org/patches/fakeroot/1.25.3-1.1/eglibc-fts-without-LFS/

Fix __xmknod{,at} dev pointer argument. Switch default to assume * and
not the absence of *. On glibc 2.33+, there is no definition for these
functions in header files, so the compile test doesn't work. But, we
can default to using the pointer (as is the case with newer glibc), and
use the header file on older platforms to fail the test and use no pointer.

Tested on my x86_64 Arch Linux machine, fakeroot unit tests pass.
Also tested by building various .ipks and examining the tar contents, to
ensure that the owner uid/gid was 0/0.

Signed-off-by: Ilya Lipnitskiy <ilya.lipnitskiy@gmail.com>
tools/fakeroot/patches/300-glibc-2.33-compatibility.patch [new file with mode: 0644]