Source: fakeroot
Version: 1.25.2-1
Severity: serious
Tags: patch ftbfs
Justification: fails to build from source (but built successfully in the past)

Hi,

The latest upload of fakeroot got support for statx added, thanks for
that. Unfortunately it doesn't work on mipsel, as spotted by the
testsuite:

| make[5]: Entering directory '/<<PKGBUILDDIR>>/obj-sysv/test'
| FAIL: t.chmod_dev
| PASS: t.cp-a
| PASS: t.echoarg
| PASS: t.falsereturn
| FAIL: t.mknod
| PASS: t.no_ld_preload
| PASS: t.no_ld_preload_link
| PASS: t.option
| PASS: t.tar
| PASS: t.touchinstall
| PASS: t.truereturn
| PASS: t.xattr
| ============================================================================
| Testsuite summary for fakeroot 1.25.2
| ============================================================================
| # TOTAL: 12
| # PASS:  10
| # SKIP:  0
| # XFAIL: 0
| # FAIL:  2
| # XPASS: 0
| # ERROR: 0
| ============================================================================
| See test/test-suite.log
| Please report to cl...@debian.org
| ============================================================================

The full build log is available there:
https://buildd.debian.org/status/fetch.php?pkg=fakeroot&arch=mipsel&ver=1.25.2-1&stamp=1601883875&raw=0

The issue is due to mixes between struct stat and INT_STRUCT_STAT as
spotted by this warning:

| ../libfakeroot.c: In function ‘statx’:
| ../libfakeroot.c:2466:17: warning: passing argument 1 of ‘send_get_stat’ from 
incompatible pointer type [-Wincompatible-pointer-types]
|  2466 |   SEND_GET_STAT(&st,ver);
|       |                 ^~~
|       |                 |
|       |                 struct stat64 *
| ../libfakeroot.c:88:42: note: in definition of macro ‘SEND_GET_STAT’
|    88 | #define SEND_GET_STAT(a,b) send_get_stat(a)
|       |                                          ^
| In file included from ../libfakeroot.c:60:
| ../communicate.h:174:40: note: expected ‘struct stat *’ but argument is of 
type ‘struct stat64 *’
|   174 | extern void send_get_stat(struct stat *buf);
|       |                           ~~~~~~~~~~~~~^~~

The attached patch fixes the issue. With it the warning is gone, the
testsuite passes and the package builds successfully on mipsel.

Regards,
Aurelien
--- fakeroot-1.25.2.orig/libfakeroot.c
+++ fakeroot-1.25.2/libfakeroot.c
@@ -102,6 +102,7 @@
 #define INT_NEXT_FSTATAT(a,b,c,d) NEXT_FSTATAT64(_STAT_VER,a,b,c,d)
 #define INT_SEND_STAT(a,b) SEND_STAT64(a,b,_STAT_VER)
 #define INT_SEND_GET_XATTR(a,b) SEND_GET_XATTR64(a,b,_STAT_VER)
+#define INT_SEND_GET_STAT(a,b) SEND_GET_STAT64(a,b)
 #else
 #define INT_STRUCT_STAT struct stat
 #define INT_NEXT_STAT(a,b) NEXT_STAT(_STAT_VER,a,b)
@@ -110,6 +111,7 @@
 #define INT_NEXT_FSTATAT(a,b,c,d) NEXT_FSTATAT(_STAT_VER,a,b,c,d)
 #define INT_SEND_STAT(a,b) SEND_STAT(a,b,_STAT_VER)
 #define INT_SEND_GET_XATTR(a,b) SEND_GET_XATTR(a,b,_STAT_VER)
+#define INT_SEND_GET_STAT(a,b) SEND_GET_STAT(a,b)
 #endif
 
 #include <stdlib.h>
@@ -2463,7 +2465,7 @@ int statx (int dirfd, const char *path,
   r=INT_NEXT_FSTATAT(dirfd, path, &st, flags);
   if(r)
     return -1;
-  SEND_GET_STAT(&st,ver);
+  INT_SEND_GET_STAT(&st,ver);
 
   r=next_statx(dirfd, path, flags, mask, buf);
   if(r)

Reply via email to