[pkg-wine-party] Bug#833956: wine-development: FTBFS on hurd-i386 and kfreebsd-i386

Pino Toscano pino at debian.org
Wed Aug 10 20:41:09 UTC 2016


In data mercoledì 10 agosto 2016 22:20:10 CEST, Jens Reyer ha scritto:
> ~~~~~
> gcc -c -o virtual.o virtual.c -I. -I../../include -D__WINESRC__ -D_NTSYSTEM_ -D_REENTRANT -fPIC -Wall \
>   -pipe -fno-strict-aliasing -Wdeclaration-after-statement -Wempty-body -Wignored-qualifiers \
>   -Wstrict-prototypes -Wtype-limits -Wunused-but-set-parameter -Wvla -Wwrite-strings -Wpointer-arith \
>   -Wlogical-op -gdwarf-2 -gstrict-dwarf -fno-omit-frame-pointer -Werror -Wdate-time -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -Wno-error
> virtual.c: In function 'virtual_get_system_info':
> virtual.c:1363:20: error: storage size of 'sinfo' isn't known
>      struct sysinfo sinfo;
>                     ^
> virtual.c:1372:10: warning: implicit declaration of function 'sysinfo' [-Wimplicit-function-declaration]
>      if (!sysinfo(&sinfo))
>           ^
> virtual.c:1363:20: warning: unused variable 'sinfo' [-Wunused-variable]
>      struct sysinfo sinfo;
>                     ^
> Makefile:711: recipe for target 'virtual.o' failed
> ~~~~~

sysinfo(2) is strictly specific to Linux.

> The code is only called conditionally (ifdef HAVE_SYS_SYSINFO_H).
> It has "include <sys/sysinfo.h>", which is provided in:
> /usr/include/i386-gnu/sys/sysinfo.h           libc0.3-dev [hurd-i386] 
> /usr/include/i386-kfreebsd-gnu/sys/sysinfo.h  libc0.1-dev [kfreebsd-i386] 
> However "totalram" and "mem_unit" are only in:
> /usr/include/linux/sysinfo.h                  linux-libc-dev
> So sysinfo.h exists on hurd/kfreebsd, but doesn't provide everything
> necessary!? Is there a fix for this, or should we disable this code
> on hurd/kfreebsd explicitly? Or am I on a completely wrong track here?

Headers in sys/ and bits/ usually are implementations for the platform;
since sys/sysinfo.h is not standard, you cannot assume that it exists
only on a platform, nor what it provides.  In this case, the upstream
check is wrong: it should not check for sys/sysinfo.h and assume it's
a Linux-ish implementation, but either:
a) just limit the implementation to Linux unconditionally (as in the
   busybox code
b) check for sys/sysinfo.h *and* sysinfo() in it
Considering sysinfo() is not portable anyway, (b) might fail one day
if a platform provide a different implementation with the same name
(it's not standard after all).

Hope it helps -- feel free to ask more.

Pino Toscano
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 819 bytes
Desc: This is a digitally signed message part.
URL: <http://lists.alioth.debian.org/pipermail/pkg-wine-party/attachments/20160810/f022f263/attachment.sig>

More information about the pkg-wine-party mailing list